diff options
author | Karel Klic <kklic@redhat.com> | 2009-11-09 13:55:20 +0100 |
---|---|---|
committer | Karel Klic <kklic@redhat.com> | 2009-11-09 13:55:20 +0100 |
commit | 19f406b4930c931a932dc6930762e8e12e29ce8b (patch) | |
tree | b08468bf9a010cbce0ecd000a0279222f0d4b4e7 /src/CLI/dbus.cpp | |
parent | 801ab58f32f2cb7dca3352b721a07c83705a0287 (diff) | |
parent | 8fa9a6ecd247454ab758efecf818d8067455c778 (diff) | |
download | abrt-19f406b4930c931a932dc6930762e8e12e29ce8b.tar.gz abrt-19f406b4930c931a932dc6930762e8e12e29ce8b.tar.xz abrt-19f406b4930c931a932dc6930762e8e12e29ce8b.zip |
merge
Diffstat (limited to 'src/CLI/dbus.cpp')
-rw-r--r-- | src/CLI/dbus.cpp | 79 |
1 files changed, 67 insertions, 12 deletions
diff --git a/src/CLI/dbus.cpp b/src/CLI/dbus.cpp index 42222d15..50ca651b 100644 --- a/src/CLI/dbus.cpp +++ b/src/CLI/dbus.cpp @@ -27,7 +27,7 @@ DBusConnection* s_dbus_conn; /* helpers */ static DBusMessage* new_call_msg(const char* method) { - DBusMessage* msg = dbus_message_new_method_call(CC_DBUS_NAME, CC_DBUS_PATH, CC_DBUS_IFACE, method); + DBusMessage* msg = dbus_message_new_method_call(ABRTD_DBUS_NAME, ABRTD_DBUS_PATH, ABRTD_DBUS_IFACE, method); if (!msg) die_out_of_memory(); return msg; @@ -35,18 +35,73 @@ static DBusMessage* new_call_msg(const char* method) static DBusMessage* send_get_reply_and_unref(DBusMessage* msg) { - DBusError err; - dbus_error_init(&err); - DBusMessage *reply; - reply = dbus_connection_send_with_reply_and_block(s_dbus_conn, - msg, /*timeout*/ -1, &err); - if (reply == NULL) - { - //TODO: analyse err + dbus_uint32_t serial; + if (TRUE != dbus_connection_send(s_dbus_conn, msg, &serial)) error_msg_and_die("Error sending DBus message"); - } dbus_message_unref(msg); - return reply; + + while (true) + { + DBusMessage *received = dbus_connection_pop_message(s_dbus_conn); + if (!received) + { + if (FALSE == dbus_connection_read_write(s_dbus_conn, -1)) + error_msg_and_die("DBus connection closed"); + continue; + } + + /* Debugging */ + /* + const char *sender = dbus_message_get_sender(received); + if (sender) + printf("sender: %s\n", sender); + const char *path = dbus_message_get_path(received); + if (path) + printf("path: %s\n", path); + const char *member = dbus_message_get_member(received); + if (member) + printf("member: %s\n", member); + const char *interface = dbus_message_get_interface(received); + if (interface) + printf("interface: %s\n", interface); + const char *destination = dbus_message_get_destination(received); + if (destination) + printf("destination: %s\n", destination); + */ + + DBusError err; + dbus_error_init(&err); + + if (dbus_message_is_signal(received, ABRTD_DBUS_IFACE, "Update")) + { + const char *update_msg; + if (!dbus_message_get_args(received, &err, + DBUS_TYPE_STRING, &update_msg, + DBUS_TYPE_INVALID)) + { + error_msg_and_die("dbus Update message: arguments mismatch"); + } + printf(">> %s\n", update_msg); + } + else if (dbus_message_is_signal(received, ABRTD_DBUS_IFACE, "Warning")) + { + const char *warning_msg; + if (!dbus_message_get_args(received, &err, + DBUS_TYPE_STRING, &warning_msg, + DBUS_TYPE_INVALID)) + { + error_msg_and_die("dbus Update message: arguments mismatch"); + } + printf(">! %s\n", warning_msg); + } + else if (dbus_message_get_type(received) == DBUS_MESSAGE_TYPE_METHOD_RETURN && + dbus_message_get_reply_serial(received) == serial) + { + return received; + } + + dbus_message_unref(received); + } } vector_crash_infos_t call_GetCrashInfos() @@ -141,5 +196,5 @@ void handle_dbus_err(bool error_flag, DBusError *err) error_msg_and_die( "error requesting DBus name %s, possible reasons: " "abrt run by non-root; dbus config is incorrect", - CC_DBUS_NAME); + ABRTD_DBUS_NAME); } |