Feathercoin  0.5.0
P2P Digital Currency
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros
Public Member Functions | Protected Member Functions | Private Attributes | List of all members
CAddrMan Class Reference

Stochastical (IP) address manager. More...

#include <addrman.h>

Collaboration diagram for CAddrMan:
Collaboration graph
[legend]

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 nTimePenalty=0)
 
bool Add (const std::vector< CAddress > &vAddr, const CNetAddr &source, int64 nTimePenalty=0)
 
void Good (const CService &addr, int64 nTime=GetAdjustedTime())
 
void Attempt (const CService &addr, int64 nTime=GetAdjustedTime())
 
CAddress Select (int nUnkBias=50)
 
std::vector< CAddressGetAddr ()
 
void Connected (const CService &addr, int64 nTime=GetAdjustedTime())
 

Protected Member Functions

CAddrInfoFind (const CNetAddr &addr, int *pnId=NULL)
 
CAddrInfoCreate (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 nTime)
 
bool Add_ (const CAddress &addr, const CNetAddr &source, int64 nTimePenalty)
 
void Attempt_ (const CService &addr, int64 nTime)
 
CAddress Select_ (int nUnkBias)
 
void GetAddr_ (std::vector< CAddress > &vAddr)
 
void Connected_ (const CService &addr, int64 nTime)
 

Private Attributes

CCriticalSection cs
 
std::vector< unsigned char > nKey
 
int nIdCount
 
std::map< int, CAddrInfomapInfo
 
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
 

Detailed Description

Stochastical (IP) address manager.

Definition at line 165 of file addrman.h.

Member Function Documentation

bool CAddrMan::Add ( const CAddress addr,
const CNetAddr source,
int64  nTimePenalty = 0 
)
inline

Definition at line 412 of file addrman.h.

bool CAddrMan::Add ( const std::vector< CAddress > &  vAddr,
const CNetAddr source,
int64  nTimePenalty = 0 
)
inline

Definition at line 427 of file addrman.h.

bool CAddrMan::Add_ ( const CAddress addr,
const CNetAddr source,
int64  nTimePenalty 
)
protected

Definition at line 313 of file addrman.cpp.

void CAddrMan::Attempt ( const CService addr,
int64  nTime = GetAdjustedTime() 
)
inline

Definition at line 454 of file addrman.h.

void CAddrMan::Attempt_ ( const CService addr,
int64  nTime 
)
protected

Definition at line 371 of file addrman.cpp.

void CAddrMan::Check ( )
inline

Definition at line 399 of file addrman.h.

void CAddrMan::Connected ( const CService addr,
int64  nTime = GetAdjustedTime() 
)
inline

Definition at line 492 of file addrman.h.

void CAddrMan::Connected_ ( const CService addr,
int64  nTime 
)
protected

Definition at line 510 of file addrman.cpp.

CAddrInfo * CAddrMan::Create ( const CAddress addr,
const CNetAddr addrSource,
int *  pnId = NULL 
)
protected

Definition at line 94 of file addrman.cpp.

CAddrInfo * CAddrMan::Find ( const CNetAddr addr,
int *  pnId = NULL 
)
protected

Definition at line 81 of file addrman.cpp.

std::vector<CAddress> CAddrMan::GetAddr ( )
inline

Definition at line 479 of file addrman.h.

void CAddrMan::GetAddr_ ( std::vector< CAddress > &  vAddr)
protected

Definition at line 494 of file addrman.cpp.

void CAddrMan::Good ( const CService addr,
int64  nTime = GetAdjustedTime() 
)
inline

Definition at line 443 of file addrman.h.

void CAddrMan::Good_ ( const CService addr,
int64  nTime 
)
protected

Definition at line 262 of file addrman.cpp.

CAddrMan::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);}}}}}});  )
inline

Definition at line 249 of file addrman.h.

void CAddrMan::MakeTried ( CAddrInfo info,
int  nId,
int  nOrigin 
)
protected

Definition at line 204 of file addrman.cpp.

CAddress CAddrMan::Select ( int  nUnkBias = 50)
inline

Definition at line 466 of file addrman.h.

CAddress CAddrMan::Select_ ( int  nUnkBias)
protected

Definition at line 390 of file addrman.cpp.

int CAddrMan::SelectTried ( int  nKBucket)
protected

Definition at line 126 of file addrman.cpp.

int CAddrMan::ShrinkNew ( int  nUBucket)
protected

Definition at line 150 of file addrman.cpp.

int CAddrMan::size ( )
inline

Definition at line 393 of file addrman.h.

void CAddrMan::SwapRandom ( unsigned int  nRandomPos1,
unsigned int  nRandomPos2 
)
protected

Definition at line 106 of file addrman.cpp.

Member Data Documentation

CCriticalSection CAddrMan::cs
mutableprivate

Definition at line 169 of file addrman.h.

std::map<CNetAddr, int> CAddrMan::mapAddr
private

Definition at line 181 of file addrman.h.

std::map<int, CAddrInfo> CAddrMan::mapInfo
private

Definition at line 178 of file addrman.h.

int CAddrMan::nIdCount
private

Definition at line 175 of file addrman.h.

std::vector<unsigned char> CAddrMan::nKey
private

Definition at line 172 of file addrman.h.

int CAddrMan::nNew
private

Definition at line 193 of file addrman.h.

int CAddrMan::nTried
private

Definition at line 187 of file addrman.h.

std::vector<int> CAddrMan::vRandom
private

Definition at line 184 of file addrman.h.

std::vector<std::set<int> > CAddrMan::vvNew
private

Definition at line 196 of file addrman.h.

std::vector<std::vector<int> > CAddrMan::vvTried
private

Definition at line 190 of file addrman.h.


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