aboutsummaryrefslogtreecommitdiff
path: root/src/addrman.cpp
diff options
context:
space:
mode:
authorAmiti Uttarwar <amiti@uttarwar.org>2021-08-25 15:40:59 -0700
committerAmiti Uttarwar <amiti@uttarwar.org>2021-09-28 19:02:34 -0400
commit7cba9d56185b9325ce41d79364e448462fff0f6a (patch)
tree810167c86f44ed8d730232ec77544668b3bd6c85 /src/addrman.cpp
parent8af5b54f973e11c847345418d8631bc301b96130 (diff)
downloadbitcoin-7cba9d56185b9325ce41d79364e448462fff0f6a.tar.xz
[net, addrman] Remove external dependencies on CAddrInfo objects
CAddrInfo objects are an implementation detail of how AddrMan manages and adds metadata to different records. Encapsulate this logic by updating Select & SelectTriedCollision to return the additional info that the callers need.
Diffstat (limited to 'src/addrman.cpp')
-rw-r--r--src/addrman.cpp41
1 files changed, 20 insertions, 21 deletions
diff --git a/src/addrman.cpp b/src/addrman.cpp
index 2fc6ca29a1..324bab7292 100644
--- a/src/addrman.cpp
+++ b/src/addrman.cpp
@@ -694,15 +694,13 @@ void AddrManImpl::Attempt_(const CService& addr, bool fCountFailure, int64_t nTi
}
}
-CAddrInfo AddrManImpl::Select_(bool newOnly) const
+std::pair<CAddress, int64_t> AddrManImpl::Select_(bool newOnly) const
{
AssertLockHeld(cs);
- if (vRandom.empty())
- return CAddrInfo();
+ if (vRandom.empty()) return {};
- if (newOnly && nNew == 0)
- return CAddrInfo();
+ if (newOnly && nNew == 0) return {};
// Use a 50% chance for choosing between tried and new table entries.
if (!newOnly &&
@@ -720,8 +718,9 @@ CAddrInfo AddrManImpl::Select_(bool newOnly) const
const auto it_found{mapInfo.find(nId)};
assert(it_found != mapInfo.end());
const CAddrInfo& info{it_found->second};
- if (insecure_rand.randbits(30) < fChanceFactor * info.GetChance() * (1 << 30))
- return info;
+ if (insecure_rand.randbits(30) < fChanceFactor * info.GetChance() * (1 << 30)) {
+ return {info, info.nLastTry};
+ }
fChanceFactor *= 1.2;
}
} else {
@@ -738,8 +737,9 @@ CAddrInfo AddrManImpl::Select_(bool newOnly) const
const auto it_found{mapInfo.find(nId)};
assert(it_found != mapInfo.end());
const CAddrInfo& info{it_found->second};
- if (insecure_rand.randbits(30) < fChanceFactor * info.GetChance() * (1 << 30))
- return info;
+ if (insecure_rand.randbits(30) < fChanceFactor * info.GetChance() * (1 << 30)) {
+ return {info, info.nLastTry};
+ }
fChanceFactor *= 1.2;
}
}
@@ -883,11 +883,11 @@ void AddrManImpl::ResolveCollisions_()
}
}
-CAddrInfo AddrManImpl::SelectTriedCollision_()
+std::pair<CAddress, int64_t> AddrManImpl::SelectTriedCollision_()
{
AssertLockHeld(cs);
- if (m_tried_collisions.size() == 0) return CAddrInfo();
+ if (m_tried_collisions.size() == 0) return {};
std::set<int>::iterator it = m_tried_collisions.begin();
@@ -898,7 +898,7 @@ CAddrInfo AddrManImpl::SelectTriedCollision_()
// If id_new not found in mapInfo remove it from m_tried_collisions
if (mapInfo.count(id_new) != 1) {
m_tried_collisions.erase(it);
- return CAddrInfo();
+ return {};
}
const CAddrInfo& newInfo = mapInfo[id_new];
@@ -907,9 +907,8 @@ CAddrInfo AddrManImpl::SelectTriedCollision_()
int tried_bucket = newInfo.GetTriedBucket(nKey, m_asmap);
int tried_bucket_pos = newInfo.GetBucketPosition(nKey, false, tried_bucket);
- int id_old = vvTried[tried_bucket][tried_bucket_pos];
-
- return mapInfo[id_old];
+ const CAddrInfo& info_old = mapInfo[vvTried[tried_bucket][tried_bucket_pos]];
+ return {info_old, info_old.nLastTry};
}
void AddrManImpl::Check() const
@@ -1059,20 +1058,20 @@ void AddrManImpl::ResolveCollisions()
Check();
}
-CAddrInfo AddrManImpl::SelectTriedCollision()
+std::pair<CAddress, int64_t> AddrManImpl::SelectTriedCollision()
{
LOCK(cs);
Check();
- const CAddrInfo ret = SelectTriedCollision_();
+ const auto ret = SelectTriedCollision_();
Check();
return ret;
}
-CAddrInfo AddrManImpl::Select(bool newOnly) const
+std::pair<CAddress, int64_t> AddrManImpl::Select(bool newOnly) const
{
LOCK(cs);
Check();
- const CAddrInfo addrRet = Select_(newOnly);
+ const auto addrRet = Select_(newOnly);
Check();
return addrRet;
}
@@ -1159,12 +1158,12 @@ void CAddrMan::ResolveCollisions()
m_impl->ResolveCollisions();
}
-CAddrInfo CAddrMan::SelectTriedCollision()
+std::pair<CAddress, int64_t> CAddrMan::SelectTriedCollision()
{
return m_impl->SelectTriedCollision();
}
-CAddrInfo CAddrMan::Select(bool newOnly) const
+std::pair<CAddress, int64_t> CAddrMan::Select(bool newOnly) const
{
return m_impl->Select(newOnly);
}