summaryrefslogtreecommitdiff
path: root/lib/bluetooth-agent.c
diff options
context:
space:
mode:
authorBastien Nocera <hadess@hadess.net>2011-10-12 18:52:15 +0100
committerBastien Nocera <hadess@hadess.net>2011-10-12 18:52:15 +0100
commit25e5d9d5f1ac1d6e2925952eb568868f2a5619e9 (patch)
tree67886b4e69a31b1211e5192dfbd7422a7caa472e /lib/bluetooth-agent.c
parente8ac97521cf264b3699f2f29b6ec287e5fe6a3a9 (diff)
downloadgnome-bluetooth-25e5d9d5f1ac1d6e2925952eb568868f2a5619e9.tar.gz
lib: Update BluetoothAgent registration code
Seeing as we only ever need to pass it the default adapter, do that.
Diffstat (limited to 'lib/bluetooth-agent.c')
-rw-r--r--lib/bluetooth-agent.c42
1 files changed, 38 insertions, 4 deletions
diff --git a/lib/bluetooth-agent.c b/lib/bluetooth-agent.c
index 0bf93e43..83def10f 100644
--- a/lib/bluetooth-agent.c
+++ b/lib/bluetooth-agent.c
@@ -28,6 +28,7 @@
#include <stdio.h>
#include <gio/gio.h>
+#include "bluetooth-client-glue.h"
#include "bluetooth-agent.h"
#define BLUEZ_SERVICE "org.bluez"
@@ -397,23 +398,56 @@ gboolean bluetooth_agent_setup(BluetoothAgent *agent, const char *path)
return TRUE;
}
-gboolean bluetooth_agent_register(BluetoothAgent *agent, GDBusProxy *adapter)
+#define BLUEZ_SERVICE "org.bluez"
+#define BLUEZ_MANAGER_INTERFACE "org.bluez.Manager"
+
+static GDBusProxy *
+get_default_adapter (void)
+{
+ Manager *manager;
+ char *adapter_path;
+ Adapter *adapter;
+
+ manager = manager_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM,
+ G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES | G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START,
+ BLUEZ_SERVICE,
+ BLUEZ_MANAGER_PATH,
+ NULL,
+ NULL);
+ if (manager == NULL)
+ return NULL;
+ if (manager_call_default_adapter_sync (manager, &adapter_path, NULL, NULL) == FALSE) {
+ g_object_unref (manager);
+ return NULL;
+ }
+ adapter = adapter_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM,
+ G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES | G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START,
+ BLUEZ_SERVICE,
+ adapter_path,
+ NULL,
+ NULL);
+ g_object_unref (manager);
+ g_free (adapter_path);
+
+ return G_DBUS_PROXY (adapter);
+}
+
+gboolean bluetooth_agent_register(BluetoothAgent *agent)
{
BluetoothAgentPrivate *priv = BLUETOOTH_AGENT_GET_PRIVATE(agent);
GError *error = NULL;
char *path;
g_return_val_if_fail (BLUETOOTH_IS_AGENT (agent), FALSE);
- g_return_val_if_fail (G_IS_DBUS_PROXY (adapter), FALSE);
if (priv->path != NULL) {
g_warning ("Agent already setup on '%s'", priv->path);
return FALSE;
}
- priv->adapter = g_object_ref(adapter);
+ priv->adapter = get_default_adapter ();
- path = g_path_get_basename(g_dbus_proxy_get_object_path(adapter));
+ path = g_path_get_basename(g_dbus_proxy_get_object_path(priv->adapter));
priv->path = g_strdup_printf("/org/bluez/agent/%s", path);
g_free(path);