From 262e9eef41475b721bd71365b87d521924daeb5e Mon Sep 17 00:00:00 2001 From: Johan Hedberg Date: Sun, 6 Jan 2013 18:34:44 +0200 Subject: [PATCH] core: Move mgmt block/unblock command sending to adapter code --- src/adapter.c | 44 +++++++++++++++++++++++++++++--------- src/mgmt.c | 58 --------------------------------------------------- src/mgmt.h | 3 --- 3 files changed, 34 insertions(+), 71 deletions(-) diff --git a/src/adapter.c b/src/adapter.c index 73a503c36..0231a0899 100644 --- a/src/adapter.c +++ b/src/adapter.c @@ -2027,24 +2027,48 @@ free: int btd_adapter_block_address(struct btd_adapter *adapter, const bdaddr_t *bdaddr, uint8_t bdaddr_type) { - return mgmt_block_device(adapter->dev_id, bdaddr, bdaddr_type); + struct mgmt_cp_block_device cp; + char addr[18]; + + ba2str(bdaddr, addr); + DBG("hci%u %s", adapter->dev_id, addr); + + memset(&cp, 0, sizeof(cp)); + bacpy(&cp.addr.bdaddr, bdaddr); + cp.addr.type = bdaddr_type; + + if (mgmt_send(adapter->mgmt, MGMT_OP_BLOCK_DEVICE, + adapter->dev_id, sizeof(cp), &cp, + NULL, NULL, NULL) > 0) + return 0; + + return -EIO; } int btd_adapter_unblock_address(struct btd_adapter *adapter, const bdaddr_t *bdaddr, uint8_t bdaddr_type) { - return mgmt_unblock_device(adapter->dev_id, bdaddr, - bdaddr_type); + struct mgmt_cp_unblock_device cp; + char addr[18]; + + ba2str(bdaddr, addr); + DBG("hci%u %s", adapter->dev_id, addr); + + memset(&cp, 0, sizeof(cp)); + bacpy(&cp.addr.bdaddr, bdaddr); + cp.addr.type = bdaddr_type; + + if (mgmt_send(adapter->mgmt, MGMT_OP_UNBLOCK_DEVICE, + adapter->dev_id, sizeof(cp), &cp, + NULL, NULL, NULL) > 0) + return 0; + + return -EIO; } -static void clear_blocked(struct btd_adapter *adapter) +static int clear_blocked(struct btd_adapter *adapter) { - int err; - - err = mgmt_unblock_device(adapter->dev_id, BDADDR_ANY, 0); - if (err < 0) - error("Clearing blocked list failed: %s (%d)", - strerror(-err), -err); + return btd_adapter_unblock_address(adapter, BDADDR_ANY, 0); } static void probe_driver(struct btd_adapter *adapter, gpointer user_data) diff --git a/src/mgmt.c b/src/mgmt.c index d3308484c..685d376c6 100644 --- a/src/mgmt.c +++ b/src/mgmt.c @@ -1006,64 +1006,6 @@ void mgmt_cleanup(void) } } -int mgmt_block_device(int index, const bdaddr_t *bdaddr, uint8_t bdaddr_type) -{ - char buf[MGMT_HDR_SIZE + sizeof(struct mgmt_cp_block_device)]; - struct mgmt_hdr *hdr = (void *) buf; - struct mgmt_cp_block_device *cp; - size_t buf_len; - char addr[18]; - - ba2str(bdaddr, addr); - DBG("index %d addr %s", index, addr); - - memset(buf, 0, sizeof(buf)); - - hdr->opcode = htobs(MGMT_OP_BLOCK_DEVICE); - hdr->len = htobs(sizeof(*cp)); - hdr->index = htobs(index); - - cp = (void *) &buf[sizeof(*hdr)]; - bacpy(&cp->addr.bdaddr, bdaddr); - cp->addr.type = bdaddr_type; - - buf_len = sizeof(*hdr) + sizeof(*cp); - - if (write(mgmt_sock, buf, buf_len) < 0) - return -errno; - - return 0; -} - -int mgmt_unblock_device(int index, const bdaddr_t *bdaddr, uint8_t bdaddr_type) -{ - char buf[MGMT_HDR_SIZE + sizeof(struct mgmt_cp_unblock_device)]; - struct mgmt_hdr *hdr = (void *) buf; - struct mgmt_cp_unblock_device *cp; - size_t buf_len; - char addr[18]; - - ba2str(bdaddr, addr); - DBG("index %d addr %s", index, addr); - - memset(buf, 0, sizeof(buf)); - - hdr->opcode = htobs(MGMT_OP_UNBLOCK_DEVICE); - hdr->len = htobs(sizeof(*cp)); - hdr->index = htobs(index); - - cp = (void *) &buf[sizeof(*hdr)]; - bacpy(&cp->addr.bdaddr, bdaddr); - cp->addr.type = bdaddr_type; - - buf_len = sizeof(*hdr) + sizeof(*cp); - - if (write(mgmt_sock, buf, buf_len) < 0) - return -errno; - - return 0; -} - int mgmt_set_did(int index, uint16_t vendor, uint16_t product, uint16_t version, uint16_t source) { diff --git a/src/mgmt.h b/src/mgmt.h index 1e6f9806a..24f7e1d10 100644 --- a/src/mgmt.h +++ b/src/mgmt.h @@ -25,9 +25,6 @@ int mgmt_setup(void); void mgmt_cleanup(void); -int mgmt_block_device(int index, const bdaddr_t *bdaddr, uint8_t bdaddr_type); -int mgmt_unblock_device(int index, const bdaddr_t *bdaddr, uint8_t bdaddr_type); - int mgmt_set_did(int index, uint16_t vendor, uint16_t product, uint16_t version, uint16_t source); -- 2.47.3