]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/modules/m_dccallow.cpp
Fix various cases of broken indentation.
[user/henk/code/inspircd.git] / src / modules / m_dccallow.cpp
index 04f85739a8317aa3db8a0b0634c03e58ef255315..e0ea4c7aeed89e7d20ab38cdc05bb0320e4e8ff5 100644 (file)
 
 enum
 {
+       // From ircd-ratbox.
+       RPL_HELPSTART = 704,
+       RPL_HELPTXT = 705,
+       RPL_ENDOFHELP = 706,
+
        // InspIRCd-specific?
        RPL_DCCALLOWSTART = 990,
        RPL_DCCALLOWLIST = 991,
@@ -36,16 +41,11 @@ enum
        RPL_DCCALLOWREMOVED = 995,
        ERR_DCCALLOWINVALID = 996,
        RPL_DCCALLOWEXPIRED = 997,
-       ERR_UNKNOWNDCCALLOWCMD = 998,
-       // TODO: These numerics are conflicting and should be removed
-       // and be replaced with helpop.
-       RPL_DCCALLOWHELP = 998,
-       RPL_ENDOFDCCALLOWHELP = 999
+       ERR_UNKNOWNDCCALLOWCMD = 998
 };
 
 static const char* const helptext[] =
 {
-       "DCCALLOW [(+|-)<nick> [<time>]]|[LIST|HELP]",
        "You may allow DCCs from specific users by specifying a",
        "DCC allow for the user you want to receive DCCs from.",
        "For example, to allow the user Brain to send you inspircd.exe",
@@ -54,7 +54,7 @@ static const char* const helptext[] =
        "Brain would then be able to send you files. They would have to",
        "resend the file again if the server gave them an error message",
        "before you added them to your DCCALLOW list.",
-       "DCCALLOW entries will be temporary by default, if you want to add",
+       "DCCALLOW entries will be temporary. If you want to add",
        "them to your DCCALLOW list until you leave IRC, type:",
        "/DCCALLOW +Brain 0",
        "To remove the user from your DCCALLOW list, type:",
@@ -63,7 +63,7 @@ static const char* const helptext[] =
        "/DCCALLOW LIST",
        "NOTE: If the user leaves IRC or changes their nickname",
        "  they will be removed from your DCCALLOW list.",
-       "  your DCCALLOW list will be deleted when you leave IRC."
+       "  Your DCCALLOW list will be deleted when you leave IRC."
 };
 
 class BannedFileList
@@ -106,6 +106,7 @@ class CommandDccallow : public Command
 
  public:
        unsigned int maxentries;
+       unsigned long defaultlength;
        CommandDccallow(Module* parent, DCCAllowExt& Ext)
                : Command(parent, "DCCALLOW", 0)
                , ext(Ext)
