summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--gdbus/gdbus.h2
-rw-r--r--gdbus/mainloop.c43
-rw-r--r--gdbus/object.c3
3 files changed, 48 insertions, 0 deletions
diff --git a/gdbus/gdbus.h b/gdbus/gdbus.h
index df065613..65b4fab9 100644
--- a/gdbus/gdbus.h
+++ b/gdbus/gdbus.h
@@ -37,6 +37,8 @@ typedef void (* GDBusWatchFunction) (DBusConnection *connection,
DBusConnection *g_dbus_setup_bus(DBusBusType type, const char *name,
DBusError *error);
+gboolean g_dbus_check_service(DBusConnection *connection, const char *name);
+
gboolean g_dbus_set_disconnect_function(DBusConnection *connection,
GDBusWatchFunction function,
void *user_data, DBusFreeFunction destroy);
diff --git a/gdbus/mainloop.c b/gdbus/mainloop.c
index ba6eb0b7..d6b37189 100644
--- a/gdbus/mainloop.c
+++ b/gdbus/mainloop.c
@@ -275,6 +275,49 @@ DBusConnection *g_dbus_setup_bus(DBusBusType type, const char *name,
return conn;
}
+gboolean g_dbus_check_service(DBusConnection *connection, const char *name)
+{
+ DBusMessage *message, *reply;
+ const char **names;
+ int i, count;
+ gboolean result = FALSE;
+
+ message = dbus_message_new_method_call(DBUS_SERVICE_DBUS,
+ DBUS_PATH_DBUS, DBUS_INTERFACE_DBUS, "ListNames");
+ if (message == NULL) {
+ error("Can't allocate new message");
+ return FALSE;
+ }
+
+ reply = dbus_connection_send_with_reply_and_block(connection,
+ message, -1, NULL);
+
+ dbus_message_unref(message);
+
+ if (reply == NULL) {
+ error("Failed to execute method call");
+ return FALSE;
+ }
+
+ if (dbus_message_get_args(reply, NULL,
+ DBUS_TYPE_ARRAY, DBUS_TYPE_STRING,
+ &names, &count, DBUS_TYPE_INVALID) == FALSE) {
+ error("Failed to read name list");
+ goto done;
+ }
+
+ for (i = 0; i < count; i++)
+ if (g_str_equal(names[i], name) == TRUE) {
+ result = TRUE;
+ break;
+ }
+
+done:
+ dbus_message_unref(reply);
+
+ return result;
+}
+
gboolean g_dbus_set_disconnect_function(DBusConnection *connection,
GDBusWatchFunction function,
void *user_data, DBusFreeFunction destroy)
diff --git a/gdbus/object.c b/gdbus/object.c
index d11f1bf6..44ef871a 100644
--- a/gdbus/object.c
+++ b/gdbus/object.c
@@ -580,6 +580,9 @@ gboolean g_dbus_send_message(DBusConnection *connection, DBusMessage *message)
{
dbus_bool_t result;
+ if (dbus_message_get_type(message) == DBUS_MESSAGE_TYPE_METHOD_CALL)
+ dbus_message_set_no_reply(message, TRUE);
+
result = dbus_connection_send(connection, message, NULL);
dbus_message_unref(message);