#include "inspircd.h"
+enum
+{
+ // From ircd-ratbox.
+ RPL_HELPSTART = 704,
+ RPL_HELPTXT = 705,
+ RPL_ENDOFHELP = 706,
+
+ // InspIRCd-specific?
+ RPL_DCCALLOWSTART = 990,
+ RPL_DCCALLOWLIST = 991,
+ RPL_DCCALLOWEND = 992,
+ RPL_DCCALLOWTIMED = 993,
+ RPL_DCCALLOWPERMANENT = 994,
+ RPL_DCCALLOWREMOVED = 995,
+ ERR_DCCALLOWINVALID = 996,
+ RPL_DCCALLOWEXPIRED = 997,
+ 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",
std::string nickname;
std::string hostmask;
time_t set_on;
- long length;
+ unsigned long length;
DCCAllow() { }
- DCCAllow(const std::string &nick, const std::string &hm, const time_t so, const long ln) : nickname(nick), hostmask(hm), set_on(so), length(ln) { }
+ DCCAllow(const std::string& nick, const std::string& hm, time_t so, unsigned long ln)
+ : nickname(nick)
+ , hostmask(hm)
+ , set_on(so)
+ , length(ln)
+ {
+ }
};
typedef std::vector<User *> userlist;
/* 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> ¶meters, User *user)
+ CmdResult Handle(User* user, const Params& parameters) CXX11_OVERRIDE
{
/* syntax: DCCALLOW [+|-]<nick> (<time>) */
if (!parameters.size())
}
else
{
- user->WriteNumeric(998, "DCCALLOW command not understood. For help on DCCALLOW, type /DCCALLOW HELP");
+ user->WriteNumeric(ERR_UNKNOWNDCCALLOWCMD, "DCCALLOW command not understood. For help on DCCALLOW, type /DCCALLOW HELP");
return CMD_FAILURE;
}
}
if (i->nickname == target->nick)
{
dl->erase(i);
- user->WriteNumeric(995, user->nick, InspIRCd::Format("Removed %s from your DCCALLOW list", target->nick.c_str()));
+ user->WriteNumeric(RPL_DCCALLOWREMOVED, user->nick, InspIRCd::Format("Removed %s from your DCCALLOW list", target->nick.c_str()));
break;
}
}
{
if (target == user)
{
- user->WriteNumeric(996, user->nick, "You cannot add yourself to your own DCCALLOW list!");
+ user->WriteNumeric(ERR_DCCALLOWINVALID, user->nick, "You cannot add yourself to your own DCCALLOW list!");
return CMD_FAILURE;
}
if (dl->size() >= maxentries)
{
- user->WriteNumeric(996, user->nick, "Too many nicks on DCCALLOW list");
+ user->WriteNumeric(ERR_DCCALLOWINVALID, user->nick, "Too many nicks on DCCALLOW list");
return CMD_FAILURE;
}
{
if (k->nickname == target->nick)
{
- user->WriteNumeric(996, user->nick, InspIRCd::Format("%s is already on your DCCALLOW list", target->nick.c_str()));
+ user->WriteNumeric(ERR_DCCALLOWINVALID, user->nick, InspIRCd::Format("%s is already on your DCCALLOW list", target->nick.c_str()));
return CMD_FAILURE;
}
}
{
length = InspIRCd::Duration(default_length);
}
- 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
{
if (length > 0)
{
- user->WriteNumeric(993, 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 %ld seconds", target->nick.c_str(), length));
}
else
{
- user->WriteNumeric(994, user->nick, InspIRCd::Format("Added %s to DCCALLOW list for this session", target->nick.c_str()));
+ user->WriteNumeric(RPL_DCCALLOWPERMANENT, user->nick, InspIRCd::Format("Added %s to DCCALLOW list for this session", target->nick.c_str()));
}
/* route it. */
return CMD_FAILURE;
}
- RouteDescriptor GetRouting(User* user, const std::vector<std::string>& parameters)
+ 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(998, helptext[i]);
- user->WriteNumeric(999, "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)
void DisplayDCCAllowList(User* user)
{
// display current DCCALLOW list
- user->WriteNumeric(990, "Users on your DCCALLOW list:");
+ user->WriteNumeric(RPL_DCCALLOWSTART, "Users on your DCCALLOW list:");
dl = ext.get(user);
if (dl)
{
for (dccallowlist::const_iterator c = dl->begin(); c != dl->end(); ++c)
{
- user->WriteNumeric(991, user->nick, InspIRCd::Format("%s (%s)", c->nickname.c_str(), c->hostmask.c_str()));
+ user->WriteNumeric(RPL_DCCALLOWLIST, user->nick, InspIRCd::Format("%s (%s)", c->nickname.c_str(), c->hostmask.c_str()));
}
}
- user->WriteNumeric(992, "End of DCCALLOW list");
+ user->WriteNumeric(RPL_DCCALLOWEND, "End of DCCALLOW list");
}
};
RemoveNick(user);
}
- ModResult OnUserPreMessage(User* user, void* dest, int target_type, std::string& text, char status, CUList& exempt_list, MessageType msgtype) CXX11_OVERRIDE
+ ModResult OnUserPreMessage(User* user, const MessageTarget& target, MessageDetails& details) CXX11_OVERRIDE
{
if (!IS_LOCAL(user))
return MOD_RES_PASSTHRU;
- if (target_type == TYPE_USER)
+ if (target.type == MessageTarget::TYPE_USER)
{
- User* u = (User*)dest;
+ User* u = target.Get<User>();
/* Always allow a user to dcc themselves (although... why?) */
if (user == u)
return MOD_RES_PASSTHRU;
- if ((text.length()) && (text[0] == '\1'))
+ if ((details.text.length()) && (details.text[0] == '\1'))
{
Expire();
// :jamie!jamie@test-D4457903BA652E0F.silverdream.org PRIVMSG eimaj :DCC SEND m_dnsbl.cpp 3232235786 52650 9676
// :jamie!jamie@test-D4457903BA652E0F.silverdream.org PRIVMSG eimaj :VERSION
- if (strncmp(text.c_str(), "\1DCC ", 5) == 0)
+ if (strncmp(details.text.c_str(), "\1DCC ", 5) == 0)
{
dl = ext.get(u);
if (dl && dl->size())
return MOD_RES_PASSTHRU;
}
- std::string buf = text.substr(5);
+ std::string buf = details.text.substr(5);
size_t s = buf.find(' ');
if (s == std::string::npos)
return MOD_RES_PASSTHRU;
if (InspIRCd::Match(filename, bfl[i].filemask, ascii_case_insensitive_map))
{
/* We have a matching badfile entry, override whatever the default action is */
- if (bfl[i].action == "allow")
+ if (stdalgo::string::equalsci(bfl[i].action, "allow"))
return MOD_RES_PASSTHRU;
else
{
dccallowlist::iterator iter2 = dl->begin();
while (iter2 != dl->end())
{
- if (iter2->length != 0 && (iter2->set_on + iter2->length) <= ServerInstance->Time())
+ time_t expires = iter2->set_on + iter2->length;
+ if (iter2->length != 0 && expires <= ServerInstance->Time())
{
- u->WriteNumeric(997, u->nick, InspIRCd::Format("DCCALLOW entry for %s has expired", iter2->nickname.c_str()));
+ u->WriteNumeric(RPL_DCCALLOWEXPIRED, u->nick, InspIRCd::Format("DCCALLOW entry for %s has expired", iter2->nickname.c_str()));
iter2 = dl->erase(iter2);
}
else
{
u->WriteNotice(i->nickname + " left the network or changed their nickname and has been removed from your DCCALLOW list");
- u->WriteNumeric(995, u->nick, InspIRCd::Format("Removed %s from your DCCALLOW list", i->nickname.c_str()));
+ u->WriteNumeric(RPL_DCCALLOWREMOVED, u->nick, InspIRCd::Format("Removed %s from your DCCALLOW list", i->nickname.c_str()));
dl->erase(i);
break;
}
void ReadConfig(ConfigStatus& status) CXX11_OVERRIDE
{
ConfigTag* tag = ServerInstance->Config->ConfValue("dccallow");
- cmd.maxentries = tag->getInt("maxentries", 20);
+ cmd.maxentries = tag->getUInt("maxentries", 20);
bfl.clear();
ConfigTagList tags = ServerInstance->Config->ConfTags("banfile");