diff options
author | Samuel Ortiz <sameo@linux.intel.com> | 2010-08-21 00:51:26 +0200 |
---|---|---|
committer | Samuel Ortiz <sameo@linux.intel.com> | 2010-08-21 00:51:26 +0200 |
commit | 166ef127b4ea769c27811ede5f010d67de759051 (patch) | |
tree | e305310de100d03b2c3e33d7e379bbefa30beb4b | |
parent | 166f685e6444389176a10496875ab8ee67dcb1a9 (diff) | |
download | connman-166ef127b4ea769c27811ede5f010d67de759051.tar.gz connman-166ef127b4ea769c27811ede5f010d67de759051.tar.bz2 connman-166ef127b4ea769c27811ede5f010d67de759051.zip |
Disconnect VPNs when no physical services are left
This was previously handled by the provider notifier code, but with the
VPNs being moved to the service list top, it has to be handled from the
service layer directly.
-rw-r--r-- | src/provider.c | 12 | ||||
-rw-r--r-- | src/service.c | 9 |
2 files changed, 9 insertions, 12 deletions
diff --git a/src/provider.c b/src/provider.c index 984f57c0..705f911d 100644 --- a/src/provider.c +++ b/src/provider.c @@ -699,20 +699,8 @@ static void provider_offline_mode(connman_bool_t enabled) } -static void provider_default_changed(struct connman_service *service) -{ - DBG("service %p", service); - - if (service == NULL) { - /* When no services are active, then disconnect all VPNs */ - provider_offline_mode(TRUE); - return; - } -} - static struct connman_notifier provider_notifier = { .name = "provider", - .default_changed = provider_default_changed, .offline_mode = provider_offline_mode, }; diff --git a/src/service.c b/src/service.c index 33c80063..eb467a04 100644 --- a/src/service.c +++ b/src/service.c @@ -2597,6 +2597,15 @@ int __connman_service_indicate_state(struct connman_service *service, if (service->state == CONNMAN_SERVICE_STATE_ONLINE) default_changed(); + if (service->state == CONNMAN_SERVICE_STATE_DISCONNECT) { + struct connman_service *def_service = get_default(); + + if (__connman_notifier_count_connected() == 0 && + def_service != NULL && + def_service->provider != NULL) + __connman_provider_disconnect(def_service->provider); + } + if (service->state == CONNMAN_SERVICE_STATE_IDLE || service->state == CONNMAN_SERVICE_STATE_FAILURE) __connman_element_request_scan(CONNMAN_ELEMENT_TYPE_UNKNOWN); |