summaryrefslogtreecommitdiffstats
path: root/lib/MiddleWare
diff options
context:
space:
mode:
authorJiri Moskovcak <jmoskovc@redhat.com>2009-02-05 15:44:20 +0100
committerJiri Moskovcak <jmoskovc@redhat.com>2009-02-05 15:44:20 +0100
commit7a14f59368f7221274bd74504700fc36031e9c3f (patch)
treebd0f99c448a2490265a64f1f50f9d801178795c8 /lib/MiddleWare
parent7624f34a7ff9a49ef2da5cbfbe82ddc2adde22a9 (diff)
parent8eb02891db1d466d17329c0568cc67aafcd48f20 (diff)
Merge branch 'master' of git://git.fedorahosted.org/git/crash-catcher
Diffstat (limited to 'lib/MiddleWare')
-rw-r--r--lib/MiddleWare/CrashCatcher.conf4
-rw-r--r--lib/MiddleWare/Makefile.am6
-rw-r--r--lib/MiddleWare/MiddleWare.cpp34
-rw-r--r--lib/MiddleWare/MiddleWare.h7
-rw-r--r--lib/MiddleWare/Settings.cpp17
-rw-r--r--lib/MiddleWare/test.cpp7
6 files changed, 67 insertions, 8 deletions
diff --git a/lib/MiddleWare/CrashCatcher.conf b/lib/MiddleWare/CrashCatcher.conf
new file mode 100644
index 0000000..9307740
--- /dev/null
+++ b/lib/MiddleWare/CrashCatcher.conf
@@ -0,0 +1,4 @@
+# test conf file. it will be generated in the future
+BlackList = /usr/bin/bash, /usr/bin/sh
+EnabledPlugins = SQLite3, CCpp
+Database = SQLite3
diff --git a/lib/MiddleWare/Makefile.am b/lib/MiddleWare/Makefile.am
index 1b1b5f4..2b63f85 100644
--- a/lib/MiddleWare/Makefile.am
+++ b/lib/MiddleWare/Makefile.am
@@ -7,10 +7,14 @@ libMiddleWare_la_LIBADD = $(DL_LIBS) ../Utils/libUtils.la
libMiddleWare_la_LDFLAGS = -version-info 0:1:0
libMiddleWare_la_CPPFLAGS = -I$(srcdir)/../Utils
+middlewareconfdir = $(CONF_DIR)
+middlewareconf_DATA = CrashCatcher.conf
+
check_PROGRAMS = test
test_SOURCES = test.cpp
test_LDADD = ../Utils/libUtils.la libMiddleWare.la $(DL_LIBS)
test_CPPFLAGS = -I$(srcdir)/../Utils \
-DPLUGINS_LIB_DIR=\"$(PLUGINS_LIB_DIR)\" \
-DPLUGINS_CONF_DIR=\"$(PLUGINS_CONF_DIR)\" \
- -DDEBUG_DUMPS_DIR=\"$(DEBUG_DUMPS_DIR)\" \ No newline at end of file
+ -DDEBUG_DUMPS_DIR=\"$(DEBUG_DUMPS_DIR)\" \
+ -DCONF_DIR=\"$(CONF_DIR)\"
diff --git a/lib/MiddleWare/MiddleWare.cpp b/lib/MiddleWare/MiddleWare.cpp
index 12fa1e4..8cd4bec 100644
--- a/lib/MiddleWare/MiddleWare.cpp
+++ b/lib/MiddleWare/MiddleWare.cpp
@@ -35,6 +35,12 @@ CMiddleWare::CMiddleWare(const std::string& pPlugisConfDir,
}
m_pPluginManager->LoadPlugins();
LoadSettings(pMiddleWareConfFile);
+
+ set_enabled_plugins_t::iterator it_p;
+ for (it_p = m_setEnabledPlugins.begin(); it_p != m_setEnabledPlugins.end(); it_p++)
+ {
+ m_pPluginManager->RegisterPlugin(*it_p);
+ }
}
CMiddleWare::~CMiddleWare()
@@ -50,11 +56,37 @@ void CMiddleWare::LoadSettings(const std::string& pPath)
load_settings(pPath, settings);
if (settings.find("BlackList") != settings.end())
{
- m_sBlackList = settings["BlackList"];
+ std::string blackList = settings["BlackList"];
+ std::string::size_type ii_old = 0, ii_new = 0;
+ ii_new = blackList.find(",");
+ while (ii_new != std::string::npos)
+ {
+ m_setBlackList.insert(blackList.substr(ii_old, ii_new - ii_old));
+ ii_old = ii_new + 1;
+ ii_new = blackList.find(",",ii_old);
+ }
+ m_setBlackList.insert(blackList.substr(ii_old));
+ }
+ if (settings.find("EnabledPlugins") != settings.end())
+ {
+ std::string enabledPlugins = settings["EnabledPlugins"];
+ std::string::size_type ii_old = 0, ii_new = 0;
+ ii_new = enabledPlugins.find(",");
+ while (ii_new != std::string::npos)
+ {
+ m_setEnabledPlugins.insert(enabledPlugins.substr(ii_old, ii_new - ii_old));
+ ii_old = ii_new + 1;
+ ii_new = enabledPlugins.find(",",ii_old);
+ }
+ m_setEnabledPlugins.insert(enabledPlugins.substr(ii_old));
}
if (settings.find("Database") != settings.end())
{
m_sDatabase = settings["Database"];
+ if (m_setEnabledPlugins.find(m_sDatabase) == m_setEnabledPlugins.end())
+ {
+ throw std::string("Database plugin '"+m_sDatabase+"' isn't enabled.");
+ }
}
else
{
diff --git a/lib/MiddleWare/MiddleWare.h b/lib/MiddleWare/MiddleWare.h
index 26af907..5fdba84 100644
--- a/lib/MiddleWare/MiddleWare.h
+++ b/lib/MiddleWare/MiddleWare.h
@@ -25,13 +25,18 @@
#define MIDDLEWARE_H_
#include "PluginManager.h"
+#include <set>
class CMiddleWare
{
private:
+ typedef std::set<std::string> set_blacklist_t;
+ typedef std::set<std::string> set_enabled_plugins_t;
+
CPluginManager* m_pPluginManager;
- std::string m_sBlackList;
+ set_blacklist_t m_setBlackList;
+ set_enabled_plugins_t m_setEnabledPlugins;
std::string m_sDatabase;
std::string GetLocalUUIDLanguage(const std::string& pLanguage,
diff --git a/lib/MiddleWare/Settings.cpp b/lib/MiddleWare/Settings.cpp
index 627bfc6..413820b 100644
--- a/lib/MiddleWare/Settings.cpp
+++ b/lib/MiddleWare/Settings.cpp
@@ -80,5 +80,20 @@ void load_settings(const std::string& path, map_settings_t& settings)
void save_settings(const std::string& path, const map_settings_t& settings)
{
- //TODO: write this
+ map_settings_t::const_iterator it;
+ std::ofstream fOut;
+ fOut.open(path.c_str());
+ if (fOut.is_open())
+ {
+ fOut << "# !DO NOT EDIT THIS FILE BY HAND. IT IS GENERATED BY CRASHCATCHER!" << std::endl;
+ for (it = settings.begin(); it != settings.end(); it++)
+ {
+ fOut << it->first << " = " << it->second << std::endl << std::endl;
+ }
+ fOut.close();
+ }
+ else
+ {
+ throw std::string("save_settings(): Cannot write configuration file '"+path+"'.");
+ }
}
diff --git a/lib/MiddleWare/test.cpp b/lib/MiddleWare/test.cpp
index 0397996..9d54b0b 100644
--- a/lib/MiddleWare/test.cpp
+++ b/lib/MiddleWare/test.cpp
@@ -32,12 +32,11 @@ int main(int argc, char** argv)
try
{
- CMiddleWare middleWare(PLUGINS_CONF_DIR, PLUGINS_LIB_DIR, "CrashCatcher.conf");
+ CMiddleWare middleWare(PLUGINS_CONF_DIR,
+ PLUGINS_LIB_DIR,
+ std::string(CONF_DIR) + "/CrashCatcher.conf");
CDebugDump dd;
- middleWare.RegisterPlugin("CCpp");
- middleWare.RegisterPlugin("SQLite3");
-
char pid[100];
sprintf(pid, "%d", getpid());