Browse Source

[net] extend core functionallity for ban/unban/listban

0.13
Jonas Schnelli 10 years ago
parent
commit
2252fb91cd
  1. 19
      src/net.cpp
  2. 5
      src/net.h

19
src/net.cpp

@ -458,14 +458,29 @@ bool CNode::IsBanned(CNetAddr ip) @@ -458,14 +458,29 @@ 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
{
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<CNetAddr, int64_t> &banMap)
{
LOCK(cs_setBanned);
banMap = setBanned; //create a thread safe copy
}

5
src/net.h

@ -606,7 +606,10 @@ public: @@ -606,7 +606,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<CNetAddr, int64_t> &banmap);
void copyStats(CNodeStats &stats);
static bool IsWhitelistedRange(const CNetAddr &ip);

Loading…
Cancel
Save