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 a027b3e..7381af3 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) {