![]() |
Master Core
v0.0.9 - 2abfd2849db8ba7a83957c64eb976b406713c123
|
Stochastical (IP) address manager. More...
#include <addrman.h>
Collaboration diagram for CAddrMan:Public Member Functions | |
| IMPLEMENT_SERIALIZE (({{LOCK(cs);unsigned char nVersion=0;READWRITE(nVersion);READWRITE(nKey);READWRITE(nNew);READWRITE(nTried);CAddrMan *am=const_cast< CAddrMan * >(this);if(fWrite){int nUBuckets=ADDRMAN_NEW_BUCKET_COUNT;READWRITE(nUBuckets);std::map< int, int > mapUnkIds;int nIds=0;for(std::map< int, CAddrInfo >::iterator it=am->mapInfo.begin();it!=am->mapInfo.end();it++){if(nIds==nNew) break;mapUnkIds[(*it).first]=nIds;CAddrInfo &info=(*it).second;if(info.nRefCount){READWRITE(info);nIds++;}}nIds=0;for(std::map< int, CAddrInfo >::iterator it=am->mapInfo.begin();it!=am->mapInfo.end();it++){if(nIds==nTried) break;CAddrInfo &info=(*it).second;if(info.fInTried){READWRITE(info);nIds++;}}for(std::vector< std::set< int > >::iterator it=am->vvNew.begin();it!=am->vvNew.end();it++){const std::set< int > &vNew=(*it);int nSize=vNew.size();READWRITE(nSize);for(std::set< int >::iterator it2=vNew.begin();it2!=vNew.end();it2++){int nIndex=mapUnkIds[*it2];READWRITE(nIndex);}}}else{int nUBuckets=0;READWRITE(nUBuckets);am->nIdCount=0;am->mapInfo.clear();am->mapAddr.clear();am->vRandom.clear();am->vvTried=std::vector< std::vector< int > >(ADDRMAN_TRIED_BUCKET_COUNT, std::vector< int >(0));am->vvNew=std::vector< std::set< int > >(ADDRMAN_NEW_BUCKET_COUNT, std::set< int >());for(int n=0;n< am->nNew;n++){CAddrInfo &info=am->mapInfo[n];READWRITE(info);am->mapAddr[info]=n;info.nRandomPos=vRandom.size();am->vRandom.push_back(n);if(nUBuckets!=ADDRMAN_NEW_BUCKET_COUNT){am->vvNew[info.GetNewBucket(am->nKey)].insert(n);info.nRefCount++;}}am->nIdCount=am->nNew;int nLost=0;for(int n=0;n< am->nTried;n++){CAddrInfo info;READWRITE(info);std::vector< int > &vTried=am->vvTried[info.GetTriedBucket(am->nKey)];if(vTried.size()< ADDRMAN_TRIED_BUCKET_SIZE){info.nRandomPos=vRandom.size();info.fInTried=true;am->vRandom.push_back(am->nIdCount);am->mapInfo[am->nIdCount]=info;am->mapAddr[info]=am->nIdCount;vTried.push_back(am->nIdCount);am->nIdCount++;}else{nLost++;}}am->nTried-=nLost;for(int b=0;b< nUBuckets;b++){std::set< int > &vNew=am->vvNew[b];int nSize=0;READWRITE(nSize);for(int n=0;n< nSize;n++){int nIndex=0;READWRITE(nIndex);CAddrInfo &info=am->mapInfo[nIndex];if(nUBuckets==ADDRMAN_NEW_BUCKET_COUNT &&info.nRefCount< ADDRMAN_NEW_BUCKETS_PER_ADDRESS){info.nRefCount++;vNew.insert(nIndex);}}}}}});) CAddrMan() | |
| int | size () |
| void | Check () |
| bool | Add (const CAddress &addr, const CNetAddr &source, int64_t nTimePenalty=0) |
| bool | Add (const std::vector< CAddress > &vAddr, const CNetAddr &source, int64_t nTimePenalty=0) |
| void | Good (const CService &addr, int64_t nTime=GetAdjustedTime()) |
| void | Attempt (const CService &addr, int64_t nTime=GetAdjustedTime()) |
| CAddress | Select (int nUnkBias=50) |
| std::vector< CAddress > | GetAddr () |
| void | Connected (const CService &addr, int64_t nTime=GetAdjustedTime()) |
Protected Member Functions | |
| CAddrInfo * | Find (const CNetAddr &addr, int *pnId=NULL) |
| CAddrInfo * | Create (const CAddress &addr, const CNetAddr &addrSource, int *pnId=NULL) |
| void | SwapRandom (unsigned int nRandomPos1, unsigned int nRandomPos2) |
| int | SelectTried (int nKBucket) |
| int | ShrinkNew (int nUBucket) |
| void | MakeTried (CAddrInfo &info, int nId, int nOrigin) |
| void | Good_ (const CService &addr, int64_t nTime) |
| bool | Add_ (const CAddress &addr, const CNetAddr &source, int64_t nTimePenalty) |
| void | Attempt_ (const CService &addr, int64_t nTime) |
| CAddress | Select_ (int nUnkBias) |
| void | GetAddr_ (std::vector< CAddress > &vAddr) |
| void | Connected_ (const CService &addr, int64_t nTime) |
Private Attributes | |
| CCriticalSection | cs |
| std::vector< unsigned char > | nKey |
| int | nIdCount |
| std::map< int, CAddrInfo > | mapInfo |
| std::map< CNetAddr, int > | mapAddr |
| std::vector< int > | vRandom |
| int | nTried |
| std::vector< std::vector< int > > | vvTried |
| int | nNew |
| std::vector< std::set< int > > | vvNew |
|
inline |
Definition at line 413 of file addrman.h.
References Add_(), Check(), LOCK, LogPrint(), nNew, nTried, CNetAddr::ToString(), and CService::ToStringIPPort().
Referenced by ProcessMessage(), ThreadDNSAddressSeed(), and ThreadOpenConnections().
Here is the call graph for this function:
Here is the caller graph for this function:
|
inline |
Definition at line 428 of file addrman.h.
References Add_(), Check(), LOCK, LogPrint(), nNew, nTried, and CNetAddr::ToString().
Here is the call graph for this function:
|
protected |
Definition at line 313 of file addrman.cpp.
References ADDRMAN_NEW_BUCKET_SIZE, ADDRMAN_NEW_BUCKETS_PER_ADDRESS, CAddrInfo::fInTried, GetAdjustedTime(), CAddrInfo::GetNewBucket(), GetRandInt(), CNetAddr::IsRoutable(), CAddrInfo::nRefCount, CAddress::nServices, and CAddress::nTime.
Referenced by Add().
Here is the call graph for this function:
Here is the caller graph for this function:
|
inline |
Definition at line 455 of file addrman.h.
References Attempt_(), Check(), and LOCK.
Referenced by ConnectNode().
Here is the call graph for this function:
Here is the caller graph for this function:
|
protected |
Definition at line 370 of file addrman.cpp.
References CAddrInfo::nAttempts, and CAddress::nLastTry.
Referenced by Attempt().
Here is the caller graph for this function:
|
inline |
|
inline |
Definition at line 493 of file addrman.h.
References Check(), Connected_(), and LOCK.
Referenced by AddressCurrentlyConnected().
Here is the call graph for this function:
Here is the caller graph for this function:
|
protected |
Definition at line 509 of file addrman.cpp.
References CAddress::nTime.
Referenced by Connected().
Here is the caller graph for this function:
|
protected |
Definition at line 96 of file addrman.cpp.
Definition at line 83 of file addrman.cpp.
|
inline |
Definition at line 480 of file addrman.h.
References Check(), GetAddr_(), and LOCK.
Referenced by ProcessMessage().
Here is the call graph for this function:
Here is the caller graph for this function:
|
protected |
Definition at line 493 of file addrman.cpp.
References ADDRMAN_GETADDR_MAX, ADDRMAN_GETADDR_MAX_PCT, and GetRandInt().
Referenced by GetAddr().
Here is the call graph for this function:
Here is the caller graph for this function:
|
inline |
|
protected |
Definition at line 264 of file addrman.cpp.
References CAddrInfo::fInTried, GetRandInt(), LogPrint(), CAddrInfo::nAttempts, CAddrInfo::nLastSuccess, CAddress::nLastTry, CAddress::nTime, and CService::ToString().
Referenced by Good().
Here is the call graph for this function:
Here is the caller graph for this function:
|
inline |
Definition at line 250 of file addrman.h.
References ADDRMAN_NEW_BUCKET_COUNT, ADDRMAN_NEW_BUCKETS_PER_ADDRESS, ADDRMAN_TRIED_BUCKET_COUNT, ADDRMAN_TRIED_BUCKET_SIZE, CAddrInfo::fInTried, CAddrInfo::GetNewBucket(), CAddrInfo::GetTriedBucket(), LOCK, mapAddr, mapInfo, nIdCount, nKey, nNew, CAddrInfo::nRandomPos, CAddrInfo::nRefCount, nTried, READWRITE, vRandom, vvNew, and vvTried.
Here is the call graph for this function:Definition at line 206 of file addrman.cpp.
References ADDRMAN_NEW_BUCKET_SIZE, ADDRMAN_TRIED_BUCKET_SIZE, CAddrInfo::fInTried, CAddrInfo::GetTriedBucket(), and CAddrInfo::nRefCount.
Here is the call graph for this function:Definition at line 389 of file addrman.cpp.
References GetRandInt().
Referenced by Select().
Here is the call graph for this function:
Here is the caller graph for this function:Definition at line 128 of file addrman.cpp.
References ADDRMAN_TRIED_ENTRIES_INSPECT_ON_EVICT, and GetRandInt().
Here is the call graph for this function:Definition at line 152 of file addrman.cpp.
References GetRandInt().
Here is the call graph for this function:
|
inline |
Definition at line 394 of file addrman.h.
Referenced by AppInit2(), DumpAddresses(), ProcessMessage(), ThreadDNSAddressSeed(), and ThreadOpenConnections().
Here is the caller graph for this function:Definition at line 108 of file addrman.cpp.
|
mutableprivate |
Definition at line 182 of file addrman.h.
Referenced by IMPLEMENT_SERIALIZE().
Definition at line 179 of file addrman.h.
Referenced by IMPLEMENT_SERIALIZE().
|
private |
Definition at line 176 of file addrman.h.
Referenced by IMPLEMENT_SERIALIZE().
|
private |
Definition at line 173 of file addrman.h.
Referenced by IMPLEMENT_SERIALIZE().
|
private |
Definition at line 194 of file addrman.h.
Referenced by Add(), and IMPLEMENT_SERIALIZE().
|
private |
Definition at line 188 of file addrman.h.
Referenced by Add(), and IMPLEMENT_SERIALIZE().
|
private |
Definition at line 185 of file addrman.h.
Referenced by IMPLEMENT_SERIALIZE().
|
private |
Definition at line 197 of file addrman.h.
Referenced by IMPLEMENT_SERIALIZE().
|
private |
Definition at line 191 of file addrman.h.
Referenced by IMPLEMENT_SERIALIZE().
1.8.8