Example #1
0
        public void EnsureDefaults()
        {
            string NotInMan = "";             // Option not listed in 'man' documentation.

            SetDefaultBool("cli", false, Messages.ManOptionCli);
            SetDefaultBool("version", false, NotInMan);
            SetDefaultBool("version.short", false, NotInMan);
            SetDefaultBool("development", false, NotInMan);                                                 // If in development file structure
            SetDefaultBool("help", false, Messages.ManOptionHelp);
            SetDefault("help.format", "choice:text,bbcode,html,man", "text", Messages.ManOptionHelpFormat); // Maybe 'text' or 'bbcode' or 'html' or 'man'.
            SetDefaultBool("batch", false, NotInMan);                                                       // Don't lock interface, exit when connection is closed.
            SetDefault("login", "text", "", Messages.ManOptionLogin);
            SetDefault("password", "password", "", Messages.ManOptionPassword);
            SetDefaultBool("remember", false, Messages.ManOptionRemember);
            SetDefault("key", "text", "Default", Messages.ManOptionKey);
            SetDefault("server", "text", "", Messages.ManOptionServer);
            SetDefaultBool("connect", false, Messages.ManOptionConnect);
            SetDefaultBool("netlock", false, Messages.ManOptionNetLock);

            SetDefault("console.mode", "choice:none,batch,keys,backend,tcp", "keys", NotInMan);
            SetDefault("console.control.path", "text", "", NotInMan);

            SetDefault("profile", "text", "AirVPN.xml", Messages.ManOptionProfile); // Not in Settings
            SetDefault("path", "text", "", Messages.ManOptionPath);                 // Not in Settings // Path. Maybe a full path, or special values 'home' or 'program'.

            SetDefault("servers.last", "text", "", NotInMan, false);
            SetDefault("servers.whitelist", "text", "", Messages.ManOptionServersWhiteList);
            SetDefault("servers.blacklist", "text", "", Messages.ManOptionServersBlackList);
            SetDefaultBool("servers.startlast", false, Messages.ManOptionServersStartLast);
            SetDefaultBool("servers.locklast", false, Messages.ManOptionServersLockLast);
            SetDefault("servers.scoretype", "choice:Speed,Latency", "Speed", Messages.ManOptionServersScoreType);

            SetDefault("areas.whitelist", "text", "", Messages.ManOptionAreasWhiteList);
            SetDefault("areas.blacklist", "text", "", Messages.ManOptionAreasBlackList);

            //SetDefault("discover.ip_webservice.list", "text", "https://eddie.website/api/xml/{ip};https://ipleak.net/xml/{@ip};https://freegeoip.net/xml/{@ip};http://ip-api.com/xml/{@ip}", NotInMan);
            SetDefault("discover.ip_webservice.list", "text", "https://ipleak.net/xml/{@ip};https://freegeoip.net/xml/{@ip};http://ip-api.com/xml/{@ip}", NotInMan);
            SetDefaultBool("discover.ip_webservice.first", true, NotInMan);
            SetDefaultInt("discover.interval", 60 * 60 * 24, NotInMan);             // Delta between refresh discover data (country and other data) for OpenVPN connections.
            SetDefaultBool("discover.exit", true, NotInMan);

            SetDefaultBool("log.file.enabled", false, NotInMan);
            SetDefault("log.file.encoding", "encoding", "utf-8", NotInMan);
            SetDefault("log.file.path", "text", "logs/eddie_%y-%m-%d.log", NotInMan);
            SetDefaultBool("log.level.debug", false, NotInMan);
            SetDefaultBool("log.repeat", false, NotInMan);

            SetDefault("mode.protocol", "text", "AUTO", Messages.ManOptionModeProtocol);
            SetDefaultInt("mode.port", 443, Messages.ManOptionModePort);
            SetDefaultInt("mode.alt", 0, Messages.ManOptionModeAlt);

            SetDefault("proxy.mode", "text", "None", Messages.ManOptionProxyMode);
            SetDefault("proxy.when", "choice:always/web/openvpn/none", "always", NotInMan);
            SetDefault("proxy.host", "ip", "127.0.0.1", Messages.ManOptionProxyHost);
            SetDefaultInt("proxy.port", 8080, Messages.ManOptionProxyPort);
            SetDefault("proxy.auth", "text", "None", Messages.ManOptionProxyAuth);
            SetDefault("proxy.login", "text", "", Messages.ManOptionProxyLogin);
            SetDefault("proxy.password", "password", "", Messages.ManOptionProxyPassword);
            SetDefaultInt("proxy.tor.control.port", 9151, Messages.ManOptionProxyTorControlPort);
            SetDefaultBool("proxy.tor.control.auth", true, Messages.ManOptionProxyTorControlAuth);
            SetDefault("proxy.tor.control.cookie-path", "", "", NotInMan);
            SetDefault("proxy.tor.control.password", "password", "", Messages.ManOptionProxyTorControlPassword);

            SetDefault("routes.default", "choice:in,out", "in", Messages.ManOptionRoutesDefault);
            SetDefault("routes.custom", "text", "", Messages.ManOptionRoutesCustom);
            SetDefaultBool("routes.remove_default", false, Messages.ManOptionRoutesRemoveDefault);             // Will be probably deprecated, issues with DHCP renew.

            SetDefault("dns.mode", "text", "auto", Messages.ManOptionDnsMode);
            SetDefault("dns.servers", "text", "", Messages.ManOptionDnsServers);
            SetDefaultBool("dns.check", true, Messages.ManOptionDnsCheck);
            SetDefaultInt("dns.cache.ttl", 3600, NotInMan);

            SetDefault("netlock.mode", "text", "auto", Messages.ManOptionNetLockMode);
            SetDefaultBool("netlock.allow_private", true, Messages.ManOptionNetLockAllowPrivate);
            SetDefaultBool("netlock.allow_ping", true, Messages.ManOptionNetLockAllowPing);
            SetDefaultBool("netlock.allow_dns", false, Messages.ManOptionNetLockAllowDNS);
            SetDefault("netlock.allowed_ips", "text", "", Messages.ManOptionNetLockAllowedsIps);

            SetDefault("ipv6.mode", "text", "disable", Messages.ManOptionIpV6);

            SetDefault("protocol.ip.entry", "text", "ipv4-ipv6", NotInMan);             // ipv6-ipv4;ipv4-ipv6;ipv4-only;ipv6-only;
            SetDefault("protocol.ipv4.route", "choice:in-always,in-out,in-block,out,block", "in-block", NotInMan);
            SetDefault("protocol.ipv6.route", "choice:in-always,in-out,in-block,out,block", "in-block", NotInMan);

            SetDefault("tools.openvpn.path", "path_file", "", Messages.ManOptionToolsOpenVpnPath);
            SetDefault("tools.ssh.path", "path_file", "", Messages.ManOptionToolsSshPath);
            SetDefault("tools.ssl.path", "path_file", "", Messages.ManOptionToolsSslPath);
            SetDefault("tools.curl.path", "path_file", "", Messages.ManOptionToolsCurlPath);

            SetDefaultInt("tools.curl.max-time", 30, NotInMan);

            SetDefault("openvpn.custom", "text", "", Messages.ManOptionOpenVpnCustom);
            SetDefault("openvpn.dev_node", "text", "", Messages.ManOptionOpenVpnDevNode);
            SetDefaultInt("openvpn.sndbuf", -2, Messages.ManOptionOpenVpnSndBuf);             // 2.11
            SetDefaultInt("openvpn.rcvbuf", -2, Messages.ManOptionOpenVpnRcvBuf);             // 2.11
            SetDefault("openvpn.directives", "text", "client\r\ndev tun\r\nauth-nocache\r\nresolv-retry infinite\r\nnobind\r\npersist-key\r\npersist-tun\r\nverb 3\r\nconnect-retry-max 1\r\nping 10\r\nping-exit 32\r\nexplicit-exit-notify 5", Messages.ManOptionOpenVpnDirectives);
            SetDefault("openvpn.directives.path", "path_file", "", NotInMan);
            SetDefaultBool("openvpn.skip_defaults", false, Messages.ManOptionOpenVpnSkipDefaults);

            // Not in Settings
            SetDefaultInt("openvpn.management_port", 3100, Messages.ManOptionOpenVpnManagementPort);
            SetDefaultInt("ssh.port", 0, Messages.ManOptionSshPort);
            SetDefaultInt("ssl.port", 0, Messages.ManOptionSslPort);
            SetDefault("ssl.options", "text", "", NotInMan);             // "NO_SSLv2" < 2.11.10
            SetDefaultInt("ssl.verify", -1, NotInMan);

            SetDefaultBool("os.single_instance", true, Messages.ManOptionOsSingleInstance);

            bool webui = (WebServer.GetPath() != "");              // WebUI it's a Eddie 3.* feature not yet committed on GitHub.

            SetDefaultBool("webui.enabled", webui, NotInMan);      // Messages.ManOptionWebUiEnabled
            SetDefault("webui.ip", "text", "localhost", NotInMan); // Messages.ManOptionWebUiAddress
            SetDefaultInt("webui.port", 4649, NotInMan);           // Messages.ManOptionWebUiPort

            SetDefaultBool("tcpserver.enabled", webui, NotInMan);
            SetDefault("tcpserver.ip", "text", "localhost", NotInMan);
            SetDefaultInt("tcpserver.port", Constants.DefaultTcpPort, NotInMan);

            SetDefaultBool("advanced.expert", false, Messages.ManOptionAdvancedExpert);
            SetDefaultBool("advanced.check.route", true, Messages.ManOptionAdvancedCheckRoute);

            SetDefaultInt("advanced.penality_on_error", 30, NotInMan);

            SetDefaultBool("pinger.enabled", true, Messages.ManOptionAdvancedPingerEnabled);
            SetDefaultInt("pinger.delay", 0, Messages.ManOptionAdvancedPingerDelay);
            SetDefaultInt("pinger.retry", 0, Messages.ManOptionAdvancedPingerRetry);
            SetDefaultInt("pinger.jobs", 10, Messages.ManOptionAdvancedPingerJobs);
            SetDefaultInt("pinger.valid", 0, Messages.ManOptionAdvancedPingerValid);

            SetDefaultInt("advanced.manifest.refresh", -1, NotInMan);
            SetDefaultBool("advanced.providers", false, NotInMan);

            SetDefaultBool("advanced.skip_privileges", false, NotInMan);      // Skip 'root' detection.
            SetDefaultBool("advanced.skip_tun_detect", false, NotInMan);      // Skip TUN driver detection.
            SetDefaultBool("advanced.skip_alreadyrun", false, NotInMan);      // Continue even if openvpn is already running.
            SetDefaultBool("connections.allow_anyway", false, NotInMan);      // Allow connection even if in 'Not available' status.
            SetDefaultBool("advanced.testonly", false, NotInMan);             // Disconnect when connection occur.


            EnsureDefaultsEvent("app.start");
            EnsureDefaultsEvent("app.stop");
            EnsureDefaultsEvent("session.start");
            EnsureDefaultsEvent("session.stop");
            EnsureDefaultsEvent("vpn.pre");
            EnsureDefaultsEvent("vpn.up");
            EnsureDefaultsEvent("vpn.down");

            // Windows only
            SetDefault("windows.adapter_service", "text", "tap0901", Messages.ManOptionWindowsAdapterService);
            SetDefaultBool("windows.disable_driver_upgrade", false, Messages.ManOptionWindowsDisableDriverUpgrade);
            SetDefaultBool("windows.tap_up", true, Messages.ManOptionWindowsTapUp);
            SetDefaultBool("windows.dhcp_disable", false, Messages.ManOptionWindowsDhcpDisable);
            SetDefaultBool("windows.wfp.enable", true, Messages.ManOptionWindowsWfp);
            SetDefaultBool("windows.wfp.dynamic", false, Messages.ManOptionWindowsWfpDynamic);
            SetDefaultBool("windows.ipv6.os_disable", false, Messages.ManOptionWindowsIPv6DisableAtOs);                // Must be default FALSE if WFP works well
            SetDefaultBool("windows.dns.force_all_interfaces", false, Messages.ManOptionWindowsDnsForceAllInterfaces); // Important: With WFP can be false, but users report DNS leak. Maybe not a real DNS Leak, simply request on DNS of other interfaces through VPN tunnel.
            SetDefaultBool("windows.dns.lock", true, Messages.ManOptionWindowsDnsLock);
            SetDefaultInt("windows.metrics.tap.ipv4", -2, NotInMan);                                                   // 2.13:   0: Windows Automatic, >0 value, -1: Don't change, -2: Automatic
            SetDefaultInt("windows.metrics.tap.ipv6", -2, NotInMan);                                                   // 2.13:   0: Windows Automatic, >0 value, -1: Don't change, -2: Automatic
            SetDefaultBool("windows.workarounds", false, NotInMan);                                                    // If true, some variants to identify issues

            // General UI
            SetDefault("ui.unit", "text", "", Messages.ManOptionUiUnit);
            SetDefaultBool("ui.iec", false, Messages.ManOptionUiIEC);

            // GUI only
            SetDefaultBool("gui.exit_confirm", true, NotInMan, false);
            SetDefault("gui.skin", "text", "Light", NotInMan, false);
            SetDefaultBool("gui.tos", false, NotInMan, false);
            SetDefault("gui.font.normal.name", "text", "", NotInMan);
            SetDefaultFloat("gui.font.normal.size", 0, NotInMan);
            SetDefaultInt("gui.log_limit", 1000, NotInMan);
            SetDefault("gui.window.main", "text", "", NotInMan, false);
            SetDefault("gui.list.servers", "text", "", NotInMan, false);
            SetDefault("gui.list.areas", "text", "", NotInMan, false);
            SetDefault("gui.list.logs", "text", "", NotInMan, false);

            // GUI - Windows only
            SetDefaultBool("gui.windows.start_minimized", false, NotInMan);
            SetDefaultBool("gui.windows.tray", true, NotInMan);
            SetDefaultBool("gui.windows.notifications", true, NotInMan);

            // GUI - OSX Only
            SetDefaultBool("gui.osx.notifications", false, NotInMan);
            // SetDefaultBool("gui.osx.dock", false, NotInMan); // See this FAQ: https://airvpn.org/topic/13331-its-possible-to-hide-the-icon-in-dock-bar-under-os-x/
            SetDefaultBool("gui.osx.visible", false, NotInMan);
            SetDefault("gui.osx.style", "text", "light", NotInMan);
            SetDefaultBool("gui.osx.sysbar.show_info", false, NotInMan);
            SetDefaultBool("gui.osx.sysbar.show_speed", false, NotInMan);
            SetDefaultBool("gui.osx.sysbar.show_server", false, NotInMan);

            // TODO: we need to test params with space in different linux platform, with focus on escaping gksu/kdesu shell to obtain elevated privileges
            SetDefault("paramtest", "text", "", NotInMan, false);



            // Command-line only
            Options["cli"].CommandLineOnly         = true;
            Options["help"].CommandLineOnly        = true;
            Options["help.format"].CommandLineOnly = true;

            // Internal only
            Options["gui.window.main"].InternalOnly  = true;
            Options["gui.list.servers"].InternalOnly = true;
            Options["gui.list.areas"].InternalOnly   = true;
            Options["gui.list.logs"].InternalOnly    = true;

            // Omissis
            Options["login"].Omissis                      = true;
            Options["password"].Omissis                   = true;
            Options["key"].Omissis                        = true;
            Options["proxy.login"].Omissis                = true;
            Options["proxy.password"].Omissis             = true;
            Options["proxy.tor.control.password"].Omissis = true;

            // Don't clean with user Reset All
            Options["login"].DontUserReset    = true;
            Options["password"].DontUserReset = true;
            Options["remember"].DontUserReset = true;
            Options["key"].DontUserReset      = true;

            // Exceptions
            // TOFIX: Some users report a stuck in 'Checking environment' phase on macOS only, Eddie 2.13.4 and above.
            if (Platform.Instance.GetCode() == "MacOS")
            {
                Options["advanced.skip_alreadyrun"].Default = "True";
            }
        }
