mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-03-28 02:32:14 +01: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/endian.h \
|
||||
compressor.h \
|
||||
node/connection_types.h \
|
||||
consensus/consensus.h \
|
||||
consensus/tx_check.h \
|
||||
consensus/tx_verify.h \
|
||||
@ -368,6 +369,7 @@ libbitcoin_node_a_SOURCES = \
|
||||
node/caches.cpp \
|
||||
node/chainstate.cpp \
|
||||
node/coin.cpp \
|
||||
node/connection_types.cpp \
|
||||
node/context.cpp \
|
||||
node/interfaces.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
|
||||
{
|
||||
AssertLockNotHeld(m_addr_local_mutex);
|
||||
|
73
src/net.h
73
src/net.h
@ -9,6 +9,7 @@
|
||||
#include <chainparams.h>
|
||||
#include <common/bloom.h>
|
||||
#include <compat.h>
|
||||
#include <node/connection_types.h>
|
||||
#include <consensus/amount.h>
|
||||
#include <crypto/siphash.h>
|
||||
#include <hash.h>
|
||||
@ -121,78 +122,6 @@ struct CSerializedNetMsg {
|
||||
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
|
||||
* 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