X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Fmain.c;h=a39adb31034e1c167a199536ae843d91d61c2e96;hb=89077bfd2abf7984027552c8cee223a0c6dab57c;hp=ded3bb1b4651fbbd8020af8028bc11f92bdf858d;hpb=37cbd6d1e4f65892bab87194479a3cf86fa181aa;p=framework%2Fconnectivity%2Fconnman.git diff --git a/src/main.c b/src/main.c index ded3bb1..a39adb3 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,19 +33,33 @@ #include #include #include +#include #include -#ifdef HAVE_CAPNG -#include -#endif - #include "connman.h" +#define DEFAULT_INPUT_REQUEST_TIMEOUT 120 * 1000 +#define DEFAULT_BROWSER_LAUNCH_TIMEOUT 300 * 1000 + static struct { connman_bool_t bg_scan; + char **pref_timeservers; + unsigned int *auto_connect; + unsigned int *preferred_techs; + char **fallback_nameservers; + unsigned int timeout_inputreq; + unsigned int timeout_browserlaunch; + char **blacklisted_interfaces; } connman_settings = { .bg_scan = TRUE, + .pref_timeservers = NULL, + .auto_connect = NULL, + .preferred_techs = NULL, + .fallback_nameservers = NULL, + .timeout_inputreq = DEFAULT_INPUT_REQUEST_TIMEOUT, + .timeout_browserlaunch = DEFAULT_BROWSER_LAUNCH_TIMEOUT, + .blacklisted_interfaces = NULL, }; static GKeyFile *load_config(const char *file) @@ -71,13 +85,82 @@ static GKeyFile *load_config(const char *file) return keyfile; } +static uint *parse_service_types(char **str_list, gsize len) +{ + unsigned int *type_list; + int i, j; + enum connman_service_type type; + + type_list = g_try_new0(unsigned int, len + 1); + if (type_list == NULL) + return NULL; + + i = 0; + j = 0; + while (str_list[i] != NULL) + { + type = __connman_service_string2type(str_list[i]); + + if (type != CONNMAN_SERVICE_TYPE_UNKNOWN) { + type_list[j] = type; + j += 1; + } + i += 1; + } + + return type_list; +} + +static char **parse_fallback_nameservers(char **nameservers, gsize len) +{ + char **servers; + int i, j; + + servers = g_try_new0(char *, len + 1); + if (servers == NULL) + return NULL; + + i = 0; + j = 0; + while (nameservers[i] != NULL) { + if (connman_inet_check_ipaddress(nameservers[i]) > 0) { + servers[j] = g_strdup(nameservers[i]); + j += 1; + } + i += 1; + } + + return servers; +} + static void parse_config(GKeyFile *config) { GError *error = NULL; gboolean boolean; - - if (config == NULL) + char **timeservers; + char **interfaces; + char **str_list; + gsize len; + static char *default_auto_connect[] = { + "wifi", + "ethernet", + "cellular", + NULL + }; + static char *default_blacklist[] = { + "vmnet", + "vboxnet", + "virbr", + NULL + }; + int timeout; + + if (config == NULL) { + connman_settings.auto_connect = + parse_service_types(default_auto_connect, 3); + connman_settings.blacklisted_interfaces = default_blacklist; return; + } DBG("parsing main.conf"); @@ -87,6 +170,73 @@ static void parse_config(GKeyFile *config) connman_settings.bg_scan = boolean; g_clear_error(&error); + + timeservers = g_key_file_get_string_list(config, "General", + "FallbackTimeservers", NULL, &error); + if (error == NULL) + connman_settings.pref_timeservers = timeservers; + + g_clear_error(&error); + + str_list = g_key_file_get_string_list(config, "General", + "DefaultAutoConnectTechnologies", &len, &error); + + if (error == NULL) + connman_settings.auto_connect = + parse_service_types(str_list, len); + else + connman_settings.auto_connect = + parse_service_types(default_auto_connect, 3); + + 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); + + timeout = g_key_file_get_integer(config, "General", + "InputRequestTimeout", &error); + if (error == NULL && timeout >= 0) + connman_settings.timeout_inputreq = timeout * 1000; + + g_clear_error(&error); + + timeout = g_key_file_get_integer(config, "General", + "BrowserLaunchTimeout", &error); + if (error == NULL && timeout >= 0) + connman_settings.timeout_browserlaunch = timeout * 1000; + + g_clear_error(&error); + + interfaces = g_key_file_get_string_list(config, "General", + "NetworkInterfaceBlacklist", &len, &error); + + if (error == NULL) + connman_settings.blacklisted_interfaces = interfaces; + else + connman_settings.blacklisted_interfaces = default_blacklist; + + g_clear_error(&error); } static GMainLoop *main_loop = NULL; @@ -237,6 +387,39 @@ connman_bool_t connman_setting_get_bool(const char *key) return FALSE; } +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; + + if (g_str_equal(key, "NetworkInterfaceBlacklist") == TRUE) + return connman_settings.blacklisted_interfaces; + + return NULL; +} + +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; +} + +unsigned int connman_timeout_input_request(void) { + return connman_settings.timeout_inputreq; +} + +unsigned int connman_timeout_browser_launch(void) { + return connman_settings.timeout_browserlaunch; +} + int main(int argc, char *argv[]) { GOptionContext *context; @@ -246,10 +429,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); @@ -325,8 +504,9 @@ int main(int argc, char *argv[]) __connman_dbus_init(conn); config = load_config(CONFIGDIR "/main.conf"); - parse_config(config); + if (config != NULL) + g_key_file_free(config); __connman_storage_migrate(); __connman_technology_init(); @@ -416,8 +596,12 @@ int main(int argc, char *argv[]) g_main_loop_unref(main_loop); - if (config) - g_key_file_free(config); + if (connman_settings.pref_timeservers != NULL) + 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);