summaryrefslogtreecommitdiffstats
path: root/src/Daemon
diff options
context:
space:
mode:
authorZdenek Prikryl <zprikryl@redhat.com>2009-02-25 17:42:58 +0100
committerZdenek Prikryl <zprikryl@redhat.com>2009-02-25 17:42:58 +0100
commitb0f7c3729302bf66f96eedecb8633ed8e196f122 (patch)
treee00d494ee3762b0f3c7a5eb687b96a2f94f315d6 /src/Daemon
parentebb7e355ca60e6f4913c65b2dfa439100312e5eb (diff)
parent302ec0b154a33209e187d0993dfbdd8c8d27d365 (diff)
downloadabrt-b0f7c3729302bf66f96eedecb8633ed8e196f122.tar.gz
abrt-b0f7c3729302bf66f96eedecb8633ed8e196f122.tar.xz
abrt-b0f7c3729302bf66f96eedecb8633ed8e196f122.zip
Merge branch 'master' of git://git.fedorahosted.org/crash-catcher
Conflicts: lib/MiddleWare/CrashTypes.h
Diffstat (limited to 'src/Daemon')
-rw-r--r--src/Daemon/CrashWatcher.cpp42
-rw-r--r--src/Daemon/CrashWatcher.h4
-rw-r--r--src/Daemon/DBusCommon.h1
-rw-r--r--src/Daemon/DBusServerProxy.h32
-rw-r--r--src/Daemon/Daemon.cpp13
5 files changed, 76 insertions, 16 deletions
diff --git a/src/Daemon/CrashWatcher.cpp b/src/Daemon/CrashWatcher.cpp
index f1b6828..787412e 100644
--- a/src/Daemon/CrashWatcher.cpp
+++ b/src/Daemon/CrashWatcher.cpp
@@ -108,6 +108,7 @@ CCrashWatcher::CCrashWatcher(const std::string& pPath,DBus::Connection &connecti
CCrashWatcher::~CCrashWatcher()
{
//delete dispatcher, connection, etc..
+ delete m_pMW;
}
dbus_vector_crash_infos_t CCrashWatcher::GetCrashInfos(const std::string &pUID)
@@ -121,11 +122,11 @@ dbus_vector_crash_infos_t CCrashWatcher::GetCrashInfos(const std::string &pUID)
return retval;
}
-dbus_vector_map_crash_infos_t CCrashWatcher::GetCrashInfosMap(const std::string &pUID)
+dbus_vector_map_crash_infos_t CCrashWatcher::GetCrashInfosMap(const std::string &pDBusSender)
{
dbus_vector_map_crash_infos_t retval;
vector_crash_infos_t crash_info;
- unsigned long unix_uid = m_pConn->sender_unix_uid(pUID.c_str());
+ unsigned long unix_uid = m_pConn->sender_unix_uid(pDBusSender.c_str());
crash_info = m_pMW->GetCrashInfos(to_string(unix_uid));
for (vector_crash_infos_t::iterator it = crash_info.begin(); it!=crash_info.end(); ++it) {
retval.push_back(it->GetMap());
@@ -133,6 +134,39 @@ dbus_vector_map_crash_infos_t CCrashWatcher::GetCrashInfosMap(const std::string
return retval;
}
+dbus_map_report_info_t CCrashWatcher::CreateReport(const std::string &pUUID,const std::string &pDBusSender)
+{
+ dbus_map_report_info_t retval;
+ unsigned long unix_uid = m_pConn->sender_unix_uid(pDBusSender.c_str());
+ std::cerr << pUUID << ":" << unix_uid << std::endl;
+ crash_context_t crashContext;
+ crash_report_t crashReport;
+ std::cerr << "Creating report" << std::endl;
+ m_pMW->CreateReport(pUUID,to_string(unix_uid),crashContext, crashReport);
+ retval = crashReport.GetMap();
+ return retval;
+}
+
+bool CCrashWatcher::Report(dbus_map_report_info_t pReport)
+{
+ crash_context_t crashContext;
+ crash_report_t crashReport;
+ //#define FIELD(X) crashReport.m_s##X = pReport[#X];
+ //crashReport.m_sUUID = pReport["UUID"];
+ //ALL_CRASH_REPORT_FIELDS;
+ //#undef FIELD
+ //for (dbus_map_report_info_t::iterator it = pReport.begin(); it!=pReport.end(); ++it) {
+ // std::cerr << it->second << std::endl;
+ //}
+ crashContext.m_sUUID = "1234";
+ crashContext.m_sUID = "12345";
+ crashContext.m_sLanAppPlugin = "CCpp";
+ crashReport.setFromMap(pReport);
+ std::cerr << crashReport.m_sPackage << std::endl;
+ m_pMW->Report(crashContext, crashReport);
+ return true;
+}
+
void CCrashWatcher::Lock()
{
int lfp = open("crashcatcher.lock",O_RDWR|O_CREAT,0640);
@@ -174,15 +208,11 @@ void CCrashWatcher::StartWatch()
/* daemon loop with glib */
void CCrashWatcher::GStartWatch()
{
- char *buff = new char[INOTIFY_BUFF_SIZE];
- int len = 0;
- int i = 0;
char action[FILENAME_MAX];
struct inotify_event *pevent;
g_io_add_watch (m_nGio, G_IO_IN, handle_event_cb, this);
//enter the event loop
g_main_run (m_nMainloop);
- delete[] buff;
}
diff --git a/src/Daemon/CrashWatcher.h b/src/Daemon/CrashWatcher.h
index b2e545f..d1f08df 100644
--- a/src/Daemon/CrashWatcher.h
+++ b/src/Daemon/CrashWatcher.h
@@ -60,7 +60,9 @@ class CCrashWatcher
/* methods exported on dbus */
public:
dbus_vector_crash_infos_t GetCrashInfos(const std::string &pUID);
- dbus_vector_map_crash_infos_t GetCrashInfosMap(const std::string &pUID);
+ dbus_vector_map_crash_infos_t GetCrashInfosMap(const std::string &pDBusSender);
+ dbus_map_report_info_t CreateReport(const std::string &pUUID,const std::string &pDBusSender);
+ bool Report(dbus_map_report_info_t pReport);
};
diff --git a/src/Daemon/DBusCommon.h b/src/Daemon/DBusCommon.h
index 186a74a..1e26e39 100644
--- a/src/Daemon/DBusCommon.h
+++ b/src/Daemon/DBusCommon.h
@@ -24,3 +24,4 @@
//typedef std::vector<crash_info_t> vector_crash_infos_t;
typedef std::vector< std::vector<std::string> > dbus_vector_crash_infos_t;
typedef std::vector< std::map<std::string, std::string> > dbus_vector_map_crash_infos_t;
+typedef std::map<std::string, std::string> dbus_map_report_info_t;
diff --git a/src/Daemon/DBusServerProxy.h b/src/Daemon/DBusServerProxy.h
index 5b8f688..8bb9b6b 100644
--- a/src/Daemon/DBusServerProxy.h
+++ b/src/Daemon/DBusServerProxy.h
@@ -31,6 +31,8 @@ public:
{
register_method(CDBusServer_adaptor, GetCrashInfos, _GetCrashInfos_stub);
register_method(CDBusServer_adaptor, GetCrashInfosMap, _GetCrashInfosMap_stub);
+ register_method(CDBusServer_adaptor, CreateReport, _CreateReport_stub);
+ register_method(CDBusServer_adaptor, Report, _Report_stub);
}
/* reveal Interface introspection when we stabilize the API */
/*
@@ -85,7 +87,9 @@ public:
* you will have to implement them in your ObjectAdaptor
*/
virtual dbus_vector_crash_infos_t GetCrashInfos(const std::string &pUID) = 0;
- virtual dbus_vector_map_crash_infos_t GetCrashInfosMap(const std::string &pUID) = 0;
+ virtual dbus_vector_map_crash_infos_t GetCrashInfosMap(const std::string &pDBusSender) = 0;
+ virtual dbus_map_report_info_t CreateReport(const std::string &pUUID,const std::string &pDBusSender) = 0;
+ virtual bool Report(dbus_map_report_info_t pReport) = 0;
public:
@@ -116,16 +120,40 @@ private:
return reply;
}
- DBus::Message _GetCrashInfosMap_stub(const DBus::CallMessage &call)
+ DBus::Message _CreateReport_stub(const DBus::CallMessage &call)
{
DBus::MessageIter ri = call.reader();
std::string argin1; ri >> argin1;
+ dbus_map_report_info_t argout1 = CreateReport(argin1,call.sender());
+ DBus::ReturnMessage reply(call);
+ DBus::MessageIter wi = reply.writer();
+ wi << argout1;
+ return reply;
+ }
+
+ DBus::Message _GetCrashInfosMap_stub(const DBus::CallMessage &call)
+ {
+ DBus::MessageIter ri = call.reader();
+
+ //std::string argin1; ri >> argin1;
dbus_vector_map_crash_infos_t argout1 = GetCrashInfosMap(call.sender());
DBus::ReturnMessage reply(call);
DBus::MessageIter wi = reply.writer();
wi << argout1;
return reply;
}
+
+ DBus::Message _Report_stub(const DBus::CallMessage &call)
+ {
+ DBus::MessageIter ri = call.reader();
+
+ dbus_map_report_info_t argin1; ri >> argin1;
+ bool argout1 = Report(argin1);
+ DBus::ReturnMessage reply(call);
+ DBus::MessageIter wi = reply.writer();
+ wi << argout1;
+ return reply;
+ }
};
diff --git a/src/Daemon/Daemon.cpp b/src/Daemon/Daemon.cpp
index 835b76f..b5d6cbe 100644
--- a/src/Daemon/Daemon.cpp
+++ b/src/Daemon/Daemon.cpp
@@ -21,7 +21,6 @@
#include <iostream>
#include <cstdio>
-#define daemonize 0
CCrashWatcher *ccdaemon;
DBus::Glib::BusDispatcher *dispatcher;
@@ -34,6 +33,7 @@ void terminate(int signal)
}
int main(int argc, char** argv){
+ int daemonize = 1;
/*signal handlers */
signal(SIGTERM, terminate);
signal(SIGINT, terminate);
@@ -45,13 +45,12 @@ int main(int argc, char** argv){
DBus::Connection conn = DBus::Connection::SystemBus();
try{
- //CCrashWatcher daemon(DEBUG_DUMPS_DIR, conn);
ccdaemon = new CCrashWatcher(DEBUG_DUMPS_DIR, conn);
- //if (argc > 1){
- // if (strcmp(argv[1], "-d") == 0){
- // daemonize = 0;
- // }
- // }
+ if (argc > 1){
+ if (strcmp(argv[1], "-d") == 0){
+ daemonize = 0;
+ }
+ }
if(daemonize){
try{
ccdaemon->Daemonize();