Kea 2.7.6
|
Command Manager which can delegate commands to a hook library. More...
#include <hooked_command_mgr.h>
Public Member Functions | |
HookedCommandMgr () | |
Constructor. | |
Public Member Functions inherited from isc::config::BaseCommandMgr | |
BaseCommandMgr () | |
Constructor. | |
virtual | ~BaseCommandMgr () |
Destructor. | |
void | deregisterAll () |
Auxiliary method that removes all installed commands. | |
void | deregisterCommand (const std::string &cmd) |
Deregisters specified command handler. | |
virtual isc::data::ConstElementPtr | processCommand (const isc::data::ConstElementPtr &cmd) |
Triggers command processing. | |
void | registerCommand (const std::string &cmd, CommandHandler handler) |
Registers specified command handler for a given command. | |
void | registerExtendedCommand (const std::string &cmd, ExtendedCommandHandler handler) |
Registers specified command handler for a given command. | |
Protected Member Functions | |
bool | delegateCommandToHookLibrary (const std::string &cmd_name, const isc::data::ConstElementPtr ¶ms, const isc::data::ConstElementPtr &original_cmd, isc::data::ElementPtr &answer) |
Handles the command within the hooks libraries. | |
virtual isc::data::ConstElementPtr | handleCommand (const std::string &cmd_name, const isc::data::ConstElementPtr ¶ms, const isc::data::ConstElementPtr &original_cmd) |
Handles the command having a given name and arguments. | |
Protected Member Functions inherited from isc::config::BaseCommandMgr |
Additional Inherited Members | |
Public Types inherited from isc::config::BaseCommandMgr | |
typedef std::function< isc::data::ConstElementPtr(const std::string &name, const isc::data::ConstElementPtr ¶ms)> | CommandHandler |
Defines command handler type. | |
typedef std::function< isc::data::ConstElementPtr(const std::string &name, const isc::data::ConstElementPtr ¶ms, const isc::data::ConstElementPtr &original)> | ExtendedCommandHandler |
Defines extended command handler type. | |
Static Public Member Functions inherited from isc::config::BaseCommandMgr | |
static std::string | getHash (const isc::data::ConstElementPtr &config) |
returns a hash of a given Element structure | |
Protected Types inherited from isc::config::BaseCommandMgr | |
typedef std::map< std::string, HandlersPair > | HandlerContainer |
Type of the container for command handlers. | |
Protected Attributes inherited from isc::config::BaseCommandMgr | |
HandlerContainer | handlers_ |
Container for command handlers. | |
Command Manager which can delegate commands to a hook library.
This class extends BaseCommandMgr with the logic to delegate the commands to a hook library if the hook library is installed and provides command handlers for the control API.
The command handlers are registered by a hook library by calling isc::hooks::LibraryHandle::registerCommandCallout. This call creates a hook point for this command (if one doesn't exist) and then registers the specified handler(s). When the HookedCommandMgr receives a command for processing it calls the isc::hooks::HooksManager::commandHandlersPresent to check if there are handlers present for this command. If so, the HookedCommandMgr calls isc::hooks::HooksManager::callCommandHandlers to process the command in the hooks libraries. If command handlers are not installed for this command, the HookedCommandMgr will try to process the command on its own.
The isc::hooks::CalloutHandle::CalloutNextStep flag setting by the command handlers does NOT have any influence on the operation of the HookedCommandMgr, i.e. it will always skip processing command on its own if the command handlers are present for the given command, even if the handlers return an error code.
Definition at line 39 of file hooked_command_mgr.h.
isc::config::HookedCommandMgr::HookedCommandMgr | ( | ) |
Constructor.
Initializes callout handle used by the Command Manager.
Definition at line 24 of file hooked_command_mgr.cc.
|
protected |
Handles the command within the hooks libraries.
This method checks if the hooks libraries are installed which implement command handlers for the specified command to be processed. If the command handlers are present, this method calls them to create a response and then passes the response back within the answer
argument.
Values of all arguments can be modified by the hook library.
cmd_name | Command name. | |
params | Command arguments. | |
original_cmd | Original command received. | |
[out] | answer | Command processing result returned by the hook. |
Definition at line 29 of file hooked_command_mgr.cc.
References isc::hooks::HooksManager::callCommandHandlers(), isc::hooks::HooksManager::commandHandlersPresent(), isc::hooks::HooksManager::createCalloutHandle(), isc::config::createCommand(), and isc::hooks::CalloutHandle::NEXT_STEP_CONTINUE.
Referenced by isc::agent::CtrlAgentCommandMgr::handleCommand(), and handleCommand().
|
protectedvirtual |
Handles the command having a given name and arguments.
This method calls HookedCommandMgr::delegateCommandToHookLibrary to try to process the command with the hook libraries, if they are installed.
cmd_name | Command name. |
params | Command arguments. |
original_cmd | Original command received. |
Reimplemented from isc::config::BaseCommandMgr.
Reimplemented in isc::agent::CtrlAgentCommandMgr.
Definition at line 66 of file hooked_command_mgr.cc.
References isc::config::combineCommandsLists(), isc::hooks::HooksManager::commandHandlersPresent(), isc::config::CONTROL_RESULT_SUCCESS, isc::data::Element::create(), isc::config::createAnswer(), isc::data::Element::createList(), delegateCommandToHookLibrary(), isc::hooks::ServerHooks::getServerHooksPtr(), isc::config::BaseCommandMgr::handleCommand(), and isc::hooks::ServerHooks::hookToCommandName().
Referenced by isc::agent::CtrlAgentCommandMgr::handleCommand().