]> git.netwichtig.de Git - user/henk/code/inspircd.git/commitdiff
Make cmd_whowas act like a module, remove special handling
authorattilamolnar <attilamolnar@hush.com>
Fri, 6 Jul 2012 13:39:11 +0000 (15:39 +0200)
committerattilamolnar <attilamolnar@hush.com>
Thu, 4 Apr 2013 17:05:20 +0000 (19:05 +0200)
include/commands/cmd_whowas.h
include/users.h
src/commands/cmd_stats.cpp
src/commands/cmd_whowas.cpp
src/configreader.cpp
src/usermanager.cpp
src/users.cpp

index d333541228903ae722d7d58d9f9928093bd10053..8033f1796fc4b3cf585808e6fcabcd8bc2b779dd 100644 (file)
 #define CMD_WHOWAS_H
 #include "modules.h"
 
-struct WhowasRequest : public Request
-{
-       /* list of available internal commands */
-       enum Internals
-       {
-               WHOWAS_ADD = 1,
-               WHOWAS_STATS = 2,
-               WHOWAS_PRUNE = 3,
-               WHOWAS_MAINTAIN = 4
-       };
-
-       const Internals type;
-       std::string value;
-       User* user;
-
-       WhowasRequest(Module* src, Module* whowas, Internals Type) : Request(src, whowas, "WHOWAS"), type(Type)
-       {}
-};
-
-/* Forward ref for timer */
-class WhoWasMaintainTimer;
-
 /* Forward ref for typedefs */
 class WhoWasGroup;
 
-/** Timer that is used to maintain the whowas list, called once an hour
- */
-extern WhoWasMaintainTimer* timer;
-
 /** A group of users related by nickname
  */
 typedef std::deque<WhoWasGroup*> whowas_set;
@@ -128,14 +102,4 @@ class WhoWasGroup
        ~WhoWasGroup();
 };
 
-class WhoWasMaintainTimer : public Timer
-{
-  public:
-       WhoWasMaintainTimer(long interval)
-       : Timer(interval, ServerInstance->Time(), true)
-       {
-       }
-       virtual void Tick(time_t TIME);
-};
-
 #endif
index 102e7783f0099645c0f972bba5a2ae22f640b5d0..b9807a1586e8ee862d8ba8d75646ed6433ee9cf6 100644 (file)
@@ -485,10 +485,6 @@ class CoreExport User : public Extensible
         */
        const std::string& MakeHostIP();
 
-       /** Add the user to WHOWAS system
-        */
-       void AddToWhoWas();
-
        /** Oper up the user using the given opertype.
         * This will also give the +o usermode.
         */
index c37b041a95308ddcacf414c53bb0183abad83145..86512417ce59d0089692e0fb957d6a9d6eb0870b 100644 (file)
@@ -21,7 +21,6 @@
 
 #include "inspircd.h"
 #include "xline.h"
-#include "commands/cmd_whowas.h"
 
 #ifdef _WIN32
 #include <psapi.h>
@@ -218,18 +217,6 @@ void CommandStats::DoStats(char statschar, User* user, string_list &results)
                        results.push_back(sn+" 249 "+user->nick+" :Channels: "+ConvToStr(ServerInstance->chanlist->size()));
                        results.push_back(sn+" 249 "+user->nick+" :Commands: "+ConvToStr(ServerInstance->Parser->cmdlist.size()));
 
-                       if (!ServerInstance->Config->WhoWasGroupSize == 0 && !ServerInstance->Config->WhoWasMaxGroups == 0)
-                       {
-                               Module* whowas = ServerInstance->Modules->Find("cmd_whowas.so");
-                               if (whowas)
-                               {
-                                       WhowasRequest req(NULL, whowas, WhowasRequest::WHOWAS_STATS);
-                                       req.user = user;
-                                       req.Send();
-                                       results.push_back(sn+" 249 "+user->nick+" :"+req.value);
-                               }
-                       }
-
                        float kbitpersec_in, kbitpersec_out, kbitpersec_total;
                        char kbitpersec_in_s[30], kbitpersec_out_s[30], kbitpersec_total_s[30];
 
index 17a779ec33df209e513a788ff3ba707b62bb11c9..dfe513dff78c8d34ef36f87d51bad701542ee9c7 100644 (file)
 #include "inspircd.h"
 #include "commands/cmd_whowas.h"
 
-WhoWasMaintainTimer * timer;
-
 CommandWhowas::CommandWhowas( Module* parent) : Command(parent, "WHOWAS", 1)
 {
        syntax = "<nick>{,<nick>}";
        Penalty = 2;
-       timer = new WhoWasMaintainTimer(3600);
-       ServerInstance->Timers->AddTimer(timer);
 }
 
 CmdResult CommandWhowas::Handle (const std::vector<std::string>& parameters, User* user)
