Diff between e8c8ec2cac01c091f3a2a8dc56d4eed252e9e19b and 0c6f4b692cc3684df0500d3c892d8e6e606145e6

Changed Files

File Additions Deletions Status
lib/mgmt.h +1 -0 modified
plugins/hciops.c +13 -6 modified
plugins/mgmtops.c +8 -1 modified
src/adapter.c +16 -3 modified
src/adapter.h +5 -3 modified
src/event.c +4 -3 modified
src/event.h +2 -1 modified

Full Patch

diff --git a/lib/mgmt.h b/lib/mgmt.h
index 07d325d..202eb86 100644
--- a/lib/mgmt.h
+++ b/lib/mgmt.h
@@ -350,6 +350,7 @@ struct mgmt_ev_device_found {
 	struct mgmt_addr_info addr;
 	uint8_t dev_class[3];
 	int8_t rssi;
+	uint8_t confirm_name;
 	uint8_t eir[HCI_MAX_EIR_LENGTH];
 } __packed;
 
diff --git a/plugins/hciops.c b/plugins/hciops.c
index 54e29e5..6d6c6f0 100644
--- a/plugins/hciops.c
+++ b/plugins/hciops.c
@@ -1869,7 +1869,7 @@ static inline void inquiry_result(int index, int plen, void *ptr)
 						(info->dev_class[2] << 16);
 
 		btd_event_device_found(&dev->bdaddr, &info->bdaddr, class,
-								0, NULL, 0);
+								0, 0, NULL, 0);
 		ptr += INQUIRY_INFO_SIZE;
 	}
 }
@@ -1891,7 +1891,7 @@ static inline void inquiry_result_with_rssi(int index, int plen, void *ptr)
 						| (info->dev_class[2] << 16);
 
 			btd_event_device_found(&dev->bdaddr, &info->bdaddr,
-						class, info->rssi, NULL, 0);
+						class, info->rssi, 0, NULL, 0);
 			ptr += INQUIRY_INFO_WITH_RSSI_AND_PSCAN_MODE_SIZE;
 		}
 	} else {
@@ -1902,7 +1902,7 @@ static inline void inquiry_result_with_rssi(int index, int plen, void *ptr)
 						| (info->dev_class[2] << 16);
 
 			btd_event_device_found(&dev->bdaddr, &info->bdaddr,
-						class, info->rssi, NULL, 0);
+						class, info->rssi, 0, NULL, 0);
 			ptr += INQUIRY_INFO_WITH_RSSI_SIZE;
 		}
 	}
@@ -1921,7 +1921,7 @@ static inline void extended_inquiry_result(int index, int plen, void *ptr)
 					| (info->dev_class[2] << 16);
 
 		btd_event_device_found(&dev->bdaddr, &info->bdaddr, class,
-						info->rssi, info->data,
+						info->rssi, 0, info->data,
 						HCI_MAX_EIR_LENGTH);
 		ptr += EXTENDED_INQUIRY_INFO_SIZE;
 	}
@@ -2150,7 +2150,7 @@ static inline void le_advertising_report(int index, evt_le_meta_event *meta)
 	rssi = *(info->data + info->length);
 
 	btd_event_device_found(&dev->bdaddr, &info->bdaddr, 0, rssi,
-						info->data, info->length);
+						0, info->data, info->length);
 
 	num_reports--;
 
@@ -2160,7 +2160,7 @@ static inline void le_advertising_report(int index, evt_le_meta_event *meta)
 		rssi = *(info->data + info->length);
 
 		btd_event_device_found(&dev->bdaddr, &info->bdaddr, 0, rssi,
-						info->data, info->length);
+						0, info->data, info->length);
 	}
 }
 
@@ -3608,6 +3608,12 @@ static int hciops_remove_remote_oob_data(int index, bdaddr_t *bdaddr)
 	return 0;
 }
 
+static int hciops_confirm_name(int index, bdaddr_t *bdaddr,
+							gboolean name_known)
+{
+	return -ENOSYS;
+}
+
 static struct btd_adapter_ops hci_ops = {
 	.setup = hciops_setup,
 	.cleanup = hciops_cleanup,
@@ -3645,6 +3651,7 @@ static struct btd_adapter_ops hci_ops = {
 	.read_local_oob_data = hciops_read_local_oob_data,
 	.add_remote_oob_data = hciops_add_remote_oob_data,
 	.remove_remote_oob_data = hciops_remove_remote_oob_data,
+	.confirm_name = hciops_confirm_name,
 };
 
 static int hciops_init(void)
diff --git a/plugins/mgmtops.c b/plugins/mgmtops.c
index e9920f4..4fa56b8 100644
--- a/plugins/mgmtops.c
+++ b/plugins/mgmtops.c
@@ -1269,7 +1269,8 @@ static void mgmt_device_found(int sk, uint16_t index, void *buf, size_t len)
 						ev->rssi, eir ? "eir" : "");
 
 	btd_event_device_found(&info->bdaddr, &ev->addr.bdaddr, cls,
-					ev->rssi, eir, HCI_MAX_EIR_LENGTH);
+						ev->rssi, ev->confirm_name,
+						eir, HCI_MAX_EIR_LENGTH);
 }
 
 static void mgmt_remote_name(int sk, uint16_t index, void *buf, size_t len)
@@ -2029,6 +2030,11 @@ static int mgmt_remove_remote_oob_data(int index, bdaddr_t *bdaddr)
 	return 0;
 }
 
