diff options
Diffstat (limited to 'src/lib/hooks/library_handle.h')
-rw-r--r-- | src/lib/hooks/library_handle.h | 33 |
1 files changed, 30 insertions, 3 deletions
diff --git a/src/lib/hooks/library_handle.h b/src/lib/hooks/library_handle.h index a94ad66fdf..5dfad2a909 100644 --- a/src/lib/hooks/library_handle.h +++ b/src/lib/hooks/library_handle.h @@ -1,4 +1,4 @@ -// Copyright (C) 2013-2016 Internet Systems Consortium, Inc. ("ISC") +// Copyright (C) 2013-2017 Internet Systems Consortium, Inc. ("ISC") // // This Source Code Form is subject to the terms of the Mozilla Public // License, v. 2.0. If a copy of the MPL was not distributed with this @@ -40,6 +40,22 @@ extern "C" { /// called, the CalloutManager uses that information to set the "current /// library": the registration functions only operator on data whose /// associated library is equal to the "current library".) +/// +/// As of Kea 1.3.0 release, the @ref LibraryHandle can be used by the hook +/// libraries to install control command handlers and dynamically register +/// hook points with which the handlers are associated. For example, if the +/// hook library supports control-command 'foo-bar' it should register its +/// handler similarly to this: +/// @code +/// int load(LibraryHandle& libhandle) { +/// libhandle.registerCommandCallout("foo-bar", foo_bar_handler); +/// return (0); +/// } +/// @endcode +/// +/// which will result in automatic creation of the hook point for the command +/// (if one doesn't exist) and associating the callout 'foo_bar_handler' with +/// this hook point as a handler for the command. class LibraryHandle { public: @@ -79,6 +95,17 @@ public: /// is of the wrong size. void registerCallout(const std::string& name, CalloutPtr callout); + /// @brief Register control command handler + /// + /// Registers control command handler by creating a hook point for this + /// command (if it doesn't exist) and associating the callout as a command + /// handler. It is possible to register multiple command handlers for the + /// same control command because command handlers are implemented as callouts. + /// + /// @param command_name Command name for which handler should be installed. + /// @param callout Pointer to the command handler implemented as a callout. + void registerCommandCallout(const std::string& command_name, CalloutPtr callout); + /// @brief De-Register a callout on a hook /// /// Searches through the functions registered by the current library with @@ -135,10 +162,10 @@ public: /// } ///] /// - /// The first library has no parameters, so regardles of the name + /// The first library has no parameters, so regardless of the name /// specified, for that library getParameter will always return NULL. /// - /// For the second paramter, depending the following calls will return: + /// For the second parameter, depending the following calls will return: /// - x = getParameter("mail") will return instance of /// isc::data::StringElement. The content can be accessed with /// x->stringValue() and will return std::string. |