MCPcopy Create free account
hub / github.com/BTCGPU/BTCGPU / Select_

Method Select_

src/addrman.cpp:349–394  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

347}
348
349CAddrInfo CAddrMan::Select_(bool newOnly)
350{
351 if (size() == 0)
352 return CAddrInfo();
353
354 if (newOnly && nNew == 0)
355 return CAddrInfo();
356
357 // Use a 50% chance for choosing between tried and new table entries.
358 if (!newOnly &&
359 (nTried > 0 && (nNew == 0 || RandomInt(2) == 0))) {
360 // use a tried node
361 double fChanceFactor = 1.0;
362 while (1) {
363 int nKBucket = RandomInt(ADDRMAN_TRIED_BUCKET_COUNT);
364 int nKBucketPos = RandomInt(ADDRMAN_BUCKET_SIZE);
365 while (vvTried[nKBucket][nKBucketPos] == -1) {
366 nKBucket = (nKBucket + insecure_rand.randbits(ADDRMAN_TRIED_BUCKET_COUNT_LOG2)) % ADDRMAN_TRIED_BUCKET_COUNT;
367 nKBucketPos = (nKBucketPos + insecure_rand.randbits(ADDRMAN_BUCKET_SIZE_LOG2)) % ADDRMAN_BUCKET_SIZE;
368 }
369 int nId = vvTried[nKBucket][nKBucketPos];
370 assert(mapInfo.count(nId) == 1);
371 CAddrInfo& info = mapInfo[nId];
372 if (RandomInt(1 << 30) < fChanceFactor * info.GetChance() * (1 << 30))
373 return info;
374 fChanceFactor *= 1.2;
375 }
376 } else {
377 // use a new node
378 double fChanceFactor = 1.0;
379 while (1) {
380 int nUBucket = RandomInt(ADDRMAN_NEW_BUCKET_COUNT);
381 int nUBucketPos = RandomInt(ADDRMAN_BUCKET_SIZE);
382 while (vvNew[nUBucket][nUBucketPos] == -1) {
383 nUBucket = (nUBucket + insecure_rand.randbits(ADDRMAN_NEW_BUCKET_COUNT_LOG2)) % ADDRMAN_NEW_BUCKET_COUNT;
384 nUBucketPos = (nUBucketPos + insecure_rand.randbits(ADDRMAN_BUCKET_SIZE_LOG2)) % ADDRMAN_BUCKET_SIZE;
385 }
386 int nId = vvNew[nUBucket][nUBucketPos];
387 assert(mapInfo.count(nId) == 1);
388 CAddrInfo& info = mapInfo[nId];
389 if (RandomInt(1 << 30) < fChanceFactor * info.GetChance() * (1 << 30))
390 return info;
391 fChanceFactor *= 1.2;
392 }
393 }
394}
395
396#ifdef DEBUG_ADDRMAN
397int CAddrMan::Check_()

Callers

nothing calls this directly

Calls 4

CAddrInfoClass · 0.85
randbitsMethod · 0.80
GetChanceMethod · 0.80
countMethod · 0.45

Tested by

no test coverage detected