* @param parameters The input string
* @return The number of parameters parsed into command_p
*/
- int ProcessParameters(char **command_p,char *parameters);
+ int ProcessParameters(std::vector<std::string>& command_p, char* parameters);
/** Process a command from a user.
* @param user The user to parse the command for
* @return True if the command was reloaded, false if it could not be found
* or another error occured
*/
- bool ReloadCommand(const char* cmd, User* user);
+ bool ReloadCommand(std::string cmd, User* user);
/** Default constructor.
* @param Instance The creator of this class
* command simply did not exist at all or the wrong number of parameters were given, or the user
* was not privilaged enough to execute the command.
*/
- CmdResult CallHandler(const std::string &commandname,const char* const* parameters, int pcnt, User *user);
+ CmdResult CallHandler(const std::string &commandname, const std::vector<std::string>& parameters, User *user);
/** Get the handler function for a command.
* @param commandname The command required. Always use uppercase for this parameter.
* equal to or greater than the minimum number of parameters to the given command, then this
* function will return true, otherwise it will return false.
*/
- bool IsValidCommand(const std::string &commandname, int pcnt, User * user);
+ bool IsValidCommand(const std::string &commandname, unsigned int pcnt, User * user);
/** LoopCall is used to call a command classes handler repeatedly based on the contents of a comma seperated list.
* There are two overriden versions of this method, one of which takes two potential lists and the other takes one.
* @return This function will return 1 when there are no more parameters to process. When this occurs, its
* caller should return without doing anything, otherwise it should continue into its main section of code.
*/
- int LoopCall(User* user, Command* CommandObj, const char* const* parameters, int pcnt, unsigned int splithere, unsigned int extra);
+ int LoopCall(User* user, Command* CommandObj, const std::vector<std::string>& parameters, unsigned int splithere, unsigned int extra);
/** LoopCall is used to call a command classes handler repeatedly based on the contents of a comma seperated list.
* There are two overriden versions of this method, one of which takes two potential lists and the other takes one.
* @return This function will return 1 when there are no more parameters to process. When this occurs, its
* caller should return without doing anything, otherwise it should continue into its main section of code.
*/
- int LoopCall(User* user, Command* CommandObj, const char* const* parameters, int pcnt, unsigned int splithere);
+ int LoopCall(User* user, Command* CommandObj, const std::vector<std::string>& parameters, unsigned int splithere);
/** Take a raw input buffer from a recvq, and process it on behalf of a user.
* @param buffer The buffer line to process
cmd_reload (InspIRCd* Instance) : Command(Instance,"RELOAD","o",1) { syntax = "<core-command>"; }
/** Handle RELOAD
*/
- CmdResult Handle(const char* const* parameters, int pcnt, User *user);
+ CmdResult Handle(const std::vector<std::string>& parameters, User *user);
};
/** A lookup table of values for multiplier characters used by
* @param user The user issuing the command
* @return A value from CmdResult to indicate command success or failure.
*/
- CmdResult Handle(const char* const* parameters, int pcnt, User *user);
+ CmdResult Handle(const std::vector<std::string>& parameters, User *user);
};
#endif
* @param user The user issuing the command
* @return A value from CmdResult to indicate command success or failure.
*/
- CmdResult Handle(const char* const* parameters, int pcnt, User *user);
+ CmdResult Handle(const std::vector<std::string>& parameters, User *user);
};
#endif
* @param user The user issuing the command
* @return A value from CmdResult to indicate command success or failure.
*/
- CmdResult Handle(const char* const* parameters, int pcnt, User *user);
+ CmdResult Handle(const std::vector<std::string>& parameters, User *user);
};
#endif
* @param user The user issuing the command
* @return A value from CmdResult to indicate command success or failure.
*/
- CmdResult Handle(const char* const* parameters, int pcnt, User *user);
+ CmdResult Handle(const std::vector<std::string>& parameters, User *user);
};
#endif
* @param user The user issuing the command
* @return A value from CmdResult to indicate command success or failure.
*/
- CmdResult Handle(const char* const* parameters, int pcnt, User *user);
+ CmdResult Handle(const std::vector<std::string>& parameters, User *user);
};
#endif
* @param user The user issuing the command
* @return A value from CmdResult to indicate command success or failure.
*/
- CmdResult Handle(const char* const* parameters, int pcnt, User *user);
+ CmdResult Handle(const std::vector<std::string>& parameters, User *user);
};
#endif
* @param user The user issuing the command
* @return A value from CmdResult to indicate command success or failure.
*/
- CmdResult Handle(const char* const* parameters, int pcnt, User *user);
+ CmdResult Handle(const std::vector<std::string>& parameters, User *user);
};
#endif
* @param user The user issuing the command
* @return A value from CmdResult to indicate command success or failure.
*/
- CmdResult Handle(const char* const* parameters, int pcnt, User *user);
+ CmdResult Handle(const std::vector<std::string>& parameters, User *user);
};
#endif
* @param user The user issuing the command
* @return A value from CmdResult to indicate command success or failure.
*/
- CmdResult Handle(const char* const* parameters, int pcnt, User *user);
+ CmdResult Handle(const std::vector<std::string>& parameters, User *user);
};
#endif
* @param user The user issuing the command
* @return A value from CmdResult to indicate command success or failure.
*/
- CmdResult Handle(const char* const* parameters, int pcnt, User *user);
+ CmdResult Handle(const std::vector<std::string>& parameters, User *user);
};
#endif
* @param user The user issuing the command
* @return A value from CmdResult to indicate command success or failure.
*/
- CmdResult Handle(const char* const* parameters, int pcnt, User *user);
+ CmdResult Handle(const std::vector<std::string>& parameters, User *user);
};
#endif
* @param user The user issuing the command
* @return A value from CmdResult to indicate command success or failure.
*/
- CmdResult Handle(const char* const* parameters, int pcnt, User *user);
+ CmdResult Handle(const std::vector<std::string>& parameters, User *user);
};
#endif
* @param user The user issuing the command
* @return A value from CmdResult to indicate command success or failure.
*/
- CmdResult Handle(const char* const* parameters, int pcnt, User *user);
+ CmdResult Handle(const std::vector<std::string>& parameters, User *user);
};
#endif
* @param user The user issuing the command
* @return A value from CmdResult to indicate command success or failure.
*/
- CmdResult Handle(const char* const* parameters, int pcnt, User *user);
+ CmdResult Handle(const std::vector<std::string>& parameters, User *user);
};
#endif
* @param user The user issuing the command
* @return A value from CmdResult to indicate command success or failure.
*/
- CmdResult Handle(const char* const* parameters, int pcnt, User *user);
+ CmdResult Handle(const std::vector<std::string>& parameters, User *user);
};
#endif
* @param user The user issuing the command
* @return A value from CmdResult to indicate command success or failure.
*/
- CmdResult Handle(const char* const* parameters, int pcnt, User *user);
+ CmdResult Handle(const std::vector<std::string>& parameters, User *user);
};
#endif
* @param user The user issuing the command
* @return A value from CmdResult to indicate command success or failure.
*/
- CmdResult Handle(const char* const* parameters, int pcnt, User *user);
+ CmdResult Handle(const std::vector<std::string>& parameters, User *user);
};
#endif
* @param user The user issuing the command
* @return A value from CmdResult to indicate command success or failure.
*/
- CmdResult Handle(const char* const* parameters, int pcnt, User *user);
+ CmdResult Handle(const std::vector<std::string>& parameters, User *user);
};
#endif
* @param user The user issuing the command
* @return A value from CmdResult to indicate command success or failure.
*/
- CmdResult Handle(const char* const* parameters, int pcnt, User *user);
+ CmdResult Handle(const std::vector<std::string>& parameters, User *user);
};
#endif
* @param user The user issuing the command
* @return A value from CmdResult to indicate command success or failure.
*/
- CmdResult Handle(const char* const* parameters, int pcnt, User *user);
+ CmdResult Handle(const std::vector<std::string>& parameters, User *user);
};
#endif
* @param user The user issuing the command
* @return A value from CmdResult to indicate command success or failure.
*/
- CmdResult Handle(const char* const* parameters, int pcnt, User *user);
+ CmdResult Handle(const std::vector<std::string>& parameters, User *user);
};
#endif
* @param user The user issuing the command
* @return A value from CmdResult to indicate command success or failure.
*/
- CmdResult Handle(const char* const* parameters, int pcnt, User *user);
+ CmdResult Handle(const std::vector<std::string>& parameters, User *user);
};
#endif
* @param user The user issuing the command
* @return A value from CmdResult to indicate command success or failure.
*/
- CmdResult Handle(const char* const* parameters, int pcnt, User *user);
+ CmdResult Handle(const std::vector<std::string>& parameters, User *user);
};
#endif
* @param user The user issuing the command
* @return A value from CmdResult to indicate command success or failure.
*/
- CmdResult Handle(const char* const* parameters, int pcnt, User *user);
+ CmdResult Handle(const std::vector<std::string>& parameters, User *user);
};
#endif
* @param user The user issuing the command
* @return A value from CmdResult to indicate command success or failure.
*/
- CmdResult Handle(const char* const* parameters, int pcnt, User *user);
+ CmdResult Handle(const std::vector<std::string>& parameters, User *user);
/** Handle internal command
* @param id Used to indicate if invalid nick changes are allowed.
* @param user The user issuing the command
* @return A value from CmdResult to indicate command success or failure.
*/
- CmdResult Handle(const char* const* parameters, int pcnt, User *user);
+ CmdResult Handle(const std::vector<std::string>& parameters, User *user);
};
#endif
* @param user The user issuing the command
* @return A value from CmdResult to indicate command success or failure.
*/
- CmdResult Handle(const char* const* parameters, int pcnt, User *user);
+ CmdResult Handle(const std::vector<std::string>& parameters, User *user);
};
#endif
* @param user The user issuing the command
* @return A value from CmdResult to indicate command success or failure.
*/
- CmdResult Handle(const char* const* parameters, int pcnt, User *user);
+ CmdResult Handle(const std::vector<std::string>& parameters, User *user);
};
#endif
* @param user The user issuing the command
* @return A value from CmdResult to indicate command success or failure.
*/
- CmdResult Handle(const char* const* parameters, int pcnt, User *user);
+ CmdResult Handle(const std::vector<std::string>& parameters, User *user);
};
#endif
* @param user The user issuing the command
* @return A value from CmdResult to indicate command success or failure.
*/
- CmdResult Handle(const char* const* parameters, int pcnt, User *user);
+ CmdResult Handle(const std::vector<std::string>& parameters, User *user);
};
#endif
* @param user The user issuing the command
* @return A value from CmdResult to indicate command success or failure.
*/
- CmdResult Handle(const char* const* parameters, int pcnt, User *user);
+ CmdResult Handle(const std::vector<std::string>& parameters, User *user);
};
#endif
* @param user The user issuing the command
* @return A value from CmdResult to indicate command success or failure.
*/
- CmdResult Handle(const char* const* parameters, int pcnt, User *user);
+ CmdResult Handle(const std::vector<std::string>& parameters, User *user);
};
#endif
* @param user The user issuing the command
* @return A value from CmdResult to indicate command success or failure.
*/
- CmdResult Handle(const char* const* parameters, int pcnt, User *user);
+ CmdResult Handle(const std::vector<std::string>& parameters, User *user);
};
#endif
* @param user The user issuing the command
* @return A value from CmdResult to indicate command success or failure.
*/
- CmdResult Handle(const char* const* parameters, int pcnt, User *user);
+ CmdResult Handle(const std::vector<std::string>& parameters, User *user);
};
#endif
* @param user The user issuing the command
* @return A value from CmdResult to indicate command success or failure.
*/
- CmdResult Handle(const char* const* parameters, int pcnt, User *user);
+ CmdResult Handle(const std::vector<std::string>& parameters, User *user);
};
#endif
* @param user The user issuing the command
* @return A value from CmdResult to indicate command success or failure.
*/
- CmdResult Handle(const char* const* parameters, int pcnt, User *user);
+ CmdResult Handle(const std::vector<std::string>& parameters, User *user);
};
#endif
* @param user The user issuing the command
* @return A value from CmdResult to indicate command success or failure.
*/
- CmdResult Handle(const char* const* parameters, int pcnt, User *user);
+ CmdResult Handle(const std::vector<std::string>& parameters, User *user);
};
#endif
* @param user The user issuing the command
* @return A value from CmdResult to indicate command success or failure.
*/
- CmdResult Handle(const char* const* parameters, int pcnt, User *user);
+ CmdResult Handle(const std::vector<std::string>& parameters, User *user);
};
#endif
* @param user The user issuing the command
* @return A value from CmdResult to indicate command success or failure.
*/
- CmdResult Handle(const char* const* parameters, int pcnt, User *user);
+ CmdResult Handle(const std::vector<std::string>& parameters, User *user);
};
#endif
* @param user The user issuing the command
* @return A value from CmdResult to indicate command success or failure.
*/
- CmdResult Handle(const char* const* parameters, int pcnt, User *user);
+ CmdResult Handle(const std::vector<std::string>& parameters, User *user);
};
#endif
* @param user The user issuing the command
* @return A value from CmdResult to indicate command success or failure.
*/
- CmdResult Handle(const char* const* parameters, int pcnt, User *user);
+ CmdResult Handle(const std::vector<std::string>& parameters, User *user);
};
#endif
* @param user The user issuing the command
* @return A value from CmdResult to indicate command success or failure.
*/
- CmdResult Handle(const char* const* parameters, int pcnt, User *user);
+ CmdResult Handle(const std::vector<std::string>& parameters, User *user);
};
#endif
* @param user The user issuing the command
* @return A value from CmdResult to indicate command success or failure.
*/
- CmdResult Handle(const char* const* parameters, int pcnt, User *user);
+ CmdResult Handle(const std::vector<std::string>& parameters, User *user);
};
#endif
* @param user The user issuing the command
* @return A value from CmdResult to indicate command success or failure.
*/
- CmdResult Handle(const char* const* parameters, int pcnt, User *user);
+ CmdResult Handle(const std::vector<std::string>& parameters, User *user);
};
#endif
* @param user The user issuing the command
* @return A value from CmdResult to indicate command success or failure.
*/
- CmdResult Handle(const char* const* parameters, int pcnt, User *user);
+ CmdResult Handle(const std::vector<std::string>& parameters, User *user);
};
#endif
* @param user The user issuing the command
* @return A value from CmdResult to indicate command success or failure.
*/
- CmdResult Handle(const char* const* parameters, int pcnt, User *user);
+ CmdResult Handle(const std::vector<std::string>& parameters, User *user);
};
#endif
* @param user The user issuing the command
* @return A value from CmdResult to indicate command success or failure.
*/
- CmdResult Handle(const char* const* parameters, int pcnt, User *user);
+ CmdResult Handle(const std::vector<std::string>& parameters, User *user);
};
#endif
* @param user The user issuing the command
* @return A value from CmdResult to indicate command success or failure.
*/
- CmdResult Handle(const char* const* parameters, int pcnt, User *user);
+ CmdResult Handle(const std::vector<std::string>& parameters, User *user);
};
#endif
* @param user The user issuing the command
* @return A value from CmdResult to indicate command success or failure.
*/
- CmdResult Handle(const char* const* parameters, int pcnt, User *user);
+ CmdResult Handle(const std::vector<std::string>& parameters, User *user);
};
#endif
* @param user The user issuing the command
* @return A value from CmdResult to indicate command success or failure.
*/
- CmdResult Handle(const char* const* parameters, int pcnt, User *user);
+ CmdResult Handle(const std::vector<std::string>& parameters, User *user);
bool whomatch(User* user, const char* matchtext);
};
* @param user The user issuing the command
* @return A value from CmdResult to indicate command success or failure.
*/
- CmdResult Handle(const char* const* parameters, int pcnt, User *user);
+ CmdResult Handle(const std::vector<std::string>& parameters, User *user);
};
#endif
* @param user The user issuing the command
* @return A value from CmdResult to indicate command success or failure.
*/
- CmdResult Handle(const char* const* parameters, int pcnt, User *user);
+ CmdResult Handle(const std::vector<std::string>& parameters, User *user);
/** Handle an internal request from another command, the core, or a module
* @param Command ID
* @param Zero or more parameters, whos form is specified by the command ID.
* @param user The user issuing the command
* @return A value from CmdResult to indicate command success or failure.
*/
- CmdResult Handle(const char* const* parameters, int pcnt, User *user);
+ CmdResult Handle(const std::vector<std::string>& parameters, User *user);
};
#endif
char flags_needed;
/** Minimum number of parameters command takes
*/
- int min_params;
+ unsigned int min_params;
/** used by /stats m
*/
long double use_count;
* If the command succeeds but should remain local to this server,
* return CMD_LOCALONLY.
*/
- virtual CmdResult Handle(const char* const* parameters, int pcnt, User* user) = 0;
+ virtual CmdResult Handle(const std::vector<std::string>& parameters, User* user) = 0;
/** Handle an internal request from another command, the core, or a module
* @param Command ID
* @param pcnt The number of items you have given in the first parameter
* @param user The user to send error messages to
*/
- void SendMode(const char* const* parameters, int pcnt, User *user);
+ void SendMode(const std::vector<std::string>& parameters, User *user);
/** Match two strings using pattern matching.
* This operates identically to the global function match(),
* @param user The user to execute the command as
* @return True if the command handler was called successfully
*/
- CmdResult CallCommandHandler(const std::string &commandname, const char* const* parameters, int pcnt, User* user);
+ CmdResult CallCommandHandler(const std::string &commandname, const std::vector<std::string>& parameters, User* user);
/** Return true if the command is a module-implemented command and the given parameters are valid for it
* @param parameters The mode parameters
* and *user->server == NULL.
* @param servermode True if a server is setting the mode.
*/
- void Process(const char* const* parameters, int pcnt, User *user, bool servermode);
+ void Process(const std::vector<std::string>& parameters, User *user, bool servermode);
/** Find the mode handler for a given mode and type.
* @param modeletter mode letter to search for
* @param original_line The entire original line as passed to the parser from the user
* @return 1 to block the command, 0 to allow
*/
- virtual int OnPreCommand(const std::string &command, const char* const* parameters, int pcnt, User *user, bool validated, const std::string &original_line);
+ virtual int OnPreCommand(const std::string &command, const std::vector<std::string>& parameters, User *user, bool validated, const std::string &original_line);
/** Called after any command has been executed.
* This event occurs for all registered commands, wether they are registered in the core,
* @param result The return code given by the command handler, one of CMD_SUCCESS or CMD_FAILURE
* @param original_line The entire original line as passed to the parser from the user
*/
- virtual void OnPostCommand(const std::string &command, const char* const* parameters, int pcnt, User *user, CmdResult result, const std::string &original_line);
+ virtual void OnPostCommand(const std::string &command, const std::vector<std::string>& parameters, User *user, CmdResult result, const std::string &original_line);
/** Called to check if a user who is connecting can now be allowed to register
* If any modules return false for this function, the user is held in the waiting
* 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.
{
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 = "";
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;
}
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;
{
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();
* 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;
}
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)
{
// 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;
if (bOkay)
{
- return n->second->Handle(parameters,pcnt,user);
+ return n->second->Handle(parameters,user);
}
}
}
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)
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;
}
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()))
/* 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;
}
}
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;
}
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;
}
}
/** 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)
/** 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]));
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
/** 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);
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++)
{
/** 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;
/** 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.";
/** 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());
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)
/** 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());
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)
/** 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);
/** 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;
}
/** 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())
}
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)
*/
/** 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;
}
/** 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
{
/** 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]);
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);
}
/*
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
* 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
*/
ServerInstance->Config->ServerName,
user->dhost,
*ServerInstance->Config->HideKillsServer ? ServerInstance->Config->HideKillsServer : user->nick,
- parameters[1]);
+ parameters[1].c_str());
}
}
}
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;
}
/** 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());
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)
/** 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);
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);
}
}
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;
}
/** 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;
}
}
/** 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.
/** 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
/** 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;
}
/** 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);
/** 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;
/** 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]);
}
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;
* 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
*/
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;
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;
}
}
* 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)
{
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)
if (!*user->nick)
return CMD_FAILURE;
- strlcpy(user->nick, parameters[0], NICKMAX - 1);
+ strlcpy(user->nick, parameters[0].c_str(), NICKMAX - 1);
user->InvalidateCache();
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;
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;
return CMD_SUCCESS;
}
- const char* destnick = parameters[0];
+ const char* destnick = parameters[0].c_str();
if (IS_LOCAL(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;
}
}
if (dest)
{
- if (!*parameters[1])
+ if (parameters[1].empty())
{
user->WriteNumeric(412, "%s :No text to send", user->nick);
return CMD_FAILURE;
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 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];
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)
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);
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;
}
}
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;
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 = "";
}
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]);
}
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;
}
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)
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;
}
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;
}
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;
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;
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;
return CMD_SUCCESS;
}
- const char* destnick = parameters[0];
+ const char* destnick = parameters[0].c_str();
if (IS_LOCAL(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;
}
}
if (dest)
{
- if (!*parameters[1])
+ if (parameters[1].empty())
{
user->WriteNumeric(412, "%s :No text to send", user->nick);
return CMD_FAILURE;
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))
{
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;
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();
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;
}
}
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;
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);
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;
}
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);
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;
}
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);
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;
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);
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;
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());
}
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();
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)
}
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)
*/
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)
}
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;
}
}
/** 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++)
{
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;
}
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. :)
* ~ 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);
}
}
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]);
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);
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]));
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:
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++)
{
}
}
- 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;
{
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;
}
}
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;
* 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))
/*
* 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;
}
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)
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
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;
}
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;
}
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());
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)
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;
/* 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++;
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;
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;
}
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) */
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++];
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()))
{
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);
}
}
}
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()))
{
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);
}
}
}
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++)
{
}
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);
}
}
}
{
CUList* clist = channel->GetHalfoppedUsers();
CUList copy;
- char moderemove[MAXBUF];
for (CUList::iterator i = clist->begin(); i != clist->end(); i++)
{
}
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);
}
}
/** +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()))
{
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);
}
}
}
{
CUList* clist = channel->GetOppedUsers();
CUList copy;
- char moderemove[MAXBUF];
for (CUList::iterator i = clist->begin(); i != clist->end(); i++)
{
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);
}
}
}
{
CUList* clist = channel->GetVoicedUsers();
CUList copy;
- char moderemove[MAXBUF];
for (CUList::iterator i = clist->begin(); i != clist->end(); i++)
{
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);
}
}
}
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;
}
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; }
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)
}
}
-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)
}
}
- 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;
/* 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
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;
}