From 7bc4dce6ede055be5f6d494766eb31b9e68ae8a1 Mon Sep 17 00:00:00 2001 From: moneromooo-monero Date: Wed, 25 Nov 2015 22:04:27 +0000 Subject: [PATCH] net_node: allow bans for custom amounts of time m_blocked_ips now stores the unblocking time, rather than the blocking time. Also change > to >=, since banning for 0 seconds should not ban --- src/p2p/net_node.h | 2 +- src/p2p/net_node.inl | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/p2p/net_node.h b/src/p2p/net_node.h index 4aaac813..74599f18 100644 --- a/src/p2p/net_node.h +++ b/src/p2p/net_node.h @@ -171,7 +171,7 @@ namespace nodetool virtual bool drop_connection(const epee::net_utils::connection_context_base& context); virtual void request_callback(const epee::net_utils::connection_context_base& context); virtual void for_each_connection(std::function f); - virtual bool block_ip(uint32_t adress); + virtual bool block_ip(uint32_t adress, uint32_t seconds = P2P_IP_BLOCKTIME); virtual bool add_ip_fail(uint32_t address); //----------------- i_connection_filter -------------------------------------------------------- virtual bool is_remote_ip_allowed(uint32_t adress); diff --git a/src/p2p/net_node.inl b/src/p2p/net_node.inl index 11df7ee4..f15e6020 100644 --- a/src/p2p/net_node.inl +++ b/src/p2p/net_node.inl @@ -169,7 +169,7 @@ namespace nodetool auto it = m_blocked_ips.find(addr); if(it == m_blocked_ips.end()) return true; - if(time(nullptr) - it->second > P2P_IP_BLOCKTIME ) + if(time(nullptr) >= it->second) { m_blocked_ips.erase(it); LOG_PRINT_CYAN("IP " << epee::string_tools::get_ip_string_from_int32(addr) << "is unblocked.", LOG_LEVEL_0); @@ -186,10 +186,10 @@ namespace nodetool } //----------------------------------------------------------------------------------- template - bool node_server::block_ip(uint32_t addr) + bool node_server::block_ip(uint32_t addr, uint32_t seconds) { CRITICAL_REGION_LOCAL(m_blocked_ips_lock); - m_blocked_ips[addr] = time(nullptr); + m_blocked_ips[addr] = time(nullptr) + seconds; LOG_PRINT_CYAN("IP " << epee::string_tools::get_ip_string_from_int32(addr) << " blocked.", LOG_LEVEL_0); return true; }