Diff between 6e5d3d78fcb2db8e4b502285879acc65fc983ea4 and 73f828cce2d2f7ceed92dd9ab584b4301b53f822

Changed Files

File Additions Deletions Status
plugins/hciops.c +2 -2 modified
plugins/mgmtops.c +4 -2 modified
src/adapter.c +7 -5 modified
src/adapter.h +6 -4 modified
src/device.c +4 -2 modified

Full Patch

diff --git a/plugins/hciops.c b/plugins/hciops.c
index f583e8c..ee73c45 100644
--- a/plugins/hciops.c
+++ b/plugins/hciops.c
@@ -3307,7 +3307,7 @@ static int hciops_read_bdaddr(int index, bdaddr_t *bdaddr)
 	return 0;
 }
 
-static int hciops_block_device(int index, bdaddr_t *bdaddr)
+static int hciops_block_device(int index, bdaddr_t *bdaddr, addr_type_t type)
 {
 	struct dev_info *dev = &devs[index];
 	char addr[18];
@@ -3321,7 +3321,7 @@ static int hciops_block_device(int index, bdaddr_t *bdaddr)
 	return 0;
 }
 
-static int hciops_unblock_device(int index, bdaddr_t *bdaddr)
+static int hciops_unblock_device(int index, bdaddr_t *bdaddr, addr_type_t type)
 {
 	struct dev_info *dev = &devs[index];
 	char addr[18];
diff --git a/plugins/mgmtops.c b/plugins/mgmtops.c
index bcb23d5..6b99e08 100644
--- a/plugins/mgmtops.c
+++ b/plugins/mgmtops.c
@@ -1759,7 +1759,7 @@ static int mgmt_read_bdaddr(int index, bdaddr_t *bdaddr)
 	return 0;
 }
 
-static int mgmt_block_device(int index, bdaddr_t *bdaddr)
+static int mgmt_block_device(int index, bdaddr_t *bdaddr, addr_type_t type)
 {
 	char buf[MGMT_HDR_SIZE + sizeof(struct mgmt_cp_block_device)];
 	struct mgmt_hdr *hdr = (void *) buf;
@@ -1778,6 +1778,7 @@ static int mgmt_block_device(int index, bdaddr_t *bdaddr)
 
 	cp = (void *) &buf[sizeof(*hdr)];
 	bacpy(&cp->addr.bdaddr, bdaddr);
+	cp->addr.type = mgmt_addr_type(type);
 
 	buf_len = sizeof(*hdr) + sizeof(*cp);
 
@@ -1787,7 +1788,7 @@ static int mgmt_block_device(int index, bdaddr_t *bdaddr)
 	return 0;
 }
 
-static int mgmt_unblock_device(int index, bdaddr_t *bdaddr)
+static int mgmt_unblock_device(int index, bdaddr_t *bdaddr, addr_type_t type)
 {
 	char buf[MGMT_HDR_SIZE + sizeof(struct mgmt_cp_unblock_device)];
 	struct mgmt_hdr *hdr = (void *) buf;
@@ -1806,6 +1807,7 @@ static int mgmt_unblock_device(int index, bdaddr_t *bdaddr)
 
 	cp = (void *) &buf[sizeof(*hdr)];
 	bacpy(&cp->addr.bdaddr, bdaddr);
+	cp->addr.type = mgmt_addr_type(type);
 
 	buf_len = sizeof(*hdr) + sizeof(*cp);
 
diff --git a/src/adapter.c b/src/adapter.c
index eb16c58..60477bb 100644
--- a/src/adapter.c
+++ b/src/adapter.c
@@ -2063,21 +2063,23 @@ static void load_devices(struct btd_adapter *adapter)
 	textfile_foreach(filename, create_stored_device_from_blocked, adapter);
 }
 
