18namespace ph = std::placeholders;
23struct BaseCommandMgrHooks {
24 int hook_index_command_processed_;
27 BaseCommandMgrHooks() {
28 hook_index_command_processed_ = HooksManager::registerHook(
"command_processed");
36BaseCommandMgrHooks
Hooks;
44 registerCommand(
"list-commands", std::bind(&BaseCommandMgr::listCommandsHandler,
45 this, ph::_1, ph::_2));
54 HandlerContainer::const_iterator it =
handlers_.find(cmd);
57 <<
"' is already installed.");
62 handlers_.insert(make_pair(cmd, handlers));
74 HandlerContainer::const_iterator it =
handlers_.find(cmd);
77 <<
"' is already installed.");
82 handlers_.insert(make_pair(cmd, handlers));
89 if (cmd ==
"list-commands") {
91 "Can't uninstall internal command 'list-commands'");
94 HandlerContainer::iterator it =
handlers_.find(cmd);
111 std::bind(&BaseCommandMgr::listCommandsHandler,
this, ph::_1, ph::_2));
118 "Command processing failed: NULL command parameter"));
130 if (HooksManager::calloutsPresent(
Hooks.hook_index_command_processed_)) {
136 callout_handle->setArgument(
"name", name);
137 callout_handle->setArgument(
"arguments", arg);
138 callout_handle->setArgument(
"response", response);
141 HooksManager::callCallouts(
Hooks.hook_index_command_processed_,
146 callout_handle->getArgument(
"response", response);
154 std::string(
"Error during command processing: ")
167 "'" + cmd_name +
"' command not supported."));
171 if (it->second.handler) {
172 return (it->second.handler(cmd_name, params));
174 return (it->second.extended_handler(cmd_name, params, original_cmd));
178BaseCommandMgr::listCommandsHandler(
const std::string& ,
182 for (HandlerContainer::const_iterator it =
handlers_.begin();
184 commands->add(Element::create(it->first));
This is a base class for exceptions thrown from the DNS library module.
virtual const char * what() const
Returns a C-style character string of the cause of the exception.
HandlerContainer handlers_
Container for command handlers.
virtual isc::data::ConstElementPtr processCommand(const isc::data::ConstElementPtr &cmd)
Triggers command processing.
std::function< isc::data::ConstElementPtr(const std::string &name, const isc::data::ConstElementPtr ¶ms)> CommandHandler
Defines command handler type.
void registerCommand(const std::string &cmd, CommandHandler handler)
Registers specified command handler for a given command.
BaseCommandMgr()
Constructor.
void deregisterAll()
Auxiliary method that removes all installed commands.
void registerExtendedCommand(const std::string &cmd, ExtendedCommandHandler handler)
Registers specified command handler for a given command.
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.
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.
void deregisterCommand(const std::string &cmd)
Deregisters specified command handler.
Exception indicating that the handler specified is not valid.
Exception indicating that the command name is not valid.
This file contains several functions and constants that are used for handling commands and responses ...
#define isc_throw(type, stream)
A shortcut macro to insert known values into exception arguments.
#define LOG_INFO(LOGGER, MESSAGE)
Macro to conveniently test info output and log it.
#define LOG_WARN(LOGGER, MESSAGE)
Macro to conveniently test warn output and log it.
#define LOG_DEBUG(LOGGER, LEVEL, MESSAGE)
Macro to conveniently test debug output and log it.
const isc::log::MessageID COMMAND_EXTENDED_REGISTERED
const int CONTROL_RESULT_ERROR
Status code indicating a general failure.
const isc::log::MessageID COMMAND_DEREGISTERED
const isc::log::MessageID COMMAND_RECEIVED
std::string parseCommand(ConstElementPtr &arg, ConstElementPtr command)
const isc::log::MessageID COMMAND_PROCESS_ERROR2
const int CONTROL_RESULT_COMMAND_UNSUPPORTED
Status code indicating that the specified command is not supported.
ConstElementPtr createAnswer(const int status_code, const std::string &text, const ConstElementPtr &arg)
const isc::log::MessageID COMMAND_REGISTERED
const int CONTROL_RESULT_SUCCESS
Status code indicating a successful operation.
isc::log::Logger command_logger("commands")
Command processing Logger.
boost::shared_ptr< const Element > ConstElementPtr
boost::shared_ptr< Element > ElementPtr
boost::shared_ptr< CalloutHandle > CalloutHandlePtr
A shared pointer to a CalloutHandle object.
Defines the logger used by the top-level component of kea-lfc.
ExtendedCommandHandler extended_handler