From 45ffca3e670462b658af2501a804120d1265e91f Mon Sep 17 00:00:00 2001 From: Johan Hedberg Date: Mon, 17 Dec 2012 10:53:59 +0200 Subject: [PATCH] core: Look up correct IO capability with Device.Pair --- src/device.c | 39 +++++++++++++-------------------------- 1 file changed, 13 insertions(+), 26 deletions(-) diff --git a/src/device.c b/src/device.c index f65580077..49a14dcae 100644 --- a/src/device.c +++ b/src/device.c @@ -66,12 +66,7 @@ #include "storage.h" #include "attrib-server.h" -#define IO_CAPABILITY_DISPLAYONLY 0x00 -#define IO_CAPABILITY_DISPLAYYESNO 0x01 -#define IO_CAPABILITY_KEYBOARDONLY 0x02 #define IO_CAPABILITY_NOINPUTNOOUTPUT 0x03 -#define IO_CAPABILITY_KEYBOARDDISPLAY 0x04 -#define IO_CAPABILITY_INVALID 0xFF #define DISCONNECT_TIMER 2 #define DISCOVERY_TIMER 1 @@ -1455,28 +1450,13 @@ static void create_bond_req_exit(DBusConnection *conn, void *user_data) } } -static uint8_t parse_io_capability(const char *capability) -{ - if (g_str_equal(capability, "")) - return IO_CAPABILITY_DISPLAYYESNO; - if (g_str_equal(capability, "DisplayOnly")) - return IO_CAPABILITY_DISPLAYONLY; - if (g_str_equal(capability, "DisplayYesNo")) - return IO_CAPABILITY_DISPLAYYESNO; - if (g_str_equal(capability, "KeyboardOnly")) - return IO_CAPABILITY_KEYBOARDONLY; - if (g_str_equal(capability, "NoInputNoOutput")) - return IO_CAPABILITY_NOINPUTNOOUTPUT; - if (g_str_equal(capability, "KeyboardDisplay")) - return IO_CAPABILITY_KEYBOARDDISPLAY; - return IO_CAPABILITY_INVALID; -} - static DBusMessage *pair_device(DBusConnection *conn, DBusMessage *msg, void *data) { struct btd_device *device = data; struct btd_adapter *adapter = device->adapter; + const char *sender; + struct agent *agent; struct bonding_req *bonding; uint8_t io_cap; int err; @@ -1492,15 +1472,22 @@ static DBusMessage *pair_device(DBusConnection *conn, DBusMessage *msg, if (device_is_bonded(device)) return btd_error_already_exists(msg); - io_cap = parse_io_capability(""); + sender = dbus_message_get_sender(msg); + + agent = agent_get(sender); + if (agent) { + io_cap = agent_get_io_capability(agent); + agent_unref(agent); + } else { + io_cap = IO_CAPABILITY_NOINPUTNOOUTPUT; + } bonding = bonding_request_new(msg, device, NULL, io_cap); bonding->listener_id = g_dbus_add_disconnect_watch( btd_get_dbus_connection(), - dbus_message_get_sender(msg), - create_bond_req_exit, device, - NULL); + sender, create_bond_req_exit, + device, NULL); device->bonding = bonding; bonding->device = device; -- 2.47.3