From 515ac2951d767bdb712c4997010045715902e6ab Mon Sep 17 00:00:00 2001 From: moneromooo-monero Date: Thu, 28 Mar 2019 22:24:36 +0000 Subject: [PATCH] p2p: store network address directly in blocked host list rather than their string representation --- src/p2p/net_node.h | 4 ++-- src/p2p/net_node.inl | 6 +++--- src/p2p/net_node_common.h | 6 +++--- src/rpc/core_rpc_server.cpp | 8 ++++---- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/p2p/net_node.h b/src/p2p/net_node.h index 42bb3b061..2709e49af 100644 --- a/src/p2p/net_node.h +++ b/src/p2p/net_node.h @@ -248,7 +248,7 @@ namespace nodetool void change_max_in_public_peers(size_t count); virtual bool block_host(const epee::net_utils::network_address &adress, time_t seconds = P2P_IP_BLOCKTIME); virtual bool unblock_host(const epee::net_utils::network_address &address); - virtual std::map get_blocked_hosts() { CRITICAL_REGION_LOCAL(m_blocked_hosts_lock); return m_blocked_hosts; } + virtual std::map get_blocked_hosts() { CRITICAL_REGION_LOCAL(m_blocked_hosts_lock); return m_blocked_hosts; } virtual void add_used_stripe_peer(const typename t_payload_net_handler::connection_context &context); virtual void remove_used_stripe_peer(const typename t_payload_net_handler::connection_context &context); @@ -462,7 +462,7 @@ namespace nodetool epee::critical_section m_conn_fails_cache_lock; epee::critical_section m_blocked_hosts_lock; - std::map m_blocked_hosts; + std::map m_blocked_hosts; epee::critical_section m_host_fails_score_lock; std::map m_host_fails_score; diff --git a/src/p2p/net_node.inl b/src/p2p/net_node.inl index a5800df5e..37a3f393d 100644 --- a/src/p2p/net_node.inl +++ b/src/p2p/net_node.inl @@ -158,7 +158,7 @@ namespace nodetool bool node_server::is_remote_host_allowed(const epee::net_utils::network_address &address) { CRITICAL_REGION_LOCAL(m_blocked_hosts_lock); - auto it = m_blocked_hosts.find(address.host_str()); + auto it = m_blocked_hosts.find(address); if(it == m_blocked_hosts.end()) return true; if(time(nullptr) >= it->second) @@ -184,7 +184,7 @@ namespace nodetool limit = std::numeric_limits::max(); else limit = now + seconds; - m_blocked_hosts[addr.host_str()] = limit; + m_blocked_hosts[addr] = limit; // drop any connection to that address. This should only have to look into // the zone related to the connection, but really make sure everything is @@ -214,7 +214,7 @@ namespace nodetool bool node_server::unblock_host(const epee::net_utils::network_address &address) { CRITICAL_REGION_LOCAL(m_blocked_hosts_lock); - auto i = m_blocked_hosts.find(address.host_str()); + auto i = m_blocked_hosts.find(address); if (i == m_blocked_hosts.end()) return false; m_blocked_hosts.erase(i); diff --git a/src/p2p/net_node_common.h b/src/p2p/net_node_common.h index 26451b333..e5e746e5b 100644 --- a/src/p2p/net_node_common.h +++ b/src/p2p/net_node_common.h @@ -56,7 +56,7 @@ namespace nodetool virtual bool for_connection(const boost::uuids::uuid&, std::function f)=0; virtual bool block_host(const epee::net_utils::network_address &address, time_t seconds = 0)=0; virtual bool unblock_host(const epee::net_utils::network_address &address)=0; - virtual std::map get_blocked_hosts()=0; + virtual std::map get_blocked_hosts()=0; virtual bool add_host_fail(const epee::net_utils::network_address &address)=0; virtual void add_used_stripe_peer(const t_connection_context &context)=0; virtual void remove_used_stripe_peer(const t_connection_context &context)=0; @@ -112,9 +112,9 @@ namespace nodetool { return true; } - virtual std::map get_blocked_hosts() + virtual std::map get_blocked_hosts() { - return std::map(); + return std::map(); } virtual bool add_host_fail(const epee::net_utils::network_address &address) { diff --git a/src/rpc/core_rpc_server.cpp b/src/rpc/core_rpc_server.cpp index b6836e636..5fbdcde39 100644 --- a/src/rpc/core_rpc_server.cpp +++ b/src/rpc/core_rpc_server.cpp @@ -1772,15 +1772,15 @@ namespace cryptonote PERF_TIMER(on_get_bans); auto now = time(nullptr); - std::map blocked_hosts = m_p2p.get_blocked_hosts(); - for (std::map::const_iterator i = blocked_hosts.begin(); i != blocked_hosts.end(); ++i) + std::map blocked_hosts = m_p2p.get_blocked_hosts(); + for (std::map::const_iterator i = blocked_hosts.begin(); i != blocked_hosts.end(); ++i) { if (i->second > now) { COMMAND_RPC_GETBANS::ban b; - b.host = i->first; + b.host = i->first.host_str(); b.ip = 0; uint32_t ip; - if (epee::string_tools::get_ip_int32_from_string(ip, i->first)) + if (epee::string_tools::get_ip_int32_from_string(ip, b.host)) b.ip = ip; b.seconds = i->second - now; res.bans.push_back(b);