diff options
author | Marcel Holtmann <marcel@holtmann.org> | 2009-01-05 05:37:51 +0100 |
---|---|---|
committer | Marcel Holtmann <marcel@holtmann.org> | 2009-01-05 05:37:51 +0100 |
commit | 186b6fa635e755c824756db8e483eb6c92cb3167 (patch) | |
tree | 89ba047df17ceccc18d23efbe27bb1b46322da3c | |
parent | 9b05cebe93ad885ee2a2156f6310eb7da365e581 (diff) | |
download | connman-186b6fa635e755c824756db8e483eb6c92cb3167.tar.gz connman-186b6fa635e755c824756db8e483eb6c92cb3167.tar.bz2 connman-186b6fa635e755c824756db8e483eb6c92cb3167.zip |
Add support for connecting known networks
-rw-r--r-- | include/network.h | 3 | ||||
-rw-r--r-- | src/device.c | 26 | ||||
-rw-r--r-- | src/network.c | 30 |
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 |