diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/adapter.c | 8 | ||||
| -rw-r--r-- | src/adapter.h | 1 | ||||
| -rw-r--r-- | src/agent.c | 14 | ||||
| -rw-r--r-- | 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 */  | 
