diff options
Diffstat (limited to 'src/manager.c')
| -rw-r--r-- | src/manager.c | 90 | 
1 files changed, 46 insertions, 44 deletions
| diff --git a/src/manager.c b/src/manager.c index f9263ae8..b0ba429c 100644 --- a/src/manager.c +++ b/src/manager.c @@ -326,8 +326,52 @@ dbus_bool_t manager_init(DBusConnection *conn, const char *path)  			NULL, NULL, NULL);  } +static void manager_update_adapters(void) +{ +	GSList *list; +	char **array; +	int i; + +	array = g_new0(char *, g_slist_length(adapters) + 1); +	for (i = 0, list = adapters; list; list = list->next, i++) { +		struct btd_adapter *adapter = list->data; +		array[i] = (char *) adapter_get_path(adapter); +	} + +	emit_array_property_changed(connection, "/", +					MANAGER_INTERFACE, "Adapters", +					DBUS_TYPE_OBJECT_PATH, &array); + +	g_free(array); +} + +static void manager_remove_adapter(struct btd_adapter *adapter) +{ +	uint16_t dev_id = adapter_get_dev_id(adapter); +	const gchar *path = adapter_get_path(adapter); + +	manager_update_adapters(); + +	g_dbus_emit_signal(connection, "/", +			MANAGER_INTERFACE, "AdapterRemoved", +			DBUS_TYPE_OBJECT_PATH, &path, +			DBUS_TYPE_INVALID); + +	if (default_adapter_id == dev_id || default_adapter_id < 0) { +		int new_default = hci_get_route(NULL); + +		manager_set_default_adapter(new_default); +	} + +	adapters = g_slist_remove(adapters, adapter); +	adapter_remove(adapter); +} +  void manager_cleanup(DBusConnection *conn, const char *path)  { +	g_slist_foreach(adapters, (GFunc) manager_remove_adapter, NULL); +	g_slist_free(adapters); +  	g_dbus_unregister_interface(conn, "/", MANAGER_INTERFACE);  } @@ -403,25 +447,6 @@ GSList *manager_get_adapters(void)  	return adapters;  } -static void manager_update_adapters(void) -{ -	GSList *list; -	char **array; -	int i; - -	array = g_new0(char *, g_slist_length(adapters) + 1); -	for (i = 0, list = adapters; list; list = list->next, i++) { -		struct btd_adapter *adapter = list->data; -		array[i] = (char *) adapter_get_path(adapter); -	} - -	emit_array_property_changed(connection, "/", -					MANAGER_INTERFACE, "Adapters", -					DBUS_TYPE_OBJECT_PATH, &array); - -	g_free(array); -} -  static void manager_add_adapter(struct btd_adapter *adapter)  {  	const gchar *path = adapter_get_path(adapter); @@ -442,30 +467,9 @@ static void manager_add_adapter(struct btd_adapter *adapter)  	manager_update_adapters();  } -static void manager_remove_adapter(struct btd_adapter *adapter) -{ -	uint16_t dev_id = adapter_get_dev_id(adapter); -	const gchar *path = adapter_get_path(adapter); - -	manager_update_adapters(); - -	g_dbus_emit_signal(connection, "/", -			MANAGER_INTERFACE, "AdapterRemoved", -			DBUS_TYPE_OBJECT_PATH, &path, -			DBUS_TYPE_INVALID); - -	if (default_adapter_id == dev_id || default_adapter_id < 0) { -		int new_default = hci_get_route(NULL); - -		manager_set_default_adapter(new_default); -	} - -	adapters = g_slist_remove(adapters, adapter); -} - -int manager_register_adapter(int id) +int manager_register_adapter(int id, gboolean devup)  { -	struct btd_adapter *adapter = adapter_create(connection, id); +	struct btd_adapter *adapter = adapter_create(connection, id, devup);  	if (!adapter)  		return -1; @@ -490,8 +494,6 @@ int manager_unregister_adapter(int id)  	manager_remove_adapter(adapter); -	adapter_remove(adapter); -  	return 0;  } | 
