Bitcoin ABC 0.30.3
P2P Digital Currency
Public Member Functions | Private Attributes | Friends | List of all members
AddrMan Class Reference

Stochastic address manager. More...

#include <addrman.h>

Public Member Functions

 AddrMan (std::vector< bool > asmap, int32_t consistency_check_ratio)
 
 ~AddrMan ()
 
template<typename Stream >
void Serialize (Stream &s_) const
 
template<typename Stream >
void Unserialize (Stream &s_)
 
size_t size () const
 Return the number of (unique) addresses in all tables. More...
 
bool Add (const std::vector< CAddress > &vAddr, const CNetAddr &source, std::chrono::seconds time_penalty=0s)
 Attempt to add one or more addresses to addrman's new table. More...
 
void Good (const CService &addr, bool test_before_evict=true, NodeSeconds time=Now< NodeSeconds >())
 Mark an entry as accessible, possibly moving it from "new" to "tried". More...
 
void Attempt (const CService &addr, bool fCountFailure, NodeSeconds time=Now< NodeSeconds >())
 Mark an entry as connection attempted to. More...
 
void ResolveCollisions ()
 See if any to-be-evicted tried table entries have been tested and if so resolve the collisions. More...
 
std::pair< CAddress, NodeSecondsSelectTriedCollision ()
 Randomly select an address in the tried table that another address is attempting to evict. More...
 
std::pair< CAddress, NodeSecondsSelect (bool newOnly=false) const
 Choose an address to connect to. More...
 
std::vector< CAddressGetAddr (size_t max_addresses, size_t max_pct, std::optional< Network > network) const
 Return all or many randomly selected addresses, optionally by network. More...
 
void Connected (const CService &addr, NodeSeconds time=Now< NodeSeconds >())
 We have successfully connected to this peer. More...
 
void SetServices (const CService &addr, ServiceFlags nServices)
 Update an entry's service bits. More...
 
const std::vector< bool > & GetAsmap () const
 
void Clear ()
 
void MakeDeterministic ()
 Ensure that bucket placement is always the same for testing purposes. More...
 

Private Attributes

const std::unique_ptr< AddrManImplm_impl
 

Friends

class AddrManTest
 
class AddrManCorrupted
 

Detailed Description

Stochastic address manager.

Design goals:

To that end:

Definition at line 68 of file addrman.h.

Constructor & Destructor Documentation

◆ AddrMan()

AddrMan::AddrMan ( std::vector< bool >  asmap,
int32_t  consistency_check_ratio 
)

Definition at line 1290 of file addrman.cpp.

Here is the call graph for this function:

◆ ~AddrMan()

AddrMan::~AddrMan ( )
default

Member Function Documentation

◆ Add()

bool AddrMan::Add ( const std::vector< CAddress > &  vAddr,
const CNetAddr source,
std::chrono::seconds  time_penalty = 0s 
)

Attempt to add one or more addresses to addrman's new table.

Parameters
[in]vAddrAddress records to attempt to add.
[in]sourceThe address of the node that sent us these addr records.
[in]time_penaltyA "time penalty" to apply to the address record's nTime. If a peer sends us an address record with nTime=n, then we'll add it to our addrman with nTime=(n - time_penalty).
Returns
true if at least one address is successfully added.

Definition at line 1319 of file addrman.cpp.

Here is the caller graph for this function:

◆ Attempt()

void AddrMan::Attempt ( const CService addr,
bool  fCountFailure,
NodeSeconds  time = Now<NodeSeconds>() 
)

Mark an entry as connection attempted to.

Definition at line 1329 of file addrman.cpp.

Here is the caller graph for this function:

◆ Clear()

void AddrMan::Clear ( )

Definition at line 1363 of file addrman.cpp.

Here is the caller graph for this function:

◆ Connected()

void AddrMan::Connected ( const CService addr,
NodeSeconds  time = Now<NodeSeconds>() 
)

We have successfully connected to this peer.

Calling this function updates the CAddress's nTime, which is used in our IsTerrible() decisions and gossiped to peers. Callers should be careful that updating this information doesn't leak topology information to network spies.

net_processing calls this function when it disconnects from a peer to not leak information about currently connected peers.

Parameters
[in]addrThe address of the peer we were connected to
[in]timeThe time that we were last connected to this peer

Definition at line 1351 of file addrman.cpp.

◆ GetAddr()

std::vector< CAddress > AddrMan::GetAddr ( size_t  max_addresses,
size_t  max_pct,
std::optional< Network network 
) const

Return all or many randomly selected addresses, optionally by network.

Parameters
[in]max_addressesMaximum number of addresses to return (0 = all).
[in]max_pctMaximum percentage of addresses to return (0 = all).
[in]networkSelect only addresses of this network (nullopt = all).
Returns
A vector of randomly selected addresses from vRandom.

Definition at line 1346 of file addrman.cpp.

Here is the caller graph for this function:

◆ GetAsmap()

const std::vector< bool > & AddrMan::GetAsmap ( ) const

Definition at line 1359 of file addrman.cpp.

Here is the caller graph for this function:

◆ Good()

void AddrMan::Good ( const CService addr,
bool  test_before_evict = true,
NodeSeconds  time = Now<NodeSeconds>() 
)

Mark an entry as accessible, possibly moving it from "new" to "tried".

Definition at line 1324 of file addrman.cpp.

Here is the caller graph for this function:

◆ MakeDeterministic()

void AddrMan::MakeDeterministic ( )

Ensure that bucket placement is always the same for testing purposes.

Definition at line 1367 of file addrman.cpp.

◆ ResolveCollisions()

void AddrMan::ResolveCollisions ( )

See if any to-be-evicted tried table entries have been tested and if so resolve the collisions.

Definition at line 1334 of file addrman.cpp.

Here is the caller graph for this function:

◆ Select()

std::pair< CAddress, NodeSeconds > AddrMan::Select ( bool  newOnly = false) const

Choose an address to connect to.

Parameters
[in]newOnlyWhether to only select addresses from the new table.
Returns
CAddress The record for the selected peer. seconds The last time we attempted to connect to that peer.

Definition at line 1342 of file addrman.cpp.

Here is the caller graph for this function:

◆ SelectTriedCollision()

std::pair< CAddress, NodeSeconds > AddrMan::SelectTriedCollision ( )

Randomly select an address in the tried table that another address is attempting to evict.

Returns
CAddress The record for the selected tried peer. seconds The last time we attempted to connect to that peer.

Definition at line 1338 of file addrman.cpp.

Here is the caller graph for this function:

◆ Serialize()

template<typename Stream >
template void AddrMan::Serialize ( Stream &  s_) const

Definition at line 1298 of file addrman.cpp.

◆ SetServices()

void AddrMan::SetServices ( const CService addr,
ServiceFlags  nServices 
)

Update an entry's service bits.

Definition at line 1355 of file addrman.cpp.

◆ size()

size_t AddrMan::size ( ) const

Return the number of (unique) addresses in all tables.

Definition at line 1315 of file addrman.cpp.

Here is the caller graph for this function:

◆ Unserialize()

template<typename Stream >
template void AddrMan::Unserialize ( Stream &  s_)

Definition at line 1302 of file addrman.cpp.

Friends And Related Function Documentation

◆ AddrManCorrupted

friend class AddrManCorrupted
friend

Definition at line 168 of file addrman.h.

◆ AddrManTest

friend class AddrManTest
friend

Definition at line 167 of file addrman.h.

Member Data Documentation

◆ m_impl

const std::unique_ptr<AddrManImpl> AddrMan::m_impl
private

Definition at line 69 of file addrman.h.


The documentation for this class was generated from the following files: