]> git.netwichtig.de Git - user/henk/code/inspircd.git/commitdiff
Whowas is now fixed.
authorbrain <brain@e03df62e-2008-0410-955e-edbf42e46eb7>
Wed, 4 Oct 2006 17:21:58 +0000 (17:21 +0000)
committerbrain <brain@e03df62e-2008-0410-955e-edbf42e46eb7>
Wed, 4 Oct 2006 17:21:58 +0000 (17:21 +0000)
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@5414 e03df62e-2008-0410-955e-edbf42e46eb7

include/users.h
src/cmd_whowas.cpp
src/inspircd.cpp
src/users.cpp

index 4633f1cd293322df1d990b90855ab8a89acfc622..a682554f1dd400828d441a3afbf800edcd8aeaf2 100644 (file)
@@ -826,7 +826,7 @@ namespace irc
 
                /** Called every hour by the core to remove expired entries
                 */
-               void MaintainWhoWas(time_t TIME);
+               void MaintainWhoWas(InspIRCd* ServerInstance, time_t TIME);
        };
 };
 
index fe3171fc594fc1a17159cd4c6d36377aa96104af..399214d70a7bd590a1aabbbf2077f0580acfa8d9 100644 (file)
@@ -18,8 +18,6 @@
 #include "users.h"
 #include "commands/cmd_whowas.h"
 
-
-
 extern "C" command_t* init_command(InspIRCd* Instance)
 {
        return new cmd_whowas(Instance);
@@ -29,18 +27,24 @@ CmdResult cmd_whowas::Handle (const char** parameters, int pcnt, userrec* user)
 {
        irc::whowas::whowas_users::iterator i = ServerInstance->whowas.find(parameters[0]);
 
+       ServerInstance->Log(DEBUG,"Entered cmd_whowas");
+
        if (i == ServerInstance->whowas.end())
        {
+               ServerInstance->Log(DEBUG,"No such nick in whowas");
                user->WriteServ("406 %s %s :There was no such nickname",user->nick,parameters[0]);
+               user->WriteServ("369 %s %s :End of WHOWAS",user->nick,parameters[0]);
                return CMD_FAILURE;
        }
        else
        {
+               ServerInstance->Log(DEBUG,"Whowas set found");
                irc::whowas::whowas_set* grp = i->second;
                if (grp->size())
                {
                        for (irc::whowas::whowas_set::iterator ux = grp->begin(); ux != grp->end(); ux++)
                        {
+                               ServerInstance->Log(DEBUG,"Spool whowas entry");
                                irc::whowas::WhoWasGroup* u = *ux;
                                time_t rawtime = u->signon;
                                tm *timeinfo;
@@ -65,12 +69,13 @@ CmdResult cmd_whowas::Handle (const char** parameters, int pcnt, userrec* user)
                }
                else
                {
+                       ServerInstance->Log(DEBUG,"Oops, empty whowas set found");
                        user->WriteServ("406 %s %s :There was no such nickname",user->nick,parameters[0]);
+                       user->WriteServ("369 %s %s :End of WHOWAS",user->nick,parameters[0]);
                        return CMD_FAILURE;
                }
        }
-       
-       user->WriteServ("369 %s %s :End of WHOWAS",user->nick,parameters[0]);
 
+       user->WriteServ("369 %s %s :End of WHOWAS",user->nick,parameters[0]);
        return CMD_SUCCESS;
 }
index 2f35c9528fce16be4fe29f063c6dd42e3c51cd47..e9c459394cd3e0e265b48c7d397d9f26d0e7b026 100644 (file)
@@ -664,7 +664,7 @@ void InspIRCd::DoOneIteration(bool process_module_sockets)
                        WriteOpers("*** \002EH?!\002 -- Time is flowing BACKWARDS in this dimension! Clock drifted backwards %d secs.",abs(OLDTIME-TIME));
                if ((TIME % 3600) == 0)
                {
-                       irc::whowas::MaintainWhoWas(TIME);
+                       irc::whowas::MaintainWhoWas(this, TIME);
                }
                Timers->TickTimers(TIME);
                this->DoBackgroundUserStuff(TIME);
index e80a476f39772e08bbf383e4c3df4f006438a52f..51692958c41f05f5ba97106490ffbecff5fabef8 100644 (file)
@@ -24,7 +24,6 @@
 #include "xline.h"
 #include "cull_list.h"
 
-irc::whowas::whowas_users whowas;
 static unsigned long already_sent[MAX_DESCRIPTORS] = {0};
 
 typedef std::map<irc::string,char*> opertype_t;
@@ -809,9 +808,9 @@ namespace irc
                }
 
                /* every hour, run this function which removes all entries over 3 days */
-               void MaintainWhoWas(time_t t)
+               void MaintainWhoWas(InspIRCd* ServerInstance, time_t t)
                {
-                       for (whowas_users::iterator iter = ::whowas.begin(); iter != ::whowas.end(); iter++)
+                       for (whowas_users::iterator iter = ServerInstance->whowas.begin(); iter != ServerInstance->whowas.end(); iter++)
                        {
                                whowas_set* n = (whowas_set*)iter->second;
                                if (n->size())
@@ -831,21 +830,27 @@ namespace irc
 /* adds or updates an entry in the whowas list */
 void userrec::AddToWhoWas()
 {
-       irc::whowas::whowas_users::iterator iter = whowas.find(this->nick);
+       irc::whowas::whowas_users::iterator iter = ServerInstance->whowas.find(this->nick);
 
-       if (iter == whowas.end())
+       ServerInstance->Log(DEBUG,"Add to whowas lists");
+
+       if (iter == ServerInstance->whowas.end())
        {
+               ServerInstance->Log(DEBUG,"Adding new whowas set for %s",this->nick);
                irc::whowas::whowas_set* n = new irc::whowas::whowas_set;
                irc::whowas::WhoWasGroup *a = new irc::whowas::WhoWasGroup(this);
                n->push_back(a);
-               whowas[this->nick] = n;
+               ServerInstance->whowas[this->nick] = n;
        }
        else
        {
                irc::whowas::whowas_set* group = (irc::whowas::whowas_set*)iter->second;
 
+               ServerInstance->Log(DEBUG,"Using existing whowas group for %s",this->nick);
+
                if (group->size() > 10)
                {
+                       ServerInstance->Log(DEBUG,"Trimming existing group to ten entries for %s",this->nick);
                        irc::whowas::WhoWasGroup *a = (irc::whowas::WhoWasGroup*)*(group->begin());
                        DELETE(a);
                        group->pop_front();