@@ -116,7 +117,7 @@ class CommandDccallow : public Command
 
        CmdResult Handle(User* user, const Params& parameters) CXX11_OVERRIDE
        {
-               /* syntax: DCCALLOW [+|-]<nick> (<time>) */
+               /* syntax: DCCALLOW [(+|-)<nick> [<time>]]|[LIST|HELP] */
                if (!parameters.size())
                {
                        // display current DCCALLOW list
@@ -206,20 +207,23 @@ class CommandDccallow : public Command
                                        }
 
                                        std::string mask = target->nick+"!"+target->ident+"@"+target->GetDisplayedHost();
-                                       std::string default_length = ServerInstance->Config->ConfValue("dccallow")->getString("length");
-
                                        unsigned long length;
                                        if (parameters.size() < 2)
                                        {
-                                               length = InspIRCd::Duration(default_length);
+                                               length = defaultlength;
                                        }
-                                       else if (!atoi(parameters[1].c_str()))
+                                       else if (!InspIRCd::IsValidDuration(parameters[1]))
                                        {
-                                               length = 0;
+                                               user->WriteNumeric(ERR_DCCALLOWINVALID, user->nick, InspIRCd::Format("%s is not a valid DCCALLOW duration", parameters[1].c_str()));
+                                               return CMD_FAILURE;
                                        }
                                        else
                                        {
-                                               length = InspIRCd::Duration(parameters[1]);
+                                               if (!InspIRCd::Duration(parameters[1], length))
+                                               {
+                                                       user->WriteNotice("*** Invalid duration for DCC allow");
+                                                       return CMD_FAILURE;
+                                               }
                                        }
 
                                        if (!InspIRCd::IsValidMask(mask))
@@ -231,7 +235,7 @@ class CommandDccallow : public Command
 
                                        if (length > 0)
                                        {
-                                               user->WriteNumeric(RPL_DCCALLOWTIMED, user->nick, InspIRCd::Format("Added %s to DCCALLOW list for %ld seconds", target->nick.c_str(), length));
+                                               user->WriteNumeric(RPL_DCCALLOWTIMED, user->nick, InspIRCd::Format("Added %s to DCCALLOW list for %s", target->nick.c_str(), InspIRCd::DurationString(length).c_str()));
                                        }
                                        else
                                        {
@@ -259,9 +263,10 @@ class CommandDccallow : public Command
 
        void DisplayHelp(User* user)
        {
+               user->WriteNumeric(RPL_HELPSTART, "*", "DCCALLOW [(+|-)<nick> [<time>]]|[LIST|HELP]");
                for (size_t i = 0; i < sizeof(helptext)/sizeof(helptext[0]); i++)
-                       user->WriteNumeric(RPL_DCCALLOWHELP, helptext[i]);
-               user->WriteNumeric(RPL_ENDOFDCCALLOWHELP, "End of DCCALLOW HELP");
+                       user->WriteNumeric(RPL_HELPTXT, "*", helptext[i]);
+               user->WriteNumeric(RPL_ENDOFHELP, "*", "End of DCCALLOW HELP");
 
                LocalUser* localuser = IS_LOCAL(user);
                if (localuser)
@@ -291,11 +296,14 @@ class ModuleDCCAllow : public Module
 {
        DCCAllowExt ext;
        CommandDccallow cmd;
+       bool blockchat;
+       std::string defaultaction;
 
  public:
        ModuleDCCAllow()
                : ext("dccallow", ExtensionItem::EXT_USER, this)
                , cmd(this, ext)
+               , blockchat(false)
        {
        }
 
@@ -354,9 +362,6 @@ class ModuleDCCAllow : public Module
 
                                        const std::string type = buf.substr(0, s);
 
-                                       ConfigTag* conftag = ServerInstance->Config->ConfValue("dccallow");
-                                       bool blockchat = conftag->getBool("blockchat");
-
                                        if (stdalgo::string::equalsci(type, "SEND"))
                                        {
                                                size_t first;
@@ -382,7 +387,6 @@ class ModuleDCCAllow : public Module
                                                if (s == std::string::npos)
                                                        return MOD_RES_PASSTHRU;
 
-                                               std::string defaultaction = conftag->getString("action");
                                                std::string filename = buf.substr(first, s);
 
                                                bool found = false;
@@ -505,23 +509,27 @@ class ModuleDCCAllow : public Module
 
        void ReadConfig(ConfigStatus& status) CXX11_OVERRIDE
        {
-               ConfigTag* tag = ServerInstance->Config->ConfValue("dccallow");
-               cmd.maxentries = tag->getUInt("maxentries", 20);
-
-               bfl.clear();
+               bannedfilelist newbfl;
                ConfigTagList tags = ServerInstance->Config->ConfTags("banfile");
                for (ConfigIter i = tags.first; i != tags.second; ++i)
                {
                        BannedFileList bf;
                        bf.filemask = i->second->getString("pattern");
                        bf.action = i->second->getString("action");
-                       bfl.push_back(bf);
+                       newbfl.push_back(bf);
                }
+               bfl.swap(newbfl);
+
+               ConfigTag* tag = ServerInstance->Config->ConfValue("dccallow");
+               cmd.maxentries = tag->getUInt("maxentries", 20);
+               cmd.defaultlength = tag->getDuration("length", 0);
+               blockchat = tag->getBool("blockchat");
+               defaultaction = tag->getString("action");
        }
 
        Version GetVersion() CXX11_OVERRIDE
        {
-               return Version("Provides support for the /DCCALLOW command", VF_COMMON | VF_VENDOR);
+               return Version("Provides the DCCALLOW command", VF_COMMON | VF_VENDOR);
        }
 };