]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/modules/m_dccallow.cpp
Introduce "X" snomask for remote *:line messages [patch by jackmcbarn]
[user/henk/code/inspircd.git] / src / modules / m_dccallow.cpp
index 90c63e30d80c25c36822667964f96716b21600f8..fb68478724266f6ab168964675e919d498a6cd1c 100644 (file)
@@ -43,11 +43,12 @@ typedef std::vector<DCCAllow> dccallowlist;
 dccallowlist* dl;
 typedef std::vector<BannedFileList> bannedfilelist;
 bannedfilelist bfl;
+SimpleExtItem<dccallowlist>* ext;
 
 class CommandDccallow : public Command
 {
  public:
-       CommandDccallow(InspIRCd* Me, Module* parent) : Command(Me, parent, "DCCALLOW", 0, 0)
+       CommandDccallow(Module* parent) : Command(parent, "DCCALLOW", 0)
        {
                syntax = "{[+|-]<nick> <time>|HELP|LIST}";
                /* XXX we need to fix this so it can work with translation stuff (i.e. move +- into a seperate param */
@@ -97,7 +98,8 @@ class CommandDccallow : public Command
                                if (action == '-')
                                {
                                        // check if it contains any entries
-                                       if (user->GetExt("dccallow_list", dl))
+                                       dl = ext->get(user);
+                                       if (dl)
                                        {
                                                for (dccallowlist::iterator i = dl->begin(); i != dl->end(); ++i)
                                                {
@@ -110,22 +112,6 @@ class CommandDccallow : public Command
                                                        }
                                                }
                                        }
-                                       else
-                                       {
-                                               delete  dl;
-                                               user->Shrink("dccallow_list");
-
-                                               // remove from userlist
-                                               for (userlist::iterator j = ul.begin(); j != ul.end(); ++j)
-                                               {
-                                                       User* u = (User*)(*j);
-                                                       if (u == user)
-                                                       {
-                                                               ul.erase(j);
-                                                               break;
-                                                       }
-                                               }
-                                       }
                                }
                                else if (action == '+')
                                {
@@ -135,10 +121,11 @@ class CommandDccallow : public Command
                                                return CMD_FAILURE;
                                        }
 
-                                       if (!user->GetExt("dccallow_list", dl))
+                                       dl = ext->get(user);
+                                       if (!dl)
                                        {
                                                dl = new dccallowlist;
-                                               user->Extend("dccallow_list", dl);
+                                               ext->set(user, dl);
                                                // add this user to the userlist
                                                ul.push_back(user);
                                        }
@@ -233,7 +220,8 @@ class CommandDccallow : public Command
                 // display current DCCALLOW list
                user->WriteNumeric(990, "%s :Users on your DCCALLOW list:", user->nick.c_str());
 
-               if (user->GetExt("dccallow_list", dl))
+               dl = ext->get(user);
+               if (dl)
                {
                        for (dccallowlist::const_iterator c = dl->begin(); c != dl->end(); ++c)
                        {
@@ -252,9 +240,11 @@ class ModuleDCCAllow : public Module
  public:
 
        ModuleDCCAllow(InspIRCd* Me)
-               : Module(Me), cmd(Me, this)
+               : Module(Me), cmd(this)
        {
                Conf = new ConfigReader(ServerInstance);
+               ext = new SimpleExtItem<dccallowlist>("dccallow", this);
+               Extensible::Register(ext);
                ServerInstance->AddCommand(&cmd);
                ReadFileConf();
                Implementation eventlist[] = { I_OnUserPreMessage, I_OnUserPreNotice, I_OnUserQuit, I_OnUserPreNick, I_OnRehash };
@@ -271,13 +261,11 @@ class ModuleDCCAllow : public Module
 
        virtual void OnUserQuit(User* user, const std::string &reason, const std::string &oper_message)
        {
-               dccallowlist* udl;
+               dccallowlist* udl = ext->get(user);
 
                // remove their DCCALLOW list if they have one
-               if (user->GetExt("dccallow_list", udl))
+               if (udl)
                {
-                       delete udl;
-                       user->Shrink("dccallow_list");
                        RemoveFromUserlist(user);
                }
 
@@ -286,7 +274,6 @@ class ModuleDCCAllow : public Module
                RemoveNick(user);
        }
 
-
        virtual ModResult OnUserPreNick(User* user, const std::string &newnick)
        {
                RemoveNick(user);
@@ -320,7 +307,8 @@ class ModuleDCCAllow : public Module
 
                                if (strncmp(text.c_str(), "\1DCC ", 5) == 0)
                                {
-                                       if (u->GetExt("dccallow_list", dl) && dl->size())
+                                       dl = ext->get(u);
+                                       if (dl && dl->size())
                                        {
                                                for (dccallowlist::const_iterator iter = dl->begin(); iter != dl->end(); ++iter)
                                                        if (InspIRCd::Match(user->GetFullHost(), iter->hostmask))
@@ -387,7 +375,8 @@ class ModuleDCCAllow : public Module
                for (userlist::iterator iter = ul.begin(); iter != ul.end(); ++iter)
                {
                        User* u = (User*)(*iter);
-                       if (u->GetExt("dccallow_list", dl))
+                       dl = ext->get(u);
+                       if (dl)
                        {
                                if (dl->size())
                                {
@@ -419,7 +408,8 @@ class ModuleDCCAllow : public Module
                for (userlist::iterator iter = ul.begin(); iter != ul.end(); ++iter)
                {
                        User *u = (User*)(*iter);
-                       if (u->GetExt("dccallow_list", dl))
+                       dl = ext->get(u);
+                       if (dl)
                        {
                                if (dl->size())
                                {
@@ -475,6 +465,7 @@ class ModuleDCCAllow : public Module
        virtual ~ModuleDCCAllow()
        {
                delete Conf;
+               delete ext;
                Conf = NULL;
        }