From dfd3e56a3c9755d7ffaff9c84f47f6d2f717ffab Mon Sep 17 00:00:00 2001 From: Marcel Holtmann Date: Wed, 26 Nov 2008 14:27:19 +0100 Subject: Add function for checking if a service is present --- gdbus/gdbus.h | 2 ++ gdbus/mainloop.c | 43 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+) (limited to 'gdbus') 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) -- cgit