summaryrefslogtreecommitdiffstats
path: root/lib/Utils/CommLayerInner.cpp
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2009-09-15 12:43:01 +0200
committerDenys Vlasenko <vda.linux@googlemail.com>2009-09-15 12:43:01 +0200
commit0f91e9a06aa0f68a2cbe3c9fc4a858c0a5e6744a (patch)
tree13f92f2fc02d346d8474ef03fd0596e3e0447eda /lib/Utils/CommLayerInner.cpp
parent5f4a56f97f36e9cb844fcf3e4399cea67000a6bb (diff)
downloadabrt-0f91e9a06aa0f68a2cbe3c9fc4a858c0a5e6744a.tar.gz
abrt-0f91e9a06aa0f68a2cbe3c9fc4a858c0a5e6744a.tar.xz
abrt-0f91e9a06aa0f68a2cbe3c9fc4a858c0a5e6744a.zip
unify CommLayer, MiddleWare and Utils into Utils
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'lib/Utils/CommLayerInner.cpp')
-rw-r--r--lib/Utils/CommLayerInner.cpp69
1 files changed, 69 insertions, 0 deletions
diff --git a/lib/Utils/CommLayerInner.cpp b/lib/Utils/CommLayerInner.cpp
new file mode 100644
index 00000000..b5b8db78
--- /dev/null
+++ b/lib/Utils/CommLayerInner.cpp
@@ -0,0 +1,69 @@
+#include <pthread.h>
+#include <map>
+#include "abrtlib.h"
+#include "CommLayerInner.h"
+
+static CObserver *s_pObs;
+
+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;
+
+void init_daemon_logging(CObserver *pObs)
+{
+ s_pObs = pObs;
+ if (!s_map_mutex_inited)
+ {
+ pthread_mutex_init(&s_map_mutex, NULL);
+ s_map_mutex_inited = true;
+ }
+}
+
+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 warn_client(const std::string& pMessage)
+{
+ if (!s_pObs)
+ return;
+
+ 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)
+ s_pObs->Warning(pMessage, peer, key);
+ else /* Bug: someone tries to warn_client() without set_client_name()!? */
+ log("Hmm, stray %s: '%s'", __func__, pMessage.c_str());
+}
+
+void update_client(const std::string& pMessage)
+{
+ if (!s_pObs)
+ return;
+
+ 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)
+ s_pObs->Status(pMessage, peer, key);
+ else
+ log("Hmm, stray %s: '%s'", __func__, pMessage.c_str());
+}