]> git.netwichtig.de Git - user/henk/code/inspircd.git/commitdiff
Move whowas settings into cmd_whowas from ConfigReader
authorattilamolnar <attilamolnar@hush.com>
Fri, 6 Jul 2012 13:57:00 +0000 (15:57 +0200)
committerattilamolnar <attilamolnar@hush.com>
Thu, 4 Apr 2013 17:05:20 +0000 (19:05 +0200)
include/commands/cmd_whowas.h
include/configreader.h
src/commands/cmd_whowas.cpp
src/configreader.cpp

index 8033f1796fc4b3cf585808e6fcabcd8bc2b779dd..590c111724fe455fea823fcb3fb5a0324f863be2 100644 (file)
@@ -55,6 +55,19 @@ class CommandWhowas : public Command
        whowas_users_fifo whowas_fifo;
 
   public:
+       /** Max number of WhoWas entries per user.
+        */
+       int WhoWasGroupSize;
+
+       /** Max number of cumulative user-entries in WhoWas.
+        *  When max reached and added to, push out oldest entry FIFO style.
+        */
+       int WhoWasMaxGroups;
+
+       /** Max seconds a user is kept in WhoWas before being pruned.
+        */
+       int WhoWasMaxKeep;
+
        CommandWhowas(Module* parent);
        /** Handle command.
         * @param parameters The parameters to the comamnd
index b26be3d6cbb6825f5ea2fc20e5ddfbf79deabc5a..d3b3edd84f5cae50835830bce76d4ffdb88126d4 100644 (file)
@@ -240,19 +240,6 @@ class CoreExport ServerConfig
         */
        int c_ipv6_range;
 
-       /** Max number of WhoWas entries per user.
-        */
-       int WhoWasGroupSize;
-
-       /** Max number of cumulative user-entries in WhoWas.
-        *  When max reached and added to, push out oldest entry FIFO style.
-        */
-       int WhoWasMaxGroups;
-
-       /** Max seconds a user is kept in WhoWas before being pruned.
-        */
-       int WhoWasMaxKeep;
-
        /** Holds the server name of the local server
         * as defined by the administrator.
         */
index dfe513dff78c8d34ef36f87d51bad701542ee9c7..06c4b0509c759b1c3b31a9a7c144102b55722cd4 100644 (file)
@@ -23,7 +23,8 @@
 #include "inspircd.h"
 #include "commands/cmd_whowas.h"
 
