Example #1
0
        public HostEditPage(HostsViewModel viewModel, HostModel editHost)
        {
            InitializeComponent();

            hostsModel  = viewModel;
            addedOrEdit = editHost == null;
            Item        = editHost ?? new HostModel()
            {
                SSLVerify = true
            };
            ShowDeleteBtn      = !addedOrEdit;
            EnableEditHostName = addedOrEdit;

            foreach (var h in Item.LoadBalance)
            {
                LoadBalance.Add(h);
            }

            BindingContext = this;
        }
Example #2
0
 public HostsPage()
 {
     InitializeComponent();
     BindingContext = viewModel = new HostsViewModel();
 }
Example #3
0
        public string PrepareConfig(HostsViewModel hosts, bool isLoadBalancePrepare = false)
        {
            string config     = ConfigTemplate;
            string appVersion = VersionTracking.CurrentVersion;

            string version_path = Path.Combine(
                App.Instance.DataPathParent,
                "version_" + appVersion);

            string gfwlist_path = Path.Combine(App.Instance.DataPathParent, "gfw_list");
            string cn_ips_path  = Path.Combine(App.Instance.DataPathParent, "cn_ips_list");
            string cert_path    = Path.Combine(App.Instance.DataPathParent, "cacert");

            if (!File.Exists(version_path))
            {
                File.WriteAllText(version_path, "TrojanPlus App Version: " + appVersion);

                File.WriteAllText(gfwlist_path, Resx.TextResource.gfwlist);
                File.WriteAllText(cn_ips_path, Resx.TextResource.cn_mainland_ips);
                File.WriteAllText(cert_path, Resx.TextResource.cacert);
            }

            config = config.Replace("${run_type}", "client_tun");
            config = config.Replace("${remote_addr}", HostAddress);
            config = config.Replace("${remote_port}", HostPort.ToString());
            config = config.Replace("${password}", Password);

            config = config.Replace("${udp_timeout}", "10");
            config = config.Replace("${udp_socket_buf}", "16384");
            config = config.Replace("${udp_recv_buf}", "4096");

            config = config.Replace("${log_level}", EnableDebugLog ? "0" : "5");

            config = config.Replace("${ssl.verify}", SSLVerify.ToLowerString());
            config = config.Replace("${ssl.verify_hostname}", SSLVerify.ToLowerString());
            config = config.Replace("${ssl.ssl_shutdown_wait_time}", "3");
            config = config.Replace("${ssl.sni}", HostAddress);
            config = config.Replace("${ssl.cert}", cert_path);

            config = config.Replace("${tcp.fast_open}", EnableTCPFastOpen ? "true" : "false");
            config = config.Replace("${tcp.connect_time_out}", "5");

            config = config.Replace("${experimental.pipeline_num}", EnablePipeline ? "5" : "0");
            config = config.Replace("${experimental.pipeline_ack_window}", "100");

            if (!isLoadBalancePrepare && LoadBalance.Count > 0)
            {
                StringBuilder sb = new StringBuilder();
                for (int i = 0; i < LoadBalance.Count; i++)
                {
                    var h = hosts.FindHostByName(LoadBalance[i]);
                    if (h != null && h.EnablePipeline)
                    {
                        string loadConfig = h.PrepareConfig(hosts, true);
                        string path       = Path.Combine(App.Instance.DataPathParent, "balance_config" + i);
                        File.WriteAllText(path, loadConfig);

                        if (sb.Length > 0)
                        {
                            sb.Append(",");
                        }

                        sb.Append($"\"{path}\"");
                    }
                }

                config = config.Replace("${experimental.pipeline_loadbalance_configs}", sb.ToString());
            }
            else
            {
                config = config.Replace("${experimental.pipeline_loadbalance_configs}", string.Empty);
                if (isLoadBalancePrepare)
                {
                    config = config.Replace("${tun.tun_fd}", "-1");
                }
            }

            config = config.Replace("${tun.net_ip}", TunNetIP);
            config = config.Replace("${tun.mtu}", TunMtu.ToString());

            config = config.Replace("${dns.udp_socket_buf}", "8192");
            config = config.Replace("${dns.udp_recv_buf}", "1024");

            config = config.Replace("${dns.up_dns_server}", UpStreamNS);
            config = config.Replace("${dns.up_gfw_dns_server}", GFWUpStreamNS);

            config = config.Replace("${dns.gfwlist}", gfwlist_path);
            config = config.Replace("${route.cn_mainland_ips_file}", cn_ips_path);
            config = config.Replace("${route.proxy_type}", ((int)Route).ToString());

            string proxy_ips_path = Path.Combine(App.Instance.DataPathParent, "proxy_ips");
            string white_ips_path = Path.Combine(App.Instance.DataPathParent, "white_ips");

            File.WriteAllText(proxy_ips_path, string.Empty);
            File.WriteAllText(white_ips_path, string.Empty);

            config = config.Replace("${route.proxy_ips}", proxy_ips_path);
            config = config.Replace("${route.white_ips}", white_ips_path);

            return(config);
        }
Example #4
0
 public ShellViewModel()
 {
     Hosts = new HostsViewModel();
 }