|
|
|
@ -16,6 +16,7 @@
|
|
|
|
|
#include <crypto/sha256.h>
|
|
|
|
|
#include <i2p.h>
|
|
|
|
|
#include <net_permissions.h>
|
|
|
|
|
#include <netaddress.h>
|
|
|
|
|
#include <netbase.h>
|
|
|
|
|
#include <node/ui_interface.h>
|
|
|
|
|
#include <protocol.h>
|
|
|
|
@ -2669,9 +2670,9 @@ CConnman::~CConnman()
|
|
|
|
|
Stop();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
std::vector<CAddress> CConnman::GetAddresses(size_t max_addresses, size_t max_pct) const
|
|
|
|
|
std::vector<CAddress> CConnman::GetAddresses(size_t max_addresses, size_t max_pct, std::optional<Network> network) const
|
|
|
|
|
{
|
|
|
|
|
std::vector<CAddress> addresses = addrman.GetAddr(max_addresses, max_pct, /* network */ std::nullopt);
|
|
|
|
|
std::vector<CAddress> addresses = addrman.GetAddr(max_addresses, max_pct, network);
|
|
|
|
|
if (m_banman) {
|
|
|
|
|
addresses.erase(std::remove_if(addresses.begin(), addresses.end(),
|
|
|
|
|
[this](const CAddress& addr){return m_banman->IsDiscouraged(addr) || m_banman->IsBanned(addr);}),
|
|
|
|
@ -2691,7 +2692,7 @@ std::vector<CAddress> CConnman::GetAddresses(CNode& requestor, size_t max_addres
|
|
|
|
|
auto r = m_addr_response_caches.emplace(cache_id, CachedAddrResponse{});
|
|
|
|
|
CachedAddrResponse& cache_entry = r.first->second;
|
|
|
|
|
if (cache_entry.m_cache_entry_expiration < current_time) { // If emplace() added new one it has expiration 0.
|
|
|
|
|
cache_entry.m_addrs_response_cache = GetAddresses(max_addresses, max_pct);
|
|
|
|
|
cache_entry.m_addrs_response_cache = GetAddresses(max_addresses, max_pct, /* network */ std::nullopt);
|
|
|
|
|
// Choosing a proper cache lifetime is a trade-off between the privacy leak minimization
|
|
|
|
|
// and the usefulness of ADDR responses to honest users.
|
|
|
|
|
//
|
|
|
|
|