1 /* +------------------------------------+
\r * | Inspire Internet Relay Chat Daemon |
\r * +------------------------------------+
\r *
\r * InspIRCd: (C) 2002-2007 InspIRCd Development Team
\r * See: http://www.inspircd.org/wiki/index.php/Credits
\r *
\r * This program is free but copyrighted software; see
\r * the file COPYING for details.
\r *
\r * ---------------------------------------------------
\r */
\r \r#ifndef __CTABLES_H__
\r#define __CTABLES_H__
\r\r\r#include "inspircd_config.h"
\r#include "hash_map.h"
\r#include "base.h"
\r\r/* Forward declarations - required */
\rclass userrec;
\rclass InspIRCd;
\r\r/** Used to indicate command success codes
\r */
\renum CmdResult
\r{
\r CMD_FAILURE = 0, /* Command exists, but failed */
\r CMD_SUCCESS = 1, /* Command exists, and succeeded */
\r CMD_INVALID = 2, /* Command doesnt exist at all! */
\r CMD_USER_DELETED = 3 /* User was deleted - DEPRECIATED */
\r};
\r\r/** For commands which should not be replicated to other
\r * servers, we usually return CMD_FAILURE. this isnt readable,
\r * so we define this alias for CMD_FAILURE called
\r * CMD_LOCALONLY, which of course does the same thing but is
\r * much more readable.
\r */
\r#define CMD_LOCALONLY CMD_FAILURE
\r\r\r/** A structure that defines a command. Every command available
\r * in InspIRCd must be defined as derived from command_t.
\r */
\rclass CoreExport command_t : public Extensible
\r{
\r protected:
\r /** Owner/Creator object
\r */
\r InspIRCd* ServerInstance;
\r public:
\r /** Command name
\r */
\r std::string command;
\r /** User flags needed to execute the command or 0
\r */
\r char flags_needed;
\r /** Minimum number of parameters command takes
\r */
\r int min_params;
\r /** used by /stats m
\r */
\r long use_count;
\r /** used by /stats m
\r */
\r float total_bytes;
\r /** used for resource tracking between modules
\r */
\r std::string source;
\r /** True if the command is disabled to non-opers
\r */
\r bool disabled;
\r /** True if the command can be issued before registering
\r */
\r bool works_before_reg;
\r /** Syntax string for the command, displayed if non-empty string.
\r * This takes place of the text in the 'not enough parameters' numeric.
\r */
\r std::string syntax;
\r\r /** Create a new command.
\r * @param Instance Pointer to creator class
\r * @param cmd Command name. This must be UPPER CASE.
\r * @param flags User modes required to execute the command.
\r * For oper only commands, set this to 'o', otherwise use 0.
\r * @param minpara Minimum parameters required for the command.
\r * @param before_reg If this is set to true, the command will
\r * be allowed before the user is 'registered' (has sent USER,
\r * NICK, optionally PASS, and been resolved).
\r */
\r command_t(InspIRCd* Instance, const std::string &cmd, char flags, int minpara, int before_reg = false) : ServerInstance(Instance), command(cmd), flags_needed(flags), min_params(minpara), disabled(false), works_before_reg(before_reg)
\r {
\r use_count = 0;
\r total_bytes = 0;
\r source = "<core>";
\r syntax = "";
\r }
\r\r /** Handle the command from a user.
\r * @param parameters The parameters for the command.
\r * @param pcnt The number of parameters available in 'parameters'
\r * @param user The user who issued the command.
\r * @return Return CMD_SUCCESS on success, or CMD_FAILURE on failure.
\r * If the command succeeds but should remain local to this server,
\r * return CMD_LOCALONLY.
\r */
\r virtual CmdResult Handle(const char** parameters, int pcnt, userrec* user) = 0;
\r\r /** Handle an internal request from another command, the core, or a module
\r * @param Command ID
\r * @param Zero or more parameters, whos form is specified by the command ID.
\r * @return Return CMD_SUCCESS on success, or CMD_FAILURE on failure.
\r * If the command succeeds but should remain local to this server,
\r * return CMD_LOCALONLY.
\r */
\r virtual CmdResult HandleInternal(const unsigned int id, const std::deque<classbase*> ¶ms)
\r {
\r return CMD_INVALID;
\r }
\r\r /** Handle the command from a server.
\r * Not currently used in this version of InspIRCd.
\r * @param parameters The parameters given
\r * @param pcnt The number of parameters available
\r * @param servername The server name which issued the command
\r * @return Return CMD_SUCCESS on success, or CMD_FAILURE on failure.
\r * If the command succeeds but should remain local to this server,
\r * return CMD_LOCALONLY.
\r */
\r virtual CmdResult HandleServer(const char** parameters, int pcnt, const std::string &servername)
\r {
\r return CMD_INVALID;
\r }
\r\r /** Disable or enable this command.
\r * @param setting True to disable the command.
\r */
\r void Disable(bool setting)
\r {
\r disabled = setting;
\r }
\r\r /** Obtain this command's disable state.
\r * @return true if the command is currently disabled
\r * (disabled commands can be used only by operators)
\r */
\r bool IsDisabled()
\r {
\r return disabled;
\r }
\r\r /** @return true if the command works before registration.
\r */
\r bool WorksBeforeReg()
\r {
\r return works_before_reg;
\r }
\r\r /** Standard constructor gubbins
\r */
\r virtual ~command_t() {}
\r};
\r\r/** A hash of commands used by the core
\r */
\rtypedef nspace::hash_map<std::string,command_t*> command_table;
\r\r#endif
\r\r