Skip to content

Commit e16f420

Browse files
committed
net: Optionally include terrible addresses in GetAddr results
1 parent 0584882 commit e16f420

File tree

5 files changed

+14
-12
lines changed

5 files changed

+14
-12
lines changed

src/addrman.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -800,7 +800,7 @@ int AddrManImpl::GetEntry(bool use_tried, size_t bucket, size_t position) const
800800
return -1;
801801
}
802802

803-
std::vector<CAddress> AddrManImpl::GetAddr_(size_t max_addresses, size_t max_pct, std::optional<Network> network) const
803+
std::vector<CAddress> AddrManImpl::GetAddr_(size_t max_addresses, size_t max_pct, std::optional<Network> network, const bool filtered) const
804804
{
805805
AssertLockHeld(cs);
806806

@@ -830,7 +830,7 @@ std::vector<CAddress> AddrManImpl::GetAddr_(size_t max_addresses, size_t max_pct
830830
if (network != std::nullopt && ai.GetNetClass() != network) continue;
831831

832832
// Filter for quality
833-
if (ai.IsTerrible(now)) continue;
833+
if (ai.IsTerrible(now) && filtered) continue;
834834

835835
addresses.push_back(ai);
836836
}
@@ -1214,11 +1214,11 @@ std::pair<CAddress, NodeSeconds> AddrManImpl::Select(bool new_only, std::optiona
12141214
return addrRet;
12151215
}
12161216

1217-
std::vector<CAddress> AddrManImpl::GetAddr(size_t max_addresses, size_t max_pct, std::optional<Network> network) const
1217+
std::vector<CAddress> AddrManImpl::GetAddr(size_t max_addresses, size_t max_pct, std::optional<Network> network, const bool filtered) const
12181218
{
12191219
LOCK(cs);
12201220
Check();
1221-
auto addresses = GetAddr_(max_addresses, max_pct, network);
1221+
auto addresses = GetAddr_(max_addresses, max_pct, network, filtered);
12221222
Check();
12231223
return addresses;
12241224
}
@@ -1317,9 +1317,9 @@ std::pair<CAddress, NodeSeconds> AddrMan::Select(bool new_only, std::optional<Ne
13171317
return m_impl->Select(new_only, network);
13181318
}
13191319

1320-
std::vector<CAddress> AddrMan::GetAddr(size_t max_addresses, size_t max_pct, std::optional<Network> network) const
1320+
std::vector<CAddress> AddrMan::GetAddr(size_t max_addresses, size_t max_pct, std::optional<Network> network, const bool filtered) const
13211321
{
1322-
return m_impl->GetAddr(max_addresses, max_pct, network);
1322+
return m_impl->GetAddr(max_addresses, max_pct, network, filtered);
13231323
}
13241324

13251325
std::vector<std::pair<AddrInfo, AddressPosition>> AddrMan::GetEntries(bool use_tried) const

src/addrman.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -164,10 +164,11 @@ class AddrMan
164164
* @param[in] max_addresses Maximum number of addresses to return (0 = all).
165165
* @param[in] max_pct Maximum percentage of addresses to return (0 = all).
166166
* @param[in] network Select only addresses of this network (nullopt = all).
167+
* @param[in] filtered Select only addresses that are considered good quality (false = all).
167168
*
168169
* @return A vector of randomly selected addresses from vRandom.
169170
*/
170-
std::vector<CAddress> GetAddr(size_t max_addresses, size_t max_pct, std::optional<Network> network) const;
171+
std::vector<CAddress> GetAddr(size_t max_addresses, size_t max_pct, std::optional<Network> network, const bool filtered = true) const;
171172

172173
/**
173174
* Returns an information-location pair for all addresses in the selected addrman table.

src/addrman_impl.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ class AddrManImpl
129129
std::pair<CAddress, NodeSeconds> Select(bool new_only, std::optional<Network> network) const
130130
EXCLUSIVE_LOCKS_REQUIRED(!cs);
131131

132-
std::vector<CAddress> GetAddr(size_t max_addresses, size_t max_pct, std::optional<Network> network) const
132+
std::vector<CAddress> GetAddr(size_t max_addresses, size_t max_pct, std::optional<Network> network, const bool filtered = true) const
133133
EXCLUSIVE_LOCKS_REQUIRED(!cs);
134134

135135
std::vector<std::pair<AddrInfo, AddressPosition>> GetEntries(bool from_tried) const
@@ -261,7 +261,7 @@ class AddrManImpl
261261
* */
262262
int GetEntry(bool use_tried, size_t bucket, size_t position) const EXCLUSIVE_LOCKS_REQUIRED(cs);
263263

264-
std::vector<CAddress> GetAddr_(size_t max_addresses, size_t max_pct, std::optional<Network> network) const EXCLUSIVE_LOCKS_REQUIRED(cs);
264+
std::vector<CAddress> GetAddr_(size_t max_addresses, size_t max_pct, std::optional<Network> network, const bool filtered = true) const EXCLUSIVE_LOCKS_REQUIRED(cs);
265265

266266
std::vector<std::pair<AddrInfo, AddressPosition>> GetEntries_(bool from_tried) const EXCLUSIVE_LOCKS_REQUIRED(cs);
267267

src/net.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3410,9 +3410,9 @@ CConnman::~CConnman()
34103410
Stop();
34113411
}
34123412

3413-
std::vector<CAddress> CConnman::GetAddresses(size_t max_addresses, size_t max_pct, std::optional<Network> network) const
3413+
std::vector<CAddress> CConnman::GetAddresses(size_t max_addresses, size_t max_pct, std::optional<Network> network, const bool filtered) const
34143414
{
3415-
std::vector<CAddress> addresses = addrman.GetAddr(max_addresses, max_pct, network);
3415+
std::vector<CAddress> addresses = addrman.GetAddr(max_addresses, max_pct, network, filtered);
34163416
if (m_banman) {
34173417
addresses.erase(std::remove_if(addresses.begin(), addresses.end(),
34183418
[this](const CAddress& addr){return m_banman->IsDiscouraged(addr) || m_banman->IsBanned(addr);}),

src/net.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1172,8 +1172,9 @@ class CConnman
11721172
* @param[in] max_addresses Maximum number of addresses to return (0 = all).
11731173
* @param[in] max_pct Maximum percentage of addresses to return (0 = all).
11741174
* @param[in] network Select only addresses of this network (nullopt = all).
1175+
* @param[in] filtered Select only addresses that are considered high quality (false = all).
11751176
*/
1176-
std::vector<CAddress> GetAddresses(size_t max_addresses, size_t max_pct, std::optional<Network> network) const;
1177+
std::vector<CAddress> GetAddresses(size_t max_addresses, size_t max_pct, std::optional<Network> network, const bool filtered = true) const;
11771178
/**
11781179
* Cache is used to minimize topology leaks, so it should
11791180
* be used for all non-trusted calls, for example, p2p.

0 commit comments

Comments
 (0)