@@ -257,11 +253,6 @@ void CommandWhowas::MaintainWhoWas(time_t t)
 
 CommandWhowas::~CommandWhowas()
 {
-       if (timer)
-       {
-               ServerInstance->Timers->DelTimer(timer);
-       }
-
        whowas_users::iterator iter;
        int fifosize;
        while ((fifosize = (int)whowas_fifo.size()) > 0)
@@ -303,16 +294,6 @@ WhoWasGroup::~WhoWasGroup()
 {
 }
 
-/* every hour, run this function which removes all entries older than Config->WhoWasMaxKeep */
-void WhoWasMaintainTimer::Tick(time_t)
-{
-       Module* whowas = ServerInstance->Modules->Find("cmd_whowas.so");
-       if (whowas)
-       {
-               WhowasRequest(whowas, whowas, WhowasRequest::WHOWAS_MAINTAIN).Send();
-       }
-}
-
 class ModuleWhoWas : public Module
 {
        CommandWhowas cmd;
@@ -324,31 +305,37 @@ class ModuleWhoWas : public Module
        void init()
        {
                ServerInstance->Modules->AddService(cmd);
+               Implementation eventlist[] = { I_OnGarbageCollect, I_OnUserQuit, I_OnStats, I_OnRehash };
+               ServerInstance->Modules->Attach(eventlist, this, sizeof(eventlist)/sizeof(Implementation));
        }
 
-       void OnRequest(Request& request)
+       void OnGarbageCollect()
        {
-               WhowasRequest& req = static_cast<WhowasRequest&>(request);
-               switch (req.type)
-               {
-                       case WhowasRequest::WHOWAS_ADD:
-                               cmd.AddToWhoWas(req.user);
-                               break;
-                       case WhowasRequest::WHOWAS_STATS:
-                               req.value = cmd.GetStats();
-                               break;
-                       case WhowasRequest::WHOWAS_PRUNE:
-                               cmd.PruneWhoWas(ServerInstance->Time());
-                               break;
-                       case WhowasRequest::WHOWAS_MAINTAIN:
-                               cmd.MaintainWhoWas(ServerInstance->Time());
-                               break;
-               }
+               /* Removes all entries older than WhoWasMaxKeep */
+               cmd.MaintainWhoWas(ServerInstance->Time());
+       }
+
+       void OnUserQuit(User* user, const std::string& message, const std::string& oper_message)
+       {
+               cmd.AddToWhoWas(user);
+       }
+
+       ModResult OnStats(char symbol, User* user, string_list &results)
+       {
+               if (symbol == 'z')
+                       results.push_back(ServerInstance->Config->ServerName+" 249 "+user->nick+" :"+cmd.GetStats());
+
+               return MOD_RES_PASSTHRU;
+       }
+
+       void OnRehash(User* user)
+       {
+               cmd.PruneWhoWas(ServerInstance->Time());
        }
 
        Version GetVersion()
        {
-               return Version("WHOWAS Command", VF_VENDOR);
+               return Version("WHOWAS", VF_VENDOR);
        }
 };
 
index 2d918cb7478e574e57ed60d11ed4c4b449b0917e..e2ddd4d27ad76577b86ba9aba95e737cabd12ffa 100644 (file)
@@ -26,7 +26,6 @@
 #include <fstream>
 #include "xline.h"
 #include "exitcodes.h"
-#include "commands/cmd_whowas.h"
 #include "configparser.h"
 #include <iostream>
 #ifdef _WIN32
@@ -805,10 +804,6 @@ void ServerConfig::Apply(ServerConfig* old, const std::string &useruid)
 
 void ServerConfig::ApplyModules(User* user)
 {
-       Module* whowas = ServerInstance->Modules->Find("cmd_whowas.so");
-       if (whowas)
-               WhowasRequest(NULL, whowas, WhowasRequest::WHOWAS_PRUNE).Send();
-
        const std::vector<std::string> v = ServerInstance->Modules->GetAllModuleNames(0);
        std::vector<std::string> added_modules;
        std::set<std::string> removed_modules(v.begin(), v.end());
index 0088d1c7f3b8cea1d3e3df7432ef5f8c4be7dd82..58cbb7e5b3877e738958108585f750933d947379 100644 (file)
@@ -231,7 +231,6 @@ void UserManager::QuitUser(User *user, const std::string &quitreason, const char
                                        user->server.c_str(), user->GetFullRealHost().c_str(), user->GetIPString().c_str(), oper_reason.c_str());
                        }
                }
-               user->AddToWhoWas();
        }
 
        user_hash::iterator iter = this->clientlist->find(user->nick);
index 4241b8f81aded1e79c61210933befa44944d8048..5058cfcc24503d18da5265b1aca3d8769af26b4e 100644 (file)
@@ -28,7 +28,6 @@
 #include "socketengine.h"
 #include "xline.h"
 #include "bancache.h"
-#include "commands/cmd_whowas.h"
 
 already_sent_t LocalUser::already_sent_id = 0;
 
@@ -688,18 +687,6 @@ void User::UnOper()
        this->modes[UM_OPERATOR] = 0;
 }
 
-/* adds or updates an entry in the whowas list */
-void User::AddToWhoWas()
-{
-       Module* whowas = ServerInstance->Modules->Find("cmd_whowas.so");
-       if (whowas)
-       {
-               WhowasRequest req(NULL, whowas, WhowasRequest::WHOWAS_ADD);
-               req.user = this;
-               req.Send();
-       }
-}
-
 /*
  * Check class restrictions
  */