summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcel Holtmann <marcel@holtmann.org>2009-01-20 14:56:37 +0100
committerMarcel Holtmann <marcel@holtmann.org>2009-01-20 14:56:37 +0100
commit7b9ccd0409be6c683f4954d417d507e06ed561d5 (patch)
tree6f6f780dc63bc48371c0ee780ba6644d2d97bc00
parent04cde7cfde844455325ad03cf2e61ea2da4adf15 (diff)
downloadconnman-7b9ccd0409be6c683f4954d417d507e06ed561d5.tar.gz
connman-7b9ccd0409be6c683f4954d417d507e06ed561d5.tar.bz2
connman-7b9ccd0409be6c683f4954d417d507e06ed561d5.zip
Remove networks that are no longer available
-rw-r--r--src/device.c33
1 files changed, 32 insertions, 1 deletions
diff --git a/src/device.c b/src/device.c
index 2a65e69a..d107bf4d 100644
--- a/src/device.c
+++ b/src/device.c
@@ -1030,6 +1030,31 @@ static void connect_known_network(struct connman_device *device)
device->driver->scan(device);
}
+static void mark_network_unavailable(gpointer key, gpointer value,
+ gpointer user_data)
+{
+ struct connman_network *network = value;
+
+ if (connman_network_get_remember(network) == TRUE)
+ return;
+
+ connman_network_set_available(network, FALSE);
+}
+
+static gboolean remove_unavailable_network(gpointer key, gpointer value,
+ gpointer user_data)
+{
+ struct connman_network *network = value;
+
+ if (connman_network_get_remember(network) == TRUE)
+ return FALSE;
+
+ if (connman_network_get_available(network) == TRUE)
+ return FALSE;
+
+ return TRUE;
+}
+
/**
* connman_device_set_scanning:
* @device: device structure
@@ -1070,8 +1095,14 @@ int connman_device_set_scanning(struct connman_device *device,
g_dbus_send_message(connection, signal);
- if (scanning == TRUE)
+ if (scanning == TRUE) {
+ g_hash_table_foreach(device->networks,
+ mark_network_unavailable, NULL);
return 0;
+ }
+
+ g_hash_table_foreach_remove(device->networks,
+ remove_unavailable_network, NULL);
if (device->connections > 0)
return 0;