Example #2
0
        public void EnsureDefaults()
        {
            string NotInMan = "";             // Option not listed in 'man' documentation.

            SetDefaultBool("cli", false, Messages.ManOptionCli);
            SetDefaultBool("help", false, Messages.ManOptionHelp);
            SetDefault("help_format", "choice:text,bbcode,html,man", "text", Messages.ManOptionHelpFormat); // Maybe 'text' or 'bbcode' or 'html' or 'man'.
            SetDefaultBool("batch", false, NotInMan);                                                       // Don't lock interface, exit when connection is closed.
            SetDefault("login", "text", "", Messages.ManOptionLogin);
            SetDefault("password", "password", "", Messages.ManOptionPassword);
            SetDefaultBool("remember", false, Messages.ManOptionRemember);
            SetDefault("key", "text", "Default", Messages.ManOptionKey);
            SetDefault("server", "text", "", Messages.ManOptionServer);
            SetDefaultBool("connect", false, Messages.ManOptionConnect);
            SetDefaultBool("netlock", false, Messages.ManOptionNetLock);

            SetDefault("profile", "text", "AirVPN", Messages.ManOptionProfile); // Not in Settings
            SetDefault("path", "text", "", Messages.ManOptionPath);             // Not in Settings // Path. Maybe a full path, or special values 'home' or 'program'.

            SetDefault("servers.last", "text", "", NotInMan, false);
            SetDefault("servers.whitelist", "text", "", Messages.ManOptionServersWhiteList);
            SetDefault("servers.blacklist", "text", "", Messages.ManOptionServersBlackList);
            SetDefaultBool("servers.startlast", false, Messages.ManOptionServersStartLast);
            SetDefaultBool("servers.locklast", false, Messages.ManOptionServersLockLast);
            SetDefault("servers.scoretype", "choice:Speed,Latency", "Speed", Messages.ManOptionServersScoreType);

            SetDefault("areas.whitelist", "text", "", Messages.ManOptionAreasWhiteList);
            SetDefault("areas.blacklist", "text", "", Messages.ManOptionAreasBlackList);

            SetDefault("discover.ip_webservice.list", "text", "https://ipleak.net/xml/{@ip};https://freegeoip.net/xml/{@ip};http://ip-api.com/xml/{@ip}", NotInMan);
            SetDefaultBool("discover.ip_webservice.first", true, NotInMan);

            SetDefaultBool("log.file.enabled", false, NotInMan);
            SetDefault("log.file.path", "text", "logs/eddie_%y-%m-%d.log", NotInMan);
            SetDefaultBool("log.level.debug", false, NotInMan);

            SetDefault("mode.protocol", "text", "AUTO", Messages.ManOptionModeProtocol);
            SetDefaultInt("mode.port", 443, Messages.ManOptionModePort);
            SetDefaultInt("mode.alt", 0, Messages.ManOptionModeAlt);

            SetDefault("proxy.mode", "text", "None", Messages.ManOptionProxyMode);
            SetDefault("proxy.host", "ip", "127.0.0.1", Messages.ManOptionProxyHost);
            SetDefaultInt("proxy.port", 8080, Messages.ManOptionProxyPort);
            SetDefault("proxy.auth", "text", "None", Messages.ManOptionProxyAuth);
            SetDefault("proxy.login", "text", "", Messages.ManOptionProxyLogin);
            SetDefault("proxy.password", "password", "", Messages.ManOptionProxyPassword);
            SetDefaultInt("proxy.tor.control.port", 9151, Messages.ManOptionProxyTorControlPort);
            SetDefaultBool("proxy.tor.control.auth", true, Messages.ManOptionProxyTorControlAuth);
            SetDefault("proxy.tor.control.password", "password", "", Messages.ManOptionProxyTorControlPassword);

            SetDefault("routes.default", "choice:in,out", "in", Messages.ManOptionRoutesDefault);
            SetDefault("routes.custom", "text", "", Messages.ManOptionRoutesCustom);
            SetDefaultBool("routes.remove_default", false, Messages.ManOptionRoutesRemoveDefault);             // Will be probably deprecated, issues with DHCP renew.

            SetDefault("dns.mode", "text", "auto", Messages.ManOptionDnsMode);
            SetDefault("dns.servers", "text", "", Messages.ManOptionDnsServers);
            SetDefaultBool("dns.check", true, Messages.ManOptionDnsCheck);

            SetDefault("netlock.mode", "text", "auto", Messages.ManOptionNetLockMode);
            SetDefaultBool("netlock.allow_private", true, Messages.ManOptionNetLockAllowPrivate);
            SetDefaultBool("netlock.allow_ping", true, Messages.ManOptionNetLockAllowPing);
            SetDefault("netlock.allowed_ips", "text", "", Messages.ManOptionNetLockAllowedsIps);

            SetDefault("ipv6.mode", "text", "disable", Messages.ManOptionIpV6);

            SetDefault("executables.openvpn", "path_file", "", Messages.ManOptionExecutablesOpenVpn);
            SetDefault("executables.ssh", "path_file", "", Messages.ManOptionExecutablesSsh);
            SetDefault("executables.ssl", "path_file", "", Messages.ManOptionExecutablesSsl);
            SetDefault("executables.curl", "path_file", "", Messages.ManOptionExecutablesCurl);

            SetDefault("openvpn.custom", "text", "", Messages.ManOptionOpenVpnCustom);
            SetDefault("openvpn.dev_node", "text", "", Messages.ManOptionOpenVpnDevNode);
            SetDefaultInt("openvpn.sndbuf", -2, Messages.ManOptionOpenVpnSndBuf); // 2.11
            SetDefaultInt("openvpn.rcvbuf", -2, Messages.ManOptionOpenVpnRcvBuf); // 2.11
            SetDefault("openvpn.directives", "text", "client\r\ndev tun\r\nresolv-retry infinite\r\nnobind\r\npersist-key\r\npersist-tun\r\nverb 3\r\nconnect-retry-max 1\r\nping 10\r\nping-exit 32\r\nexplicit-exit-notify 5", Messages.ManOptionOpenVpnDirectives);
            SetDefaultBool("openvpn.skip_defaults", false, Messages.ManOptionOpenVpnSkipDefaults);

            // Not in Settings
            SetDefaultInt("openvpn.management_port", 3100, Messages.ManOptionOpenVpnManagementPort);
            SetDefaultInt("ssh.port", 0, Messages.ManOptionSshPort);
            SetDefaultInt("ssl.port", 0, Messages.ManOptionSslPort);

            SetDefaultBool("os.single_instance", true, Messages.ManOptionOsSingleInstance);

            if (WebServer.GetPath() != "")
            {
                SetDefaultBool("webui.enabled", true, Messages.ManOptionWebUiEnabled);
                SetDefault("webui.ip", "text", "localhost", Messages.ManOptionWebUiAddress);
                SetDefaultInt("webui.port", 4649, Messages.ManOptionWebUiPort);
            }

            SetDefaultBool("advanced.expert", false, Messages.ManOptionAdvancedExpert);
            SetDefaultBool("advanced.check.route", true, Messages.ManOptionAdvancedCheckRoute);

            SetDefaultInt("advanced.penality_on_error", 30, NotInMan);

            SetDefaultBool("pinger.enabled", true, Messages.ManOptionAdvancedPingerEnabled);
            SetDefaultInt("pinger.delay", 0, Messages.ManOptionAdvancedPingerDelay);
            SetDefaultInt("pinger.retry", 0, Messages.ManOptionAdvancedPingerRetry);
            SetDefaultInt("pinger.jobs", 10, Messages.ManOptionAdvancedPingerJobs);
            SetDefaultInt("pinger.valid", 0, Messages.ManOptionAdvancedPingerValid);

            SetDefaultInt("advanced.manifest.refresh", -1, NotInMan);

            SetDefaultBool("advanced.skip_privileges", false, NotInMan); // Skip 'root' detection.
            SetDefaultBool("advanced.skip_tun_detect", false, NotInMan); // Skip TUN driver detection.
            SetDefaultBool("advanced.skip_alreadyrun", false, NotInMan); // Continue even if openvpn is already running.
            SetDefaultBool("servers.allow_anyway", false, NotInMan);     // Allow connection to server in 'Closed' status
            SetDefaultBool("advanced.testonly", false, NotInMan);        // Disconnect when connection occur.


            EnsureDefaultsEvent("app.start");
            EnsureDefaultsEvent("app.stop");
            EnsureDefaultsEvent("session.start");
            EnsureDefaultsEvent("session.stop");
            EnsureDefaultsEvent("vpn.pre");
            EnsureDefaultsEvent("vpn.up");
            EnsureDefaultsEvent("vpn.down");

            // Windows only
            SetDefault("windows.adapter_service", "text", "tap0901", Messages.ManOptionWindowsAdapterService);
            SetDefaultBool("windows.disable_driver_upgrade", false, Messages.ManOptionWindowsDisableDriverUpgrade);
            SetDefaultBool("windows.tap_up", true, Messages.ManOptionWindowsTapUp);
            SetDefaultBool("windows.dhcp_disable", false, Messages.ManOptionWindowsDhcpDisable);
            SetDefaultBool("windows.wfp", true, Messages.ManOptionWindowsWfp);
            SetDefaultBool("windows.wfp.dynamic", false, Messages.ManOptionWindowsWfpDynamic);
            SetDefaultBool("windows.ipv6.os_disable", false, Messages.ManOptionWindowsIPv6DisableAtOs);               // Must be default FALSE if WFP works well
            SetDefaultBool("windows.dns.force_all_interfaces", true, Messages.ManOptionWindowsDnsForceAllInterfaces); // Important: With WFP can be false, but users report DNS leak. Maybe not a real DNS Leak, simply request on DNS of other interfaces through VPN tunnel.
            SetDefaultBool("windows.dns.lock", true, Messages.ManOptionWindowsDnsLock);

            // General UI
            SetDefault("ui.unit", "text", "", Messages.ManOptionUiUnit);

            // GUI only
            SetDefaultBool("gui.exit_confirm", true, NotInMan, false);
            SetDefault("gui.skin", "text", "Light", NotInMan, false);
            SetDefaultBool("gui.tos", false, NotInMan, false);
            SetDefault("gui.font.normal.name", "text", "", NotInMan);
            SetDefaultFloat("gui.font.normal.size", 0, NotInMan);
            SetDefaultInt("gui.log_limit", 1000, NotInMan);
            SetDefault("gui.window.main", "text", "", NotInMan, false);
            SetDefault("gui.list.servers", "text", "", NotInMan, false);
            SetDefault("gui.list.areas", "text", "", NotInMan, false);
            SetDefault("gui.list.logs", "text", "", NotInMan, false);

            // GUI - Windows only
            SetDefaultBool("gui.windows.start_minimized", false, NotInMan);
            SetDefaultBool("gui.windows.tray", true, NotInMan);
            SetDefaultBool("gui.windows.notifications", true, NotInMan);

            // GUI - OSX Only
            SetDefaultBool("gui.osx.notifications", false, NotInMan);
            // SetDefaultBool("gui.osx.dock", false, NotInMan); // See this FAQ: https://airvpn.org/topic/13331-its-possible-to-hide-the-icon-in-dock-bar-under-os-x/
            SetDefaultBool("gui.osx.visible", false, NotInMan);
            SetDefault("gui.osx.style", "text", "light", NotInMan);
            SetDefaultBool("gui.osx.sysbar.show_info", false, NotInMan);
            SetDefaultBool("gui.osx.sysbar.show_speed", false, NotInMan);
            SetDefaultBool("gui.osx.sysbar.show_server", false, NotInMan);

            // TODO: we need to test params with space in different linux platform, with focus on escaping gksu/kdesu shell to obtain elevated privileges
            SetDefault("paramtest", "text", "", NotInMan, false);



            // Command-line only?
            Options["cli"].CommandLineOnly         = true;
            Options["help"].CommandLineOnly        = true;
            Options["help_format"].CommandLineOnly = true;

            // Internal only?
            Options["gui.window.main"].InternalOnly  = true;
            Options["gui.list.servers"].InternalOnly = true;
            Options["gui.list.areas"].InternalOnly   = true;
            Options["gui.list.logs"].InternalOnly    = true;

            // Don't clean with user Reset All
            Options["login"].DontUserReset    = true;
            Options["password"].DontUserReset = true;
            Options["remember"].DontUserReset = true;
            Options["key"].DontUserReset      = true;
        }