From 997829713ccc7e21d3a2988b6e79ddec3dd3cf99 Mon Sep 17 00:00:00 2001 From: Jonas Schnelli Date: Tue, 19 May 2015 10:07:23 +0200 Subject: [PATCH] [net] extend core functionallity for ban/unban/listban --- src/net.cpp | 27 +++++++++++++++++++++------ src/net.h | 5 ++++- 2 files changed, 25 insertions(+), 7 deletions(-) diff --git a/src/net.cpp b/src/net.cpp index 0a96d01f2..77227c51b 100644 --- a/src/net.cpp +++ b/src/net.cpp @@ -464,16 +464,31 @@ bool CNode::IsBanned(CNetAddr ip) return fResult; } -bool CNode::Ban(const CNetAddr &addr) { +bool CNode::Ban(const CNetAddr &addr, int64_t bantimeoffset) { int64_t banTime = GetTime()+GetArg("-bantime", 60*60*24); // Default 24-hour ban - { - LOCK(cs_setBanned); - if (setBanned[addr] < banTime) - setBanned[addr] = banTime; - } + if (bantimeoffset > 0) + banTime = GetTime()+bantimeoffset; + + LOCK(cs_setBanned); + if (setBanned[addr] < banTime) + setBanned[addr] = banTime; + return true; } +bool CNode::Unban(const CNetAddr &addr) { + LOCK(cs_setBanned); + if (setBanned.erase(addr)) + return true; + return false; +} + +void CNode::GetBanned(std::map &banMap) +{ + LOCK(cs_setBanned); + banMap = setBanned; //create a thread safe copy +} + std::vector CNode::vWhitelistedRange; CCriticalSection CNode::cs_vWhitelistedRange; diff --git a/src/net.h b/src/net.h index 50fb90dca..db539f2ed 100644 --- a/src/net.h +++ b/src/net.h @@ -613,7 +613,10 @@ public: // new code. static void ClearBanned(); // needed for unit testing static bool IsBanned(CNetAddr ip); - static bool Ban(const CNetAddr &ip); + static bool Ban(const CNetAddr &ip, int64_t bantimeoffset = 0); + static bool Unban(const CNetAddr &ip); + static void GetBanned(std::map &banmap); + void copyStats(CNodeStats &stats); static bool IsWhitelistedRange(const CNetAddr &ip);