mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-05-19 16:30:50 +02:00
[net] Move ConnectionType to its own file
This commit is contained in:
parent
a3c2707039
commit
c741d748d4
@ -139,6 +139,7 @@ BITCOIN_CORE_H = \
|
|||||||
compat/cpuid.h \
|
compat/cpuid.h \
|
||||||
compat/endian.h \
|
compat/endian.h \
|
||||||
compressor.h \
|
compressor.h \
|
||||||
|
node/connection_types.h \
|
||||||
consensus/consensus.h \
|
consensus/consensus.h \
|
||||||
consensus/tx_check.h \
|
consensus/tx_check.h \
|
||||||
consensus/tx_verify.h \
|
consensus/tx_verify.h \
|
||||||
@ -368,6 +369,7 @@ libbitcoin_node_a_SOURCES = \
|
|||||||
node/caches.cpp \
|
node/caches.cpp \
|
||||||
node/chainstate.cpp \
|
node/chainstate.cpp \
|
||||||
node/coin.cpp \
|
node/coin.cpp \
|
||||||
|
node/connection_types.cpp \
|
||||||
node/context.cpp \
|
node/context.cpp \
|
||||||
node/interfaces.cpp \
|
node/interfaces.cpp \
|
||||||
node/miner.cpp \
|
node/miner.cpp \
|
||||||
|
20
src/net.cpp
20
src/net.cpp
@ -576,26 +576,6 @@ void CConnman::AddWhitelistPermissionFlags(NetPermissionFlags& flags, const CNet
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string ConnectionTypeAsString(ConnectionType conn_type)
|
|
||||||
{
|
|
||||||
switch (conn_type) {
|
|
||||||
case ConnectionType::INBOUND:
|
|
||||||
return "inbound";
|
|
||||||
case ConnectionType::MANUAL:
|
|
||||||
return "manual";
|
|
||||||
case ConnectionType::FEELER:
|
|
||||||
return "feeler";
|
|
||||||
case ConnectionType::OUTBOUND_FULL_RELAY:
|
|
||||||
return "outbound-full-relay";
|
|
||||||
case ConnectionType::BLOCK_RELAY:
|
|
||||||
return "block-relay-only";
|
|
||||||
case ConnectionType::ADDR_FETCH:
|
|
||||||
return "addr-fetch";
|
|
||||||
} // no default case, so the compiler can warn about missing cases
|
|
||||||
|
|
||||||
assert(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
CService CNode::GetAddrLocal() const
|
CService CNode::GetAddrLocal() const
|
||||||
{
|
{
|
||||||
AssertLockNotHeld(m_addr_local_mutex);
|
AssertLockNotHeld(m_addr_local_mutex);
|
||||||
|
73
src/net.h
73
src/net.h
@ -9,6 +9,7 @@
|
|||||||
#include <chainparams.h>
|
#include <chainparams.h>
|
||||||
#include <common/bloom.h>
|
#include <common/bloom.h>
|
||||||
#include <compat.h>
|
#include <compat.h>
|
||||||
|
#include <node/connection_types.h>
|
||||||
#include <consensus/amount.h>
|
#include <consensus/amount.h>
|
||||||
#include <crypto/siphash.h>
|
#include <crypto/siphash.h>
|
||||||
#include <hash.h>
|
#include <hash.h>
|
||||||
@ -121,78 +122,6 @@ struct CSerializedNetMsg {
|
|||||||
std::string m_type;
|
std::string m_type;
|
||||||
};
|
};
|
||||||
|
|
||||||
/** Different types of connections to a peer. This enum encapsulates the
|
|
||||||
* information we have available at the time of opening or accepting the
|
|
||||||
* connection. Aside from INBOUND, all types are initiated by us.
|
|
||||||
*
|
|
||||||
* If adding or removing types, please update CONNECTION_TYPE_DOC in
|
|
||||||
* src/rpc/net.cpp and src/qt/rpcconsole.cpp, as well as the descriptions in
|
|
||||||
* src/qt/guiutil.cpp and src/bitcoin-cli.cpp::NetinfoRequestHandler. */
|
|
||||||
enum class ConnectionType {
|
|
||||||
/**
|
|
||||||
* Inbound connections are those initiated by a peer. This is the only
|
|
||||||
* property we know at the time of connection, until P2P messages are
|
|
||||||
* exchanged.
|
|
||||||
*/
|
|
||||||
INBOUND,
|
|
||||||
|
|
||||||
/**
|
|
||||||
* These are the default connections that we use to connect with the
|
|
||||||
* network. There is no restriction on what is relayed; by default we relay
|
|
||||||
* blocks, addresses & transactions. We automatically attempt to open
|
|
||||||
* MAX_OUTBOUND_FULL_RELAY_CONNECTIONS using addresses from our AddrMan.
|
|
||||||
*/
|
|
||||||
OUTBOUND_FULL_RELAY,
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* We open manual connections to addresses that users explicitly requested
|
|
||||||
* via the addnode RPC or the -addnode/-connect configuration options. Even if a
|
|
||||||
* manual connection is misbehaving, we do not automatically disconnect or
|
|
||||||
* add it to our discouragement filter.
|
|
||||||
*/
|
|
||||||
MANUAL,
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Feeler connections are short-lived connections made to check that a node
|
|
||||||
* is alive. They can be useful for:
|
|
||||||
* - test-before-evict: if one of the peers is considered for eviction from
|
|
||||||
* our AddrMan because another peer is mapped to the same slot in the tried table,
|
|
||||||
* evict only if this longer-known peer is offline.
|
|
||||||
* - move node addresses from New to Tried table, so that we have more
|
|
||||||
* connectable addresses in our AddrMan.
|
|
||||||
* Note that in the literature ("Eclipse Attacks on Bitcoin’s Peer-to-Peer Network")
|
|
||||||
* only the latter feature is referred to as "feeler connections",
|
|
||||||
* although in our codebase feeler connections encompass test-before-evict as well.
|
|
||||||
* We make these connections approximately every FEELER_INTERVAL:
|
|
||||||
* first we resolve previously found collisions if they exist (test-before-evict),
|
|
||||||
* otherwise we connect to a node from the new table.
|
|
||||||
*/
|
|
||||||
FEELER,
|
|
||||||
|
|
||||||
/**
|
|
||||||
* We use block-relay-only connections to help prevent against partition
|
|
||||||
* attacks. By not relaying transactions or addresses, these connections
|
|
||||||
* are harder to detect by a third party, thus helping obfuscate the
|
|
||||||
* network topology. We automatically attempt to open
|
|
||||||
* MAX_BLOCK_RELAY_ONLY_ANCHORS using addresses from our anchors.dat. Then
|
|
||||||
* addresses from our AddrMan if MAX_BLOCK_RELAY_ONLY_CONNECTIONS
|
|
||||||
* isn't reached yet.
|
|
||||||
*/
|
|
||||||
BLOCK_RELAY,
|
|
||||||
|
|
||||||
/**
|
|
||||||
* AddrFetch connections are short lived connections used to solicit
|
|
||||||
* addresses from peers. These are initiated to addresses submitted via the
|
|
||||||
* -seednode command line argument, or under certain conditions when the
|
|
||||||
* AddrMan is empty.
|
|
||||||
*/
|
|
||||||
ADDR_FETCH,
|
|
||||||
};
|
|
||||||
|
|
||||||
/** Convert ConnectionType enum to a string value */
|
|
||||||
std::string ConnectionTypeAsString(ConnectionType conn_type);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Look up IP addresses from all interfaces on the machine and add them to the
|
* Look up IP addresses from all interfaces on the machine and add them to the
|
||||||
* list of local addresses to self-advertise.
|
* list of local addresses to self-advertise.
|
||||||
|
26
src/node/connection_types.cpp
Normal file
26
src/node/connection_types.cpp
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
// Copyright (c) 2022 The Bitcoin Core developers
|
||||||
|
// Distributed under the MIT software license, see the accompanying
|
||||||
|
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||||
|
|
||||||
|
#include <node/connection_types.h>
|
||||||
|
#include <cassert>
|
||||||
|
|
||||||
|
std::string ConnectionTypeAsString(ConnectionType conn_type)
|
||||||
|
{
|
||||||
|
switch (conn_type) {
|
||||||
|
case ConnectionType::INBOUND:
|
||||||
|
return "inbound";
|
||||||
|
case ConnectionType::MANUAL:
|
||||||
|
return "manual";
|
||||||
|
case ConnectionType::FEELER:
|
||||||
|
return "feeler";
|
||||||
|
case ConnectionType::OUTBOUND_FULL_RELAY:
|
||||||
|
return "outbound-full-relay";
|
||||||
|
case ConnectionType::BLOCK_RELAY:
|
||||||
|
return "block-relay-only";
|
||||||
|
case ConnectionType::ADDR_FETCH:
|
||||||
|
return "addr-fetch";
|
||||||
|
} // no default case, so the compiler can warn about missing cases
|
||||||
|
|
||||||
|
assert(false);
|
||||||
|
}
|
82
src/node/connection_types.h
Normal file
82
src/node/connection_types.h
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
// Copyright (c) 2022 The Bitcoin Core developers
|
||||||
|
// Distributed under the MIT software license, see the accompanying
|
||||||
|
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||||
|
|
||||||
|
#ifndef BITCOIN_NODE_CONNECTION_TYPES_H
|
||||||
|
#define BITCOIN_NODE_CONNECTION_TYPES_H
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
/** Different types of connections to a peer. This enum encapsulates the
|
||||||
|
* information we have available at the time of opening or accepting the
|
||||||
|
* connection. Aside from INBOUND, all types are initiated by us.
|
||||||
|
*
|
||||||
|
* If adding or removing types, please update CONNECTION_TYPE_DOC in
|
||||||
|
* src/rpc/net.cpp and src/qt/rpcconsole.cpp, as well as the descriptions in
|
||||||
|
* src/qt/guiutil.cpp and src/bitcoin-cli.cpp::NetinfoRequestHandler. */
|
||||||
|
enum class ConnectionType {
|
||||||
|
/**
|
||||||
|
* Inbound connections are those initiated by a peer. This is the only
|
||||||
|
* property we know at the time of connection, until P2P messages are
|
||||||
|
* exchanged.
|
||||||
|
*/
|
||||||
|
INBOUND,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* These are the default connections that we use to connect with the
|
||||||
|
* network. There is no restriction on what is relayed; by default we relay
|
||||||
|
* blocks, addresses & transactions. We automatically attempt to open
|
||||||
|
* MAX_OUTBOUND_FULL_RELAY_CONNECTIONS using addresses from our AddrMan.
|
||||||
|
*/
|
||||||
|
OUTBOUND_FULL_RELAY,
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* We open manual connections to addresses that users explicitly requested
|
||||||
|
* via the addnode RPC or the -addnode/-connect configuration options. Even if a
|
||||||
|
* manual connection is misbehaving, we do not automatically disconnect or
|
||||||
|
* add it to our discouragement filter.
|
||||||
|
*/
|
||||||
|
MANUAL,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Feeler connections are short-lived connections made to check that a node
|
||||||
|
* is alive. They can be useful for:
|
||||||
|
* - test-before-evict: if one of the peers is considered for eviction from
|
||||||
|
* our AddrMan because another peer is mapped to the same slot in the tried table,
|
||||||
|
* evict only if this longer-known peer is offline.
|
||||||
|
* - move node addresses from New to Tried table, so that we have more
|
||||||
|
* connectable addresses in our AddrMan.
|
||||||
|
* Note that in the literature ("Eclipse Attacks on Bitcoin’s Peer-to-Peer Network")
|
||||||
|
* only the latter feature is referred to as "feeler connections",
|
||||||
|
* although in our codebase feeler connections encompass test-before-evict as well.
|
||||||
|
* We make these connections approximately every FEELER_INTERVAL:
|
||||||
|
* first we resolve previously found collisions if they exist (test-before-evict),
|
||||||
|
* otherwise we connect to a node from the new table.
|
||||||
|
*/
|
||||||
|
FEELER,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* We use block-relay-only connections to help prevent against partition
|
||||||
|
* attacks. By not relaying transactions or addresses, these connections
|
||||||
|
* are harder to detect by a third party, thus helping obfuscate the
|
||||||
|
* network topology. We automatically attempt to open
|
||||||
|
* MAX_BLOCK_RELAY_ONLY_ANCHORS using addresses from our anchors.dat. Then
|
||||||
|
* addresses from our AddrMan if MAX_BLOCK_RELAY_ONLY_CONNECTIONS
|
||||||
|
* isn't reached yet.
|
||||||
|
*/
|
||||||
|
BLOCK_RELAY,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AddrFetch connections are short lived connections used to solicit
|
||||||
|
* addresses from peers. These are initiated to addresses submitted via the
|
||||||
|
* -seednode command line argument, or under certain conditions when the
|
||||||
|
* AddrMan is empty.
|
||||||
|
*/
|
||||||
|
ADDR_FETCH,
|
||||||
|
};
|
||||||
|
|
||||||
|
/** Convert ConnectionType enum to a string value */
|
||||||
|
std::string ConnectionTypeAsString(ConnectionType conn_type);
|
||||||
|
|
||||||
|
#endif // BITCOIN_NODE_CONNECTION_TYPES_H
|
Loading…
x
Reference in New Issue
Block a user