diff options
| -rw-r--r-- | src/adapter.c | 45 | ||||
| -rw-r--r-- | src/adapter.h | 1 | ||||
| -rw-r--r-- | src/dbus-hci.c | 49 | ||||
| -rw-r--r-- | src/dbus-hci.h | 2 | 
4 files changed, 48 insertions, 49 deletions
diff --git a/src/adapter.c b/src/adapter.c index db310d19..e21a5452 100644 --- a/src/adapter.c +++ b/src/adapter.c @@ -168,6 +168,37 @@ static DBusHandlerResult error_connection_attempt_failed(DBusConnection *conn,  			err > 0 ? strerror(err) : "Connection attempt failed");  } +static void bonding_request_free(struct bonding_request_info *bonding) +{ +	struct btd_device *device; +	char address[18]; +	struct agent *agent; + +	if (!bonding) +		return; + +	if (bonding->msg) +		dbus_message_unref(bonding->msg); + +	if (bonding->conn) +		dbus_connection_unref(bonding->conn); + +	if (bonding->io) +		g_io_channel_unref(bonding->io); + +	ba2str(&bonding->bdaddr, address); + +	device = adapter_find_device(bonding->adapter, address); +	agent = device_get_agent(device); + +	if (device && agent) { +		agent_destroy(agent, FALSE); +		device_set_agent(device, NULL); +	} + +	g_free(bonding); +} +  static int active_conn_find_by_bdaddr(const void *data, const void *user_data)  {  	const struct active_conn_info *con = data; @@ -2979,6 +3010,20 @@ struct active_conn_info *adapter_search_active_conn_by_handle(struct adapter *ad  	return NULL;  } +void adapter_free_bonding_request(struct adapter *adapter) +{ +	g_dbus_remove_watch(connection, adapter->bonding->listener_id); + +	if (adapter->bonding->io_id) +		g_source_remove(adapter->bonding->io_id); + +	g_io_channel_close(adapter->bonding->io); + +	bonding_request_free(adapter->bonding); + +	adapter->bonding = NULL; +} +  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 50e2d07d..3644a36a 100644 --- a/src/adapter.h +++ b/src/adapter.h @@ -183,6 +183,7 @@ struct active_conn_info *adapter_search_active_conn_by_bdaddr(struct adapter *ad  						    bdaddr_t *bda);  struct active_conn_info *adapter_search_active_conn_by_handle(struct adapter *adapter,  							uint16_t handle); +void adapter_free_bonding_request(struct adapter *adapter);  struct btd_adapter_driver {  	const char *name; diff --git a/src/dbus-hci.c b/src/dbus-hci.c index 95bbc38c..703b2f41 100644 --- a/src/dbus-hci.c +++ b/src/dbus-hci.c @@ -60,37 +60,6 @@  static DBusConnection *connection = NULL; -void bonding_request_free(struct bonding_request_info *bonding) -{ -	struct btd_device *device; -	char address[18]; -	struct agent *agent; - -	if (!bonding) -		return; - -	if (bonding->msg) -		dbus_message_unref(bonding->msg); - -	if (bonding->conn) -		dbus_connection_unref(bonding->conn); - -	if (bonding->io) -		g_io_channel_unref(bonding->io); - -	ba2str(&bonding->bdaddr, address); - -	device = adapter_find_device(bonding->adapter, address); -	agent = device_get_agent(device); - -	if (device && agent) { -		agent_destroy(agent, FALSE); -		device_set_agent(device, NULL); -	} - -	g_free(bonding); -} -  DBusMessage *new_authentication_return(DBusMessage *msg, uint8_t status)  {  	switch (status) { @@ -621,13 +590,7 @@ proceed:  	}  cleanup: -	g_dbus_remove_watch(connection, adapter->bonding->listener_id); - -	if (adapter->bonding->io_id) -		g_source_remove(adapter->bonding->io_id); -	g_io_channel_close(adapter->bonding->io); -	bonding_request_free(adapter->bonding); -	adapter->bonding = NULL; +	adapter_free_bonding_request(adapter);  }  void hcid_dbus_inquiry_start(bdaddr_t *local) @@ -1156,15 +1119,7 @@ void hcid_dbus_disconn_complete(bdaddr_t *local, uint8_t status,  			dbus_connection_send(connection, reply, NULL);  			dbus_message_unref(reply);  		} - -		g_dbus_remove_watch(adapter->bonding->conn, -					adapter->bonding->listener_id); - -		if (adapter->bonding->io_id) -			g_source_remove(adapter->bonding->io_id); -		g_io_channel_close(adapter->bonding->io); -		bonding_request_free(adapter->bonding); -		adapter->bonding = NULL; +		adapter_free_bonding_request(adapter);  	}  	adapter_remove_active_conn(adapter, dev); diff --git a/src/dbus-hci.h b/src/dbus-hci.h index f13ef740..2d78edc3 100644 --- a/src/dbus-hci.h +++ b/src/dbus-hci.h @@ -53,8 +53,6 @@ DBusMessage *new_authentication_return(DBusMessage *msg, uint8_t status);  int cancel_discovery(struct adapter *adapter);  int cancel_periodic_discovery(struct adapter *adapter); -void bonding_request_free(struct bonding_request_info *dev); -  int set_limited_discoverable(int dd, const uint8_t *cls, gboolean limited);  int set_service_classes(int dd, const uint8_t *cls, uint8_t value);  | 
