From 405c68c6dcf0da96bc24c1f909c42323d714830e Mon Sep 17 00:00:00 2001 From: Johan Hedberg Date: Mon, 10 Dec 2012 13:13:24 +0200 Subject: [PATCH] core: Pass explicit address type info when creating device objects --- plugins/dbusoob.c | 2 +- plugins/neard.c | 4 +-- profiles/audio/manager.c | 2 +- profiles/health/hdp.c | 3 +- src/adapter.c | 17 ++++++----- src/adapter.h | 5 ++-- src/device.c | 8 ----- src/device.h | 1 - src/mgmt.c | 63 ++++++++++++++++++++++------------------ 9 files changed, 53 insertions(+), 52 deletions(-) diff --git a/plugins/dbusoob.c b/plugins/dbusoob.c index ae492f143..77563f14a 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 6d73e4818..a8c12fda4 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 8d7dc22de..b30f2428b 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 23cdc5ff1..93d260ef4 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 aa109fb3d..324c8993a 100644 --- a/src/adapter.c +++ b/src/adapter.c @@ -37,7 +37,9 @@ #include #include +#include #include +#include #include #include @@ -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 0ec0b8f3b..b0131f467 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 c0d939554..9a2830391 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 fbe18ef52..2a073a0c5 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 81b0494af..dfcf55810 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) -- 2.47.3