From dd84242d273a4f19f56c7e54a4c0388ed459e7c1 Mon Sep 17 00:00:00 2001 From: Johan Hedberg Date: Fri, 17 Feb 2012 14:30:31 +0200 Subject: [PATCH] mgmt: Update implementation to match latest API This patch adds an address type parameter to all places where the latest API expects there to be one. --- lib/mgmt.h | 12 ++++++------ mgmt/main.c | 22 ++++++++++++---------- plugins/hciops.c | 2 +- plugins/mgmtops.c | 26 ++++++++++++++++---------- src/adapter.c | 3 ++- src/adapter.h | 3 ++- 6 files changed, 39 insertions(+), 29 deletions(-) diff --git a/lib/mgmt.h b/lib/mgmt.h index 37e63c8ed..79db878e5 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 1f2cbcd5d..c3a51c3cf 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 ee73c45ff..04802f486 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 5de0aa229..020c277d9 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 36073ff16..5742fd2db 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 6c015ef9a..c285172e5 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); }; -- 2.47.3