|
template<typename Stream > |
void | Serialize (Stream &s) const |
| serialized format: More...
|
|
template<typename Stream > |
void | Unserialize (Stream &s) |
|
void | Clear () |
|
| CAddrMan () |
|
| ~CAddrMan () |
|
size_t | size () const |
| Return the number of (unique) addresses in all tables. More...
|
|
void | Check () |
| Consistency check. More...
|
|
bool | Add (const CAddress &addr, const CNetAddr &source, int64_t nTimePenalty=0) |
| Add a single address. More...
|
|
bool | Add (const std::vector< CAddress > &vAddr, const CNetAddr &source, int64_t nTimePenalty=0) |
| Add multiple addresses. More...
|
|
void | Good (const CService &addr, bool test_before_evict=true, int64_t nTime=GetAdjustedTime()) |
| Mark an entry as accessible. 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...
|
|
CAddrInfo | SelectTriedCollision () |
| Randomly select an address in tried that another address is attempting to evict. More...
|
|
CAddrInfo | Select (bool newOnly=false) |
| Choose an address to connect to. More...
|
|
std::vector< CAddress > | GetAddr () |
| Return a bunch of addresses, selected at random. More...
|
|
void | Connected (const CService &addr, int64_t nTime=GetAdjustedTime()) |
| Mark an entry as currently-connected-to. More...
|
|
void | SetServices (const CService &addr, ServiceFlags nServices) |
|
|
CAddrInfo * | Find (const CNetAddr &addr, int *pnId=nullptr) EXCLUSIVE_LOCKS_REQUIRED(cs) |
| Find an entry. More...
|
|
CAddrInfo * | Create (const CAddress &addr, const CNetAddr &addrSource, int *pnId=nullptr) EXCLUSIVE_LOCKS_REQUIRED(cs) |
| find an entry, creating it if necessary. More...
|
|
void | SwapRandom (unsigned int nRandomPos1, unsigned int nRandomPos2) EXCLUSIVE_LOCKS_REQUIRED(cs) |
| Swap two elements in vRandom. More...
|
|
void | MakeTried (CAddrInfo &info, int nId) EXCLUSIVE_LOCKS_REQUIRED(cs) |
| Move an entry from the "new" table(s) to the "tried" table. More...
|
|
void | Delete (int nId) EXCLUSIVE_LOCKS_REQUIRED(cs) |
| Delete an entry. It must not be in tried, and have refcount 0. More...
|
|
void | ClearNew (int nUBucket, int nUBucketPos) EXCLUSIVE_LOCKS_REQUIRED(cs) |
| Clear a position in a "new" table. This is the only place where entries are actually deleted. More...
|
|
void | Good_ (const CService &addr, bool test_before_evict, int64_t time) EXCLUSIVE_LOCKS_REQUIRED(cs) |
| Mark an entry "good", possibly moving it from "new" to "tried". More...
|
|
bool | Add_ (const CAddress &addr, const CNetAddr &source, int64_t nTimePenalty) EXCLUSIVE_LOCKS_REQUIRED(cs) |
| Add an entry to the "new" table. More...
|
|
void | Attempt_ (const CService &addr, bool fCountFailure, int64_t nTime) EXCLUSIVE_LOCKS_REQUIRED(cs) |
| Mark an entry as attempted to connect. More...
|
|
CAddrInfo | Select_ (bool newOnly) EXCLUSIVE_LOCKS_REQUIRED(cs) |
| Select an address to connect to, if newOnly is set to true, only the new table is selected from. More...
|
|
void | ResolveCollisions_ () EXCLUSIVE_LOCKS_REQUIRED(cs) |
| See if any to-be-evicted tried table entries have been tested and if so resolve the collisions. More...
|
|
CAddrInfo | SelectTriedCollision_ () EXCLUSIVE_LOCKS_REQUIRED(cs) |
| Return a random to-be-evicted tried table address. More...
|
|
virtual int | RandomInt (int nMax) |
| Wraps GetRandInt to allow tests to override RandomInt and make it determinismistic. More...
|
|
void | GetAddr_ (std::vector< CAddress > &vAddr) EXCLUSIVE_LOCKS_REQUIRED(cs) |
| Select several addresses at once. More...
|
|
void | Connected_ (const CService &addr, int64_t nTime) EXCLUSIVE_LOCKS_REQUIRED(cs) |
| Mark an entry as currently-connected-to. More...
|
|
void | SetServices_ (const CService &addr, ServiceFlags nServices) EXCLUSIVE_LOCKS_REQUIRED(cs) |
| Update an entry's service bits. More...
|
|
Stochastical (IP) address manager.
Definition at line 188 of file addrman.h.
template<typename Stream >
void CAddrMan::Serialize |
( |
Stream & |
s | ) |
const |
|
inline |
serialized format:
- version byte (currently 1)
- 0x20 + nKey (serialized as if it were a vector, for backward compatibility)
- nNew
- nTried
- number of "new" buckets XOR 2**30
- all nNew addrinfos in vvNew
- all nTried addrinfos in vvTried
- for each bucket:
- number of elements
- for each element: index
2**30 is xorred with the number of buckets to make addrman deserializer v0 detect it as incompatible. This is necessary because it did not check the version number on deserialization.
Notice that vvTried, mapAddr and vVector are never encoded explicitly; they are instead reconstructed from the other information.
vvNew is serialized, but only used if ADDRMAN_UNKNOWN_BUCKET_COUNT didn't change, otherwise it is reconstructed as well.
This format is more complex, but significantly smaller (at most 1.5 MiB), and supports changes to the ADDRMAN_ parameters without breaking the on-disk structure.
We don't use ADD_SERIALIZE_METHODS since the serialization and deserialization code has very little in common.
Definition at line 317 of file addrman.h.