]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/bancache.cpp
Argh, i give up
[user/henk/code/inspircd.git] / src / bancache.cpp
index 0c5f00502f9f2800420c4e4dd69e91a3e5741616..bfa1bde118c0b309117ce5ec8e07bcd147d7c2af 100644 (file)
 #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(i);
+       }
+
+       delete b;
+       return true;
+}
+
+void BanCacheManager::RehashCache()
+{
+       BanCacheHash* NewHash = new BanCacheHash();
+
+       BanCacheHash::iterator safei;
+       for (BanCacheHash::iterator n = BanHash->begin(); n != BanHash->end(); )
+       {
+               safei = n;
+               safei++;
+
+               /* Safe to delete items here through iterator 'n' */
+
+               /* Actually inserts a std::pair */
+               NewHash->insert(*n);
+
+               /* End of safe section */
+
+               n = safei;
+       }
+
+       delete BanHash;
+       BanHash = NewHash;
+}