-int btd_adapter_block_address(struct btd_adapter *adapter, bdaddr_t *bdaddr)
+int btd_adapter_block_address(struct btd_adapter *adapter, bdaddr_t *bdaddr,
+							addr_type_t type)
 {
-	return adapter_ops->block_device(adapter->dev_id, bdaddr);
+	return adapter_ops->block_device(adapter->dev_id, bdaddr, type);
 }
 
-int btd_adapter_unblock_address(struct btd_adapter *adapter, bdaddr_t *bdaddr)
+int btd_adapter_unblock_address(struct btd_adapter *adapter, bdaddr_t *bdaddr,
+							addr_type_t type)
 {
-	return adapter_ops->unblock_device(adapter->dev_id, bdaddr);
+	return adapter_ops->unblock_device(adapter->dev_id, bdaddr, type);
 }
 
 static void clear_blocked(struct btd_adapter *adapter)
 {
 	int err;
 
-	err = adapter_ops->unblock_device(adapter->dev_id, BDADDR_ANY);
+	err = adapter_ops->unblock_device(adapter->dev_id, BDADDR_ANY, 0);
 	if (err < 0)
 		error("Clearing blocked list failed: %s (%d)",
 						strerror(-err), -err);
diff --git a/src/adapter.h b/src/adapter.h
index 946bac6..6c015ef 100644
--- a/src/adapter.h
+++ b/src/adapter.h
@@ -193,8 +193,8 @@ struct btd_adapter_ops {
 	int (*read_clock) (int index, bdaddr_t *bdaddr, int which, int timeout,
 					uint32_t *clock, uint16_t *accuracy);
 	int (*read_bdaddr) (int index, bdaddr_t *bdaddr);
-	int (*block_device) (int index, bdaddr_t *bdaddr);
-	int (*unblock_device) (int index, bdaddr_t *bdaddr);
+	int (*block_device) (int index, bdaddr_t *bdaddr, addr_type_t type);
+	int (*unblock_device) (int index, bdaddr_t *bdaddr, addr_type_t type);
 	int (*get_conn_list) (int index, GSList **conns);
 	int (*disconnect) (int index, bdaddr_t *bdaddr, addr_type_t type);
 	int (*remove_bonding) (int index, bdaddr_t *bdaddr, addr_type_t type);
@@ -246,8 +246,10 @@ int btd_adapter_read_clock(struct btd_adapter *adapter, bdaddr_t *bdaddr,
 				int which, int timeout, uint32_t *clock,
 				uint16_t *accuracy);
 
-int btd_adapter_block_address(struct btd_adapter *adapter, bdaddr_t *bdaddr);
-int btd_adapter_unblock_address(struct btd_adapter *adapter, bdaddr_t *bdaddr);
+int btd_adapter_block_address(struct btd_adapter *adapter, bdaddr_t *bdaddr,
+							addr_type_t type);
+int btd_adapter_unblock_address(struct btd_adapter *adapter, bdaddr_t *bdaddr,
+							addr_type_t type);
 
 int btd_adapter_disconnect_device(struct btd_adapter *adapter,
 					bdaddr_t *bdaddr, addr_type_t type);
diff --git a/src/device.c b/src/device.c
index 3803813..927c4dc 100644
--- a/src/device.c
+++ b/src/device.c
@@ -500,7 +500,8 @@ int device_block(DBusConnection *conn, struct btd_device *device,
 	g_slist_foreach(device->drivers, (GFunc) driver_remove, device);
 
 	if (!update_only)
-		err = btd_adapter_block_address(device->adapter, &device->bdaddr);
+		err = btd_adapter_block_address(device->adapter,
+						&device->bdaddr, device->type);
 
 	if (err < 0)
 		return err;
@@ -531,7 +532,8 @@ int device_unblock(DBusConnection *conn, struct btd_device *device,
 		return 0;
 
 	if (!update_only)
-		err = btd_adapter_unblock_address(device->adapter, &device->bdaddr);
+		err = btd_adapter_unblock_address(device->adapter,
+						&device->bdaddr, device->type);
 
 	if (err < 0)
 		return err;