* | Inspire Internet Relay Chat Daemon |
* +------------------------------------+
*
- * InspIRCd: (C) 2002-2007 InspIRCd Development Team
+ * InspIRCd: (C) 2002-2009 InspIRCd Development Team
* See: http://www.inspircd.org/wiki/index.php/Credits
*
* This program is free but copyrighted software; see
#ifndef __COMMAND_PARSE_H
#define __COMMAND_PARSE_H
-#include <string>
-#include "users.h"
-#include "ctables.h"
-#include "typedefs.h"
-
-/** Required forward declaration
- */
-class InspIRCd;
-
/** A list of dll/so files containing the command handlers for the core
*/
typedef std::map<std::string, void*> SharedObjectList;
* @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
* @param cmd The command string to process
*/
- void ProcessCommand(User *user, std::string &cmd);
+ bool ProcessCommand(User *user, std::string &cmd);
/** Finds the init_command symbol in a .so file
* @param v A function pointer to be initialized
public:
/** Command list, a hash_map of command names to Command*
*/
- Commandable cmdlist;
+ Commandtable cmdlist;
/** Reload a core command.
* This will only reload commands implemented by the core,
* @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
/** Calls the handler for a given command.
* @param commandname The command to find. This should be in uppercase.
- * @param parameters Parameter list as an array of array of char (that's not a typo).
- * @param pcnt The number of items in the parameters list
+ * @param parameters Parameter list
* @param user The user to call the handler on behalf of
* @return This method will return CMD_SUCCESS if the command handler was found and called,
* and the command completeld successfully. It will return CMD_FAILURE if the command handler was found
* 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** 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** 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** 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
* @param user The user to whom this line belongs
*/
- void ProcessBuffer(std::string &buffer,User *user);
+ bool ProcessBuffer(std::string &buffer,User *user);
+
+ /** Process lines in a users sendq.
+ * @param current The user to process
+ * @param one_only if one_only is set only one command is processed from the sendq.
+ */
+ void DoLines(User* current, bool one_only = false);
/** Remove all commands relating to module 'source'.
* @param source A module name which has introduced new commands
- * @return True This function returns true if commands were removed
*/
- bool RemoveCommands(const char* source);
+ void RemoveCommands(const char* source);
/** Add a new command to the commands hash
* @param f The new Command to add to the list
bool CreateCommand(Command *f, void* so_handle = NULL);
/** Insert the default RFC1459 commands into the command hash.
- * Ignore any already loaded commands.
- * @param user User to spool errors to, or if NULL, when an error occurs spool the errors to
- * stdout then exit with EXIT_STATUS_HANDLER.
*/
- void SetupCommandTable(User* user);
+ void SetupCommandTable();
/** Translate nicknames in a string into UIDs, based on the TranslationType given.
* @param to The translation type to use for the process.
/** Command handler class for the RELOAD command.
* A command cant really reload itself, so this has to be in here.
*/
-class cmd_reload : public Command
+class CommandReload : public Command
{
public:
/** Standard constructor
*/
- cmd_reload (InspIRCd* Instance) : Command(Instance,"RELOAD",'o',1) { syntax = "<core-command>"; }
+ CommandReload (InspIRCd* Instance) : Command(Instance,"RELOAD","o",1) { syntax = "<core-command>"; }
/** Handle RELOAD
*/
- CmdResult Handle(const char** 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
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 86400, 1, 1, 1, 3600,
1, 1, 1, 1, 60, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 604800, 1, 31536000, 1, 1, 1, 1, 1, 1, 1, 1,
+ 604800, 1, 31557600, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 86400, 1, 1, 1, 3600, 1, 1, 1, 1, 60,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 604800, 1, 31536000,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 604800, 1, 31557600,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,