Remove Profile Build Dependency (1/2): do it at runtime
[platform/upstream/connman.git] / src / main.c
old mode 100644 (file)
new mode 100755 (executable)
index 1c17991..28e3edb
@@ -30,6 +30,8 @@
 #include <string.h>
 #include <signal.h>
 #include <sys/signalfd.h>
+#include <sys/types.h>
+#include <sys/resource.h>
 #include <getopt.h>
 #include <sys/stat.h>
 #include <net/if.h>
@@ -73,6 +75,11 @@ static struct {
        bool single_tech;
        char **tethering_technologies;
        bool persistent_tethering_mode;
+       bool enable_6to4;
+#if defined TIZEN_EXT
+       char **cellular_interfaces;
+       bool tizen_tv_extension;
+#endif
 } connman_settings  = {
        .bg_scan = true,
        .pref_timeservers = NULL,
@@ -86,6 +93,11 @@ static struct {
        .single_tech = false,
        .tethering_technologies = NULL,
        .persistent_tethering_mode = false,
+       .enable_6to4 = false,
+#if defined TIZEN_EXT
+       .cellular_interfaces = NULL,
+       .tizen_tv_extension = false,
+#endif
 };
 
 #define CONF_BG_SCAN                    "BackgroundScanning"
@@ -100,6 +112,11 @@ static struct {
 #define CONF_SINGLE_TECH                "SingleConnectedTechnology"
 #define CONF_TETHERING_TECHNOLOGIES      "TetheringTechnologies"
 #define CONF_PERSISTENT_TETHERING_MODE  "PersistentTetheringMode"
+#define CONF_ENABLE_6TO4                "Enable6to4"
+#if defined TIZEN_EXT
+#define CONF_CELLULAR_INTERFACE         "NetworkCellularInterfaceList"
+#define CONF_TIZEN_TV_EXT              "TizenTVExtension"
+#endif
 
 static const char *supported_options[] = {
        CONF_BG_SCAN,
@@ -114,6 +131,11 @@ static const char *supported_options[] = {
        CONF_SINGLE_TECH,
        CONF_TETHERING_TECHNOLOGIES,
        CONF_PERSISTENT_TETHERING_MODE,
+       CONF_ENABLE_6TO4,
+#if defined TIZEN_EXT
+       CONF_CELLULAR_INTERFACE,
+       CONF_TIZEN_TV_EXT,
+#endif
        NULL
 };
 
@@ -228,6 +250,46 @@ static void check_config(GKeyFile *config)
        g_strfreev(keys);
 }
 
+#if defined TIZEN_EXT
+static void check_Tizen_configuration(GKeyFile *config)
+{
+       GError *error = NULL;
+       char **cellular_interfaces;
+       bool boolean;
+       gsize len;
+
+       cellular_interfaces = g_key_file_get_string_list(config, "General",
+                       CONF_CELLULAR_INTERFACE, &len, &error);
+
+       if (error == NULL)
+               connman_settings.cellular_interfaces = cellular_interfaces;
+
+       g_clear_error(&error);
+
+       boolean = __connman_config_get_bool(config, "General",
+                       CONF_TIZEN_TV_EXT, &error);
+       if (!error)
+               connman_settings.tizen_tv_extension = boolean;
+
+       g_clear_error(&error);
+}
+
+static void set_nofile_inc(void)
+{
+       int err;
+       struct rlimit rlim;
+
+       rlim.rlim_cur = 8192;
+       rlim.rlim_max = 8192;
+
+       err = setrlimit(RLIMIT_NOFILE, &rlim);
+       if (err)
+               DBG("fail to increase FILENO err(%d)", err);
+
+       return;
+}
+#endif
+
 static void parse_config(GKeyFile *config)
 {
        GError *error = NULL;
@@ -354,12 +416,26 @@ static void parse_config(GKeyFile *config)
                connman_settings.persistent_tethering_mode = boolean;
 
        g_clear_error(&error);
+
+       boolean = __connman_config_get_bool(config, "General",
+                                       CONF_ENABLE_6TO4, &error);
+       if (!error)
+               connman_settings.enable_6to4 = boolean;
+
+       g_clear_error(&error);
+
+#if defined TIZEN_EXT
+       check_Tizen_configuration(config);
+#endif
 }
 
 static int config_init(const char *file)
 {
        GKeyFile *config;
 
+#if defined TIZEN_EXT
+       set_nofile_inc();
+#endif
        config = load_config(file);
        check_config(config);
        parse_config(config);
@@ -528,6 +604,9 @@ bool connman_setting_get_bool(const char *key)
        if (g_str_equal(key, CONF_PERSISTENT_TETHERING_MODE))
                return connman_settings.persistent_tethering_mode;
 
+       if (g_str_equal(key, CONF_ENABLE_6TO4))
+               return connman_settings.enable_6to4;
+
        return false;
 }
 
@@ -545,6 +624,11 @@ char **connman_setting_get_string_list(const char *key)
        if (g_str_equal(key, CONF_TETHERING_TECHNOLOGIES))
                return connman_settings.tethering_technologies;
 
+#if defined TIZEN_EXT
+       if (g_str_equal(key, CONF_CELLULAR_INTERFACE))
+               return connman_settings.cellular_interfaces;
+#endif
+
        return NULL;
 }
 
@@ -679,7 +763,9 @@ int main(int argc, char *argv[])
        __connman_dhcpv6_init();
        __connman_wpad_init();
        __connman_wispr_init();
+#if !defined TIZEN_EXT
        __connman_rfkill_init();
+#endif
        __connman_machine_init();
 
        g_free(option_config);
@@ -693,7 +779,9 @@ int main(int argc, char *argv[])
        g_source_remove(signal);
 
        __connman_machine_cleanup();
+#if !defined TIZEN_EXT
        __connman_rfkill_cleanup();
+#endif
        __connman_wispr_cleanup();
        __connman_wpad_cleanup();
        __connman_dhcpv6_cleanup();