---
 src/service.c |   28 +++++++++++++++++++++++++++-
 1 files changed, 27 insertions(+), 1 deletions(-)

diff --git a/src/service.c b/src/service.c
index 9319323..34dbc79 100644
--- a/src/service.c
+++ b/src/service.c
@@ -3642,6 +3642,7 @@ int __connman_service_ipconfig_indicate_state(struct 
connman_service *service,
 {
        struct connman_ipconfig *ipconfig = NULL;
        enum connman_service_state old_state;
+       int ret;
 
        if (service == NULL)
                return -EINVAL;
@@ -3699,7 +3700,32 @@ int __connman_service_ipconfig_indicate_state(struct 
connman_service *service,
        else if (type == CONNMAN_IPCONFIG_TYPE_IPV6)
                service->state_ipv6 = new_state;
 
-       return service_indicate_state(service);
+       ret = service_indicate_state(service);
+
+       /*
+        * If the ipconfig method is OFF, then we set the state to IDLE
+        * so that it will not affect the combined state in the future.
+        */
+       if (type == CONNMAN_IPCONFIG_TYPE_IPV4) {
+               enum connman_ipconfig_method method;
+               method = __connman_ipconfig_get_method(service->ipconfig_ipv4);
+               if (method == CONNMAN_IPCONFIG_METHOD_OFF ||
+                               method == CONNMAN_IPCONFIG_METHOD_UNKNOWN) {
+                       service->state_ipv4 = CONNMAN_SERVICE_STATE_IDLE;
+                       ret = service_indicate_state(service);
+               }
+
+       } else if (type == CONNMAN_IPCONFIG_TYPE_IPV6) {
+               enum connman_ipconfig_method method;
+               method = __connman_ipconfig_get_method(service->ipconfig_ipv6);
+               if (method == CONNMAN_IPCONFIG_METHOD_OFF ||
+                               method == CONNMAN_IPCONFIG_METHOD_UNKNOWN) {
+                       service->state_ipv6 = CONNMAN_SERVICE_STATE_IDLE;
+                       ret = service_indicate_state(service);
+               }
+       }
+
+       return ret;
 }
 
 int __connman_service_request_login(struct connman_service *service)
-- 
1.7.1

_______________________________________________
connman mailing list
connman@connman.net
http://lists.connman.net/listinfo/connman

Reply via email to