]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/modules/m_dccallow.cpp
Change Extensible to use strongly typed entries
[user/henk/code/inspircd.git] / src / modules / m_dccallow.cpp
index dc7df8dded0bd06cc2fe8312caca227464eac36e..90c63e30d80c25c36822667964f96716b21600f8 100644 (file)
@@ -47,9 +47,8 @@ bannedfilelist bfl;
 class CommandDccallow : public Command
 {
  public:
-       CommandDccallow(InspIRCd* Me) : Command(Me, "DCCALLOW", 0, 0)
+       CommandDccallow(InspIRCd* Me, Module* parent) : Command(Me, parent, "DCCALLOW", 0, 0)
        {
-               this->source = "m_dccallow.so";
                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 */
        }
@@ -200,6 +199,11 @@ class CommandDccallow : public Command
                return CMD_FAILURE;
        }
 
+       RouteDescriptor GetRouting(User* user, const std::vector<std::string>& parameters)
+       {
+               return ROUTE_BROADCAST;
+       }
+
        void DisplayHelp(User* user)
        {
                user->WriteNumeric(998, "%s :DCCALLOW [<+|->nick [time]] [list] [help]", user->nick.c_str());
@@ -244,22 +248,21 @@ class CommandDccallow : public Command
 
 class ModuleDCCAllow : public Module
 {
-       CommandDccallow* mycommand;
+       CommandDccallow cmd;
  public:
 
        ModuleDCCAllow(InspIRCd* Me)
-               : Module(Me)
+               : Module(Me), cmd(Me, this)
        {
                Conf = new ConfigReader(ServerInstance);
-               mycommand = new CommandDccallow(ServerInstance);
-               ServerInstance->AddCommand(mycommand);
+               ServerInstance->AddCommand(&cmd);
                ReadFileConf();
                Implementation eventlist[] = { I_OnUserPreMessage, I_OnUserPreNotice, I_OnUserQuit, I_OnUserPreNick, I_OnRehash };
                ServerInstance->Modules->Attach(eventlist, this, 5);
        }
 
 
-       virtual void OnRehash(User* user, const std::string &parameter)
+       virtual void OnRehash(User* user)
        {
                delete Conf;
                Conf = new ConfigReader(ServerInstance);
@@ -284,21 +287,21 @@ class ModuleDCCAllow : public Module
        }
 
 
-       virtual int OnUserPreNick(User* user, const std::string &newnick)
+       virtual ModResult OnUserPreNick(User* user, const std::string &newnick)
        {
                RemoveNick(user);
-               return 0;
+               return MOD_RES_PASSTHRU;
        }
 
-       virtual int OnUserPreMessage(User* user, void* dest, int target_type, std::string &text, char status, CUList &exempt_list)
+       virtual ModResult OnUserPreMessage(User* user, void* dest, int target_type, std::string &text, char status, CUList &exempt_list)
        {
                return OnUserPreNotice(user, dest, target_type, text, status, exempt_list);
        }
 
-       virtual int OnUserPreNotice(User* user, void* dest, int target_type, std::string &text, char status, CUList &exempt_list)
+       virtual ModResult OnUserPreNotice(User* user, void* dest, int target_type, std::string &text, char status, CUList &exempt_list)
        {
                if (!IS_LOCAL(user))
-                       return 0;
+                       return MOD_RES_PASSTHRU;
 
                if (target_type == TYPE_USER)
                {
@@ -306,7 +309,7 @@ class ModuleDCCAllow : public Module
 
                        /* Always allow a user to dcc themselves (although... why?) */
                        if (user == u)
-                               return 0;
+                               return MOD_RES_PASSTHRU;
 
                        if ((text.length()) && (text[0] == '\1'))
                        {
@@ -321,7 +324,7 @@ class ModuleDCCAllow : public Module
                                        {
                                                for (dccallowlist::const_iterator iter = dl->begin(); iter != dl->end(); ++iter)
                                                        if (InspIRCd::Match(user->GetFullHost(), iter->hostmask))
-                                                               return 0;
+                                                               return MOD_RES_PASSTHRU;
                                        }
 
                                        // tokenize
@@ -348,7 +351,7 @@ class ModuleDCCAllow : public Module
                                                        {
                                                                /* We have a matching badfile entry, override whatever the default action is */
                                                                if (bfl[i].action == "allow")
-                                                                       return 0;
+                                                                       return MOD_RES_PASSTHRU;
                                                                else
                                                                {
                                                                        found = true;
@@ -359,24 +362,24 @@ class ModuleDCCAllow : public Module
 
                                                /* only follow the default action if no badfile matches were found above */
                                                if ((!found) && (defaultaction == "allow"))
-                                                       return 0;
+                                                       return MOD_RES_PASSTHRU;
 
                                                user->WriteServ("NOTICE %s :The user %s is not accepting DCC SENDs from you. Your file %s was not sent.", user->nick.c_str(), u->nick.c_str(), filename.c_str());
                                                u->WriteServ("NOTICE %s :%s (%s@%s) attempted to send you a file named %s, which was blocked.", u->nick.c_str(), user->nick.c_str(), user->ident.c_str(), user->dhost.c_str(), filename.c_str());
                                                u->WriteServ("NOTICE %s :If you trust %s and were expecting this, you can type /DCCALLOW HELP for information on the DCCALLOW system.", u->nick.c_str(), user->nick.c_str());
-                                               return 1;
+                                               return MOD_RES_DENY;
                                        }
                                        else if ((type == "CHAT") && (blockchat))
                                        {
                                                user->WriteServ("NOTICE %s :The user %s is not accepting DCC CHAT requests from you.", user->nick.c_str(), u->nick.c_str());
                                                u->WriteServ("NOTICE %s :%s (%s@%s) attempted to initiate a DCC CHAT session, which was blocked.", u->nick.c_str(), user->nick.c_str(), user->ident.c_str(), user->dhost.c_str());
                                                u->WriteServ("NOTICE %s :If you trust %s and were expecting this, you can type /DCCALLOW HELP for information on the DCCALLOW system.", u->nick.c_str(), user->nick.c_str());
-                                               return 1;
+                                               return MOD_RES_DENY;
                                        }
                                }
                        }
                }
-               return 0;
+               return MOD_RES_PASSTHRU;
        }
 
        void Expire()
@@ -471,6 +474,8 @@ class ModuleDCCAllow : public Module
 
        virtual ~ModuleDCCAllow()
        {
+               delete Conf;
+               Conf = NULL;
        }
 
        virtual Version GetVersion()