]> git.netwichtig.de Git - user/henk/code/inspircd.git/blob - include/ctables.h
'svn propset -R svn:eol-style CR *' Set to UNIX-style always. Binaries are auto skipp...
[user/henk/code/inspircd.git] / include / ctables.h
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*> &params)\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