diff options
author | brain <brain@e03df62e-2008-0410-955e-edbf42e46eb7> | 2008-05-04 21:37:36 +0000 |
---|---|---|
committer | brain <brain@e03df62e-2008-0410-955e-edbf42e46eb7> | 2008-05-04 21:37:36 +0000 |
commit | ffbd1eebf0b82bf40482879f410f58874030a695 (patch) | |
tree | ef64846a1dcc27e8768723e30b5c4891f64e2942 /src | |
parent | 1c0efd2f569ebcb725d361d3b9a8e31532f7a071 (diff) |
Conversion of command handler params from "const char* const* parameters, int pcnt" to "const std::vector<std::string>& parameters". All of core is converted, but cant test it till the modules are converted.
IMPORTANT: The mode parser public calls have had to be tweaked a bit to also use the string vector. Note that this makes a LOT of our core a bit messy and paves the way to convert a lot of stuff from the mess
of .c_str() calls to using std::string params directly.
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@9608 e03df62e-2008-0410-955e-edbf42e46eb7
Diffstat (limited to 'src')
63 files changed, 328 insertions, 346 deletions
diff --git a/src/command_parse.cpp b/src/command_parse.cpp index 9e54a63d9..173348338 100644 --- a/src/command_parse.cpp +++ b/src/command_parse.cpp @@ -48,12 +48,12 @@ int InspIRCd::PassCompare(Extensible* ex, const char* data,const char* input, co * The second version is much simpler and just has the one stream to read, and is used in NAMES, WHOIS, PRIVMSG etc. * Both will only parse until they reach ServerInstance->Config->MaxTargets number of targets, to stop abuse via spam. */ -int CommandParser::LoopCall(User* user, Command* CommandObj, const char* const* parameters, int pcnt, unsigned int splithere, unsigned int extra) +int CommandParser::LoopCall(User* user, Command* CommandObj, const std::vector<std::string>& parameters, unsigned int splithere, unsigned int extra) { /* First check if we have more than one item in the list, if we don't we return zero here and the handler * which called us just carries on as it was. */ - if (!strchr(parameters[splithere],',')) + if (parameters[splithere].find(',') == std::string::npos) return 0; /** Some lame ircds will weed out dupes using some shitty O(n^2) algorithm. @@ -78,10 +78,10 @@ int CommandParser::LoopCall(User* user, Command* CommandObj, const char* const* { if (dupes.find(item.c_str()) == dupes.end()) { - const char* new_parameters[MAXPARAMETERS]; + std::vector<std::string> new_parameters; - for (int t = 0; (t < pcnt) && (t < MAXPARAMETERS); t++) - new_parameters[t] = parameters[t]; + for (unsigned int t = 0; (t < parameters.size()) && (t < MAXPARAMETERS); t++) + new_parameters.push_back(parameters[t]); if (!items2.GetToken(extrastuff)) extrastuff = ""; @@ -89,7 +89,7 @@ int CommandParser::LoopCall(User* user, Command* CommandObj, const char* const* new_parameters[splithere] = item.c_str(); new_parameters[extra] = extrastuff.c_str(); - CommandObj->Handle(new_parameters,pcnt,user); + CommandObj->Handle(new_parameters, user); dupes[item.c_str()] = true; } @@ -97,12 +97,12 @@ int CommandParser::LoopCall(User* user, Command* CommandObj, const char* const* return 1; } -int CommandParser::LoopCall(User* user, Command* CommandObj, const char* const* parameters, int pcnt, unsigned int splithere) +int CommandParser::LoopCall(User* user, Command* CommandObj, const std::vector<std::string>& parameters, unsigned int splithere) { /* First check if we have more than one item in the list, if we don't we return zero here and the handler * which called us just carries on as it was. */ - if (!strchr(parameters[splithere],',')) + if (parameters[splithere].find(',') == std::string::npos) return 0; std::map<irc::string, bool> dupes; @@ -120,10 +120,10 @@ int CommandParser::LoopCall(User* user, Command* CommandObj, const char* const* { if (dupes.find(item.c_str()) == dupes.end()) { - const char* new_parameters[MAXPARAMETERS]; + std::vector<std::string> new_parameters; - for (int t = 0; (t < pcnt) && (t < MAXPARAMETERS); t++) - new_parameters[t] = parameters[t]; + for (unsigned int t = 0; (t < parameters.size()) && (t < MAXPARAMETERS); t++) + new_parameters.push_back(parameters[t]); new_parameters[splithere] = item.c_str(); @@ -131,7 +131,7 @@ int CommandParser::LoopCall(User* user, Command* CommandObj, const char* const* * record out from under us (e.g. if we /kill a comma sep list, and we're * in that list ourselves) abort if we're gone. */ - CommandObj->Handle(new_parameters,pcnt,user); + CommandObj->Handle(new_parameters, user); dupes[item.c_str()] = true; } @@ -143,13 +143,13 @@ int CommandParser::LoopCall(User* user, Command* CommandObj, const char* const* return 1; } -bool CommandParser::IsValidCommand(const std::string &commandname, int pcnt, User * user) +bool CommandParser::IsValidCommand(const std::string &commandname, unsigned int pcnt, User * user) { Commandable::iterator n = cmdlist.find(commandname); if (n != cmdlist.end()) { - if ((pcnt>=n->second->min_params) && (n->second->source != "<core>")) + if ((pcnt >= n->second->min_params) && (n->second->source != "<core>")) { if (IS_LOCAL(user) && n->second->flags_needed) { @@ -178,13 +178,13 @@ Command* CommandParser::GetHandler(const std::string &commandname) // calls a handler function for a command -CmdResult CommandParser::CallHandler(const std::string &commandname,const char* const* parameters, int pcnt, User *user) +CmdResult CommandParser::CallHandler(const std::string &commandname, const std::vector<std::string>& parameters, User *user) { Commandable::iterator n = cmdlist.find(commandname); if (n != cmdlist.end()) { - if (pcnt >= n->second->min_params) + if (parameters.size() >= n->second->min_params) { bool bOkay = false; @@ -207,7 +207,7 @@ CmdResult CommandParser::CallHandler(const std::string &commandname,const char* if (bOkay) { - return n->second->Handle(parameters,pcnt,user); + return n->second->Handle(parameters,user); } } } @@ -257,10 +257,9 @@ void CommandParser::DoLines(User* current, bool one_only) bool CommandParser::ProcessCommand(User *user, std::string &cmd) { - const char *command_p[MAXPARAMETERS]; - int items = 0; + std::vector<std::string> command_p; irc::tokenstream tokens(cmd); - std::string command; + std::string command, token; tokens.GetToken(command); /* A client sent a nick prefix on their command (ick) @@ -271,16 +270,13 @@ bool CommandParser::ProcessCommand(User *user, std::string &cmd) if (*command.c_str() == ':') tokens.GetToken(command); - while (tokens.GetToken(para[items]) && (items < MAXPARAMETERS)) - { - command_p[items] = para[items].c_str(); - items++; - } + while (tokens.GetToken(token) && (command_p.size() < MAXPARAMETERS)) + command_p.push_back(token); std::transform(command.begin(), command.end(), command.begin(), ::toupper); int MOD_RESULT = 0; - FOREACH_RESULT(I_OnPreCommand,OnPreCommand(command,command_p,items,user,false,cmd)); + FOREACH_RESULT(I_OnPreCommand,OnPreCommand(command, command_p, user, false, cmd)); if (MOD_RESULT == 1) { return true; } @@ -333,7 +329,7 @@ bool CommandParser::ProcessCommand(User *user, std::string &cmd) command.c_str(), user->nick, user->ident, user->host); return do_more; } - if (items < cm->second->min_params) + if (command_p.size() < cm->second->min_params) { user->WriteNumeric(461, "%s %s :Not enough parameters.", user->nick, command.c_str()); if ((ServerInstance->Config->SyntaxHints) && (user->registered == REG_ALL) && (cm->second->syntax.length())) @@ -353,16 +349,16 @@ bool CommandParser::ProcessCommand(User *user, std::string &cmd) /* module calls too */ MOD_RESULT = 0; - FOREACH_RESULT(I_OnPreCommand,OnPreCommand(command,command_p,items,user,true,cmd)); + FOREACH_RESULT(I_OnPreCommand,OnPreCommand(command, command_p, user, true, cmd)); if (MOD_RESULT == 1) return do_more; /* * WARNING: be careful, the user may be deleted soon */ - CmdResult result = cm->second->Handle(command_p,items,user); + CmdResult result = cm->second->Handle(command_p, user); - FOREACH_MOD(I_OnPostCommand,OnPostCommand(command, command_p, items, user, result,cmd)); + FOREACH_MOD(I_OnPostCommand,OnPostCommand(command, command_p, user, result,cmd)); return do_more; } } @@ -448,38 +444,29 @@ bool CommandParser::FindSym(void** v, void* h, const std::string &name) return true; } -bool CommandParser::ReloadCommand(const char* cmd, User* user) +bool CommandParser::ReloadCommand(std::string cmd, User* user) { char filename[MAXBUF]; - char commandname[MAXBUF]; - int y = 0; - - for (const char* x = cmd; *x; x++, y++) - commandname[y] = toupper(*x); - - commandname[y] = 0; + std::transform(cmd.begin(), cmd.end(), cmd.begin(), ::toupper); - SharedObjectList::iterator command = RFCCommands.find(commandname); + SharedObjectList::iterator command = RFCCommands.find(cmd); if (command != RFCCommands.end()) { - Command* cmdptr = cmdlist.find(commandname)->second; - cmdlist.erase(cmdlist.find(commandname)); - - for (char* x = commandname; *x; x++) - *x = tolower(*x); - + Command* cmdptr = cmdlist.find(cmd)->second; + cmdlist.erase(cmdlist.find(cmd)); + RFCCommands.erase(cmd); + std::transform(cmd.begin(), cmd.end(), cmd.begin(), ::tolower); delete cmdptr; dlclose(command->second); - RFCCommands.erase(command); - snprintf(filename, MAXBUF, "cmd_%s.so", commandname); + snprintf(filename, MAXBUF, "cmd_%s.so", cmd.c_str()); const char* err = this->LoadCommand(filename); if (err) { if (user) - user->WriteServ("NOTICE %s :*** Error loading 'cmd_%s.so': %s", user->nick, cmd, err); + user->WriteServ("NOTICE %s :*** Error loading 'cmd_%s.so': %s", user->nick, cmd.c_str(), err); return false; } @@ -489,18 +476,21 @@ bool CommandParser::ReloadCommand(const char* cmd, User* user) return false; } -CmdResult cmd_reload::Handle(const char* const* parameters, int /* pcnt */, User *user) +CmdResult cmd_reload::Handle(const std::vector<std::string>& parameters, User *user) { - user->WriteServ("NOTICE %s :*** Reloading command '%s'",user->nick, parameters[0]); + if (parameters.size() < 1) + return CMD_FAILURE; + + user->WriteServ("NOTICE %s :*** Reloading command '%s'",user->nick, parameters[0].c_str()); if (ServerInstance->Parser->ReloadCommand(parameters[0], user)) { - user->WriteServ("NOTICE %s :*** Successfully reloaded command '%s'", user->nick, parameters[0]); - ServerInstance->SNO->WriteToSnoMask('A', "RELOAD: %s reloaded the '%s' command.", user->nick, parameters[0]); + user->WriteServ("NOTICE %s :*** Successfully reloaded command '%s'", user->nick, parameters[0].c_str()); + ServerInstance->SNO->WriteToSnoMask('A', "RELOAD: %s reloaded the '%s' command.", user->nick, parameters[0].c_str()); return CMD_SUCCESS; } else { - user->WriteServ("NOTICE %s :*** Could not reload command '%s' -- fix this problem, then /REHASH as soon as possible!", user->nick, parameters[0]); + user->WriteServ("NOTICE %s :*** Could not reload command '%s' -- fix this problem, then /REHASH as soon as possible!", user->nick, parameters[0].c_str()); return CMD_FAILURE; } } diff --git a/src/commands/cmd_admin.cpp b/src/commands/cmd_admin.cpp index bc443fc32..5e9b4b4c7 100644 --- a/src/commands/cmd_admin.cpp +++ b/src/commands/cmd_admin.cpp @@ -22,7 +22,7 @@ extern "C" DllExport Command* init_command(InspIRCd* Instance) /** Handle /ADMIN */ -CmdResult CommandAdmin::Handle (const char* const* parameters, int pcnt, User *user) +CmdResult CommandAdmin::Handle (const std::vector<std::string>& parameters, User *user) { user->WriteNumeric(256, "%s :Administrative info for %s",user->nick,ServerInstance->Config->ServerName); if (*ServerInstance->Config->AdminName) diff --git a/src/commands/cmd_away.cpp b/src/commands/cmd_away.cpp index 33e140beb..7d2522304 100644 --- a/src/commands/cmd_away.cpp +++ b/src/commands/cmd_away.cpp @@ -21,11 +21,11 @@ extern "C" DllExport Command* init_command(InspIRCd* Instance) /** Handle /AWAY */ -CmdResult CommandAway::Handle (const char* const* parameters, int pcnt, User *user) +CmdResult CommandAway::Handle (const std::vector<std::string>& parameters, User *user) { int MOD_RESULT = 0; - if ((pcnt) && (*parameters[0])) + if ((parameters.size()) && (!parameters[0].empty())) { FOREACH_RESULT(I_OnSetAway, OnSetAway(user, parameters[0])); @@ -33,7 +33,8 @@ CmdResult CommandAway::Handle (const char* const* parameters, int pcnt, User *us return CMD_FAILURE; user->awaytime = ServerInstance->Time(); - strlcpy(user->awaymsg,parameters[0],MAXAWAY); + strlcpy(user->awaymsg, parameters[0].c_str(), MAXAWAY); + user->WriteNumeric(306, "%s :You have been marked as being away",user->nick); } else diff --git a/src/commands/cmd_clearcache.cpp b/src/commands/cmd_clearcache.cpp index c7354df07..5f1792928 100644 --- a/src/commands/cmd_clearcache.cpp +++ b/src/commands/cmd_clearcache.cpp @@ -21,7 +21,7 @@ extern "C" DllExport Command* init_command(InspIRCd* Instance) /** Handle /CLEARCACHE */ -CmdResult CommandClearcache::Handle (const char* const* parameters, int pcnt, User *user) +CmdResult CommandClearcache::Handle (const std::vector<std::string>& parameters, User *user) { int n = ServerInstance->Res->ClearCache(); user->WriteServ("NOTICE %s :*** Cleared DNS cache of %d items.", user->nick, n); diff --git a/src/commands/cmd_commands.cpp b/src/commands/cmd_commands.cpp index 2b2e7ffa0..eddcb6bd8 100644 --- a/src/commands/cmd_commands.cpp +++ b/src/commands/cmd_commands.cpp @@ -21,7 +21,7 @@ extern "C" DllExport Command* init_command(InspIRCd* Instance) return new CommandCommands(Instance); } -CmdResult CommandCommands::Handle (const char* const*, int, User *user) +CmdResult CommandCommands::Handle (const std::vector<std::string>&, User *user) { for (Commandable::iterator i = ServerInstance->Parser->cmdlist.begin(); i != ServerInstance->Parser->cmdlist.end(); i++) { diff --git a/src/commands/cmd_connect.cpp b/src/commands/cmd_connect.cpp index 04aada207..81340c37a 100644 --- a/src/commands/cmd_connect.cpp +++ b/src/commands/cmd_connect.cpp @@ -25,7 +25,7 @@ extern "C" DllExport Command* init_command(InspIRCd* Instance) /** Handle /CONNECT */ -CmdResult CommandConnect::Handle (const char* const*, int, User *user) +CmdResult CommandConnect::Handle (const std::vector<std::string>&, User *user) { user->WriteServ( "NOTICE %s :Look into loading a linking module (like m_spanningtree) if you want this to do anything useful.", user->nick); return CMD_SUCCESS; diff --git a/src/commands/cmd_die.cpp b/src/commands/cmd_die.cpp index 2723ecca3..4278a3a90 100644 --- a/src/commands/cmd_die.cpp +++ b/src/commands/cmd_die.cpp @@ -22,9 +22,9 @@ extern "C" DllExport Command* init_command(InspIRCd* Instance) /** Handle /DIE */ -CmdResult CommandDie::Handle (const char* const* parameters, int pcnt, User *user) +CmdResult CommandDie::Handle (const std::vector<std::string>& parameters, User *user) { - if (!ServerInstance->PassCompare(user, ServerInstance->Config->diepass, parameters[0], ServerInstance->Config->powerhash)) + if (!ServerInstance->PassCompare(user, ServerInstance->Config->diepass, parameters[0].c_str(), ServerInstance->Config->powerhash)) { { std::string diebuf = std::string("*** DIE command from ") + user->nick + "!" + user->ident + "@" + user->dhost + ". Terminating in " + ConvToStr(ServerInstance->Config->DieDelay) + " seconds."; diff --git a/src/commands/cmd_eline.cpp b/src/commands/cmd_eline.cpp index fa9ddd708..57f0e193c 100644 --- a/src/commands/cmd_eline.cpp +++ b/src/commands/cmd_eline.cpp @@ -22,11 +22,11 @@ extern "C" DllExport Command* init_command(InspIRCd* Instance) /** Handle /ELINE */ -CmdResult CommandEline::Handle (const char* const* parameters, int pcnt, User *user) +CmdResult CommandEline::Handle (const std::vector<std::string>& parameters, User *user) { std::string target = parameters[0]; - if (pcnt >= 3) + if (parameters.size() >= 3) { IdentHostPair ih; User* find = ServerInstance->FindNick(target.c_str()); @@ -48,9 +48,9 @@ CmdResult CommandEline::Handle (const char* const* parameters, int pcnt, User *u if (ServerInstance->HostMatchesEveryone(ih.first+"@"+ih.second,user)) return CMD_FAILURE; - long duration = ServerInstance->Duration(parameters[1]); + long duration = ServerInstance->Duration(parameters[1].c_str()); - ELine* el = new ELine(ServerInstance, ServerInstance->Time(), duration, user->nick, parameters[2], ih.first.c_str(), ih.second.c_str()); + ELine* el = new ELine(ServerInstance, ServerInstance->Time(), duration, user->nick, parameters[2].c_str(), ih.first.c_str(), ih.second.c_str()); if (ServerInstance->XLines->AddLine(el, user)) { if (!duration) diff --git a/src/commands/cmd_gline.cpp b/src/commands/cmd_gline.cpp index a6bec9c0e..d2a1f69d6 100644 --- a/src/commands/cmd_gline.cpp +++ b/src/commands/cmd_gline.cpp @@ -22,11 +22,11 @@ extern "C" DllExport Command* init_command(InspIRCd* Instance) /** Handle /GLINE */ -CmdResult CommandGline::Handle (const char* const* parameters, int pcnt, User *user) +CmdResult CommandGline::Handle (const std::vector<std::string>& parameters, User *user) { std::string target = parameters[0]; - if (pcnt >= 3) + if (parameters.size() >= 3) { IdentHostPair ih; User* find = ServerInstance->FindNick(target.c_str()); @@ -48,14 +48,14 @@ CmdResult CommandGline::Handle (const char* const* parameters, int pcnt, User *u if (ServerInstance->HostMatchesEveryone(ih.first+"@"+ih.second,user)) return CMD_FAILURE; - else if (strchr(target.c_str(),'!')) + else if (target.find('!') != std::string::npos) { user->WriteServ("NOTICE %s :*** G-Line cannot operate on nick!user@host masks",user->nick); return CMD_FAILURE; } - long duration = ServerInstance->Duration(parameters[1]); - GLine* gl = new GLine(ServerInstance, ServerInstance->Time(), duration, user->nick, parameters[2], ih.first.c_str(), ih.second.c_str()); + long duration = ServerInstance->Duration(parameters[1].c_str()); + GLine* gl = new GLine(ServerInstance, ServerInstance->Time(), duration, user->nick, parameters[2].c_str(), ih.first.c_str(), ih.second.c_str()); if (ServerInstance->XLines->AddLine(gl, user)) { if (!duration) diff --git a/src/commands/cmd_info.cpp b/src/commands/cmd_info.cpp index 31f98ddfe..346168960 100644 --- a/src/commands/cmd_info.cpp +++ b/src/commands/cmd_info.cpp @@ -21,7 +21,7 @@ extern "C" DllExport Command* init_command(InspIRCd* Instance) /** Handle /INFO */ -CmdResult CommandInfo::Handle (const char* const*, int, User *user) +CmdResult CommandInfo::Handle (const std::vector<std::string>&, User *user) { user->WriteServ( "371 %s : -/\\- \2InspIRCd\2 -\\/-", user->nick); user->WriteServ( "371 %s : November 2002 - Present", user->nick); diff --git a/src/commands/cmd_invite.cpp b/src/commands/cmd_invite.cpp index 553915ac9..db1c64eac 100644 --- a/src/commands/cmd_invite.cpp +++ b/src/commands/cmd_invite.cpp @@ -21,31 +21,23 @@ extern "C" DllExport Command* init_command(InspIRCd* Instance) /** Handle /INVITE */ -CmdResult CommandInvite::Handle (const char* const* parameters, int pcnt, User *user) +CmdResult CommandInvite::Handle (const std::vector<std::string>& parameters, User *user) { int MOD_RESULT = 0; - if (pcnt == 2 || pcnt == 3) + if (parameters.size() == 2 || parameters.size() == 3) { User* u = ServerInstance->FindNick(parameters[0]); Channel* c = ServerInstance->FindChan(parameters[1]); time_t timeout = 0; - if (pcnt == 3) + if (parameters.size() == 3) { timeout = time(NULL) + ServerInstance->Duration(parameters[2]); } if ((!c) || (!u)) { - if (!c) - { - user->WriteNumeric(401, "%s %s :No such nick/channel",user->nick, parameters[1]); - } - else - { - user->WriteNumeric(401, "%s %s :No such nick/channel",user->nick, parameters[0]); - } - + user->WriteNumeric(401, "%s %s :No such nick/channel",user->nick, c ? parameters[0].c_str() : parameters[1].c_str()); return CMD_FAILURE; } diff --git a/src/commands/cmd_ison.cpp b/src/commands/cmd_ison.cpp index ba119e251..3c2ebad58 100644 --- a/src/commands/cmd_ison.cpp +++ b/src/commands/cmd_ison.cpp @@ -21,13 +21,13 @@ extern "C" DllExport Command* init_command(InspIRCd* Instance) /** Handle /ISON */ -CmdResult CommandIson::Handle (const char* const* parameters, int pcnt, User *user) +CmdResult CommandIson::Handle (const std::vector<std::string>& parameters, User *user) { std::map<User*,User*> ison_already; User *u; std::string reply = std::string("303 ") + user->nick + " :"; - for (int i = 0; i < pcnt; i++) + for (unsigned int i = 0; i < parameters.size(); i++) { u = ServerInstance->FindNick(parameters[i]); if (ison_already.find(u) != ison_already.end()) @@ -48,7 +48,7 @@ CmdResult CommandIson::Handle (const char* const* parameters, int pcnt, User *us } else { - if ((i == pcnt-1) && (strchr(parameters[i],' '))) + if ((i == parameters.size() - 1) && (parameters[i].find(' ') != std::string::npos)) { /* Its a space seperated list of nicks (RFC1459 says to support this) */ diff --git a/src/commands/cmd_join.cpp b/src/commands/cmd_join.cpp index d34409e7c..e7c841399 100644 --- a/src/commands/cmd_join.cpp +++ b/src/commands/cmd_join.cpp @@ -21,31 +21,31 @@ extern "C" DllExport Command* init_command(InspIRCd* Instance) /** Handle /JOIN */ -CmdResult CommandJoin::Handle (const char* const* parameters, int pcnt, User *user) +CmdResult CommandJoin::Handle (const std::vector<std::string>& parameters, User *user) { - if (pcnt > 1) + if (parameters.size() > 1) { - if (ServerInstance->Parser->LoopCall(user, this, parameters, pcnt, 0, 1)) + if (ServerInstance->Parser->LoopCall(user, this, parameters, 0, 1)) return CMD_SUCCESS; - if (ServerInstance->IsChannel(parameters[0])) + if (ServerInstance->IsChannel(parameters[0].c_str())) { - Channel::JoinUser(ServerInstance, user, parameters[0], false, parameters[1], false); + Channel::JoinUser(ServerInstance, user, parameters[0].c_str(), false, parameters[1].c_str(), false); return CMD_SUCCESS; } } else { - if (ServerInstance->Parser->LoopCall(user, this, parameters, pcnt, 0)) + if (ServerInstance->Parser->LoopCall(user, this, parameters, 0)) return CMD_SUCCESS; - if (ServerInstance->IsChannel(parameters[0])) + if (ServerInstance->IsChannel(parameters[0].c_str())) { - Channel::JoinUser(ServerInstance, user, parameters[0], false, "", false); + Channel::JoinUser(ServerInstance, user, parameters[0].c_str(), false, "", false); return CMD_SUCCESS; } } - user->WriteNumeric(403, "%s %s :Invalid channel name",user->nick, parameters[0]); + user->WriteNumeric(403, "%s %s :Invalid channel name",user->nick, parameters[0].c_str()); return CMD_FAILURE; } diff --git a/src/commands/cmd_kick.cpp b/src/commands/cmd_kick.cpp index 9cf4f8b5c..e4acbbbf1 100644 --- a/src/commands/cmd_kick.cpp +++ b/src/commands/cmd_kick.cpp @@ -21,30 +21,30 @@ extern "C" DllExport Command* init_command(InspIRCd* Instance) /** Handle /KICK */ -CmdResult CommandKick::Handle (const char* const* parameters, int pcnt, User *user) +CmdResult CommandKick::Handle (const std::vector<std::string>& parameters, User *user) { char reason[MAXKICK]; Channel* c = ServerInstance->FindChan(parameters[0]); User* u = ServerInstance->FindNick(parameters[1]); - if (ServerInstance->Parser->LoopCall(user, this, parameters, pcnt, 1)) + if (ServerInstance->Parser->LoopCall(user, this, parameters, parameters.size(), 1)) return CMD_SUCCESS; if (!u || !c) { - user->WriteServ( "401 %s %s :No such nick/channel", user->nick, u ? parameters[0] : parameters[1]); + user->WriteServ( "401 %s %s :No such nick/channel", user->nick, u ? parameters[0].c_str() : parameters[1].c_str()); return CMD_FAILURE; } if ((IS_LOCAL(user)) && (!c->HasUser(user)) && (!ServerInstance->ULine(user->server))) { - user->WriteServ( "442 %s %s :You're not on that channel!", user->nick, parameters[0]); + user->WriteServ( "442 %s %s :You're not on that channel!", user->nick, parameters[0].c_str()); return CMD_FAILURE; } - if (pcnt > 2) + if (parameters.size() > 2) { - strlcpy(reason, parameters[2], MAXKICK - 1); + strlcpy(reason, parameters[2].c_str(), MAXKICK - 1); } else { diff --git a/src/commands/cmd_kill.cpp b/src/commands/cmd_kill.cpp index 6932c8ed6..0d95b1cf0 100644 --- a/src/commands/cmd_kill.cpp +++ b/src/commands/cmd_kill.cpp @@ -21,10 +21,10 @@ extern "C" DllExport Command* init_command(InspIRCd* Instance) /** Handle /KILL */ -CmdResult CommandKill::Handle (const char* const* parameters, int pcnt, User *user) +CmdResult CommandKill::Handle (const std::vector<std::string>& parameters, User *user) { /* Allow comma seperated lists of users for /KILL (thanks w00t) */ - if (ServerInstance->Parser->LoopCall(user, this, parameters, pcnt, 0)) + if (ServerInstance->Parser->LoopCall(user, this, parameters, parameters.size(), 0)) return CMD_SUCCESS; User *u = ServerInstance->FindNick(parameters[0]); @@ -54,18 +54,18 @@ CmdResult CommandKill::Handle (const char* const* parameters, int pcnt, User *us if (*ServerInstance->Config->HideKillsServer) { // hidekills is on, use it - snprintf(killreason, MAXQUIT, "Killed (%s (%s))", ServerInstance->Config->HideKillsServer, parameters[1]); + snprintf(killreason, MAXQUIT, "Killed (%s (%s))", ServerInstance->Config->HideKillsServer, parameters[1].c_str()); } else { // hidekills is off, do nothing - snprintf(killreason, MAXQUIT, "Killed (%s (%s))", user->nick, parameters[1]); + snprintf(killreason, MAXQUIT, "Killed (%s (%s))", user->nick, parameters[1].c_str()); } } else { /* Leave it alone, remote server has already formatted it */ - snprintf(killreason, MAXQUIT, "%s", parameters[1]); + strlcpy(killreason, parameters[1].c_str(), MAXQUIT); } /* @@ -75,7 +75,7 @@ CmdResult CommandKill::Handle (const char* const* parameters, int pcnt, User *us if (!IS_LOCAL(u)) { // remote kill - ServerInstance->SNO->WriteToSnoMask('K', "Remote kill by %s: %s!%s@%s (%s)", user->nick, u->nick, u->ident, u->host, parameters[1]); + ServerInstance->SNO->WriteToSnoMask('K', "Remote kill by %s: %s!%s@%s (%s)", user->nick, u->nick, u->ident, u->host, parameters[1].c_str()); FOREACH_MOD(I_OnRemoteKill, OnRemoteKill(user, u, killreason, killreason)); } else @@ -85,8 +85,8 @@ CmdResult CommandKill::Handle (const char* const* parameters, int pcnt, User *us * XXX - this isn't entirely correct, servers A - B - C, oper on A, client on C. Oper kills client, A and B will get remote kill * snotices, C will get a local kill snotice. this isn't accurate, and needs fixing at some stage. -- w00t */ - ServerInstance->SNO->WriteToSnoMask('k',"Local Kill by %s: %s!%s@%s (%s)", user->nick, u->nick, u->ident, u->host, parameters[1]); - ServerInstance->Logs->Log("KILL",DEFAULT,"LOCAL KILL: %s :%s!%s!%s (%s)", u->nick, ServerInstance->Config->ServerName, user->dhost, user->nick, parameters[1]); + ServerInstance->SNO->WriteToSnoMask('k',"Local Kill by %s: %s!%s@%s (%s)", user->nick, u->nick, u->ident, u->host, parameters[1].c_str()); + ServerInstance->Logs->Log("KILL",DEFAULT,"LOCAL KILL: %s :%s!%s!%s (%s)", u->nick, ServerInstance->Config->ServerName, user->dhost, user->nick, parameters[1].c_str()); /* Bug #419, make sure this message can only occur once even in the case of multiple KILL messages crossing the network, and change to show * hidekillsserver as source if possible */ @@ -97,7 +97,7 @@ CmdResult CommandKill::Handle (const char* const* parameters, int pcnt, User *us ServerInstance->Config->ServerName, user->dhost, *ServerInstance->Config->HideKillsServer ? ServerInstance->Config->HideKillsServer : user->nick, - parameters[1]); + parameters[1].c_str()); } } @@ -106,7 +106,7 @@ CmdResult CommandKill::Handle (const char* const* parameters, int pcnt, User *us } else { - user->WriteServ( "401 %s %s :No such nick/channel", user->nick, parameters[0]); + user->WriteServ( "401 %s %s :No such nick/channel", user->nick, parameters[0].c_str()); return CMD_FAILURE; } diff --git a/src/commands/cmd_kline.cpp b/src/commands/cmd_kline.cpp index b4464a6d3..ddf5d218b 100644 --- a/src/commands/cmd_kline.cpp +++ b/src/commands/cmd_kline.cpp @@ -22,11 +22,11 @@ extern "C" DllExport Command* init_command(InspIRCd* Instance) /** Handle /KLINE */ -CmdResult CommandKline::Handle (const char* const* parameters, int pcnt, User *user) +CmdResult CommandKline::Handle (const std::vector<std::string>& parameters, User *user) { std::string target = parameters[0]; - if (pcnt >= 3) + if (parameters.size() >= 3) { IdentHostPair ih; User* find = ServerInstance->FindNick(target.c_str()); @@ -48,14 +48,14 @@ CmdResult CommandKline::Handle (const char* const* parameters, int pcnt, User *u if (ServerInstance->HostMatchesEveryone(ih.first+"@"+ih.second,user)) return CMD_FAILURE; - if (strchr(target.c_str(),'!')) + if (target.find('!') != std::string::npos) { user->WriteServ("NOTICE %s :*** K-Line cannot operate on nick!user@host masks",user->nick); return CMD_FAILURE; } - long duration = ServerInstance->Duration(parameters[1]); - KLine* kl = new KLine(ServerInstance, ServerInstance->Time(), duration, user->nick, parameters[2], ih.first.c_str(), ih.second.c_str()); + long duration = ServerInstance->Duration(parameters[1].c_str()); + KLine* kl = new KLine(ServerInstance, ServerInstance->Time(), duration, user->nick, parameters[2].c_str(), ih.first.c_str(), ih.second.c_str()); if (ServerInstance->XLines->AddLine(kl,user)) { if (!duration) diff --git a/src/commands/cmd_links.cpp b/src/commands/cmd_links.cpp index e3111831e..554e6d962 100644 --- a/src/commands/cmd_links.cpp +++ b/src/commands/cmd_links.cpp @@ -21,7 +21,7 @@ extern "C" DllExport Command* init_command(InspIRCd* Instance) /** Handle /LINKS */ -CmdResult CommandLinks::Handle (const char* const*, int, User *user) +CmdResult CommandLinks::Handle (const std::vector<std::string>&, User *user) { user->WriteNumeric(364, "%s %s %s :0 %s",user->nick,ServerInstance->Config->ServerName,ServerInstance->Config->ServerName,ServerInstance->Config->ServerDesc); user->WriteNumeric(365, "%s * :End of /LINKS list.",user->nick); diff --git a/src/commands/cmd_list.cpp b/src/commands/cmd_list.cpp index 2c7971edd..518aee62f 100644 --- a/src/commands/cmd_list.cpp +++ b/src/commands/cmd_list.cpp @@ -22,24 +22,22 @@ extern "C" DllExport Command* init_command(InspIRCd* Instance) return new CommandList(Instance); } -CmdResult CommandList::Handle (const char* const* parameters, int pcnt, User *user) +CmdResult CommandList::Handle (const std::vector<std::string>& parameters, User *user) { int minusers = 0, maxusers = 0; user->WriteNumeric(321, "%s Channel :Users Name",user->nick); /* Work around mIRC suckyness. YOU SUCK, KHALED! */ - if (pcnt == 1) + if (parameters.size() == 1) { - if (*parameters[0] == '<') + if (parameters[0][0] == '<') { - maxusers = atoi(parameters[0]+1); - pcnt = 0; + maxusers = atoi((parameters[0].c_str())+1); } - else if (*parameters[0] == '>') + else if (parameters[0][0] == '>') { - minusers = atoi(parameters[0]+1); - pcnt = 0; + minusers = atoi((parameters[0].c_str())+1); } } @@ -54,9 +52,9 @@ CmdResult CommandList::Handle (const char* const* parameters, int pcnt, User *us if (too_many || too_few) continue; - if (pcnt) + if (parameters.size() && parameters[0][0] != '<' && parameters[0][0] == '>') { - if (!match(i->second->name, parameters[0]) && !match(i->second->topic, parameters[0])) + if (!match(i->second->name, parameters[0].c_str()) && !match(i->second->topic, parameters[0].c_str())) continue; } diff --git a/src/commands/cmd_loadmodule.cpp b/src/commands/cmd_loadmodule.cpp index 744928a86..31bb02ca0 100644 --- a/src/commands/cmd_loadmodule.cpp +++ b/src/commands/cmd_loadmodule.cpp @@ -21,17 +21,17 @@ extern "C" DllExport Command* init_command(InspIRCd* Instance) /** Handle /LOADMODULE */ -CmdResult CommandLoadmodule::Handle (const char* const* parameters, int, User *user) +CmdResult CommandLoadmodule::Handle (const std::vector<std::string>& parameters, User *user) { - if (ServerInstance->Modules->Load(parameters[0])) + if (ServerInstance->Modules->Load(parameters[0].c_str())) { - ServerInstance->SNO->WriteToSnoMask('A', "NEW MODULE: %s loaded %s",user->nick, parameters[0]); - user->WriteNumeric(975, "%s %s :Module successfully loaded.",user->nick, parameters[0]); + ServerInstance->SNO->WriteToSnoMask('A', "NEW MODULE: %s loaded %s",user->nick, parameters[0].c_str()); + user->WriteNumeric(975, "%s %s :Module successfully loaded.",user->nick, parameters[0].c_str()); return CMD_SUCCESS; } else { - user->WriteNumeric(974, "%s %s :%s",user->nick, parameters[0], ServerInstance->Modules->LastError().c_str()); + user->WriteNumeric(974, "%s %s :%s",user->nick, parameters[0].c_str(), ServerInstance->Modules->LastError().c_str()); return CMD_FAILURE; } } diff --git a/src/commands/cmd_lusers.cpp b/src/commands/cmd_lusers.cpp index 313e2d2b5..11f34d8d7 100644 --- a/src/commands/cmd_lusers.cpp +++ b/src/commands/cmd_lusers.cpp @@ -21,7 +21,7 @@ extern "C" DllExport Command* init_command(InspIRCd* Instance) /** Handle /LUSERS */ -CmdResult CommandLusers::Handle (const char* const*, int, User *user) +CmdResult CommandLusers::Handle (const std::vector<std::string>&, User *user) { // this lusers command shows one server at all times because // a protocol module must override it to show those stats. diff --git a/src/commands/cmd_map.cpp b/src/commands/cmd_map.cpp index 5e729c98c..cea9f39cf 100644 --- a/src/commands/cmd_map.cpp +++ b/src/commands/cmd_map.cpp @@ -21,7 +21,7 @@ extern "C" DllExport Command* init_command(InspIRCd* Instance) /** Handle /MAP */ -CmdResult CommandMap::Handle (const char* const*, int, User *user) +CmdResult CommandMap::Handle (const std::vector<std::string>&, User *user) { // as with /LUSERS this does nothing without a linking // module to override its behaviour and display something diff --git a/src/commands/cmd_mode.cpp b/src/commands/cmd_mode.cpp index 25fec59b9..7bc417fd1 100644 --- a/src/commands/cmd_mode.cpp +++ b/src/commands/cmd_mode.cpp @@ -21,9 +21,9 @@ extern "C" DllExport Command* init_command(InspIRCd* Instance) /** Handle /MODE */ -CmdResult CommandMode::Handle (const char* const* parameters, int pcnt, User *user) +CmdResult CommandMode::Handle (const std::vector<std::string>& parameters, User *user) { - ServerInstance->Modes->Process(parameters, pcnt, user, false); + ServerInstance->Modes->Process(parameters, user, false); return CMD_SUCCESS; } diff --git a/src/commands/cmd_modules.cpp b/src/commands/cmd_modules.cpp index 4e4679ce4..0409e6341 100644 --- a/src/commands/cmd_modules.cpp +++ b/src/commands/cmd_modules.cpp @@ -38,7 +38,7 @@ extern "C" DllExport Command* init_command(InspIRCd* Instance) /** Handle /MODULES */ -CmdResult CommandModules::Handle (const char* const*, int, User *user) +CmdResult CommandModules::Handle (const std::vector<std::string>&, User *user) { std::vector<std::string> module_names = ServerInstance->Modules->GetAllModuleNames(0); diff --git a/src/commands/cmd_motd.cpp b/src/commands/cmd_motd.cpp index b6584303d..b2f909f90 100644 --- a/src/commands/cmd_motd.cpp +++ b/src/commands/cmd_motd.cpp @@ -21,7 +21,7 @@ extern "C" DllExport Command* init_command(InspIRCd* Instance) /** Handle /MOTD */ -CmdResult CommandMotd::Handle (const char* const*, int, User *user) +CmdResult CommandMotd::Handle (const std::vector<std::string>&, User *user) { user->ShowMOTD(); return CMD_SUCCESS; diff --git a/src/commands/cmd_names.cpp b/src/commands/cmd_names.cpp index 0c3492630..7e2b9cdee 100644 --- a/src/commands/cmd_names.cpp +++ b/src/commands/cmd_names.cpp @@ -21,17 +21,17 @@ extern "C" DllExport Command* init_command(InspIRCd* Instance) /** Handle /NAMES */ -CmdResult CommandNames::Handle (const char* const* parameters, int pcnt, User *user) +CmdResult CommandNames::Handle (const std::vector<std::string>& parameters, User *user) { Channel* c; - if (!pcnt) + if (!parameters.size()) { user->WriteNumeric(366, "%s * :End of /NAMES list.",user->nick); return CMD_SUCCESS; } - if (ServerInstance->Parser->LoopCall(user, this, parameters, pcnt, 0)) + if (ServerInstance->Parser->LoopCall(user, this, parameters, 0)) return CMD_SUCCESS; c = ServerInstance->FindChan(parameters[0]); @@ -46,7 +46,7 @@ CmdResult CommandNames::Handle (const char* const* parameters, int pcnt, User *u } else { - user->WriteNumeric(401, "%s %s :No such nick/channel",user->nick, parameters[0]); + user->WriteNumeric(401, "%s %s :No such nick/channel",user->nick, parameters[0].c_str()); } return CMD_SUCCESS; diff --git a/src/commands/cmd_nick.cpp b/src/commands/cmd_nick.cpp index 059a97806..eac29dd24 100644 --- a/src/commands/cmd_nick.cpp +++ b/src/commands/cmd_nick.cpp @@ -25,21 +25,21 @@ extern "C" DllExport Command* init_command(InspIRCd* Instance) * for the client introduction code in here, youre in the wrong place. * You need to look in the spanningtree module for this! */ -CmdResult CommandNick::Handle (const char* const* parameters, int, User *user) +CmdResult CommandNick::Handle (const std::vector<std::string>& parameters, User *user) { char oldnick[NICKMAX]; - if (!*parameters[0] || !*user->nick) + if (parameters[0].empty()) { /* We cant put blanks in the parameters, so for this (extremely rare) issue we just put '*' here. */ user->WriteNumeric(432, "%s * :Erroneous Nickname", *user->nick ? user->nick : "*"); return CMD_FAILURE; } - if (irc::string(user->nick) == irc::string(parameters[0])) + if (irc::string(user->nick) == assign(parameters[0])) { /* If its exactly the same, even case, dont do anything. */ - if (!strcmp(user->nick,parameters[0])) + if (parameters[0] == user->nick) return CMD_SUCCESS; /* Its a change of case. People insisted that they should be @@ -48,12 +48,12 @@ CmdResult CommandNick::Handle (const char* const* parameters, int, User *user) */ strlcpy(oldnick, user->nick, NICKMAX - 1); int MOD_RESULT = 0; - FOREACH_RESULT(I_OnUserPreNick,OnUserPreNick(user,parameters[0])); + FOREACH_RESULT(I_OnUserPreNick,OnUserPreNick(user,parameters[0].c_str())); if (MOD_RESULT) return CMD_FAILURE; if (user->registered == REG_ALL) - user->WriteCommon("NICK %s",parameters[0]); - strlcpy(user->nick, parameters[0], NICKMAX - 1); + user->WriteCommon("NICK %s",parameters[0].c_str()); + strlcpy(user->nick, parameters[0].c_str(), NICKMAX - 1); user->InvalidateCache(); FOREACH_MOD(I_OnUserPostNick,OnUserPostNick(user,oldnick)); return CMD_SUCCESS; @@ -73,8 +73,8 @@ CmdResult CommandNick::Handle (const char* const* parameters, int, User *user) XLine* mq = ServerInstance->XLines->MatchesLine("Q",parameters[0]); if (mq) { - ServerInstance->SNO->WriteToSnoMask('x', "Q-Lined nickname %s from %s!%s@%s: %s", parameters[0], user->nick, user->ident, user->host, mq->reason); - user->WriteNumeric(432, "%s %s :Invalid nickname: %s",user->nick,parameters[0], mq->reason); + ServerInstance->SNO->WriteToSnoMask('x', "Q-Lined nickname %s from %s!%s@%s: %s", parameters[0].c_str(), user->nick, user->ident, user->host, mq->reason); + user->WriteNumeric(432, "%s %s :Invalid nickname: %s",user->nick, parameters[0].c_str(), mq->reason); return CMD_FAILURE; } } @@ -89,7 +89,7 @@ CmdResult CommandNick::Handle (const char* const* parameters, int, User *user) * because the nick is already (rightfully) in use. -- w00t */ User* InUse = ServerInstance->FindNickOnly(parameters[0]); - if (InUse && (InUse != user) && ((ServerInstance->IsNick(parameters[0]) || allowinvalid))) + if (InUse && (InUse != user) && ((ServerInstance->IsNick(parameters[0].c_str()) || allowinvalid))) { if (InUse->registered != REG_ALL) { @@ -104,33 +104,33 @@ CmdResult CommandNick::Handle (const char* const* parameters, int, User *user) else { /* No camping, tell the incoming user to stop trying to change nick ;p */ - user->WriteNumeric(433, "%s %s :Nickname is already in use.", user->registered >= REG_NICK ? user->nick : "*", parameters[0]); + user->WriteNumeric(433, "%s %s :Nickname is already in use.", user->registered >= REG_NICK ? user->nick : "*", parameters[0].c_str()); return CMD_FAILURE; } } } - if (((!ServerInstance->IsNick(parameters[0]))) && (IS_LOCAL(user))) + if (((!ServerInstance->IsNick(parameters[0].c_str()))) && (IS_LOCAL(user))) { if (!allowinvalid) { - user->WriteNumeric(432, "%s %s :Erroneous Nickname",user->nick,parameters[0]); + user->WriteNumeric(432, "%s %s :Erroneous Nickname", user->nick,parameters[0].c_str()); return CMD_FAILURE; } } int MOD_RESULT = 0; - FOREACH_RESULT(I_OnUserPreNick,OnUserPreNick(user,parameters[0])); + FOREACH_RESULT(I_OnUserPreNick,OnUserPreNick(user, parameters[0])); if (MOD_RESULT) // if a module returns true, the nick change is silently forbidden. return CMD_FAILURE; if (user->registered == REG_ALL) - user->WriteCommon("NICK %s",parameters[0]); + user->WriteCommon("NICK %s", parameters[0].c_str()); strlcpy(oldnick, user->nick, NICKMAX - 1); /* change the nick of the user in the users_hash */ - user = user->UpdateNickHash(parameters[0]); + user = user->UpdateNickHash(parameters[0].c_str()); /* actually change the nick within the record */ if (!user) @@ -138,7 +138,7 @@ CmdResult CommandNick::Handle (const char* const* parameters, int, User *user) if (!*user->nick) return CMD_FAILURE; - strlcpy(user->nick, parameters[0], NICKMAX - 1); + strlcpy(user->nick, parameters[0].c_str(), NICKMAX - 1); user->InvalidateCache(); diff --git a/src/commands/cmd_notice.cpp b/src/commands/cmd_notice.cpp index 1a47b56fb..d6e11a803 100644 --- a/src/commands/cmd_notice.cpp +++ b/src/commands/cmd_notice.cpp @@ -20,7 +20,7 @@ extern "C" DllExport Command* init_command(InspIRCd* Instance) return new CommandNotice(Instance); } -CmdResult CommandNotice::Handle (const char* const* parameters, int pcnt, User *user) +CmdResult CommandNotice::Handle (const std::vector<std::string>& parameters, User *user) { User *dest; Channel *chan; @@ -29,28 +29,29 @@ CmdResult CommandNotice::Handle (const char* const* parameters, int pcnt, User * user->idle_lastmsg = ServerInstance->Time(); - if (ServerInstance->Parser->LoopCall(user, this, parameters, pcnt, 0)) + if (ServerInstance->Parser->LoopCall(user, this, parameters, parameters.size(), 0)) return CMD_SUCCESS; if ((parameters[0][0] == '$') && (IS_OPER(user) || ServerInstance->ULine(user->server))) { int MOD_RESULT = 0; std::string temp = parameters[1]; - FOREACH_RESULT(I_OnUserPreNotice,OnUserPreNotice(user,(void*)parameters[0],TYPE_SERVER,temp,0,exempt_list)); + FOREACH_RESULT(I_OnUserPreNotice,OnUserPreNotice(user, (void*)parameters[0].c_str(), TYPE_SERVER, temp, 0, exempt_list)); if (MOD_RESULT) return CMD_FAILURE; const char* text = temp.c_str(); - const char* servermask = parameters[0] + 1; + const char* servermask = (parameters[0].c_str()) + 1; - FOREACH_MOD(I_OnText,OnText(user,(void*)parameters[0],TYPE_SERVER,text,0,exempt_list)); + FOREACH_MOD(I_OnText,OnText(user, (void*)parameters[0].c_str(), TYPE_SERVER, text, 0, exempt_list)); if (match(ServerInstance->Config->ServerName,servermask)) { user->SendAll("NOTICE", "%s", text); } - FOREACH_MOD(I_OnUserNotice,OnUserNotice(user,(void*)parameters[0],TYPE_SERVER,text,0,exempt_list)); + FOREACH_MOD(I_OnUserNotice,OnUserNotice(user, (void*)parameters[0].c_str(), TYPE_SERVER, text, 0, exempt_list)); return CMD_SUCCESS; } char status = 0; - const char* target = parameters[0]; + const char* target = parameters[0].c_str(); + if (ServerInstance->Modes->FindPrefix(*target)) { status = *target; @@ -121,7 +122,7 @@ CmdResult CommandNotice::Handle (const char* const* parameters, int pcnt, User * return CMD_SUCCESS; } - const char* destnick = parameters[0]; + const char* destnick = parameters[0].c_str(); if (IS_LOCAL(user)) { @@ -135,7 +136,7 @@ CmdResult CommandNotice::Handle (const char* const* parameters, int pcnt, User * if (dest && strcasecmp(dest->server, targetserver + 1)) { /* Incorrect server for user */ - user->WriteNumeric(401, "%s %s :No such nick/channel",user->nick, parameters[0]); + user->WriteNumeric(401, "%s %s :No such nick/channel",user->nick, parameters[0].c_str()); return CMD_FAILURE; } } @@ -147,7 +148,7 @@ CmdResult CommandNotice::Handle (const char* const* parameters, int pcnt, User * if (dest) { - if (!*parameters[1]) + if (parameters[1].empty()) { user->WriteNumeric(412, "%s :No text to send", user->nick); return CMD_FAILURE; @@ -174,7 +175,7 @@ CmdResult CommandNotice::Handle (const char* const* parameters, int pcnt, User * else { /* no such nick/channel */ - user->WriteNumeric(401, "%s %s :No such nick/channel",user->nick, parameters[0]); + user->WriteNumeric(401, "%s %s :No such nick/channel",user->nick, parameters[0].c_str()); return CMD_FAILURE; } diff --git a/src/commands/cmd_oper.cpp b/src/commands/cmd_oper.cpp index 0b17c4dca..a397f5b0d 100644 --- a/src/commands/cmd_oper.cpp +++ b/src/commands/cmd_oper.cpp @@ -35,7 +35,7 @@ extern "C" DllExport Command* init_command(InspIRCd* Instance) return new CommandOper(Instance); } -CmdResult CommandOper::Handle (const char* const* parameters, int, User *user) +CmdResult CommandOper::Handle (const std::vector<std::string>& parameters, User *user) { char LoginName[MAXBUF]; char Password[MAXBUF]; @@ -65,8 +65,8 @@ CmdResult CommandOper::Handle (const char* const* parameters, int, User *user) ServerInstance->Config->ConfValue(ServerInstance->Config->config_data, "oper", "host", i, HostName, MAXBUF); ServerInstance->Config->ConfValue(ServerInstance->Config->config_data, "oper", "hash", i, HashType, MAXBUF); - match_login = !strcmp(LoginName,parameters[0]); - match_pass = !ServerInstance->PassCompare(user, Password,parameters[1], HashType); + match_login = (LoginName == parameters[0]); + match_pass = !ServerInstance->PassCompare(user, Password,parameters[1].c_str(), HashType); match_hosts = OneOfMatches(TheHost,TheIP,HostName); if (match_login && match_pass && match_hosts) @@ -107,7 +107,7 @@ CmdResult CommandOper::Handle (const char* const* parameters, int, User *user) if (found) { /* correct oper credentials */ - ServerInstance->SNO->WriteToSnoMask('o',"%s (%s@%s) is now an IRC operator of type %s (using oper '%s')",user->nick,user->ident,user->host,irc::Spacify(OperType),parameters[0]); + ServerInstance->SNO->WriteToSnoMask('o',"%s (%s@%s) is now an IRC operator of type %s (using oper '%s')",user->nick,user->ident,user->host,irc::Spacify(OperType),parameters[0].c_str()); user->WriteNumeric(381, "%s :You are now %s %s",user->nick, strchr("aeiouAEIOU", *OperType) ? "an" : "a", irc::Spacify(OperType)); if (!user->IsModeSet('o')) user->Oper(OperType, LoginName); @@ -133,21 +133,21 @@ CmdResult CommandOper::Handle (const char* const* parameters, int, User *user) user->WriteNumeric(491, "%s :Invalid oper credentials",user->nick); user->IncreasePenalty(10); - snprintf(broadcast, MAXBUF, "WARNING! Failed oper attempt by %s!%s@%s using login '%s': The following fields do not match: %s",user->nick,user->ident,user->host, parameters[0], fields.c_str()); + snprintf(broadcast, MAXBUF, "WARNING! Failed oper attempt by %s!%s@%s using login '%s': The following fields do not match: %s",user->nick,user->ident,user->host, parameters[0].c_str(), fields.c_str()); ServerInstance->SNO->WriteToSnoMask('o',std::string(broadcast)); - ServerInstance->Logs->Log("OPER",DEFAULT,"OPER: Failed oper attempt by %s!%s@%s using login '%s': The following fields did not match: %s",user->nick,user->ident,user->host,parameters[0],fields.c_str()); + ServerInstance->Logs->Log("OPER",DEFAULT,"OPER: Failed oper attempt by %s!%s@%s using login '%s': The following fields did not match: %s",user->nick,user->ident,user->host,parameters[0].c_str(),fields.c_str()); return CMD_FAILURE; } else { user->WriteNumeric(491, "%s :Your oper block does not have a valid opertype associated with it",user->nick); - snprintf(broadcast, MAXBUF, "CONFIGURATION ERROR! Oper block '%s': missing OperType %s",parameters[0],OperType); + snprintf(broadcast, MAXBUF, "CONFIGURATION ERROR! Oper block '%s': missing OperType %s",parameters[0].c_str(),OperType); ServerInstance->SNO->WriteToSnoMask('o', std::string(broadcast)); - ServerInstance->Logs->Log("OPER",DEFAULT,"OPER: Failed oper attempt by %s!%s@%s using login '%s': credentials valid, but oper type nonexistent.",user->nick,user->ident,user->host,parameters[0]); + ServerInstance->Logs->Log("OPER",DEFAULT,"OPER: Failed oper attempt by %s!%s@%s using login '%s': credentials valid, but oper type nonexistent.",user->nick,user->ident,user->host,parameters[0].c_str()); return CMD_FAILURE; } } diff --git a/src/commands/cmd_part.cpp b/src/commands/cmd_part.cpp index 360287c45..07b45367f 100644 --- a/src/commands/cmd_part.cpp +++ b/src/commands/cmd_part.cpp @@ -19,7 +19,7 @@ extern "C" DllExport Command* init_command(InspIRCd* Instance) return new CommandPart(Instance); } -CmdResult CommandPart::Handle (const char* const* parameters, int pcnt, User *user) +CmdResult CommandPart::Handle (const std::vector<std::string>& parameters, User *user) { std::string reason; @@ -29,7 +29,7 @@ CmdResult CommandPart::Handle (const char* const* parameters, int pcnt, User *us reason = ServerInstance->Config->FixedPart; else { - if (pcnt > 1) + if (parameters.size() > 1) reason = ServerInstance->Config->PrefixPart + std::string(parameters[1]) + ServerInstance->Config->SuffixPart; else reason = ""; @@ -37,10 +37,10 @@ CmdResult CommandPart::Handle (const char* const* parameters, int pcnt, User *us } else { - reason = pcnt > 1 ? parameters[1] : ""; + reason = parameters.size() > 1 ? parameters[1] : ""; } - if (ServerInstance->Parser->LoopCall(user, this, parameters, pcnt, 0)) + if (ServerInstance->Parser->LoopCall(user, this, parameters, 0)) return CMD_SUCCESS; Channel* c = ServerInstance->FindChan(parameters[0]); @@ -54,7 +54,7 @@ CmdResult CommandPart::Handle (const char* const* parameters, int pcnt, User *us } else { - user->WriteServ( "401 %s %s :No such channel", user->nick, parameters[0]); + user->WriteServ( "401 %s %s :No such channel", user->nick, parameters[0].c_str()); return CMD_FAILURE; } diff --git a/src/commands/cmd_pass.cpp b/src/commands/cmd_pass.cpp index 2333661e7..2e1a702a2 100644 --- a/src/commands/cmd_pass.cpp +++ b/src/commands/cmd_pass.cpp @@ -19,7 +19,7 @@ extern "C" DllExport Command* init_command(InspIRCd* Instance) return new CommandPass(Instance); } -CmdResult CommandPass::Handle (const char* const* parameters, int, User *user) +CmdResult CommandPass::Handle (const std::vector<std::string>& parameters, User *user) { // Check to make sure they havnt registered -- Fix by FCS if (user->registered == REG_ALL) @@ -31,11 +31,9 @@ CmdResult CommandPass::Handle (const char* const* parameters, int, User *user) if (!a) return CMD_FAILURE; - strlcpy(user->password,parameters[0],63); - if (!ServerInstance->PassCompare(user, a->GetPass().c_str(), parameters[0], a->GetHash().c_str())) - { + strlcpy(user->password, parameters[0].c_str(), 63); + if (!ServerInstance->PassCompare(user, a->GetPass().c_str(), parameters[0].c_str(), a->GetHash().c_str())) user->haspassed = true; - } return CMD_SUCCESS; } diff --git a/src/commands/cmd_ping.cpp b/src/commands/cmd_ping.cpp index 3aeafe15e..38e5d49ab 100644 --- a/src/commands/cmd_ping.cpp +++ b/src/commands/cmd_ping.cpp @@ -19,8 +19,8 @@ extern "C" DllExport Command* init_command(InspIRCd* Instance) return new CommandPing(Instance); } -CmdResult CommandPing::Handle (const char* const* parameters, int, User *user) +CmdResult CommandPing::Handle (const std::vector<std::string>& parameters, User *user) { - user->WriteServ("PONG %s :%s",ServerInstance->Config->ServerName,parameters[0]); + user->WriteServ("PONG %s :%s", ServerInstance->Config->ServerName, parameters[0].c_str()); return CMD_SUCCESS; } diff --git a/src/commands/cmd_pong.cpp b/src/commands/cmd_pong.cpp index 51c951eba..7e7cba3b9 100644 --- a/src/commands/cmd_pong.cpp +++ b/src/commands/cmd_pong.cpp @@ -19,7 +19,7 @@ extern "C" DllExport Command* init_command(InspIRCd* Instance) return new CommandPong(Instance); } -CmdResult CommandPong::Handle (const char* const*, int, User *user) +CmdResult CommandPong::Handle (const std::vector<std::string>&, User *user) { // set the user as alive so they survive to next ping user->lastping = 1; diff --git a/src/commands/cmd_privmsg.cpp b/src/commands/cmd_privmsg.cpp index 9ce089dc0..a3d64f084 100644 --- a/src/commands/cmd_privmsg.cpp +++ b/src/commands/cmd_privmsg.cpp @@ -20,7 +20,7 @@ extern "C" DllExport Command* init_command(InspIRCd* Instance) return new CommandPrivmsg(Instance); } -CmdResult CommandPrivmsg::Handle (const char* const* parameters, int pcnt, User *user) +CmdResult CommandPrivmsg::Handle (const std::vector<std::string>& parameters, User *user) { User *dest; Channel *chan; @@ -28,28 +28,31 @@ CmdResult CommandPrivmsg::Handle (const char* const* parameters, int pcnt, User user->idle_lastmsg = ServerInstance->Time(); - if (ServerInstance->Parser->LoopCall(user, this, parameters, pcnt, 0)) + if (ServerInstance->Parser->LoopCall(user, this, parameters, parameters.size(), 0)) return CMD_SUCCESS; if ((parameters[0][0] == '$') && (IS_OPER(user) || ServerInstance->ULine(user->server))) { int MOD_RESULT = 0; std::string temp = parameters[1]; - FOREACH_RESULT(I_OnUserPreMessage,OnUserPreMessage(user,(void*)parameters[0],TYPE_SERVER,temp,0,except_list)); + FOREACH_RESULT(I_OnUserPreMessage,OnUserPreMessage(user, (void*)parameters[0].c_str(), TYPE_SERVER, temp, 0, except_list)); if (MOD_RESULT) return CMD_FAILURE; + const char* text = temp.c_str(); - const char* servermask = parameters[0] + 1; - FOREACH_MOD(I_OnText,OnText(user,(void*)parameters[0],TYPE_SERVER,text,0,except_list)); + const char* servermask = (parameters[0].c_str()) + 1; + + FOREACH_MOD(I_OnText,OnText(user, (void*)parameters[0].c_str(), TYPE_SERVER, text, 0, except_list)); if (match(ServerInstance->Config->ServerName,servermask)) { user->SendAll("PRIVMSG", "%s", text); } - FOREACH_MOD(I_OnUserMessage,OnUserMessage(user,(void*)parameters[0],TYPE_SERVER,text,0,except_list)); + FOREACH_MOD(I_OnUserMessage,OnUserMessage(user, (void*)parameters[0].c_str(), TYPE_SERVER, text, 0, except_list)); return CMD_SUCCESS; } char status = 0; - const char* target = parameters[0]; + const char* target = parameters[0].c_str(); + if (ServerInstance->Modes->FindPrefix(*target)) { status = *target; @@ -121,7 +124,7 @@ CmdResult CommandPrivmsg::Handle (const char* const* parameters, int pcnt, User return CMD_SUCCESS; } - const char* destnick = parameters[0]; + const char* destnick = parameters[0].c_str(); if (IS_LOCAL(user)) { @@ -135,7 +138,7 @@ CmdResult CommandPrivmsg::Handle (const char* const* parameters, int pcnt, User if (dest && strcasecmp(dest->server, targetserver + 1)) { /* Incorrect server for user */ - user->WriteNumeric(401, "%s %s :No such nick/channel",user->nick, parameters[0]); + user->WriteNumeric(401, "%s %s :No such nick/channel",user->nick, parameters[0].c_str()); return CMD_FAILURE; } } @@ -147,7 +150,7 @@ CmdResult CommandPrivmsg::Handle (const char* const* parameters, int pcnt, User if (dest) { - if (!*parameters[1]) + if (parameters[1].empty()) { user->WriteNumeric(412, "%s :No text to send", user->nick); return CMD_FAILURE; @@ -162,13 +165,13 @@ CmdResult CommandPrivmsg::Handle (const char* const* parameters, int pcnt, User int MOD_RESULT = 0; std::string temp = parameters[1]; - FOREACH_RESULT(I_OnUserPreMessage,OnUserPreMessage(user,dest,TYPE_USER,temp,0,except_list)); + FOREACH_RESULT(I_OnUserPreMessage,OnUserPreMessage(user, dest, TYPE_USER, temp, 0, except_list)); if (MOD_RESULT) { return CMD_FAILURE; } const char* text = temp.c_str(); - FOREACH_MOD(I_OnText,OnText(user,dest,TYPE_USER,text,0,except_list)); + FOREACH_MOD(I_OnText,OnText(user, dest, TYPE_USER, text, 0, except_list)); if (IS_LOCAL(dest)) { @@ -176,12 +179,12 @@ CmdResult CommandPrivmsg::Handle (const char* const* parameters, int pcnt, User user->WriteTo(dest, "PRIVMSG %s :%s", dest->nick, text); } - FOREACH_MOD(I_OnUserMessage,OnUserMessage(user,dest,TYPE_USER,text,0,except_list)); + FOREACH_MOD(I_OnUserMessage,OnUserMessage(user, dest, TYPE_USER, text, 0, except_list)); } else { /* no such nick/channel */ - user->WriteNumeric(401, "%s %s :No such nick/channel",user->nick, parameters[0]); + user->WriteNumeric(401, "%s %s :No such nick/channel",user->nick, parameters[0].c_str()); return CMD_FAILURE; } return CMD_SUCCESS; diff --git a/src/commands/cmd_qline.cpp b/src/commands/cmd_qline.cpp index 97d26ba9f..f3471a6b3 100644 --- a/src/commands/cmd_qline.cpp +++ b/src/commands/cmd_qline.cpp @@ -22,31 +22,31 @@ extern "C" DllExport Command* init_command(InspIRCd* Instance) return new CommandQline(Instance); } -CmdResult CommandQline::Handle (const char* const* parameters, int pcnt, User *user) +CmdResult CommandQline::Handle (const std::vector<std::string>& parameters, User *user) { - if (pcnt >= 3) + if (parameters.size() >= 3) { if (ServerInstance->NickMatchesEveryone(parameters[0],user)) return CMD_FAILURE; - if (strchr(parameters[0],'@') || strchr(parameters[0],'!') || strchr(parameters[0],'.')) + if (parameters[0].find('@') != std::string::npos || parameters[0].find('!') != std::string::npos || parameters[0].find('.') != std::string::npos) { user->WriteServ("NOTICE %s :*** A Q-Line only bans a nick pattern, not a nick!user@host pattern.",user->nick); return CMD_FAILURE; } - long duration = ServerInstance->Duration(parameters[1]); - QLine* ql = new QLine(ServerInstance, ServerInstance->Time(), duration, user->nick, parameters[2], parameters[0]); + long duration = ServerInstance->Duration(parameters[1].c_str()); + QLine* ql = new QLine(ServerInstance, ServerInstance->Time(), duration, user->nick, parameters[2].c_str(), parameters[0].c_str()); if (ServerInstance->XLines->AddLine(ql,user)) { if (!duration) { - ServerInstance->SNO->WriteToSnoMask('x',"%s added permanent Q-line for %s.",user->nick,parameters[0]); + ServerInstance->SNO->WriteToSnoMask('x',"%s added permanent Q-line for %s.",user->nick,parameters[0].c_str()); } else { time_t c_requires_crap = duration + ServerInstance->Time(); - ServerInstance->SNO->WriteToSnoMask('x',"%s added timed Q-line for %s, expires on %s",user->nick,parameters[0], + ServerInstance->SNO->WriteToSnoMask('x',"%s added timed Q-line for %s, expires on %s",user->nick,parameters[0].c_str(), ServerInstance->TimeString(c_requires_crap).c_str()); } ServerInstance->XLines->ApplyLines(); @@ -54,18 +54,18 @@ CmdResult CommandQline::Handle (const char* const* parameters, int pcnt, User *u else { delete ql; - user->WriteServ("NOTICE %s :*** Q-Line for %s already exists",user->nick,parameters[0]); + user->WriteServ("NOTICE %s :*** Q-Line for %s already exists",user->nick,parameters[0].c_str()); } } else { - if (ServerInstance->XLines->DelLine(parameters[0],"Q",user)) + if (ServerInstance->XLines->DelLine(parameters[0].c_str(), "Q", user)) { - ServerInstance->SNO->WriteToSnoMask('x',"%s Removed Q-line on %s.",user->nick,parameters[0]); + ServerInstance->SNO->WriteToSnoMask('x',"%s Removed Q-line on %s.",user->nick,parameters[0].c_str()); } else { - user->WriteServ("NOTICE %s :*** Q-Line %s not found in list, try /stats q.",user->nick,parameters[0]); + user->WriteServ("NOTICE %s :*** Q-Line %s not found in list, try /stats q.",user->nick,parameters[0].c_str()); return CMD_FAILURE; } } diff --git a/src/commands/cmd_quit.cpp b/src/commands/cmd_quit.cpp index f7cbd00bf..9de1faa04 100644 --- a/src/commands/cmd_quit.cpp +++ b/src/commands/cmd_quit.cpp @@ -21,7 +21,7 @@ extern "C" DllExport Command* init_command(InspIRCd* Instance) return new CommandQuit(Instance); } -CmdResult CommandQuit::Handle (const char* const* parameters, int pcnt, User *user) +CmdResult CommandQuit::Handle (const std::vector<std::string>& parameters, User *user) { std::string quitmsg; @@ -31,12 +31,12 @@ CmdResult CommandQuit::Handle (const char* const* parameters, int pcnt, User *us if (*ServerInstance->Config->FixedQuit) quitmsg = ServerInstance->Config->FixedQuit; else - quitmsg = pcnt ? + quitmsg = parameters.size() ? ServerInstance->Config->PrefixQuit + std::string(parameters[0]) + ServerInstance->Config->SuffixQuit : "Client exited"; } else - quitmsg = pcnt ? parameters[0] : "Client exited"; + quitmsg = parameters.size() ? parameters[0] : "Client exited"; ServerInstance->Users->QuitUser(user, quitmsg); diff --git a/src/commands/cmd_rehash.cpp b/src/commands/cmd_rehash.cpp index 0f60f4a6d..ce34239a5 100644 --- a/src/commands/cmd_rehash.cpp +++ b/src/commands/cmd_rehash.cpp @@ -22,23 +22,20 @@ extern "C" DllExport Command* init_command(InspIRCd* Instance) return new CommandRehash(Instance); } -CmdResult CommandRehash::Handle (const char* const* parameters, int pcnt, User *user) +CmdResult CommandRehash::Handle (const std::vector<std::string>& parameters, User *user) { std::string old_disabled = ServerInstance->Config->DisabledCommands; - ServerInstance->Logs->Log("fuckingrehash", DEBUG, "parc %d p0 %s", pcnt, parameters[0]); - if (pcnt && parameters[0][0] != '-') + if (parameters.size() && parameters[0][0] != '-') { if (!ServerInstance->MatchText(ServerInstance->Config->ServerName, parameters[0])) { - ServerInstance->Logs->Log("fuckingrehash", DEBUG, "rehash for a server, and not for us"); FOREACH_MOD(I_OnRehash,OnRehash(user, parameters[0])); return CMD_SUCCESS; // rehash for a server, and not for us } } - else if (pcnt) + else if (parameters.size()) { - ServerInstance->Logs->Log("fuckingrehash", DEBUG, "rehash for a subsystem, ignoring"); FOREACH_MOD(I_OnRehash,OnRehash(user, parameters[0])); return CMD_SUCCESS; } @@ -65,7 +62,7 @@ CmdResult CommandRehash::Handle (const char* const* parameters, int pcnt, User * if (!ServerInstance->ConfigThread) { ServerInstance->Config->RehashUser = user; - ServerInstance->Config->RehashParameter = pcnt ? parameters[0] : ""; + ServerInstance->Config->RehashParameter = parameters.size() ? parameters[0] : ""; ServerInstance->ConfigThread = new ConfigReaderThread(ServerInstance, false, user); ServerInstance->Threads->Create(ServerInstance->ConfigThread); diff --git a/src/commands/cmd_reloadmodule.cpp b/src/commands/cmd_reloadmodule.cpp index fcdc4cb1e..05162e631 100644 --- a/src/commands/cmd_reloadmodule.cpp +++ b/src/commands/cmd_reloadmodule.cpp @@ -19,20 +19,20 @@ extern "C" DllExport Command* init_command(InspIRCd* Instance) return new CommandReloadmodule(Instance); } -CmdResult CommandReloadmodule::Handle (const char* const* parameters, int, User *user) +CmdResult CommandReloadmodule::Handle (const std::vector<std::string>& parameters, User *user) { - if (ServerInstance->Modules->Unload(parameters[0])) + if (ServerInstance->Modules->Unload(parameters[0].c_str())) { - ServerInstance->SNO->WriteToSnoMask('A', "RELOAD MODULE: %s unloaded %s",user->nick, parameters[0]); - if (ServerInstance->Modules->Load(parameters[0])) + ServerInstance->SNO->WriteToSnoMask('A', "RELOAD MODULE: %s unloaded %s",user->nick, parameters[0].c_str()); + if (ServerInstance->Modules->Load(parameters[0].c_str())) { - ServerInstance->SNO->WriteToSnoMask('A', "RELOAD MODULE: %s reloaded %s",user->nick, parameters[0]); - user->WriteNumeric(975, "%s %s :Module successfully reloaded.",user->nick, parameters[0]); + ServerInstance->SNO->WriteToSnoMask('A', "RELOAD MODULE: %s reloaded %s",user->nick, parameters[0].c_str()); + user->WriteNumeric(975, "%s %s :Module successfully reloaded.",user->nick, parameters[0].c_str()); return CMD_SUCCESS; } } - ServerInstance->SNO->WriteToSnoMask('A', "RELOAD MODULE: %s unsuccessfully reloaded %s",user->nick, parameters[0]); - user->WriteNumeric(975, "%s %s :%s",user->nick, parameters[0], ServerInstance->Modules->LastError().c_str()); + ServerInstance->SNO->WriteToSnoMask('A', "RELOAD MODULE: %s unsuccessfully reloaded %s",user->nick, parameters[0].c_str()); + user->WriteNumeric(975, "%s %s :%s",user->nick, parameters[0].c_str(), ServerInstance->Modules->LastError().c_str()); return CMD_FAILURE; } diff --git a/src/commands/cmd_restart.cpp b/src/commands/cmd_restart.cpp index cc634d860..334fb621f 100644 --- a/src/commands/cmd_restart.cpp +++ b/src/commands/cmd_restart.cpp @@ -19,10 +19,10 @@ extern "C" DllExport Command* init_command(InspIRCd* Instance) return new CommandRestart(Instance); } -CmdResult CommandRestart::Handle (const char* const* parameters, int, User *user) +CmdResult CommandRestart::Handle (const std::vector<std::string>& parameters, User *user) { ServerInstance->Logs->Log("COMMAND",DEFAULT,"Restart: %s",user->nick); - if (!ServerInstance->PassCompare(user, ServerInstance->Config->restartpass, parameters[0], ServerInstance->Config->powerhash)) + if (!ServerInstance->PassCompare(user, ServerInstance->Config->restartpass, parameters[0].c_str(), ServerInstance->Config->powerhash)) { ServerInstance->SNO->WriteToSnoMask('A', "RESTART command from %s!%s@%s, restarting server.",user->nick,user->ident,user->host); diff --git a/src/commands/cmd_rules.cpp b/src/commands/cmd_rules.cpp index 685d04389..fd03e1d4c 100644 --- a/src/commands/cmd_rules.cpp +++ b/src/commands/cmd_rules.cpp @@ -19,7 +19,7 @@ extern "C" DllExport Command* init_command(InspIRCd* Instance) return new CommandRules(Instance); } -CmdResult CommandRules::Handle (const char* const* parameters, int pcnt, User *user) +CmdResult CommandRules::Handle (const std::vector<std::string>& parameters, User *user) { user->ShowRULES(); return CMD_SUCCESS; diff --git a/src/commands/cmd_server.cpp b/src/commands/cmd_server.cpp index f82263cca..5385428b8 100644 --- a/src/commands/cmd_server.cpp +++ b/src/commands/cmd_server.cpp @@ -21,7 +21,7 @@ extern "C" DllExport Command* init_command(InspIRCd* Instance) return new CommandServer(Instance); } -CmdResult CommandServer::Handle (const char* const*, int, User *user) +CmdResult CommandServer::Handle (const std::vector<std::string>&, User *user) { user->WriteNumeric(666, "%s :You cannot identify as a server, you are a USER. IRC Operators informed.",user->nick); ServerInstance->SNO->WriteToSnoMask('A', "WARNING: %s attempted to issue a SERVER command and is registered as a user!", user->nick); diff --git a/src/commands/cmd_squit.cpp b/src/commands/cmd_squit.cpp index e98790380..61d0a601d 100644 --- a/src/commands/cmd_squit.cpp +++ b/src/commands/cmd_squit.cpp @@ -24,7 +24,7 @@ extern "C" DllExport Command* init_command(InspIRCd* Instance) return new CommandSquit(Instance); } -CmdResult CommandSquit::Handle (const char* const*, int, User *user) +CmdResult CommandSquit::Handle (const std::vector<std::string>&, User *user) { user->WriteServ( "NOTICE %s :Look into loading a linking module (like m_spanningtree) if you want this to do anything useful.", user->nick); return CMD_FAILURE; diff --git a/src/commands/cmd_stats.cpp b/src/commands/cmd_stats.cpp index fb1aaf20b..174094afa 100644 --- a/src/commands/cmd_stats.cpp +++ b/src/commands/cmd_stats.cpp @@ -31,12 +31,12 @@ extern "C" DllExport Command* init_command(InspIRCd* Instance) return new CommandStats(Instance); } -CmdResult CommandStats::Handle (const char* const* parameters, int /* pcnt */, User *user) +CmdResult CommandStats::Handle (const std::vector<std::string>& parameters, User *user) { if (IS_LOCAL(user)) { string_list values; - DoStats(this->ServerInstance, *parameters[0], user, values); + DoStats(this->ServerInstance, parameters[0][0], user, values); for (size_t i = 0; i < values.size(); i++) user->Write(":%s", values[i].c_str()); } diff --git a/src/commands/cmd_time.cpp b/src/commands/cmd_time.cpp index c84b02122..d8c3561b0 100644 --- a/src/commands/cmd_time.cpp +++ b/src/commands/cmd_time.cpp @@ -21,7 +21,7 @@ extern "C" DllExport Command* init_command(InspIRCd* Instance) return new CommandTime(Instance); } -CmdResult CommandTime::Handle (const char* const*, int, User *user) +CmdResult CommandTime::Handle (const std::vector<std::string>&, User *user) { struct tm* timeinfo; time_t local = ServerInstance->Time(); diff --git a/src/commands/cmd_topic.cpp b/src/commands/cmd_topic.cpp index 35d83c140..9f9d56b14 100644 --- a/src/commands/cmd_topic.cpp +++ b/src/commands/cmd_topic.cpp @@ -20,11 +20,11 @@ extern "C" DllExport Command* init_command(InspIRCd* Instance) return new CommandTopic(Instance); } -CmdResult CommandTopic::Handle (const char* const* parameters, int pcnt, User *user) +CmdResult CommandTopic::Handle (const std::vector<std::string>& parameters, User *user) { Channel* Ptr; - if (pcnt == 1) + if (parameters.size() == 1) { Ptr = ServerInstance->FindChan(parameters[0]); if (Ptr) @@ -46,12 +46,12 @@ CmdResult CommandTopic::Handle (const char* const* parameters, int pcnt, User *u } else { - user->WriteNumeric(401, "%s %s :No such nick/channel",user->nick, parameters[0]); + user->WriteNumeric(401, "%s %s :No such nick/channel",user->nick, parameters[0].c_str()); return CMD_FAILURE; } return CMD_SUCCESS; } - else if (pcnt>1) + else if (parameters.size()>1) { Ptr = ServerInstance->FindChan(parameters[0]); if (Ptr) @@ -79,17 +79,17 @@ CmdResult CommandTopic::Handle (const char* const* parameters, int pcnt, User *u */ int MOD_RESULT = 0; - strlcpy(topic,parameters[1],MAXTOPIC-1); + strlcpy(topic, parameters[1].c_str(), MAXTOPIC-1); FOREACH_RESULT(I_OnLocalTopicChange,OnLocalTopicChange(user,Ptr,topic)); if (MOD_RESULT) return CMD_FAILURE; - strlcpy(Ptr->topic,topic,MAXTOPIC-1); + strlcpy(Ptr->topic, topic, MAXTOPIC-1); } else { /* Sneaky shortcut, one string copy for a remote topic */ - strlcpy(Ptr->topic, parameters[1], MAXTOPIC-1); + strlcpy(Ptr->topic, parameters[1].c_str(), MAXTOPIC-1); } if (ServerInstance->Config->FullHostInTopic) @@ -106,7 +106,7 @@ CmdResult CommandTopic::Handle (const char* const* parameters, int pcnt, User *u } else { - user->WriteNumeric(401, "%s %s :No such nick/channel",user->nick, parameters[0]); + user->WriteNumeric(401, "%s %s :No such nick/channel",user->nick, parameters[0].c_str()); return CMD_FAILURE; } } diff --git a/src/commands/cmd_trace.cpp b/src/commands/cmd_trace.cpp index 972080b70..9aa4eff53 100644 --- a/src/commands/cmd_trace.cpp +++ b/src/commands/cmd_trace.cpp @@ -21,7 +21,7 @@ extern "C" DllExport Command* init_command(InspIRCd* Instance) /** XXX: This is crap. someone fix this when you have time, to be more useful. */ -CmdResult CommandTrace::Handle (const char* const*, int, User *user) +CmdResult CommandTrace::Handle (const std::vector<std::string>&, User *user) { /*for (user_hash::iterator i = ServerInstance->clientlist->begin(); i != ServerInstance->clientlist->end(); i++) { diff --git a/src/commands/cmd_unloadmodule.cpp b/src/commands/cmd_unloadmodule.cpp index f2e798f54..68ad591ce 100644 --- a/src/commands/cmd_unloadmodule.cpp +++ b/src/commands/cmd_unloadmodule.cpp @@ -21,16 +21,16 @@ extern "C" DllExport Command* init_command(InspIRCd* Instance) return new CommandUnloadmodule(Instance); } -CmdResult CommandUnloadmodule::Handle (const char* const* parameters, int, User *user) +CmdResult CommandUnloadmodule::Handle (const std::vector<std::string>& parameters, User *user) { - if (ServerInstance->Modules->Unload(parameters[0])) + if (ServerInstance->Modules->Unload(parameters[0].c_str())) { - ServerInstance->SNO->WriteToSnoMask('A', "MODULE UNLOADED: %s unloaded %s", user->nick, parameters[0]); - user->WriteNumeric(973, "%s %s :Module successfully unloaded.",user->nick, parameters[0]); + ServerInstance->SNO->WriteToSnoMask('A', "MODULE UNLOADED: %s unloaded %s", user->nick, parameters[0].c_str()); + user->WriteNumeric(973, "%s %s :Module successfully unloaded.",user->nick, parameters[0].c_str()); } else { - user->WriteNumeric(972, "%s %s :%s",user->nick, parameters[0], ServerInstance->Modules->LastError().c_str()); + user->WriteNumeric(972, "%s %s :%s",user->nick, parameters[0].c_str(), ServerInstance->Modules->LastError().c_str()); return CMD_FAILURE; } diff --git a/src/commands/cmd_user.cpp b/src/commands/cmd_user.cpp index 3ee96b2f9..46d42771b 100644 --- a/src/commands/cmd_user.cpp +++ b/src/commands/cmd_user.cpp @@ -19,12 +19,12 @@ extern "C" DllExport Command* init_command(InspIRCd* Instance) return new CommandUser(Instance); } -CmdResult CommandUser::Handle (const char* const* parameters, int, User *user) +CmdResult CommandUser::Handle (const std::vector<std::string>& parameters, User *user) { /* A user may only send the USER command once */ if (!(user->registered & REG_USER)) { - if (!ServerInstance->IsIdent(parameters[0])) + if (!ServerInstance->IsIdent(parameters[0].c_str())) { /* * RFC says we must use this numeric, so we do. Let's make it a little more nub friendly though. :) @@ -40,8 +40,8 @@ CmdResult CommandUser::Handle (const char* const* parameters, int, User *user) * ~ character, and +1 for null termination, therefore we can safely use up to * IDENTMAX here. */ - strlcpy(user->ident, parameters[0], IDENTMAX); - strlcpy(user->fullname, *parameters[3] ? parameters[3] : "No info", MAXGECOS); + strlcpy(user->ident, parameters[0].c_str(), IDENTMAX); + strlcpy(user->fullname, !parameters[3].empty() ? parameters[3].c_str() : "No info", MAXGECOS); user->registered = (user->registered | REG_USER); } } diff --git a/src/commands/cmd_userhost.cpp b/src/commands/cmd_userhost.cpp index c8a33535f..9ed8b30ab 100644 --- a/src/commands/cmd_userhost.cpp +++ b/src/commands/cmd_userhost.cpp @@ -19,12 +19,12 @@ extern "C" DllExport Command* init_command(InspIRCd* Instance) return new CommandUserhost(Instance); } -CmdResult CommandUserhost::Handle (const char* const* parameters, int pcnt, User *user) +CmdResult CommandUserhost::Handle (const std::vector<std::string>& parameters, User *user) { std::string retbuf = std::string("302 ") + user->nick + " :"; - for (int i = 0; i < pcnt; i++) + for (unsigned int i = 0; i < parameters.size(); i++) { User *u = ServerInstance->FindNick(parameters[i]); diff --git a/src/commands/cmd_version.cpp b/src/commands/cmd_version.cpp index 5c87ca8e4..1951417d7 100644 --- a/src/commands/cmd_version.cpp +++ b/src/commands/cmd_version.cpp @@ -21,7 +21,7 @@ extern "C" DllExport Command* init_command(InspIRCd* Instance) return new CommandVersion(Instance); } -CmdResult CommandVersion::Handle (const char* const*, int, User *user) +CmdResult CommandVersion::Handle (const std::vector<std::string>&, User *user) { user->WriteNumeric(351, "%s :%s",user->nick,ServerInstance->GetVersionString().c_str()); ServerInstance->Config->Send005(user); diff --git a/src/commands/cmd_wallops.cpp b/src/commands/cmd_wallops.cpp index cd8995ad8..849457b23 100644 --- a/src/commands/cmd_wallops.cpp +++ b/src/commands/cmd_wallops.cpp @@ -21,7 +21,7 @@ extern "C" DllExport Command* init_command(InspIRCd* Instance) return new CommandWallops(Instance); } -CmdResult CommandWallops::Handle (const char* const* parameters, int, User *user) +CmdResult CommandWallops::Handle (const std::vector<std::string>& parameters, User *user) { user->WriteWallOps(std::string(parameters[0])); FOREACH_MOD(I_OnWallops,OnWallops(user,parameters[0])); diff --git a/src/commands/cmd_who.cpp b/src/commands/cmd_who.cpp index 2758f6b85..51590f143 100644 --- a/src/commands/cmd_who.cpp +++ b/src/commands/cmd_who.cpp @@ -165,7 +165,7 @@ void CommandWho::SendWhoLine(User* user, const std::string &initial, Channel* ch whoresults.push_back(wholine); } -CmdResult CommandWho::Handle (const char* const* parameters, int pcnt, User *user) +CmdResult CommandWho::Handle (const std::vector<std::string>& parameters, User *user) { /* * XXX - RFC says: @@ -191,13 +191,14 @@ CmdResult CommandWho::Handle (const char* const* parameters, int pcnt, User *use std::vector<std::string> whoresults; std::string initial = "352 " + std::string(user->nick) + " "; - const char* matchtext = NULL; + char matchtext[MAXBUF]; bool usingwildcards = false; /* Change '0' into '*' so the wildcard matcher can grok it */ - matchtext = parameters[0]; - if (!strcmp(matchtext,"0")) - matchtext = "*"; + if (parameters[0] == "0") + strlcpy(matchtext, "*", MAXBUF); + else + strlcpy(matchtext, parameters[0].c_str(), MAXBUF); for (const char* check = matchtext; *check; check++) { @@ -208,10 +209,10 @@ CmdResult CommandWho::Handle (const char* const* parameters, int pcnt, User *use } } - if (pcnt > 1) + if (parameters.size() > 1) { /* parse flags */ - const char *iter = parameters[1]; + const char *iter = parameters[1].c_str(); /* Fix for bug #444, WHO flags count as a wildcard */ usingwildcards = true; @@ -336,13 +337,13 @@ CmdResult CommandWho::Handle (const char* const* parameters, int pcnt, User *use { for (std::vector<std::string>::const_iterator n = whoresults.begin(); n != whoresults.end(); n++) user->WriteServ(*n); - user->WriteNumeric(315, "%s %s :End of /WHO list.",user->nick, *parameters[0] ? parameters[0] : "*"); + user->WriteNumeric(315, "%s %s :End of /WHO list.",user->nick, *parameters[0].c_str() ? parameters[0].c_str() : "*"); return CMD_SUCCESS; } else { /* BZZT! Too many results. */ - user->WriteNumeric(315, "%s %s :Too many results",user->nick, parameters[0]); + user->WriteNumeric(315, "%s %s :Too many results",user->nick, parameters[0].c_str()); return CMD_FAILURE; } } diff --git a/src/commands/cmd_whois.cpp b/src/commands/cmd_whois.cpp index a10f170f1..263377b8f 100644 --- a/src/commands/cmd_whois.cpp +++ b/src/commands/cmd_whois.cpp @@ -103,13 +103,13 @@ extern "C" DllExport Command* init_command(InspIRCd* Instance) return new CommandWhois(Instance); } -CmdResult CommandWhois::Handle (const char* const* parameters, int pcnt, User *user) +CmdResult CommandWhois::Handle (const std::vector<std::string>& parameters, User *user) { User *dest; int userindex = 0; unsigned long idle = 0, signon = 0; - if (ServerInstance->Parser->LoopCall(user, this, parameters, pcnt, 0)) + if (ServerInstance->Parser->LoopCall(user, this, parameters, parameters.size(), 0)) return CMD_SUCCESS; @@ -117,7 +117,7 @@ CmdResult CommandWhois::Handle (const char* const* parameters, int pcnt, User *u * If 2 paramters are specified (/whois nick nick), ignore the first one like spanningtree * does, and use the second one, otherwise, use the only paramter. -- djGrrr */ - if (pcnt > 1) + if (parameters.size() > 1) userindex = 1; if (IS_LOCAL(user)) @@ -130,24 +130,24 @@ CmdResult CommandWhois::Handle (const char* const* parameters, int pcnt, User *u /* * Okay. Umpteenth attempt at doing this, so let's re-comment... * For local users (/w localuser), we show idletime if hidewhois is disabled - * For local users (/w localuser localuser), we always show idletime, hence pcnt > 1 check. + * For local users (/w localuser localuser), we always show idletime, hence parameters.size() > 1 check. * For remote users (/w remoteuser), we do NOT show idletime * For remote users (/w remoteuser remoteuser), spanningtree will handle calling do_whois, so we can ignore this case. * Thanks to djGrrr for not being impatient while I have a crap day coding. :p -- w00t */ - if (IS_LOCAL(dest) && (!*ServerInstance->Config->HideWhoisServer || pcnt > 1)) + if (IS_LOCAL(dest) && (!*ServerInstance->Config->HideWhoisServer || parameters.size() > 1)) { idle = abs((dest->idle_lastmsg)-ServerInstance->Time()); signon = dest->signon; } - do_whois(this->ServerInstance, user,dest,signon,idle,parameters[userindex]); + do_whois(this->ServerInstance, user,dest,signon,idle,parameters[userindex].c_str()); } else { /* no such nick/channel */ - user->WriteNumeric(401, "%s %s :No such nick/channel",user->nick, *parameters[userindex] ? parameters[userindex] : "*"); - user->WriteNumeric(318, "%s %s :End of /WHOIS list.",user->nick, *parameters[userindex] ? parameters[userindex] : "*"); + user->WriteNumeric(401, "%s %s :No such nick/channel",user->nick, !parameters[userindex].empty() ? parameters[userindex].c_str() : "*"); + user->WriteNumeric(318, "%s %s :End of /WHOIS list.",user->nick, parameters[userindex].empty() ? parameters[userindex].c_str() : "*"); return CMD_FAILURE; } diff --git a/src/commands/cmd_whowas.cpp b/src/commands/cmd_whowas.cpp index 485106e27..8bc188eee 100644 --- a/src/commands/cmd_whowas.cpp +++ b/src/commands/cmd_whowas.cpp @@ -28,7 +28,7 @@ CommandWhowas::CommandWhowas(InspIRCd* Instance) : Command(Instance, "WHOWAS", 0 Instance->Timers->AddTimer(timer); } -CmdResult CommandWhowas::Handle (const char* const* parameters, int, User* user) +CmdResult CommandWhowas::Handle (const std::vector<std::string>& parameters, User* user) { /* if whowas disabled in config */ if (ServerInstance->Config->WhoWasGroupSize == 0 || ServerInstance->Config->WhoWasMaxGroups == 0) @@ -37,12 +37,12 @@ CmdResult CommandWhowas::Handle (const char* const* parameters, int, User* user) return CMD_FAILURE; } - whowas_users::iterator i = whowas.find(parameters[0]); + whowas_users::iterator i = whowas.find(assign(parameters[0])); if (i == whowas.end()) { - user->WriteNumeric(406, "%s %s :There was no such nickname",user->nick,parameters[0]); - user->WriteNumeric(369, "%s %s :End of WHOWAS",user->nick,parameters[0]); + user->WriteNumeric(406, "%s %s :There was no such nickname",user->nick,parameters[0].c_str()); + user->WriteNumeric(369, "%s %s :End of WHOWAS",user->nick,parameters[0].c_str()); return CMD_FAILURE; } else @@ -63,26 +63,26 @@ CmdResult CommandWhowas::Handle (const char* const* parameters, int, User* user) strlcpy(b,asctime(timeinfo),MAXBUF); b[24] = 0; - user->WriteNumeric(314, "%s %s %s %s * :%s",user->nick,parameters[0],u->ident,u->dhost,u->gecos); + user->WriteNumeric(314, "%s %s %s %s * :%s",user->nick,parameters[0].c_str(),u->ident,u->dhost,u->gecos); if (IS_OPER(user)) - user->WriteNumeric(379, "%s %s :was connecting from *@%s", user->nick, parameters[0], u->host); + user->WriteNumeric(379, "%s %s :was connecting from *@%s", user->nick, parameters[0].c_str(), u->host); if (*ServerInstance->Config->HideWhoisServer && !IS_OPER(user)) - user->WriteNumeric(312, "%s %s %s :%s",user->nick,parameters[0], ServerInstance->Config->HideWhoisServer, b); + user->WriteNumeric(312, "%s %s %s :%s",user->nick,parameters[0].c_str(), ServerInstance->Config->HideWhoisServer, b); else - user->WriteNumeric(312, "%s %s %s :%s",user->nick,parameters[0], u->server, b); + user->WriteNumeric(312, "%s %s %s :%s",user->nick,parameters[0].c_str(), u->server, b); } } else { - user->WriteNumeric(406, "%s %s :There was no such nickname",user->nick,parameters[0]); - user->WriteNumeric(369, "%s %s :End of WHOWAS",user->nick,parameters[0]); + user->WriteNumeric(406, "%s %s :There was no such nickname",user->nick,parameters[0].c_str()); + user->WriteNumeric(369, "%s %s :End of WHOWAS",user->nick,parameters[0].c_str()); return CMD_FAILURE; } } - user->WriteNumeric(369, "%s %s :End of WHOWAS",user->nick,parameters[0]); + user->WriteNumeric(369, "%s %s :End of WHOWAS",user->nick,parameters[0].c_str()); return CMD_SUCCESS; } diff --git a/src/commands/cmd_zline.cpp b/src/commands/cmd_zline.cpp index c4bc750c7..c1951d447 100644 --- a/src/commands/cmd_zline.cpp +++ b/src/commands/cmd_zline.cpp @@ -22,15 +22,15 @@ extern "C" DllExport Command* init_command(InspIRCd* Instance) return new CommandZline(Instance); } -CmdResult CommandZline::Handle (const char* const* parameters, int pcnt, User *user) +CmdResult CommandZline::Handle (const std::vector<std::string>& parameters, User *user) { std::string target = parameters[0]; - if (pcnt >= 3) + if (parameters.size() >= 3) { - if (strchr(target.c_str(),'@') || strchr(target.c_str(),'!')) + if (target.find('!') != std::string::npos) { - user->WriteServ("NOTICE %s :*** You cannot include a username or nickname in a zline, a zline must ban only an IP mask",user->nick); + user->WriteServ("NOTICE %s :*** You cannot include a nickname in a zline, a zline must ban only an IP mask",user->nick); return CMD_FAILURE; } @@ -44,7 +44,7 @@ CmdResult CommandZline::Handle (const char* const* parameters, int pcnt, User *u if (ServerInstance->IPMatchesEveryone(target.c_str(),user)) return CMD_FAILURE; - long duration = ServerInstance->Duration(parameters[1]); + long duration = ServerInstance->Duration(parameters[1].c_str()); const char* ipaddr = target.c_str(); User* find = ServerInstance->FindNick(target.c_str()); @@ -62,7 +62,7 @@ CmdResult CommandZline::Handle (const char* const* parameters, int pcnt, User *u ipaddr++; } } - ZLine* zl = new ZLine(ServerInstance, ServerInstance->Time(), duration, user->nick, parameters[2], ipaddr); + ZLine* zl = new ZLine(ServerInstance, ServerInstance->Time(), duration, user->nick, parameters[2].c_str(), ipaddr); if (ServerInstance->XLines->AddLine(zl,user)) { if (!duration) diff --git a/src/mode.cpp b/src/mode.cpp index 8712e63b5..d73a5d1b8 100644 --- a/src/mode.cpp +++ b/src/mode.cpp @@ -354,7 +354,7 @@ void ModeParser::DisplayCurrentModes(User *user, User* targetuser, Channel* targ return; } -void ModeParser::Process(const char* const* parameters, int pcnt, User *user, bool servermode) +void ModeParser::Process(const std::vector<std::string>& parameters, User *user, bool servermode) { std::string target = parameters[0]; ModeType type = MODETYPE_USER; @@ -367,9 +367,9 @@ void ModeParser::Process(const char* const* parameters, int pcnt, User *user, bo /* Special case for displaying the list for listmodes, * e.g. MODE #chan b, or MODE #chan +b without a parameter */ - if ((targetchannel) && (pcnt == 2)) + if ((targetchannel) && (parameters.size() == 2)) { - const char* mode = parameters[1]; + const char* mode = parameters[1].c_str(); int nonlistmodes_found = 0; seq++; @@ -445,11 +445,11 @@ void ModeParser::Process(const char* const* parameters, int pcnt, User *user, bo return; } - if (pcnt == 1) + if (parameters.size() == 1) { - this->DisplayCurrentModes(user, targetuser, targetchannel, parameters[0]); + this->DisplayCurrentModes(user, targetuser, targetchannel, parameters[0].c_str()); } - else if (pcnt > 1) + else if (parameters.size() > 1) { bool SkipAccessChecks = false; @@ -485,7 +485,7 @@ void ModeParser::Process(const char* const* parameters, int pcnt, User *user, bo else { /* No such nick/channel */ - user->WriteNumeric(401, "%s %s :No such nick/channel",user->nick, parameters[0]); + user->WriteNumeric(401, "%s %s :No such nick/channel",user->nick, parameters[0].c_str()); return; } @@ -495,8 +495,8 @@ void ModeParser::Process(const char* const* parameters, int pcnt, User *user, bo std::string output_sequence; bool adding = true, state_change = false; unsigned char handler_id = 0; - int parameter_counter = 2; /* Index of first parameter */ - int parameter_count = 0; + unsigned int parameter_counter = 2; /* Index of first parameter */ + unsigned int parameter_count = 0; bool last_successful_state_change = false; /* A mode sequence that doesnt start with + or -. Assume +. - Thanks for the suggestion spike (bug#132) */ @@ -559,7 +559,7 @@ void ModeParser::Process(const char* const* parameters, int pcnt, User *user, bo if (modehandlers[handler_id]->GetNumParams(adding)) { /* This mode expects a parameter, do we have any parameters left in our list to use? */ - if (parameter_counter < pcnt) + if (parameter_counter < parameters.size()) { parameter = parameters[parameter_counter++]; @@ -1127,7 +1127,7 @@ bool ModeParser::DelModeWatcher(ModeWatcher* mw) void ModeHandler::RemoveMode(User* user, irc::modestacker* stack) { char moderemove[MAXBUF]; - const char* parameters[] = { user->nick, moderemove }; + std::vector<std::string> parameters; if (user->IsModeSet(this->GetModeChar())) { @@ -1138,7 +1138,9 @@ void ModeHandler::RemoveMode(User* user, irc::modestacker* stack) else { sprintf(moderemove,"-%c",this->GetModeChar()); - ServerInstance->Parser->CallHandler("MODE", parameters, 2, user); + parameters.push_back(user->nick); + parameters.push_back(moderemove); + ServerInstance->Parser->CallHandler("MODE", parameters, user); } } } @@ -1149,7 +1151,7 @@ void ModeHandler::RemoveMode(User* user, irc::modestacker* stack) void ModeHandler::RemoveMode(Channel* channel, irc::modestacker* stack) { char moderemove[MAXBUF]; - const char* parameters[] = { channel->name, moderemove }; + std::vector<std::string> parameters; if (channel->IsModeSet(this->GetModeChar())) { @@ -1160,7 +1162,9 @@ void ModeHandler::RemoveMode(Channel* channel, irc::modestacker* stack) else { sprintf(moderemove,"-%c",this->GetModeChar()); - ServerInstance->SendMode(parameters, 2, ServerInstance->FakeClient); + parameters.push_back(channel->name); + parameters.push_back(moderemove); + ServerInstance->SendMode(parameters, ServerInstance->FakeClient); } } } diff --git a/src/modes/cmode_b.cpp b/src/modes/cmode_b.cpp index 4eea2e44d..d6495313a 100644 --- a/src/modes/cmode_b.cpp +++ b/src/modes/cmode_b.cpp @@ -52,7 +52,6 @@ ModeAction ModeChannelBan::OnModeChange(User* source, User*, Channel* channel, s void ModeChannelBan::RemoveMode(Channel* channel, irc::modestacker* stack) { BanList copy; - char moderemove[MAXBUF]; for (BanList::iterator i = channel->bans.begin(); i != channel->bans.end(); i++) { @@ -67,9 +66,8 @@ void ModeChannelBan::RemoveMode(Channel* channel, irc::modestacker* stack) } else { - sprintf(moderemove,"-%c",this->GetModeChar()); - const char* parameters[] = { channel->name, moderemove, i->data }; - ServerInstance->SendMode(parameters, 3, ServerInstance->FakeClient); + std::vector<std::string> parameters; parameters.push_back(channel->name); parameters.push_back("-b"); parameters.push_back(i->data); + ServerInstance->SendMode(parameters, ServerInstance->FakeClient); } } } diff --git a/src/modes/cmode_h.cpp b/src/modes/cmode_h.cpp index 8217ccc2d..6dd941353 100644 --- a/src/modes/cmode_h.cpp +++ b/src/modes/cmode_h.cpp @@ -49,7 +49,6 @@ void ModeChannelHalfOp::RemoveMode(Channel* channel, irc::modestacker* stack) { CUList* clist = channel->GetHalfoppedUsers(); CUList copy; - char moderemove[MAXBUF]; for (CUList::iterator i = clist->begin(); i != clist->end(); i++) { @@ -65,9 +64,8 @@ void ModeChannelHalfOp::RemoveMode(Channel* channel, irc::modestacker* stack) } else { - sprintf(moderemove,"-%c",this->GetModeChar()); - const char* parameters[] = { channel->name, moderemove, i->first->nick }; - ServerInstance->SendMode(parameters, 3, ServerInstance->FakeClient); + std::vector<std::string> parameters; parameters.push_back(channel->name); parameters.push_back("-h"); parameters.push_back(i->first->nick); + ServerInstance->SendMode(parameters, ServerInstance->FakeClient); } } diff --git a/src/modes/cmode_k.cpp b/src/modes/cmode_k.cpp index 194c0efcb..0ab35b954 100644 --- a/src/modes/cmode_k.cpp +++ b/src/modes/cmode_k.cpp @@ -38,8 +38,6 @@ void ModeChannelKey::RemoveMode(Channel* channel, irc::modestacker* stack) /** +k needs a parameter when being removed, * so we have a special-case RemoveMode here for it */ - char moderemove[MAXBUF]; - const char* parameters[] = { channel->name, moderemove, channel->key }; if (channel->IsModeSet(this->GetModeChar())) { @@ -47,8 +45,8 @@ void ModeChannelKey::RemoveMode(Channel* channel, irc::modestacker* stack) stack->Push(this->GetModeChar(), channel->key); else { - sprintf(moderemove,"-%c",this->GetModeChar()); - ServerInstance->SendMode(parameters, 3, ServerInstance->FakeClient); + std::vector<std::string> parameters; parameters.push_back(channel->name); parameters.push_back("-k"); parameters.push_back(channel->key); + ServerInstance->SendMode(parameters, ServerInstance->FakeClient); } } } diff --git a/src/modes/cmode_o.cpp b/src/modes/cmode_o.cpp index 3105d64ae..0582dbee5 100644 --- a/src/modes/cmode_o.cpp +++ b/src/modes/cmode_o.cpp @@ -50,7 +50,6 @@ void ModeChannelOp::RemoveMode(Channel* channel, irc::modestacker* stack) { CUList* clist = channel->GetOppedUsers(); CUList copy; - char moderemove[MAXBUF]; for (CUList::iterator i = clist->begin(); i != clist->end(); i++) { @@ -64,9 +63,8 @@ void ModeChannelOp::RemoveMode(Channel* channel, irc::modestacker* stack) stack->Push(this->GetModeChar(), i->first->nick); else { - sprintf(moderemove,"-%c",this->GetModeChar()); - const char* parameters[] = { channel->name, moderemove, i->first->nick }; - ServerInstance->SendMode(parameters, 3, ServerInstance->FakeClient); + std::vector<std::string> parameters; parameters.push_back(channel->name); parameters.push_back("-o"); parameters.push_back(i->first->nick); + ServerInstance->SendMode(parameters, ServerInstance->FakeClient); } } } diff --git a/src/modes/cmode_v.cpp b/src/modes/cmode_v.cpp index 15196d4a8..8e13ba6f1 100644 --- a/src/modes/cmode_v.cpp +++ b/src/modes/cmode_v.cpp @@ -50,7 +50,6 @@ void ModeChannelVoice::RemoveMode(Channel* channel, irc::modestacker* stack) { CUList* clist = channel->GetVoicedUsers(); CUList copy; - char moderemove[MAXBUF]; for (CUList::iterator i = clist->begin(); i != clist->end(); i++) { @@ -64,9 +63,8 @@ void ModeChannelVoice::RemoveMode(Channel* channel, irc::modestacker* stack) stack->Push(this->GetModeChar(), i->first->nick); else { - sprintf(moderemove,"-%c",this->GetModeChar()); - const char* parameters[] = { channel->name, moderemove, i->first->nick }; - ServerInstance->SendMode(parameters, 3, ServerInstance->FakeClient); + std::vector<std::string> parameters; parameters.push_back(channel->name); parameters.push_back("-v"); parameters.push_back(i->first->nick); + ServerInstance->SendMode(parameters, ServerInstance->FakeClient); } } } diff --git a/src/modes/umode_n.cpp b/src/modes/umode_n.cpp index db386a32b..fe75fd222 100644 --- a/src/modes/umode_n.cpp +++ b/src/modes/umode_n.cpp @@ -38,8 +38,10 @@ ModeAction ModeUserServerNoticeMask::OnModeChange(User* source, User* dest, Chan dest->modes[UM_SNOMASK] = true; if (!dest->modes[UM_SERVERNOTICE]) { - const char* newmodes[] = { dest->nick, "+s" }; - ServerInstance->Modes->Process(newmodes, 2, source, true); + std::vector<std::string> newmodes; + newmodes.push_back(dest->nick); + newmodes.push_back("+s"); + ServerInstance->Modes->Process(newmodes, source, true); } return MODEACTION_ALLOW; } diff --git a/src/modules.cpp b/src/modules.cpp index 617d5a0fa..b051085fd 100644 --- a/src/modules.cpp +++ b/src/modules.cpp @@ -132,8 +132,8 @@ int Module::OnKill(User*, User*, const std::string&) { return 0; } void Module::OnLoadModule(Module*, const std::string&) { } void Module::OnUnloadModule(Module*, const std::string&) { } void Module::OnBackgroundTimer(time_t) { } -int Module::OnPreCommand(const std::string&, const char* const*, int, User *, bool, const std::string&) { return 0; } -void Module::OnPostCommand(const std::string&, const char* const*, int, User *, CmdResult, const std::string&) { } +int Module::OnPreCommand(const std::string&, const std::vector<std::string>&, User *, bool, const std::string&) { return 0; } +void Module::OnPostCommand(const std::string&, const std::vector<std::string>&, User *, CmdResult, const std::string&) { } bool Module::OnCheckReady(User*) { return true; } int Module::OnUserRegister(User*) { return 0; } int Module::OnUserPreKick(User*, User*, Channel*, const std::string&) { return 0; } @@ -718,9 +718,9 @@ bool InspIRCd::MatchText(const std::string &sliteral, const std::string &spatter return match(sliteral.c_str(),spattern.c_str()); } -CmdResult InspIRCd::CallCommandHandler(const std::string &commandname, const char* const* parameters, int pcnt, User* user) +CmdResult InspIRCd::CallCommandHandler(const std::string &commandname, const std::vector<std::string>& parameters, User* user) { - return this->Parser->CallHandler(commandname,parameters,pcnt,user); + return this->Parser->CallHandler(commandname, parameters, user); } bool InspIRCd::IsValidModuleCommand(const std::string &commandname, int pcnt, User* user) @@ -737,9 +737,9 @@ void InspIRCd::AddCommand(Command *f) } } -void InspIRCd::SendMode(const char* const* parameters, int pcnt, User *user) +void InspIRCd::SendMode(const std::vector<std::string>& parameters, User *user) { - this->Modes->Process(parameters,pcnt,user,true); + this->Modes->Process(parameters, user, true); } void InspIRCd::DumpText(User* User, const std::string &LinePrefix, std::stringstream &TextStream) diff --git a/src/users.cpp b/src/users.cpp index 70f90a0a9..d8ed553a7 100644 --- a/src/users.cpp +++ b/src/users.cpp @@ -789,8 +789,11 @@ void User::UnOper() } } - const char* parameters[] = { this->nick, moderemove.c_str() }; - ServerInstance->Parser->CallHandler("MODE", parameters, 2, this); + std::vector<std::string> parameters; + parameters.push_back(this->nick); + parameters.push_back(moderemove); + + ServerInstance->Parser->CallHandler("MODE", parameters, this); /* unset their oper type (what IS_OPER checks), and remove +o */ *this->oper = 0; @@ -921,9 +924,9 @@ void User::FullConnect() /* Trigger LUSERS output, give modules a chance too */ int MOD_RESULT = 0; - FOREACH_RESULT(I_OnPreCommand, OnPreCommand("LUSERS", NULL, 0, this, true, "LUSERS")); + FOREACH_RESULT(I_OnPreCommand, OnPreCommand("LUSERS", std::vector<std::string>(), this, true, "LUSERS")); if (!MOD_RESULT) - ServerInstance->CallCommandHandler("LUSERS", NULL, 0, this); + ServerInstance->CallCommandHandler("LUSERS", std::vector<std::string>(), this); /* * We don't set REG_ALL until triggering OnUserConnect, so some module events don't spew out stuff @@ -993,8 +996,10 @@ bool User::ForceNickChange(const char* newnick) Command* nickhandler = ServerInstance->Parser->GetHandler("NICK"); if (nickhandler) // wtfbbq, when would this not be here { + std::vector<std::string> parameters; nickhandler->HandleInternal(1, dummy); - bool result = (ServerInstance->Parser->CallHandler("NICK", &newnick, 1, this) == CMD_SUCCESS); + parameters.push_back(newnick); + bool result = (ServerInstance->Parser->CallHandler("NICK", parameters, this) == CMD_SUCCESS); nickhandler->HandleInternal(0, dummy); return result; } |