diff options
author | Marcel Holtmann <marcel@holtmann.org> | 2009-07-17 13:48:59 +0200 |
---|---|---|
committer | Marcel Holtmann <marcel@holtmann.org> | 2009-07-17 13:48:59 +0200 |
commit | a797eb326cdbce0935e321470b452563797bb0e7 (patch) | |
tree | dcc8755c7fd12db8c889443cc48dae62f4b6f7dc | |
parent | 8e8dfbd2c6a14cbd05f6018ddc24534ad0e693ec (diff) | |
download | connman-a797eb326cdbce0935e321470b452563797bb0e7.tar.gz connman-a797eb326cdbce0935e321470b452563797bb0e7.tar.bz2 connman-a797eb326cdbce0935e321470b452563797bb0e7.zip |
Protect hidden and active networks during scanning
-rw-r--r-- | src/network.c | 16 | ||||
-rw-r--r-- | src/service.c | 3 |
2 files changed, 15 insertions, 4 deletions
diff --git a/src/network.c b/src/network.c index 5f3ae9c7..7277e213 100644 --- a/src/network.c +++ b/src/network.c @@ -37,6 +37,7 @@ struct connman_network { connman_bool_t secondary; connman_bool_t available; connman_bool_t connected; + connman_bool_t hidden; connman_uint8_t strength; connman_uint16_t frequency; char *identifier; @@ -461,7 +462,12 @@ struct connman_network *connman_network_create(const char *identifier, __connman_element_initialize(&network->element); //temp = connman_dbus_encode_string(identifier); - temp = g_strdup(identifier); + if (identifier == NULL) { + temp = g_strdup("hidden"); + network->hidden = TRUE; + } else + temp = g_strdup(identifier); + if (temp == NULL) { g_free(network); return NULL; @@ -481,7 +487,7 @@ struct connman_network *connman_network_create(const char *identifier, network->type = type; network->secondary = FALSE; - network->identifier = g_strdup(identifier); + network->identifier = g_strdup(temp); network->ipconfig = connman_ipconfig_create(); if (network->ipconfig == NULL) { @@ -702,6 +708,9 @@ int connman_network_set_available(struct connman_network *network, */ connman_bool_t connman_network_get_available(struct connman_network *network) { + if (network->hidden == TRUE) + return TRUE; + return network->available; } @@ -777,6 +786,7 @@ static gboolean set_connected(gpointer user_data) connman_element_unregister_children(&network->element); __connman_device_set_network(network->device, NULL); + network->hidden = FALSE; __connman_device_decrease_connections(network->device); @@ -899,6 +909,8 @@ int __connman_network_connect(struct connman_network *network) if (err < 0) { if (err == -EINPROGRESS) connman_network_set_associating(network, TRUE); + else + network->hidden = FALSE; return err; } diff --git a/src/service.c b/src/service.c index 74a39fc5..33d942d7 100644 --- a/src/service.c +++ b/src/service.c @@ -1178,8 +1178,7 @@ static struct connman_network *create_hidden_wifi(struct connman_device *device, if (ssid_len < 1) return NULL; - network = connman_network_create("000000000000", - CONNMAN_NETWORK_TYPE_WIFI); + network = connman_network_create(NULL, CONNMAN_NETWORK_TYPE_WIFI); if (network == NULL) return NULL; |