enum
{
+ // From ircd-ratbox.
+ RPL_HELPSTART = 704,
+ RPL_HELPTXT = 705,
+ RPL_ENDOFHELP = 706,
+
// InspIRCd-specific?
RPL_DCCALLOWSTART = 990,
RPL_DCCALLOWLIST = 991,
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",
public:
unsigned int maxentries;
+ unsigned long defaultlength;
CommandDccallow(Module* parent, DCCAllowExt& Ext)
: Command(parent, "DCCALLOW", 0)
, ext(Ext)
/* XXX we need to fix this so it can work with translation stuff (i.e. move +- into a seperate param */
}
- CmdResult Handle(const std::vector<std::string>& parameters, User* user) CXX11_OVERRIDE
+ CmdResult Handle(User* user, const Params& parameters) CXX11_OVERRIDE
{
/* syntax: DCCALLOW [+|-]<nick> (<time>) */
if (!parameters.size())
}
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))
return CMD_FAILURE;
}
- RouteDescriptor GetRouting(User* user, const std::vector<std::string>& parameters) CXX11_OVERRIDE
+ RouteDescriptor GetRouting(User* user, const Params& parameters) CXX11_OVERRIDE
{
return ROUTE_BROADCAST;
}
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)
{
DCCAllowExt ext;
CommandDccallow cmd;
+ bool blockchat;
+ std::string defaultaction;
public:
ModuleDCCAllow()
: ext("dccallow", ExtensionItem::EXT_USER, this)
, cmd(this, ext)
+ , blockchat(false)
{
}
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;
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;
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