Diff between 5f504d774350a4795cb94cd76f892e08ee50f052 and 405c68c6dcf0da96bc24c1f909c42323d714830e

Changed Files

File Additions Deletions Status
plugins/dbusoob.c +1 -1 modified
plugins/neard.c +2 -2 modified
profiles/audio/manager.c +1 -1 modified
profiles/health/hdp.c +2 -1 modified
src/adapter.c +10 -7 modified
src/adapter.h +3 -2 modified
src/device.c +0 -8 modified
src/device.h +0 -1 modified
src/mgmt.c +34 -29 modified

Full Patch

diff --git a/plugins/dbusoob.c b/plugins/dbusoob.c
index ae492f1..77563f1 100644
--- a/plugins/dbusoob.c
+++ b/plugins/dbusoob.c
@@ -240,7 +240,7 @@ static DBusMessage *add_remote_data(DBusConnection *conn, DBusMessage *msg,
 	if (bachk(remote_data.addr) < 0)
 		return btd_error_invalid_args(msg);
 
-	device = adapter_get_device(adapter, remote_data.addr);
+	device = adapter_get_device(adapter, remote_data.addr, BDADDR_BREDR);
 	if (!device)
 		return btd_error_failed(msg, "Creating device object failed");
 
diff --git a/plugins/neard.c b/plugins/neard.c
index 6d73e48..a8c12fd 100644
--- a/plugins/neard.c
+++ b/plugins/neard.c
@@ -298,7 +298,7 @@ static int process_eir(struct btd_adapter *adapter, uint8_t *eir, size_t size,
 
 	DBG("hci%u remote:%s", adapter_get_dev_id(adapter), remote_address);
 
-	device = adapter_get_device(adapter, remote_address);
+	device = adapter_get_device(adapter, remote_address, BDADDR_BREDR);
 
 	err = check_device(device);
 	if (err < 0) {
@@ -497,7 +497,7 @@ static int process_nokia_com_bt(struct btd_adapter *adapter, void *data,
 	ba2str(&nokia.address, remote_address);
 	DBG("hci%u remote:%s", adapter_get_dev_id(adapter), remote_address);
 
-	device = adapter_get_device(adapter, remote_address);
+	device = adapter_get_device(adapter, remote_address, BDADDR_BREDR);
 
 	ret = check_device(device);
 	if (ret != 0) {
diff --git a/profiles/audio/manager.c b/profiles/audio/manager.c
index 8d7dc22..b30f242 100644
--- a/profiles/audio/manager.c
+++ b/profiles/audio/manager.c
@@ -730,7 +730,7 @@ struct audio_device *manager_get_device(const bdaddr_t *src,
 
 	ba2str(dst, addr);
 
-	device = adapter_get_device(adapter, addr);
+	device = adapter_get_device(adapter, addr, BDADDR_BREDR);
 	if (!device) {
 		error("Unable to get btd_device object for %s", addr);
 		return NULL;
diff --git a/profiles/health/hdp.c b/profiles/health/hdp.c
index 23cdc5f..93d260e 100644
--- a/profiles/health/hdp.c
+++ b/profiles/health/hdp.c
@@ -1203,7 +1203,8 @@ static void mcl_connected(struct mcap_mcl *mcl, gpointer data)
 		char str[18];
 
 		ba2str(&addr, str);
-		device = adapter_get_device(hdp_adapter->btd_adapter, str);
+		device = adapter_get_device(hdp_adapter->btd_adapter, str,
+								BDADDR_BREDR);
 		if (!device)
 			return;
 		hdp_device = create_health_device(device);
diff --git a/src/adapter.c b/src/adapter.c
index aa109fb..324c899 100644
--- a/src/adapter.c
+++ b/src/adapter.c
@@ -37,7 +37,9 @@
 #include <dirent.h>
 
 #include <bluetooth/bluetooth.h>
+#include <bluetooth/hci.h>
 #include <bluetooth/uuid.h>
+#include <bluetooth/mgmt.h>
 #include <bluetooth/sdp.h>
 #include <bluetooth/sdp_lib.h>
 
@@ -1081,7 +1083,7 @@ void adapter_remove_device(struct btd_adapter *adapter,
 }
 
 struct btd_device *adapter_get_device(struct btd_adapter *adapter,
-							const gchar *address)
+				const gchar *address, uint8_t addr_type)
 {
 	struct btd_device *device;
 
@@ -1094,7 +1096,7 @@ struct btd_device *adapter_get_device(struct btd_adapter *adapter,
 	if (device)
 		return device;
 
-	return adapter_create_device(adapter, address, BDADDR_BREDR);
+	return adapter_create_device(adapter, address, addr_type);
 }
 
 sdp_list_t *btd_adapter_get_services(struct btd_adapter *adapter)
@@ -2035,14 +2037,14 @@ static void load_connections(struct btd_adapter *adapter)
 	}
 
 	for (l = conns; l != NULL; l = g_slist_next(l)) {
-		bdaddr_t *bdaddr = l->data;
+		struct mgmt_addr_info *addr = l->data;
 		struct btd_device *device;
 		char address[18];
 
-		ba2str(bdaddr, address);
+		ba2str(&addr->bdaddr, address);
 		DBG("Adding existing connection to %s", address);
 
-		device = adapter_get_device(adapter, address);
+		device = adapter_get_device(adapter, address, addr->type);
 		if (device)
 			adapter_add_connection(adapter, device);
 	}
@@ -3729,14 +3731,15 @@ static void check_oob_bonding_complete(struct btd_adapter *adapter,
 }
 
 void adapter_bonding_complete(struct btd_adapter *adapter,
-					const bdaddr_t *bdaddr, uint8_t status)
+					const bdaddr_t *bdaddr,
+					uint8_t addr_type, uint8_t status)
 {
 	struct btd_device *device;
 	char addr[18];
 
 	ba2str(bdaddr, addr);
 	if (status == 0)
-		device = adapter_get_device(adapter, addr);
+		device = adapter_get_device(adapter, addr, addr_type);
 	else
 		device = adapter_find_device(adapter, addr);
 
diff --git a/src/adapter.h b/src/adapter.h
index 0ec0b8f..b0131f4 100644
--- a/src/adapter.h
+++ b/src/adapter.h
@@ -90,7 +90,7 @@ void btd_adapter_get_major_minor(struct btd_adapter *adapter, uint8_t *major,
 uint32_t btd_adapter_get_class(struct btd_adapter *adapter);
 const char *btd_adapter_get_name(struct btd_adapter *adapter);
 struct btd_device *adapter_get_device(struct btd_adapter *adapter,
-							const char *address);
+				const gchar *address, uint8_t addr_type);
 sdp_list_t *btd_adapter_get_services(struct btd_adapter *adapter);
 
 struct btd_device *adapter_find_device(struct btd_adapter *adapter, const char *dest);
@@ -223,7 +223,8 @@ int adapter_create_bonding(struct btd_adapter *adapter,
 int adapter_cancel_bonding(struct btd_adapter *adapter, const bdaddr_t *bdaddr);
 
 void adapter_bonding_complete(struct btd_adapter *adapter,
-					const bdaddr_t *bdaddr, uint8_t status);
+					const bdaddr_t *bdaddr,
+					uint8_t addr_type, uint8_t status);
 
 int btd_adapter_read_local_oob_data(struct btd_adapter *adapter);
 void adapter_read_local_oob_data_complete(struct btd_adapter *adapter,
diff --git a/src/device.c b/src/device.c
index c0d9395..9a28303 100644
--- a/src/device.c
+++ b/src/device.c
@@ -3139,14 +3139,6 @@ const bdaddr_t *device_get_address(struct btd_device *device)
 	return &device->bdaddr;
 }
 
-void device_set_addr_type(struct btd_device *device, uint8_t bdaddr_type)
-{
-	if (device == NULL)
-		return;
-
-	device->bdaddr_type = bdaddr_type;
-}
-
 uint8_t device_get_addr_type(struct btd_device *device)
 {
 	return device->bdaddr_type;
diff --git a/src/device.h b/src/device.h
index fbe18ef..2a073a0 100644
--- a/src/device.h
+++ b/src/device.h
@@ -56,7 +56,6 @@ void device_probe_profile(gpointer a, gpointer b);
 void device_remove_profile(gpointer a, gpointer b);
 struct btd_adapter *device_get_adapter(struct btd_device *device);
 const bdaddr_t *device_get_address(struct btd_device *device);
-void device_set_addr_type(struct btd_device *device, uint8_t bdaddr_type);
 uint8_t device_get_addr_type(struct btd_device *device);
 const gchar *device_get_path(struct btd_device *device);
 struct agent *device_get_agent(struct btd_device *device);
diff --git a/src/mgmt.c b/src/mgmt.c
index 81b0494..dfcf558 100644
--- a/src/mgmt.c
+++ b/src/mgmt.c
@@ -85,7 +85,8 @@ static guint mgmt_watch = 0;
 static uint8_t mgmt_version = 0;
 static uint16_t mgmt_revision = 0;
 
-static bool get_adapter_and_device(const bdaddr_t *src, bdaddr_t *dst,
+static bool get_adapter_and_device(const bdaddr_t *src,
+					struct mgmt_addr_info *addr,
 					struct btd_adapter **adapter,
 					struct btd_device **device,
 					bool create)
@@ -98,10 +99,10 @@ static bool get_adapter_and_device(const bdaddr_t *src, bdaddr_t *dst,
 		return false;
 	}
 
-	ba2str(dst, peer_addr);
+	ba2str(&addr->bdaddr, peer_addr);
 
 	if (create)
-		*device = adapter_get_device(*adapter, peer_addr);
+		*device = adapter_get_device(*adapter, peer_addr, addr->type);
 	else
 		*device = adapter_find_device(*adapter, peer_addr);
 
@@ -447,13 +448,15 @@ static void mgmt_new_settings(int sk, uint16_t index, void *buf, size_t len)
 }
 
 static void bonding_complete(struct controller_info *info,
-					const bdaddr_t *bdaddr, uint8_t status)
+					const struct mgmt_addr_info *addr,
+					uint8_t status)
 {
 	struct btd_adapter *adapter;
 
 	adapter = manager_find_adapter(&info->bdaddr);
 	if (adapter != NULL)
-		adapter_bonding_complete(adapter, bdaddr, status);
+		adapter_bonding_complete(adapter, &addr->bdaddr, addr->type,
+								status);
 }
 
 static void store_link_key(struct btd_adapter *adapter,
@@ -527,7 +530,7 @@ static void mgmt_new_link_key(int sk, uint16_t index, void *buf, size_t len)
 
 	info = &controllers[index];
 
-	if (!get_adapter_and_device(&info->bdaddr, &ev->key.addr.bdaddr,
+	if (!get_adapter_and_device(&info->bdaddr, &ev->key.addr,
 						&adapter, &device, true))
 		return;
 
@@ -543,7 +546,7 @@ static void mgmt_new_link_key(int sk, uint16_t index, void *buf, size_t len)
 			device_set_temporary(device, FALSE);
 	}
 
-	bonding_complete(info, &ev->key.addr.bdaddr, 0);
+	bonding_complete(info, &ev->key.addr, 0);
 }
 
 static void mgmt_device_connected(int sk, uint16_t index, void *buf, size_t len)
@@ -578,8 +581,8 @@ static void mgmt_device_connected(int sk, uint16_t index, void *buf, size_t len)
 
 	info = &controllers[index];
 
-	if (!get_adapter_and_device(&info->bdaddr, &ev->addr.bdaddr,
-						&adapter, &device, true))
+	if (!get_adapter_and_device(&info->bdaddr, &ev->addr, &adapter,
+								&device, true))
 		return;
 
 	memset(&eir_data, 0, sizeof(eir_data));
@@ -589,8 +592,6 @@ static void mgmt_device_connected(int sk, uint16_t index, void *buf, size_t len)
 	if (eir_data.class != 0)
 		device_set_class(device, eir_data.class);
 
-	device_set_addr_type(device, ev->addr.type);
-
 	adapter_add_connection(adapter, device);
 
 	if (eir_data.name != NULL) {
@@ -633,7 +634,7 @@ static void mgmt_device_disconnected(int sk, uint16_t index, void *buf,
 
 	info = &controllers[index];
 
-	if (!get_adapter_and_device(&info->bdaddr, &ev->addr.bdaddr,
+	if (!get_adapter_and_device(&info->bdaddr, &ev->addr,
 						&adapter, &device, false))
 		return;
 
@@ -665,7 +666,7 @@ static void mgmt_connect_failed(int sk, uint16_t index, void *buf, size_t len)
 
 	info = &controllers[index];
 
-	if (!get_adapter_and_device(&info->bdaddr, &ev->addr.bdaddr,
+	if (!get_adapter_and_device(&info->bdaddr, &ev->addr,
 						&adapter, &device, false))
 		return;
 
@@ -677,7 +678,8 @@ static void mgmt_connect_failed(int sk, uint16_t index, void *buf, size_t len)
 	}
 
 	/* In the case of security mode 3 devices */
-	adapter_bonding_complete(adapter, &ev->addr.bdaddr, ev->status);
+	adapter_bonding_complete(adapter, &ev->addr.bdaddr, ev->addr.type,
+								ev->status);
 }
 
 int mgmt_pincode_reply(int index, const bdaddr_t *bdaddr, const char *pin,
@@ -758,7 +760,7 @@ static void mgmt_pin_code_request(int sk, uint16_t index, void *buf, size_t len)
 
 	info = &controllers[index];
 
-	if (!get_adapter_and_device(&info->bdaddr, &ev->addr.bdaddr,
+	if (!get_adapter_and_device(&info->bdaddr, &ev->addr,
 						&adapter, &device, true))
 		return;
 
@@ -886,7 +888,7 @@ static void mgmt_passkey_request(int sk, uint16_t index, void *buf, size_t len)
 
 	info = &controllers[index];
 
-	if (!get_adapter_and_device(&info->bdaddr, &ev->addr.bdaddr,
+	if (!get_adapter_and_device(&info->bdaddr, &ev->addr,
 						&adapter, &device, true))
 		return;
 
@@ -924,7 +926,7 @@ static void mgmt_passkey_notify(int sk, uint16_t index, void *buf, size_t len)
 
 	info = &controllers[index];
 
-	if (!get_adapter_and_device(&info->bdaddr, &ev->addr.bdaddr,
+	if (!get_adapter_and_device(&info->bdaddr, &ev->addr,
 						&adapter, &device, true))
 		return;
 
@@ -964,7 +966,7 @@ static void mgmt_user_confirm_request(int sk, uint16_t index, void *buf,
 
 	info = &controllers[index];
 
-	if (!get_adapter_and_device(&info->bdaddr, &ev->addr.bdaddr,
+	if (!get_adapter_and_device(&info->bdaddr, &ev->addr,
 						&adapter, &device, true))
 		return;
 
@@ -1269,14 +1271,14 @@ static void disconnect_complete(int sk, uint16_t index, uint8_t status,
 
 	info = &controllers[index];
 
-	if (!get_adapter_and_device(&info->bdaddr, &rp->addr.bdaddr,
+	if (!get_adapter_and_device(&info->bdaddr, &rp->addr,
 						&adapter, &device, false))
 		return;
 
 	if (device)
 		adapter_remove_connection(adapter, device);
 
-	adapter_bonding_complete(adapter, &rp->addr.bdaddr,
+	adapter_bonding_complete(adapter, &rp->addr.bdaddr, rp->addr.type,
 						MGMT_STATUS_DISCONNECTED);
 }
 
@@ -1303,7 +1305,7 @@ static void pair_device_complete(int sk, uint16_t index, uint8_t status,
 
 	info = &controllers[index];
 
-	bonding_complete(info, &rp->addr.bdaddr, status);
+	bonding_complete(info, &rp->addr, status);
 }
 
 static void get_connections_complete(int sk, uint16_t index, void *buf,
@@ -1332,8 +1334,11 @@ static void get_connections_complete(int sk, uint16_t index, void *buf,
 	info = &controllers[index];
 
 	for (i = 0; i < rp->conn_count; i++) {
-		bdaddr_t *bdaddr = g_memdup(&rp->addr[i], sizeof(bdaddr_t));
-		info->connections = g_slist_append(info->connections, bdaddr);
+		struct mgmt_addr_info *addr;
+
+		addr = g_memdup(&rp->addr[i], sizeof(*addr));
+
+		info->connections = g_slist_append(info->connections, addr);
 	}
 }
 
@@ -1710,7 +1715,7 @@ static void mgmt_auth_failed(int sk, uint16_t index, void *buf, size_t len)
 
 	info = &controllers[index];
 
-	bonding_complete(info, &ev->addr.bdaddr, ev->status);
+	bonding_complete(info, &ev->addr, ev->status);
 }
 
 static void mgmt_local_name_changed(int sk, uint16_t index, void *buf, size_t len)
@@ -1843,7 +1848,7 @@ static void mgmt_device_blocked(int sk, uint16_t index, void *buf, size_t len)
 
 	info = &controllers[index];
 
-	if (!get_adapter_and_device(&info->bdaddr, &ev->addr.bdaddr,
+	if (!get_adapter_and_device(&info->bdaddr, &ev->addr,
 						&adapter, &device, false))
 		return;
 
@@ -1874,7 +1879,7 @@ static void mgmt_device_unblocked(int sk, uint16_t index, void *buf, size_t len)
 
 	info = &controllers[index];
 
-	if (!get_adapter_and_device(&info->bdaddr, &ev->addr.bdaddr,
+	if (!get_adapter_and_device(&info->bdaddr, &ev->addr,
 						&adapter, &device, false))
 		return;
 
@@ -1905,7 +1910,7 @@ static void mgmt_device_unpaired(int sk, uint16_t index, void *buf, size_t len)
 
 	info = &controllers[index];
 
-	if (!get_adapter_and_device(&info->bdaddr, &ev->addr.bdaddr,
+	if (!get_adapter_and_device(&info->bdaddr, &ev->addr,
 						&adapter, &device, false))
 		return;
 
@@ -1998,7 +2003,7 @@ static void mgmt_new_ltk(int sk, uint16_t index, void *buf, size_t len)
 
 	info = &controllers[index];
 
-	if (!get_adapter_and_device(&info->bdaddr, &ev->key.addr.bdaddr,
+	if (!get_adapter_and_device(&info->bdaddr, &ev->key.addr,
 						&adapter, &device, true))
 		return;
 
@@ -2017,7 +2022,7 @@ static void mgmt_new_ltk(int sk, uint16_t index, void *buf, size_t len)
 	}
 
 	if (ev->key.master)
-		bonding_complete(info, &ev->key.addr.bdaddr, 0);
+		bonding_complete(info, &ev->key.addr, 0);
 }
 
 static void mgmt_cod_changed(int sk, uint16_t index, void *buf, size_t len)