Diff between 7461fb98e3bf5169a3d4b459cc68dabb13e0fe43 and dd84242d273a4f19f56c7e54a4c0388ed459e7c1

Changed Files

File Additions Deletions Status
lib/mgmt.h +6 -6 modified
mgmt/main.c +12 -10 modified
plugins/hciops.c +1 -1 modified
plugins/mgmtops.c +16 -10 modified
src/adapter.c +2 -1 modified
src/adapter.h +2 -1 modified

Full Patch

diff --git a/lib/mgmt.h b/lib/mgmt.h
index 37e63c8..79db878 100644
--- a/lib/mgmt.h
+++ b/lib/mgmt.h
@@ -141,7 +141,7 @@ struct mgmt_cp_remove_uuid {
 } __packed;
 
 struct mgmt_link_key_info {
-	bdaddr_t bdaddr;
+	struct mgmt_addr_info addr;
 	uint8_t type;
 	uint8_t val[16];
 	uint8_t pin_len;
@@ -187,14 +187,14 @@ struct mgmt_rp_get_connections {
 
 #define MGMT_OP_PIN_CODE_REPLY		0x0016
 struct mgmt_cp_pin_code_reply {
-	bdaddr_t bdaddr;
+	struct mgmt_addr_info addr;
 	uint8_t pin_len;
 	uint8_t pin_code[16];
 } __packed;
 
 #define MGMT_OP_PIN_CODE_NEG_REPLY	0x0017
 struct mgmt_cp_pin_code_neg_reply {
-	bdaddr_t bdaddr;
+	struct mgmt_addr_info addr;
 } __packed;
 
 #define MGMT_OP_SET_IO_CAPABILITY	0x0018
@@ -277,11 +277,11 @@ struct mgmt_cp_start_discovery {
 
 #define MGMT_OP_CONFIRM_NAME		0x0025
 struct mgmt_cp_confirm_name {
-	bdaddr_t bdaddr;
+	struct mgmt_addr_info addr;
 	uint8_t name_known;
 } __packed;
 struct mgmt_rp_confirm_name {
-	bdaddr_t bdaddr;
+	struct mgmt_addr_info addr;
 	uint8_t status;
 } __packed;
 
@@ -358,7 +358,7 @@ struct mgmt_ev_connect_failed {
 
 #define MGMT_EV_PIN_CODE_REQUEST	0x000E
 struct mgmt_ev_pin_code_request {
-	bdaddr_t bdaddr;
+	struct mgmt_addr_info addr;
 	uint8_t secure;
 } __packed;
 
diff --git a/mgmt/main.c b/mgmt/main.c
index 1f2cbcd..c3a51c3 100644
--- a/mgmt/main.c
+++ b/mgmt/main.c
@@ -401,7 +401,7 @@ static int mgmt_new_link_key(int mgmt_sk, uint16_t index,
 
 	if (monitor) {
 		char addr[18];
-		ba2str(&ev->key.bdaddr, addr);
+		ba2str(&ev->key.addr.bdaddr, addr);
 		printf("hci%u new_link_key %s type 0x%02x pin_len %d "
 				"store_hint %u\n", index, addr, ev->key.type,
 				ev->key.pin_len, ev->store_hint);
@@ -546,7 +546,7 @@ static void confirm_name_rsp(int mgmt_sk, uint16_t op, uint16_t id,
 		return;
 	}
 
-	ba2str(&rp->bdaddr, addr);
+	ba2str(&rp->addr.bdaddr, addr);
 
 	if (rp->status != 0)
 		fprintf(stderr,
@@ -587,7 +587,7 @@ static int mgmt_device_found(int mgmt_sk, uint16_t index,
 		struct mgmt_cp_confirm_name cp;
 
 		memset(&cp, 0, sizeof(cp));
-		bacpy(&cp.bdaddr, &ev->addr.bdaddr);
+		memcpy(&cp.addr, &ev->addr, sizeof(cp.addr));
 		if (resolve_names)
 			cp.name_known = 0;
 		else
@@ -614,13 +614,14 @@ static void pin_rsp(int mgmt_sk, uint16_t op, uint16_t id, uint8_t status,
 	printf("hci%u PIN Reply successful\n", id);
 }
 
-static int mgmt_pin_reply(int mgmt_sk, uint16_t index, bdaddr_t *bdaddr,
+static int mgmt_pin_reply(int mgmt_sk, uint16_t index,
+						struct mgmt_addr_info *addr,
 						const char *pin, size_t len)
 {
 	struct mgmt_cp_pin_code_reply cp;
 
 	memset(&cp, 0, sizeof(cp));
-	bacpy(&cp.bdaddr, bdaddr);
+	memcpy(&cp.addr, addr, sizeof(cp.addr));
 	cp.pin_len = len;
 	memcpy(cp.pin_code, pin, len);
 
@@ -641,12 +642,13 @@ static void pin_neg_rsp(int mgmt_sk, uint16_t op, uint16_t id, uint8_t status,
 	printf("hci%u PIN Negative Reply successful\n", id);
 }
 
-static int mgmt_pin_neg_reply(int mgmt_sk, uint16_t index, bdaddr_t *bdaddr)
+static int mgmt_pin_neg_reply(int mgmt_sk, uint16_t index,
+						struct mgmt_addr_info *addr)
 {
 	struct mgmt_cp_pin_code_neg_reply cp;
 
 	memset(&cp, 0, sizeof(cp));
-	bacpy(&cp.bdaddr, bdaddr);
+	memcpy(&cp.addr, addr, sizeof(cp.addr));
 
 	return mgmt_send_cmd(mgmt_sk, MGMT_OP_PIN_CODE_NEG_REPLY, index,
 					&cp, sizeof(cp), pin_neg_rsp, NULL);
@@ -667,7 +669,7 @@ static int mgmt_request_pin(int mgmt_sk, uint16_t index,
 
 	if (monitor) {
 		char addr[18];
-		ba2str(&ev->bdaddr, addr);
+		ba2str(&ev->addr.bdaddr, addr);
 		printf("hci%u %s request PIN\n", index, addr);
 	}
 
@@ -677,7 +679,7 @@ static int mgmt_request_pin(int mgmt_sk, uint16_t index,
 	memset(pin, 0, sizeof(pin));
 
 	if (fgets(pin, sizeof(pin), stdin) == NULL || pin[0] == '\n')
-		return mgmt_pin_neg_reply(mgmt_sk, index, &ev->bdaddr);
+		return mgmt_pin_neg_reply(mgmt_sk, index, &ev->addr);
 
 	pin_len = strlen(pin);
 	if (pin[pin_len - 1] == '\n') {
@@ -685,7 +687,7 @@ static int mgmt_request_pin(int mgmt_sk, uint16_t index,
 		pin_len--;
 	}
 
-	return mgmt_pin_reply(mgmt_sk, index, &ev->bdaddr, pin, pin_len);
+	return mgmt_pin_reply(mgmt_sk, index, &ev->addr, pin, pin_len);
 }
 
 static void confirm_rsp(int mgmt_sk, uint16_t op, uint16_t id, uint8_t status,
diff --git a/plugins/hciops.c b/plugins/hciops.c
index ee73c45..04802f4 100644
--- a/plugins/hciops.c
+++ b/plugins/hciops.c
@@ -3770,7 +3770,7 @@ static int hciops_remove_remote_oob_data(int index, bdaddr_t *bdaddr)
 	return 0;
 }
 
-static int hciops_confirm_name(int index, bdaddr_t *bdaddr,
+static int hciops_confirm_name(int index, bdaddr_t *bdaddr, addr_type_t type,
 							gboolean name_known)
 {
 	struct dev_info *info = &devs[index];
diff --git a/plugins/mgmtops.c b/plugins/mgmtops.c
index 5de0aa2..020c277 100644
--- a/plugins/mgmtops.c
+++ b/plugins/mgmtops.c
@@ -389,11 +389,11 @@ static void mgmt_new_link_key(int sk, uint16_t index, void *buf, size_t len)
 	info = &controllers[index];
 
 	if (ev->store_hint)
-		btd_event_link_key_notify(&info->bdaddr, &ev->key.bdaddr,
+		btd_event_link_key_notify(&info->bdaddr, &ev->key.addr.bdaddr,
 						ev->key.val, ev->key.type,
 						ev->key.pin_len);
 
-	bonding_complete(info, &ev->key.bdaddr, 0);
+	bonding_complete(info, &ev->key.addr.bdaddr, 0);
 }
 
 static inline addr_type_t addr_type(uint8_t mgmt_addr_type)
@@ -541,7 +541,8 @@ static int mgmt_pincode_reply(int index, bdaddr_t *bdaddr, const char *pin,
 		hdr->index = htobs(index);
 
 		cp = (void *) &buf[sizeof(*hdr)];
-		bacpy(&cp->bdaddr, bdaddr);
+		bacpy(&cp->addr.bdaddr, bdaddr);
+		cp->addr.type = MGMT_ADDR_BREDR;
 
 		buf_len = sizeof(*hdr) + sizeof(*cp);
 	} else {
@@ -555,7 +556,8 @@ static int mgmt_pincode_reply(int index, bdaddr_t *bdaddr, const char *pin,
 		hdr->index = htobs(index);
 
 		cp = (void *) &buf[sizeof(*hdr)];
-		bacpy(&cp->bdaddr, bdaddr);
+		bacpy(&cp->addr.bdaddr, bdaddr);
+		cp->addr.type = MGMT_ADDR_BREDR;
 		cp->pin_len = pin_len;
 		memcpy(cp->pin_code, pin, pin_len);
 
@@ -580,7 +582,7 @@ static void mgmt_pin_code_request(int sk, uint16_t index, void *buf, size_t len)
 		return;
 	}
 
-	ba2str(&ev->bdaddr, addr);
+	ba2str(&ev->addr.bdaddr, addr);
 
 	DBG("hci%u %s", index, addr);
 
@@ -591,10 +593,11 @@ static void mgmt_pin_code_request(int sk, uint16_t index, void *buf, size_t len)
 
 	info = &controllers[index];
 
-	err = btd_event_request_pin(&info->bdaddr, &ev->bdaddr, ev->secure);
+	err = btd_event_request_pin(&info->bdaddr, &ev->addr.bdaddr,
+								ev->secure);
 	if (err < 0) {
 		error("btd_event_request_pin: %s", strerror(-err));
-		mgmt_pincode_reply(index, &ev->bdaddr, NULL, 0);
+		mgmt_pincode_reply(index, &ev->addr.bdaddr, NULL, 0);
 	}
 }
 
@@ -1971,7 +1974,8 @@ static int mgmt_load_link_keys(int index, GSList *keys, gboolean debug_keys)
 	for (l = keys, key = cp->keys; l != NULL; l = g_slist_next(l), key++) {
 		struct link_key_info *info = l->data;
 
-		bacpy(&key->bdaddr, &info->bdaddr);
+		bacpy(&key->addr.bdaddr, &info->bdaddr);
+		key->addr.type = MGMT_ADDR_BREDR;
 		key->type = info->type;
 		memcpy(key->val, info->key, 16);
 		key->pin_len = info->pin_len;
@@ -2123,7 +2127,8 @@ 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)
+static int mgmt_confirm_name(int index, bdaddr_t *bdaddr, addr_type_t type,
+							gboolean name_known)
 {
 	char buf[MGMT_HDR_SIZE + sizeof(struct mgmt_cp_confirm_name)];
 	struct mgmt_hdr *hdr = (void *) buf;
@@ -2139,7 +2144,8 @@ static int mgmt_confirm_name(int index, bdaddr_t *bdaddr, gboolean name_known)
 	hdr->index = htobs(index);
 	hdr->len = htobs(sizeof(*cp));
 
-	bacpy(&cp->bdaddr, bdaddr);
+	bacpy(&cp->addr.bdaddr, bdaddr);
+	cp->addr.type = mgmt_addr_type(type);
 	cp->name_known = name_known;
 
 	if (write(mgmt_sock, &buf, sizeof(buf)) < 0)
diff --git a/src/adapter.c b/src/adapter.c
index 36073ff..5742fd2 100644
--- a/src/adapter.c
+++ b/src/adapter.c
@@ -2943,7 +2943,8 @@ void adapter_update_found_devices(struct btd_adapter *adapter,
 	}
 
 	if (confirm_name)
-		adapter_ops->confirm_name(adapter->dev_id, bdaddr, name_known);
+		adapter_ops->confirm_name(adapter->dev_id, bdaddr, type,
+								name_known);
 
 	alias = read_stored_data(&adapter->bdaddr, bdaddr, "aliases");
 
diff --git a/src/adapter.h b/src/adapter.h
index 6c015ef..c285172 100644
--- a/src/adapter.h
+++ b/src/adapter.h
@@ -221,7 +221,8 @@ 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 (*confirm_name) (int index, bdaddr_t *bdaddr, addr_type_t type,
+							gboolean name_known);
 	int (*load_ltks) (int index, GSList *keys);
 };