Add support for connecting known networks
authorMarcel Holtmann <marcel@holtmann.org>
Mon, 5 Jan 2009 04:37:51 +0000 (05:37 +0100)
committerMarcel Holtmann <marcel@holtmann.org>
Mon, 5 Jan 2009 04:37:51 +0000 (05:37 +0100)
include/network.h
src/device.c
src/network.c

index 796c4f8..70b7c35 100644 (file)
@@ -69,6 +69,9 @@ extern void connman_network_set_protocol(struct connman_network *network,
 
 extern int connman_network_set_connected(struct connman_network *network,
                                                connman_bool_t connected);
+extern connman_bool_t connman_network_get_remember(struct connman_network *network);
+
+extern int connman_network_connect(struct connman_network *network);
 
 extern int connman_network_set_string(struct connman_network *network,
                                        const char *key, const char *value);
index b4a4b0f..57e370c 100644 (file)
@@ -944,7 +944,33 @@ int connman_device_set_carrier(struct connman_device *device,
 
 static void connect_known_network(struct connman_device *device)
 {
+       GHashTableIter iter;
+       gpointer key, value;
+       unsigned int count = 0;
+
        DBG("device %p", device);
+
+       g_hash_table_iter_init(&iter, device->networks);
+
+       while (g_hash_table_iter_next(&iter, &key, &value) == TRUE) {
+               struct connman_network *network = value;
+               int err;
+
+               count++;
+
+               if (connman_network_get_remember(network) == FALSE)
+                       continue;
+
+               err = connman_network_connect(network);
+               if (err == 0 || err == -EINPROGRESS)
+                       return;
+       }
+
+       if (count > 0)
+               return;
+
+       if (device->driver && device->driver->scan)
+               device->driver->scan(device);
 }
 
 /**
index ae3e1e3..6c17088 100644 (file)
@@ -512,6 +512,36 @@ int connman_network_set_connected(struct connman_network *network,
 }
 
 /**
+ * connman_network_get_remember:
+ * @network: network structure
+ *
+ * Get network remember setting
+ */
+connman_bool_t connman_network_get_remember(struct connman_network *network)
+{
+       return network->remember;
+}
+
+/**
+ * connman_network_connect:
+ * @network: network structure
+ *
+ * Connect network
+ */
+int connman_network_connect(struct connman_network *network)
+{
+       if (network->connected == TRUE)
+               return -EALREADY;
+
+       if (network->driver && network->driver->connect)
+               return network->driver->connect(network);
+
+       network->connected = TRUE;
+
+       return 0;
+}
+
+/**
  * connman_network_set_string:
  * @network: network structure
  * @key: unique identifier