diff options
author | Jukka Rissanen <jukka.rissanen@linux.intel.com> | 2011-08-24 17:01:57 +0300 |
---|---|---|
committer | Samuel Ortiz <sameo@linux.intel.com> | 2011-09-12 11:40:46 +0200 |
commit | b5a6920355da765f9c6e699c1b24e74a625e8660 (patch) | |
tree | 7592356599f27776ec0b27fd88f8bbe8f94e0c22 /src/network.c | |
parent | 299ef121a188c6432538abaf6b3865f5fac81c3d (diff) | |
download | connman-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.c | 18 |
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); |