Diff between 1678083247c614eb0da1807515311b35012f4832 and 70811dfc47ad2ca5b2c2fa96ce964d45fd4b82b5

Changed Files

File Additions Deletions Status
src/adapter.c +31 -7 modified
src/adapter.h +0 -2 modified
src/mgmt.c +2 -48 modified
src/mgmt.h +0 -2 modified

Full Patch

diff --git a/src/adapter.c b/src/adapter.c
index 75faa84..11ee19a 100644
--- a/src/adapter.c
+++ b/src/adapter.c
@@ -4135,11 +4135,6 @@ int adapter_set_io_capability(struct btd_adapter *adapter, uint8_t io_cap)
 	return -EIO;
 }
 
-int btd_adapter_read_local_oob_data(struct btd_adapter *adapter)
-{
-	return mgmt_read_local_oob_data(adapter->dev_id);
-}
-
 int btd_adapter_add_remote_oob_data(struct btd_adapter *adapter,
 					const bdaddr_t *bdaddr,
 					uint8_t *hash, uint8_t *randomizer)
@@ -4173,9 +4168,26 @@ gboolean btd_adapter_check_oob_handler(struct btd_adapter *adapter)
 	return adapter->oob_handler != NULL;
 }
 
-void adapter_read_local_oob_data_complete(struct btd_adapter *adapter,
-					uint8_t *hash, uint8_t *randomizer)
+static void read_local_oob_data_complete(uint8_t status, uint16_t length,
+					const void *param, void *user_data)
 {
+	const struct mgmt_rp_read_local_oob_data *rp = param;
+	struct btd_adapter *adapter = user_data;
+	const uint8_t *hash, *randomizer;
+
+	if (status != MGMT_STATUS_SUCCESS) {
+		error("Read local OOB data failed: %s (0x%02x)",
+						mgmt_errstr(status), status);
+		hash = NULL;
+		randomizer = NULL;
+	} else if (length < sizeof(*rp)) {
+		error("Too small read local OOB data response");
+		return;
+	} else {
+		hash = rp->hash;
+		randomizer = rp->randomizer;
+	}
+
 	if (!adapter->oob_handler || !adapter->oob_handler->read_local_cb)
 		return;
 
@@ -4186,6 +4198,18 @@ void adapter_read_local_oob_data_complete(struct btd_adapter *adapter,
 	adapter->oob_handler = NULL;
 }
 
+int btd_adapter_read_local_oob_data(struct btd_adapter *adapter)
+{
+	DBG("hci%u", adapter->dev_id);
+
+	if (mgmt_send(adapter->mgmt, MGMT_OP_READ_LOCAL_OOB_DATA,
+			adapter->dev_id, 0, NULL, read_local_oob_data_complete,
+			adapter, NULL) > 0)
+		return 0;
+
+	return -EIO;
+}
+
 void btd_adapter_for_each_device(struct btd_adapter *adapter,
 			void (*cb)(struct btd_device *device, void *data),
 			void *data)
diff --git a/src/adapter.h b/src/adapter.h
index 8844fd4..43fb3ea 100644
--- a/src/adapter.h
+++ b/src/adapter.h
@@ -184,8 +184,6 @@ void adapter_bonding_complete(struct btd_adapter *adapter,
 int adapter_set_io_capability(struct btd_adapter *adapter, uint8_t io_cap);
 
 int btd_adapter_read_local_oob_data(struct btd_adapter *adapter);
-void adapter_read_local_oob_data_complete(struct btd_adapter *adapter,
-					uint8_t *hash, uint8_t *randomizer);
 
 int btd_adapter_add_remote_oob_data(struct btd_adapter *adapter,
 					const bdaddr_t *bdaddr,
diff --git a/src/mgmt.c b/src/mgmt.c
index 07c80fd..a0919f3 100644
--- a/src/mgmt.c
+++ b/src/mgmt.c
@@ -456,36 +456,6 @@ static void pair_device_complete(uint16_t index, uint8_t status,
 	bonding_complete(index, &rp->addr, status);
 }
 
-static void read_local_oob_data_complete(uint16_t index, void *buf, size_t len)
-{
-	struct mgmt_rp_read_local_oob_data *rp = buf;
-	struct btd_adapter *adapter;
-
-	if (len != sizeof(*rp)) {
-		error("read_local_oob_data_complete event size mismatch "
-					"(%zu != %zu)", len, sizeof(*rp));
-		return;
-	}
-
-	DBG("hci%u", index);
-
-	adapter = adapter_find_by_id(index);
-	if (adapter)
-		adapter_read_local_oob_data_complete(adapter, rp->hash,
-							rp->randomizer);
-}
-
-static void read_local_oob_data_failed(uint16_t index)
-{
-	struct btd_adapter *adapter;
-
-	DBG("hci%u", index);
-
-	adapter = adapter_find_by_id(index);
-	if (adapter)
-		adapter_read_local_oob_data_complete(adapter, NULL, NULL);
-}
-
 static void mgmt_cmd_complete(uint16_t index, void *buf, size_t len)
 {
 	struct mgmt_ev_cmd_complete *ev = buf;
@@ -576,7 +546,7 @@ static void mgmt_cmd_complete(uint16_t index, void *buf, size_t len)
 		DBG("set_local_name complete");
 		break;
 	case MGMT_OP_READ_LOCAL_OOB_DATA:
-		read_local_oob_data_complete(index, ev->data, len);
+		DBG("read_local_oob_data complete");
 		break;
 	case MGMT_OP_ADD_REMOTE_OOB_DATA:
 		DBG("add_remote_oob_data complete");
@@ -628,7 +598,7 @@ static void mgmt_cmd_status(uint16_t index, void *buf, size_t len)
 
 	switch (opcode) {
 	case MGMT_OP_READ_LOCAL_OOB_DATA:
-		read_local_oob_data_failed(index);
+		DBG("read_local_oob_data failed");
 		break;
 	}
 
@@ -1106,22 +1076,6 @@ int mgmt_cancel_bonding(int index, const bdaddr_t *bdaddr, uint8_t addr_type)
 	return 0;
 }
 
-int mgmt_read_local_oob_data(int index)
-{
-	struct mgmt_hdr hdr;
-
-	DBG("hci%d", index);
-
-	hdr.opcode = htobs(MGMT_OP_READ_LOCAL_OOB_DATA);
-	hdr.len = 0;
-	hdr.index = htobs(index);
-
-	if (write(mgmt_sock, &hdr, sizeof(hdr)) < 0)
-		return -errno;
-
-	return 0;
-}
-
 int mgmt_add_remote_oob_data(int index, const bdaddr_t *bdaddr,
 					uint8_t *hash, uint8_t *randomizer)
 {
diff --git a/src/mgmt.h b/src/mgmt.h
index a097da1..d63bc10 100644
--- a/src/mgmt.h
+++ b/src/mgmt.h
@@ -39,8 +39,6 @@ int mgmt_confirm_reply(int index, const bdaddr_t *bdaddr, uint8_t bdaddr_type,
 int mgmt_passkey_reply(int index, const bdaddr_t *bdaddr, uint8_t bdaddr_type,
 							uint32_t passkey);
 
-int mgmt_read_local_oob_data(int index);
-
 int mgmt_add_remote_oob_data(int index, const bdaddr_t *bdaddr,
 					uint8_t *hash, uint8_t *randomizer);
 int mgmt_remove_remote_oob_data(int index, const bdaddr_t *bdaddr);