From cfca560f5dacf3523f0086582c28aeb2d67d2ecf Mon Sep 17 00:00:00 2001 From: Johan Hedberg Date: Sun, 6 Jan 2013 18:05:43 +0200 Subject: [PATCH] core: Move mgmt device unpaired event handling into adapter code --- src/adapter.c | 36 ++++++++++++++++++++++++++++++++++++ src/mgmt.c | 31 +------------------------------ 2 files changed, 37 insertions(+), 30 deletions(-) diff --git a/src/adapter.c b/src/adapter.c index 498391eec..5507e6326 100644 --- a/src/adapter.c +++ b/src/adapter.c @@ -4344,6 +4344,37 @@ static void connect_failed_callback(uint16_t index, uint16_t length, ev->status); } +static void unpaired_callback(uint16_t index, uint16_t length, + const void *param, void *user_data) +{ + const struct mgmt_ev_device_unpaired *ev = param; + struct btd_adapter *adapter = user_data; + struct btd_device *device; + char addr[18]; + + if (length < sizeof(*ev)) { + error("Too small device unpaired event"); + return; + } + + ba2str(&ev->addr.bdaddr, addr); + + DBG("hci%u addr %s", index, addr); + + device = adapter_find_device(adapter, addr); + if (!device) { + warn("No device object for unpaired device %s", addr); + return; + } + + device_set_temporary(device, TRUE); + + if (device_is_connected(device)) + device_request_disconnect(device, NULL); + else + adapter_remove_device(adapter, device, TRUE); +} + static void read_info_complete(uint8_t status, uint16_t length, const void *param, void *user_data) { @@ -4433,6 +4464,11 @@ static void read_info_complete(uint8_t status, uint16_t length, connect_failed_callback, adapter, NULL); + mgmt_register(adapter->mgmt, MGMT_EV_DEVICE_UNPAIRED, + adapter->dev_id, + unpaired_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 912f671e5..53275ddd3 100644 --- a/src/mgmt.c +++ b/src/mgmt.c @@ -741,35 +741,6 @@ static void mgmt_device_unblocked(uint16_t index, void *buf, size_t len) device_unblock(device, FALSE, TRUE); } -static void mgmt_device_unpaired(uint16_t index, void *buf, size_t len) -{ - struct btd_adapter *adapter; - struct btd_device *device; - struct mgmt_ev_device_unpaired *ev = buf; - char addr[18]; - - if (len < sizeof(*ev)) { - error("Too small mgmt_device_unpaired event packet"); - return; - } - - ba2str(&ev->addr.bdaddr, addr); - DBG("Device upaired, index %u, addr %s", index, addr); - - if (!get_adapter_and_device(index, &ev->addr, &adapter, &device, false)) - return; - - if (!device) - return; - - device_set_temporary(device, TRUE); - - if (device_is_connected(device)) - device_request_disconnect(device, NULL); - else - adapter_remove_device(adapter, device, TRUE); -} - static void store_longtermkey(const bdaddr_t *local, bdaddr_t *peer, uint8_t bdaddr_type, unsigned char *key, uint8_t master, uint8_t authenticated, @@ -959,7 +930,7 @@ static gboolean mgmt_event(GIOChannel *channel, GIOCondition cond, mgmt_device_unblocked(index, buf + MGMT_HDR_SIZE, len); break; case MGMT_EV_DEVICE_UNPAIRED: - mgmt_device_unpaired(index, buf + MGMT_HDR_SIZE, len); + DBG("device_unpaired event"); break; case MGMT_EV_USER_PASSKEY_REQUEST: mgmt_passkey_request(index, buf + MGMT_HDR_SIZE, len); -- 2.47.3