diff options
| author | Jiri Moskovcak <jmoskovc@redhat.com> | 2009-08-06 16:19:40 +0200 |
|---|---|---|
| committer | Jiri Moskovcak <jmoskovc@redhat.com> | 2009-08-06 16:19:40 +0200 |
| commit | b9c0e8f9f8b3148e7ffc95b4eaf25299d9ead2a2 (patch) | |
| tree | e51067a3a4019221cabf5b710742d14f948b5310 /src | |
| parent | 84348ccea878d509f838927e1bf393e5443d3ac8 (diff) | |
| parent | b64e1671afd1cd1c25604ffb3bf6f681a864b639 (diff) | |
| download | abrt-b9c0e8f9f8b3148e7ffc95b4eaf25299d9ead2a2.tar.gz abrt-b9c0e8f9f8b3148e7ffc95b4eaf25299d9ead2a2.tar.xz abrt-b9c0e8f9f8b3148e7ffc95b4eaf25299d9ead2a2.zip | |
Merge branch 'master' of ssh://git.fedorahosted.org/git/abrt
Diffstat (limited to 'src')
| -rw-r--r-- | src/Daemon/ABRTPlugin.cpp | 86 | ||||
| -rw-r--r-- | src/Daemon/ABRTPlugin.h | 113 | ||||
| -rw-r--r-- | src/Daemon/DynamicLibrary.cpp | 59 | ||||
| -rw-r--r-- | src/Daemon/DynamicLibrary.h | 62 | ||||
| -rw-r--r-- | src/Daemon/Makefile.am | 2 |
5 files changed, 322 insertions, 0 deletions
diff --git a/src/Daemon/ABRTPlugin.cpp b/src/Daemon/ABRTPlugin.cpp new file mode 100644 index 0000000..f2afa41 --- /dev/null +++ b/src/Daemon/ABRTPlugin.cpp @@ -0,0 +1,86 @@ +/* + ABRTPlugin.cpp + + Copyright (C) 2009 Zdenek Prikryl (zprikryl@redhat.com) + Copyright (C) 2009 RedHat inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#include "ABRTPlugin.h" + +CABRTPlugin::CABRTPlugin(const std::string& pLibPath) : + m_pDynamicLibrary(NULL), + m_pPluginInfo(NULL), + m_pFnPluginNew(NULL) +{ + m_pDynamicLibrary = new CDynamicLibrary(pLibPath); + m_pPluginInfo = reinterpret_cast<p_plugin_info_t>(m_pDynamicLibrary->FindSymbol("plugin_info")); + m_pFnPluginNew = reinterpret_cast<p_fn_plugin_new_t>(m_pDynamicLibrary->FindSymbol("plugin_new")); +} + +CABRTPlugin::~CABRTPlugin() +{ + if (m_pDynamicLibrary != NULL) + { + delete m_pDynamicLibrary; + } +} + +const std::string& CABRTPlugin::GetVersion() +{ + return m_pPluginInfo->m_sVersion; +} + +const int CABRTPlugin::GetMagicNumber() +{ + return m_pPluginInfo->m_nMagicNumber; +} + +const std::string& CABRTPlugin::GetName() +{ + return m_pPluginInfo->m_sName; +} + +const std::string& CABRTPlugin::GetDescription() +{ + return m_pPluginInfo->m_sDescription; +} + +const std::string& CABRTPlugin::GetEmail() +{ + return m_pPluginInfo->m_sEmail; +} + +const std::string& CABRTPlugin::GetWWW() +{ + return m_pPluginInfo->m_sWWW; +} + +const std::string& CABRTPlugin::GetGTKBuilder() +{ + return m_pPluginInfo->m_sGTKBuilder; +} + + +const plugin_type_t CABRTPlugin::GetType() +{ + return m_pPluginInfo->m_Type; +} + +CPlugin* CABRTPlugin::PluginNew() +{ + return m_pFnPluginNew(); +} diff --git a/src/Daemon/ABRTPlugin.h b/src/Daemon/ABRTPlugin.h new file mode 100644 index 0000000..cdf72bb --- /dev/null +++ b/src/Daemon/ABRTPlugin.h @@ -0,0 +1,113 @@ +/* + ABRTPlugin.h - header file for abrt plugin. + + Copyright (C) 2009 Zdenek Prikryl (zprikryl@redhat.com) + Copyright (C) 2009 RedHat inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + + +#ifndef ABRTPLUGIN_H_ +#define ABRTPLUGIN_H_ + +#include <string> +#include "DynamicLibrary.h" +#include "Plugin.h" + +/** + * CABRTPlugin class. A class which contains a loaded plugin. + */ +class CABRTPlugin +{ + private: + + typedef const plugin_info_t* p_plugin_info_t; + typedef CPlugin* (*p_fn_plugin_new_t)(); + + /** + * A class containing library which contains plugin functionality. + * @see DynamicLibrary.h + */ + CDynamicLibrary* m_pDynamicLibrary; + /** + * A pointer to struc containing information about plugin. + */ + p_plugin_info_t m_pPluginInfo; + /** + * A pointer to function, which creates new instances of plugin. + */ + p_fn_plugin_new_t m_pFnPluginNew; + + public: + /** + * A constructor. + * The constructor loads a plugin + * @param pLibPath a path to a plugin + */ + CABRTPlugin(const std::string& pLibPath); + /** + * A destructor. + */ + ~CABRTPlugin(); + /** + * It is used for getting loaded plugin's version. + * @return plugin version + */ + const std::string& GetVersion(); + /** + * It is used for getting loaded plugin's magic number. + * @return magic number + */ + const int GetMagicNumber(); + /** + * It is used for getting loaded plugin's name. + * @return magic number + */ + const std::string& GetName(); + /** + * It is used for getting loaded plugin's description. + * @return magic number + */ + const std::string& GetDescription(); + /** + * It is used for getting an author email of loaded plugin. + * @return description + */ + const std::string& GetEmail(); + /** + * It is used for getting a home page of loaded plugin. + * @return home page + */ + const std::string& GetWWW(); + /** + * It is used for getting a path to gui description. + * @return home page + */ + const std::string& GetGTKBuilder(); + /** + * It is used for getting loaded plugin's type. + * @return type + */ + const plugin_type_t GetType(); + /** + * It is used fot getting of a new instance of loaded plugin + * @return pointer to new allocated instance of plugin. A caller + * has to delete it. + */ + CPlugin* PluginNew(); +}; + +#endif /*ABRTPLUGIN_H_*/ diff --git a/src/Daemon/DynamicLibrary.cpp b/src/Daemon/DynamicLibrary.cpp new file mode 100644 index 0000000..ffb2a6e --- /dev/null +++ b/src/Daemon/DynamicLibrary.cpp @@ -0,0 +1,59 @@ +/* + DynamicLybrary.cpp + + Copyright (C) 2009 Zdenek Prikryl (zprikryl@redhat.com) + Copyright (C) 2009 RedHat inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#include "DynamicLibrary.h" +#include "ABRTException.h" +#include <iostream> +#include <dlfcn.h> + +CDynamicLibrary::CDynamicLibrary(const std::string& pPath) : + m_pHandle(NULL) +{ + Load(pPath); +} + +CDynamicLibrary::~CDynamicLibrary() +{ + if (m_pHandle != NULL) + { + dlclose(m_pHandle); + m_pHandle = NULL; + } +} + +void CDynamicLibrary::Load(const std::string& pPath) +{ + m_pHandle = dlopen(pPath.c_str(), RTLD_NOW); + if (m_pHandle == NULL) + { + throw CABRTException(EXCEP_DL, "CDynamicLibrary::Load(): Cannot load " + pPath + " : " + std::string(dlerror())); + } +} + +void* CDynamicLibrary::FindSymbol(const std::string& pName) +{ + void* sym = dlsym(m_pHandle, pName.c_str()); + if (sym == NULL) + { + throw CABRTException(EXCEP_DL, "CDynamicLibrary::Load(): Cannot find symbol '" + pName + "'"); + } + return sym; +} diff --git a/src/Daemon/DynamicLibrary.h b/src/Daemon/DynamicLibrary.h new file mode 100644 index 0000000..f3a95f5 --- /dev/null +++ b/src/Daemon/DynamicLibrary.h @@ -0,0 +1,62 @@ +/* + DynamicLybrary.h - header file for dynamic lybrarby wraper. It uses libdl. + + Copyright (C) 2009 Zdenek Prikryl (zprikryl@redhat.com) + Copyright (C) 2009 RedHat inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + + +#ifndef DYNAMICLIBRARYH_ +#define DYNAMICLIBRARYH_ + +#include <string> + +/** + * A class. It contains one dynamic library. + */ +class CDynamicLibrary +{ + private: + /** + * A pointer to library. + */ + void* m_pHandle; + /** + * A method, which loads a library. + * @param pPath A path to the library. + */ + void Load(const std::string& pPath); + public: + /** + * A constructor. + * @param pPath A path to the library. + */ + CDynamicLibrary(const std::string& pPath); + /** + * A destructor. + */ + ~CDynamicLibrary(); + /** + * A method, which tries to find a symbol in a library. If it successes + * then a non-NULL pointer is returned, otherwise NULL is returned. + * @param pName A symbol name. + * @return A pointer where a symbol name is loaded. + */ + void* FindSymbol(const std::string& pName); +}; + +#endif /*DYNAMICLIBRARYH_*/ diff --git a/src/Daemon/Makefile.am b/src/Daemon/Makefile.am index 41d60a7..7964177 100644 --- a/src/Daemon/Makefile.am +++ b/src/Daemon/Makefile.am @@ -1,6 +1,8 @@ sbin_PROGRAMS = abrt abrt_SOURCES = \ + DynamicLibrary.cpp DynamicLibrary.h \ + ABRTPlugin.cpp ABRTPlugin.h \ PluginManager.cpp PluginManager.h \ MiddleWare.cpp MiddleWare.h \ CrashWatcher.cpp CrashWatcher.h \ |
