diff options
| author | Luiz Augusto von Dentz <luiz.dentz@openbossa.org> | 2008-11-05 11:56:02 -0300 | 
|---|---|---|
| committer | Luiz Augusto von Dentz <luiz.dentz@openbossa.org> | 2008-11-05 11:56:02 -0300 | 
| commit | 37f2c163503f053cf4c3f1e2ddb5ffb05b0a347b (patch) | |
| tree | 84868490985421e721a16c0f384295991a8759ac | |
| parent | a6e82811026f8b2ce6266b4a2ebd95dad118c09f (diff) | |
Handle RequestAuthorization on adapter ANY.
| -rw-r--r-- | src/adapter.c | 46 | 
1 files changed, 36 insertions, 10 deletions
| diff --git a/src/adapter.c b/src/adapter.c index 39a63526..b874e12a 100644 --- a/src/adapter.c +++ b/src/adapter.c @@ -3293,31 +3293,23 @@ static void agent_auth_cb(struct agent *agent, DBusError *derr, void *user_data)  	g_free(auth);  } -int btd_request_authorization(const bdaddr_t *src, const bdaddr_t *dst, +static int btd_adapter_authorize(struct btd_adapter *adapter, const bdaddr_t *dst,  		const char *uuid, service_auth_cb cb, void *user_data)  {  	struct service_auth *auth; -	struct btd_adapter *adapter;  	struct btd_device *device;  	struct agent *agent;  	char address[18];  	gboolean trusted;  	const gchar *dev_path; -	if (src == NULL || dst == NULL) -		return -EINVAL; - -	adapter = manager_find_adapter(src); -	if (!adapter) -		return -EPERM; -  	/* Device connected? */  	if (!g_slist_find_custom(adapter->active_conn,  				dst, active_conn_find_by_bdaddr))  		return -ENOTCONN;  	ba2str(dst, address); -	trusted = read_trust(src, address, GLOBAL_TRUST); +	trusted = read_trust(&adapter->bdaddr, address, GLOBAL_TRUST);  	if (trusted) {  		cb(NULL, user_data); @@ -3348,6 +3340,40 @@ int btd_request_authorization(const bdaddr_t *src, const bdaddr_t *dst,  	return agent_authorize(agent, dev_path, uuid, agent_auth_cb, auth);  } +int btd_request_authorization(const bdaddr_t *src, const bdaddr_t *dst, +		const char *uuid, service_auth_cb cb, void *user_data) +{ +	struct btd_adapter *adapter; +	GSList *adapters; + +	if (src == NULL || dst == NULL) +		return -EINVAL; + +	if (bacmp(src, BDADDR_ANY) != 0) +		goto proceed; + +	/* Handle request authorization for ANY adapter */ +	adapters = manager_get_adapters(); + +	for (; adapters; adapters = adapters->next) { +		int err; +		adapter = adapters->data; + +		err = btd_adapter_authorize(adapter, dst, uuid, cb, user_data); +		if (err == 0) +			return 0; +	} + +	return -EPERM; + +proceed: +	adapter = manager_find_adapter(src); +	if (!adapter) +		return -EPERM; + +	return btd_adapter_authorize(adapter, dst, uuid, cb, user_data); +} +  int btd_cancel_authorization(const bdaddr_t *src, const bdaddr_t *dst)  {  	struct btd_adapter *adapter = manager_find_adapter(src); | 
