diff options
Diffstat (limited to 'src/dbus-hci.c')
| -rw-r--r-- | src/dbus-hci.c | 175 | 
1 files changed, 13 insertions, 162 deletions
| diff --git a/src/dbus-hci.c b/src/dbus-hci.c index 70b15062..e67cb64c 100644 --- a/src/dbus-hci.c +++ b/src/dbus-hci.c @@ -710,8 +710,6 @@ cleanup:  void hcid_dbus_inquiry_start(bdaddr_t *local)  {  	struct adapter *adapter; -	const gchar *path; -	gboolean discov_active;  	int state;  	adapter = manager_find_adapter(local); @@ -731,22 +729,11 @@ void hcid_dbus_inquiry_start(bdaddr_t *local)  		pending_remote_name_cancel(adapter);  	/* Disable name resolution for non D-Bus clients */ -	if (!adapter->discov_requestor) { +	if (!adapter->disc_sessions) {  		state = adapter_get_state(adapter);  		state &= ~RESOLVE_NAME;  		adapter_set_state(adapter, state);  	} -	path = adapter_get_path(adapter); - -	discov_active = (adapter_get_state(adapter) & STD_INQUIRY) ? TRUE : FALSE; - -	dbus_connection_emit_property_changed(connection, path, -			ADAPTER_INTERFACE, "PeriodicDiscovery", -			DBUS_TYPE_BOOLEAN, &discov_active); - -	g_dbus_emit_signal(connection, path, -			ADAPTER_INTERFACE, "DiscoveryStarted", -			DBUS_TYPE_INVALID);  }  static int found_device_req_name(struct adapter *adapter) @@ -835,15 +822,13 @@ void hcid_dbus_inquiry_complete(bdaddr_t *local)  	if ((adapter_get_state(adapter) & PERIODIC_INQUIRY) &&  				!(adapter_get_state(adapter) & STD_INQUIRY))  		adapter_update_oor_devices(adapter); -	/* -	 * Enable resolution again: standard inquiry can be -	 * received in the periodic inquiry idle state. -	 */ -	if (adapter->pdiscov_requestor) { -		state = adapter_get_state(adapter); -		state |= RESOLVE_NAME; -		adapter_set_state(adapter, state); -	} + +	/* reset the discover type to be able to handle D-Bus and non D-Bus +	 * requests */ +	state = adapter_get_state(adapter); +	state &= ~STD_INQUIRY; +	adapter_set_state(adapter, state); +  	/*  	 * The following scenarios can happen:  	 * 1. standard inquiry: always send discovery completed signal @@ -855,48 +840,12 @@ void hcid_dbus_inquiry_complete(bdaddr_t *local)  	 *  	 * Keep in mind that non D-Bus requests can arrive.  	 */ - -	if (!found_device_req_name(adapter)) -		return;		/* skip - there is name to resolve */ - -	if (adapter_get_state(adapter) & STD_INQUIRY) { -		g_dbus_emit_signal(connection, path, -				ADAPTER_INTERFACE, "DiscoveryCompleted", -				DBUS_TYPE_INVALID); - -		state = adapter_get_state(adapter); -		state &= ~STD_INQUIRY; -		adapter_set_state(adapter, state); -	} - -	if (adapter->discov_requestor) { -		g_dbus_remove_watch(connection, adapter->discov_listener); -		adapter->discov_listener = 0; -		g_free(adapter->discov_requestor); -		adapter->discov_requestor = NULL; - -		/* If there is a pending reply for discovery cancel */ -		if (adapter->discovery_cancel) { -			DBusMessage *reply; -			reply = dbus_message_new_method_return(adapter->discovery_cancel); -			dbus_connection_send(connection, reply, NULL); -			dbus_message_unref(reply); -			dbus_message_unref(adapter->discovery_cancel); -			adapter->discovery_cancel = NULL; -		} - -		/* reset the discover type for standard inquiry only */ -		state = adapter_get_state(adapter); -		state &= ~STD_INQUIRY; -		adapter_set_state(adapter, state); -	} +	found_device_req_name(adapter);  }  void hcid_dbus_periodic_inquiry_start(bdaddr_t *local, uint8_t status)  {  	struct adapter *adapter; -	const gchar *path; -	gboolean discov_active;  	int state;  	/* Don't send the signal if the cmd failed */ @@ -912,28 +861,11 @@ void hcid_dbus_periodic_inquiry_start(bdaddr_t *local, uint8_t status)  	state = adapter_get_state(adapter);  	state |= PERIODIC_INQUIRY;  	adapter_set_state(adapter, state); - -	/* Disable name resolution for non D-Bus clients */ -	if (!adapter->pdiscov_requestor) { -		state = adapter_get_state(adapter); -		state &= ~RESOLVE_NAME; -		adapter_set_state(adapter, state); -	} - -	path = adapter_get_path(adapter); - -	discov_active = (adapter_get_state(adapter) & PERIODIC_INQUIRY) ? TRUE:FALSE; - -	dbus_connection_emit_property_changed(connection, path, -				ADAPTER_INTERFACE, "PeriodicDiscovery", -				DBUS_TYPE_BOOLEAN, &discov_active);  }  void hcid_dbus_periodic_inquiry_exit(bdaddr_t *local, uint8_t status)  {  	struct adapter *adapter; -	const gchar *path; -	gboolean discov_active;  	int state;  	/* Don't send the signal if the cmd failed */ @@ -949,41 +881,13 @@ void hcid_dbus_periodic_inquiry_exit(bdaddr_t *local, uint8_t status)  	/* reset the discover type to be able to handle D-Bus and non D-Bus  	 * requests */  	state = adapter_get_state(adapter); -	state &= ~(PERIODIC_INQUIRY | RESOLVE_NAME); +	state &= ~PERIODIC_INQUIRY;  	adapter_set_state(adapter, state);  	/* free out of range devices list */  	g_slist_foreach(adapter->oor_devices, (GFunc) free, NULL);  	g_slist_free(adapter->oor_devices);  	adapter->oor_devices = NULL; - -	if (adapter->pdiscov_requestor) { -		g_dbus_remove_watch(connection, adapter->pdiscov_listener); -		adapter->pdiscov_listener = 0; -		g_free(adapter->pdiscov_requestor); -		adapter->pdiscov_requestor = NULL; -	} - -	path = adapter_get_path(adapter); - -	/* workaround: inquiry completed is not sent when exiting from -	  * periodic inquiry */ -	if (adapter_get_state(adapter) & STD_INQUIRY) { -		g_dbus_emit_signal(connection, path, -				ADAPTER_INTERFACE, "DiscoveryCompleted", -				DBUS_TYPE_INVALID); - -		state = adapter_get_state(adapter); -		state &= ~STD_INQUIRY; -		adapter_set_state(adapter, state); -	} - -	discov_active = (adapter_get_state(adapter) & STD_INQUIRY) ? TRUE : FALSE; - -	/* Send discovery completed signal if there isn't name to resolve */ -	dbus_connection_emit_property_changed(connection, path, -				ADAPTER_INTERFACE, "PeriodicDiscovery", -				DBUS_TYPE_BOOLEAN, &discov_active);  }  static char *extract_eir_name(uint8_t *data, uint8_t *type) @@ -1203,8 +1107,6 @@ void hcid_dbus_remote_name(bdaddr_t *local, bdaddr_t *peer, uint8_t status,  	char peer_addr[18];  	const char *paddr = peer_addr;  	const gchar *dev_path; -	const gchar *path; -	int state;  	adapter = manager_find_adapter(local);  	if (!adapter) { @@ -1232,44 +1134,7 @@ void hcid_dbus_remote_name(bdaddr_t *local, bdaddr_t *peer, uint8_t status,  	adapter_remove_found_device(adapter, peer);  	/* check if there is more devices to request names */ -	if (!found_device_req_name(adapter)) -		return; /* skip if a new request has been sent */ - -	/* The discovery completed signal must be sent only for discover -	 * devices request WITH name resolving */ -	if (adapter->discov_requestor) { -		g_dbus_remove_watch(connection, adapter->discov_listener); -		adapter->discov_listener = 0; -		g_free(adapter->discov_requestor); -		adapter->discov_requestor = NULL; - -		/* If there is a pending reply for discovery cancel */ -		if (adapter->discovery_cancel) { -			DBusMessage *reply; -			reply = dbus_message_new_method_return(adapter->discovery_cancel); -			dbus_connection_send(connection, reply, NULL); -			dbus_message_unref(reply); -			dbus_message_unref(adapter->discovery_cancel); -			adapter->discovery_cancel = NULL; -		} - -		/* Disable name resolution for non D-Bus clients */ -		if (!adapter->pdiscov_requestor) { -			state = adapter_get_state(adapter); -			state &= ~RESOLVE_NAME; -			adapter_set_state(adapter, state); -		} -	} -	path = adapter_get_path(adapter); - -	if (adapter_get_state(adapter) & STD_INQUIRY) { -		g_dbus_emit_signal(connection, path, -				ADAPTER_INTERFACE, "DiscoveryCompleted", -				DBUS_TYPE_INVALID); -		state = adapter_get_state(adapter); -		state &= ~STD_INQUIRY; -		adapter_set_state(adapter, state); -	} +	found_device_req_name(adapter);  }  void hcid_dbus_conn_complete(bdaddr_t *local, uint8_t status, uint16_t handle, @@ -1778,16 +1643,10 @@ int cancel_discovery(struct adapter *adapter)  	struct remote_dev_info *dev, match;  	int dd, err = 0;  	uint16_t dev_id = adapter_get_dev_id(adapter); -	int state; - -	if (!(adapter_get_state(adapter) & STD_INQUIRY)) -		goto cleanup;  	dd = hci_open_dev(dev_id); -	if (dd < 0) { -		err = -ENODEV; -		goto cleanup; -	} +	if (dd < 0) +		return -ENODEV;  	/*  	 * If there is a pending read remote name request means @@ -1814,14 +1673,6 @@ int cancel_discovery(struct adapter *adapter)  	hci_close_dev(dd); -cleanup: -	/* Disable name resolution for non D-Bus clients */ -	if (!adapter->pdiscov_requestor) { -		state = adapter_get_state(adapter); -		state &= ~RESOLVE_NAME; -		adapter_set_state(adapter, state); -	} -  	return err;  } | 