-CommandWhowas::CommandWhowas( Module* parent) : Command(parent, "WHOWAS", 1)
+CommandWhowas::CommandWhowas( Module* parent)
+       : Command(parent, "WHOWAS", 1), WhoWasGroupSize(0), WhoWasMaxGroups(0), WhoWasMaxKeep(0)
 {
        syntax = "<nick>{,<nick>}";
        Penalty = 2;
@@ -32,7 +33,7 @@ CommandWhowas::CommandWhowas( Module* parent) : Command(parent, "WHOWAS", 1)
 CmdResult CommandWhowas::Handle (const std::vector<std::string>& parameters, User* user)
 {
        /* if whowas disabled in config */
-       if (ServerInstance->Config->WhoWasGroupSize == 0 || ServerInstance->Config->WhoWasMaxGroups == 0)
+       if (this->WhoWasGroupSize == 0 || this->WhoWasMaxGroups == 0)
        {
                user->WriteNumeric(421, "%s %s :This command has been disabled.",user->nick.c_str(),name.c_str());
                return CMD_FAILURE;
@@ -108,7 +109,7 @@ std::string CommandWhowas::GetStats()
 void CommandWhowas::AddToWhoWas(User* user)
 {
        /* if whowas disabled */
-       if (ServerInstance->Config->WhoWasGroupSize == 0 || ServerInstance->Config->WhoWasMaxGroups == 0)
+       if (this->WhoWasGroupSize == 0 || this->WhoWasMaxGroups == 0)
        {
                return;
        }
@@ -123,7 +124,7 @@ void CommandWhowas::AddToWhoWas(User* user)
                whowas[user->nick.c_str()] = n;
                whowas_fifo.push_back(std::make_pair(ServerInstance->Time(),user->nick.c_str()));
 
-               if ((int)(whowas.size()) > ServerInstance->Config->WhoWasMaxGroups)
+               if ((int)(whowas.size()) > this->WhoWasMaxGroups)
                {
                        whowas_users::iterator iter2 = whowas.find(whowas_fifo[0].second);
                        if (iter2 != whowas.end())
@@ -152,7 +153,7 @@ void CommandWhowas::AddToWhoWas(User* user)
                WhoWasGroup *a = new WhoWasGroup(user);
                group->push_back(a);
 
-               if ((int)(group->size()) > ServerInstance->Config->WhoWasGroupSize)
+               if ((int)(group->size()) > this->WhoWasGroupSize)
                {
                        WhoWasGroup *a2 = (WhoWasGroup*)*(group->begin());
                        delete a2;
@@ -165,9 +166,9 @@ void CommandWhowas::AddToWhoWas(User* user)
 void CommandWhowas::PruneWhoWas(time_t t)
 {
        /* config values */
-       int groupsize = ServerInstance->Config->WhoWasGroupSize;
-       int maxgroups = ServerInstance->Config->WhoWasMaxGroups;
-       int maxkeep =   ServerInstance->Config->WhoWasMaxKeep;
+       int groupsize = this->WhoWasGroupSize;
+       int maxgroups = this->WhoWasMaxGroups;
+       int maxkeep =   this->WhoWasMaxKeep;
 
        /* first cut the list to new size (maxgroups) and also prune entries that are timed out. */
        whowas_users::iterator iter;
@@ -241,7 +242,7 @@ void CommandWhowas::MaintainWhoWas(time_t t)
                whowas_set* n = (whowas_set*)iter->second;
                if (n->size())
                {
-                       while ((n->begin() != n->end()) && ((*n->begin())->signon < t - ServerInstance->Config->WhoWasMaxKeep))
+                       while ((n->begin() != n->end()) && ((*n->begin())->signon < t - this->WhoWasMaxKeep))
                        {
                                WhoWasGroup *a = *(n->begin());
                                delete a;
@@ -297,6 +298,17 @@ WhoWasGroup::~WhoWasGroup()
 class ModuleWhoWas : public Module
 {
        CommandWhowas cmd;
+
+       void RangeCheck(int& value, int min, int max, int def, const char* msg)
+       {
+               // From ConfigReader
+               if (value >= min && value <= max)
+                       return;
+
+               ServerInstance->Logs->Log("CONFIG", DEFAULT, "WARNING: %s value of %d is not between %d and %d; set to %d.", msg, value, min, max, def);
+               value = def;
+       }
+
  public:
        ModuleWhoWas() : cmd(this)
        {
@@ -307,6 +319,7 @@ class ModuleWhoWas : public Module
                ServerInstance->Modules->AddService(cmd);
                Implementation eventlist[] = { I_OnGarbageCollect, I_OnUserQuit, I_OnStats, I_OnRehash };
                ServerInstance->Modules->Attach(eventlist, this, sizeof(eventlist)/sizeof(Implementation));
+               OnRehash(NULL);
        }
 
        void OnGarbageCollect()
@@ -330,6 +343,21 @@ class ModuleWhoWas : public Module
 
        void OnRehash(User* user)
        {
+               ConfigTag* tag = ServerInstance->Config->ConfValue("whowas");
+               int NewGroupSize = tag->getInt("groupsize");
+               int NewMaxGroups = tag->getInt("maxgroups");
+               int NewMaxKeep = InspIRCd::Duration(tag->getString("maxkeep"));
+
+               RangeCheck(NewGroupSize, 0, 10000, 10, "<whowas:groupsize>");
+               RangeCheck(NewMaxGroups, 0, 1000000, 10240, "<whowas:maxgroups>");
+               RangeCheck(NewMaxKeep, 3600, INT_MAX, 3600, "<whowas:maxkeep>");
+
+               if ((NewGroupSize == cmd.WhoWasGroupSize) && (NewMaxGroups == cmd.WhoWasMaxGroups) && (NewMaxKeep == cmd.WhoWasMaxKeep))
+                       return;
+
+               cmd.WhoWasGroupSize = NewGroupSize;
+               cmd.WhoWasMaxGroups = NewMaxGroups;
+               cmd.WhoWasMaxKeep = NewMaxKeep;
                cmd.PruneWhoWas(ServerInstance->Time());
        }
 
index e2ddd4d27ad76577b86ba9aba95e737cabd12ffa..f7475d54a653b1cdb933c522ed15420956a90804 100644 (file)
@@ -35,7 +35,6 @@
 
 ServerConfig::ServerConfig()
 {
-       WhoWasGroupSize = WhoWasMaxGroups = WhoWasMaxKeep = 0;
        RawLog = NoUserDns = HideBans = HideSplits = UndernetMsgPrefix = false;
        WildcardIPv6 = CycleHosts = InvBypassModes = true;
        dns_timeout = 5;
@@ -532,9 +531,6 @@ void ServerConfig::Fill()
        MaxTargets = security->getInt("maxtargets", 20);
        DefaultModes = options->getString("defaultmodes", "nt");
        PID = ConfValue("pid")->getString("file");
-       WhoWasGroupSize = ConfValue("whowas")->getInt("groupsize");
-       WhoWasMaxGroups = ConfValue("whowas")->getInt("maxgroups");
-       WhoWasMaxKeep = InspIRCd::Duration(ConfValue("whowas")->getString("maxkeep"));
        MaxChans = ConfValue("channels")->getInt("users", 20);
        OperMaxChans = ConfValue("channels")->getInt("opers", 60);
        c_ipv4_range = ConfValue("cidr")->getInt("ipv4clone", 32);
@@ -555,9 +551,6 @@ void ServerConfig::Fill()
        range(MaxConn, 0, SOMAXCONN, SOMAXCONN, "<performance:somaxconn>");
        range(MaxTargets, 1, 31, 20, "<security:maxtargets>");
        range(NetBufferSize, 1024, 65534, 10240, "<performance:netbuffersize>");
-       range(WhoWasGroupSize, 0, 10000, 10, "<whowas:groupsize>");
-       range(WhoWasMaxGroups, 0, 1000000, 10240, "<whowas:maxgroups>");
-       range(WhoWasMaxKeep, 3600, INT_MAX, 3600, "<whowas:maxkeep>");
 
        ValidIP(DNSServer, "<dns:server>");