34 const boost::shared_ptr<CalloutManager>& manager)
35 : dl_handle_(NULL), index_(index), manager_(manager),
41 "instantiating a LibraryManager object");
53 : dl_handle_(NULL), index_(-1), manager_(), library_name_(name)
76 dl_handle_ = dlopen(library_name_.c_str(), RTLD_NOW | RTLD_LOCAL);
77 if (dl_handle_ == NULL) {
82 return (dl_handle_ != NULL);
92 if (dl_handle_ != NULL) {
93 status = dlclose(dl_handle_);
101 return (status == 0);
112 int version = KEA_HOOKS_VERSION - 1;
120 if (
version == KEA_HOOKS_VERSION) {
123 .arg(library_name_).arg(
version);
128 .arg(
version).arg(KEA_HOOKS_VERSION);
143 manager_->setLibraryIndex(index_);
147 for (
size_t i = 0; i < hook_names.size(); ++i) {
150 void* dlsym_ptr = dlsym(dl_handle_, hook_names[i].c_str());
154 manager_->getLibraryHandle().registerCallout(hook_names[i],
157 HOOKS_STD_CALLOUT_REGISTERED).arg(library_name_)
158 .arg(hook_names[i]).arg(dlsym_ptr);
179 manager_->setLibraryIndex(index_);
180 status = (*pc.
loadPtr())(manager_->getLibraryHandle());
183 .arg(library_name_).arg(ex.
what());
225 .arg(library_name_).arg(ex.
what());
318 if (dl_handle_ != NULL) {
330 manager_->setLibraryIndex(index_);
331 for (
size_t i = 0; i < hooks.size(); ++i) {
332 bool removed = manager_->deregisterAllCallouts(hooks[i]);
335 .arg(hooks[i]).arg(library_name_);
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.
LibraryManager(const std::string &name, int index, const boost::shared_ptr< CalloutManager > &manager)
Constructor.
bool unloadLibrary()
Unloads a library.
bool loadLibrary()
Loads a library.
bool openLibrary()
Open library.
bool closeLibrary()
Close library.
static bool validateLibrary(const std::string &name)
Validate library.
~LibraryManager()
Destructor.
bool checkVersion() const
Check library version.
void registerStandardCallouts()
Register standard callouts.
bool runLoad()
Run the load function if present.
bool runUnload()
Run the unload function if present.
Local class for conversion of void pointers to function pointers.
unload_function_ptr unloadPtr() const
Return pointer to unload function.
version_function_ptr versionPtr() const
Return pointer to version function.
CalloutPtr calloutPtr() const
Return pointer to callout function.
load_function_ptr loadPtr() const
Return pointer to load function.
static ServerHooks & getServerHooks()
Return ServerHooks object.
std::vector< std::string > getHookNames() const
Get hook names.
static void logDuplicatedMessages()
List duplicated log messages.
static void loadDictionary(bool ignore_duplicates=false)
Run-Time Initialization.
#define isc_throw(type, stream)
A shortcut macro to insert known values into exception arguments.
int version()
returns Kea hooks version.
Logging initialization functions.
#define LOG_ERROR(LOGGER, MESSAGE)
Macro to conveniently test error output and log it.
#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.
void hooksStaticLinkInit()
User-Library Initialization for Statically-Linked Kea.
isc::log::Logger hooks_logger("hooks")
Hooks Logger.
const int HOOKS_DBG_CALLS
const int HOOKS_DBG_TRACE
Hooks debug Logging levels.
void initLogger(const string &root, isc::log::Severity severity, int dbglevel, const char *file, bool buffer)
Run-time initialization.
bool isLoggingInitialized()
Is logging initialized?
Defines the logger used by the top-level component of kea-dhcp-ddns.