From acd6135b43941fa51d52f5fcdb2ce944280ad01e Mon Sep 17 00:00:00 2001 From: Gleb Naumenko Date: Sat, 16 May 2020 21:05:44 -0400 Subject: Cache responses to addr requests Prevents a spy from scraping victim's AddrMan by reconnecting and re-requesting addrs. --- src/net.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'src/net.cpp') diff --git a/src/net.cpp b/src/net.cpp index 171358bb5..bf29d928a 100644 --- a/src/net.cpp +++ b/src/net.cpp @@ -2539,6 +2539,17 @@ std::vector CConnman::GetAddresses() return addresses; } +std::vector CConnman::GetAddresses(Network requestor_network) +{ + const auto current_time = GetTime(); + if (m_addr_response_caches.find(requestor_network) == m_addr_response_caches.end() || + m_addr_response_caches[requestor_network].m_update_addr_response < current_time) { + m_addr_response_caches[requestor_network].m_addrs_response_cache = GetAddresses(); + m_addr_response_caches[requestor_network].m_update_addr_response = current_time + std::chrono::hours(21) + GetRandMillis(std::chrono::hours(6)); + } + return m_addr_response_caches[requestor_network].m_addrs_response_cache; +} + bool CConnman::AddNode(const std::string& strNode) { LOCK(cs_vAddedNodes); -- cgit v1.2.3