Bitcoin ABC 0.26.3
P2P Digital Currency
|
Information about a peer. More...
#include <net.h>
Public Attributes | |
std::unique_ptr< TransportDeserializer > | m_deserializer |
std::unique_ptr< TransportSerializer > | m_serializer |
const NetPermissionFlags | m_permission_flags {NetPermissionFlags::None} |
Mutex | cs_vSend |
Mutex | m_sock_mutex |
Mutex | cs_vRecv |
RecursiveMutex | cs_vProcessMsg |
size_t | nProcessQueueSize {0} |
std::atomic< std::chrono::seconds > | m_last_send {0s} |
std::atomic< std::chrono::seconds > | m_last_recv {0s} |
const std::chrono::seconds | m_connected |
Unix epoch time at peer connection. | |
std::atomic< int64_t > | nTimeOffset {0} |
const CAddress | addr |
const CAddress | addrBind |
const std::string | m_addr_name |
const bool | m_inbound_onion |
Whether this peer is an inbound onion, i.e. | |
std::atomic< int > | nVersion {0} |
uint64_t | nRemoteHostNonce {0} |
uint64_t | nRemoteExtraEntropy {0} |
Mutex | m_subver_mutex |
cleanSubVer is a sanitized string of the user agent byte array we read from the wire. | |
const bool | m_prefer_evict {false} |
std::atomic_bool | fSuccessfullyConnected {false} |
std::atomic_bool | fDisconnect {false} |
CSemaphoreGrant | grantOutbound |
std::atomic< int > | nRefCount {0} |
const uint64_t | nKeyedNetGroup |
std::atomic_bool | fPauseRecv {false} |
std::atomic_bool | fPauseSend {false} |
std::atomic< bool > | m_bip152_highbandwidth_to {false} |
std::atomic< bool > | m_bip152_highbandwidth_from {false} |
std::atomic_bool | m_has_all_wanted_services {false} |
Whether this peer provides all services that we want. | |
std::atomic_bool | m_relays_txs {false} |
Whether we should relay transactions to this peer. | |
std::atomic_bool | m_bloom_filter_loaded {false} |
Whether this peer has loaded a bloom filter. | |
std::atomic< bool > | m_avalanche_enabled {false} |
Mutex | cs_avalanche_pubkey |
std::chrono::seconds | m_nextGetAvaAddr {0} |
std::atomic< std::chrono::seconds > | m_avalanche_last_message_fault {0s} |
std::atomic< int > | m_avalanche_message_fault_counter {0} |
SteadyMilliseconds | m_last_poll {} |
std::atomic< std::chrono::seconds > | m_last_block_time {0s} |
UNIX epoch time of the last block received from this peer that we had not yet seen (e.g. | |
std::atomic< std::chrono::seconds > | m_last_tx_time {0s} |
UNIX epoch time of the last transaction received from this peer that we had not yet seen (e.g. | |
std::atomic< std::chrono::seconds > | m_last_proof_time {0s} |
UNIX epoch time of the last proof received from this peer that we had not yet seen (e.g. | |
std::atomic< std::chrono::microseconds > | m_last_ping_time {0us} |
Last measured round-trip time. | |
std::atomic< std::chrono::microseconds > | m_min_ping_time |
Lowest measured round-trip time. | |
void | !m_addr_local_mutex |
void | !cs_vSend |
void | !cs_vRecv |
Private Member Functions | |
CService addrLocal | GUARDED_BY (m_addr_local_mutex) |
mapMsgCmdSize mapSendBytesPerMsgCmd | GUARDED_BY (cs_vSend) |
mapMsgCmdSize mapRecvBytesPerMsgCmd | GUARDED_BY (cs_vRecv) |
Private Attributes | |
const NodeId | id |
const uint64_t | nLocalHostNonce |
const uint64_t | nLocalExtraEntropy |
const ConnectionType | m_conn_type |
std::atomic< int > | m_greatest_common_version {INIT_PROTO_VERSION} |
std::list< CNetMessage > | vRecvMsg |
Mutex | m_addr_local_mutex |
std::atomic< uint64_t > | invCounters {0} |
The inventories polled and voted counters since last score computation, stored as a pair of uint32_t with the poll counter being the 32 lowest bits and the vote counter the 32 highest bits. | |
std::atomic< double > | availabilityScore {0.} |
The last computed score. | |
Friends | |
class | CConnman |
struct | ConnmanTestMsg |
CNode::CNode | ( | NodeId | id, |
std::shared_ptr< Sock > | sock, | ||
const CAddress & | addrIn, | ||
uint64_t | nKeyedNetGroupIn, | ||
uint64_t | nLocalHostNonceIn, | ||
uint64_t | nLocalExtraEntropyIn, | ||
const CAddress & | addrBindIn, | ||
const std::string & | addrNameIn, | ||
ConnectionType | conn_type_in, | ||
bool | inbound_onion, | ||
CNodeOptions && | node_opts = {} |
||
) |
|
delete |
|
inline |
void CNode::CloseSocketDisconnect | ( | ) |
Network CNode::ConnectedThroughNetwork | ( | ) | const |
Get network the peer connected through.
Returns Network::NET_ONION for inbound onion connections, and CNetAddr::GetNetClass() otherwise. The latter cannot be used directly because it doesn't detect the former, and it's not the responsibility of the CNetAddr class to know the actual network a peer is connected through.
Definition at line 638 of file net.cpp.
void CNode::copyStats | ( | CNodeStats & | stats | ) |
|
inline |
CService CNode::GetAddrLocal | ( | ) | const |
double CNode::getAvailabilityScore | ( | ) | const |
|
inline |
|
inline |
std::optional< CPubKey > m_avalanche_pubkey CNode::GUARDED_BY | ( | cs_avalanche_pubkey | ) |
std::list< CNetMessage > vProcessMsg CNode::GUARDED_BY | ( | cs_vProcessMsg | ) |
|
private |
|
inline |
|
private |
|
private |
std::shared_ptr< Sock > m_sock CNode::GUARDED_BY | ( | m_sock_mutex | ) |
Socket used for communication with the node.
May not own a Sock object (after CloseSocketDisconnect()
or during tests). shared_ptr
(instead of unique_ptr
) is used to avoid premature close of the underlying file descriptor by one thread while another thread is poll(2)-ing it for activity.
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
bool CNode::ReceiveMsgBytes | ( | const Config & | config, |
Span< const uint8_t > | msg_bytes, | ||
bool & | complete | ||
) |
Receive bytes from the buffer and deserialize them into messages.
[in] | msg_bytes | The raw data |
[out] | complete | Set True if at least one message has been deserialized and is ready to be processed |
Definition at line 690 of file net.cpp.
The availability score is calculated using an exponentially weighted average.
This has several interesting properties:
This is expected to be called at a fixed interval of AVALANCHE_STATISTICS_REFRESH_PERIOD.
Definition at line 3269 of file net.cpp.
|
private |
RecursiveMutex CNode::cs_vProcessMsg |
CSemaphoreGrant CNode::grantOutbound |
|
private |
std::atomic<std::chrono::seconds> CNode::m_avalanche_last_message_fault {0s} |
std::atomic_bool CNode::m_bloom_filter_loaded {false} |
|
private |
const std::chrono::seconds CNode::m_connected |
std::unique_ptr<TransportDeserializer> CNode::m_deserializer |
|
private |
std::atomic_bool CNode::m_has_all_wanted_services {false} |
const bool CNode::m_inbound_onion |
std::atomic<std::chrono::seconds> CNode::m_last_block_time {0s} |
UNIX epoch time of the last block received from this peer that we had not yet seen (e.g.
not already received from another peer), that passed preliminary validity checks and was saved to disk, even if we don't connect the block or it eventually fails connection. Used as an inbound peer eviction criterium in CConnman::AttemptToEvictConnection.
std::atomic<std::chrono::microseconds> CNode::m_last_ping_time {0us} |
SteadyMilliseconds CNode::m_last_poll {} |
std::atomic<std::chrono::seconds> CNode::m_last_proof_time {0s} |
UNIX epoch time of the last proof received from this peer that we had not yet seen (e.g.
not already received from another peer) and that was accepted into our proof pool. Used as an inbound peer eviction criterium in CConnman::AttemptToEvictConnection.
std::atomic<std::chrono::seconds> CNode::m_last_tx_time {0s} |
UNIX epoch time of the last transaction received from this peer that we had not yet seen (e.g.
not already received from another peer) and that was accepted into our mempool. Used as an inbound peer eviction criterium in CConnman::AttemptToEvictConnection.
std::atomic<std::chrono::microseconds> CNode::m_min_ping_time |
Lowest measured round-trip time.
Used as an inbound peer eviction criterium in CConnman::AttemptToEvictConnection.
const NetPermissionFlags CNode::m_permission_flags {NetPermissionFlags::None} |
std::atomic_bool CNode::m_relays_txs {false} |
std::unique_ptr<TransportSerializer> CNode::m_serializer |
Mutex CNode::m_subver_mutex |
|
private |