From: attilamolnar Date: Fri, 6 Jul 2012 13:57:00 +0000 (+0200) Subject: Move whowas settings into cmd_whowas from ConfigReader X-Git-Url: https://git.netwichtig.de/gitweb/?a=commitdiff_plain;ds=sidebyside;h=f86f450701c622122d590effdabfaec833b1e5bd;p=user%2Fhenk%2Fcode%2Finspircd.git Move whowas settings into cmd_whowas from ConfigReader --- diff --git a/include/commands/cmd_whowas.h b/include/commands/cmd_whowas.h index 8033f1796..590c11172 100644 --- a/include/commands/cmd_whowas.h +++ b/include/commands/cmd_whowas.h @@ -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 diff --git a/include/configreader.h b/include/configreader.h index b26be3d6c..d3b3edd84 100644 --- a/include/configreader.h +++ b/include/configreader.h @@ -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. */ diff --git a/src/commands/cmd_whowas.cpp b/src/commands/cmd_whowas.cpp index dfe513dff..06c4b0509 100644 --- a/src/commands/cmd_whowas.cpp +++ b/src/commands/cmd_whowas.cpp @@ -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 = "{,}"; Penalty = 2; @@ -32,7 +33,7 @@ CommandWhowas::CommandWhowas( Module* parent) : Command(parent, "WHOWAS", 1) CmdResult CommandWhowas::Handle (const std::vector& 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, ""); + RangeCheck(NewMaxGroups, 0, 1000000, 10240, ""); + RangeCheck(NewMaxKeep, 3600, INT_MAX, 3600, ""); + + if ((NewGroupSize == cmd.WhoWasGroupSize) && (NewMaxGroups == cmd.WhoWasMaxGroups) && (NewMaxKeep == cmd.WhoWasMaxKeep)) + return; + + cmd.WhoWasGroupSize = NewGroupSize; + cmd.WhoWasMaxGroups = NewMaxGroups; + cmd.WhoWasMaxKeep = NewMaxKeep; cmd.PruneWhoWas(ServerInstance->Time()); } diff --git a/src/configreader.cpp b/src/configreader.cpp index e2ddd4d27..f7475d54a 100644 --- a/src/configreader.cpp +++ b/src/configreader.cpp @@ -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, ""); range(MaxTargets, 1, 31, 20, ""); range(NetBufferSize, 1024, 65534, 10240, ""); - range(WhoWasGroupSize, 0, 10000, 10, ""); - range(WhoWasMaxGroups, 0, 1000000, 10240, ""); - range(WhoWasMaxKeep, 3600, INT_MAX, 3600, ""); ValidIP(DNSServer, "");