From 76585105247365dd9f84997d933eeabd4303aabd Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Mon, 7 Sep 2009 18:36:29 +0200 Subject: preparatory work for proper (i.e. unicast) server->client dbus communication + /* send unicast dbus signal */ + if (!dbus_message_set_destination(msg, pDest)) + die_out_of_memory(); Signed-off-by: Denys Vlasenko --- src/Daemon/CommLayerServerDBus.cpp | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) (limited to 'src/Daemon/CommLayerServerDBus.cpp') diff --git a/src/Daemon/CommLayerServerDBus.cpp b/src/Daemon/CommLayerServerDBus.cpp index c3cef3b5..051a4b28 100644 --- a/src/Daemon/CommLayerServerDBus.cpp +++ b/src/Daemon/CommLayerServerDBus.cpp @@ -363,6 +363,7 @@ void CCommLayerServerDBus::Crash(const std::string& progname, const std::string& DBUS_TYPE_STRING, &c_progname, DBUS_TYPE_STRING, &c_uid, DBUS_TYPE_INVALID); + VERB2 log("Sending signal Crash('%s','%s')", c_progname, c_uid); send_flush_and_unref(msg); } @@ -373,28 +374,35 @@ void CCommLayerServerDBus::AnalyzeComplete(const map_crash_report_t& arg1) DBusMessageIter out_iter; dbus_message_iter_init_append(msg, &out_iter); store_val(&out_iter, arg1); + VERB2 log("Sending signal AnalyzeComplete([%d elements])", (int)arg1.size()); send_flush_and_unref(msg); } void CCommLayerServerDBus::JobDone(const char* pDest, uint64_t job_id) { DBusMessage* msg = new_signal_msg("JobDone"); - /* TODO: if (!dbus_message_set_destination(msg, pDest) die_out_of_memory(); */ + /* send unicast dbus signal */ + if (!dbus_message_set_destination(msg, pDest)) + die_out_of_memory(); dbus_message_append_args(msg, DBUS_TYPE_STRING, &pDest, /* TODO: redundant parameter, remove from API */ DBUS_TYPE_UINT64, &job_id, DBUS_TYPE_INVALID); + VERB2 log("Sending signal JobDone('%s',%llx)", pDest, (unsigned long long)job_id); send_flush_and_unref(msg); } void CCommLayerServerDBus::JobStarted(const char* pDest, uint64_t job_id) { DBusMessage* msg = new_signal_msg("JobStarted"); - /* TODO: if (!dbus_message_set_destination(msg, pDest) die_out_of_memory(); */ + /* send unicast dbus signal */ + if (!dbus_message_set_destination(msg, pDest)) + die_out_of_memory(); dbus_message_append_args(msg, DBUS_TYPE_STRING, &pDest, /* TODO: redundant parameter, remove from API */ DBUS_TYPE_UINT64, &job_id, DBUS_TYPE_INVALID); + VERB2 log("Sending signal JobStarted('%s',%llx)", pDest, (unsigned long long)job_id); send_flush_and_unref(msg); } @@ -419,6 +427,7 @@ void CCommLayerServerDBus::Update(const std::string& pMessage, uint64_t job_id) send_flush_and_unref(msg); } +/* TODO: one Warning()? */ void CCommLayerServerDBus::Warning(const std::string& pMessage) { DBusMessage* msg = new_signal_msg("Warning"); -- cgit From 18b37184fad31d40a9344f9f5e22f7675c909d65 Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Tue, 8 Sep 2009 01:50:15 +0200 Subject: abrtd: remove unused AnalyzeComplete dbus signal Signed-off-by: Denys Vlasenko --- src/Daemon/CommLayerServerDBus.cpp | 11 ----------- 1 file changed, 11 deletions(-) (limited to 'src/Daemon/CommLayerServerDBus.cpp') diff --git a/src/Daemon/CommLayerServerDBus.cpp b/src/Daemon/CommLayerServerDBus.cpp index 051a4b28..41f5abab 100644 --- a/src/Daemon/CommLayerServerDBus.cpp +++ b/src/Daemon/CommLayerServerDBus.cpp @@ -367,17 +367,6 @@ void CCommLayerServerDBus::Crash(const std::string& progname, const std::string& send_flush_and_unref(msg); } -/* Notify the clients that creating a report has finished */ -void CCommLayerServerDBus::AnalyzeComplete(const map_crash_report_t& arg1) -{ - DBusMessage* msg = new_signal_msg("AnalyzeComplete"); - DBusMessageIter out_iter; - dbus_message_iter_init_append(msg, &out_iter); - store_val(&out_iter, arg1); - VERB2 log("Sending signal AnalyzeComplete([%d elements])", (int)arg1.size()); - send_flush_and_unref(msg); -} - void CCommLayerServerDBus::JobDone(const char* pDest, uint64_t job_id) { DBusMessage* msg = new_signal_msg("JobDone"); -- cgit From a4257108013f15653724b5ed3b3c208e071567c5 Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Tue, 8 Sep 2009 13:16:06 +0200 Subject: abrtd: eliminate g_pending_jobs[] map and all corresponding TODOs :) -6k: text data bss dec hexfilename 194741 2656 2384 199781 30c65abrt.t1/abrt-0.0.8.5/src/Daemon/.libs/abrtd 188316 2648 2320 193284 2f304abrt.t2/abrt-0.0.8.5/src/Daemon/.libs/abrtd Signed-off-by: Denys Vlasenko --- src/Daemon/CommLayerServerDBus.cpp | 82 +++++++++++++++++++------------------- 1 file changed, 42 insertions(+), 40 deletions(-) (limited to 'src/Daemon/CommLayerServerDBus.cpp') diff --git a/src/Daemon/CommLayerServerDBus.cpp b/src/Daemon/CommLayerServerDBus.cpp index 41f5abab..1be957b8 100644 --- a/src/Daemon/CommLayerServerDBus.cpp +++ b/src/Daemon/CommLayerServerDBus.cpp @@ -367,31 +367,32 @@ void CCommLayerServerDBus::Crash(const std::string& progname, const std::string& send_flush_and_unref(msg); } -void CCommLayerServerDBus::JobDone(const char* pDest, uint64_t job_id) +void CCommLayerServerDBus::JobStarted(const char* pDest) { - DBusMessage* msg = new_signal_msg("JobDone"); + DBusMessage* msg = new_signal_msg("JobStarted"); /* send unicast dbus signal */ if (!dbus_message_set_destination(msg, pDest)) die_out_of_memory(); + uint64_t nJobID = uint64_t(pthread_self()); dbus_message_append_args(msg, DBUS_TYPE_STRING, &pDest, /* TODO: redundant parameter, remove from API */ - DBUS_TYPE_UINT64, &job_id, + DBUS_TYPE_UINT64, &nJobID, /* TODO: redundant parameter, remove from API */ DBUS_TYPE_INVALID); - VERB2 log("Sending signal JobDone('%s',%llx)", pDest, (unsigned long long)job_id); + VERB2 log("Sending signal JobStarted('%s',%llx)", pDest, (unsigned long long)nJobID); send_flush_and_unref(msg); } -void CCommLayerServerDBus::JobStarted(const char* pDest, uint64_t job_id) +void CCommLayerServerDBus::JobDone(const char* pDest, const char* pUUID) { - DBusMessage* msg = new_signal_msg("JobStarted"); + DBusMessage* msg = new_signal_msg("JobDone"); /* send unicast dbus signal */ if (!dbus_message_set_destination(msg, pDest)) die_out_of_memory(); dbus_message_append_args(msg, DBUS_TYPE_STRING, &pDest, /* TODO: redundant parameter, remove from API */ - DBUS_TYPE_UINT64, &job_id, + DBUS_TYPE_STRING, &pUUID, /* TODO: redundant parameter, remove from API */ DBUS_TYPE_INVALID); - VERB2 log("Sending signal JobStarted('%s',%llx)", pDest, (unsigned long long)job_id); + VERB2 log("Sending signal JobDone('%s','%s')", pDest, pUUID); send_flush_and_unref(msg); } @@ -493,17 +494,47 @@ static int handle_CreateReport(DBusMessage* call, DBusMessage* reply) const char* sender; long unix_uid = get_remote_uid(call, &sender); - VERB1 log("got %s('%s') call from uid %ld", "CreateReport", pUUID, unix_uid); - uint64_t argout1 = CreateReport_t(pUUID, to_string(unix_uid).c_str(), sender); + VERB1 log("got %s('%s') call from sender '%s' uid %ld", "CreateReport", pUUID, sender, unix_uid); + if (CreateReportThread(pUUID, to_string(unix_uid).c_str(), sender) != 0) + return -1; /* can't create thread (err msg is already logged) */ dbus_message_append_args(reply, - DBUS_TYPE_UINT64, &argout1, + DBUS_TYPE_STRING, &pUUID, /* redundant, eliminate from API */ DBUS_TYPE_INVALID); send_flush_and_unref(reply); return 0; } +static int handle_GetJobResult(DBusMessage* call, DBusMessage* reply) +{ + const char* pUUID; + DBusMessageIter in_iter; + if (!dbus_message_iter_init(call, &in_iter)) + { + error_msg("dbus call %s: no parameters", "GetJobResult"); + return -1; + } + int r = load_val(&in_iter, pUUID); + if (r != LAST_FIELD) + { + if (r == MORE_FIELDS) + error_msg("dbus call %s: extra parameters", "GetJobResult"); + return -1; + } + + long unix_uid = get_remote_uid(call); + VERB1 log("got %s('%s') call from uid %ld", "GetJobResult", pUUID, unix_uid); + map_crash_report_t report = GetJobResult(pUUID, to_string(unix_uid).c_str()); + + DBusMessageIter out_iter; + dbus_message_iter_init_append(reply, &out_iter); + store_val(&out_iter, report); + + send_flush_and_unref(reply); + return 0; +} + static int handle_Report(DBusMessage* call, DBusMessage* reply) { map_crash_report_t argin1; @@ -575,35 +606,6 @@ static int handle_DeleteDebugDump(DBusMessage* call, DBusMessage* reply) return 0; } -static int handle_GetJobResult(DBusMessage* call, DBusMessage* reply) -{ - uint64_t job_id; - DBusMessageIter in_iter; - if (!dbus_message_iter_init(call, &in_iter)) - { - error_msg("dbus call %s: no parameters", "GetJobResult"); - return -1; - } - int r = load_val(&in_iter, job_id); - if (r != LAST_FIELD) - { - if (r == MORE_FIELDS) - error_msg("dbus call %s: extra parameters", "GetJobResult"); - return -1; - } - - long unix_uid = get_remote_uid(call); - VERB1 log("got %s(%llx) call from uid %ld", "GetJobResult", (long long)job_id, unix_uid); - map_crash_report_t report = GetJobResult(job_id, to_string(unix_uid)); - - DBusMessageIter out_iter; - dbus_message_iter_init_append(reply, &out_iter); - store_val(&out_iter, report); - - send_flush_and_unref(reply); - return 0; -} - static int handle_GetPluginsInfo(DBusMessage* call, DBusMessage* reply) { vector_map_string_t plugins_info = g_pPluginManager->GetPluginsInfo(); -- cgit From 08393f2509642009829f9de09a463e7d3e364a58 Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Tue, 8 Sep 2009 14:10:22 +0200 Subject: typo corrected Signed-off-by: Denys Vlasenko --- src/Daemon/CommLayerServerDBus.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/Daemon/CommLayerServerDBus.cpp') diff --git a/src/Daemon/CommLayerServerDBus.cpp b/src/Daemon/CommLayerServerDBus.cpp index 1be957b8..d426338b 100644 --- a/src/Daemon/CommLayerServerDBus.cpp +++ b/src/Daemon/CommLayerServerDBus.cpp @@ -455,7 +455,7 @@ static long get_remote_uid(DBusMessage* call, const char** ppSender = NULL) if (dbus_error_is_set(&err)) { dbus_error_free(&err); - error_msg("can't determine remore uid, assuming 0"); + error_msg("Can't determine remote uid, assuming 0"); return 0; } return uid; -- cgit From ff2627e7c597e50025ca4d91ff8168eec80f9054 Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Tue, 8 Sep 2009 17:05:57 +0200 Subject: make Warning, Error and Update send unicast dbus messages Signed-off-by: Denys Vlasenko --- src/Daemon/CommLayerServerDBus.cpp | 58 ++++++++++++++++---------------------- 1 file changed, 24 insertions(+), 34 deletions(-) (limited to 'src/Daemon/CommLayerServerDBus.cpp') diff --git a/src/Daemon/CommLayerServerDBus.cpp b/src/Daemon/CommLayerServerDBus.cpp index d426338b..c6908f5f 100644 --- a/src/Daemon/CommLayerServerDBus.cpp +++ b/src/Daemon/CommLayerServerDBus.cpp @@ -336,12 +336,15 @@ static inline int load_val(DBusMessageIter* iter, std::map& val) { return */ /* helpers */ -static DBusMessage* new_signal_msg(const char* member) +static DBusMessage* new_signal_msg(const char* member, const char* peer = NULL) { /* path, interface, member name */ DBusMessage* msg = dbus_message_new_signal(CC_DBUS_PATH, CC_DBUS_IFACE, member); if (!msg) die_out_of_memory(); + /* Send unicast dbus signal if peer is known */ + if (peer && !dbus_message_set_destination(msg, peer)) + die_out_of_memory(); return msg; } static void send_flush_and_unref(DBusMessage* msg) @@ -367,74 +370,57 @@ void CCommLayerServerDBus::Crash(const std::string& progname, const std::string& send_flush_and_unref(msg); } -void CCommLayerServerDBus::JobStarted(const char* pDest) +void CCommLayerServerDBus::JobStarted(const char* peer) { - DBusMessage* msg = new_signal_msg("JobStarted"); - /* send unicast dbus signal */ - if (!dbus_message_set_destination(msg, pDest)) - die_out_of_memory(); + DBusMessage* msg = new_signal_msg("JobStarted", peer); uint64_t nJobID = uint64_t(pthread_self()); dbus_message_append_args(msg, - DBUS_TYPE_STRING, &pDest, /* TODO: redundant parameter, remove from API */ + DBUS_TYPE_STRING, &peer, /* TODO: redundant parameter, remove from API */ DBUS_TYPE_UINT64, &nJobID, /* TODO: redundant parameter, remove from API */ DBUS_TYPE_INVALID); - VERB2 log("Sending signal JobStarted('%s',%llx)", pDest, (unsigned long long)nJobID); + VERB2 log("Sending signal JobStarted('%s',%llx)", peer, (unsigned long long)nJobID); send_flush_and_unref(msg); } -void CCommLayerServerDBus::JobDone(const char* pDest, const char* pUUID) +void CCommLayerServerDBus::JobDone(const char* peer, const char* pUUID) { - DBusMessage* msg = new_signal_msg("JobDone"); - /* send unicast dbus signal */ - if (!dbus_message_set_destination(msg, pDest)) - die_out_of_memory(); + DBusMessage* msg = new_signal_msg("JobDone", peer); dbus_message_append_args(msg, - DBUS_TYPE_STRING, &pDest, /* TODO: redundant parameter, remove from API */ + DBUS_TYPE_STRING, &peer, /* TODO: redundant parameter, remove from API */ DBUS_TYPE_STRING, &pUUID, /* TODO: redundant parameter, remove from API */ DBUS_TYPE_INVALID); - VERB2 log("Sending signal JobDone('%s','%s')", pDest, pUUID); + VERB2 log("Sending signal JobDone('%s','%s')", peer, pUUID); send_flush_and_unref(msg); } -void CCommLayerServerDBus::Error(const std::string& arg1) +void CCommLayerServerDBus::Error(const std::string& pMessage, const char* peer) { - DBusMessage* msg = new_signal_msg("Error"); - const char* c_arg1 = arg1.c_str(); - dbus_message_append_args(msg, - DBUS_TYPE_STRING, &c_arg1, - DBUS_TYPE_INVALID); - send_flush_and_unref(msg); -} - -void CCommLayerServerDBus::Update(const std::string& pMessage, uint64_t job_id) -{ - DBusMessage* msg = new_signal_msg("Update"); + DBusMessage* msg = new_signal_msg("Error", peer); const char* c_message = pMessage.c_str(); dbus_message_append_args(msg, DBUS_TYPE_STRING, &c_message, - DBUS_TYPE_UINT64, &job_id, DBUS_TYPE_INVALID); send_flush_and_unref(msg); } -/* TODO: one Warning()? */ -void CCommLayerServerDBus::Warning(const std::string& pMessage) +void CCommLayerServerDBus::Update(const std::string& pMessage, const char* peer, uint64_t job_id) { - DBusMessage* msg = new_signal_msg("Warning"); + DBusMessage* msg = new_signal_msg("Update", peer); const char* c_message = pMessage.c_str(); dbus_message_append_args(msg, DBUS_TYPE_STRING, &c_message, + DBUS_TYPE_UINT64, &job_id, /* TODO: redundant parameter, remove from API */ DBUS_TYPE_INVALID); send_flush_and_unref(msg); } -void CCommLayerServerDBus::Warning(const std::string& pMessage, uint64_t job_id) +void CCommLayerServerDBus::Warning(const std::string& pMessage, const char* peer, uint64_t job_id) { - DBusMessage* msg = new_signal_msg("Warning"); + DBusMessage* msg = new_signal_msg("Warning", peer); const char* c_message = pMessage.c_str(); dbus_message_append_args(msg, DBUS_TYPE_STRING, &c_message, - DBUS_TYPE_UINT64, &job_id, + DBUS_TYPE_UINT64, &job_id, /* TODO: redundant parameter, remove from API */ DBUS_TYPE_INVALID); send_flush_and_unref(msg); } @@ -885,6 +871,8 @@ static DBusHandlerResult message_received(DBusConnection *conn, DBusMessage *msg const char* member = dbus_message_get_member(msg); log("%s(method:'%s')", __func__, member); + set_client_name(dbus_message_get_sender(msg)); + DBusMessage* reply = dbus_message_new_method_return(msg); int r = -1; if (strcmp(member, "GetCrashInfos") == 0) @@ -931,6 +919,8 @@ static DBusHandlerResult message_received(DBusConnection *conn, DBusMessage *msg } } + set_client_name(NULL); + return DBUS_HANDLER_RESULT_HANDLED; } /* Callback: "DBusObjectPathVTable is unregistered (or its connection is freed)" */ -- cgit