35#include <util/threadinterrupt.h>
38#include <condition_variable>
49#include <unordered_set>
141 std::vector<unsigned char>
data;
262 size_t GetMemoryUsage() const noexcept;
283 virtual bool ReceivedMessageComplete() const = 0;
371 virtual size_t GetSendMemoryUsage() const noexcept = 0;
376 virtual bool ShouldReconnectV1() const noexcept = 0;
434 return WITH_LOCK(m_recv_mutex,
return CompleteInternal());
437 Info GetInfo() const noexcept
override;
458 bool ShouldReconnectV1() const noexcept
override {
return false; }
467 static constexpr std::array<std::byte, 0> VERSION_CONTENTS = {};
471 static constexpr size_t V1_PREFIX_LEN = 16;
631 static std::optional<std::string> GetMessageType(std::span<const uint8_t>&
contents)
noexcept;
677 std::optional<Proxy> proxy_override = {};
678 std::unique_ptr<i2p::sam::Session> i2p_sam_session =
nullptr;
679 bool prefer_evict =
false;
681 bool use_v2transport =
false;
733 std::atomic<int> nVersion{0};
740 const bool m_prefer_evict{
false};
745 std::atomic_bool fSuccessfullyConnected{
false};
748 std::atomic_bool fDisconnect{
false};
750 std::atomic<int> nRefCount{0};
753 std::atomic_bool fPauseRecv{
false};
754 std::atomic_bool fPauseSend{
false};
765 void MarkReceivedMsgsForProcessing()
784 switch (m_conn_type) {
809 switch (m_conn_type) {
853 switch (m_conn_type) {
878 Network ConnectedThroughNetwork()
const;
881 [[
nodiscard]]
bool IsConnectedThroughPrivacyNet()
const;
884 std::atomic<bool> m_bip152_highbandwidth_to{
false};
886 std::atomic<bool> m_bip152_highbandwidth_from{
false};
889 std::atomic_bool m_has_all_wanted_services{
false};
893 std::atomic_bool m_relays_txs{
false};
897 std::atomic_bool m_bloom_filter_loaded{
false};
904 std::atomic<std::chrono::seconds> m_last_block_time{0s};
910 std::atomic<std::chrono::seconds> m_last_tx_time{0s};
913 std::atomic<NodeClock::duration> m_last_ping_time{0
us};
917 std::atomic<NodeClock::duration> m_min_ping_time{NodeClock::duration::max()};
920 std::shared_ptr<Sock> sock,
938 return nLocalHostNonce;
965 return m_greatest_common_version;
994 std::string LogPeer()
const;
1001 std::string DisconnectMsg()
const;
1007 m_min_ping_time = std::min(m_min_ping_time.load(),
ping_time);
1039 std::unique_ptr<i2p::sam::Session> m_i2p_sam_session
GUARDED_BY(m_sock_mutex);
1101 unsigned int nSendBufferMaxSize = 0;
1102 unsigned int nReceiveFloodSize = 0;
1114 bool m_use_addrman_outgoing =
true;
1120 bool m_capture_messages =
false;
1128 m_max_automatic_connections =
connOptions.m_max_automatic_connections;
1131 m_max_automatic_outbound = m_max_outbound_full_relay + m_max_outbound_block_relay + m_max_feeler;
1132 m_max_inbound = std::max(0, m_max_automatic_connections - m_max_automatic_outbound);
1133 m_max_inbound_full_relay = std::max(0,
static_cast<int>(
connOptions.m_full_relay_inbound_percent / 100.0 * m_max_inbound));
1140 m_peer_connect_timeout = std::chrono::seconds{
connOptions.m_peer_connect_timeout};
1142 LOCK(m_total_bytes_sent_mutex);
1148 LOCK(m_added_nodes_mutex);
1171 std::shared_ptr<CThreadInterrupt>
interrupt_net = std::make_shared<CThreadInterrupt>());
1188 bool GetNetworkActive()
const {
return fNetworkActive; };
1209 bool use_v2transport,
1210 const std::optional<Proxy>& proxy_override)
1225 std::atomic_bool m_outbound_tor_ok_at_least_once{
false};
1242 std::optional<Network> PickNetwork(std::optional<Proxy>& proxy)
const;
1245 size_t NumToOpen()
const;
1252 void NumToOpenAdd(
size_t n);
1260 size_t NumToOpenSub(
size_t n);
1263 void NumToOpenWait()
const;
1271 std::optional<Proxy> ProxyForIPv4or6()
const;
1274 std::atomic_size_t m_num_to_open{0};
1277 } m_private_broadcast;
1280 void ASMapHealthCheck();
1292 LOCK(m_nodes_mutex);
1294 if (NodeFullyConnected(
node))
1301 LOCK(m_nodes_mutex);
1303 if (NodeFullyConnected(
node))
1320 std::vector<CAddress> GetAddressesUnsafe(
size_t max_addresses,
size_t max_pct, std::optional<Network> network,
bool filtered =
true)
const;
1339 void SetTryNewOutboundPeer(
bool flag);
1340 bool GetTryNewOutboundPeer()
const;
1342 void StartExtraBlockRelayPeers();
1385 bool AddConnection(const
std::
string& address,
ConnectionType conn_type,
bool use_v2transport)
1411 std::chrono::
seconds GetMaxOutboundTimeframe() const;
1424 uint64_t GetTotalBytesRecv() const;
1457 bool InitBinds(const
Options& options);
1462 !m_reconnections_mutex,
1463 !m_unused_i2p_sessions_mutex);
1469 !m_unused_i2p_sessions_mutex);
1474 !m_addr_fetches_mutex,
1476 !m_reconnections_mutex,
1477 !m_unused_i2p_sessions_mutex,
1524 const
Sock::EventsPerSock& events_per_sock)
1531 void SocketHandlerListening(const
Sock::EventsPerSock& events_per_sock)
1535 void ThreadSocketHandler()
EXCLUSIVE_LOCKS_REQUIRED(!m_total_bytes_sent_mutex, !mutexMsgProc, !m_nodes_mutex, !m_reconnections_mutex);
1586 bool use_v2transport,
1587 const
std::optional<
Proxy>& proxy_override)
1599 void DumpAddresses();
1602 void RecordBytesRecv(
uint64_t bytes);
1632 uint16_t GetDefaultPort(const
std::
string& addr) const;
1653 unsigned int nSendBufferMaxSize{0};
1654 unsigned int nReceiveFloodSize{0};
1657 std::atomic<bool> fNetworkActive{
true};
1658 bool fAddressesInitialized{
false};
1671 std::atomic<NodeId> nLastNodeId{0};
1672 unsigned int nPrevNodeCount{0};
1685 std::chrono::microseconds m_cache_entry_expiration{0};
1767 std::atomic<bool> flagInterruptMsgProc{
false};
1799 std::atomic_bool m_start_extra_block_relay_peers{
false};
1822 bool m_capture_messages{
false};
1860 void PerformReconnections()
1880 LOCK(connman.m_nodes_mutex);
1881 m_nodes_copy = connman.m_nodes;
1882 for (
auto&
node : m_nodes_copy) {
1893 for (
auto&
node : m_nodes_copy) {
1898 const std::vector<CNode*>&
Nodes()
const
1900 return m_nodes_copy;
1915 std::span<const unsigned char>
data,
#define Assume(val)
Assume is the identity function.
Stochastic address manager.
The BIP324 packet cipher, encapsulating its key derivation, stream cipher, and AEAD.
A CService with information about it as peer.
CChainParams defines various tweakable parameters of a given instance of the Bitcoin system.
Signals for UI communication.
RAII helper to atomically create a copy of m_nodes and add a reference to each of the nodes.
const std::vector< CNode * > & Nodes() const
NodesSnapshot(const CConnman &connman, bool shuffle) EXCLUSIVE_LOCKS_REQUIRED(!connman.m_nodes_mutex)
std::vector< CNode * > m_nodes_copy
Group of private broadcast related members.
bool whitelist_relay
flag for adding 'relay' permission to whitelisted inbound and manual peers with default permissions.
std::condition_variable condMsgProc
std::thread threadMessageHandler
void RemoveLocalServices(ServiceFlags services)
std::vector< NetWhitelistPermissions > vWhitelistedRangeIncoming
CClientUIInterface * m_client_interface
std::reference_wrapper< AddrMan > addrman
std::vector< AddedNodeParams > m_added_node_params GUARDED_BY(m_added_nodes_mutex)
const bool use_v2transport(GetLocalServices() &NODE_P2P_V2)
int m_max_outbound_block_relay
std::array< unsigned int, Network::NET_MAX > m_network_conn_counts GUARDED_BY(m_nodes_mutex)
void SetCaptureMessages(bool cap)
std::thread threadI2PAcceptIncoming
std::list< ReconnectionInfo > m_reconnections GUARDED_BY(m_reconnections_mutex)
List of reconnections we have to make.
int m_max_automatic_outbound
uint64_t nMaxOutboundLimit GUARDED_BY(m_total_bytes_sent_mutex)
bool fMsgProcWake GUARDED_BY(mutexMsgProc)
flag for waking the message processor.
int m_max_automatic_connections
Maximum number of automatic connections permitted, excluding manual connections but including inbound...
BanMan * m_banman
Pointer to this node's banman.
uint64_t nMaxOutboundTotalBytesSentInCycle GUARDED_BY(m_total_bytes_sent_mutex)
std::thread threadDNSAddressSeed
void ForEachNode(const NodeFn &func) const EXCLUSIVE_LOCKS_REQUIRED(!m_nodes_mutex)
const NetGroupManager & m_netgroupman
std::vector< CAddress > m_anchors GUARDED_BY(m_anchors_mutex)
bool whitelist_forcerelay
flag for adding 'forcerelay' permission to whitelisted inbound and manual peers with default permissi...
std::chrono::seconds m_peer_connect_timeout
std::atomic_bool m_try_another_outbound_peer
flag for deciding to connect to an extra outbound peer, in excess of m_max_outbound_full_relay This t...
std::vector< ListenSocket > vhListenSocket
std::thread threadOpenConnections
std::atomic< ServiceFlags > m_local_services
Services this node offers.
Mutex m_addr_fetches_mutex
Mutex m_reconnections_mutex
Mutex protecting m_reconnections.
const uint64_t nSeed0
SipHasher seeds for deterministic randomness.
std::queue< std::unique_ptr< i2p::sam::Session > > m_unused_i2p_sessions GUARDED_BY(m_unused_i2p_sessions_mutex)
A pool of created I2P SAM transient sessions that should be used instead of creating new ones in orde...
std::unique_ptr< std::counting_semaphore<> > semOutbound
const CChainParams & m_params
std::deque< std::string > m_addr_fetches GUARDED_BY(m_addr_fetches_mutex)
const std::shared_ptr< CThreadInterrupt > m_interrupt_net
This is signaled when network activity should cease.
std::thread threadPrivateBroadcast
std::thread threadOpenAddedConnections
Mutex m_added_nodes_mutex
Mutex & GetNodesMutex() const LOCK_RETURNED(m_nodes_mutex)
int m_max_outbound_full_relay
Mutex m_unused_i2p_sessions_mutex
Mutex protecting m_i2p_sam_sessions.
std::vector< CNode * > m_nodes GUARDED_BY(m_nodes_mutex)
int m_max_inbound_full_relay
std::unique_ptr< std::counting_semaphore<> > semAddnode
Mutex m_anchors_mutex
Addresses that were saved during the previous clean shutdown or when the network was deactivated.
std::chrono::seconds nMaxOutboundCycleStartTime GUARDED_BY(m_total_bytes_sent_mutex)
uint64_t nTotalBytesSent GUARDED_BY(m_total_bytes_sent_mutex)
bool GetUseAddrmanOutgoing() const
std::list< CNode * > m_nodes_disconnected
std::unique_ptr< i2p::sam::Session > m_i2p_sam_session
I2P SAM session.
bool m_use_addrman_outgoing
std::vector< NetWhitelistPermissions > vWhitelistedRangeOutgoing
std::map< uint64_t, CachedAddrResponse > m_addr_response_caches
Addr responses stored in different caches per (network, local socket) prevent cross-network node iden...
std::function< void(CNode *)> NodeFn
NetEventsInterface * m_msgproc
AssertLockNotHeld(m_reconnections_mutex)
std::vector< CService > m_onion_binds
A vector of -bind=<address>:<port>=onion arguments each of which is an address and port that are desi...
std::thread threadSocketHandler
A hasher class for Bitcoin's 256-bit hash (double SHA-256).
An encapsulated private key.
Transport protocol agnostic message container.
CNetMessage(CNetMessage &&)=default
CNetMessage(DataStream &&recv_in)
DataStream m_recv
received message data time of message receipt
CNetMessage & operator=(const CNetMessage &)=delete
CNetMessage(const CNetMessage &)=delete
CNetMessage & operator=(CNetMessage &&)=default
Information about a peer.
bool IsFeelerConn() const
bool ExpectServicesFromConn() const
const std::string m_dest
The pszDest argument provided to ConnectNode().
CService m_addr_local GUARDED_BY(m_addr_local_mutex)
uint64_t nRecvBytes GUARDED_BY(cs_vRecv)
bool IsInboundConn() const
bool HasPermission(NetPermissionFlags permission) const
CountingSemaphoreGrant grantOutbound
bool IsOutboundOrBlockRelayConn() const
bool IsManualConn() const
const std::string m_addr_name
CNode & operator=(const CNode &)=delete
void SetCommonVersion(int greatest_common_version)
std::list< CNetMessage > vRecvMsg
size_t m_msg_process_queue_size GUARDED_BY(m_msg_process_queue_mutex)
bool IsAddrFetchConn() const
uint64_t GetLocalNonce() const
const NodeClock::time_point m_connected
Unix epoch time at peer connection.
mapMsgTypeSize mapSendBytesPerMsgType GUARDED_BY(cs_vSend)
const uint64_t nKeyedNetGroup
std::unique_ptr< i2p::sam::Session > m_i2p_sam_session GUARDED_BY(m_sock_mutex)
If an I2P session is created per connection (for outbound transient I2P connections) then it is store...
bool IsBlockOnlyConn() const
int GetCommonVersion() const
mapMsgTypeSize mapRecvBytesPerMsgType GUARDED_BY(cs_vRecv)
bool IsFullOutboundConn() const
const uint64_t m_network_key
Network key used to prevent fingerprinting our node across networks.
const util::NotNullUniquePtr< Transport > m_transport
Transport serializer/deserializer.
void PongReceived(NodeClock::duration ping_time)
A ping-pong round trip has completed successfully. Update latest and minimum ping durations.
Mutex m_msg_process_queue_mutex
const ConnectionType m_conn_type
const size_t m_recv_flood_size
const uint64_t nLocalHostNonce
bool IsManualOrFullOutboundConn() const
bool IsPrivateBroadcastConn() const
std::shared_ptr< Sock > m_sock GUARDED_BY(m_sock_mutex)
Socket used for communication with the node.
const NetPermissionFlags m_permission_flags
CNode(const CNode &)=delete
size_t m_send_memusage GUARDED_BY(cs_vSend)
Sum of GetMemoryUsage of all vSendMsg entries.
const bool m_inbound_onion
Whether this peer is an inbound onion, i.e. connected via our Tor onion service.
uint64_t nSendBytes GUARDED_BY(cs_vSend)
Total number of bytes sent on the wire to this peer.
int AdvertisedVersion() const
Protocol version advertised in our VERSION message.
const std::optional< Proxy > m_proxy_override
Proxy to use regardless of global proxy settings if reconnecting to this node.
std::list< CNetMessage > m_msg_process_queue GUARDED_BY(m_msg_process_queue_mutex)
std::deque< CSerializedNetMsg > vSendMsg GUARDED_BY(cs_vSend)
Messages still to be fed to m_transport->SetMessageToSend.
std::string cleanSubVer GUARDED_BY(m_subver_mutex)
cleanSubVer is a sanitized string of the user agent byte array we read from the wire.
std::string m_session_id
BIP324 session id string in hex, if any.
NodeClock::duration m_min_ping_time
mapMsgTypeSize mapRecvBytesPerMsgType
ConnectionType m_conn_type
std::chrono::seconds m_last_tx_time
mapMsgTypeSize mapSendBytesPerMsgType
NodeClock::time_point m_last_recv
NodeClock::time_point m_last_send
NodeClock::duration m_last_ping_time
TransportProtocolType m_transport_type
Transport protocol type.
bool m_bip152_highbandwidth_from
bool m_bip152_highbandwidth_to
NodeClock::time_point m_connected
std::chrono::seconds m_last_block_time
NetPermissionFlags m_permission_flags
Simple class for background tasks that should be run periodically or once "after a while".
A combination of a network address (CNetAddr) and a (TCP) port.
General SipHash-2-4 implementation.
RAII-style semaphore lock.
Double ended buffer combining vector and stream-like interfaces.
Different type to mark Mutex at global scope.
Interface for message handling.
static Mutex g_msgproc_mutex
Mutex for anything that is only accessed via the msg processing thread.
virtual void FinalizeNode(const CNode &node)=0
Handle removal of a peer (clear state)
virtual bool ProcessMessages(CNode &node, std::atomic< bool > &interrupt) EXCLUSIVE_LOCKS_REQUIRED(g_msgproc_mutex)=0
Process protocol messages received from a given node.
virtual bool HasAllDesirableServiceFlags(ServiceFlags services) const =0
Callback to determine whether the given set of service flags are sufficient for a peer to be "relevan...
virtual bool SendMessages(CNode &node) EXCLUSIVE_LOCKS_REQUIRED(g_msgproc_mutex)=0
Send queued protocol messages to a given node.
~NetEventsInterface()=default
Protected destructor so that instances can only be deleted by derived classes.
virtual void InitializeNode(const CNode &node, ServiceFlags our_services)=0
Initialize a peer (setup state)
static void AddFlag(NetPermissionFlags &flags, NetPermissionFlags f)
static bool HasFlag(NetPermissionFlags flags, NetPermissionFlags f)
RAII helper class that manages a socket and closes it automatically when it goes out of scope.
The Transport converts one connection's sent messages to wire bytes, and received bytes back.
virtual ~Transport()=default
virtual Info GetInfo() const noexcept=0
Retrieve information about this transport.
std::tuple< std::span< const uint8_t >, bool, const std::string & > BytesToSend
Return type for GetBytesToSend, consisting of:
CHash256 hasher GUARDED_BY(m_recv_mutex)
DataStream hdrbuf GUARDED_BY(m_recv_mutex)
bool m_sending_header GUARDED_BY(m_send_mutex)
Whether we're currently sending header bytes or message bytes.
Mutex m_send_mutex
Lock for sending state.
CSerializedNetMsg m_message_to_send GUARDED_BY(m_send_mutex)
The data of the message currently being sent.
size_t m_bytes_sent GUARDED_BY(m_send_mutex)
How many bytes have been sent so far (from m_header_to_send, or from m_message_to_send....
unsigned int nDataPos GUARDED_BY(m_recv_mutex)
bool in_data GUARDED_BY(m_recv_mutex)
uint256 data_hash GUARDED_BY(m_recv_mutex)
std::vector< uint8_t > m_header_to_send GUARDED_BY(m_send_mutex)
The header of the message currently being sent.
const MessageStartChars m_magic_bytes
unsigned int nHdrPos GUARDED_BY(m_recv_mutex)
DataStream vRecv GUARDED_BY(m_recv_mutex)
bool CompleteInternal() const noexcept EXCLUSIVE_LOCKS_REQUIRED(m_recv_mutex)
CMessageHeader hdr GUARDED_BY(m_recv_mutex)
Mutex m_recv_mutex
Lock for receive state.
bool ReceivedMessageComplete() const override EXCLUSIVE_LOCKS_REQUIRED(!m_recv_mutex)
Returns true if the current message is complete (so GetReceivedMessage can be called).
std::vector< uint8_t > m_send_buffer GUARDED_BY(m_send_mutex)
The send buffer; meaning is determined by m_send_state.
bool m_sent_v1_header_worth GUARDED_BY(m_send_mutex)
Whether we've sent at least 24 bytes (which would trigger disconnect for V1 peers).
const NodeId m_nodeid
NodeId (for debug logging).
BIP324Cipher m_cipher
Cipher state.
SendState
State type that controls the sender side.
V1Transport m_v1_fallback
Encapsulate a V1Transport to fall back to.
Mutex m_send_mutex ACQUIRED_AFTER(m_recv_mutex)
Lock for sending-side fields.
SendState m_send_state GUARDED_BY(m_send_mutex)
Current sender state.
std::string m_send_type GUARDED_BY(m_send_mutex)
Type of the message being sent.
const bool m_initiating
Whether we are the initiator side.
std::vector< uint8_t > m_recv_buffer GUARDED_BY(m_recv_mutex)
Receive buffer; meaning is determined by m_recv_state.
std::vector< uint8_t > m_send_garbage GUARDED_BY(m_send_mutex)
The garbage sent, or to be sent (MAYBE_V1 and AWAITING_KEY state only).
uint32_t m_recv_len GUARDED_BY(m_recv_mutex)
In {VERSION, APP}, the decrypted packet length, if m_recv_buffer.size() >= BIP324Cipher::LENGTH_LEN.
uint32_t m_send_pos GUARDED_BY(m_send_mutex)
How many bytes from the send buffer have been sent so far.
RecvState m_recv_state GUARDED_BY(m_recv_mutex)
Current receiver state.
Mutex m_recv_mutex ACQUIRED_BEFORE(m_send_mutex)
Lock for receiver-side fields.
std::vector< uint8_t > m_recv_aad GUARDED_BY(m_recv_mutex)
AAD expected in next received packet (currently used only for garbage).
std::vector< uint8_t > m_recv_decode_buffer GUARDED_BY(m_recv_mutex)
Buffer to put decrypted contents in, for converting to CNetMessage.
RecvState
State type that defines the current contents of the receive buffer and/or how the next received bytes...
NotNull is intended to be used to denote that a smart pointer type can not hold a nullptr value.
static const PrecomputedData data
Precomputed COutPoint and CCoins values.
std::string ConnectionTypeAsString(ConnectionType conn_type)
Convert ConnectionType enum to a string value.
ConnectionType
Different types of connections to a peer.
@ PRIVATE_BROADCAST
Private broadcast connections are short-lived and only opened to privacy networks (Tor,...
@ BLOCK_RELAY
We use block-relay-only connections to help prevent against partition attacks.
@ MANUAL
We open manual connections to addresses that users explicitly requested via the addnode RPC or the -a...
@ OUTBOUND_FULL_RELAY
These are the default connections that we use to connect with the network.
@ FEELER
Feeler connections are short-lived connections made to check that a node is alive.
@ INBOUND
Inbound connections are those initiated by a peer.
@ ADDR_FETCH
AddrFetch connections are short lived connections used to solicit addresses from peers.
TransportProtocolType
Transport layer version.
@ V1
Unencrypted, plaintext protocol.
CClientUIInterface uiInterface
std::array< uint8_t, 4 > MessageStartChars
std::function< void(const CAddress &addr, const std::string &msg_type, std::span< const unsigned char > data, bool is_incoming)> CaptureMessage
Defaults to CaptureMessageToFile(), but can be overridden by unit tests.
constexpr bool DEFAULT_LISTEN
-listen default
constexpr bool DEFAULT_PRIVATE_BROADCAST
Default for -privatebroadcast.
constexpr unsigned int MAX_SUBVERSION_LENGTH
Maximum length of the user agent string in version message.
bool IsLocal(const CService &addr)
check whether a given address is potentially local
constexpr int MAX_FEELER_CONNECTIONS
Maximum number of feeler connections.
constexpr bool DEFAULT_BLOCKSONLY
Default for blocks only.
constexpr int MAX_ADDNODE_CONNECTIONS
Maximum number of addnode outgoing nodes.
void RemoveLocal(const CService &addr)
constexpr std::chrono::minutes TIMEOUT_INTERVAL
Time after which to disconnect, after waiting for a ping response (or inactivity).
constexpr size_t DEFAULT_MAXSENDBUFFER
constexpr bool DEFAULT_FIXEDSEEDS
constexpr unsigned int DEFAULT_MAX_PEER_CONNECTIONS
The maximum number of peer connections to maintain.
constexpr int64_t DEFAULT_PEER_CONNECT_TIMEOUT
-peertimeout default
constexpr unsigned int MAX_PROTOCOL_MESSAGE_LENGTH
Maximum length of incoming protocol messages (no message over 4 MB is currently acceptable).
constexpr auto EXTRA_BLOCK_RELAY_ONLY_PEER_INTERVAL
Run the extra block-relay-only connection loop once every 5 minutes.
constexpr size_t DEFAULT_MAXRECEIVEBUFFER
std::string strSubVersion
Subversion as sent to the P2P network in version messages.
const std::string DEFAULT_MAX_UPLOAD_TARGET
The default for -maxuploadtarget.
std::optional< CService > GetLocalAddrForPeer(CNode &node)
Returns a local address that we should advertise to this peer.
const std::string NET_MESSAGE_TYPE_OTHER
std::map< std::string, uint64_t > mapMsgTypeSize
constexpr bool DEFAULT_FORCEDNSSEED
constexpr size_t MAX_PRIVATE_BROADCAST_CONNECTIONS
Maximum number of private broadcast connections.
constexpr bool DEFAULT_DNSSEED
constexpr int MAX_BLOCK_RELAY_ONLY_CONNECTIONS
Maximum number of block-relay-only outgoing connections.
CService GetLocalAddress(const CNode &peer)
GlobalMutex g_maplocalhost_mutex
constexpr std::chrono::hours ASMAP_HEALTH_CHECK_INTERVAL
Interval for ASMap Health Check.
constexpr int NUM_FDS_MESSAGE_CAPTURE
Number of file descriptors required for message capture.
bool AddLocal(const CService &addr, int nScore=LOCAL_NONE, bool add_even_if_unreachable=false)
constexpr auto FEELER_INTERVAL
Run the feeler connection loop once every 2 minutes.
constexpr int DEFAULT_FULL_RELAY_INBOUND_PCT
Default percentage of inbound connection slots that tx-relaying peers can use.
constexpr bool DEFAULT_V2_TRANSPORT
constexpr int MAX_PEER_CONNECTIONS
Maximum value of -maxconnections.
constexpr int MAX_OUTBOUND_FULL_RELAY_CONNECTIONS
Maximum number of automatic outgoing nodes over which we'll relay everything (blocks,...
void Discover()
Look up IP addresses from all interfaces on the machine and add them to the list of local addresses t...
bool SeenLocal(const CService &addr)
vote for a local address
constexpr bool DEFAULT_WHITELISTFORCERELAY
Default for -whitelistforcerelay.
constexpr bool DEFAULT_WHITELISTRELAY
Default for -whitelistrelay.
ServiceFlags
nServices flags
constexpr int INIT_PROTO_VERSION
initial proto version, to be increased after version/verack negotiation
constexpr int PROTOCOL_VERSION
network protocol versioning
constexpr int WTXID_RELAY_VERSION
"wtxidrelay" message type for wtxid-based relay starts with this version
Cache responses to addr requests to minimize privacy leak.
std::vector< CAddress > m_addrs_response_cache
void AddSocketPermissionFlags(NetPermissionFlags &flags) const
ListenSocket(std::shared_ptr< Sock > sock_, NetPermissionFlags permissions_)
NetPermissionFlags m_permissions
std::shared_ptr< Sock > sock
std::vector< NetWhitebindPermissions > vWhiteBinds
std::vector< NetWhitelistPermissions > vWhitelistedRangeIncoming
std::vector< CService > onion_binds
std::vector< std::string > m_specified_outgoing
std::vector< std::string > m_added_nodes
std::vector< CService > vBinds
bool m_i2p_accept_incoming
std::vector< std::string > vSeedNodes
bool bind_on_any
True if the user did not specify -bind= or -whitebind= and thus we should bind on 0....
std::vector< NetWhitelistPermissions > vWhitelistedRangeOutgoing
Struct for entries in m_reconnections.
std::optional< Proxy > proxy_override
CountingSemaphoreGrant grant
CSerializedNetMsg(const CSerializedNetMsg &msg)=delete
CSerializedNetMsg Copy() const
CSerializedNetMsg & operator=(CSerializedNetMsg &&)=default
CSerializedNetMsg & operator=(const CSerializedNetMsg &)=delete
CSerializedNetMsg()=default
CSerializedNetMsg(CSerializedNetMsg &&)=default
std::vector< unsigned char > data
size_t GetMemoryUsage() const noexcept
Compute total memory usage of this object (own memory + any dynamic memory).
Version of the system clock that is mockable in the context of tests (via FakeNodeClock or SetMockTim...
std::chrono::time_point< NodeClock > time_point
static constexpr time_point epoch
std::optional< uint256 > session_id
TransportProtocolType transport_type
#define AssertLockNotHeld(cs)
#define WITH_LOCK(cs, code)
Run code while locking a mutex.
#define AssertLockHeld(cs)
#define EXCLUSIVE_LOCKS_REQUIRED(...)
constexpr auto Ticks(Dur2 d)
Helper to count the seconds of a duration/time_point.