From bcacfd6414c7634941d4ef2557210ff160262a1d Mon Sep 17 00:00:00 2001 From: Johan Hedberg Date: Mon, 7 Jan 2013 16:40:24 +0200 Subject: [PATCH] core: Move mgmt device found event handling into adapter code --- src/adapter.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ src/mgmt.c | 48 +----------------------------------------------- 2 files changed, 49 insertions(+), 47 deletions(-) diff --git a/src/adapter.c b/src/adapter.c index 38e40431b..e35e53214 100644 --- a/src/adapter.c +++ b/src/adapter.c @@ -3768,6 +3768,49 @@ void adapter_update_found_devices(struct btd_adapter *adapter, } } +static void device_found_callback(uint16_t index, uint16_t length, + const void *param, void *user_data) +{ + const struct mgmt_ev_device_found *ev = param; + struct btd_adapter *adapter = user_data; + const uint8_t *eir; + uint16_t eir_len; + uint32_t flags; + bool confirm_name; + bool legacy; + char addr[18]; + + if (length < sizeof(*ev)) { + error("Too short device found event (%u bytes)", length); + return; + } + + eir_len = btohs(ev->eir_len); + if (length != sizeof(*ev) + eir_len) { + error("Device found event size mismatch (%u != %zu)", + length, sizeof(*ev) + eir_len); + return; + } + + if (eir_len == 0) + eir = NULL; + else + eir = ev->eir; + + flags = btohl(ev->flags); + + ba2str(&ev->addr.bdaddr, addr); + DBG("hci%u addr %s, rssi %d flags 0x%04x eir_len %u", + index, addr, ev->rssi, flags, eir_len); + + confirm_name = (flags & MGMT_DEV_FOUND_CONFIRM_NAME); + legacy = (flags & MGMT_DEV_FOUND_LEGACY_PAIRING); + + adapter_update_found_devices(adapter, &ev->addr.bdaddr, ev->addr.type, + ev->rssi, confirm_name, legacy, + eir, eir_len); +} + struct agent *adapter_get_agent(struct btd_adapter *adapter) { return agent_get(NULL); @@ -4789,6 +4832,11 @@ static void read_info_complete(uint8_t status, uint16_t length, discovering_callback, adapter, NULL); + mgmt_register(adapter->mgmt, MGMT_EV_DEVICE_FOUND, + adapter->dev_id, + device_found_callback, + adapter, NULL); + mgmt_register(adapter->mgmt, MGMT_EV_DEVICE_DISCONNECTED, adapter->dev_id, disconnected_callback, diff --git a/src/mgmt.c b/src/mgmt.c index 4e4dbb1dd..be29568a4 100644 --- a/src/mgmt.c +++ b/src/mgmt.c @@ -603,52 +603,6 @@ static void mgmt_auth_failed(uint16_t index, void *buf, size_t len) bonding_complete(index, &ev->addr, ev->status); } -static void mgmt_device_found(uint16_t index, void *buf, size_t len) -{ - struct mgmt_ev_device_found *ev = buf; - struct btd_adapter *adapter; - char addr[18]; - uint32_t flags; - uint16_t eir_len; - uint8_t *eir; - bool confirm_name; - bool legacy; - - if (len < sizeof(*ev)) { - error("mgmt_device_found too short (%zu bytes)", len); - return; - } - - eir_len = bt_get_le16(&ev->eir_len); - if (len != sizeof(*ev) + eir_len) { - error("mgmt_device_found event size mismatch (%zu != %zu)", - len, sizeof(*ev) + eir_len); - return; - } - - adapter = adapter_find_by_id(index); - if (!adapter) - return; - - if (eir_len == 0) - eir = NULL; - else - eir = ev->eir; - - flags = btohl(ev->flags); - - ba2str(&ev->addr.bdaddr, addr); - DBG("hci%u addr %s, rssi %d flags 0x%04x eir_len %u", - index, addr, ev->rssi, flags, eir_len); - - confirm_name = (flags & MGMT_DEV_FOUND_CONFIRM_NAME); - legacy = (flags & MGMT_DEV_FOUND_LEGACY_PAIRING); - - adapter_update_found_devices(adapter, &ev->addr.bdaddr, ev->addr.type, - ev->rssi, confirm_name, legacy, - eir, eir_len); -} - static void mgmt_device_blocked(uint16_t index, void *buf, size_t len) { struct btd_adapter *adapter; @@ -870,7 +824,7 @@ static gboolean mgmt_event(GIOChannel *channel, GIOCondition cond, mgmt_auth_failed(index, buf + MGMT_HDR_SIZE, len); break; case MGMT_EV_DEVICE_FOUND: - mgmt_device_found(index, buf + MGMT_HDR_SIZE, len); + DBG("device_found event"); break; case MGMT_EV_DISCOVERING: DBG("discovering event"); -- 2.47.3