diff options
author | Attila Molnar <attilamolnar@hush.com> | 2014-01-26 13:12:01 +0100 |
---|---|---|
committer | Attila Molnar <attilamolnar@hush.com> | 2014-01-26 13:12:01 +0100 |
commit | 3fef0ed889eecb40b96a597924254560c81d4a09 (patch) | |
tree | 78f1d41e26cd2b9f9a91442ef9ccc78683bad315 /include | |
parent | 92cc388aebd55245b24aef5950afe845feffe9e2 (diff) |
Add ProtocolInterface::BroadcastEncap() and infrastructure for manually forwarding ENCAPs
Diffstat (limited to 'include')
-rw-r--r-- | include/command_parse.h | 4 | ||||
-rw-r--r-- | include/ctables.h | 6 | ||||
-rw-r--r-- | include/protocol.h | 10 |
3 files changed, 19 insertions, 1 deletions
diff --git a/include/command_parse.h b/include/command_parse.h index 6682bc4fb..70544b0c8 100644 --- a/include/command_parse.h +++ b/include/command_parse.h @@ -49,13 +49,15 @@ class CoreExport CommandParser * @param commandname The command to find. This should be in uppercase. * @param parameters Parameter list * @param user The user to call the handler on behalf of + * @param cmd If non-NULL and the command was executed it is set to the command handler, + * otherwise it isn't written to. * @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 * and called, but the command did not complete successfully, and it will return CMD_INVALID if the * 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 std::vector<std::string>& parameters, User *user); + CmdResult CallHandler(const std::string& commandname, const std::vector<std::string>& parameters, User* user, Command** cmd = NULL); /** Get the handler function for a command. * @param commandname The command required. Always use uppercase for this parameter. diff --git a/include/ctables.h b/include/ctables.h index 81b841e81..a69f5c86f 100644 --- a/include/ctables.h +++ b/include/ctables.h @@ -224,8 +224,14 @@ class CoreExport CommandBase : public ServiceProvider class CoreExport Command : public CommandBase { public: + /** If true, the command will not be forwarded by the linking module even if it comes via ENCAP. + * Can be used to forward commands before their effects. + */ + bool force_manual_route; + Command(Module* me, const std::string& cmd, unsigned int minpara = 0, unsigned int maxpara = 0) : CommandBase(me, cmd, minpara, maxpara) + , force_manual_route(false) { } diff --git a/include/protocol.h b/include/protocol.h index 4c58c78ba..01eb145f1 100644 --- a/include/protocol.h +++ b/include/protocol.h @@ -68,6 +68,16 @@ class CoreExport ProtocolInterface */ virtual bool SendEncapsulatedData(const std::string& targetmask, const std::string& cmd, const parameterlist& params, User* source = NULL) { return false; } + /** Send an ENCAP message to all servers. + * See the protocol documentation for the purpose of ENCAP. + * @param cmd The ENCAP subcommand + * @param params List of string parameters which are dependant on the subcommand + * @param source The source of the message (prefix), must be a local user or a user behind 'omit' + * or NULL which is equivalent to the local server + * @param omit If non-NULL the message won't be sent in the direction of this server, useful for forwarding messages + */ + virtual void BroadcastEncap(const std::string& cmd, const parameterlist& params, User* source = NULL, User* omit = NULL) { } + /** Send metadata for a channel to other linked servers. * @param chan The channel to send metadata for * @param key The 'key' of the data, e.g. "swhois" for swhois desc on a user |