service: Add function to set the favorite flag
authorJukka Rissanen <jukka.rissanen@linux.intel.com>
Tue, 5 Jun 2012 08:24:10 +0000 (11:24 +0300)
committerPatrik Flykt <patrik.flykt@linux.intel.com>
Mon, 11 Jun 2012 10:03:21 +0000 (13:03 +0300)
Add a function that sets favorite flag but which does
not touch the ordering of service sequence. This is needed
when we check provisioned config file which traverses the
service sequence. If a proper provisioned service is found,
then it is marked as favorite but in this case we must not
do any ordering of service sequence because we are in the
middle of sequence traversal.

src/config.c
src/connman.h
src/service.c

index 253c277..aba06c4 100644 (file)
@@ -775,7 +775,7 @@ static void provision_service(gpointer key, gpointer value, gpointer user_data)
 
        __connman_service_set_immutable(service, TRUE);
 
-       __connman_service_set_favorite(service, TRUE);
+       __connman_service_set_favorite_delayed(service, TRUE, TRUE);
 
        __connman_service_set_config(service, config->config_ident,
                                                config->config_entry);
index fb2be57..1d25cde 100644 (file)
@@ -595,6 +595,9 @@ const char *__connman_service_get_phase2(struct connman_service *service);
 connman_bool_t __connman_service_wps_enabled(struct connman_service *service);
 int __connman_service_set_favorite(struct connman_service *service,
                                                connman_bool_t favorite);
+int __connman_service_set_favorite_delayed(struct connman_service *service,
+                                       connman_bool_t favorite,
+                                       gboolean delay_ordering);
 int __connman_service_set_immutable(struct connman_service *service,
                                                connman_bool_t immutable);
 void __connman_service_set_userconnect(struct connman_service *service,
index 99d441a..697f248 100644 (file)
@@ -4376,14 +4376,16 @@ connman_bool_t __connman_service_wps_enabled(struct connman_service *service)
 }
 
 /**
- * __connman_service_set_favorite:
+ * __connman_service_set_favorite_delayed:
  * @service: service structure
  * @favorite: favorite value
+ * @delay_ordering: do not order service sequence
  *
  * Change the favorite setting of service
  */
-int __connman_service_set_favorite(struct connman_service *service,
-                                               connman_bool_t favorite)
+int __connman_service_set_favorite_delayed(struct connman_service *service,
+                                       connman_bool_t favorite,
+                                       gboolean delay_ordering)
 {
        GSequenceIter *iter;
 
@@ -4397,20 +4399,39 @@ int __connman_service_set_favorite(struct connman_service *service,
                return -EALREADY;
 
        service->favorite = favorite;
-       service->order = __connman_service_get_order(service);
+
+       if (delay_ordering == FALSE)
+               service->order = __connman_service_get_order(service);
 
        favorite_changed(service);
 
-       if (g_sequence_get_length(service_list) > 1) {
-               g_sequence_sort_changed(iter, service_compare, NULL);
-               service_schedule_changed();
-       }
+       if (delay_ordering == FALSE) {
 
-       __connman_connection_update_gateway();
+               if (g_sequence_get_length(service_list) > 1) {
+                       g_sequence_sort_changed(iter, service_compare, NULL);
+                       service_schedule_changed();
+               }
+
+               __connman_connection_update_gateway();
+       }
 
        return 0;
 }
 
+/**
+ * __connman_service_set_favorite:
+ * @service: service structure
+ * @favorite: favorite value
+ *
+ * Change the favorite setting of service
+ */
+int __connman_service_set_favorite(struct connman_service *service,
+                                               connman_bool_t favorite)
+{
+       return __connman_service_set_favorite_delayed(service, favorite,
+                                                       FALSE);
+}
+
 int __connman_service_set_immutable(struct connman_service *service,
                                                connman_bool_t immutable)
 {