From d7d393170ebbc226acc8a8886834ac9f104f4501 Mon Sep 17 00:00:00 2001 From: Patrik Flykt Date: Thu, 5 Apr 2012 22:38:41 +0300 Subject: [PATCH] service: Create preferred technology list Look up services from the service list according to their types using the entries in the 'PreferredTechnologies' string array. Return the newly allocated service sequence to the caller. --- src/service.c | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/src/service.c b/src/service.c index 488b2bd..53b56f2 100644 --- a/src/service.c +++ b/src/service.c @@ -3020,6 +3020,45 @@ static connman_bool_t is_ignore(struct connman_service *service) return FALSE; } +struct preferred_tech_data { + GSequence *preferred_list; + enum connman_service_type type; +}; + +static void preferred_tech_add_by_type(gpointer data, gpointer user_data) +{ + struct connman_service *service = data; + struct preferred_tech_data *tech_data = user_data; + + if (service->type == tech_data->type) { + g_sequence_append(tech_data->preferred_list, service); + + DBG("type %d service %p %s", tech_data->type, service, + service->name); + } +} + +static GSequence* preferred_tech_list_get(GSequence *list) +{ + unsigned int *tech_array; + struct preferred_tech_data tech_data; + int i; + + tech_array = connman_setting_get_uint_list("PreferredTechnologies"); + if (tech_array == NULL) + return NULL; + + tech_data.preferred_list = g_sequence_new(NULL); + + for (i = 0; tech_array[i] != 0; i += 1) { + tech_data.type = tech_array[i]; + g_sequence_foreach(service_list, preferred_tech_add_by_type, + &tech_data); + } + + return tech_data.preferred_list; +} + void __connman_service_auto_connect(void) { struct connman_service *service = NULL; -- 2.7.4