summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcel Holtmann <marcel@holtmann.org>2008-12-05 22:07:26 +0100
committerMarcel Holtmann <marcel@holtmann.org>2008-12-05 22:07:26 +0100
commitafc80b971146277e4befc173ef61cfcb375a3b0f (patch)
tree5e52d4eef485de5e90aa2ab10d22331916be9c72
parent9a190718628f120e6a3469a7d128795c70fc1ad0 (diff)
downloadconnman-afc80b971146277e4befc173ef61cfcb375a3b0f.tar.gz
connman-afc80b971146277e4befc173ef61cfcb375a3b0f.tar.bz2
connman-afc80b971146277e4befc173ef61cfcb375a3b0f.zip
Track global connection state
-rw-r--r--plugins/wifi.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/plugins/wifi.c b/plugins/wifi.c
index 51045869..0ae20f59 100644
--- a/plugins/wifi.c
+++ b/plugins/wifi.c
@@ -44,6 +44,7 @@
struct wifi_data {
GSList *list;
gchar *identifier;
+ gboolean connected;
};
static int network_probe(struct connman_element *element)
@@ -77,6 +78,9 @@ static int network_enable(struct connman_element *element)
if (element->parent != NULL) {
struct wifi_data *data = connman_element_get_data(element->parent);
+ if (data->connected == TRUE)
+ return -EBUSY;
+
if (data != NULL) {
g_free(data->identifier);
data->identifier = g_strdup(identifier);
@@ -154,13 +158,16 @@ static void state_change(struct connman_element *parent,
if (state == STATE_COMPLETED) {
struct connman_element *dhcp;
+ data->connected = TRUE;
+
dhcp = connman_element_create(NULL);
dhcp->type = CONNMAN_ELEMENT_TYPE_DHCP;
dhcp->index = element->index;
connman_element_register(dhcp, element);
- }
+ } else if (state == STATE_DISCONNECTED || state == STATE_INACTIVE)
+ data->connected = FALSE;
}
static void scan_result(struct connman_element *parent,
@@ -262,6 +269,8 @@ static int wifi_probe(struct connman_element *element)
if (data == NULL)
return -ENOMEM;
+ data->connected = FALSE;
+
connman_element_set_data(element, data);
return 0;