From 73f828cce2d2f7ceed92dd9ab584b4301b53f822 Mon Sep 17 00:00:00 2001 From: Johan Hedberg Date: Thu, 9 Feb 2012 16:02:51 +0200 Subject: [PATCH] adapter_opts: Add address type to block() and unblock() --- plugins/hciops.c | 4 ++-- plugins/mgmtops.c | 6 ++++-- src/adapter.c | 12 +++++++----- src/adapter.h | 10 ++++++---- src/device.c | 6 ++++-- 5 files changed, 23 insertions(+), 15 deletions(-) diff --git a/plugins/hciops.c b/plugins/hciops.c index f583e8cc5..ee73c45ff 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 bcb23d503..6b99e0854 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 eb16c58eb..60477bb79 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 946bac619..6c015ef9a 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 38038137e..927c4dcd9 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; -- 2.47.3