Kea  1.9.9-git
base_command_mgr.h
Go to the documentation of this file.
1 // Copyright (C) 2017-2020 Internet Systems Consortium, Inc. ("ISC")
2 //
3 // This Source Code Form is subject to the terms of the Mozilla Public
4 // License, v. 2.0. If a copy of the MPL was not distributed with this
5 // file, You can obtain one at http://mozilla.org/MPL/2.0/.
6 
7 #ifndef BASE_COMMAND_MGR_H
8 #define BASE_COMMAND_MGR_H
9 
10 #include <cc/data.h>
11 #include <exceptions/exceptions.h>
12 #include <functional>
13 #include <map>
14 #include <string>
15 
16 namespace isc {
17 namespace config {
18 
21 public:
22  InvalidCommandHandler(const char* file, size_t line, const char* what) :
23  isc::Exception(file, line, what) { };
24 };
25 
27 class InvalidCommandName : public Exception {
28 public:
29  InvalidCommandName(const char* file, size_t line, const char* what) :
30  isc::Exception(file, line, what) { };
31 };
32 
73 public:
74 
82  typedef std::function<isc::data::ConstElementPtr (const std::string& name,
84 
95  typedef std::function<isc::data::ConstElementPtr (const std::string& name,
96  const isc::data::ConstElementPtr& params,
98 
103  BaseCommandMgr();
104 
106  virtual ~BaseCommandMgr() { };
107 
125 
130  void registerCommand(const std::string& cmd, CommandHandler handler);
131 
142  void registerExtendedCommand(const std::string& cmd,
143  ExtendedCommandHandler handler);
144 
148  void deregisterCommand(const std::string& cmd);
149 
154  void deregisterAll();
155 
156 protected:
157 
174  handleCommand(const std::string& cmd_name,
175  const isc::data::ConstElementPtr& params,
176  const isc::data::ConstElementPtr& original_cmd);
177 
178  struct HandlersPair {
179  CommandHandler handler;
180  ExtendedCommandHandler extended_handler;
181  };
182 
184  typedef std::map<std::string, HandlersPair> HandlerContainer;
185 
187  HandlerContainer handlers_;
188 
189 private:
190 
202  listCommandsHandler(const std::string& name,
203  const isc::data::ConstElementPtr& params);
204 };
205 
206 } // end of namespace isc::config
207 } // end of namespace isc
208 
209 #endif
InvalidCommandHandler(const char *file, size_t line, const char *what)
void deregisterAll()
Auxiliary method that removes all installed commands.
std::map< std::string, HandlersPair > HandlerContainer
Type of the container for command handlers.
virtual ~BaseCommandMgr()
Destructor.
HandlerContainer handlers_
Container for command handlers.
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.
void deregisterCommand(const std::string &cmd)
Deregisters specified command handler.
boost::shared_ptr< const Element > ConstElementPtr
Definition: data.h:23
InvalidCommandName(const char *file, size_t line, const char *what)
Commands Manager, responsible for processing external commands.
virtual const char * what() const
Returns a C-style character string of the cause of the exception.
Exception indicating that the command name is not valid.
This is a base class for exceptions thrown from the DNS library module.
Defines the logger used by the top-level component of kea-dhcp-ddns.
virtual isc::data::ConstElementPtr processCommand(const isc::data::ConstElementPtr &cmd)
Triggers command processing.
Exception indicating that the handler specified is not valid.
std::function< isc::data::ConstElementPtr(const std::string &name, const isc::data::ConstElementPtr &params, const isc::data::ConstElementPtr &original)> ExtendedCommandHandler
Defines extended command handler type.
virtual isc::data::ConstElementPtr handleCommand(const std::string &cmd_name, const isc::data::ConstElementPtr &params, 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 &params)> CommandHandler
Defines command handler type.