summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcel Holtmann <marcel@holtmann.org>2009-01-05 05:37:51 +0100
committerMarcel Holtmann <marcel@holtmann.org>2009-01-05 05:37:51 +0100
commit186b6fa635e755c824756db8e483eb6c92cb3167 (patch)
tree89ba047df17ceccc18d23efbe27bb1b46322da3c
parent9b05cebe93ad885ee2a2156f6310eb7da365e581 (diff)
downloadconnman-186b6fa635e755c824756db8e483eb6c92cb3167.tar.gz
connman-186b6fa635e755c824756db8e483eb6c92cb3167.tar.bz2
connman-186b6fa635e755c824756db8e483eb6c92cb3167.zip
Add support for connecting known networks
-rw-r--r--include/network.h3
-rw-r--r--src/device.c26
-rw-r--r--src/network.c30
3 files changed, 59 insertions, 0 deletions
diff --git a/include/network.h b/include/network.h
index 796c4f84..70b7c35b 100644
--- a/include/network.h
+++ b/include/network.h
@@ -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);
diff --git a/src/device.c b/src/device.c
index b4a4b0fd..57e370c1 100644
--- a/src/device.c
+++ b/src/device.c
@@ -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);
}
/**
diff --git a/src/network.c b/src/network.c
index ae3e1e36..6c17088e 100644
--- a/src/network.c
+++ b/src/network.c
@@ -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