service: Prefer user connected services with SingleConnectedTechnology
authorPatrik Flykt <patrik.flykt@linux.intel.com>
Wed, 17 Oct 2012 10:34:43 +0000 (13:34 +0300)
committerPatrik Flykt <patrik.flykt@linux.intel.com>
Thu, 18 Oct 2012 10:27:16 +0000 (13:27 +0300)
Don't override user connected services with the ones selected by the
preferred technology list when SingleConnectedTechnology is enabled.
Do this by checking each connected service sorted in the beginning of
the service list for the userconnect flag.

src/service.c

index a027b3e861794506fd3ae2821d7c971ee2aabf51..7381af35b8ad0ff2274174ff1614461bed813e4e 100644 (file)
@@ -3377,6 +3377,26 @@ static GSequence* preferred_tech_list_get(GSequence *list)
        if (tech_array == NULL)
                return NULL;
 
+       if (connman_setting_get_bool("SingleConnectedTechnology") == TRUE) {
+               GSequenceIter *iter = g_sequence_get_begin_iter(service_list);
+               while (g_sequence_iter_is_end(iter) == FALSE) {
+                       struct connman_service *service;
+
+                       service = g_sequence_get(iter);
+
+                       if (is_connected(service) == FALSE)
+                               break;
+
+                       if (service->userconnect == TRUE) {
+                               DBG("service %p name %s is user connected",
+                                               service, service->name);
+                               return NULL;
+                       }
+
+                       iter = g_sequence_iter_next(iter);
+               }
+       }
+
        tech_data.preferred_list = g_sequence_new(NULL);
 
        for (i = 0; tech_array[i] != 0; i += 1) {