Skip to content

Commit

Permalink
Merge pull request #2453 from Pythonix/addrman-fix
Browse files Browse the repository at this point in the history
net: Do not propagate obviously poor addresses onto the network
  • Loading branch information
jamescowens authored Mar 13, 2022
2 parents 232d6ef + 1cec406 commit df46de2
Showing 1 changed file with 10 additions and 4 deletions.
14 changes: 10 additions & 4 deletions src/addrman.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -491,17 +491,23 @@ int CAddrMan::Check_()

void CAddrMan::GetAddr_(std::vector<CAddress> &vAddr)
{
int nNodes = ADDRMAN_GETADDR_MAX_PCT*vRandom.size()/100;
unsigned int nNodes = ADDRMAN_GETADDR_MAX_PCT * vRandom.size() / 100;
if (nNodes > ADDRMAN_GETADDR_MAX)
nNodes = ADDRMAN_GETADDR_MAX;

// perform a random shuffle over the first nNodes elements of vRandom (selecting from all)
for (int n = 0; n<nNodes; n++)
// gather a list of random nodes, skipping those of low quality
for (unsigned int n = 0; n < vRandom.size(); n++)
{
if (vAddr.size() >= nNodes)
break;

int nRndPos = GetRandInt(vRandom.size() - n) + n;
SwapRandom(n, nRndPos);
assert(mapInfo.count(vRandom[n]) == 1);
vAddr.push_back(mapInfo[vRandom[n]]);

const CAddrInfo& ai = mapInfo[vRandom[n]];
if(!ai.IsTerrible())
vAddr.push_back(ai);
}
}

Expand Down

0 comments on commit df46de2

Please sign in to comment.