diff --git a/plugins/dbusoob.c b/plugins/dbusoob.c
index ae492f1..77563f1 100644
--- a/plugins/dbusoob.c
+++ b/plugins/dbusoob.c
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 6d73e48..a8c12fd 100644
--- a/plugins/neard.c
+++ b/plugins/neard.c
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) {
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 8d7dc22..b30f242 100644
--- a/profiles/audio/manager.c
+++ b/profiles/audio/manager.c
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 23cdc5f..93d260e 100644
--- a/profiles/health/hdp.c
+++ b/profiles/health/hdp.c
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 aa109fb..324c899 100644
--- a/src/adapter.c
+++ b/src/adapter.c
#include <dirent.h>
#include <bluetooth/bluetooth.h>
+#include <bluetooth/hci.h>
#include <bluetooth/uuid.h>
+#include <bluetooth/mgmt.h>
#include <bluetooth/sdp.h>
#include <bluetooth/sdp_lib.h>
}
struct btd_device *adapter_get_device(struct btd_adapter *adapter,
- const gchar *address)
+ const gchar *address, uint8_t addr_type)
{
struct btd_device *device;
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)
}
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);
}
}
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 0ec0b8f..b0131f4 100644
--- a/src/adapter.h
+++ b/src/adapter.h
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);
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 c0d9395..9a28303 100644
--- a/src/device.c
+++ b/src/device.c
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 fbe18ef..2a073a0 100644
--- a/src/device.h
+++ b/src/device.h
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 81b0494..dfcf558 100644
--- a/src/mgmt.c
+++ b/src/mgmt.c
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)
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);
}
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,
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;
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)
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));
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) {
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;
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;
}
/* 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,
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;
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;
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;
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;
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);
}
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,
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);
}
}
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)
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;
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;
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;
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;
}
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)