diff options
-rw-r--r-- | include/bancache.h | 26 | ||||
-rw-r--r-- | include/command_parse.h | 1 | ||||
-rw-r--r-- | include/cull_list.h | 2 | ||||
-rw-r--r-- | include/mode.h | 3 | ||||
-rw-r--r-- | include/u_listmode.h | 4 | ||||
-rw-r--r-- | include/xline.h | 2 | ||||
-rw-r--r-- | src/bancache.cpp | 47 |
7 files changed, 68 insertions, 17 deletions
diff --git a/include/bancache.h b/include/bancache.h index 2c58c7245..a96b194f9 100644 --- a/include/bancache.h +++ b/include/bancache.h @@ -19,12 +19,19 @@ class CoreExport BanCacheHit : public classbase { private: + InspIRCd *ServerInstance; public: - const std::string Type; - const std::string Reason; - const bool Banned; - const time_t Duration; - const time_t Creation; + std::string Type; + std::string Reason; + std::string IP; + + BanCacheHit(InspIRCd *Instance, const std::string &ip, const std::string &type, const std::string &reason) + { + ServerInstance = Instance; + this->Type = type; + this->Reason = reason; + this->IP = ip; + } }; // must be defined after class BanCacheHit. @@ -36,8 +43,15 @@ class CoreExport BanCacheManager : public classbase BanCacheHash *BanHash; InspIRCd *ServerInstance; public: - BanCacheHit *AddHit(const std::string &ip, bool banned, const std::string &reason); + + /** Creates and adds a Ban Cache item. + * @param ip The IP the item is for. + * @param type The type of ban cache item. std::string. .empty() means it's a negative match (user is allowed freely). + * @param reason The reason for the ban. Left .empty() if it's a negative match. + */ + BanCacheHit *AddHit(const std::string &ip, const std::string &type, const std::string &reason); BanCacheHit *GetHit(const std::string &ip); + bool RemoveHit(BanCacheHit *b); BanCacheManager(InspIRCd *Instance) { diff --git a/include/command_parse.h b/include/command_parse.h index d5c7049db..fb893411a 100644 --- a/include/command_parse.h +++ b/include/command_parse.h @@ -15,7 +15,6 @@ #define __COMMAND_PARSE_H #include <string> -#include "users.h" #include "ctables.h" #include "typedefs.h" diff --git a/include/cull_list.h b/include/cull_list.h index c5daab5dd..69836272d 100644 --- a/include/cull_list.h +++ b/include/cull_list.h @@ -19,8 +19,6 @@ #include <string> #include <deque> #include <vector> -#include "users.h" -#include "channels.h" class InspIRCd; diff --git a/include/mode.h b/include/mode.h index a787e4637..8da8d8b58 100644 --- a/include/mode.h +++ b/include/mode.h @@ -14,12 +14,9 @@ #ifndef __MODE_H #define __MODE_H -/* include the common header files */ #include <string> #include <deque> #include <vector> -#include "users.h" -#include "channels.h" #include "ctables.h" class InspIRCd; diff --git a/include/u_listmode.h b/include/u_listmode.h index 002530df4..dddd799ee 100644 --- a/include/u_listmode.h +++ b/include/u_listmode.h @@ -18,11 +18,9 @@ #include <string> #include <sstream> #include <vector> -#include "users.h" -#include "channels.h" +#include "inspircd.h" #include "modules.h" #include "wildcard.h" -#include "inspircd.h" /** Get the time as a string */ diff --git a/include/xline.h b/include/xline.h index 74c58e05c..fcbd9134d 100644 --- a/include/xline.h +++ b/include/xline.h @@ -17,8 +17,6 @@ #include <string> #include <deque> #include <vector> -#include "users.h" -#include "channels.h" /** XLine is the base class for ban lines such as G lines and K lines. * Modules may derive from this, and their xlines will automatically be diff --git a/src/bancache.cpp b/src/bancache.cpp index 0c5f00502..fe23fd0b7 100644 --- a/src/bancache.cpp +++ b/src/bancache.cpp @@ -16,4 +16,51 @@ #include "inspircd.h" #include "bancache.h" +BanCacheHit *BanCacheManager::AddHit(const std::string &ip, const std::string &type, const std::string &reason) +{ + BanCacheHit *b; + + + if (this->BanHash->find(ip) != this->BanHash->end()) // can't have two cache entries on the same IP, sorry.. + return NULL; + + b = new BanCacheHit(ServerInstance, ip, type, reason); + + this->BanHash->insert(std::make_pair(ip, b)); + return b; +} + +BanCacheHit *BanCacheManager::GetHit(const std::string &ip) +{ + BanCacheHash::iterator i = this->BanHash->find(ip); + + if (i == this->BanHash->end()) + return NULL; // free and safe + else + return i->second; // hit. +} + +bool BanCacheManager::RemoveHit(BanCacheHit *b) +{ + BanCacheHash::iterator i; + + if (!b) + return false; // I don't think so. + + i = this->BanHash->find(b->IP); + + if (i == this->BanHash->end()) + { + // err.. + ServerInstance->Log(DEBUG, "BanCacheManager::RemoveHit(): I got asked to remove a hit that wasn't in the hash(?)"); + } + else + { + this->BanHash->erase(b->IP); + } + + delete b; + return true; +} + |