From: Patrik Flykt <[email protected]>

---
 src/session.c |   22 +++++++++++++++++++---
 1 files changed, 19 insertions(+), 3 deletions(-)

diff --git a/src/session.c b/src/session.c
index 8376bf7..33f7171 100644
--- a/src/session.c
+++ b/src/session.c
@@ -865,6 +865,22 @@ static void select_and_connect(struct connman_session 
*session,
        }
 }
 
+static connman_bool_t has_provider(struct connman_session *session)
+{
+       GSequenceIter *iter;
+       struct service_entry *entry;
+
+       iter = g_sequence_get_begin_iter(session->service_list);
+       while (g_sequence_iter_is_end(iter) == FALSE) {
+               entry = g_sequence_get(iter);
+               if (connman_service_get_type(entry->service) ==
+                       CONNMAN_SERVICE_TYPE_VPN)
+                       return TRUE;
+               iter = g_sequence_iter_next(iter);
+       }
+       return FALSE;
+}
+
 static void session_changed(struct connman_session *session,
                                enum connman_session_trigger trigger)
 {
@@ -903,7 +919,7 @@ static void session_changed(struct connman_session *session,
 
                break;
        case CONNMAN_SESSION_TRIGGER_CONNECT:
-               if (info->online == TRUE) {
+               if (info->online == TRUE && has_provider(session) == FALSE) {
                        info->entry->reason = CONNMAN_SESSION_REASON_CONNECT;
                        __connman_service_session_inc(info->entry->service);
                        break;
@@ -918,7 +934,7 @@ static void session_changed(struct connman_session *session,
 
                break;
        case CONNMAN_SESSION_TRIGGER_PERIODIC:
-               if (info->online == TRUE) {
+               if (info->online == TRUE && has_provider(session) == FALSE) {
                        info->entry->reason = CONNMAN_SESSION_REASON_PERIODIC;
                        __connman_service_session_inc(info->entry->service);
                        break;
@@ -929,7 +945,7 @@ static void session_changed(struct connman_session *session,
 
                break;
        case CONNMAN_SESSION_TRIGGER_SERVICE:
-               if (info->online == TRUE)
+               if (info->online == TRUE && has_provider(session) == FALSE)
                        break;
 
                if (info->stay_connected == TRUE) {
-- 
1.7.2.5

_______________________________________________
connman mailing list
[email protected]
http://lists.connman.net/listinfo/connman

Reply via email to