diff --git a/lib/mgmt.h b/lib/mgmt.h
index 07d325d..202eb86 100644
--- a/lib/mgmt.h
+++ b/lib/mgmt.h
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
(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;
}
}
| (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 {
| (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;
}
}
| (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;
}
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--;
rssi = *(info->data + info->length);
btd_event_device_found(&dev->bdaddr, &info->bdaddr, 0, rssi,
- info->data, info->length);
+ 0, info->data, info->length);
}
}
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,
.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
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)
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,
.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
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;
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
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);
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
}
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;
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
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);