summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--hcid/adapter.c7
-rw-r--r--hcid/dbus-hci.c46
-rw-r--r--hcid/dbus-service.c12
-rw-r--r--hcid/device.c8
-rw-r--r--hcid/device.h1
5 files changed, 54 insertions, 20 deletions
diff --git a/hcid/adapter.c b/hcid/adapter.c
index e70f31c2..753a1c47 100644
--- a/hcid/adapter.c
+++ b/hcid/adapter.c
@@ -746,6 +746,7 @@ void adapter_remove_device(DBusConnection *conn, struct adapter *adapter,
bdaddr_t src;
const gchar *destination = device_get_address(device);
const gchar *dev_path = device_get_path(device);
+ struct agent *agent;
str2ba(adapter->address, &src);
delete_entry(&src, "profiles", destination);
@@ -760,8 +761,10 @@ void adapter_remove_device(DBusConnection *conn, struct adapter *adapter,
DBUS_TYPE_INVALID);
}
- if (device->agent) {
- agent_destroy(device->agent, FALSE);
+ agent = device_get_agent(device);
+
+ if (agent) {
+ agent_destroy(agent, FALSE);
device->agent = NULL;
}
diff --git a/hcid/dbus-hci.c b/hcid/dbus-hci.c
index c4dd3fa5..3af3f046 100644
--- a/hcid/dbus-hci.c
+++ b/hcid/dbus-hci.c
@@ -62,6 +62,7 @@ void bonding_request_free(struct bonding_request_info *bonding)
{
struct device *device;
char address[18];
+ struct agent *agent;
if (!bonding)
return;
@@ -78,8 +79,10 @@ void bonding_request_free(struct bonding_request_info *bonding)
ba2str(&bonding->bdaddr, address);
device = adapter_find_device(bonding->adapter, address);
- if (device && device->agent) {
- agent_destroy(device->agent, FALSE);
+ agent = device_get_agent(device);
+
+ if (device && agent) {
+ agent_destroy(agent, FALSE);
device->agent = NULL;
}
@@ -785,7 +788,13 @@ int hcid_dbus_request_pin(int dev, bdaddr_t *sba, struct hci_conn_info *ci)
ba2str(&ci->bdaddr, addr);
device = adapter_find_device(adapter, addr);
- agent = device && device->agent ? device->agent : adapter->agent;
+
+ if (device)
+ agent = device_get_agent(device);
+
+ if (!agent)
+ agent = adapter->agent;
+
if (!agent)
return -EPERM;
@@ -985,9 +994,9 @@ int hcid_dbus_user_confirm(bdaddr_t *sba, bdaddr_t *dba, uint32_t passkey)
return 0;
}
- if (device->agent)
- agent = device->agent;
- else
+ agent = device_get_agent(device);
+
+ if (!agent)
agent = adapter->agent;
if (!agent) {
@@ -1024,9 +1033,11 @@ int hcid_dbus_user_passkey(bdaddr_t *sba, bdaddr_t *dba)
ba2str(dba, addr);
device = adapter_get_device(connection, adapter, addr);
- if (device && device->agent)
- agent = device->agent;
- else
+
+ if (device)
+ agent = device_get_agent(device);
+
+ if (!agent)
agent = adapter->agent;
if (!agent) {
@@ -1062,9 +1073,10 @@ int hcid_dbus_user_notify(bdaddr_t *sba, bdaddr_t *dba, uint32_t passkey)
ba2str(dba, addr);
device = adapter_get_device(connection, adapter, addr);
- if (device && device->agent)
- agent = device->agent;
- else
+ if (device)
+ agent = device_get_agent(device);
+
+ if (!agent)
agent = adapter->agent;
if (!agent) {
@@ -2188,10 +2200,12 @@ int hcid_dbus_get_io_cap(bdaddr_t *local, bdaddr_t *remote,
ba2str(remote, addr);
device = adapter_find_device(adapter, addr);
- if (device && device->agent) {
- agent = device->agent;
- *auth = 0x03;
- } else
+ if (device) {
+ agent = device_get_agent(device);
+ if (agent)
+ *auth = 0x03;
+ }
+ if (!agent)
agent = adapter->agent;
if (!agent) {
diff --git a/hcid/dbus-service.c b/hcid/dbus-service.c
index edb3ab0c..66575d33 100644
--- a/hcid/dbus-service.c
+++ b/hcid/dbus-service.c
@@ -102,7 +102,11 @@ int service_req_auth(const bdaddr_t *src, const bdaddr_t *dst,
if (!device)
return -EPERM;
- agent = (device->agent ? : adapter->agent);
+ agent = device_get_agent(device);
+
+ if (!agent)
+ agent = adapter->agent;
+
if (!agent)
return -EPERM;
@@ -138,7 +142,11 @@ int service_cancel_auth(const bdaddr_t *src, const bdaddr_t *dst)
* agent and in the meanwhile CreatePairedDevice is called.
*/
- agent = (device->agent ? : adapter->agent);
+ agent = device_get_agent(device);
+
+ if (!agent)
+ agent = adapter->agent;
+
if (!agent)
return -EPERM;
diff --git a/hcid/device.c b/hcid/device.c
index 008afa7e..87f9d80c 100644
--- a/hcid/device.c
+++ b/hcid/device.c
@@ -952,6 +952,14 @@ const gchar *device_get_path(struct device *device)
return device->path;
}
+struct agent *device_get_agent(struct device *device)
+{
+ if (!device)
+ return NULL;
+
+ return device->agent;
+}
+
int btd_register_device_driver(struct btd_device_driver *driver)
{
const char **uuid;
diff --git a/hcid/device.h b/hcid/device.h
index be8aee7c..611b8140 100644
--- a/hcid/device.h
+++ b/hcid/device.h
@@ -59,6 +59,7 @@ void device_probe_drivers(struct device *device, GSList *uuids);
struct adapter *device_get_adapter(struct device *device);
const gchar *device_get_address(struct device *device);
const gchar *device_get_path(struct device *device);
+struct agent *device_get_agent(struct device *device);
#define BTD_UUIDS(args...) ((const char *[]) { args, NULL } )