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