]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/modules/m_dccallow.cpp
Add a typedef for LocalUserList
[user/henk/code/inspircd.git] / src / modules / m_dccallow.cpp
index 8c2a5f73e3e3e68c1167b33960631d39c8c8a83c..3b0467ae5454078f8d02f2ec65dfff6ea8091449 100644 (file)
@@ -102,7 +102,7 @@ class CommandDccallow : public Command
                        std::string nick = parameters[0].substr(1);
                        User *target = ServerInstance->FindNickOnly(nick);
 
-                       if (target)
+                       if ((target) && (!IS_SERVER(target)) && (!target->quitting) && (target->registered == REG_ALL))
                        {
 
                                if (action == '-')
@@ -149,9 +149,8 @@ class CommandDccallow : public Command
                                                }
                                        }
 
-                                       std::string mask = std::string(target->nick)+"!"+std::string(target->ident)+"@"+std::string(target->dhost);
-                                       ConfigReader Conf;
-                                       std::string default_length = Conf.ReadValue("dccallow", "length", 0);
+                                       std::string mask = target->nick+"!"+target->ident+"@"+target->dhost;
+                                       std::string default_length = ServerInstance->Config->ConfValue("dccallow")->getString("length");
 
                                        long length;
                                        if (parameters.size() < 2)
@@ -257,7 +256,7 @@ class ModuleDCCAllow : public Module
                ServerInstance->Extensions.Register(ext);
                ServerInstance->AddCommand(&cmd);
                ReadFileConf();
-               Implementation eventlist[] = { I_OnUserPreMessage, I_OnUserPreNotice, I_OnUserQuit, I_OnUserPreNick, I_OnRehash };
+               Implementation eventlist[] = { I_OnUserPreMessage, I_OnUserPreNotice, I_OnUserQuit, I_OnUserPostNick, I_OnRehash };
                ServerInstance->Modules->Attach(eventlist, this, 5);
        }
 
@@ -274,7 +273,9 @@ class ModuleDCCAllow : public Module
                // remove their DCCALLOW list if they have one
                if (udl)
                {
-                       RemoveFromUserlist(user);
+                       userlist::iterator it = std::find(ul.begin(), ul.end(), user);
+                       if (it != ul.end())
+                               ul.erase(it);
                }
 
                // remove them from any DCCALLOW lists
@@ -282,10 +283,9 @@ class ModuleDCCAllow : public Module
                RemoveNick(user);
        }
 
-       virtual ModResult OnUserPreNick(User* user, const std::string &newnick)
+       virtual void OnUserPostNick(User* user, const std::string &oldnick)
        {
                RemoveNick(user);
-               return MOD_RES_PASSTHRU;
        }
 
        virtual ModResult OnUserPreMessage(User* user, void* dest, int target_type, std::string &text, char status, CUList &exempt_list)
@@ -333,12 +333,12 @@ class ModuleDCCAllow : public Module
 
                                        irc::string type = tokens[1].c_str();
 
-                                       ConfigReader Conf;
-                                       bool blockchat = Conf.ReadFlag("dccallow", "blockchat", 0);
+                                       ConfigTag* conftag = ServerInstance->Config->ConfValue("dccallow");
+                                       bool blockchat = conftag->getBool("blockchat");
 
                                        if (type == "SEND")
                                        {
-                                               std::string defaultaction = Conf.ReadValue("dccallow", "action", 0);
+                                               std::string defaultaction = conftag->getString("action");
                                                std::string filename = tokens[2];
 
                                                bool found = false;
@@ -381,7 +381,7 @@ class ModuleDCCAllow : public Module
 
        void Expire()
        {
-               for (userlist::iterator iter = ul.begin(); iter != ul.end(); ++iter)
+               for (userlist::iterator iter = ul.begin(); iter != ul.end();)
                {
                        User* u = (User*)(*iter);
                        dl = ext->get(u);
@@ -403,10 +403,11 @@ class ModuleDCCAllow : public Module
                                                }
                                        }
                                }
+                               ++iter;
                        }
                        else
                        {
-                               RemoveFromUserlist(u);
+                               iter = ul.erase(iter);
                        }
                }
        }
@@ -414,7 +415,7 @@ class ModuleDCCAllow : public Module
        void RemoveNick(User* user)
        {
                /* Iterate through all DCCALLOW lists and remove user */
-               for (userlist::iterator iter = ul.begin(); iter != ul.end(); ++iter)
+               for (userlist::iterator iter = ul.begin(); iter != ul.end();)
                {
                        User *u = (User*)(*iter);
                        dl = ext->get(u);
@@ -434,10 +435,11 @@ class ModuleDCCAllow : public Module
                                                }
                                        }
                                }
+                               ++iter;
                        }
                        else
                        {
-                               RemoveFromUserlist(u);
+                               iter = ul.erase(iter);
                        }
                }
        }
@@ -458,18 +460,15 @@ class ModuleDCCAllow : public Module
 
        void ReadFileConf()
        {
-               ConfigReader Conf;
                bfl.clear();
-               for (int i = 0; i < Conf.Enumerate("banfile"); i++)
+               ConfigTagList tags = ServerInstance->Config->ConfTags("banfile");
+               for (ConfigIter i = tags.first; i != tags.second; ++i)
                {
                        BannedFileList bf;
-                       std::string fileglob = Conf.ReadValue("banfile", "pattern", i);
-                       std::string action = Conf.ReadValue("banfile", "action", i);
-                       bf.filemask = fileglob;
-                       bf.action = action;
+                       bf.filemask = i->second->getString("pattern");
+                       bf.action = i->second->getString("action");
                        bfl.push_back(bf);
                }
-
        }
 
        virtual ~ModuleDCCAllow()