X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=include%2Fctables.h;h=315b38f4396e08af8b8e7fc30473fdcc6a67e587;hb=0155dd1e97f323668442d3fc07b927e8f9004dbe;hp=9018d9c351981be442df857fcb630c74ab43e17f;hpb=b6dbd6caab62bc2c0d11ce5a45d511611eb9c2ef;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/include/ctables.h b/include/ctables.h index 9018d9c35..315b38f43 100644 --- a/include/ctables.h +++ b/include/ctables.h @@ -21,6 +21,7 @@ enum CmdResult CMD_FAILURE = 0, /* Command exists, but failed */ CMD_SUCCESS = 1, /* Command exists, and succeeded */ CMD_INVALID = 2 /* Command doesnt exist at all! */ +#define CMD_LOCALONLY CMD_FAILURE }; /** Translation types for translation of parameters to UIDs. @@ -36,14 +37,35 @@ enum TranslateType TR_CUSTOM /* Custom translation handled by EncodeParameter/DecodeParameter */ }; -/** For commands which should not be replicated to other - * servers, we usually return CMD_FAILURE. this isnt readable, - * so we define this alias for CMD_FAILURE called - * CMD_LOCALONLY, which of course does the same thing but is - * much more readable. - */ -#define CMD_LOCALONLY CMD_FAILURE +enum RouteType +{ + ROUTE_TYPE_LOCALONLY, + ROUTE_TYPE_BROADCAST, + ROUTE_TYPE_UNICAST, + ROUTE_TYPE_OPT_BCAST, + ROUTE_TYPE_OPT_UCAST +}; + +struct RouteDescriptor +{ + const RouteType type; + /** For unicast, the destination server's name + */ + const std::string serverdest; + RouteDescriptor(RouteType t, const std::string d) + : type(t), serverdest(d) { } +}; +/** Do not route this command */ +#define ROUTE_LOCALONLY (RouteDescriptor(ROUTE_TYPE_LOCALONLY, "")) +/** Route this command to all servers, fail if not understood */ +#define ROUTE_BROADCAST (RouteDescriptor(ROUTE_TYPE_BROADCAST, "")) +/** Route this command to a single server (do nothing if own server name specified) */ +#define ROUTE_UNICAST(x) (RouteDescriptor(ROUTE_TYPE_UNICAST, x)) +/** Route this command to all servers, ignore if not understood */ +#define ROUTE_OPT_BCAST (RouteDescriptor(ROUTE_TYPE_OPT_BCAST, "")) +/** Route this command to a single server, ignore if not understood */ +#define ROUTE_OPT_UCAST(x) (RouteDescriptor(ROUTE_TYPE_OPT_UCAST, x)) /** A structure that defines a command. Every command available * in InspIRCd must be defined as derived from Command. @@ -57,7 +79,10 @@ class CoreExport Command : public Extensible public: /** Command name */ - std::string command; + std::string command; + + /** Creator module, NULL for core commands */ + Module* creator; /** User flags needed to execute the command or 0 */ @@ -78,12 +103,8 @@ class CoreExport Command : public Extensible long double use_count; /** used by /stats m - */ - long double total_bytes; - - /** used for resource tracking between modules */ - std::string source; + long double total_bytes; /** True if the command is disabled to non-opers */ @@ -118,22 +139,20 @@ class CoreExport Command : public Extensible * be allowed before the user is 'registered' (has sent USER, * NICK, optionally PASS, and been resolved). */ - Command(InspIRCd* Instance, const std::string &cmd, const char *flags, int minpara, bool before_reg = false, int penalty = 1) : ServerInstance(Instance), command(cmd), flags_needed(flags ? *flags : 0), min_params(minpara), max_params(0), disabled(false), works_before_reg(before_reg), Penalty(penalty) + Command(InspIRCd* Instance, Module* me, const std::string &cmd, const char *flags, int minpara, bool before_reg = false, int penalty = 1) : + ServerInstance(Instance), command(cmd), creator(me), flags_needed(flags ? *flags : 0), + min_params(minpara), max_params(0), disabled(false), works_before_reg(before_reg), Penalty(penalty) { use_count = 0; total_bytes = 0; - source = ""; - syntax = ""; - translation.clear(); } - Command(InspIRCd* Instance, const std::string &cmd, const char *flags, int minpara, int maxpara, bool before_reg = false, int penalty = 1) : ServerInstance(Instance), command(cmd), flags_needed(flags ? *flags : 0), min_params(minpara), max_params(maxpara), disabled(false), works_before_reg(before_reg), Penalty(penalty) + Command(InspIRCd* Instance, Module* me, const std::string &cmd, const char *flags, int minpara, int maxpara, bool before_reg = false, int penalty = 1) : + ServerInstance(Instance), command(cmd), creator(me), flags_needed(flags ? *flags : 0), + min_params(minpara), max_params(maxpara), disabled(false), works_before_reg(before_reg), Penalty(penalty) { use_count = 0; total_bytes = 0; - source = ""; - syntax = ""; - translation.clear(); } /** Handle the command from a user. @@ -145,6 +164,11 @@ class CoreExport Command : public Extensible */ virtual CmdResult Handle(const std::vector& parameters, User* user) = 0; + virtual RouteDescriptor GetRouting(User* user, const std::vector& parameters) + { + return ROUTE_BROADCAST; + } + /** 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.