summaryrefslogtreecommitdiffstats
path: root/src/Daemon
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2009-09-17 15:39:23 +0200
committerDenys Vlasenko <vda.linux@googlemail.com>2009-09-17 15:39:23 +0200
commit7bdac909466263335c13daa824b17ca3d6f75ef6 (patch)
tree7ad23781d103929be66b3b73faefab00a470657b /src/Daemon
parentbb586580bee93c67f2b7b40c99d0a38ea02593c4 (diff)
downloadabrt-7bdac909466263335c13daa824b17ca3d6f75ef6.tar.gz
abrt-7bdac909466263335c13daa824b17ca3d6f75ef6.tar.xz
abrt-7bdac909466263335c13daa824b17ca3d6f75ef6.zip
factored out dbus init from CommLayerServerDBus.cpp to lib/Utils/abrt_dbus.cpp
this will allow me to reuse this code for applet Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'src/Daemon')
-rw-r--r--src/Daemon/CommLayerServerDBus.cpp183
-rw-r--r--src/Daemon/Daemon.cpp1
-rw-r--r--src/Daemon/Daemon.h10
3 files changed, 2 insertions, 192 deletions
diff --git a/src/Daemon/CommLayerServerDBus.cpp b/src/Daemon/CommLayerServerDBus.cpp
index 2f88a72b..08cd3d5e 100644
--- a/src/Daemon/CommLayerServerDBus.cpp
+++ b/src/Daemon/CommLayerServerDBus.cpp
@@ -1,4 +1,3 @@
-//#include <iostream>
#include <dbus/dbus.h>
#include "abrtlib.h"
#include "abrt_dbus.h"
@@ -430,121 +429,6 @@ static int handle_SetSettings(DBusMessage* call, DBusMessage* reply)
* Glib integration machinery
*/
-/* Callback: "glib says dbus fd is active" */
-static gboolean handle_dbus(GIOChannel *gio, GIOCondition condition, gpointer data)
-{
- DBusWatch *watch = (DBusWatch*)data;
-
- VERB3 log("%s(gio, condition:%x [bits:IN/PRI/OUT/ERR/HUP...], data)", __func__, int(condition));
-
- /* Notify the D-Bus library when a previously-added watch
- * is ready for reading or writing, or has an exception such as a hangup.
- */
- int glib_flags = int(condition);
- int dbus_flags = 0;
- if (glib_flags & G_IO_IN) dbus_flags |= DBUS_WATCH_READABLE;
- if (glib_flags & G_IO_OUT) dbus_flags |= DBUS_WATCH_WRITABLE;
- if (glib_flags & G_IO_ERR) dbus_flags |= DBUS_WATCH_ERROR;
- if (glib_flags & G_IO_HUP) dbus_flags |= DBUS_WATCH_HANGUP;
- /*
- * TODO:
- * If dbus_watch_handle returns FALSE, then the file descriptor
- * may still be ready for reading or writing, but more memory
- * is needed in order to do the reading or writing. If you ignore
- * the FALSE return, your application may spin in a busy loop
- * on the file descriptor until memory becomes available,
- * but nothing more catastrophic should happen.
- */
- dbus_watch_handle(watch, dbus_flags);
-
- while (dbus_connection_dispatch(g_dbus_conn) == DBUS_DISPATCH_DATA_REMAINS)
- VERB3 log("%s: more data to process, looping", __func__);
- return TRUE; /* "glib, do not remove this even source!" */
-}
-struct watch_app_info_t
-{
- GIOChannel *channel;
- guint event_source_id;
- bool watch_enabled;
-};
-/* Callback: "dbus_watch_get_enabled() may return a different value than it did before" */
-static void toggled_watch(DBusWatch *watch, void* data)
-{
- VERB3 log("%s(watch:%p, data)", __func__, watch);
-
- watch_app_info_t* app_info = (watch_app_info_t*)dbus_watch_get_data(watch);
- if (dbus_watch_get_enabled(watch))
- {
- if (!app_info->watch_enabled)
- {
- app_info->watch_enabled = true;
- int dbus_flags = dbus_watch_get_flags(watch);
- int glib_flags = 0;
- if (dbus_flags & DBUS_WATCH_READABLE)
- glib_flags |= G_IO_IN;
- if (dbus_flags & DBUS_WATCH_WRITABLE)
- glib_flags |= G_IO_OUT;
- VERB3 log(" adding watch to glib main loop. dbus_flags:%x glib_flags:%x", dbus_flags, glib_flags);
- app_info->event_source_id = g_io_add_watch(app_info->channel, GIOCondition(glib_flags), handle_dbus, watch);
- }
- /* else: it was already enabled */
- } else {
- if (app_info->watch_enabled)
- {
- app_info->watch_enabled = false;
- /* does it free the hidden GSource too? */
- VERB3 log(" removing watch from glib main loop");
- g_source_remove(app_info->event_source_id);
- }
- /* else: it was already disabled */
- }
-}
-/* Callback: "libdbus needs a new watch to be monitored by the main loop" */
-static dbus_bool_t add_watch(DBusWatch *watch, void* data)
-{
- VERB3 log("%s(watch:%p, data)", __func__, watch);
-
- watch_app_info_t* app_info = (watch_app_info_t*)xzalloc(sizeof(*app_info));
- dbus_watch_set_data(watch, app_info, free);
-
- int fd = dbus_watch_get_unix_fd(watch);
- VERB3 log(" dbus_watch_get_unix_fd():%d", fd);
- app_info->channel = g_io_channel_unix_new(fd);
- /* _unconditionally_ adding it to event loop would be an error */
- toggled_watch(watch, data);
- return TRUE;
-}
-/* Callback: "libdbus no longer needs a watch to be monitored by the main loop" */
-static void remove_watch(DBusWatch *watch, void* data)
-{
- VERB3 log("%s()", __func__);
- watch_app_info_t* app_info = (watch_app_info_t*)dbus_watch_get_data(watch);
- if (app_info->watch_enabled)
- {
- app_info->watch_enabled = false;
- g_source_remove(app_info->event_source_id);
- }
- g_io_channel_unref(app_info->channel);
-}
-
-/* Callback: "libdbus needs a new timeout to be monitored by the main loop" */
-static dbus_bool_t add_timeout(DBusTimeout *timeout, void* data)
-{
- VERB3 log("%s()", __func__);
- return TRUE;
-}
-/* Callback: "libdbus no longer needs a timeout to be monitored by the main loop" */
-static void remove_timeout(DBusTimeout *timeout, void* data)
-{
- VERB3 log("%s()", __func__);
-}
-/* Callback: "dbus_timeout_get_enabled() may return a different value than it did before" */
-static void timeout_toggled(DBusTimeout *timeout, void* data)
-{
-//seems to be never called, let's make it noisy
- log("%s()", __func__);
-}
-
/* Callback: "a message is received to a registered object path" */
static DBusHandlerResult message_received(DBusConnection *conn, DBusMessage *msg, void* data)
{
@@ -603,16 +487,6 @@ static DBusHandlerResult message_received(DBusConnection *conn, DBusMessage *msg
return DBUS_HANDLER_RESULT_HANDLED;
}
-/* Callback: "DBusObjectPathVTable is unregistered (or its connection is freed)" */
-static void unregister_vtable(DBusConnection *conn, void* data)
-{
- VERB3 log("%s()", __func__);
-}
-/* Table */
-static const DBusObjectPathVTable vtable = {
- /* .unregister_function = */ unregister_vtable,
- /* .message_function = */ message_received,
-};
static void handle_dbus_err(bool error_flag, DBusError *err)
{
@@ -630,23 +504,6 @@ static void handle_dbus_err(bool error_flag, DBusError *err)
CC_DBUS_NAME);
}
-/*
- * Initialization works as follows:
- *
- * we call dbus_bus_get
- * we call dbus_connection_set_watch_functions
- * libdbus calls back add_watch(watch:0x2341090, data), this watch is for writing
- * we call toggled_watch, but it finds that watch is not to be enabled yet
- * libdbus calls back add_watch(watch:0x23410e0, data), this watch is for reading
- * we call toggled_watch, it adds watch's fd to glib main loop with POLLIN
- * (note: these watches are different objects, but they have the same fd)
- * we call dbus_connection_set_timeout_functions
- * we call dbus_connection_register_object_path
- * we call dbus_bus_request_name
- * libdbus calls back add_timeout()
- * libdbus calls back remove_timeout()
- * (therefore there is no code yet in timeout_toggled (see above), it's not used)
- */
CCommLayerServerDBus::CCommLayerServerDBus()
{
DBusConnection* conn;
@@ -657,44 +514,8 @@ CCommLayerServerDBus::CCommLayerServerDBus()
g_dbus_conn = conn = dbus_bus_get(DBUS_BUS_SYSTEM, &err);
handle_dbus_err(conn == NULL, &err);
-//do we need this? why?
-//log("dbus_connection_set_dispatch_status_function");
-// dbus_connection_set_dispatch_status_function(conn,
-// dispatch, /* void dispatch(DBusConnection *conn, DBusDispatchStatus new_status, void* data) */
-// NULL, /* data */
-// NULL /* free_data_function */
-// )
- VERB3 log("dbus_connection_set_watch_functions");
- if (!dbus_connection_set_watch_functions(conn,
- add_watch,
- remove_watch,
- toggled_watch,
- NULL, /* data */
- NULL /* free_data_function */
- )
- ) {
- die_out_of_memory();
- }
- VERB3 log("dbus_connection_set_timeout_functions");
- if (!dbus_connection_set_timeout_functions(conn,
- add_timeout,
- remove_timeout,
- timeout_toggled,
- NULL, /* data */
- NULL /* free_data_function */
- )
- ) {
- die_out_of_memory();
- }
- VERB3 log("dbus_connection_register_object_path");
- if (!dbus_connection_register_object_path(conn,
- "/com/redhat/abrt",
- &vtable,
- NULL /* data */
- )
- ) {
- die_out_of_memory();
- }
+ attach_dbus_conn_to_glib_main_loop(conn, "/com/redhat/abrt", message_received);
+
VERB3 log("dbus_bus_request_name");
int rc = dbus_bus_request_name(conn, CC_DBUS_NAME, DBUS_NAME_FLAG_REPLACE_EXISTING, &err);
handle_dbus_err(rc < 0, &err);
diff --git a/src/Daemon/Daemon.cpp b/src/Daemon/Daemon.cpp
index 5a5dfeb2..780210cb 100644
--- a/src/Daemon/Daemon.cpp
+++ b/src/Daemon/Daemon.cpp
@@ -112,7 +112,6 @@ typedef struct cron_callback_data_t
static uint8_t s_sig_caught;
static GMainLoop* g_pMainloop;
-int g_verbose;
CCommLayerServer* g_pCommLayer;
pthread_mutex_t g_pJobsMutex;
diff --git a/src/Daemon/Daemon.h b/src/Daemon/Daemon.h
index e03d983a..c9a653ac 100644
--- a/src/Daemon/Daemon.h
+++ b/src/Daemon/Daemon.h
@@ -28,16 +28,6 @@ class CCrashWatcher;
class CCommLayerServer;
class CPluginManager;
-/* Verbosity level */
-extern int g_verbose;
-/* VERB1 log("what you sometimes want to see, even on a production box") */
-#define VERB1 if (g_verbose >= 1)
-/* VERB2 log("debug message, not going into insanely small details") */
-#define VERB2 if (g_verbose >= 2)
-/* VERB3 log("lots and lots of details") */
-#define VERB3 if (g_verbose >= 3)
-/* there is no level > 3 */
-
/* Used for sending dbus signals */
extern CCommLayerServer *g_pCommLayer;