service: Function for checking and updating service ordering
authorPatrik Flykt <patrik.flykt@linux.intel.com>
Thu, 5 Apr 2012 19:38:44 +0000 (22:38 +0300)
committerPatrik Flykt <patrik.flykt@linux.intel.com>
Wed, 11 Apr 2012 12:26:15 +0000 (15:26 +0300)
Update the service order checking with a lookup of preferred
technologies. If the new service is found to be preferred,
switch the order of the current default and the new service.

Do the same checks for the default service as currently in
online state default service checking; if the current default
service stays as default, return -EALREADY.

When neither service was found to be preferred, return -EAGAIN.

src/service.c

index bf1eb26..911b6bb 100644 (file)
@@ -4296,6 +4296,36 @@ static void downgrade_connected_services(void)
        }
 }
 
+static int service_update_preferred_order(struct connman_service *default_service,
+               struct connman_service *new_service,
+               enum connman_service_state new_state)
+{
+       unsigned int *tech_array;
+       int i;
+
+       if (default_service == NULL || default_service == new_service ||
+                       default_service->state != new_state )
+               return 0;
+
+       tech_array = connman_setting_get_uint_list("PreferredTechnologies");
+       if (tech_array != NULL) {
+
+               for (i = 0; tech_array[i] != 0; i += 1) {
+                       if (default_service->type == tech_array[i])
+                               return -EALREADY;
+
+                       if (new_service->type == tech_array[i]) {
+                               switch_default_service(new_service,
+                                               default_service);
+                               return 0;
+                       }
+               }
+               return -EAGAIN;
+       }
+
+       return -EALREADY;
+}
+
 static int service_indicate_state(struct connman_service *service)
 {
        enum connman_service_state old_state, new_state;