From 3692b8262294723c1fcfc75e759e59570557f949 Mon Sep 17 00:00:00 2001 From: Alok Barsode Date: Wed, 3 Sep 2008 12:47:20 +0530 Subject: Adding adapter_get_agent. --- src/adapter.c | 8 ++++++++ src/adapter.h | 1 + src/agent.c | 14 ++++++++------ src/dbus-hci.c | 10 +++++----- 4 files changed, 22 insertions(+), 11 deletions(-) diff --git a/src/adapter.c b/src/adapter.c index fe9aaef0..5f11b853 100644 --- a/src/adapter.c +++ b/src/adapter.c @@ -2894,6 +2894,14 @@ void adapter_mode_changed(struct adapter *adapter, uint8_t scan_mode) DBUS_TYPE_STRING, &mode); } +struct agent *adapter_get_agent(struct adapter *adapter) +{ + if (!adapter || !adapter->agent) + return NULL; + + return adapter->agent; +} + int btd_register_adapter_driver(struct btd_adapter_driver *driver) { adapter_drivers = g_slist_append(adapter_drivers, driver); diff --git a/src/adapter.h b/src/adapter.h index 5c6e5558..1fdf2684 100644 --- a/src/adapter.h +++ b/src/adapter.h @@ -174,6 +174,7 @@ int adapter_remove_found_device(struct adapter *adapter, bdaddr_t *bdaddr); void adapter_update_oor_devices(struct adapter *adapter); void adapter_remove_oor_device(struct adapter *adapter, char *peer_addr); void adapter_mode_changed(struct adapter *adapter, uint8_t scan_mode); +struct agent *adapter_get_agent(struct adapter *adapter); struct btd_adapter_driver { const char *name; diff --git a/src/agent.c b/src/agent.c index c35b2500..ae530f98 100644 --- a/src/agent.c +++ b/src/agent.c @@ -194,9 +194,10 @@ struct agent *agent_create(struct adapter *adapter, const char *name, const char *path, uint8_t capability, agent_remove_cb cb, void *remove_cb_data) { - struct agent *agent; + struct agent *agent, *adapter_agent; - if (adapter->agent && g_str_equal(adapter->agent->name, name)) + adapter_agent = adapter_get_agent(adapter); + if (adapter_agent && g_str_equal(adapter_agent->name, name)) return NULL; agent = g_new0(struct agent, 1); @@ -700,17 +701,18 @@ static int request_fallback(struct agent_request *req, DBusPendingCallNotifyFunction function) { struct adapter *adapter = req->agent->adapter; + struct agent *adapter_agent = adapter_get_agent(adapter); DBusMessage *msg; - if (req->agent == adapter->agent || adapter->agent == NULL) + if (req->agent == adapter_agent || adapter_agent == NULL) return -EINVAL; dbus_pending_call_cancel(req->call); msg = dbus_message_copy(req->msg); - dbus_message_set_destination(msg, adapter->agent->name); - dbus_message_set_path(msg, adapter->agent->path); + dbus_message_set_destination(msg, adapter_agent->name); + dbus_message_set_path(msg, adapter_agent->path); if (dbus_connection_send_with_reply(connection, msg, &req->call, REQUEST_TIMEOUT) == FALSE) { @@ -720,7 +722,7 @@ static int request_fallback(struct agent_request *req, } req->agent->request = NULL; - req->agent = adapter->agent; + req->agent = adapter_agent; req->agent->request = req; dbus_message_unref(req->msg); diff --git a/src/dbus-hci.c b/src/dbus-hci.c index d0348522..604011f0 100644 --- a/src/dbus-hci.c +++ b/src/dbus-hci.c @@ -254,7 +254,7 @@ int hcid_dbus_request_pin(int dev, bdaddr_t *sba, struct hci_conn_info *ci) agent = device_get_agent(device); if (!agent) - agent = adapter->agent; + agent = adapter_get_agent(adapter); if (!agent) return -EPERM; @@ -463,7 +463,7 @@ int hcid_dbus_user_confirm(bdaddr_t *sba, bdaddr_t *dba, uint32_t passkey) agent = device_get_agent(device); if (!agent) - agent = adapter->agent; + agent = adapter_get_agent(adapter); if (!agent) { error("No agent available for user confirm request"); @@ -504,7 +504,7 @@ int hcid_dbus_user_passkey(bdaddr_t *sba, bdaddr_t *dba) agent = device_get_agent(device); if (!agent) - agent = adapter->agent; + agent = adapter_get_agent(adapter); if (!agent) { error("No agent available for user confirm request"); @@ -543,7 +543,7 @@ int hcid_dbus_user_notify(bdaddr_t *sba, bdaddr_t *dba, uint32_t passkey) agent = device_get_agent(device); if (!agent) - agent = adapter->agent; + agent = adapter_get_agent(adapter); if (!agent) { error("No agent available for user confirm request"); @@ -1479,7 +1479,7 @@ int hcid_dbus_get_io_cap(bdaddr_t *local, bdaddr_t *remote, *auth = 0x03; } if (!agent) - agent = adapter->agent; + agent = adapter_get_agent(adapter); if (!agent) { /* This is the non bondable mode case */ -- cgit