Bitcoin ABC 0.26.3
P2P Digital Currency
|
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. | |
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. | |
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". | |
void | Attempt (const CService &addr, bool fCountFailure, NodeSeconds time=Now< NodeSeconds >()) |
Mark an entry as connection attempted to. | |
void | ResolveCollisions () |
See if any to-be-evicted tried table entries have been tested and if so resolve the collisions. | |
std::pair< CAddress, NodeSeconds > | SelectTriedCollision () |
Randomly select an address in the tried table that another address is attempting to evict. | |
std::pair< CAddress, NodeSeconds > | Select (bool newOnly=false) const |
Choose an address to connect to. | |
std::vector< CAddress > | GetAddr (size_t max_addresses, size_t max_pct, std::optional< Network > network) const |
Return all or many randomly selected addresses, optionally by network. | |
void | Connected (const CService &addr, NodeSeconds time=Now< NodeSeconds >()) |
We have successfully connected to this peer. | |
void | SetServices (const CService &addr, ServiceFlags nServices) |
Update an entry's service bits. | |
const std::vector< bool > & | GetAsmap () const |
void | Clear () |
void | MakeDeterministic () |
Ensure that bucket placement is always the same for testing purposes. | |
Private Attributes | |
const std::unique_ptr< AddrManImpl > | m_impl |
Friends | |
class | AddrManTest |
class | AddrManCorrupted |
Stochastic address manager.
Design goals:
To that end:
|
default |
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.
[in] | vAddr | Address records to attempt to add. |
[in] | source | The address of the node that sent us these addr records. |
[in] | time_penalty | A "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). |
Definition at line 1318 of file addrman.cpp.
void AddrMan::Attempt | ( | const CService & | addr, |
bool | fCountFailure, | ||
NodeSeconds | time = Now<NodeSeconds>() |
||
) |
Mark an entry as connection attempted to.
Definition at line 1328 of file addrman.cpp.
void AddrMan::Clear | ( | ) |
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.
[in] | addr | The address of the peer we were connected to |
[in] | time | The time that we were last connected to this peer |
Definition at line 1350 of file addrman.cpp.
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.
[in] | max_addresses | Maximum number of addresses to return (0 = all). |
[in] | max_pct | Maximum percentage of addresses to return (0 = all). |
[in] | network | Select only addresses of this network (nullopt = all). |
Definition at line 1345 of file addrman.cpp.
const std::vector< bool > & AddrMan::GetAsmap | ( | ) | const |
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 1323 of file addrman.cpp.
void AddrMan::MakeDeterministic | ( | ) |
Ensure that bucket placement is always the same for testing purposes.
Definition at line 1366 of file addrman.cpp.
void AddrMan::ResolveCollisions | ( | ) |
See if any to-be-evicted tried table entries have been tested and if so resolve the collisions.
Definition at line 1333 of file addrman.cpp.
std::pair< CAddress, NodeSeconds > AddrMan::Select | ( | bool | newOnly = false | ) | const |
Choose an address to connect to.
[in] | newOnly | Whether to only select addresses from the new table. |
Definition at line 1341 of file addrman.cpp.
std::pair< CAddress, NodeSeconds > AddrMan::SelectTriedCollision | ( | ) |
Randomly select an address in the tried table that another address is attempting to evict.
Definition at line 1337 of file addrman.cpp.
void AddrMan::SetServices | ( | const CService & | addr, |
ServiceFlags | nServices | ||
) |
Update an entry's service bits.
Definition at line 1354 of file addrman.cpp.
size_t AddrMan::size | ( | ) | const |
Return the number of (unique) addresses in all tables.
Definition at line 1314 of file addrman.cpp.
|
private |