From 186b6fa635e755c824756db8e483eb6c92cb3167 Mon Sep 17 00:00:00 2001 From: Marcel Holtmann Date: Mon, 5 Jan 2009 05:37:51 +0100 Subject: [PATCH] Add support for connecting known networks --- include/network.h | 3 +++ src/device.c | 26 ++++++++++++++++++++++++++ src/network.c | 30 ++++++++++++++++++++++++++++++ 3 files changed, 59 insertions(+) diff --git a/include/network.h b/include/network.h index 796c4f8..70b7c35 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 b4a4b0f..57e370c 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 ae3e1e3..6c17088 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 -- 1.7.9.5