diff --git a/src/adapter.c b/src/adapter.c
index 4e6eb57..b12dd33 100644
--- a/src/adapter.c
+++ b/src/adapter.c
return -ENOSYS;
}
-static void dev_disconnected(struct btd_adapter *adapter,
- const struct mgmt_addr_info *addr,
- uint8_t reason)
-{
- struct btd_device *device;
- char dst[18];
-
- ba2str(&addr->bdaddr, dst);
-
- DBG("Device %s disconnected, reason %u", dst, reason);
-
- device = adapter_find_device(adapter, dst);
- if (device)
- adapter_remove_connection(adapter, device);
-
- adapter_bonding_complete(adapter, &addr->bdaddr, addr->type,
- MGMT_STATUS_DISCONNECTED);
-}
-
-static void disconnect_complete(uint8_t status, uint16_t length,
- const void *param, void *user_data)
-{
- const struct mgmt_rp_disconnect *rp = param;
- struct btd_adapter *adapter = user_data;
-
- if (status != MGMT_STATUS_SUCCESS) {
- error("Failed to disconnect device: %s (0x%02x)",
- mgmt_errstr(status), status);
- return;
- }
-
- if (length < sizeof(*rp)) {
- error("Too small device disconnect response");
- return;
- }
-
- dev_disconnected(adapter, &rp->addr, MGMT_DEV_DISCONN_LOCAL_HOST);
-}
-
-int btd_adapter_disconnect_device(struct btd_adapter *adapter,
- const bdaddr_t *bdaddr,
- uint8_t bdaddr_type)
-
-{
- struct mgmt_cp_disconnect cp;
-
- memset(&cp, 0, sizeof(cp));
- bacpy(&cp.addr.bdaddr, bdaddr);
- cp.addr.type = bdaddr_type;
-
- if (mgmt_send(adapter->mgmt, MGMT_OP_DISCONNECT,
- adapter->dev_id, sizeof(cp), &cp,
- disconnect_complete, adapter, NULL) > 0)
- return 0;
-
- return -EIO;
-}
-
int btd_adapter_remove_bonding(struct btd_adapter *adapter,
const bdaddr_t *bdaddr, uint8_t bdaddr_type)
{
passkey);
}
+int adapter_cancel_bonding(struct btd_adapter *adapter, const bdaddr_t *bdaddr,
+ uint8_t addr_type)
+{
+ struct mgmt_addr_info cp;
+ char addr[18];
+
+ ba2str(bdaddr, addr);
+ DBG("hci%u bdaddr %s type %u", adapter->dev_id, addr, addr_type);
+
+ memset(&cp, 0, sizeof(cp));
+ bacpy(&cp.bdaddr, bdaddr);
+ cp.type = addr_type;
+
+ if (mgmt_send(adapter->mgmt, MGMT_OP_CANCEL_PAIR_DEVICE,
+ adapter->dev_id, sizeof(cp), &cp,
+ NULL, NULL, NULL) > 0)
+ return 0;
+
+ return -EIO;
+}
+
+static void check_oob_bonding_complete(struct btd_adapter *adapter,
+ const bdaddr_t *bdaddr, uint8_t status)
+{
+ if (!adapter->oob_handler || !adapter->oob_handler->bonding_cb)
+ return;
+
+ if (bacmp(bdaddr, &adapter->oob_handler->remote_addr) != 0)
+ return;
+
+ adapter->oob_handler->bonding_cb(adapter, bdaddr, status,
+ adapter->oob_handler->user_data);
+
+ g_free(adapter->oob_handler);
+ adapter->oob_handler = NULL;
+}
+
+static void adapter_bonding_complete(struct btd_adapter *adapter,
+ const bdaddr_t *bdaddr,
+ uint8_t addr_type, uint8_t status)
+{
+ struct btd_device *device;
+ char addr[18];
+
+ ba2str(bdaddr, addr);
+ if (status == 0)
+ device = adapter_get_device(adapter, addr, addr_type);
+ else
+ device = adapter_find_device(adapter, addr);
+
+ if (device != NULL)
+ device_bonding_complete(device, status);
+
+ if (adapter->discov_suspended) {
+ adapter->discov_suspended = FALSE;
+ mgmt_start_discovery(adapter);
+ }
+
+ check_oob_bonding_complete(adapter, bdaddr, status);
+}
+
static void pair_device_complete(uint8_t status, uint16_t length,
const void *param, void *user_data)
{
return -EIO;
}
-int adapter_cancel_bonding(struct btd_adapter *adapter, const bdaddr_t *bdaddr,
- uint8_t addr_type)
+static void dev_disconnected(struct btd_adapter *adapter,
+ const struct mgmt_addr_info *addr,
+ uint8_t reason)
{
- struct mgmt_addr_info cp;
- char addr[18];
+ struct btd_device *device;
+ char dst[18];
- ba2str(bdaddr, addr);
- DBG("hci%u bdaddr %s type %u", adapter->dev_id, addr, addr_type);
+ ba2str(&addr->bdaddr, dst);
- memset(&cp, 0, sizeof(cp));
- bacpy(&cp.bdaddr, bdaddr);
- cp.type = addr_type;
+ DBG("Device %s disconnected, reason %u", dst, reason);
- if (mgmt_send(adapter->mgmt, MGMT_OP_CANCEL_PAIR_DEVICE,
- adapter->dev_id, sizeof(cp), &cp,
- NULL, NULL, NULL) > 0)
- return 0;
+ device = adapter_find_device(adapter, dst);
+ if (device)
+ adapter_remove_connection(adapter, device);
- return -EIO;
+ adapter_bonding_complete(adapter, &addr->bdaddr, addr->type,
+ MGMT_STATUS_DISCONNECTED);
}
-static void check_oob_bonding_complete(struct btd_adapter *adapter,
- const bdaddr_t *bdaddr, uint8_t status)
+static void disconnect_complete(uint8_t status, uint16_t length,
+ const void *param, void *user_data)
{
- if (!adapter->oob_handler || !adapter->oob_handler->bonding_cb)
- return;
+ const struct mgmt_rp_disconnect *rp = param;
+ struct btd_adapter *adapter = user_data;
- if (bacmp(bdaddr, &adapter->oob_handler->remote_addr) != 0)
+ if (status != MGMT_STATUS_SUCCESS) {
+ error("Failed to disconnect device: %s (0x%02x)",
+ mgmt_errstr(status), status);
return;
+ }
- adapter->oob_handler->bonding_cb(adapter, bdaddr, status,
- adapter->oob_handler->user_data);
+ if (length < sizeof(*rp)) {
+ error("Too small device disconnect response");
+ return;
+ }
- g_free(adapter->oob_handler);
- adapter->oob_handler = NULL;
+ dev_disconnected(adapter, &rp->addr, MGMT_DEV_DISCONN_LOCAL_HOST);
}
-void adapter_bonding_complete(struct btd_adapter *adapter,
- const bdaddr_t *bdaddr,
- uint8_t addr_type, uint8_t status)
-{
- struct btd_device *device;
- char addr[18];
+int btd_adapter_disconnect_device(struct btd_adapter *adapter,
+ const bdaddr_t *bdaddr,
+ uint8_t bdaddr_type)
- ba2str(bdaddr, addr);
- if (status == 0)
- device = adapter_get_device(adapter, addr, addr_type);
- else
- device = adapter_find_device(adapter, addr);
+{
+ struct mgmt_cp_disconnect cp;
- if (device != NULL)
- device_bonding_complete(device, status);
+ memset(&cp, 0, sizeof(cp));
+ bacpy(&cp.addr.bdaddr, bdaddr);
+ cp.addr.type = bdaddr_type;
- if (adapter->discov_suspended) {
- adapter->discov_suspended = FALSE;
- mgmt_start_discovery(adapter);
- }
+ if (mgmt_send(adapter->mgmt, MGMT_OP_DISCONNECT,
+ adapter->dev_id, sizeof(cp), &cp,
+ disconnect_complete, adapter, NULL) > 0)
+ return 0;
- check_oob_bonding_complete(adapter, bdaddr, status);
+ return -EIO;
}
static void auth_failed_callback(uint16_t index, uint16_t length,
diff --git a/src/adapter.h b/src/adapter.h
index c2cff69..5af8d0f 100644
--- a/src/adapter.h
+++ b/src/adapter.h
int adapter_cancel_bonding(struct btd_adapter *adapter, const bdaddr_t *bdaddr,
uint8_t addr_type);
-void adapter_bonding_complete(struct btd_adapter *adapter,
- const bdaddr_t *bdaddr,
- uint8_t addr_type, uint8_t status);
-
int adapter_set_io_capability(struct btd_adapter *adapter, uint8_t io_cap);
int btd_adapter_read_local_oob_data(struct btd_adapter *adapter);