summaryrefslogtreecommitdiff
path: root/src/network.c
diff options
context:
space:
mode:
authorJukka Rissanen <jukka.rissanen@linux.intel.com>2011-08-24 17:01:57 +0300
committerSamuel Ortiz <sameo@linux.intel.com>2011-09-12 11:40:46 +0200
commitb5a6920355da765f9c6e699c1b24e74a625e8660 (patch)
tree7592356599f27776ec0b27fd88f8bbe8f94e0c22 /src/network.c
parent299ef121a188c6432538abaf6b3865f5fac81c3d (diff)
downloadconnman-b5a6920355da765f9c6e699c1b24e74a625e8660.tar.gz
connman-b5a6920355da765f9c6e699c1b24e74a625e8660.tar.bz2
connman-b5a6920355da765f9c6e699c1b24e74a625e8660.zip
network: Change the service disconnect state when necessary
If we are in idle or failure states, then we should not change to disconnect state when the service is disconnected. This is because we were not connected in the first place.
Diffstat (limited to 'src/network.c')
-rw-r--r--src/network.c18
1 files changed, 16 insertions, 2 deletions
diff --git a/src/network.c b/src/network.c
index d360282f..5fdc43cc 100644
--- a/src/network.c
+++ b/src/network.c
@@ -1058,6 +1058,7 @@ static gboolean set_connected(gpointer user_data)
} else {
struct connman_service *service;
+ enum connman_service_state state;
__connman_device_set_network(network->device, NULL);
@@ -1075,11 +1076,24 @@ static gboolean set_connected(gpointer user_data)
break;
}
- __connman_service_ipconfig_indicate_state(service,
+ /*
+ * We only set the disconnect state if we were not in idle
+ * or in failure. It does not make sense to go to disconnect
+ * state if we were not connected.
+ */
+ state = __connman_service_ipconfig_get_state(service,
+ CONNMAN_IPCONFIG_TYPE_IPV4);
+ if (state != CONNMAN_SERVICE_STATE_IDLE &&
+ state != CONNMAN_SERVICE_STATE_FAILURE)
+ __connman_service_ipconfig_indicate_state(service,
CONNMAN_SERVICE_STATE_DISCONNECT,
CONNMAN_IPCONFIG_TYPE_IPV4);
- __connman_service_ipconfig_indicate_state(service,
+ state = __connman_service_ipconfig_get_state(service,
+ CONNMAN_IPCONFIG_TYPE_IPV6);
+ if (state != CONNMAN_SERVICE_STATE_IDLE &&
+ state != CONNMAN_SERVICE_STATE_FAILURE)
+ __connman_service_ipconfig_indicate_state(service,
CONNMAN_SERVICE_STATE_DISCONNECT,
CONNMAN_IPCONFIG_TYPE_IPV6);