From 0c6f4b692cc3684df0500d3c892d8e6e606145e6 Mon Sep 17 00:00:00 2001 From: Johan Hedberg Date: Mon, 19 Dec 2011 13:25:54 +0200 Subject: [PATCH] Add initial hooks to pass confirm_name info around --- lib/mgmt.h | 1 + plugins/hciops.c | 19 +++++++++++++------ plugins/mgmtops.c | 9 ++++++++- src/adapter.c | 19 ++++++++++++++++--- src/adapter.h | 8 +++++--- src/event.c | 7 ++++--- src/event.h | 3 ++- 7 files changed, 49 insertions(+), 17 deletions(-) diff --git a/lib/mgmt.h b/lib/mgmt.h index 07d325d5a..202eb8615 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 54e29e5e2..6d6c6f06a 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 e9920f4a7..4fa56b893 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 1a701a419..a776997c7 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 ff1d65942..23bc8a57d 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 9849280ff..454056082 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 1c1098ab8..cce292e95 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); -- 2.47.3