+static int mgmt_confirm_name(int index, bdaddr_t *bdaddr, gboolean name_known)
+{
+	return -ENOSYS;
+}
+
 static struct btd_adapter_ops mgmt_ops = {
 	.setup = mgmt_setup,
 	.cleanup = mgmt_cleanup,
@@ -2066,6 +2072,7 @@ static struct btd_adapter_ops mgmt_ops = {
 	.read_local_oob_data = mgmt_read_local_oob_data,
 	.add_remote_oob_data = mgmt_add_remote_oob_data,
 	.remove_remote_oob_data = mgmt_remove_remote_oob_data,
+	.confirm_name = mgmt_confirm_name,
 };
 
 static int mgmt_init(void)
diff --git a/src/adapter.c b/src/adapter.c
index 1a701a4..a776997 100644
--- a/src/adapter.c
+++ b/src/adapter.c
@@ -2898,9 +2898,10 @@ static char *read_stored_data(bdaddr_t *local, bdaddr_t *peer, const char *file)
 	return textfile_get(filename, peer_addr);
 }
 
-void adapter_update_found_devices(struct btd_adapter *adapter, bdaddr_t *bdaddr,
-						uint32_t class, int8_t rssi,
-						uint8_t *data, uint8_t data_len)
+void adapter_update_found_devices(struct btd_adapter *adapter,
+					bdaddr_t *bdaddr, uint32_t class,
+					int8_t rssi, uint8_t confirm_name,
+					uint8_t *data, uint8_t data_len)
 {
 	struct remote_dev_info *dev, match;
 	struct eir_data eir_data;
@@ -2957,6 +2958,18 @@ void adapter_update_found_devices(struct btd_adapter *adapter, bdaddr_t *bdaddr,
 		name_status = NAME_NOT_REQUIRED;
 	}
 
+	if (confirm_name) {
+		gboolean name_known;
+
+		if (name_status == NAME_REQUIRED)
+			name_known = FALSE;
+		else
+			name_known = TRUE;
+
+		adapter_ops->confirm_name(adapter->dev_id, bdaddr,
+								name_known);
+	}
+
 	alias = read_stored_data(&adapter->bdaddr, bdaddr, "aliases");
 
 	dev = found_device_new(bdaddr, le, name, alias, class, legacy,
diff --git a/src/adapter.h b/src/adapter.h
index ff1d659..23bc8a5 100644
--- a/src/adapter.h
+++ b/src/adapter.h
@@ -109,9 +109,10 @@ void adapter_set_state(struct btd_adapter *adapter, int state);
 int adapter_get_state(struct btd_adapter *adapter);
 struct remote_dev_info *adapter_search_found_devices(struct btd_adapter *adapter,
 						struct remote_dev_info *match);
-void adapter_update_found_devices(struct btd_adapter *adapter, bdaddr_t *bdaddr,
-						uint32_t class, int8_t rssi,
-						uint8_t *data, uint8_t data_len);
+void adapter_update_found_devices(struct btd_adapter *adapter,
+					bdaddr_t *bdaddr, uint32_t class,
+					int8_t rssi, uint8_t confirm_name,
+					uint8_t *data, uint8_t data_len);
 int adapter_remove_found_device(struct btd_adapter *adapter, bdaddr_t *bdaddr);
 void adapter_emit_device_found(struct btd_adapter *adapter,
 						struct remote_dev_info *dev);
@@ -219,6 +220,7 @@ struct btd_adapter_ops {
 	int (*add_remote_oob_data) (int index, bdaddr_t *bdaddr, uint8_t *hash,
 							uint8_t *randomizer);
 	int (*remove_remote_oob_data) (int index, bdaddr_t *bdaddr);
+	int (*confirm_name) (int index, bdaddr_t *bdaddr, gboolean name_known);
 };
 
 int btd_register_adapter_ops(struct btd_adapter_ops *ops, gboolean priority);
diff --git a/src/event.c b/src/event.c
index 9849280..4540560 100644
--- a/src/event.c
+++ b/src/event.c
@@ -265,7 +265,8 @@ static void update_lastused(bdaddr_t *sba, bdaddr_t *dba)
 }
 
 void btd_event_device_found(bdaddr_t *local, bdaddr_t *peer, uint32_t class,
-				int8_t rssi, uint8_t *data, uint8_t data_len)
+					int8_t rssi, uint8_t confirm_name,
+					uint8_t *data, uint8_t data_len)
 {
 	struct btd_adapter *adapter;
 
@@ -281,8 +282,8 @@ void btd_event_device_found(bdaddr_t *local, bdaddr_t *peer, uint32_t class,
 	if (data)
 		write_remote_eir(local, peer, data);
 
-	adapter_update_found_devices(adapter, peer, class, rssi, data,
-								data_len);
+	adapter_update_found_devices(adapter, peer, class, rssi,
+						confirm_name, data, data_len);
 }
 
 void btd_event_set_legacy_pairing(bdaddr_t *local, bdaddr_t *peer,
diff --git a/src/event.h b/src/event.h
index 1c1098a..cce292e 100644
--- a/src/event.h
+++ b/src/event.h
@@ -24,7 +24,8 @@
 
 int btd_event_request_pin(bdaddr_t *sba, bdaddr_t *dba, gboolean secure);
 void btd_event_device_found(bdaddr_t *local, bdaddr_t *peer, uint32_t class,
-				int8_t rssi, uint8_t *data, uint8_t data_len);
+					int8_t rssi, uint8_t confirm_name,
+					uint8_t *data, uint8_t data_len);
 void btd_event_set_legacy_pairing(bdaddr_t *local, bdaddr_t *peer, gboolean legacy);
 void btd_event_remote_class(bdaddr_t *local, bdaddr_t *peer, uint32_t class);
 void btd_event_remote_name(bdaddr_t *local, bdaddr_t *peer, uint8_t status, char *name);