X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Fmain.c;h=48a956cc7e37a19e42e62baa189ea5ec137d9173;hb=86cd761a6e375875ec904ea378ed61d4fc41e1b8;hp=354734d32d5e8d2bedff3813079973e63743c236;hpb=167aab8ef44d0a601d20f7f77e5e969689582ca8;p=framework%2Fconnectivity%2Fconnman.git diff --git a/src/main.c b/src/main.c index 354734d..48a956c 100644 --- a/src/main.c +++ b/src/main.c @@ -2,7 +2,7 @@ * * Connection Manager * - * Copyright (C) 2007-2010 Intel Corporation. All rights reserved. + * Copyright (C) 2007-2012 Intel Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as @@ -33,23 +33,24 @@ #include #include #include +#include #include -#ifdef HAVE_CAPNG -#include -#endif - #include "connman.h" static struct { connman_bool_t bg_scan; char **pref_timeservers; unsigned int *auto_connect; + unsigned int *preferred_techs; + char **fallback_nameservers; } connman_settings = { .bg_scan = TRUE, .pref_timeservers = NULL, .auto_connect = NULL, + .preferred_techs = NULL, + .fallback_nameservers = NULL, }; static GKeyFile *load_config(const char *file) @@ -101,6 +102,35 @@ static uint *parse_service_types(char **str_list, gsize len) return type_list; } +static char **parse_fallback_nameservers(char **nameservers, gsize len) +{ + char **servers; + int i, j; + struct addrinfo hints; + struct addrinfo *addr; + + servers = g_try_new0(char *, len + 1); + if (servers == NULL) + return NULL; + + i = 0; + j = 0; + while (nameservers[i] != NULL) { + memset(&hints, 0, sizeof(struct addrinfo)); + hints.ai_flags = AI_NUMERICHOST; + addr = NULL; + if (getaddrinfo(nameservers[i], NULL, &hints, &addr) == 0) { + servers[j] = g_strdup(nameservers[i]); + j += 1; + } + + freeaddrinfo(addr); + i += 1; + } + + return servers; +} + static void parse_config(GKeyFile *config) { GError *error = NULL; @@ -112,10 +142,14 @@ static void parse_config(GKeyFile *config) "wifi", "ethernet", "cellular", + NULL }; - if (config == NULL) + if (config == NULL) { + connman_settings.auto_connect = + parse_service_types(default_auto_connect, 3); return; + } DBG("parsing main.conf"); @@ -146,6 +180,28 @@ static void parse_config(GKeyFile *config) g_strfreev(str_list); g_clear_error(&error); + + str_list = g_key_file_get_string_list(config, "General", + "PreferredTechnologies", &len, &error); + + if (error == NULL) + connman_settings.preferred_techs = + parse_service_types(str_list, len); + + g_strfreev(str_list); + + g_clear_error(&error); + + str_list = g_key_file_get_string_list(config, "General", + "FallbackNameservers", &len, &error); + + if (error == NULL) + connman_settings.fallback_nameservers = + parse_fallback_nameservers(str_list, len); + + g_strfreev(str_list); + + g_clear_error(&error); } static GMainLoop *main_loop = NULL; @@ -301,6 +357,9 @@ char **connman_setting_get_string_list(const char *key) if (g_str_equal(key, "FallbackTimeservers") == TRUE) return connman_settings.pref_timeservers; + if (g_str_equal(key, "FallbackNameservers") == TRUE) + return connman_settings.fallback_nameservers; + return NULL; } @@ -309,6 +368,9 @@ unsigned int *connman_setting_get_uint_list(const char *key) if (g_str_equal(key, "DefaultAutoConnectTechnologies") == TRUE) return connman_settings.auto_connect; + if (g_str_equal(key, "PreferredTechnologies") == TRUE) + return connman_settings.preferred_techs; + return NULL; } @@ -321,10 +383,6 @@ int main(int argc, char *argv[]) GKeyFile *config; guint signal; -#ifdef HAVE_CAPNG - /* Drop capabilities */ -#endif - #ifdef NEED_THREADS if (g_thread_supported() == FALSE) g_thread_init(NULL); @@ -400,10 +458,9 @@ int main(int argc, char *argv[]) __connman_dbus_init(conn); config = load_config(CONFIGDIR "/main.conf"); - if (config != NULL) { - parse_config(config); + parse_config(config); + if (config != NULL) g_key_file_free(config); - } __connman_storage_migrate(); __connman_technology_init(); @@ -497,6 +554,8 @@ int main(int argc, char *argv[]) g_strfreev(connman_settings.pref_timeservers); g_free(connman_settings.auto_connect); + g_free(connman_settings.preferred_techs); + g_strfreev(connman_settings.fallback_nameservers); g_free(option_debug);