]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/modules/m_callerid.cpp
Fix recommended by nenolod, silly mistake apparently :P
[user/henk/code/inspircd.git] / src / modules / m_callerid.cpp
index 4faa679450a6d7039f26a79cb5e47ed05ad18888..e6b740520009bd527106a35b78709193e60d31eb 100644 (file)
@@ -48,7 +48,7 @@ void RemoveData(User* who)
 
 void RemoveFromAllAccepts(InspIRCd* ServerInstance, User* who)
 {
-       for (user_hash::iterator i = ServerInstance->clientlist->begin(); i != ServerInstance->clientlist->end(); ++i)
+       for (user_hash::iterator i = ServerInstance->Users->clientlist->begin(); i != ServerInstance->Users->clientlist->end(); ++i)
        {
                callerid_data* dat = GetData(i->second, false);
                if (!dat) continue;
@@ -66,7 +66,7 @@ private:
 public:
        User_g(InspIRCd* Instance) : ModeHandler(Instance, 'g', 0, 0, false, MODETYPE_USER, false) { }
 
-       ModeAction OnModeChange(User* source, User* dest, Channel* channel, std::string &parameter, bool adding)
+       ModeAction OnModeChange(User* source, User* dest, Channel* channel, std::string &parameter, bool adding, bool)
        {
                if (adding != dest->IsModeSet('g'))
                {
@@ -93,7 +93,7 @@ public:
         * /accept nick1,nick2,nick3 *
         * to add 3 nicks and then show your list
         */
-       CmdResult Handle(const char** parameters, int pcnt, User* user)
+       CmdResult Handle(const char* const* parameters, int pcnt, User* user)
        {
                if (pcnt < 1)
                {
@@ -222,13 +222,13 @@ public:
                        delete myumode;
                        throw new ModuleException("Could not add usermode and command!");
                }
-               Implementation eventlist[] = { I_OnRehash, I_OnUserPreNick, I_OnUserQuit, I_On005Numeric, I_OnUserPreNotice, I_OnUserPreMessage };
-               ServerInstance->Modules->Attach(eventlist, this, 6);
+               Implementation eventlist[] = { I_OnRehash, I_OnUserPreNick, I_OnUserQuit, I_On005Numeric, I_OnUserPreNotice, I_OnUserPreMessage, I_OnCleanup };
+               ServerInstance->Modules->Attach(eventlist, this, 7);
        }
 
        ~ModuleCallerID()
        {
-               delete mycommand;
+               delete myumode;
        }
 
        Version GetVersion()
@@ -279,6 +279,14 @@ public:
                return 0;
        }
 
+       void OnCleanup(int type, void* item)
+       {
+               if (type != TYPE_USER) return;
+               User* u = (User*)item;
+               /* Cleanup only happens on unload (before dtor), so keep this O(n) instead of O(n^2) which deferring to OnUserQuit would do.  */
+               RemoveData(u);
+       }
+
        int OnUserPreNick(User* user, const std::string& newnick)
        {
                if (!tracknick)
@@ -305,10 +313,10 @@ public:
                                new_maxaccepts = 16;
                                break;
                        case CONF_NOT_A_NUMBER:
-                               if (user) user->WriteServ("NOTICE %s :Invalid maxaccepts value '%s', not a number", Conf.ReadValue("callerid", "maxaccepts", "", 0).c_str());
+                               if (user) user->WriteServ("NOTICE %s :Invalid maxaccepts value '%s', not a number", user->nick, Conf.ReadValue("callerid", "maxaccepts", "", 0).c_str());
                                throw ModuleException("Invalid maxaccepts value, not a number");
                        case CONF_INT_NEGATIVE:
-                               if (user) user->WriteServ("NOTICE %s :Invalid maxaccepts value '%s', negative", Conf.ReadValue("callerid", "maxaccepts", "", 0).c_str());
+                               if (user) user->WriteServ("NOTICE %s :Invalid maxaccepts value '%s', negative", user->nick, Conf.ReadValue("callerid", "maxaccepts", "", 0).c_str());
                                throw ModuleException("Invalid maxaccepts value, negative");
                        default:
                                /* Yikes */
@@ -326,14 +334,14 @@ public:
                                new_cooldown = 16;
                                break;
                        case CONF_NOT_A_NUMBER:
-                               if (user) user->WriteServ("NOTICE %s :Invalid cooldown value '%s', not a number", Conf.ReadValue("callerid", "maxaccepts", "", 0).c_str());
+                               if (user) user->WriteServ("NOTICE %s :Invalid cooldown value '%s', not a number", user->nick, Conf.ReadValue("callerid", "maxaccepts", "", 0).c_str());
                                throw ModuleException("Invalid cooldown value, not a number");
                        case CONF_INT_NEGATIVE:
-                               if (user) user->WriteServ("NOTICE %s :Invalid cooldown value '%s', negative", Conf.ReadValue("callerid", "maxaccepts", "", 0).c_str());
+                               if (user) user->WriteServ("NOTICE %s :Invalid cooldown value '%s', negative", user->nick, Conf.ReadValue("callerid", "maxaccepts", "", 0).c_str());
                                throw ModuleException("Invalid cooldown value, negative");
                        default:
                                /* Yikes */
-                               throw ModuleException("Invalid maxaccepts value, unknown config error");
+                               throw ModuleException("Invalid cooldown value, unknown config error");
                }
                maxaccepts = new_maxaccepts;
                notify_cooldown = new_cooldown;