33 LibraryManager::LibraryManager(
const std::string& name,
int index,
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_);
std::vector< std::string > getHookNames() const
Get hook names.
#define LOG_WARN(LOGGER, MESSAGE)
Macro to conveniently test warn output and log it.
static void logDuplicatedMessages()
List duplicated log messages.
bool unloadLibrary()
Unloads a library.
void hooksStaticLinkInit()
User-Library Initialization for Statically-Linked Kea.
#define LOG_INFO(LOGGER, MESSAGE)
Macro to conveniently test info output and log it.
static ServerHooks & getServerHooks()
Return ServerHooks object.
bool loadLibrary()
Loads a library.
version_function_ptr versionPtr() const
Return pointer to version function.
#define LOG_ERROR(LOGGER, MESSAGE)
Macro to conveniently test error output and log it.
static bool validateLibrary(const std::string &name)
Validate library.
bool runUnload()
Run the unload function if present.
virtual const char * what() const
Returns a C-style character string of the cause of the exception.
Local class for conversion of void pointers to function pointers.
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.
bool checkVersion() const
Check library version.
bool isLoggingInitialized()
Is logging initialized?
void registerStandardCallouts()
Register standard callouts.
const int HOOKS_DBG_CALLS
load_function_ptr loadPtr() const
Return pointer to load function.
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.
~LibraryManager()
Destructor.
Logging initialization functions.
isc::log::Logger hooks_logger("hooks")
Hooks Logger.
unload_function_ptr unloadPtr() const
Return pointer to unload function.
#define LOG_DEBUG(LOGGER, LEVEL, MESSAGE)
Macro to conveniently test debug output and log it.
bool runLoad()
Run the load function if present.
CalloutPtr calloutPtr() const
Return pointer to callout function.
bool openLibrary()
Open library.
int version()
returns Kea hooks version.
void initLogger(const string &root, isc::log::Severity severity, int dbglevel, const char *file, bool buffer)
Run-time initialization.
bool closeLibrary()
Close library.
LibraryManager(const std::string &name, int index, const boost::shared_ptr< CalloutManager > &manager)
Constructor.
const int HOOKS_DBG_TRACE
Hooks debug Logging levels.