struct connman_device *device;
struct connman_network *network;
struct connman_network *pending_network;
+ GSList *networks;
GSupplicantInterface *interface;
GSupplicantState state;
connman_bool_t connected;
return 0;
}
+static void remove_networks(struct connman_device *device,
+ struct wifi_data *wifi)
+{
+ GSList *list;
+
+ for (list = wifi->networks; list != NULL; list = list->next) {
+ struct connman_network *network = list->data;
+
+ connman_device_remove_network(device, network);
+ connman_network_unref(network);
+ }
+
+ g_slist_free(wifi->networks);
+ wifi->networks = NULL;
+}
+
static void wifi_remove(struct connman_device *device)
{
struct wifi_data *wifi = connman_device_get_data(device);
iface_list = g_list_remove(iface_list, wifi);
- if (wifi->pending_network != NULL) {
- connman_network_unref(wifi->pending_network);
- wifi->pending_network = NULL;
- }
+ remove_networks(device, wifi);
connman_device_set_data(device, NULL);
connman_device_unref(wifi->device);
wifi->connected = FALSE;
wifi->disconnecting = FALSE;
- if (wifi->pending_network != NULL) {
- connman_network_unref(wifi->pending_network);
+ if (wifi->pending_network != NULL)
wifi->pending_network = NULL;
- }
+
+ remove_networks(device, wifi);
ret = g_supplicant_interface_remove(wifi->interface,
interface_remove_callback,
ssid_init(ssid, network);
if (wifi->disconnecting == TRUE)
- wifi->pending_network = connman_network_ref(network);
+ wifi->pending_network = network;
else {
- wifi->network = connman_network_ref(network);
+ wifi->network = network;
return g_supplicant_interface_connect(interface, ssid,
connect_callback, network);
*/
if (result < 0)
connman_network_set_connected(wifi->network, FALSE);
-
- connman_network_unref(wifi->network);
}
wifi->network = NULL;
if (wifi->pending_network != NULL) {
network_connect(wifi->pending_network);
- connman_network_unref(wifi->pending_network);
wifi->pending_network = NULL;
}
connman_network_unref(network);
return;
}
+
+ wifi->networks = g_slist_append(wifi->networks, network);
}
if (name != NULL && name[0] != '\0')
if (connman_network == NULL)
return;
+ wifi->networks = g_slist_remove(wifi->networks, connman_network);
+
connman_device_remove_network(wifi->device, connman_network);
connman_network_unref(connman_network);
}