From 14e2ddb6b4f78e53359f4f54dde143d1c4cbf247 Mon Sep 17 00:00:00 2001 From: Johan Hedberg Date: Tue, 8 Jan 2013 13:21:05 +0200 Subject: [PATCH] core: Move mgmt user passkey notify handling to adapter code --- src/adapter.c | 38 ++++++++++++++++++++++++++++++++ src/mgmt.c | 61 +-------------------------------------------------- 2 files changed, 39 insertions(+), 60 deletions(-) diff --git a/src/adapter.c b/src/adapter.c index 0fd4c7df0..6a37021e9 100644 --- a/src/adapter.c +++ b/src/adapter.c @@ -4405,6 +4405,39 @@ static void user_passkey_request_callback(uint16_t index, uint16_t length, } } +static void user_passkey_notify_callback(uint16_t index, uint16_t length, + const void *param, void *user_data) +{ + const struct mgmt_ev_passkey_notify *ev = param; + struct btd_adapter *adapter = user_data; + struct btd_device *device; + uint32_t passkey; + char addr[18]; + int err; + + if (length < sizeof(*ev)) { + error("Too small passkey notify event"); + return; + } + + ba2str(&ev->addr.bdaddr, addr); + DBG("hci%u %s", index, addr); + + device = adapter_get_device(adapter, addr, ev->addr.type); + if (!device) { + error("Unable to get device object for %s", addr); + return; + } + + passkey = bt_get_le32(&ev->passkey); + + DBG("passkey %06u entered %u", passkey, ev->entered); + + err = device_notify_passkey(device, passkey, ev->entered); + if (err < 0) + error("device_notify_passkey: %s", strerror(-err)); +} + static ssize_t adapter_get_pin(struct btd_adapter *adapter, struct btd_device *dev, char *pin_buf, gboolean *display) @@ -5426,6 +5459,11 @@ static void read_info_complete(uint8_t status, uint16_t length, user_passkey_request_callback, adapter, NULL); + mgmt_register(adapter->mgmt, MGMT_EV_PASSKEY_NOTIFY, + adapter->dev_id, + user_passkey_notify_callback, + adapter, NULL); + set_dev_class(adapter, adapter->major_class, adapter->minor_class); set_name(adapter, btd_adapter_get_name(adapter)); diff --git a/src/mgmt.c b/src/mgmt.c index 4e9d391e4..86a4e921b 100644 --- a/src/mgmt.c +++ b/src/mgmt.c @@ -56,65 +56,6 @@ static int mgmt_sock = -1; static guint mgmt_watch = 0; -static bool get_adapter_and_device(uint16_t index, - struct mgmt_addr_info *addr, - struct btd_adapter **adapter, - struct btd_device **device, - bool create) -{ - char peer_addr[18]; - - *adapter = adapter_find_by_id(index); - if (!*adapter) { - error("Unable to find matching adapter"); - return false; - } - - ba2str(&addr->bdaddr, peer_addr); - - if (create) - *device = adapter_get_device(*adapter, peer_addr, addr->type); - else - *device = adapter_find_device(*adapter, peer_addr); - - if (create && !*device) { - error("Unable to get device object!"); - return false; - } - - return true; -} - -static void mgmt_passkey_notify(uint16_t index, void *buf, size_t len) -{ - struct mgmt_ev_passkey_notify *ev = buf; - struct btd_adapter *adapter; - struct btd_device *device; - uint32_t passkey; - char addr[18]; - int err; - - if (len < sizeof(*ev)) { - error("Too small passkey_notify event"); - return; - } - - ba2str(&ev->addr.bdaddr, addr); - - DBG("hci%u %s", index, addr); - - if (!get_adapter_and_device(index, &ev->addr, &adapter, &device, true)) - return; - - passkey = bt_get_le32(&ev->passkey); - - DBG("passkey %06u entered %u", passkey, ev->entered); - - err = device_notify_passkey(device, passkey, ev->entered); - if (err < 0) - error("device_notify_passkey: %s", strerror(-err)); -} - static void mgmt_cmd_complete(uint16_t index, void *buf, size_t len) { struct mgmt_ev_cmd_complete *ev = buf; @@ -252,7 +193,7 @@ static gboolean mgmt_event(GIOChannel *channel, GIOCondition cond, DBG("passkey_request event"); break; case MGMT_EV_PASSKEY_NOTIFY: - mgmt_passkey_notify(index, buf + MGMT_HDR_SIZE, len); + DBG("passkey_notify event"); break; case MGMT_EV_NEW_LONG_TERM_KEY: DBG("new_long_term_key event"); -- 2.47.3