From 38ceb73848a3c37df60bce637d855b7564b09730 Mon Sep 17 00:00:00 2001 From: moneromooo-monero Date: Thu, 26 Nov 2015 00:04:22 +0000 Subject: add RPC calls and commands to get/set bans --- src/p2p/net_node.h | 4 +++- src/p2p/net_node.inl | 14 +++++++++++++- src/p2p/net_node_common.h | 14 ++++++++++++-- 3 files changed, 28 insertions(+), 4 deletions(-) (limited to 'src/p2p') diff --git a/src/p2p/net_node.h b/src/p2p/net_node.h index 74599f180..39cbe01fa 100644 --- a/src/p2p/net_node.h +++ b/src/p2p/net_node.h @@ -117,6 +117,9 @@ namespace nodetool size_t get_outgoing_connections_count(); peerlist_manager& get_peerlist_manager(){return m_peerlist;} void delete_connections(size_t count); + virtual bool block_ip(uint32_t adress, time_t seconds = P2P_IP_BLOCKTIME); + virtual bool unblock_ip(uint32_t address); + virtual std::map get_blocked_ips() const { return m_blocked_ips; } private: const std::vector m_seed_nodes_list = { "seeds.moneroseeds.se" @@ -171,7 +174,6 @@ 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, 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 f15e60201..067f6378d 100644 --- a/src/p2p/net_node.inl +++ b/src/p2p/net_node.inl @@ -186,7 +186,7 @@ namespace nodetool } //----------------------------------------------------------------------------------- template - bool node_server::block_ip(uint32_t addr, uint32_t seconds) + bool node_server::block_ip(uint32_t addr, time_t seconds) { CRITICAL_REGION_LOCAL(m_blocked_ips_lock); m_blocked_ips[addr] = time(nullptr) + seconds; @@ -195,6 +195,18 @@ namespace nodetool } //----------------------------------------------------------------------------------- template + bool node_server::unblock_ip(uint32_t addr) + { + CRITICAL_REGION_LOCAL(m_blocked_ips_lock); + auto i = m_blocked_ips.find(addr); + if (i == m_blocked_ips.end()) + return false; + m_blocked_ips.erase(i); + LOG_PRINT_CYAN("IP " << epee::string_tools::get_ip_string_from_int32(addr) << " unblocked.", LOG_LEVEL_0); + return true; + } + //----------------------------------------------------------------------------------- + template bool node_server::add_ip_fail(uint32_t address) { CRITICAL_REGION_LOCAL(m_ip_fails_score_lock); diff --git a/src/p2p/net_node_common.h b/src/p2p/net_node_common.h index 93b29deb2..2505006ad 100644 --- a/src/p2p/net_node_common.h +++ b/src/p2p/net_node_common.h @@ -50,7 +50,9 @@ namespace nodetool virtual void request_callback(const epee::net_utils::connection_context_base& context)=0; virtual uint64_t get_connections_count()=0; virtual void for_each_connection(std::function f)=0; - virtual bool block_ip(uint32_t adress)=0; + virtual bool block_ip(uint32_t adress, time_t seconds = 0)=0; + virtual bool unblock_ip(uint32_t adress)=0; + virtual std::map get_blocked_ips()const=0; virtual bool add_ip_fail(uint32_t adress)=0; }; @@ -86,10 +88,18 @@ namespace nodetool { return false; } - virtual bool block_ip(uint32_t adress) + virtual bool block_ip(uint32_t adress, time_t seconds) { return true; } + virtual bool unblock_ip(uint32_t adress) + { + return true; + } + virtual std::map get_blocked_ips() const + { + return std::map(); + } virtual bool add_ip_fail(uint32_t adress) { return true; -- cgit v1.2.3