summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcel Holtmann <marcel@holtmann.org>2009-07-17 13:48:59 +0200
committerMarcel Holtmann <marcel@holtmann.org>2009-07-17 13:48:59 +0200
commita797eb326cdbce0935e321470b452563797bb0e7 (patch)
treedcc8755c7fd12db8c889443cc48dae62f4b6f7dc
parent8e8dfbd2c6a14cbd05f6018ddc24534ad0e693ec (diff)
downloadconnman-a797eb326cdbce0935e321470b452563797bb0e7.tar.gz
connman-a797eb326cdbce0935e321470b452563797bb0e7.tar.bz2
connman-a797eb326cdbce0935e321470b452563797bb0e7.zip
Protect hidden and active networks during scanning
-rw-r--r--src/network.c16
-rw-r--r--src/service.c3
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;