diff options
author | Denys Vlasenko <dvlasenk@redhat.com> | 2011-01-21 00:44:39 +0100 |
---|---|---|
committer | Denys Vlasenko <dvlasenk@redhat.com> | 2011-01-21 00:44:39 +0100 |
commit | a387e6c91cd45ffc35c03e42bde7ba926231de4b (patch) | |
tree | 14f83cca9a0a81539de37dce061599b7063d52e0 /src/daemon | |
parent | 320724188859d96b0a974d9e84bacd49a614f97d (diff) | |
download | abrt-a387e6c91cd45ffc35c03e42bde7ba926231de4b.tar.gz abrt-a387e6c91cd45ffc35c03e42bde7ba926231de4b.tar.xz abrt-a387e6c91cd45ffc35c03e42bde7ba926231de4b.zip |
Remove CCrashWatcher and CObserver classes; merge libabrt_daemon into abrtd
Signed-off-by: Denys Vlasenko <dvlasenk@redhat.com>
Diffstat (limited to 'src/daemon')
-rw-r--r-- | src/daemon/CommLayerServer.cpp | 1 | ||||
-rw-r--r-- | src/daemon/CrashWatcher.cpp | 44 | ||||
-rw-r--r-- | src/daemon/CrashWatcher.h | 38 | ||||
-rw-r--r-- | src/daemon/Daemon.cpp | 4 | ||||
-rw-r--r-- | src/daemon/Daemon.h | 4 | ||||
-rw-r--r-- | src/daemon/Makefile.am | 3 | ||||
-rw-r--r-- | src/daemon/comm_layer_inner.cpp | 93 | ||||
-rw-r--r-- | src/daemon/comm_layer_inner.h | 54 |
8 files changed, 150 insertions, 91 deletions
diff --git a/src/daemon/CommLayerServer.cpp b/src/daemon/CommLayerServer.cpp index 5e250121..748611b3 100644 --- a/src/daemon/CommLayerServer.cpp +++ b/src/daemon/CommLayerServer.cpp @@ -17,7 +17,6 @@ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "CommLayerServer.h" -#include "CrashWatcher.h" CCommLayerServer::CCommLayerServer() { diff --git a/src/daemon/CrashWatcher.cpp b/src/daemon/CrashWatcher.cpp deleted file mode 100644 index a74fa3aa..00000000 --- a/src/daemon/CrashWatcher.cpp +++ /dev/null @@ -1,44 +0,0 @@ -/* - Copyright (C) 2009 Jiri Moskovcak (jmoskovc@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 "abrtlib.h" -#include "Daemon.h" -#include "CommLayerServer.h" -#include "CrashWatcher.h" - -void CCrashWatcher::Status(const char *pMessage, const char* peer) -{ - VERB1 log("Update('%s'): %s", peer, pMessage); - if (g_pCommLayer != NULL) - g_pCommLayer->Update(pMessage, peer); -} - -void CCrashWatcher::Warning(const char *pMessage, const char* peer) -{ - VERB1 log("Warning('%s'): %s", peer, pMessage); - if (g_pCommLayer != NULL) - g_pCommLayer->Warning(pMessage, peer); -} - -CCrashWatcher::CCrashWatcher() -{ -} - -CCrashWatcher::~CCrashWatcher() -{ -} diff --git a/src/daemon/CrashWatcher.h b/src/daemon/CrashWatcher.h deleted file mode 100644 index 4f755a36..00000000 --- a/src/daemon/CrashWatcher.h +++ /dev/null @@ -1,38 +0,0 @@ -/* - Copyright (C) 2009 Jiri Moskovcak (jmoskovc@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 CRASHWATCHER_H_ -#define CRASHWATCHER_H_ - -#include "observer.h" - - -class CCrashWatcher -: public CObserver -{ - public: - CCrashWatcher(); - virtual ~CCrashWatcher(); - - public: - /* Observer methods */ - virtual void Status(const char *pMessage, const char* peer); - virtual void Warning(const char *pMessage, const char* peer); -}; - -#endif diff --git a/src/daemon/Daemon.cpp b/src/daemon/Daemon.cpp index 7c063d9d..78ebafea 100644 --- a/src/daemon/Daemon.cpp +++ b/src/daemon/Daemon.cpp @@ -29,7 +29,6 @@ #include "comm_layer_inner.h" #include "Settings.h" #include "CommLayerServerDBus.h" -#include "CrashWatcher.h" #include "MiddleWare.h" #include "Daemon.h" #include "parse_options.h" @@ -624,12 +623,11 @@ int main(int argc, char** argv) GIOChannel* channel_signal = NULL; guint channel_signal_event_id = 0; bool pidfile_created = false; - CCrashWatcher watcher; /* Initialization */ try { - init_daemon_logging(&watcher); + init_daemon_logging(); VERB1 log("Loading settings"); if (load_settings() != 0) diff --git a/src/daemon/Daemon.h b/src/daemon/Daemon.h index d771512e..d4cf0414 100644 --- a/src/daemon/Daemon.h +++ b/src/daemon/Daemon.h @@ -21,9 +21,7 @@ #include <pthread.h> #include "abrt_types.h" - -class CCrashWatcher; -class CCommLayerServer; +#include "CommLayerServer.h" /* Used for sending dbus signals */ extern CCommLayerServer *g_pCommLayer; diff --git a/src/daemon/Makefile.am b/src/daemon/Makefile.am index f3f7bc0f..37b662af 100644 --- a/src/daemon/Makefile.am +++ b/src/daemon/Makefile.am @@ -11,10 +11,10 @@ sbin_PROGRAMS = \ abrtd_SOURCES = \ MiddleWare.h MiddleWare.cpp \ - CrashWatcher.h CrashWatcher.cpp \ CommLayerServer.h CommLayerServer.cpp \ CommLayerServerDBus.h CommLayerServerDBus.cpp \ Settings.h Settings.cpp \ + comm_layer_inner.h comm_layer_inner.cpp \ Daemon.h Daemon.cpp abrtd_CPPFLAGS = \ -I$(srcdir)/../include/report -I$(srcdir)/../include \ @@ -36,7 +36,6 @@ abrtd_LDADD = \ $(DL_LIBS) \ $(DBUS_LIBS) \ ../lib/libreport.la \ - ../lib/libabrt_daemon.la \ ../lib/libabrt_dbus.la abrt_server_SOURCES = \ diff --git a/src/daemon/comm_layer_inner.cpp b/src/daemon/comm_layer_inner.cpp new file mode 100644 index 00000000..59f7c3f3 --- /dev/null +++ b/src/daemon/comm_layer_inner.cpp @@ -0,0 +1,93 @@ +/* + Copyright (C) 2010 ABRT team + Copyright (C) 2010 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 <pthread.h> +#include <map> +#include "abrtlib.h" +#include "Daemon.h" +#include "comm_layer_inner.h" + +typedef std::map<uint64_t, std::string> map_uint_str_t; +static map_uint_str_t s_mapClientID; +static pthread_mutex_t s_map_mutex; +static bool s_map_mutex_inited; + +/* called via [p]error_msg() */ +static void warn_client(const char *msg) +{ + uint64_t key = uint64_t(pthread_self()); + + pthread_mutex_lock(&s_map_mutex); + map_uint_str_t::const_iterator ki = s_mapClientID.find(key); + const char* peer = (ki != s_mapClientID.end() ? ki->second.c_str() : NULL); + pthread_mutex_unlock(&s_map_mutex); + + if (peer) + { + VERB1 log("Warning('%s'): %s", peer, msg); + if (g_pCommLayer != NULL) + g_pCommLayer->Warning(msg, peer); + } +} + +void init_daemon_logging(void) +{ + if (!s_map_mutex_inited) + { + s_map_mutex_inited = true; + pthread_mutex_init(&s_map_mutex, NULL); + g_custom_logger = &warn_client; + } +} + +void set_client_name(const char *name) +{ + uint64_t key = uint64_t(pthread_self()); + + pthread_mutex_lock(&s_map_mutex); + if (!name) { + s_mapClientID.erase(key); + } else { + s_mapClientID[key] = name; + } + pthread_mutex_unlock(&s_map_mutex); +} + +void update_client(const char *fmt, ...) +{ + uint64_t key = uint64_t(pthread_self()); + + pthread_mutex_lock(&s_map_mutex); + map_uint_str_t::const_iterator ki = s_mapClientID.find(key); + const char* peer = (ki != s_mapClientID.end() ? ki->second.c_str() : NULL); + pthread_mutex_unlock(&s_map_mutex); + + if (!peer) + return; + + va_list p; + va_start(p, fmt); + char *msg = xvasprintf(fmt, p); + va_end(p); + + VERB1 log("Update('%s'): %s", peer, msg); + if (g_pCommLayer != NULL) + g_pCommLayer->Update(msg, peer); + + free(msg); +} diff --git a/src/daemon/comm_layer_inner.h b/src/daemon/comm_layer_inner.h new file mode 100644 index 00000000..48eb2010 --- /dev/null +++ b/src/daemon/comm_layer_inner.h @@ -0,0 +1,54 @@ +/* + Copyright (C) 2010 ABRT team + Copyright (C) 2010 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 COMMLAYERINNER_H_ +#define COMMLAYERINNER_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +void init_daemon_logging(void); + +/* + * Set client's name (dbus ID). NULL unsets it. + */ +void set_client_name(const char* name); + +/* + * Ask a client to warn the user about a non-fatal, but unexpected condition. + * In GUI, it will usually be presented as a popup message. + * Usually there is no need to call it directly, just use [p]error_msg(). + */ +//now static: +//void warn_client(const char *msg); +//use [p]error_msg[_and_die] instead, it sends the message as a warning to client +//as well as to the log. + +/* + * Logs a message to a client. + * In UI, it will usually appear as a new status line message in GUI, + * or as a new message line in CLI. + */ +void update_client(const char *fmt, ...); + +#ifdef __cplusplus +} +#endif + +#endif |