![]() |
Bitcoin Core
22.99.0
P2P Digital Currency
|
Stochastic address manager. More...
#include <addrman.h>
Public Member Functions | |
AddrMan (std::vector< bool > asmap, bool deterministic, 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, int64_t nTimePenalty=0) |
Attempt to add one or more addresses to addrman's new table. More... | |
bool | Good (const CService &addr, int64_t nTime=GetAdjustedTime()) |
Mark an address record as accessible and attempt to move it to addrman's tried table. More... | |
void | Attempt (const CService &addr, bool fCountFailure, int64_t nTime=GetAdjustedTime()) |
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, int64_t > | SelectTriedCollision () |
Randomly select an address in the tried table that another address is attempting to evict. More... | |
std::pair< CAddress, int64_t > | Select (bool newOnly=false) const |
Choose an address to connect to. More... | |
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. More... | |
void | Connected (const CService &addr, int64_t nTime=GetAdjustedTime()) |
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 |
std::optional< AddressPosition > | FindAddressEntry (const CAddress &addr) |
Test-only function Find the address record in AddrMan and return information about its position. More... | |
Protected Attributes | |
const std::unique_ptr< AddrManImpl > | m_impl |
Stochastic address manager.
Design goals:
To that end:
|
explicit |
Definition at line 1156 of file addrman.cpp.
|
default |
bool AddrMan::Add | ( | const std::vector< CAddress > & | vAddr, |
const CNetAddr & | source, | ||
int64_t | nTimePenalty = 0 |
||
) |
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] | nTimePenalty | 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 - nTimePenalty). |
Definition at line 1187 of file addrman.cpp.
void AddrMan::Attempt | ( | const CService & | addr, |
bool | fCountFailure, | ||
int64_t | nTime = GetAdjustedTime() |
||
) |
Mark an entry as connection attempted to.
Definition at line 1197 of file addrman.cpp.
void AddrMan::Connected | ( | const CService & | addr, |
int64_t | nTime = GetAdjustedTime() |
||
) |
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] | nTime | The time that we were last connected to this peer |
Definition at line 1222 of file addrman.cpp.
std::optional< AddressPosition > AddrMan::FindAddressEntry | ( | const CAddress & | addr | ) |
Test-only function Find the address record in AddrMan and return information about its position.
[in] | addr | The address record to look up. |
Definition at line 1237 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 1217 of file addrman.cpp.
const std::vector< bool > & AddrMan::GetAsmap | ( | ) | const |
bool AddrMan::Good | ( | const CService & | addr, |
int64_t | nTime = GetAdjustedTime() |
||
) |
Mark an address record as accessible and attempt to move it to addrman's tried table.
[in] | addr | Address record to attempt to move to tried table. |
[in] | nTime | The time that we were last connected to this peer. |
Definition at line 1192 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 1202 of file addrman.cpp.
std::pair< CAddress, int64_t > 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 1212 of file addrman.cpp.
std::pair< CAddress, int64_t > AddrMan::SelectTriedCollision | ( | ) |
Randomly select an address in the tried table that another address is attempting to evict.
Definition at line 1207 of file addrman.cpp.
template void AddrMan::Serialize | ( | Stream & | s_ | ) | const |
Definition at line 1162 of file addrman.cpp.
void AddrMan::SetServices | ( | const CService & | addr, |
ServiceFlags | nServices | ||
) |
Update an entry's service bits.
Definition at line 1227 of file addrman.cpp.
size_t AddrMan::size | ( | ) | const |
Return the number of (unique) addresses in all tables.
Definition at line 1182 of file addrman.cpp.
template void AddrMan::Unserialize | ( | Stream & | s_ | ) |
Definition at line 1168 of file addrman.cpp.
|
protected |