storage: Remove support for loading services from default.profile
[framework/connectivity/connman.git] / src / main.c
index 354734d..48a956c 100644 (file)
@@ -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
 #include <getopt.h>
 #include <sys/stat.h>
 #include <net/if.h>
+#include <netdb.h>
 
 #include <gdbus.h>
 
-#ifdef HAVE_CAPNG
-#include <cap-ng.h>
-#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);