summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJiri Moskovcak <jmoskovc@redhat.com>2009-08-06 16:19:40 +0200
committerJiri Moskovcak <jmoskovc@redhat.com>2009-08-06 16:19:40 +0200
commitb9c0e8f9f8b3148e7ffc95b4eaf25299d9ead2a2 (patch)
treee51067a3a4019221cabf5b710742d14f948b5310 /src
parent84348ccea878d509f838927e1bf393e5443d3ac8 (diff)
parentb64e1671afd1cd1c25604ffb3bf6f681a864b639 (diff)
downloadabrt-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.cpp86
-rw-r--r--src/Daemon/ABRTPlugin.h113
-rw-r--r--src/Daemon/DynamicLibrary.cpp59
-rw-r--r--src/Daemon/DynamicLibrary.h62
-rw-r--r--src/Daemon/Makefile.am2
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 \