From 2615b72cee86f4603bbd102798f070bdab1f01df Mon Sep 17 00:00:00 2001 From: Mozi <29089388+pzhlkj6612@users.noreply.github.com> Date: Sat, 6 Jun 2020 12:09:04 +0800 Subject: [PATCH 01/54] Run `v2rayUpgrade.exe` in the same folder as `v2rayN.exe` --- v2rayN/v2rayN/Forms/MainForm.cs | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/v2rayN/v2rayN/Forms/MainForm.cs b/v2rayN/v2rayN/Forms/MainForm.cs index bf61cc5b..3ca10813 100644 --- a/v2rayN/v2rayN/Forms/MainForm.cs +++ b/v2rayN/v2rayN/Forms/MainForm.cs @@ -1298,7 +1298,16 @@ namespace v2rayN.Forms try { string fileName = Utils.GetPath(downloadHandle.DownloadFileName); - Process process = Process.Start("v2rayUpgrade.exe", "\"" + fileName + "\""); + Process process = new Process + { + StartInfo = new ProcessStartInfo + { + FileName = "v2rayUpgrade.exe", + Arguments = "\"" + fileName + "\"", + WorkingDirectory = Utils.StartupPath() + } + }; + process.Start(); if (process.Id > 0) { menuExit_Click(null, null); From 4f39f7a93256c58f8bf9e7d24f9d302042164049 Mon Sep 17 00:00:00 2001 From: Mozi <29089388+pzhlkj6612@users.noreply.github.com> Date: Mon, 8 Jun 2020 15:33:22 +0800 Subject: [PATCH 02/54] Properly parse shadowsocks URL 1. Parse the URL containing "colon" or "at sign" in the password. 2. Check the empty fields in the URL. --- v2rayN/v2rayN/Handler/V2rayConfigHandler.cs | 42 ++++++++++++++++----- 1 file changed, 32 insertions(+), 10 deletions(-) diff --git a/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs b/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs index 9ea93933..b3f25e06 100644 --- a/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs +++ b/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs @@ -1266,22 +1266,44 @@ namespace v2rayN.Handler result = Utils.Base64Decode(result); } - string[] arr1 = result.Split('@'); - if (arr1.Length != 2) + //密码中可能包含“@”,所以从后往前搜索 + int indexAddressAndPort = result.LastIndexOf("@"); + if (indexAddressAndPort < 0) { return null; } - string[] arr21 = arr1[0].Split(':'); - //string[] arr22 = arr1[1].Split(':'); - int indexPort = arr1[1].LastIndexOf(":"); - if (arr21.Length != 2 || indexPort < 0) + string addressAndPort = result.Substring(indexAddressAndPort + 1); + string securityAndId = result.Substring(0, indexAddressAndPort); + + //IPv6地址中包含“:”,所以从后往前搜索 + int indexPort = addressAndPort.LastIndexOf(":"); + if (indexPort < 0) { return null; } - vmessItem.address = arr1[1].Substring(0, indexPort); - vmessItem.port = Utils.ToInt(arr1[1].Substring(indexPort + 1, arr1[1].Length - (indexPort + 1))); - vmessItem.security = arr21[0]; - vmessItem.id = arr21[1]; + + //加密方式中不包含“:”,所以从前往后搜索 + int indexId = securityAndId.IndexOf(":"); + if (indexId < 0) + { + return null; + } + + string address = addressAndPort.Substring(0, indexPort); + string port = addressAndPort.Substring(indexPort + 1); + string security = securityAndId.Substring(0, indexId); + string id = securityAndId.Substring(indexId + 1); + + //所有字段均不能为空 + if (address.Length == 0 || port.Length == 0 || security.Length == 0 || id.Length == 0) + { + return null; + } + + vmessItem.address = address; + vmessItem.port = Utils.ToInt(port); + vmessItem.security = security; + vmessItem.id = id; } else if (result.StartsWith(Global.socksProtocol)) { From 088d2e68340b2859eba1d807f90fe968e3eb7d24 Mon Sep 17 00:00:00 2001 From: 2dust <31833384+2dust@users.noreply.github.com> Date: Tue, 30 Jun 2020 16:41:31 +0800 Subject: [PATCH 03/54] Update SpeedtestHandler.cs --- v2rayN/v2rayN/Handler/SpeedtestHandler.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/v2rayN/v2rayN/Handler/SpeedtestHandler.cs b/v2rayN/v2rayN/Handler/SpeedtestHandler.cs index d8556722..91523091 100644 --- a/v2rayN/v2rayN/Handler/SpeedtestHandler.cs +++ b/v2rayN/v2rayN/Handler/SpeedtestHandler.cs @@ -190,7 +190,7 @@ namespace v2rayN.Handler _updateFunc(testCounter, args.GetException().Message); }; - var timeout = 12; + var timeout = 10; foreach (int itemIndex in _selecteds) { if (itemIndex >= _config.vmess.Count) From 93b8dec63e3854155ca2b49880ef709c01439710 Mon Sep 17 00:00:00 2001 From: Student Main Date: Sun, 19 Jul 2020 20:05:00 +0800 Subject: [PATCH 04/54] ctrl cv sswindows --- v2rayN/v2rayN/Handler/V2rayConfigHandler.cs | 169 ++++++++++++-------- v2rayN/v2rayN/v2rayN.csproj | 1 + 2 files changed, 106 insertions(+), 64 deletions(-) diff --git a/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs b/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs index b3f25e06..45422941 100644 --- a/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs +++ b/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs @@ -1,8 +1,12 @@ using System; using System.Collections.Generic; +using System.Collections.Specialized; using System.IO; using System.Linq; using System.Net; +using System.Text; +using System.Text.RegularExpressions; +using System.Web; using v2rayN.Base; using v2rayN.Mode; @@ -392,7 +396,7 @@ namespace v2rayN.Handler outbound.mux.enabled = false; outbound.mux.concurrency = -1; - + outbound.protocol = "shadowsocks"; outbound.settings.vnext = null; @@ -454,7 +458,7 @@ namespace v2rayN.Handler { //远程服务器底层传输配置 streamSettings.network = config.network(); - string host = config.requestHost(); + string host = config.requestHost(); //if tls if (config.streamSecurity() == Global.StreamSecurity) { @@ -1242,68 +1246,21 @@ namespace v2rayN.Handler { msg = UIRes.I18N("ConfigurationFormatIncorrect"); + vmessItem = ResolveSSLegacy(result); + if (vmessItem == null) + { + vmessItem = ResolveSip002(result); + } + if (vmessItem == null) + { + return null; + } + if (vmessItem.address.Length == 0 || vmessItem.port == 0 || vmessItem.security.Length == 0 || vmessItem.id.Length == 0) + { + return null; + } + vmessItem.configType = (int)EConfigType.Shadowsocks; - result = result.Substring(Global.ssProtocol.Length); - //remark - int indexRemark = result.IndexOf("#"); - if (indexRemark > 0) - { - try - { - vmessItem.remarks = WebUtility.UrlDecode(result.Substring(indexRemark + 1, result.Length - indexRemark - 1)); - } - catch { } - result = result.Substring(0, indexRemark); - } - //part decode - int indexS = result.IndexOf("@"); - if (indexS > 0) - { - result = Utils.Base64Decode(result.Substring(0, indexS)) + result.Substring(indexS, result.Length - indexS); - } - else - { - result = Utils.Base64Decode(result); - } - - //密码中可能包含“@”,所以从后往前搜索 - int indexAddressAndPort = result.LastIndexOf("@"); - if (indexAddressAndPort < 0) - { - return null; - } - string addressAndPort = result.Substring(indexAddressAndPort + 1); - string securityAndId = result.Substring(0, indexAddressAndPort); - - //IPv6地址中包含“:”,所以从后往前搜索 - int indexPort = addressAndPort.LastIndexOf(":"); - if (indexPort < 0) - { - return null; - } - - //加密方式中不包含“:”,所以从前往后搜索 - int indexId = securityAndId.IndexOf(":"); - if (indexId < 0) - { - return null; - } - - string address = addressAndPort.Substring(0, indexPort); - string port = addressAndPort.Substring(indexPort + 1); - string security = securityAndId.Substring(0, indexId); - string id = securityAndId.Substring(indexId + 1); - - //所有字段均不能为空 - if (address.Length == 0 || port.Length == 0 || security.Length == 0 || id.Length == 0) - { - return null; - } - - vmessItem.address = address; - vmessItem.port = Utils.ToInt(port); - vmessItem.security = security; - vmessItem.id = id; } else if (result.StartsWith(Global.socksProtocol)) { @@ -1428,6 +1385,90 @@ namespace v2rayN.Handler return vmessItem; } + private static VmessItem ResolveSip002(string result) + { + Uri parsedUrl; + try + { + parsedUrl = new Uri(result); + } + catch (UriFormatException) + { + return null; + } + VmessItem server = new VmessItem + { + remarks = parsedUrl.GetComponents(UriComponents.Fragment, UriFormat.Unescaped), + address = parsedUrl.IdnHost, + port = parsedUrl.Port, + }; + + // parse base64 UserInfo + string rawUserInfo = parsedUrl.GetComponents(UriComponents.UserInfo, UriFormat.Unescaped); + string base64 = rawUserInfo.Replace('-', '+').Replace('_', '/'); // Web-safe base64 to normal base64 + string userInfo; + try + { + userInfo = Encoding.UTF8.GetString(Convert.FromBase64String( + base64.PadRight(base64.Length + (4 - base64.Length % 4) % 4, '='))); + } + catch (FormatException) + { + return null; + } + string[] userInfoParts = userInfo.Split(new char[] { ':' }, 2); + if (userInfoParts.Length != 2) + { + return null; + } + server.security = userInfoParts[0]; + server.id = userInfoParts[1]; + + NameValueCollection queryParameters = HttpUtility.ParseQueryString(parsedUrl.Query); + string[] pluginParts = (queryParameters["plugin"] ?? "").Split(new[] { ';' }, 2); + if (pluginParts.Length > 0) + { + return null; + } + + return server; + } + + private static readonly Regex UrlFinder = new Regex(@"ss://(?[A-Za-z0-9+-/=_]+)(?:#(?\S+))?", RegexOptions.IgnoreCase); + private static readonly Regex DetailsParser = new Regex(@"^((?.+?):(?.*)@(?.+?):(?\d+?))$", RegexOptions.IgnoreCase); + + private static VmessItem ResolveSSLegacy(string result) + { + var match = UrlFinder.Match(result); + if (!match.Success) + return null; + + VmessItem server = new VmessItem(); + var base64 = match.Groups["base64"].Value.TrimEnd('/'); + var tag = match.Groups["tag"].Value; + if (!tag.IsNullOrEmpty()) + { + server.remarks = HttpUtility.UrlDecode(tag, Encoding.UTF8); + } + Match details; + try + { + details = DetailsParser.Match(Encoding.UTF8.GetString(Convert.FromBase64String( + base64.PadRight(base64.Length + (4 - base64.Length % 4) % 4, '=')))); + } + catch (FormatException) + { + return null; + } + if (!details.Success) + return null; + server.security = details.Groups["method"].Value; + server.id = details.Groups["password"].Value; + server.address = details.Groups["hostname"].Value; + server.port = int.Parse(details.Groups["port"].Value); + return server; + } + #endregion #region Gen speedtest config @@ -1449,7 +1490,7 @@ namespace v2rayN.Handler msg = UIRes.I18N("InitialConfiguration"); - Config configCopy = Utils.DeepCopy(config); + Config configCopy = Utils.DeepCopy(config); string result = Utils.GetEmbedText(SampleClient); if (Utils.IsNullOrEmpty(result)) diff --git a/v2rayN/v2rayN/v2rayN.csproj b/v2rayN/v2rayN/v2rayN.csproj index 64ece7d3..308d38cd 100644 --- a/v2rayN/v2rayN/v2rayN.csproj +++ b/v2rayN/v2rayN/v2rayN.csproj @@ -93,6 +93,7 @@ + From e313e004eb8d815ee5a5322ba10df1afc0e91b2b Mon Sep 17 00:00:00 2001 From: Student Main Date: Sun, 19 Jul 2020 21:03:14 +0800 Subject: [PATCH 05/54] vmess --- v2rayN/v2rayN/Handler/V2rayConfigHandler.cs | 80 ++++++++++++++++++++- 1 file changed, 77 insertions(+), 3 deletions(-) diff --git a/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs b/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs index 45422941..1830e6af 100644 --- a/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs +++ b/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs @@ -1199,7 +1199,7 @@ namespace v2rayN.Handler int indexSplit = result.IndexOf("?"); if (indexSplit > 0) { - vmessItem = ResolveVmess4Kitsunebi(result); + vmessItem = ResolveVmess4Vmess(result) ?? ResolveVmess4Kitsunebi(result); } else { @@ -1425,8 +1425,7 @@ namespace v2rayN.Handler server.id = userInfoParts[1]; NameValueCollection queryParameters = HttpUtility.ParseQueryString(parsedUrl.Query); - string[] pluginParts = (queryParameters["plugin"] ?? "").Split(new[] { ';' }, 2); - if (pluginParts.Length > 0) + if (queryParameters["plugin"] != null) { return null; } @@ -1469,6 +1468,81 @@ namespace v2rayN.Handler return server; } + + private static VmessItem ResolveVmess4Vmess(string result) + { + VmessItem i = new VmessItem(); + + Uri u = new Uri(result); + + var uinfo = u.UserInfo; + var uinfo12 = uinfo.Split(':'); + if (uinfo12.Length != 2) return null; + var user = uinfo12[0]; + var pass = uinfo12[1]; + var passsp = pass.LastIndexOf('-'); + var id = pass.Substring(0, passsp); + var aid = pass.Substring(passsp + 1); + i.address = u.IdnHost; + i.port = u.Port; + i.id = id; + i.alterId = int.Parse(aid); + i.remarks = u.GetComponents(UriComponents.Fragment, UriFormat.Unescaped); + + + var query = u.Query; + + var q = HttpUtility.ParseQueryString(u.Query); + + if (user.EndsWith("+tls")) + { + user = user.Split('+')[0]; + i.streamSecurity = "tls"; + // TODO tlsServerName + } + i.network = user; + switch (user) + { + case "tcp": + string t1 = q["type"] ?? "none"; + i.headerType = t1; + // TODO t = http, parse http option + + + break; + case "kcp": + string t2 = q["type"] ?? "none"; + i.headerType = t2; + // TODO seed + break; + case "ws": + string p1 = q["path"] ?? "/"; + string h1 = q["host"] ?? ""; + i.requestHost = h1; + i.path = p1; + break; + + case "http": + i.network = "h2"; + string p2 = q["path"] ?? "/"; + string h2 = q["host"] ?? ""; + i.requestHost = h2; + i.path = p2; + break; + + case "quic": + string s = q["security"] ?? "none"; + string k = q["key"] ?? ""; + string t3 = q["type"] ?? "none"; + i.headerType = t3; + i.requestHost = s; + i.path = k; + break; + + } + + return i; + } #endregion #region Gen speedtest config From 4e8ea374d8024f8a7ef49af35100e2713aa68b73 Mon Sep 17 00:00:00 2001 From: Student Main Date: Thu, 23 Jul 2020 17:15:30 +0800 Subject: [PATCH 06/54] regex vmess url --- v2rayN/v2rayN/Handler/V2rayConfigHandler.cs | 69 ++++++++++++--------- 1 file changed, 41 insertions(+), 28 deletions(-) diff --git a/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs b/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs index 1830e6af..127f2b7a 100644 --- a/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs +++ b/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs @@ -1199,7 +1199,7 @@ namespace v2rayN.Handler int indexSplit = result.IndexOf("?"); if (indexSplit > 0) { - vmessItem = ResolveVmess4Vmess(result) ?? ResolveVmess4Kitsunebi(result); + vmessItem = ResolveStdVmess(result) ?? ResolveVmess4Kitsunebi(result); } else { @@ -1469,52 +1469,63 @@ namespace v2rayN.Handler } - private static VmessItem ResolveVmess4Vmess(string result) + private static readonly Regex StdVmessUserInfo = new Regex( + @"^(?[a-z]+)(\+(?[a-z]+))?:(?[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})-(?[0-9]+)$"); + + private static VmessItem ResolveStdVmess(string result) { - VmessItem i = new VmessItem(); + VmessItem i = new VmessItem + { + configType = (int)EConfigType.Vmess, + security = "auto" + }; Uri u = new Uri(result); - var uinfo = u.UserInfo; - var uinfo12 = uinfo.Split(':'); - if (uinfo12.Length != 2) return null; - var user = uinfo12[0]; - var pass = uinfo12[1]; - var passsp = pass.LastIndexOf('-'); - var id = pass.Substring(0, passsp); - var aid = pass.Substring(passsp + 1); i.address = u.IdnHost; i.port = u.Port; - i.id = id; - i.alterId = int.Parse(aid); i.remarks = u.GetComponents(UriComponents.Fragment, UriFormat.Unescaped); - - - var query = u.Query; - var q = HttpUtility.ParseQueryString(u.Query); - if (user.EndsWith("+tls")) + var m = StdVmessUserInfo.Match(u.UserInfo); + if (!m.Success) return null; + + i.id = m.Groups["id"].Value; + if (!int.TryParse(m.Groups["alterId"].Value, out int aid)) { - user = user.Split('+')[0]; - i.streamSecurity = "tls"; - // TODO tlsServerName + return null; } - i.network = user; - switch (user) + i.alterId = aid; + + if (m.Groups["streamSecurity"].Success) + { + i.streamSecurity = m.Groups["streamSecurity"].Value; + } + switch (i.streamSecurity) + { + case "tls": + // TODO tls config + break; + default: + if (!string.IsNullOrWhiteSpace(i.streamSecurity)) + return null; + break; + } + + i.network = m.Groups["network"].Value; + switch (i.network) { case "tcp": string t1 = q["type"] ?? "none"; i.headerType = t1; - // TODO t = http, parse http option - + // TODO http option break; case "kcp": - string t2 = q["type"] ?? "none"; - i.headerType = t2; - // TODO seed + i.headerType = q["type"] ?? "none"; + // TODO kcp seed break; + case "ws": string p1 = q["path"] ?? "/"; string h1 = q["host"] ?? ""; @@ -1539,6 +1550,8 @@ namespace v2rayN.Handler i.path = k; break; + default: + return null; } return i; From 1dcb72e9dc2cecd389ccb9642f2a033da9ac399c Mon Sep 17 00:00:00 2001 From: RPRX <63339210+rprx@users.noreply.github.com> Date: Fri, 31 Jul 2020 14:06:30 +0000 Subject: [PATCH 07/54] Update link --- v2rayN/v2rayN/Forms/OptionSettingForm.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/v2rayN/v2rayN/Forms/OptionSettingForm.cs b/v2rayN/v2rayN/Forms/OptionSettingForm.cs index bbfec412..78d4eeff 100644 --- a/v2rayN/v2rayN/Forms/OptionSettingForm.cs +++ b/v2rayN/v2rayN/Forms/OptionSettingForm.cs @@ -444,7 +444,7 @@ namespace v2rayN.Forms private void linkLabelRoutingDoc_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { - System.Diagnostics.Process.Start("https://www.v2fly.org/chapter_02/03_routing.html"); + System.Diagnostics.Process.Start("https://www.v2fly.org/config/routing.html"); } } From ba68f5008b00eb81db10d6e9767de7bd9edfd9af Mon Sep 17 00:00:00 2001 From: 2dust <31833384+2dust@users.noreply.github.com> Date: Fri, 7 Aug 2020 16:00:39 +0800 Subject: [PATCH 08/54] up UI --- v2rayN/v2rayN/Forms/AddServerForm.Designer.cs | 90 +- v2rayN/v2rayN/Forms/AddServerForm.resx | 2286 ++++++++--------- .../v2rayN/Forms/AddServerForm.zh-Hans.resx | 42 +- 3 files changed, 1209 insertions(+), 1209 deletions(-) diff --git a/v2rayN/v2rayN/Forms/AddServerForm.Designer.cs b/v2rayN/v2rayN/Forms/AddServerForm.Designer.cs index 31ae1b74..a96b32ab 100644 --- a/v2rayN/v2rayN/Forms/AddServerForm.Designer.cs +++ b/v2rayN/v2rayN/Forms/AddServerForm.Designer.cs @@ -39,8 +39,11 @@ this.panTlsMore = new System.Windows.Forms.Panel(); this.label21 = new System.Windows.Forms.Label(); this.cmbAllowInsecure = new System.Windows.Forms.ComboBox(); + this.label9 = new System.Windows.Forms.Label(); this.label20 = new System.Windows.Forms.Label(); this.txtPath = new System.Windows.Forms.TextBox(); + this.cmbNetwork = new System.Windows.Forms.ComboBox(); + this.label7 = new System.Windows.Forms.Label(); this.label19 = new System.Windows.Forms.Label(); this.label18 = new System.Windows.Forms.Label(); this.label17 = new System.Windows.Forms.Label(); @@ -53,10 +56,7 @@ this.label11 = new System.Windows.Forms.Label(); this.label10 = new System.Windows.Forms.Label(); this.cmbHeaderType = new System.Windows.Forms.ComboBox(); - this.label9 = new System.Windows.Forms.Label(); this.label8 = new System.Windows.Forms.Label(); - this.cmbNetwork = new System.Windows.Forms.ComboBox(); - this.label7 = new System.Windows.Forms.Label(); this.cmbSecurity = new System.Windows.Forms.ComboBox(); this.txtRemarks = new System.Windows.Forms.TextBox(); this.label6 = new System.Windows.Forms.Label(); @@ -87,22 +87,18 @@ // // btnClose // - resources.ApplyResources(this.btnClose, "btnClose"); this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel; + resources.ApplyResources(this.btnClose, "btnClose"); this.btnClose.Name = "btnClose"; this.btnClose.UseVisualStyleBackColor = true; this.btnClose.Click += new System.EventHandler(this.btnClose_Click); // // groupBox1 // - resources.ApplyResources(this.groupBox1, "groupBox1"); this.groupBox1.Controls.Add(this.btnGUID); this.groupBox1.Controls.Add(this.label13); this.groupBox1.Controls.Add(this.groupBox2); - this.groupBox1.Controls.Add(this.label9); this.groupBox1.Controls.Add(this.label8); - this.groupBox1.Controls.Add(this.cmbNetwork); - this.groupBox1.Controls.Add(this.label7); this.groupBox1.Controls.Add(this.cmbSecurity); this.groupBox1.Controls.Add(this.txtRemarks); this.groupBox1.Controls.Add(this.label6); @@ -115,6 +111,7 @@ this.groupBox1.Controls.Add(this.label2); this.groupBox1.Controls.Add(this.txtAddress); this.groupBox1.Controls.Add(this.label1); + resources.ApplyResources(this.groupBox1, "groupBox1"); this.groupBox1.Name = "groupBox1"; this.groupBox1.TabStop = false; // @@ -132,12 +129,14 @@ // // groupBox2 // - resources.ApplyResources(this.groupBox2, "groupBox2"); this.groupBox2.Controls.Add(this.label24); this.groupBox2.Controls.Add(this.label23); this.groupBox2.Controls.Add(this.panTlsMore); + this.groupBox2.Controls.Add(this.label9); this.groupBox2.Controls.Add(this.label20); this.groupBox2.Controls.Add(this.txtPath); + this.groupBox2.Controls.Add(this.cmbNetwork); + this.groupBox2.Controls.Add(this.label7); this.groupBox2.Controls.Add(this.label19); this.groupBox2.Controls.Add(this.label18); this.groupBox2.Controls.Add(this.label17); @@ -150,6 +149,7 @@ this.groupBox2.Controls.Add(this.label11); this.groupBox2.Controls.Add(this.label10); this.groupBox2.Controls.Add(this.cmbHeaderType); + resources.ApplyResources(this.groupBox2, "groupBox2"); this.groupBox2.Name = "groupBox2"; this.groupBox2.TabStop = false; // @@ -165,9 +165,9 @@ // // panTlsMore // - resources.ApplyResources(this.panTlsMore, "panTlsMore"); this.panTlsMore.Controls.Add(this.label21); this.panTlsMore.Controls.Add(this.cmbAllowInsecure); + resources.ApplyResources(this.panTlsMore, "panTlsMore"); this.panTlsMore.Name = "panTlsMore"; // // label21 @@ -177,15 +177,20 @@ // // cmbAllowInsecure // - resources.ApplyResources(this.cmbAllowInsecure, "cmbAllowInsecure"); this.cmbAllowInsecure.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.cmbAllowInsecure.FormattingEnabled = true; this.cmbAllowInsecure.Items.AddRange(new object[] { resources.GetString("cmbAllowInsecure.Items"), resources.GetString("cmbAllowInsecure.Items1"), resources.GetString("cmbAllowInsecure.Items2")}); + resources.ApplyResources(this.cmbAllowInsecure, "cmbAllowInsecure"); this.cmbAllowInsecure.Name = "cmbAllowInsecure"; // + // label9 + // + resources.ApplyResources(this.label9, "label9"); + this.label9.Name = "label9"; + // // label20 // resources.ApplyResources(this.label20, "label20"); @@ -196,6 +201,25 @@ resources.ApplyResources(this.txtPath, "txtPath"); this.txtPath.Name = "txtPath"; // + // cmbNetwork + // + this.cmbNetwork.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cmbNetwork.FormattingEnabled = true; + this.cmbNetwork.Items.AddRange(new object[] { + resources.GetString("cmbNetwork.Items"), + resources.GetString("cmbNetwork.Items1"), + resources.GetString("cmbNetwork.Items2"), + resources.GetString("cmbNetwork.Items3"), + resources.GetString("cmbNetwork.Items4")}); + resources.ApplyResources(this.cmbNetwork, "cmbNetwork"); + this.cmbNetwork.Name = "cmbNetwork"; + this.cmbNetwork.SelectedIndexChanged += new System.EventHandler(this.cmbNetwork_SelectedIndexChanged); + // + // label7 + // + resources.ApplyResources(this.label7, "label7"); + this.label7.Name = "label7"; + // // label19 // resources.ApplyResources(this.label19, "label19"); @@ -228,12 +252,12 @@ // // cmbStreamSecurity // - resources.ApplyResources(this.cmbStreamSecurity, "cmbStreamSecurity"); this.cmbStreamSecurity.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.cmbStreamSecurity.FormattingEnabled = true; this.cmbStreamSecurity.Items.AddRange(new object[] { resources.GetString("cmbStreamSecurity.Items"), resources.GetString("cmbStreamSecurity.Items1")}); + resources.ApplyResources(this.cmbStreamSecurity, "cmbStreamSecurity"); this.cmbStreamSecurity.Name = "cmbStreamSecurity"; this.cmbStreamSecurity.SelectedIndexChanged += new System.EventHandler(this.cmbStreamSecurity_SelectedIndexChanged); // @@ -259,7 +283,6 @@ // // cmbHeaderType // - resources.ApplyResources(this.cmbHeaderType, "cmbHeaderType"); this.cmbHeaderType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.cmbHeaderType.FormattingEnabled = true; this.cmbHeaderType.Items.AddRange(new object[] { @@ -270,40 +293,16 @@ resources.GetString("cmbHeaderType.Items4"), resources.GetString("cmbHeaderType.Items5"), resources.GetString("cmbHeaderType.Items6")}); + resources.ApplyResources(this.cmbHeaderType, "cmbHeaderType"); this.cmbHeaderType.Name = "cmbHeaderType"; // - // label9 - // - resources.ApplyResources(this.label9, "label9"); - this.label9.Name = "label9"; - // // label8 // resources.ApplyResources(this.label8, "label8"); this.label8.Name = "label8"; // - // cmbNetwork - // - resources.ApplyResources(this.cmbNetwork, "cmbNetwork"); - this.cmbNetwork.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.cmbNetwork.FormattingEnabled = true; - this.cmbNetwork.Items.AddRange(new object[] { - resources.GetString("cmbNetwork.Items"), - resources.GetString("cmbNetwork.Items1"), - resources.GetString("cmbNetwork.Items2"), - resources.GetString("cmbNetwork.Items3"), - resources.GetString("cmbNetwork.Items4")}); - this.cmbNetwork.Name = "cmbNetwork"; - this.cmbNetwork.SelectedIndexChanged += new System.EventHandler(this.cmbNetwork_SelectedIndexChanged); - // - // label7 - // - resources.ApplyResources(this.label7, "label7"); - this.label7.Name = "label7"; - // // cmbSecurity // - resources.ApplyResources(this.cmbSecurity, "cmbSecurity"); this.cmbSecurity.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.cmbSecurity.FormattingEnabled = true; this.cmbSecurity.Items.AddRange(new object[] { @@ -311,6 +310,7 @@ resources.GetString("cmbSecurity.Items1"), resources.GetString("cmbSecurity.Items2"), resources.GetString("cmbSecurity.Items3")}); + resources.ApplyResources(this.cmbSecurity, "cmbSecurity"); this.cmbSecurity.Name = "cmbSecurity"; // // txtRemarks @@ -370,9 +370,9 @@ // // panel2 // - resources.ApplyResources(this.panel2, "panel2"); this.panel2.Controls.Add(this.btnClose); this.panel2.Controls.Add(this.btnOK); + resources.ApplyResources(this.panel2, "panel2"); this.panel2.Name = "panel2"; // // btnOK @@ -389,42 +389,42 @@ // // menuServer // - resources.ApplyResources(this.menuServer, "menuServer"); this.menuServer.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.MenuItem1}); + resources.ApplyResources(this.menuServer, "menuServer"); this.menuServer.Name = "menuServer"; // // MenuItem1 // - resources.ApplyResources(this.MenuItem1, "MenuItem1"); this.MenuItem1.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.MenuItemImportClient, this.MenuItemImportServer, this.toolStripSeparator1, this.MenuItemImportClipboard}); this.MenuItem1.Name = "MenuItem1"; + resources.ApplyResources(this.MenuItem1, "MenuItem1"); // // MenuItemImportClient // - resources.ApplyResources(this.MenuItemImportClient, "MenuItemImportClient"); this.MenuItemImportClient.Name = "MenuItemImportClient"; + resources.ApplyResources(this.MenuItemImportClient, "MenuItemImportClient"); this.MenuItemImportClient.Click += new System.EventHandler(this.MenuItemImportClient_Click); // // MenuItemImportServer // - resources.ApplyResources(this.MenuItemImportServer, "MenuItemImportServer"); this.MenuItemImportServer.Name = "MenuItemImportServer"; + resources.ApplyResources(this.MenuItemImportServer, "MenuItemImportServer"); this.MenuItemImportServer.Click += new System.EventHandler(this.MenuItemImportServer_Click); // // toolStripSeparator1 // - resources.ApplyResources(this.toolStripSeparator1, "toolStripSeparator1"); this.toolStripSeparator1.Name = "toolStripSeparator1"; + resources.ApplyResources(this.toolStripSeparator1, "toolStripSeparator1"); // // MenuItemImportClipboard // - resources.ApplyResources(this.MenuItemImportClipboard, "MenuItemImportClipboard"); this.MenuItemImportClipboard.Name = "MenuItemImportClipboard"; + resources.ApplyResources(this.MenuItemImportClipboard, "MenuItemImportClipboard"); this.MenuItemImportClipboard.Click += new System.EventHandler(this.MenuItemImportClipboard_Click); // // AddServerForm diff --git a/v2rayN/v2rayN/Forms/AddServerForm.resx b/v2rayN/v2rayN/Forms/AddServerForm.resx index 107bae98..832dd782 100644 --- a/v2rayN/v2rayN/Forms/AddServerForm.resx +++ b/v2rayN/v2rayN/Forms/AddServerForm.resx @@ -117,1249 +117,1249 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 7 - - - 113, 12 - - - 12 - - - 285, 203 - - - 124, 30 - - - groupBox2 - - - 9 - - - Path - - - 83, 12 - - - Transport protocol(network) - - - 10 - - - panTlsMore - - - groupBox1 - - - 1 - - - label15 - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - cmbStreamSecurity - - - 3)h2 host Separated by commas (,) - - - - Top - - - - 3 - - - 17 - - - false - - - 16 - - - True - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 5 - - - 21 - - - 411, 83 - - - Address - - - groupBox1 - - - 59, 12 - - - 1)ws path - - - 19 - - - True - - - 26 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - txtId - - - True - - - 729, 474 - - - - - - 12, 89 - - - groupBox2 - - - tls - - - True - - - 299, 12 - - - panTlsMore - - - 13 - - - aes-128-gcm - - - groupBox1 - - - 127, 85 - - - 13 - - - 12, 203 - - - 1 - - - label10 - - - 723, 234 - - - 4 - - - label21 - - - System.Windows.Forms.MenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 143, 12 - - - groupBox2 - - - toolStripSeparator1 - - - NoControl - - - 21 - - - label11 - - - 5 - - - 158, 58 - - - 2 - - - 29, 12 - - - System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 234, 6 - - - 237, 22 - - - TLS - - - 3)QUIC key - - - 127, 56 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - txtPort - - - 2 - - - groupBox1 - - - Bottom - - - True - - - 127, 199 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - True - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 29, 12 - - - ws - - - 16 - - - 9, 34 - - - 18 - - - Import server configuration - - - 6, 12 - - - 1 - - - 7 - - - 15 - - - label17 - - - panel1 - - - label14 - - - groupBox2 - - - 5 - - - 215, 12 - - - 0, 0 - 396, 17 - - 338, 35 + + 75, 23 - - 12, 60 - - - MenuItemImportClient - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - &Generate - - - Encryption method (security) - - - none - - - txtRemarks - - - 47, 12 - - - v2rayN.Forms.BaseForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null - - - groupBox2 - - - panel2 - - - true - - - panTlsMore - - - True - - - 127, 114 - - - 284, 189 - - - 95, 12 - - - NoControl - - - 353, 175 - - - cmbNetwork - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 22 - - - groupBox1 - - - True - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 127, 27 - - - label12 - - - AlterId - - - True - - - 282, 34 - - - 9 - - - 25 - - - label23 - - - groupBox1 - - - 143, 20 - - - 1 - - - $this - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 33 - - - 6 - - - none - - - 0 - - - 47, 12 - - - label8 + + + 4 &Cancel - - label13 - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - txtAlterId - - - 35 - - - 10 - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 11 - - - True - - - 469, 53 - - - label9 - - - label20 - - - 124, 125 - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - label18 - - - MenuItem1 - - - label1 - - - 13 - - - 34 - - - 143, 20 - - - groupBox2 - - - True - btnClose - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - label19 - - - 143, 21 - - - 95, 12 - - - groupBox1 - - - 0, 35 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 729, 60 - - - allowInsecure - - - True - - - 469, 83 - - - $this - - - quic - - - groupBox2 - - - h2 - - - kcp - - - 7 - - - 143, 21 - - - 526, 130 - - - 18 - - - 12, 147 - - - 15 - - - groupBox1 - - - label2 - - - groupBox2 - - - 24 - - - groupBox2 - - - 119, 12 - - - True - - - True - - - Bottom - - - 91, 20 - - - 27 - - - 23 - - - groupBox2 - - - 14 - - - Port - - - groupBox2 - - - Fill - - - chacha20-poly1305 - - - 15 - - - groupBox1 - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 0 - - - 75, 23 - - - 4 - - - True - - - 8 - - - groupBox1 - - - 8 - - - *Recommended (auto) - - - 195, 143 - - - 3 - - - groupBox1 - - - 0, 509 - - - 143, 20 - - - 23 - - - 6 - - - 7 - - - 14 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - True - - - 3, 237 - - - Import configuration file - - - wechat-video - - - 12 - - - 23, 12 - - - 729, 10 - - - 470, 99 - - - True - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 22 - - - 396, 54 - - - 300, 53 - - - 1)http host Separated by commas (,) - - - 12, 31 - - - 11 - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - dtls - - - MenuItemImportServer - - - groupBox2 + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 panel2 - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 0 - + + 411, 83 + + + 75, 23 + + + 23 + + + &Generate + + + btnGUID + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + groupBox1 - - AddServerForm - - - wireguard - - - groupBox1 - - - - - - Server - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 303, 17 - - - 2)ws host - - - groupBox1 - - - txtAddress + + 0 True - - 2)h2 path + + 285, 179 - - True + + 113, 12 - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 167, 12 - - - 8 - - - Keep the default value if it is not clear - - - groupBox2 + + 22 * Fill in manually - - 9, 125 + + label13 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 1 + + + True + + + + NoControl + + + 526, 197 + + + 65, 12 + + + 35 + + + 3)QUIC key + + + label24 System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 12 + + groupBox2 - + + 0 + + + True + + + NoControl + + + 470, 131 + + + 89, 12 + + + 34 + + + 4)QUIC securty + + + label23 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 1 + + True 12, 11 - - 89, 12 + + 83, 12 - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 31 - - 143, 21 + + allowInsecure - - 1 + + label21 - - 65, 12 - - - txtPath - - - 162, 21 - - + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - txtRequestHost + + panTlsMore - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 0 - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + - - Alias (remarks) + + true - - groupBox2 + + false - - label7 + + 107, 7 - - 4 + + 91, 20 + + + 30 cmbAllowInsecure - - &OK + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 6 + + panTlsMore - + + 1 + + + 284, 234 + + + 338, 35 + + + 33 + + + panTlsMore + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 2 + + + True + + + 350, 32 + + + 113, 12 + + + 15 + + + *Default value tcp + + + label9 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + 3 - - http + + True - + + 469, 115 + + + 203, 12 + + + 29 + + + 3)h2 host Separated by commas (,) + + + label20 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 4 + + + 124, 157 + + + True + + + 396, 54 + + + 28 + + + txtPath + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 5 + + + tcp + + + kcp + + + ws + + + h2 + + + quic + + + 192, 28 + + + 143, 20 + + + 12 + + + cmbNetwork + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 6 + + + True + + + 9, 32 + + + 167, 12 + + + 13 + + + Transport protocol(network) + + + label7 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 7 + + + True + + + 9, 157 + + + 29, 12 + + + 27 + + + Path + + + label19 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 8 + + True - 526, 147 + 526, 179 - - 6 + + 59, 12 - + + 26 + + + 2)h2 path + + + label18 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + groupBox2 - - menuServer + + 9 + + + True + + + 469, 100 + + + 59, 12 + + + 25 + + + 2)ws host + + + label17 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 10 + + + True + + + 526, 162 + + + 59, 12 + + + 24 + + + 1)ws path + + + label16 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 11 + + + True + + + 469, 85 + + + 215, 12 + + + 23 + + + 1)http host Separated by commas (,) + + + label14 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 12 + + + True + + + 9, 246 + + + 23, 12 + + + 22 + + + TLS + + + label15 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 13 + + + + + + tls + + + 124, 242 + + + 143, 20 + + + 21 + + + cmbStreamSecurity + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 14 + + + True + + + 282, 66 + + + 299, 12 20 + + *tcp or kcp or QUIC camouflage type, default none + + + label12 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 15 + + + 158, 90 + + + True + + + 300, 53 + + + 16 + + + txtRequestHost + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 16 + + + True + + + 9, 66 + + + 95, 12 + + + 19 + + + Camouflage type + + + label11 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 17 + + + True + + + 9, 94 + + + 143, 12 + + + 17 + + + Camouflage domain(host) + + + label10 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 18 + + + none + + + http + + + srtp + + + utp + + + wechat-video + + + dtls + + + wireguard + + + 124, 62 + + + 143, 20 + + + 18 + + + cmbHeaderType + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 19 + + + Bottom + + + 3, 215 + + + 723, 281 + + + 21 + + + Transport + + + groupBox2 + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 2 + + + True + + + 353, 147 + + + 119, 12 + + + 14 + + + *Recommended (auto) + + + label8 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 3 + + + aes-128-gcm + + + chacha20-poly1305 + + + auto + + + none + + + 195, 143 + + + 143, 20 + + + 6 + + + cmbSecurity + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 4 + + + 127, 175 + + + 143, 21 + + + 11 + + + txtRemarks + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 5 + + + True + + + 12, 179 + + + 95, 12 + + + 10 + + + Alias (remarks) + + + label6 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 6 + + + True + + + 12, 147 + + + 173, 12 + + + 8 + + + Encryption method (security) + + + label5 + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 1 + + groupBox1 - + + 7 + + + 127, 114 + + + 143, 21 + + + 7 + + + txtAlterId + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 8 + + + True + + + 12, 118 + + + 47, 12 + + + 6 + + + AlterId + + + label4 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 9 + + + 127, 85 + + + 278, 21 + + + 5 + + + txtId + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 10 + + + True + + + 12, 89 + + + 53, 12 + + 4 UUID(id) - - $this - - - MenuItemImportClipboard - - - $this - - - 3 - - - groupBox1 - - - 237, 22 - - - 143, 20 - - - True - - - 5 - - - 0 - - - Camouflage domain(host) - - - 0 - - - System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 113, 12 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 195, 171 - - - 203, 12 - - - utp - - - 124, 197 - - - 30 - - - 17 - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 359, 21 - - - 29 - - - auto - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 469, 68 - - - 2 - - - 9, 62 - label3 - - srtp - - - 8 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Import URL from clipboard - - - True - - - 75, 23 - - - 173, 12 - - - *Default value tcp - - - 0 - - - 729, 569 - - - label4 - - - 31 - - - True - - - 9, 201 - - - 353, 147 - - - Edit or add a [VMess] server - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 11 - - - groupBox1 - - - label5 - - - 3 - - - label16 - - - btnOK - - - 237, 22 - - - 16 - - - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 28 - - - 107, 7 - - - groupBox1 - - - Import client configuration - - - 12, 118 - - - 4)QUIC securty - - - 0, 25 - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - cmbSecurity - - - tcp - - - 6 - - - btnGUID - - - 75, 23 - - - *tcp or kcp or QUIC camouflage type, default none - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - Camouflage type - - - 0 - - - groupBox2 - - - 278, 21 - - - 12, 175 - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - label24 - - - 59, 12 - - - panel2 - - - 14 - - - groupBox2 - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + + groupBox1 + + + 11 + + + 127, 56 + + + 143, 21 + + + 3 + + + txtPort + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 12 + + True - - label6 + + 12, 60 - - 59, 12 + + 29, 12 - - 10 + + 2 - - 729, 25 + + Port - - cmbHeaderType + + label2 - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 526, 165 + + groupBox1 + + + 13 + + + 127, 27 + + + 359, 21 + + + 1 + + + txtAddress + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 14 + + + True + + + 12, 31 + + + 47, 12 + + + 0 + + + Address + + + label1 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 15 + + + Fill + + + 0, 35 + + + 729, 499 + + + 3 + + + Server + + + groupBox1 + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 0 + + + 303, 17 + + + 75, 23 + + + 5 + + + &OK + + + btnOK + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panel2 + + + 1 + + + Bottom + + + 0, 534 + + + 729, 60 + + + 7 + + + panel2 + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 1 + + + Top + + + 0, 25 + + + 729, 10 + + + 6 + + + panel1 + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this 2 - - 53, 12 + + 17, 17 + + + 237, 22 + + + Import client configuration + + + 237, 22 + + + Import server configuration + + + 234, 6 + + + 237, 22 + + + Import URL from clipboard + + + 162, 21 + + + Import configuration file + + + 0, 0 + + + 729, 25 + + + 8 + + + menuServer + + + System.Windows.Forms.MenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 3 True - - 17, 17 - + + 6, 12 + + + 729, 594 + + + Edit or add a [VMess] server + + + MenuItem1 + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + MenuItemImportClient + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + MenuItemImportServer + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolStripSeparator1 + + + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + MenuItemImportClipboard + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + AddServerForm + + + v2rayN.Forms.BaseForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/v2rayN/v2rayN/Forms/AddServerForm.zh-Hans.resx b/v2rayN/v2rayN/Forms/AddServerForm.zh-Hans.resx index 45df68bf..62a6aac4 100644 --- a/v2rayN/v2rayN/Forms/AddServerForm.zh-Hans.resx +++ b/v2rayN/v2rayN/Forms/AddServerForm.zh-Hans.resx @@ -130,7 +130,7 @@ *手填,方便识别管理 - 不清楚则保持默认值 + 底层传输方式(transport) @@ -146,7 +146,7 @@ 4)QUIC 加密方式 - 203, 12 + 167, 12 跳过证书验证(allowInsecure) @@ -154,12 +154,30 @@ 223, 7 + + 143, 12 + + + *默认tcp,选错会无法连接 + 149, 12 3)h2 host中间逗号(,)隔开 + + 127, 32 + + + 211, 20 + + + 107, 12 + + + 传输协议(network) + 65, 12 @@ -185,7 +203,7 @@ *tcp或kcp或QUIC伪装类型,默认none - 124, 58 + 124, 94 334, 51 @@ -202,30 +220,12 @@ 伪装域名(host) - - 143, 12 - - - *默认tcp,选错会无法连接 - 113, 12 *随便选,建议(auto) - - 127, 171 - - - 211, 20 - - - 107, 12 - - - 传输协议(network) - 127, 143 From 583bd22244831ee093ac19d905ddec1c4857840a Mon Sep 17 00:00:00 2001 From: 2dust <31833384+2dust@users.noreply.github.com> Date: Sat, 8 Aug 2020 11:15:32 +0800 Subject: [PATCH 09/54] add vless --- .../v2rayN/Forms/AddServer5Form.Designer.cs | 489 ++++++ v2rayN/v2rayN/Forms/AddServer5Form.cs | 284 ++++ v2rayN/v2rayN/Forms/AddServer5Form.resx | 1311 +++++++++++++++++ .../v2rayN/Forms/AddServer5Form.zh-Hans.resx | 302 ++++ v2rayN/v2rayN/Forms/MainForm.Designer.cs | 11 +- v2rayN/v2rayN/Forms/MainForm.cs | 30 +- v2rayN/v2rayN/Forms/MainForm.resx | 42 +- v2rayN/v2rayN/Mode/EConfigType.cs | 3 +- v2rayN/v2rayN/Mode/V2rayConfig.cs | 12 + v2rayN/v2rayN/v2rayN.csproj | 14 + 10 files changed, 2479 insertions(+), 19 deletions(-) create mode 100644 v2rayN/v2rayN/Forms/AddServer5Form.Designer.cs create mode 100644 v2rayN/v2rayN/Forms/AddServer5Form.cs create mode 100644 v2rayN/v2rayN/Forms/AddServer5Form.resx create mode 100644 v2rayN/v2rayN/Forms/AddServer5Form.zh-Hans.resx diff --git a/v2rayN/v2rayN/Forms/AddServer5Form.Designer.cs b/v2rayN/v2rayN/Forms/AddServer5Form.Designer.cs new file mode 100644 index 00000000..f290e0d9 --- /dev/null +++ b/v2rayN/v2rayN/Forms/AddServer5Form.Designer.cs @@ -0,0 +1,489 @@ +namespace v2rayN.Forms +{ + partial class AddServer5Form + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AddServer5Form)); + this.btnClose = new System.Windows.Forms.Button(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.btnGUID = new System.Windows.Forms.Button(); + this.label13 = new System.Windows.Forms.Label(); + this.groupBox2 = new System.Windows.Forms.GroupBox(); + this.label24 = new System.Windows.Forms.Label(); + this.label23 = new System.Windows.Forms.Label(); + this.panTlsMore = new System.Windows.Forms.Panel(); + this.label21 = new System.Windows.Forms.Label(); + this.cmbAllowInsecure = new System.Windows.Forms.ComboBox(); + this.label9 = new System.Windows.Forms.Label(); + this.label20 = new System.Windows.Forms.Label(); + this.txtPath = new System.Windows.Forms.TextBox(); + this.cmbNetwork = new System.Windows.Forms.ComboBox(); + this.label7 = new System.Windows.Forms.Label(); + this.label19 = new System.Windows.Forms.Label(); + this.label18 = new System.Windows.Forms.Label(); + this.label17 = new System.Windows.Forms.Label(); + this.label16 = new System.Windows.Forms.Label(); + this.label14 = new System.Windows.Forms.Label(); + this.label15 = new System.Windows.Forms.Label(); + this.cmbStreamSecurity = new System.Windows.Forms.ComboBox(); + this.label12 = new System.Windows.Forms.Label(); + this.txtRequestHost = new System.Windows.Forms.TextBox(); + this.label11 = new System.Windows.Forms.Label(); + this.label10 = new System.Windows.Forms.Label(); + this.cmbHeaderType = new System.Windows.Forms.ComboBox(); + this.label8 = new System.Windows.Forms.Label(); + this.cmbSecurity = new System.Windows.Forms.ComboBox(); + this.txtRemarks = new System.Windows.Forms.TextBox(); + this.label6 = new System.Windows.Forms.Label(); + this.label5 = new System.Windows.Forms.Label(); + this.txtId = new System.Windows.Forms.TextBox(); + this.label3 = new System.Windows.Forms.Label(); + this.txtPort = new System.Windows.Forms.TextBox(); + this.label2 = new System.Windows.Forms.Label(); + this.txtAddress = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.panel2 = new System.Windows.Forms.Panel(); + this.btnOK = new System.Windows.Forms.Button(); + this.panel1 = new System.Windows.Forms.Panel(); + this.menuServer = new System.Windows.Forms.MenuStrip(); + this.MenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + this.MenuItemImportClient = new System.Windows.Forms.ToolStripMenuItem(); + this.MenuItemImportServer = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); + this.MenuItemImportClipboard = new System.Windows.Forms.ToolStripMenuItem(); + this.groupBox1.SuspendLayout(); + this.groupBox2.SuspendLayout(); + this.panTlsMore.SuspendLayout(); + this.panel2.SuspendLayout(); + this.menuServer.SuspendLayout(); + this.SuspendLayout(); + // + // btnClose + // + resources.ApplyResources(this.btnClose, "btnClose"); + this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.btnClose.Name = "btnClose"; + this.btnClose.UseVisualStyleBackColor = true; + this.btnClose.Click += new System.EventHandler(this.btnClose_Click); + // + // groupBox1 + // + resources.ApplyResources(this.groupBox1, "groupBox1"); + this.groupBox1.Controls.Add(this.btnGUID); + this.groupBox1.Controls.Add(this.label13); + this.groupBox1.Controls.Add(this.groupBox2); + this.groupBox1.Controls.Add(this.label8); + this.groupBox1.Controls.Add(this.cmbSecurity); + this.groupBox1.Controls.Add(this.txtRemarks); + this.groupBox1.Controls.Add(this.label6); + this.groupBox1.Controls.Add(this.label5); + this.groupBox1.Controls.Add(this.txtId); + this.groupBox1.Controls.Add(this.label3); + this.groupBox1.Controls.Add(this.txtPort); + this.groupBox1.Controls.Add(this.label2); + this.groupBox1.Controls.Add(this.txtAddress); + this.groupBox1.Controls.Add(this.label1); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.TabStop = false; + // + // btnGUID + // + resources.ApplyResources(this.btnGUID, "btnGUID"); + this.btnGUID.Name = "btnGUID"; + this.btnGUID.UseVisualStyleBackColor = true; + this.btnGUID.Click += new System.EventHandler(this.btnGUID_Click); + // + // label13 + // + resources.ApplyResources(this.label13, "label13"); + this.label13.Name = "label13"; + // + // groupBox2 + // + resources.ApplyResources(this.groupBox2, "groupBox2"); + this.groupBox2.Controls.Add(this.label24); + this.groupBox2.Controls.Add(this.label23); + this.groupBox2.Controls.Add(this.panTlsMore); + this.groupBox2.Controls.Add(this.label9); + this.groupBox2.Controls.Add(this.label20); + this.groupBox2.Controls.Add(this.txtPath); + this.groupBox2.Controls.Add(this.cmbNetwork); + this.groupBox2.Controls.Add(this.label7); + this.groupBox2.Controls.Add(this.label19); + this.groupBox2.Controls.Add(this.label18); + this.groupBox2.Controls.Add(this.label17); + this.groupBox2.Controls.Add(this.label16); + this.groupBox2.Controls.Add(this.label14); + this.groupBox2.Controls.Add(this.label15); + this.groupBox2.Controls.Add(this.cmbStreamSecurity); + this.groupBox2.Controls.Add(this.label12); + this.groupBox2.Controls.Add(this.txtRequestHost); + this.groupBox2.Controls.Add(this.label11); + this.groupBox2.Controls.Add(this.label10); + this.groupBox2.Controls.Add(this.cmbHeaderType); + this.groupBox2.Name = "groupBox2"; + this.groupBox2.TabStop = false; + // + // label24 + // + resources.ApplyResources(this.label24, "label24"); + this.label24.Name = "label24"; + // + // label23 + // + resources.ApplyResources(this.label23, "label23"); + this.label23.Name = "label23"; + // + // panTlsMore + // + resources.ApplyResources(this.panTlsMore, "panTlsMore"); + this.panTlsMore.Controls.Add(this.label21); + this.panTlsMore.Controls.Add(this.cmbAllowInsecure); + this.panTlsMore.Name = "panTlsMore"; + // + // label21 + // + resources.ApplyResources(this.label21, "label21"); + this.label21.Name = "label21"; + // + // cmbAllowInsecure + // + resources.ApplyResources(this.cmbAllowInsecure, "cmbAllowInsecure"); + this.cmbAllowInsecure.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cmbAllowInsecure.FormattingEnabled = true; + this.cmbAllowInsecure.Items.AddRange(new object[] { + resources.GetString("cmbAllowInsecure.Items"), + resources.GetString("cmbAllowInsecure.Items1"), + resources.GetString("cmbAllowInsecure.Items2")}); + this.cmbAllowInsecure.Name = "cmbAllowInsecure"; + // + // label9 + // + resources.ApplyResources(this.label9, "label9"); + this.label9.Name = "label9"; + // + // label20 + // + resources.ApplyResources(this.label20, "label20"); + this.label20.Name = "label20"; + // + // txtPath + // + resources.ApplyResources(this.txtPath, "txtPath"); + this.txtPath.Name = "txtPath"; + // + // cmbNetwork + // + resources.ApplyResources(this.cmbNetwork, "cmbNetwork"); + this.cmbNetwork.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cmbNetwork.FormattingEnabled = true; + this.cmbNetwork.Items.AddRange(new object[] { + resources.GetString("cmbNetwork.Items"), + resources.GetString("cmbNetwork.Items1"), + resources.GetString("cmbNetwork.Items2"), + resources.GetString("cmbNetwork.Items3"), + resources.GetString("cmbNetwork.Items4")}); + this.cmbNetwork.Name = "cmbNetwork"; + this.cmbNetwork.SelectedIndexChanged += new System.EventHandler(this.cmbNetwork_SelectedIndexChanged); + // + // label7 + // + resources.ApplyResources(this.label7, "label7"); + this.label7.Name = "label7"; + // + // label19 + // + resources.ApplyResources(this.label19, "label19"); + this.label19.Name = "label19"; + // + // label18 + // + resources.ApplyResources(this.label18, "label18"); + this.label18.Name = "label18"; + // + // label17 + // + resources.ApplyResources(this.label17, "label17"); + this.label17.Name = "label17"; + // + // label16 + // + resources.ApplyResources(this.label16, "label16"); + this.label16.Name = "label16"; + // + // label14 + // + resources.ApplyResources(this.label14, "label14"); + this.label14.Name = "label14"; + // + // label15 + // + resources.ApplyResources(this.label15, "label15"); + this.label15.Name = "label15"; + // + // cmbStreamSecurity + // + resources.ApplyResources(this.cmbStreamSecurity, "cmbStreamSecurity"); + this.cmbStreamSecurity.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cmbStreamSecurity.FormattingEnabled = true; + this.cmbStreamSecurity.Items.AddRange(new object[] { + resources.GetString("cmbStreamSecurity.Items"), + resources.GetString("cmbStreamSecurity.Items1")}); + this.cmbStreamSecurity.Name = "cmbStreamSecurity"; + this.cmbStreamSecurity.SelectedIndexChanged += new System.EventHandler(this.cmbStreamSecurity_SelectedIndexChanged); + // + // label12 + // + resources.ApplyResources(this.label12, "label12"); + this.label12.Name = "label12"; + // + // txtRequestHost + // + resources.ApplyResources(this.txtRequestHost, "txtRequestHost"); + this.txtRequestHost.Name = "txtRequestHost"; + // + // label11 + // + resources.ApplyResources(this.label11, "label11"); + this.label11.Name = "label11"; + // + // label10 + // + resources.ApplyResources(this.label10, "label10"); + this.label10.Name = "label10"; + // + // cmbHeaderType + // + resources.ApplyResources(this.cmbHeaderType, "cmbHeaderType"); + this.cmbHeaderType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cmbHeaderType.FormattingEnabled = true; + this.cmbHeaderType.Items.AddRange(new object[] { + resources.GetString("cmbHeaderType.Items"), + resources.GetString("cmbHeaderType.Items1"), + resources.GetString("cmbHeaderType.Items2"), + resources.GetString("cmbHeaderType.Items3"), + resources.GetString("cmbHeaderType.Items4"), + resources.GetString("cmbHeaderType.Items5"), + resources.GetString("cmbHeaderType.Items6")}); + this.cmbHeaderType.Name = "cmbHeaderType"; + // + // label8 + // + resources.ApplyResources(this.label8, "label8"); + this.label8.Name = "label8"; + // + // cmbSecurity + // + resources.ApplyResources(this.cmbSecurity, "cmbSecurity"); + this.cmbSecurity.DropDownStyle = System.Windows.Forms.ComboBoxStyle.Simple; + this.cmbSecurity.FormattingEnabled = true; + this.cmbSecurity.Items.AddRange(new object[] { + resources.GetString("cmbSecurity.Items")}); + this.cmbSecurity.Name = "cmbSecurity"; + // + // txtRemarks + // + resources.ApplyResources(this.txtRemarks, "txtRemarks"); + this.txtRemarks.Name = "txtRemarks"; + // + // label6 + // + resources.ApplyResources(this.label6, "label6"); + this.label6.Name = "label6"; + // + // label5 + // + resources.ApplyResources(this.label5, "label5"); + this.label5.Name = "label5"; + // + // txtId + // + resources.ApplyResources(this.txtId, "txtId"); + this.txtId.Name = "txtId"; + // + // label3 + // + resources.ApplyResources(this.label3, "label3"); + this.label3.Name = "label3"; + // + // txtPort + // + resources.ApplyResources(this.txtPort, "txtPort"); + this.txtPort.Name = "txtPort"; + // + // label2 + // + resources.ApplyResources(this.label2, "label2"); + this.label2.Name = "label2"; + // + // txtAddress + // + resources.ApplyResources(this.txtAddress, "txtAddress"); + this.txtAddress.Name = "txtAddress"; + // + // label1 + // + resources.ApplyResources(this.label1, "label1"); + this.label1.Name = "label1"; + // + // panel2 + // + resources.ApplyResources(this.panel2, "panel2"); + this.panel2.Controls.Add(this.btnClose); + this.panel2.Controls.Add(this.btnOK); + this.panel2.Name = "panel2"; + // + // btnOK + // + resources.ApplyResources(this.btnOK, "btnOK"); + this.btnOK.Name = "btnOK"; + this.btnOK.UseVisualStyleBackColor = true; + this.btnOK.Click += new System.EventHandler(this.btnOK_Click); + // + // panel1 + // + resources.ApplyResources(this.panel1, "panel1"); + this.panel1.Name = "panel1"; + // + // menuServer + // + resources.ApplyResources(this.menuServer, "menuServer"); + this.menuServer.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.MenuItem1}); + this.menuServer.Name = "menuServer"; + // + // MenuItem1 + // + resources.ApplyResources(this.MenuItem1, "MenuItem1"); + this.MenuItem1.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.MenuItemImportClient, + this.MenuItemImportServer, + this.toolStripSeparator1, + this.MenuItemImportClipboard}); + this.MenuItem1.Name = "MenuItem1"; + // + // MenuItemImportClient + // + resources.ApplyResources(this.MenuItemImportClient, "MenuItemImportClient"); + this.MenuItemImportClient.Name = "MenuItemImportClient"; + this.MenuItemImportClient.Click += new System.EventHandler(this.MenuItemImportClient_Click); + // + // MenuItemImportServer + // + resources.ApplyResources(this.MenuItemImportServer, "MenuItemImportServer"); + this.MenuItemImportServer.Name = "MenuItemImportServer"; + this.MenuItemImportServer.Click += new System.EventHandler(this.MenuItemImportServer_Click); + // + // toolStripSeparator1 + // + resources.ApplyResources(this.toolStripSeparator1, "toolStripSeparator1"); + this.toolStripSeparator1.Name = "toolStripSeparator1"; + // + // MenuItemImportClipboard + // + resources.ApplyResources(this.MenuItemImportClipboard, "MenuItemImportClipboard"); + this.MenuItemImportClipboard.Name = "MenuItemImportClipboard"; + this.MenuItemImportClipboard.Click += new System.EventHandler(this.MenuItemImportClipboard_Click); + // + // AddServer5Form + // + resources.ApplyResources(this, "$this"); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.CancelButton = this.btnClose; + this.Controls.Add(this.groupBox1); + this.Controls.Add(this.panel2); + this.Controls.Add(this.panel1); + this.Controls.Add(this.menuServer); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.Name = "AddServer5Form"; + this.Load += new System.EventHandler(this.AddServer5Form_Load); + this.groupBox1.ResumeLayout(false); + this.groupBox1.PerformLayout(); + this.groupBox2.ResumeLayout(false); + this.groupBox2.PerformLayout(); + this.panTlsMore.ResumeLayout(false); + this.panTlsMore.PerformLayout(); + this.panel2.ResumeLayout(false); + this.menuServer.ResumeLayout(false); + this.menuServer.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.Button btnClose; + private System.Windows.Forms.Button btnOK; + private System.Windows.Forms.TextBox txtRemarks; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.TextBox txtId; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.TextBox txtPort; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.TextBox txtAddress; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.ComboBox cmbSecurity; + private System.Windows.Forms.ComboBox cmbNetwork; + private System.Windows.Forms.Label label7; + private System.Windows.Forms.Label label9; + private System.Windows.Forms.Label label8; + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.Panel panel2; + private System.Windows.Forms.TextBox txtRequestHost; + private System.Windows.Forms.Label label10; + private System.Windows.Forms.Label label11; + private System.Windows.Forms.ComboBox cmbHeaderType; + private System.Windows.Forms.Label label12; + private System.Windows.Forms.GroupBox groupBox2; + private System.Windows.Forms.Label label13; + private System.Windows.Forms.MenuStrip menuServer; + private System.Windows.Forms.ToolStripMenuItem MenuItem1; + private System.Windows.Forms.ToolStripMenuItem MenuItemImportClient; + private System.Windows.Forms.ToolStripMenuItem MenuItemImportServer; + private System.Windows.Forms.Label label15; + private System.Windows.Forms.ComboBox cmbStreamSecurity; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator1; + private System.Windows.Forms.ToolStripMenuItem MenuItemImportClipboard; + private System.Windows.Forms.Button btnGUID; + private System.Windows.Forms.Label label16; + private System.Windows.Forms.Label label14; + private System.Windows.Forms.Label label17; + private System.Windows.Forms.Label label18; + private System.Windows.Forms.Label label19; + private System.Windows.Forms.TextBox txtPath; + private System.Windows.Forms.Label label20; + private System.Windows.Forms.Label label21; + private System.Windows.Forms.ComboBox cmbAllowInsecure; + private System.Windows.Forms.Panel panTlsMore; + private System.Windows.Forms.Label label24; + private System.Windows.Forms.Label label23; + } +} \ No newline at end of file diff --git a/v2rayN/v2rayN/Forms/AddServer5Form.cs b/v2rayN/v2rayN/Forms/AddServer5Form.cs new file mode 100644 index 00000000..568ebd63 --- /dev/null +++ b/v2rayN/v2rayN/Forms/AddServer5Form.cs @@ -0,0 +1,284 @@ +using System; +using System.Windows.Forms; +using v2rayN.Handler; +using v2rayN.Mode; + +namespace v2rayN.Forms +{ + public partial class AddServer5Form : BaseForm + { + public int EditIndex { get; set; } + VmessItem vmessItem = null; + + public AddServer5Form() + { + InitializeComponent(); + } + + private void AddServer5Form_Load(object sender, EventArgs e) + { + if (EditIndex >= 0) + { + vmessItem = config.vmess[EditIndex]; + BindingServer(); + } + else + { + vmessItem = new VmessItem(); + ClearServer(); + } + } + + /// + /// 绑定数据 + /// + private void BindingServer() + { + txtAddress.Text = vmessItem.address; + txtPort.Text = vmessItem.port.ToString(); + txtId.Text = vmessItem.id; + cmbSecurity.Text = vmessItem.security; + cmbNetwork.Text = vmessItem.network; + txtRemarks.Text = vmessItem.remarks; + + cmbHeaderType.Text = vmessItem.headerType; + txtRequestHost.Text = vmessItem.requestHost; + txtPath.Text = vmessItem.path; + cmbStreamSecurity.Text = vmessItem.streamSecurity; + cmbAllowInsecure.Text = vmessItem.allowInsecure; + } + + + /// + /// 清除设置 + /// + private void ClearServer() + { + txtAddress.Text = ""; + txtPort.Text = ""; + txtId.Text = ""; + cmbSecurity.Text = Global.DefaultSecurity; + cmbNetwork.Text = Global.DefaultNetwork; + txtRemarks.Text = ""; + + cmbHeaderType.Text = Global.None; + txtRequestHost.Text = ""; + cmbStreamSecurity.Text = ""; + cmbAllowInsecure.Text = ""; + txtPath.Text = ""; + } + + + private void cmbNetwork_SelectedIndexChanged(object sender, EventArgs e) + { + SetHeaderType(); + } + + /// + /// 设置伪装选项 + /// + private void SetHeaderType() + { + cmbHeaderType.Items.Clear(); + + string network = cmbNetwork.Text; + if (Utils.IsNullOrEmpty(network)) + { + cmbHeaderType.Items.Add(Global.None); + return; + } + + cmbHeaderType.Items.Add(Global.None); + if (network.Equals(Global.DefaultNetwork)) + { + cmbHeaderType.Items.Add(Global.TcpHeaderHttp); + } + else if (network.Equals("kcp") || network.Equals("quic")) + { + cmbHeaderType.Items.Add("srtp"); + cmbHeaderType.Items.Add("utp"); + cmbHeaderType.Items.Add("wechat-video"); + cmbHeaderType.Items.Add("dtls"); + cmbHeaderType.Items.Add("wireguard"); + } + else + { + } + cmbHeaderType.Text = Global.None; + } + + private void btnOK_Click(object sender, EventArgs e) + { + string address = txtAddress.Text; + string port = txtPort.Text; + string id = txtId.Text; + string security = cmbSecurity.Text; + string network = cmbNetwork.Text; + string remarks = txtRemarks.Text; + + string headerType = cmbHeaderType.Text; + string requestHost = txtRequestHost.Text; + string path = txtPath.Text; + string streamSecurity = cmbStreamSecurity.Text; + string allowInsecure = cmbAllowInsecure.Text; + + if (Utils.IsNullOrEmpty(address)) + { + UI.Show(UIRes.I18N("FillServerAddress")); + return; + } + if (Utils.IsNullOrEmpty(port) || !Utils.IsNumberic(port)) + { + UI.Show(UIRes.I18N("FillCorrectServerPort")); + return; + } + if (Utils.IsNullOrEmpty(id)) + { + UI.Show(UIRes.I18N("FillUUID")); + return; + } + + + vmessItem.address = address; + vmessItem.port = Utils.ToInt(port); + vmessItem.id = id; + vmessItem.security = security; + vmessItem.network = network; + vmessItem.remarks = remarks; + + vmessItem.headerType = headerType; + vmessItem.requestHost = requestHost.Replace(" ", ""); + vmessItem.path = path.Replace(" ", ""); + vmessItem.streamSecurity = streamSecurity; + vmessItem.allowInsecure = allowInsecure; + + if (ConfigHandler.AddServer(ref config, vmessItem, EditIndex) == 0) + { + this.DialogResult = DialogResult.OK; + } + else + { + UI.ShowWarning(UIRes.I18N("OperationFailed")); + } + } + + private void btnGUID_Click(object sender, EventArgs e) + { + txtId.Text = Utils.GetGUID(); + } + + private void btnClose_Click(object sender, EventArgs e) + { + this.DialogResult = DialogResult.Cancel; + } + + + #region 导入客户端/服务端配置 + + /// + /// 导入客户端 + /// + /// + /// + private void MenuItemImportClient_Click(object sender, EventArgs e) + { + MenuItemImport(1); + } + + /// + /// 导入服务端 + /// + /// + /// + private void MenuItemImportServer_Click(object sender, EventArgs e) + { + MenuItemImport(2); + } + + private void MenuItemImport(int type) + { + ClearServer(); + + OpenFileDialog fileDialog = new OpenFileDialog + { + Multiselect = false, + Filter = "Config|*.json|All|*.*" + }; + if (fileDialog.ShowDialog() != DialogResult.OK) + { + return; + } + string fileName = fileDialog.FileName; + if (Utils.IsNullOrEmpty(fileName)) + { + return; + } + string msg; + VmessItem vmessItem; + if (type.Equals(1)) + { + vmessItem = V2rayConfigHandler.ImportFromClientConfig(fileName, out msg); + } + else + { + vmessItem = V2rayConfigHandler.ImportFromServerConfig(fileName, out msg); + } + if (vmessItem == null) + { + UI.ShowWarning(msg); + return; + } + + txtAddress.Text = vmessItem.address; + txtPort.Text = vmessItem.port.ToString(); + txtId.Text = vmessItem.id; + txtRemarks.Text = vmessItem.remarks; + cmbNetwork.Text = vmessItem.network; + cmbHeaderType.Text = vmessItem.headerType; + txtRequestHost.Text = vmessItem.requestHost; + txtPath.Text = vmessItem.path; + cmbStreamSecurity.Text = vmessItem.streamSecurity; + } + + /// + /// 从剪贴板导入URL + /// + /// + /// + private void MenuItemImportClipboard_Click(object sender, EventArgs e) + { + ClearServer(); + + VmessItem vmessItem = V2rayConfigHandler.ImportFromClipboardConfig(Utils.GetClipboardData(), out string msg); + if (vmessItem == null) + { + UI.ShowWarning(msg); + return; + } + + txtAddress.Text = vmessItem.address; + txtPort.Text = vmessItem.port.ToString(); + txtId.Text = vmessItem.id; + txtRemarks.Text = vmessItem.remarks; + cmbNetwork.Text = vmessItem.network; + cmbHeaderType.Text = vmessItem.headerType; + txtRequestHost.Text = vmessItem.requestHost; + txtPath.Text = vmessItem.path; + cmbStreamSecurity.Text = vmessItem.streamSecurity; + } + #endregion + + private void cmbStreamSecurity_SelectedIndexChanged(object sender, EventArgs e) + { + string security = cmbStreamSecurity.Text; + if (Utils.IsNullOrEmpty(security)) + { + panTlsMore.Hide(); + } + else + { + panTlsMore.Show(); + } + } + } +} diff --git a/v2rayN/v2rayN/Forms/AddServer5Form.resx b/v2rayN/v2rayN/Forms/AddServer5Form.resx new file mode 100644 index 00000000..57db8697 --- /dev/null +++ b/v2rayN/v2rayN/Forms/AddServer5Form.resx @@ -0,0 +1,1311 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 4 + + + + 113, 12 + + + 285, 179 + + + 124, 62 + + + 6 + + + Path + + + 83, 12 + + + Transport protocol(network) + + + 7 + + + groupBox1 + + + 1 + + + label15 + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + cmbStreamSecurity + + + 3)h2 host Separated by commas (,) + + + none + + + + Top + + + + 3 + + + 17 + + + false + + + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 19 + + + True + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 6 + + + 21 + + + 411, 83 + + + Address + + + groupBox1 + + + 75, 23 + + + 59, 12 + + + 1)ws path + + + 19 + + + True + + + 26 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + txtId + + + True + + + 729, 499 + + + + + + 12, 89 + + + groupBox2 + + + tls + + + True + + + 299, 12 + + + cmbAllowInsecure + + + 127, 85 + + + 16 + + + 12, 179 + + + &Cancel + + + label10 + + + 723, 281 + + + 5 + + + label21 + + + 359, 21 + + + System.Windows.Forms.MenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Edit or add a [VLESS] server + + + 143, 12 + + + groupBox2 + + + 17 + + + toolStripSeparator1 + + + NoControl + + + 21 + + + label11 + + + 5 + + + 158, 90 + + + 2 + + + 29, 12 + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 237, 22 + + + 12 + + + 3)QUIC key + + + 127, 56 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + txtPort + + + 2 + + + groupBox2 + + + Bottom + + + True + + + 127, 175 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 29, 12 + + + True + + + ws + + + 11 + + + 9, 66 + + + 13 + + + Import server configuration + + + 6, 12 + + + 1 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 15 + + + label17 + + + panel1 + + + groupBox2 + + + 5 + + + 215, 12 + + + 0, 0 + + + 396, 17 + + + 338, 35 + + + 12, 60 + + + MenuItemImportClient + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + &Generate + + + Encryption method (encryption) + + + txtRemarks + + + v2rayN.Forms.BaseForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + + + groupBox2 + + + true + + + panTlsMore + + + True + + + cmbNetwork + + + 284, 234 + + + 95, 12 + + + 350, 32 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + True + + + 24 + + + 127, 27 + + + label12 + + + 729, 594 + + + True + + + 282, 66 + + + 12 + + + *tcp or kcp or QUIC camouflage type, default none + + + 25 + + + label23 + + + groupBox1 + + + 143, 20 + + + $this + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 33 + + + 6 + + + 0 + + + 2 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + label8 + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + label13 + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 0 + + + 35 + + + 13 + + + 9 + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 11 + + + True + + + 469, 85 + + + label9 + + + label20 + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + label18 + + + MenuItem1 + + + label1 + + + 13 + + + 34 + + + 22 + + + 143, 20 + + + groupBox2 + + + groupBox2 + + + btnClose + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + label19 + + + 143, 21 + + + 95, 12 + + + groupBox1 + + + 0, 35 + + + panTlsMore + + + 729, 60 + + + allowInsecure + + + True + + + True + + + 469, 115 + + + quic + + + groupBox2 + + + h2 + + + kcp + + + 7 + + + 143, 21 + + + 526, 162 + + + 18 + + + 12, 147 + + + 18 + + + groupBox1 + + + label2 + + + groupBox2 + + + 234, 6 + + + groupBox2 + + + 119, 12 + + + 278, 21 + + + True + + + True + + + Bottom + + + 91, 20 + + + 53, 12 + + + 27 + + + groupBox2 + + + groupBox2 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Port + + + groupBox2 + + + Fill + + + 10 + + + groupBox2 + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 0 + + + 75, 23 + + + 4 + + + True + + + 11 + + + groupBox1 + + + 8 + + + *Recommended (none) + + + 4 + + + groupBox1 + + + panel2 + + + 143, 20 + + + 23 + + + 1 + + + 6 + + + 10 + + + groupBox2 + + + 14 + + + True + + + 3, 215 + + + Import configuration file + + + wechat-video + + + 9, 32 + + + btnOK + + + 729, 10 + + + 107, 7 + + + 470, 131 + + + True + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 22 + + + 300, 53 + + + 12, 31 + + + 14 + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + dtls + + + 47, 12 + + + MenuItemImportServer + + + groupBox2 + + + panel2 + + + 0, 534 + + + groupBox1 + + + AddServer5Form + + + wireguard + + + groupBox1 + + + Server + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 303, 17 + + + 2)ws host + + + txtAddress + + + True + + + 2)h2 path + + + True + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 167, 12 + + + 8 + + + Transport + + + groupBox2 + + + * Fill in manually + + + 9, 157 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 396, 54 + + + True + + + 12, 11 + + + 89, 12 + + + 29 + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 1 + + + True + + + txtPath + + + 162, 21 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + txtRequestHost + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Alias (remarks) + + + 124, 157 + + + label7 + + + 4 + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + &OK + + + 7 + + + 3 + + + http + + + 526, 179 + + + 9 + + + groupBox2 + + + menuServer + + + 20 + + + TLS + + + 1 + + + 3 + + + UUID(id) + + + $this + + + MenuItemImportClipboard + + + $this + + + 3 + + + groupBox1 + + + 237, 22 + + + 143, 20 + + + panTlsMore + + + 8 + + + Camouflage domain(host) + + + 0 + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 113, 12 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 192, 28 + + + 203, 12 + + + utp + + + 30 + + + 12 + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 23 + + + 8 + + + 2 + + + 9, 94 + + + label3 + + + srtp + + + 5 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Import URL from clipboard + + + 469, 100 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 185, 12 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 0 + + + True + + + *Default value tcp + + + 31 + + + 124, 242 + + + 9, 246 + + + 353, 147 + + + none + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + label5 + + + 3 + + + label16 + + + groupBox1 + + + 237, 22 + + + 16 + + + 1 + + + 28 + + + + + + groupBox2 + + + Import client configuration + + + 15 + + + 4)QUIC securty + + + 0, 25 + + + cmbSecurity + + + tcp + + + groupBox2 + + + btnGUID + + + 75, 23 + + + 23, 12 + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + Camouflage type + + + 0 + + + groupBox2 + + + NoControl + + + 1)http host Separated by commas (,) + + + label24 + + + 59, 12 + + + panel2 + + + 65, 12 + + + 195, 143 + + + $this + + + True + + + label6 + + + 59, 12 + + + 10 + + + 729, 25 + + + cmbHeaderType + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 526, 197 + + + label14 + + + True + + + zh-Hans + + + 17, 17 + + \ No newline at end of file diff --git a/v2rayN/v2rayN/Forms/AddServer5Form.zh-Hans.resx b/v2rayN/v2rayN/Forms/AddServer5Form.zh-Hans.resx new file mode 100644 index 00000000..5df0dd10 --- /dev/null +++ b/v2rayN/v2rayN/Forms/AddServer5Form.zh-Hans.resx @@ -0,0 +1,302 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 取消(&C) + + + 服务器 + + + 生成(&G) + + + *手填,方便识别管理 + + + 底层传输方式(transport) + + + + 95, 12 + + + 3)QUIC 加密密钥 + + + 95, 12 + + + 4)QUIC 加密方式 + + + 167, 12 + + + 跳过证书验证(allowInsecure) + + + 223, 7 + + + 143, 12 + + + *默认tcp,选错会无法连接 + + + 149, 12 + + + 3)h2 host中间逗号(,)隔开 + + + 127, 32 + + + 211, 20 + + + 107, 12 + + + 传输协议(network) + + + 65, 12 + + + 路径(path) + + + 161, 12 + + + 1)http host中间逗号(,)隔开 + + + 77, 12 + + + 底层传输安全 + + + 197, 12 + + + *tcp或kcp或QUIC伪装类型,默认none + + + 124, 94 + + + 334, 51 + + + 89, 12 + + + 伪装类型(type) + + + 89, 12 + + + 伪装域名(host) + + + 71, 12 + + + *非空(none) + + + 127, 143 + + + 211, 20 + + + 83, 12 + + + 别名(remarks) + + + 113, 12 + + + 加密方式(security) + + + 65, 12 + + + 用户ID(id) + + + 65, 12 + + + 端口(port) + + + 83, 12 + + + 地址(address) + + + 确定(&O) + + + 171, 22 + + + 导入客户端配置 + + + 171, 22 + + + 导入服务端配置 + + + 168, 6 + + + 171, 22 + + + 从剪贴板导入URL + + + + False + + + 92, 21 + + + 导入配置文件 + + + 编辑或添加[VLESS]服务器 + + \ No newline at end of file diff --git a/v2rayN/v2rayN/Forms/MainForm.Designer.cs b/v2rayN/v2rayN/Forms/MainForm.Designer.cs index 7ec70cfe..917e788e 100644 --- a/v2rayN/v2rayN/Forms/MainForm.Designer.cs +++ b/v2rayN/v2rayN/Forms/MainForm.Designer.cs @@ -124,6 +124,7 @@ this.tsbPromotion = new System.Windows.Forms.ToolStripButton(); this.toolStripSeparator11 = new System.Windows.Forms.ToolStripSeparator(); this.tsbClose = new System.Windows.Forms.ToolStripButton(); + this.menuAddVlessServer = new System.Windows.Forms.ToolStripMenuItem(); ((System.ComponentModel.ISupportInitialize)(this.scMain)).BeginInit(); this.scMain.Panel1.SuspendLayout(); this.scMain.Panel2.SuspendLayout(); @@ -176,6 +177,7 @@ this.cmsLv.ImageScalingSize = new System.Drawing.Size(20, 20); this.cmsLv.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.menuAddVmessServer, + this.menuAddVlessServer, this.menuAddShadowsocksServer, this.menuAddSocksServer, this.menuAddCustomServer, @@ -204,7 +206,6 @@ this.menuExport2ShareUrl, this.menuExport2SubContent}); this.cmsLv.Name = "cmsLv"; - this.cmsLv.OwnerItem = this.tsbServer; resources.ApplyResources(this.cmsLv, "cmsLv"); // // menuAddVmessServer @@ -373,7 +374,6 @@ // // tsbServer // - this.tsbServer.DropDown = this.cmsLv; this.tsbServer.Image = global::v2rayN.Properties.Resources.server; resources.ApplyResources(this.tsbServer, "tsbServer"); this.tsbServer.Name = "tsbServer"; @@ -806,6 +806,12 @@ this.tsbClose.Name = "tsbClose"; this.tsbClose.Click += new System.EventHandler(this.tsbClose_Click); // + // menuAddVlessServer + // + this.menuAddVlessServer.Name = "menuAddVlessServer"; + resources.ApplyResources(this.menuAddVlessServer, "menuAddVlessServer"); + this.menuAddVlessServer.Click += new System.EventHandler(this.menuAddVlessServer_Click); + // // MainForm // resources.ApplyResources(this, "$this"); @@ -936,6 +942,7 @@ private System.Windows.Forms.ToolStripMenuItem tsbTestMe; private System.Windows.Forms.ToolStripButton tsbReload; private System.Windows.Forms.ToolStripButton tsbQRCodeSwitch; + private System.Windows.Forms.ToolStripMenuItem menuAddVlessServer; } } diff --git a/v2rayN/v2rayN/Forms/MainForm.cs b/v2rayN/v2rayN/Forms/MainForm.cs index 3ca10813..be5fe009 100644 --- a/v2rayN/v2rayN/Forms/MainForm.cs +++ b/v2rayN/v2rayN/Forms/MainForm.cs @@ -404,7 +404,7 @@ namespace v2rayN.Forms { return; } - + } #endregion @@ -513,6 +513,19 @@ namespace v2rayN.Forms LoadV2ray(); } } + else if (config.vmess[index].configType == (int)EConfigType.Vless) + { + AddServer5Form fm = new AddServer5Form + { + EditIndex = index + }; + if (fm.ShowDialog() == DialogResult.OK) + { + //刷新 + RefreshServers(); + LoadV2ray(); + } + } else { AddServer2Form fm2 = new AddServer2Form @@ -600,6 +613,20 @@ namespace v2rayN.Forms } } + private void menuAddVlessServer_Click(object sender, EventArgs e) + { + var fm = new AddServer5Form + { + EditIndex = -1 + }; + if (fm.ShowDialog() == DialogResult.OK) + { + //刷新 + RefreshServers(); + LoadV2ray(); + } + } + private void menuRemoveServer_Click(object sender, EventArgs e) { @@ -1604,5 +1631,6 @@ namespace v2rayN.Forms #endregion + } } diff --git a/v2rayN/v2rayN/Forms/MainForm.resx b/v2rayN/v2rayN/Forms/MainForm.resx index 82105967..cca0d7a7 100644 --- a/v2rayN/v2rayN/Forms/MainForm.resx +++ b/v2rayN/v2rayN/Forms/MainForm.resx @@ -134,6 +134,12 @@ Add [VMess] server + + 355, 22 + + + Add [VLESS] server + 355, 22 @@ -284,20 +290,8 @@ Export subscription (base64) share to clipboard - - Magenta - - - 64, 53 - - - Servers - - - ImageAboveText - - 356, 556 + 356, 600 cmsLv @@ -419,6 +413,18 @@ 0 + + Magenta + + + 64, 53 + + + Servers + + + ImageAboveText + 17, 17 @@ -753,13 +759,13 @@ 6, 56 - 125, 22 + 180, 22 Settings - 125, 22 + 180, 22 Updates @@ -1490,6 +1496,12 @@ System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + menuAddVlessServer + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + MainForm diff --git a/v2rayN/v2rayN/Mode/EConfigType.cs b/v2rayN/v2rayN/Mode/EConfigType.cs index 733c8556..2d7ab219 100644 --- a/v2rayN/v2rayN/Mode/EConfigType.cs +++ b/v2rayN/v2rayN/Mode/EConfigType.cs @@ -6,6 +6,7 @@ namespace v2rayN.Mode Vmess = 1, Custom = 2, Shadowsocks = 3, - Socks = 4 + Socks = 4, + Vless = 5 } } diff --git a/v2rayN/v2rayN/Mode/V2rayConfig.cs b/v2rayN/v2rayN/Mode/V2rayConfig.cs index 5d4ab5df..be1ad4a0 100644 --- a/v2rayN/v2rayN/Mode/V2rayConfig.cs +++ b/v2rayN/v2rayN/Mode/V2rayConfig.cs @@ -132,6 +132,13 @@ namespace v2rayN.Mode /// /// public List clients { get; set; } + + + /// + /// VLESS + /// + public string decryption { get; set; } + } public class UsersItem @@ -152,6 +159,11 @@ namespace v2rayN.Mode /// /// public string security { get; set; } + + /// + /// VLESS + /// + public string encryption { get; set; } } public class Sniffing { diff --git a/v2rayN/v2rayN/v2rayN.csproj b/v2rayN/v2rayN/v2rayN.csproj index 308d38cd..8a004c44 100644 --- a/v2rayN/v2rayN/v2rayN.csproj +++ b/v2rayN/v2rayN/v2rayN.csproj @@ -107,6 +107,12 @@ Component + + Form + + + AddServer5Form.cs + Form @@ -231,6 +237,14 @@ AddServer3Form.cs Designer + + AddServer5Form.cs + Designer + + + AddServer5Form.cs + Designer + AddServerForm.cs Designer From 45738a716075850b25e9a350c17230f40dcd1846 Mon Sep 17 00:00:00 2001 From: 2dust <31833384+2dust@users.noreply.github.com> Date: Sat, 8 Aug 2020 12:43:34 +0800 Subject: [PATCH 10/54] up vless 2 --- v2rayN/v2rayN/Forms/AddServer5Form.cs | 28 +- v2rayN/v2rayN/Forms/AddServer5Form.resx | 108 +- .../v2rayN/Forms/AddServer5Form.zh-Hans.resx | 112 +- v2rayN/v2rayN/Forms/AddServerForm.Designer.cs | 32 +- v2rayN/v2rayN/Forms/AddServerForm.cs | 24 +- v2rayN/v2rayN/Forms/AddServerForm.resx | 2262 ++++++++-------- .../v2rayN/Forms/AddServerForm.zh-Hans.resx | 2 +- v2rayN/v2rayN/Forms/MainForm.Designer.cs | 192 +- v2rayN/v2rayN/Forms/MainForm.resx | 2405 +++++++++-------- v2rayN/v2rayN/Forms/MainForm.zh-Hans.resx | 177 +- v2rayN/v2rayN/Global.cs | 20 + v2rayN/v2rayN/Handler/ConfigHandler.cs | 51 + v2rayN/v2rayN/Handler/V2rayConfigHandler.cs | 52 +- v2rayN/v2rayN/Mode/Config.cs | 4 + v2rayN/v2rayN/Properties/AssemblyInfo.cs | 2 +- 15 files changed, 2799 insertions(+), 2672 deletions(-) diff --git a/v2rayN/v2rayN/Forms/AddServer5Form.cs b/v2rayN/v2rayN/Forms/AddServer5Form.cs index 568ebd63..b11974e5 100644 --- a/v2rayN/v2rayN/Forms/AddServer5Form.cs +++ b/v2rayN/v2rayN/Forms/AddServer5Form.cs @@ -57,7 +57,7 @@ namespace v2rayN.Forms txtAddress.Text = ""; txtPort.Text = ""; txtId.Text = ""; - cmbSecurity.Text = Global.DefaultSecurity; + cmbSecurity.Text = Global.None; cmbNetwork.Text = Global.DefaultNetwork; txtRemarks.Text = ""; @@ -152,7 +152,7 @@ namespace v2rayN.Forms vmessItem.streamSecurity = streamSecurity; vmessItem.allowInsecure = allowInsecure; - if (ConfigHandler.AddServer(ref config, vmessItem, EditIndex) == 0) + if (ConfigHandler.AddVlessServer(ref config, vmessItem, EditIndex) == 0) { this.DialogResult = DialogResult.OK; } @@ -172,6 +172,18 @@ namespace v2rayN.Forms this.DialogResult = DialogResult.Cancel; } + private void cmbStreamSecurity_SelectedIndexChanged(object sender, EventArgs e) + { + string security = cmbStreamSecurity.Text; + if (Utils.IsNullOrEmpty(security)) + { + panTlsMore.Hide(); + } + else + { + panTlsMore.Show(); + } + } #region 导入客户端/服务端配置 @@ -268,17 +280,5 @@ namespace v2rayN.Forms } #endregion - private void cmbStreamSecurity_SelectedIndexChanged(object sender, EventArgs e) - { - string security = cmbStreamSecurity.Text; - if (Utils.IsNullOrEmpty(security)) - { - panTlsMore.Hide(); - } - else - { - panTlsMore.Show(); - } - } } } diff --git a/v2rayN/v2rayN/Forms/AddServer5Form.resx b/v2rayN/v2rayN/Forms/AddServer5Form.resx index 57db8697..154a4a9c 100644 --- a/v2rayN/v2rayN/Forms/AddServer5Form.resx +++ b/v2rayN/v2rayN/Forms/AddServer5Form.resx @@ -306,9 +306,6 @@ groupBox2 - - 17 - toolStripSeparator1 @@ -393,8 +390,8 @@ ws - - 11 + + 729, 60 9, 66 @@ -423,6 +420,9 @@ panel1 + + label14 + groupBox2 @@ -483,6 +483,9 @@ 95, 12 + + NoControl + 350, 32 @@ -528,8 +531,8 @@ label23 - - groupBox1 + + allowInsecure 143, 20 @@ -552,8 +555,8 @@ 0 - - 2 + + 47, 12 System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -615,8 +618,8 @@ 13 - - 34 + + label7 22 @@ -654,11 +657,8 @@ panTlsMore - - 729, 60 - - - allowInsecure + + 34 True @@ -717,9 +717,6 @@ 119, 12 - - 278, 21 - True @@ -732,20 +729,14 @@ 91, 20 - - 53, 12 - 27 - - groupBox2 - groupBox2 - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 17 Port @@ -795,6 +786,9 @@ *Recommended (none) + + 195, 143 + 4 @@ -813,9 +807,6 @@ 1 - - 6 - 10 @@ -876,9 +867,6 @@ dtls - - 47, 12 - MenuItemImportServer @@ -888,6 +876,9 @@ panel2 + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + 0, 534 @@ -915,8 +906,8 @@ 2)ws host - - txtAddress + + 6 True @@ -957,9 +948,6 @@ True - - 12, 11 - 89, 12 @@ -996,9 +984,6 @@ 124, 157 - - label7 - 4 @@ -1026,6 +1011,9 @@ groupBox2 + + Camouflage type + menuServer @@ -1071,8 +1059,8 @@ 8 - - Camouflage domain(host) + + 15 0 @@ -1083,6 +1071,9 @@ 113, 12 + + 11 + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -1095,6 +1086,9 @@ utp + + txtAddress + 30 @@ -1110,6 +1104,9 @@ 8 + + groupBox1 + 2 @@ -1137,6 +1134,9 @@ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Camouflage domain(host) + 185, 12 @@ -1206,9 +1206,6 @@ Import client configuration - - 15 - 4)QUIC securty @@ -1239,8 +1236,8 @@ groupBox1 - - Camouflage type + + 12, 11 0 @@ -1248,8 +1245,8 @@ groupBox2 - - NoControl + + 278, 21 1)http host Separated by commas (,) @@ -1266,8 +1263,8 @@ 65, 12 - - 195, 143 + + groupBox2 $this @@ -1296,8 +1293,11 @@ 526, 197 - - label14 + + 2 + + + 53, 12 True diff --git a/v2rayN/v2rayN/Forms/AddServer5Form.zh-Hans.resx b/v2rayN/v2rayN/Forms/AddServer5Form.zh-Hans.resx index 5df0dd10..b5001a79 100644 --- a/v2rayN/v2rayN/Forms/AddServer5Form.zh-Hans.resx +++ b/v2rayN/v2rayN/Forms/AddServer5Form.zh-Hans.resx @@ -120,9 +120,6 @@ 取消(&C) - - 服务器 - 生成(&G) @@ -133,6 +130,51 @@ 底层传输方式(transport) + + 71, 12 + + + *非空(none) + + + 143, 143 + + + 195, 20 + + + 83, 12 + + + 别名(remarks) + + + 125, 12 + + + 加密方式(decryption) + + + 65, 12 + + + 用户ID(id) + + + 65, 12 + + + 端口(port) + + + 83, 12 + + + 地址(address) + + + 服务器 + 95, 12 @@ -167,7 +209,7 @@ 3)h2 host中间逗号(,)隔开 - 127, 32 + 124, 32 211, 20 @@ -220,51 +262,19 @@ 伪装域名(host) - - 71, 12 - - - *非空(none) - - - 127, 143 - - - 211, 20 - - - 83, 12 - - - 别名(remarks) - - - 113, 12 - - - 加密方式(security) - - - 65, 12 - - - 用户ID(id) - - - 65, 12 - - - 端口(port) - - - 83, 12 - - - 地址(address) - 确定(&O) + + + False + + + 92, 21 + + + 导入配置文件 + 171, 22 @@ -286,16 +296,6 @@ 从剪贴板导入URL - - - False - - - 92, 21 - - - 导入配置文件 - 编辑或添加[VLESS]服务器 diff --git a/v2rayN/v2rayN/Forms/AddServerForm.Designer.cs b/v2rayN/v2rayN/Forms/AddServerForm.Designer.cs index a96b32ab..bdb027f6 100644 --- a/v2rayN/v2rayN/Forms/AddServerForm.Designer.cs +++ b/v2rayN/v2rayN/Forms/AddServerForm.Designer.cs @@ -87,14 +87,15 @@ // // btnClose // - this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel; resources.ApplyResources(this.btnClose, "btnClose"); + this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel; this.btnClose.Name = "btnClose"; this.btnClose.UseVisualStyleBackColor = true; this.btnClose.Click += new System.EventHandler(this.btnClose_Click); // // groupBox1 // + resources.ApplyResources(this.groupBox1, "groupBox1"); this.groupBox1.Controls.Add(this.btnGUID); this.groupBox1.Controls.Add(this.label13); this.groupBox1.Controls.Add(this.groupBox2); @@ -111,7 +112,6 @@ this.groupBox1.Controls.Add(this.label2); this.groupBox1.Controls.Add(this.txtAddress); this.groupBox1.Controls.Add(this.label1); - resources.ApplyResources(this.groupBox1, "groupBox1"); this.groupBox1.Name = "groupBox1"; this.groupBox1.TabStop = false; // @@ -129,6 +129,7 @@ // // groupBox2 // + resources.ApplyResources(this.groupBox2, "groupBox2"); this.groupBox2.Controls.Add(this.label24); this.groupBox2.Controls.Add(this.label23); this.groupBox2.Controls.Add(this.panTlsMore); @@ -149,7 +150,6 @@ this.groupBox2.Controls.Add(this.label11); this.groupBox2.Controls.Add(this.label10); this.groupBox2.Controls.Add(this.cmbHeaderType); - resources.ApplyResources(this.groupBox2, "groupBox2"); this.groupBox2.Name = "groupBox2"; this.groupBox2.TabStop = false; // @@ -165,9 +165,9 @@ // // panTlsMore // + resources.ApplyResources(this.panTlsMore, "panTlsMore"); this.panTlsMore.Controls.Add(this.label21); this.panTlsMore.Controls.Add(this.cmbAllowInsecure); - resources.ApplyResources(this.panTlsMore, "panTlsMore"); this.panTlsMore.Name = "panTlsMore"; // // label21 @@ -177,13 +177,13 @@ // // cmbAllowInsecure // + resources.ApplyResources(this.cmbAllowInsecure, "cmbAllowInsecure"); this.cmbAllowInsecure.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.cmbAllowInsecure.FormattingEnabled = true; this.cmbAllowInsecure.Items.AddRange(new object[] { resources.GetString("cmbAllowInsecure.Items"), resources.GetString("cmbAllowInsecure.Items1"), resources.GetString("cmbAllowInsecure.Items2")}); - resources.ApplyResources(this.cmbAllowInsecure, "cmbAllowInsecure"); this.cmbAllowInsecure.Name = "cmbAllowInsecure"; // // label9 @@ -203,6 +203,7 @@ // // cmbNetwork // + resources.ApplyResources(this.cmbNetwork, "cmbNetwork"); this.cmbNetwork.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.cmbNetwork.FormattingEnabled = true; this.cmbNetwork.Items.AddRange(new object[] { @@ -211,7 +212,6 @@ resources.GetString("cmbNetwork.Items2"), resources.GetString("cmbNetwork.Items3"), resources.GetString("cmbNetwork.Items4")}); - resources.ApplyResources(this.cmbNetwork, "cmbNetwork"); this.cmbNetwork.Name = "cmbNetwork"; this.cmbNetwork.SelectedIndexChanged += new System.EventHandler(this.cmbNetwork_SelectedIndexChanged); // @@ -252,12 +252,12 @@ // // cmbStreamSecurity // + resources.ApplyResources(this.cmbStreamSecurity, "cmbStreamSecurity"); this.cmbStreamSecurity.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.cmbStreamSecurity.FormattingEnabled = true; this.cmbStreamSecurity.Items.AddRange(new object[] { resources.GetString("cmbStreamSecurity.Items"), resources.GetString("cmbStreamSecurity.Items1")}); - resources.ApplyResources(this.cmbStreamSecurity, "cmbStreamSecurity"); this.cmbStreamSecurity.Name = "cmbStreamSecurity"; this.cmbStreamSecurity.SelectedIndexChanged += new System.EventHandler(this.cmbStreamSecurity_SelectedIndexChanged); // @@ -283,6 +283,7 @@ // // cmbHeaderType // + resources.ApplyResources(this.cmbHeaderType, "cmbHeaderType"); this.cmbHeaderType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.cmbHeaderType.FormattingEnabled = true; this.cmbHeaderType.Items.AddRange(new object[] { @@ -293,7 +294,6 @@ resources.GetString("cmbHeaderType.Items4"), resources.GetString("cmbHeaderType.Items5"), resources.GetString("cmbHeaderType.Items6")}); - resources.ApplyResources(this.cmbHeaderType, "cmbHeaderType"); this.cmbHeaderType.Name = "cmbHeaderType"; // // label8 @@ -303,6 +303,7 @@ // // cmbSecurity // + resources.ApplyResources(this.cmbSecurity, "cmbSecurity"); this.cmbSecurity.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.cmbSecurity.FormattingEnabled = true; this.cmbSecurity.Items.AddRange(new object[] { @@ -310,7 +311,6 @@ resources.GetString("cmbSecurity.Items1"), resources.GetString("cmbSecurity.Items2"), resources.GetString("cmbSecurity.Items3")}); - resources.ApplyResources(this.cmbSecurity, "cmbSecurity"); this.cmbSecurity.Name = "cmbSecurity"; // // txtRemarks @@ -370,9 +370,9 @@ // // panel2 // + resources.ApplyResources(this.panel2, "panel2"); this.panel2.Controls.Add(this.btnClose); this.panel2.Controls.Add(this.btnOK); - resources.ApplyResources(this.panel2, "panel2"); this.panel2.Name = "panel2"; // // btnOK @@ -389,42 +389,42 @@ // // menuServer // + resources.ApplyResources(this.menuServer, "menuServer"); this.menuServer.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.MenuItem1}); - resources.ApplyResources(this.menuServer, "menuServer"); this.menuServer.Name = "menuServer"; // // MenuItem1 // + resources.ApplyResources(this.MenuItem1, "MenuItem1"); this.MenuItem1.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.MenuItemImportClient, this.MenuItemImportServer, this.toolStripSeparator1, this.MenuItemImportClipboard}); this.MenuItem1.Name = "MenuItem1"; - resources.ApplyResources(this.MenuItem1, "MenuItem1"); // // MenuItemImportClient // - this.MenuItemImportClient.Name = "MenuItemImportClient"; resources.ApplyResources(this.MenuItemImportClient, "MenuItemImportClient"); + this.MenuItemImportClient.Name = "MenuItemImportClient"; this.MenuItemImportClient.Click += new System.EventHandler(this.MenuItemImportClient_Click); // // MenuItemImportServer // - this.MenuItemImportServer.Name = "MenuItemImportServer"; resources.ApplyResources(this.MenuItemImportServer, "MenuItemImportServer"); + this.MenuItemImportServer.Name = "MenuItemImportServer"; this.MenuItemImportServer.Click += new System.EventHandler(this.MenuItemImportServer_Click); // // toolStripSeparator1 // - this.toolStripSeparator1.Name = "toolStripSeparator1"; resources.ApplyResources(this.toolStripSeparator1, "toolStripSeparator1"); + this.toolStripSeparator1.Name = "toolStripSeparator1"; // // MenuItemImportClipboard // - this.MenuItemImportClipboard.Name = "MenuItemImportClipboard"; resources.ApplyResources(this.MenuItemImportClipboard, "MenuItemImportClipboard"); + this.MenuItemImportClipboard.Name = "MenuItemImportClipboard"; this.MenuItemImportClipboard.Click += new System.EventHandler(this.MenuItemImportClipboard_Click); // // AddServerForm diff --git a/v2rayN/v2rayN/Forms/AddServerForm.cs b/v2rayN/v2rayN/Forms/AddServerForm.cs index e2747b6c..a6a751e4 100644 --- a/v2rayN/v2rayN/Forms/AddServerForm.cs +++ b/v2rayN/v2rayN/Forms/AddServerForm.cs @@ -180,6 +180,18 @@ namespace v2rayN.Forms this.DialogResult = DialogResult.Cancel; } + private void cmbStreamSecurity_SelectedIndexChanged(object sender, EventArgs e) + { + string security = cmbStreamSecurity.Text; + if (Utils.IsNullOrEmpty(security)) + { + panTlsMore.Hide(); + } + else + { + panTlsMore.Show(); + } + } #region 导入客户端/服务端配置 @@ -278,17 +290,5 @@ namespace v2rayN.Forms } #endregion - private void cmbStreamSecurity_SelectedIndexChanged(object sender, EventArgs e) - { - string security = cmbStreamSecurity.Text; - if (Utils.IsNullOrEmpty(security)) - { - panTlsMore.Hide(); - } - else - { - panTlsMore.Show(); - } - } } } diff --git a/v2rayN/v2rayN/Forms/AddServerForm.resx b/v2rayN/v2rayN/Forms/AddServerForm.resx index 832dd782..b4cd8bfa 100644 --- a/v2rayN/v2rayN/Forms/AddServerForm.resx +++ b/v2rayN/v2rayN/Forms/AddServerForm.resx @@ -117,1249 +117,1249 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 396, 17 - - - 75, 23 - - - + 4 - - &Cancel + + + 113, 12 - - btnClose - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - panel2 - - - 0 - - - 411, 83 - - - 75, 23 - - - 23 - - - &Generate - - - btnGUID - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 0 - - - True + + 9 285, 179 - - 113, 12 - - - 22 - - - * Fill in manually - - - label13 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 1 - - - True - - - - NoControl - - - 526, 197 - - - 65, 12 - - - 35 - - - 3)QUIC key - - - label24 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 0 - - - True - - - NoControl - - - 470, 131 - - - 89, 12 - - - 34 - - - 4)QUIC securty - - - label23 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 1 - - - True - - - 12, 11 - - - 83, 12 - - - 31 - - - allowInsecure - - - label21 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - panTlsMore - - - 0 - - - - - - true - - - false - - - 107, 7 - - - 91, 20 - - - 30 - - - cmbAllowInsecure - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - panTlsMore - - - 1 - - - 284, 234 - - - 338, 35 - - - 33 - - - panTlsMore - - - System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 2 - - - True - - - 350, 32 - - - 113, 12 - - - 15 - - - *Default value tcp - - - label9 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 3 - - - True - - - 469, 115 - - - 203, 12 - - - 29 - - - 3)h2 host Separated by commas (,) - - - label20 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 4 - - - 124, 157 - - - True - - - 396, 54 - - - 28 - - - txtPath - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 124, 62 groupBox2 - - 5 - - - tcp - - - kcp - - - ws - - - h2 - - - quic - - - 192, 28 - - - 143, 20 - - - 12 - - - cmbNetwork - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - + 6 - - True - - - 9, 32 - - - 167, 12 - - - 13 - - - Transport protocol(network) - - - label7 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 7 - - - True - - - 9, 157 - - - 29, 12 - - - 27 - Path - - label19 + + 83, 12 - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Transport protocol(network) - - groupBox2 + + 7 - - 8 + + panTlsMore - - True + + 1 - - 526, 179 - - - 59, 12 - - - 26 - - - 2)h2 path - - - label18 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 9 - - - True - - - 469, 100 - - - 59, 12 - - - 25 - - - 2)ws host - - - label17 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 10 - - - True - - - 526, 162 - - - 59, 12 - - - 24 - - - 1)ws path - - - label16 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 11 - - - True - - - 469, 85 - - - 215, 12 - - - 23 - - - 1)http host Separated by commas (,) - - - label14 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 12 - - - True - - - 9, 246 - - - 23, 12 - - - 22 - - - TLS + + 6, 12 label15 + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + cmbStreamSecurity + + + 3)h2 host Separated by commas (,) + + + + Top + + + + 3 + + + 17 + + + false + + + 19 + + + True + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 6 + + + 21 + + + 411, 83 + + + Address + + + groupBox1 + + + 59, 12 + + + 1)ws path + + + 19 + + + True + + + 26 + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + txtId + + + True + + + 729, 499 + + + + + + 12, 89 + + + groupBox2 + + + tls + + + True + + + 299, 12 + + + panTlsMore + + + 10 + + + aes-128-gcm + + + groupBox1 + + + 127, 85 + + + 16 + + + 12, 179 + + + &Cancel + + + label10 + + + 723, 281 + + + 5 + + + label21 + + + System.Windows.Forms.MenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 143, 12 + + + groupBox2 + + + toolStripSeparator1 + + + NoControl + + + 21 + + + label11 + + + 5 + + + 158, 90 + + + 2 + + + 29, 12 + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 234, 6 + + + 237, 22 + + + 12 + + + TLS + + + 3)QUIC key + + + 127, 56 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + txtPort + + + 2 + + + groupBox2 + + + Bottom + + + True + + + 127, 175 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 29, 12 + + + ws + + + 13 + + + 9, 66 + + + 15 + + + Import server configuration + + + 173, 12 + + + 1 + + + 7 + + + 15 + + + label17 + + + panel1 + + + groupBox2 + + + 5 + + + 215, 12 + + + 0, 0 + + + 396, 17 + + + 338, 35 + + + 12, 60 + + + MenuItemImportClient + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + &Generate + + + Encryption method (security) + + + none + + + txtRemarks + + + 47, 12 + + + v2rayN.Forms.BaseForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + + + groupBox2 + + + true + + + panTlsMore + + + True + + + 127, 114 + + + 284, 234 + + + 95, 12 + + + 350, 32 + + + cmbNetwork + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 22 + + + groupBox1 + + + True + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + groupBox2 - - 13 + + 127, 27 - - + + label12 - - tls + + AlterId - - 124, 242 - - - 143, 20 - - - 21 - - - cmbStreamSecurity - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 14 - - + True 282, 66 - - 299, 12 + + 12 - - 20 + + 25 - - *tcp or kcp or QUIC camouflage type, default none + + label23 - - label12 + + allowInsecure + + + 143, 20 + + + 1 + + + $this + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 33 + + + 6 + + + none + + + 0 + + + 47, 12 + + + label8 + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + label13 + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + txtAlterId + + + 35 + + + 13 + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 11 + + + True + + + 469, 85 + + + label9 + + + label20 + + + 124, 157 + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + label18 + + + MenuItem1 + + + groupBox1 + + + 13 + + + 34 + + + 143, 20 + + + groupBox2 + + + True + + + btnClose System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - groupBox2 + + label19 - - 15 + + 143, 21 - - 158, 90 + + 95, 12 - + + groupBox1 + + + 0, 35 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 729, 60 + + True - - 300, 53 + + 469, 115 - - 16 + + $this - - txtRequestHost + + quic - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + groupBox2 + + + h2 + + + kcp + + + 7 + + + 143, 21 + + + 526, 162 + + + 18 + + + 12, 147 + + + 18 + + + groupBox1 + + + label2 + + + groupBox2 + + + 24 + + + groupBox2 + + + 119, 12 + + + 278, 21 + + + True + + + True + + + Bottom + + + 91, 20 + + + 53, 12 + + + 27 groupBox2 - - 16 + + 23 - - True - - - 9, 66 - - - 95, 12 - - - 19 - - - Camouflage type - - - label11 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + groupBox2 17 - - True + + Port - - 9, 94 - - - 143, 12 - - - 17 - - - Camouflage domain(host) - - - label10 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + groupBox2 - - 18 + + Fill - - none + + chacha20-poly1305 - - http + + 12 - - srtp - - - utp - - - wechat-video - - - dtls - - - wireguard - - - 124, 62 - - - 143, 20 - - - 18 - - - cmbHeaderType - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 19 - - - Bottom - - - 3, 215 - - - 723, 281 - - - 21 - - - Transport - - + groupBox2 System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - groupBox1 - - - 2 - - - True - - - 353, 147 - - - 119, 12 - - - 14 - - - *Recommended (auto) - - - label8 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 3 - - - aes-128-gcm - - - chacha20-poly1305 - - - auto - - - none - - - 195, 143 - - - 143, 20 - - - 6 - - - cmbSecurity - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 4 - - - 127, 175 - - - 143, 21 - - - 11 - - - txtRemarks - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - groupBox1 - - 5 - - - True - - - 12, 179 - - - 95, 12 - - - 10 - - - Alias (remarks) - - - label6 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 6 - - - True - - - 12, 147 - - - 173, 12 - - - 8 - - - Encryption method (security) - - - label5 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 7 - - - 127, 114 - - - 143, 21 - - - 7 - - - txtAlterId - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 8 - - - True - - - 12, 118 - - - 47, 12 - - - 6 - - - AlterId - - - label4 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 9 - - - 127, 85 - - - 278, 21 - - - 5 - - - txtId - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 10 - - - True - - - 12, 89 - - - 53, 12 - - - 4 - - - UUID(id) - - - label3 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 11 - - - 127, 56 - - - 143, 21 - - - 3 - - - txtPort - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 12 - - - True - - - 12, 60 - - - 29, 12 - - - 2 - - - Port - - - label2 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 13 - - - 127, 27 - - - 359, 21 - - - 1 - - - txtAddress - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 14 - - - True - - - 12, 31 - - - 47, 12 - - - 0 - - - Address - - - label1 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 15 - - - Fill - - - 0, 35 - - - 729, 499 - - - 3 - - - Server - - - groupBox1 - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 0 - - - 303, 17 - - - 75, 23 - - - 5 - - - &OK - - - btnOK - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - panel2 - - - 1 - - - Bottom - - - 0, 534 - - - 729, 60 - - - 7 - - - panel2 - System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - $this + + 0 - - 1 + + 75, 23 - - Top + + 4 - - 0, 25 + + True - - 729, 10 + + 11 - - 6 - - - panel1 - - - System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 2 - - - 17, 17 - - - 237, 22 - - - Import client configuration - - - 237, 22 - - - Import server configuration - - - 234, 6 - - - 237, 22 - - - Import URL from clipboard - - - 162, 21 - - - Import configuration file - - - 0, 0 - - - 729, 25 + + groupBox1 8 - - menuServer + + *Recommended (auto) - - System.Windows.Forms.MenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 4 - - $this + + groupBox1 - - 3 + + panel2 - + + 143, 20 + + + 23 + + + 1 + + + 10 + + + 14 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + True - - - 6, 12 - - 729, 594 + + 3, 215 - - Edit or add a [VMess] server + + Import configuration file - - MenuItem1 + + wechat-video - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 23, 12 - - MenuItemImportClient + + 729, 10 - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 470, 131 + + + True + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 22 + + + 300, 53 + + + 1)http host Separated by commas (,) + + + 12, 31 + + + 14 + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + dtls MenuItemImportServer - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + groupBox2 - - toolStripSeparator1 + + panel2 - - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - MenuItemImportClipboard + + 0, 534 - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + groupBox1 AddServerForm - - v2rayN.Forms.BaseForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + + wireguard + + groupBox1 + + + + + + 124, 242 + + + Server + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 303, 17 + + + 2)ws host + + + groupBox1 + + + 6 + + + True + + + 2)h2 path + + + True + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 167, 12 + + + 8 + + + Transport + + + groupBox2 + + + * Fill in manually + + + 9, 157 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 396, 54 + + + True + + + 12, 11 + + + 89, 12 + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 143, 21 + + + 1 + + + 65, 12 + + + txtPath + + + 162, 21 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + txtRequestHost + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Alias (remarks) + + + groupBox2 + + + label7 + + + 4 + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + &OK + + + 7 + + + 3 + + + http + + + label1 + + + True + + + 526, 179 + + + 9 + + + groupBox2 + + + menuServer + + + 20 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 1 + + + 3 + + + UUID(id) + + + $this + + + MenuItemImportClipboard + + + $this + + + 3 + + + groupBox1 + + + cmbAllowInsecure + + + 237, 22 + + + 143, 20 + + + True + + + 8 + + + 0 + + + 15 + + + 0 + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 113, 12 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 192, 28 + + + 203, 12 + + + utp + + + txtAddress + + + 30 + + + 14 + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 469, 100 + + + 359, 21 + + + 29 + + + auto + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 2 + + + 9, 94 + + + label3 + + + srtp + + + 5 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Import URL from clipboard + + + True + + + 75, 23 + + + Camouflage domain(host) + + + *Default value tcp + + + 0 + + + 729, 594 + + + label4 + + + 31 + + + True + + + 9, 246 + + + 353, 147 + + + Edit or add a [VMess] server + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 8 + + + groupBox1 + + + label5 + + + 3 + + + label16 + + + btnOK + + + 237, 22 + + + 16 + + + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 28 + + + 107, 7 + + + groupBox2 + + + Import client configuration + + + 12, 118 + + + 4)QUIC securty + + + 0, 25 + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + cmbSecurity + + + tcp + + + 6 + + + btnGUID + + + 75, 23 + + + *tcp or kcp or QUIC camouflage type, default none + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + Camouflage type + + + 0 + + + groupBox2 + + + NoControl + + + 9, 32 + + + label24 + + + 59, 12 + + + panel2 + + + 11 + + + 195, 143 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + label6 + + + 59, 12 + + + 10 + + + 729, 25 + + + cmbHeaderType + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 526, 197 + + + 2 + + + label14 + + + True + + + 17, 17 + \ No newline at end of file diff --git a/v2rayN/v2rayN/Forms/AddServerForm.zh-Hans.resx b/v2rayN/v2rayN/Forms/AddServerForm.zh-Hans.resx index 62a6aac4..ac1c4911 100644 --- a/v2rayN/v2rayN/Forms/AddServerForm.zh-Hans.resx +++ b/v2rayN/v2rayN/Forms/AddServerForm.zh-Hans.resx @@ -167,7 +167,7 @@ 3)h2 host中间逗号(,)隔开 - 127, 32 + 124, 32 211, 20 diff --git a/v2rayN/v2rayN/Forms/MainForm.Designer.cs b/v2rayN/v2rayN/Forms/MainForm.Designer.cs index 917e788e..d6d2b0fc 100644 --- a/v2rayN/v2rayN/Forms/MainForm.Designer.cs +++ b/v2rayN/v2rayN/Forms/MainForm.Designer.cs @@ -34,6 +34,7 @@ this.lvServers = new v2rayN.Base.ListViewFlickerFree(); this.cmsLv = new System.Windows.Forms.ContextMenuStrip(this.components); this.menuAddVmessServer = new System.Windows.Forms.ToolStripMenuItem(); + this.menuAddVlessServer = new System.Windows.Forms.ToolStripMenuItem(); this.menuAddShadowsocksServer = new System.Windows.Forms.ToolStripMenuItem(); this.menuAddSocksServer = new System.Windows.Forms.ToolStripMenuItem(); this.menuAddCustomServer = new System.Windows.Forms.ToolStripMenuItem(); @@ -61,8 +62,8 @@ this.menuExport2ServerConfig = new System.Windows.Forms.ToolStripMenuItem(); this.menuExport2ShareUrl = new System.Windows.Forms.ToolStripMenuItem(); this.menuExport2SubContent = new System.Windows.Forms.ToolStripMenuItem(); - this.tsbServer = new System.Windows.Forms.ToolStripDropDownButton(); this.qrCodeControl = new v2rayN.Forms.QRCodeControl(); + this.tsbServer = new System.Windows.Forms.ToolStripDropDownButton(); this.notifyMain = new System.Windows.Forms.NotifyIcon(this.components); this.cmsMain = new System.Windows.Forms.ContextMenuStrip(this.components); this.menuSysAgentMode = new System.Windows.Forms.ToolStripMenuItem(); @@ -124,7 +125,6 @@ this.tsbPromotion = new System.Windows.Forms.ToolStripButton(); this.toolStripSeparator11 = new System.Windows.Forms.ToolStripSeparator(); this.tsbClose = new System.Windows.Forms.ToolStripButton(); - this.menuAddVlessServer = new System.Windows.Forms.ToolStripMenuItem(); ((System.ComponentModel.ISupportInitialize)(this.scMain)).BeginInit(); this.scMain.Panel1.SuspendLayout(); this.scMain.Panel2.SuspendLayout(); @@ -145,17 +145,19 @@ // // scMain.Panel1 // + resources.ApplyResources(this.scMain.Panel1, "scMain.Panel1"); this.scMain.Panel1.Controls.Add(this.lvServers); // // scMain.Panel2 // + resources.ApplyResources(this.scMain.Panel2, "scMain.Panel2"); this.scMain.Panel2.Controls.Add(this.qrCodeControl); this.scMain.TabStop = false; // // lvServers // - this.lvServers.ContextMenuStrip = this.cmsLv; resources.ApplyResources(this.lvServers, "lvServers"); + this.lvServers.ContextMenuStrip = this.cmsLv; this.lvServers.FullRowSelect = true; this.lvServers.GridLines = true; this.lvServers.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable; @@ -174,6 +176,7 @@ // // cmsLv // + resources.ApplyResources(this.cmsLv, "cmsLv"); this.cmsLv.ImageScalingSize = new System.Drawing.Size(20, 20); this.cmsLv.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.menuAddVmessServer, @@ -206,193 +209,200 @@ this.menuExport2ShareUrl, this.menuExport2SubContent}); this.cmsLv.Name = "cmsLv"; - resources.ApplyResources(this.cmsLv, "cmsLv"); + this.cmsLv.OwnerItem = this.tsbServer; // // menuAddVmessServer // - this.menuAddVmessServer.Name = "menuAddVmessServer"; resources.ApplyResources(this.menuAddVmessServer, "menuAddVmessServer"); + this.menuAddVmessServer.Name = "menuAddVmessServer"; this.menuAddVmessServer.Click += new System.EventHandler(this.menuAddVmessServer_Click); // + // menuAddVlessServer + // + resources.ApplyResources(this.menuAddVlessServer, "menuAddVlessServer"); + this.menuAddVlessServer.Name = "menuAddVlessServer"; + this.menuAddVlessServer.Click += new System.EventHandler(this.menuAddVlessServer_Click); + // // menuAddShadowsocksServer // - this.menuAddShadowsocksServer.Name = "menuAddShadowsocksServer"; resources.ApplyResources(this.menuAddShadowsocksServer, "menuAddShadowsocksServer"); + this.menuAddShadowsocksServer.Name = "menuAddShadowsocksServer"; this.menuAddShadowsocksServer.Click += new System.EventHandler(this.menuAddShadowsocksServer_Click); // // menuAddSocksServer // - this.menuAddSocksServer.Name = "menuAddSocksServer"; resources.ApplyResources(this.menuAddSocksServer, "menuAddSocksServer"); + this.menuAddSocksServer.Name = "menuAddSocksServer"; this.menuAddSocksServer.Click += new System.EventHandler(this.menuAddSocksServer_Click); // // menuAddCustomServer // - this.menuAddCustomServer.Name = "menuAddCustomServer"; resources.ApplyResources(this.menuAddCustomServer, "menuAddCustomServer"); + this.menuAddCustomServer.Name = "menuAddCustomServer"; this.menuAddCustomServer.Click += new System.EventHandler(this.menuAddCustomServer_Click); // // menuAddServers // - this.menuAddServers.Name = "menuAddServers"; resources.ApplyResources(this.menuAddServers, "menuAddServers"); + this.menuAddServers.Name = "menuAddServers"; this.menuAddServers.Click += new System.EventHandler(this.menuAddServers_Click); // // menuScanScreen // - this.menuScanScreen.Name = "menuScanScreen"; resources.ApplyResources(this.menuScanScreen, "menuScanScreen"); + this.menuScanScreen.Name = "menuScanScreen"; this.menuScanScreen.Click += new System.EventHandler(this.menuScanScreen_Click); // // toolStripSeparator1 // - this.toolStripSeparator1.Name = "toolStripSeparator1"; resources.ApplyResources(this.toolStripSeparator1, "toolStripSeparator1"); + this.toolStripSeparator1.Name = "toolStripSeparator1"; // // menuRemoveServer // - this.menuRemoveServer.Name = "menuRemoveServer"; resources.ApplyResources(this.menuRemoveServer, "menuRemoveServer"); + this.menuRemoveServer.Name = "menuRemoveServer"; this.menuRemoveServer.Click += new System.EventHandler(this.menuRemoveServer_Click); // // menuRemoveDuplicateServer // - this.menuRemoveDuplicateServer.Name = "menuRemoveDuplicateServer"; resources.ApplyResources(this.menuRemoveDuplicateServer, "menuRemoveDuplicateServer"); + this.menuRemoveDuplicateServer.Name = "menuRemoveDuplicateServer"; this.menuRemoveDuplicateServer.Click += new System.EventHandler(this.menuRemoveDuplicateServer_Click); // // menuCopyServer // - this.menuCopyServer.Name = "menuCopyServer"; resources.ApplyResources(this.menuCopyServer, "menuCopyServer"); + this.menuCopyServer.Name = "menuCopyServer"; this.menuCopyServer.Click += new System.EventHandler(this.menuCopyServer_Click); // // menuSetDefaultServer // - this.menuSetDefaultServer.Name = "menuSetDefaultServer"; resources.ApplyResources(this.menuSetDefaultServer, "menuSetDefaultServer"); + this.menuSetDefaultServer.Name = "menuSetDefaultServer"; this.menuSetDefaultServer.Click += new System.EventHandler(this.menuSetDefaultServer_Click); // // toolStripSeparator3 // - this.toolStripSeparator3.Name = "toolStripSeparator3"; resources.ApplyResources(this.toolStripSeparator3, "toolStripSeparator3"); + this.toolStripSeparator3.Name = "toolStripSeparator3"; // // menuMoveTop // - this.menuMoveTop.Name = "menuMoveTop"; resources.ApplyResources(this.menuMoveTop, "menuMoveTop"); + this.menuMoveTop.Name = "menuMoveTop"; this.menuMoveTop.Click += new System.EventHandler(this.menuMoveTop_Click); // // menuMoveUp // - this.menuMoveUp.Name = "menuMoveUp"; resources.ApplyResources(this.menuMoveUp, "menuMoveUp"); + this.menuMoveUp.Name = "menuMoveUp"; this.menuMoveUp.Click += new System.EventHandler(this.menuMoveUp_Click); // // menuMoveDown // - this.menuMoveDown.Name = "menuMoveDown"; resources.ApplyResources(this.menuMoveDown, "menuMoveDown"); + this.menuMoveDown.Name = "menuMoveDown"; this.menuMoveDown.Click += new System.EventHandler(this.menuMoveDown_Click); // // menuMoveBottom // - this.menuMoveBottom.Name = "menuMoveBottom"; resources.ApplyResources(this.menuMoveBottom, "menuMoveBottom"); + this.menuMoveBottom.Name = "menuMoveBottom"; this.menuMoveBottom.Click += new System.EventHandler(this.menuMoveBottom_Click); // // menuSelectAll // - this.menuSelectAll.Name = "menuSelectAll"; resources.ApplyResources(this.menuSelectAll, "menuSelectAll"); + this.menuSelectAll.Name = "menuSelectAll"; this.menuSelectAll.Click += new System.EventHandler(this.menuSelectAll_Click); // // toolStripSeparator9 // - this.toolStripSeparator9.Name = "toolStripSeparator9"; resources.ApplyResources(this.toolStripSeparator9, "toolStripSeparator9"); + this.toolStripSeparator9.Name = "toolStripSeparator9"; // // menuPingServer // - this.menuPingServer.Name = "menuPingServer"; resources.ApplyResources(this.menuPingServer, "menuPingServer"); + this.menuPingServer.Name = "menuPingServer"; this.menuPingServer.Click += new System.EventHandler(this.menuPingServer_Click); // // menuTcpingServer // - this.menuTcpingServer.Name = "menuTcpingServer"; resources.ApplyResources(this.menuTcpingServer, "menuTcpingServer"); + this.menuTcpingServer.Name = "menuTcpingServer"; this.menuTcpingServer.Click += new System.EventHandler(this.menuTcpingServer_Click); // // menuRealPingServer // - this.menuRealPingServer.Name = "menuRealPingServer"; resources.ApplyResources(this.menuRealPingServer, "menuRealPingServer"); + this.menuRealPingServer.Name = "menuRealPingServer"; this.menuRealPingServer.Click += new System.EventHandler(this.menuRealPingServer_Click); // // menuSpeedServer // - this.menuSpeedServer.Name = "menuSpeedServer"; resources.ApplyResources(this.menuSpeedServer, "menuSpeedServer"); + this.menuSpeedServer.Name = "menuSpeedServer"; this.menuSpeedServer.Click += new System.EventHandler(this.menuSpeedServer_Click); // // tsbTestMe // - this.tsbTestMe.Name = "tsbTestMe"; resources.ApplyResources(this.tsbTestMe, "tsbTestMe"); + this.tsbTestMe.Name = "tsbTestMe"; this.tsbTestMe.Click += new System.EventHandler(this.tsbTestMe_Click); // // toolStripSeparator6 // - this.toolStripSeparator6.Name = "toolStripSeparator6"; resources.ApplyResources(this.toolStripSeparator6, "toolStripSeparator6"); + this.toolStripSeparator6.Name = "toolStripSeparator6"; // // menuExport2ClientConfig // - this.menuExport2ClientConfig.Name = "menuExport2ClientConfig"; resources.ApplyResources(this.menuExport2ClientConfig, "menuExport2ClientConfig"); + this.menuExport2ClientConfig.Name = "menuExport2ClientConfig"; this.menuExport2ClientConfig.Click += new System.EventHandler(this.menuExport2ClientConfig_Click); // // menuExport2ServerConfig // - this.menuExport2ServerConfig.Name = "menuExport2ServerConfig"; resources.ApplyResources(this.menuExport2ServerConfig, "menuExport2ServerConfig"); + this.menuExport2ServerConfig.Name = "menuExport2ServerConfig"; this.menuExport2ServerConfig.Click += new System.EventHandler(this.menuExport2ServerConfig_Click); // // menuExport2ShareUrl // - this.menuExport2ShareUrl.Name = "menuExport2ShareUrl"; resources.ApplyResources(this.menuExport2ShareUrl, "menuExport2ShareUrl"); + this.menuExport2ShareUrl.Name = "menuExport2ShareUrl"; this.menuExport2ShareUrl.Click += new System.EventHandler(this.menuExport2ShareUrl_Click); // // menuExport2SubContent // - this.menuExport2SubContent.Name = "menuExport2SubContent"; resources.ApplyResources(this.menuExport2SubContent, "menuExport2SubContent"); + this.menuExport2SubContent.Name = "menuExport2SubContent"; this.menuExport2SubContent.Click += new System.EventHandler(this.menuExport2SubContent_Click); // - // tsbServer - // - this.tsbServer.Image = global::v2rayN.Properties.Resources.server; - resources.ApplyResources(this.tsbServer, "tsbServer"); - this.tsbServer.Name = "tsbServer"; - // // qrCodeControl // resources.ApplyResources(this.qrCodeControl, "qrCodeControl"); this.qrCodeControl.Name = "qrCodeControl"; // + // tsbServer + // + resources.ApplyResources(this.tsbServer, "tsbServer"); + this.tsbServer.DropDown = this.cmsLv; + this.tsbServer.Image = global::v2rayN.Properties.Resources.server; + this.tsbServer.Name = "tsbServer"; + // // notifyMain // - this.notifyMain.ContextMenuStrip = this.cmsMain; resources.ApplyResources(this.notifyMain, "notifyMain"); + this.notifyMain.ContextMenuStrip = this.cmsMain; this.notifyMain.MouseClick += new System.Windows.Forms.MouseEventHandler(this.notifyMain_MouseClick); // // cmsMain // - this.cmsMain.ImageScalingSize = new System.Drawing.Size(20, 20); resources.ApplyResources(this.cmsMain, "cmsMain"); + this.cmsMain.ImageScalingSize = new System.Drawing.Size(20, 20); this.cmsMain.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.menuSysAgentMode, this.menuServers, @@ -409,6 +419,7 @@ // // menuSysAgentMode // + resources.ApplyResources(this.menuSysAgentMode, "menuSysAgentMode"); this.menuSysAgentMode.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.menuNotEnabledHttp, this.menuGlobal, @@ -418,88 +429,87 @@ this.menuKeepNothing, this.menuKeepPACNothing}); this.menuSysAgentMode.Name = "menuSysAgentMode"; - resources.ApplyResources(this.menuSysAgentMode, "menuSysAgentMode"); // // menuNotEnabledHttp // - this.menuNotEnabledHttp.Name = "menuNotEnabledHttp"; resources.ApplyResources(this.menuNotEnabledHttp, "menuNotEnabledHttp"); + this.menuNotEnabledHttp.Name = "menuNotEnabledHttp"; this.menuNotEnabledHttp.Click += new System.EventHandler(this.menuNotEnabledHttp_Click); // // menuGlobal // - this.menuGlobal.Name = "menuGlobal"; resources.ApplyResources(this.menuGlobal, "menuGlobal"); + this.menuGlobal.Name = "menuGlobal"; this.menuGlobal.Click += new System.EventHandler(this.menuGlobal_Click); // // menuGlobalPAC // - this.menuGlobalPAC.Name = "menuGlobalPAC"; resources.ApplyResources(this.menuGlobalPAC, "menuGlobalPAC"); + this.menuGlobalPAC.Name = "menuGlobalPAC"; this.menuGlobalPAC.Click += new System.EventHandler(this.menuGlobalPAC_Click); // // menuKeep // - this.menuKeep.Name = "menuKeep"; resources.ApplyResources(this.menuKeep, "menuKeep"); + this.menuKeep.Name = "menuKeep"; this.menuKeep.Click += new System.EventHandler(this.menuKeep_Click); // // menuKeepPAC // - this.menuKeepPAC.Name = "menuKeepPAC"; resources.ApplyResources(this.menuKeepPAC, "menuKeepPAC"); + this.menuKeepPAC.Name = "menuKeepPAC"; this.menuKeepPAC.Click += new System.EventHandler(this.menuKeepPAC_Click); // // menuKeepNothing // - this.menuKeepNothing.Name = "menuKeepNothing"; resources.ApplyResources(this.menuKeepNothing, "menuKeepNothing"); + this.menuKeepNothing.Name = "menuKeepNothing"; this.menuKeepNothing.Click += new System.EventHandler(this.menuKeepNothing_Click); // // menuKeepPACNothing // - this.menuKeepPACNothing.Name = "menuKeepPACNothing"; resources.ApplyResources(this.menuKeepPACNothing, "menuKeepPACNothing"); + this.menuKeepPACNothing.Name = "menuKeepPACNothing"; this.menuKeepPACNothing.Click += new System.EventHandler(this.menuKeepPACNothing_Click); // // menuServers // - this.menuServers.Name = "menuServers"; resources.ApplyResources(this.menuServers, "menuServers"); + this.menuServers.Name = "menuServers"; // // menuAddServers2 // - this.menuAddServers2.Name = "menuAddServers2"; resources.ApplyResources(this.menuAddServers2, "menuAddServers2"); + this.menuAddServers2.Name = "menuAddServers2"; this.menuAddServers2.Click += new System.EventHandler(this.menuAddServers_Click); // // menuScanScreen2 // - this.menuScanScreen2.Name = "menuScanScreen2"; resources.ApplyResources(this.menuScanScreen2, "menuScanScreen2"); + this.menuScanScreen2.Name = "menuScanScreen2"; this.menuScanScreen2.Click += new System.EventHandler(this.menuScanScreen_Click); // // menuCopyPACUrl // - this.menuCopyPACUrl.Name = "menuCopyPACUrl"; resources.ApplyResources(this.menuCopyPACUrl, "menuCopyPACUrl"); + this.menuCopyPACUrl.Name = "menuCopyPACUrl"; this.menuCopyPACUrl.Click += new System.EventHandler(this.menuCopyPACUrl_Click); // // menuUpdateSubscriptions // - this.menuUpdateSubscriptions.Name = "menuUpdateSubscriptions"; resources.ApplyResources(this.menuUpdateSubscriptions, "menuUpdateSubscriptions"); + this.menuUpdateSubscriptions.Name = "menuUpdateSubscriptions"; this.menuUpdateSubscriptions.Click += new System.EventHandler(this.menuUpdateSubscriptions_Click); // // toolStripSeparator2 // - this.toolStripSeparator2.Name = "toolStripSeparator2"; resources.ApplyResources(this.toolStripSeparator2, "toolStripSeparator2"); + this.toolStripSeparator2.Name = "toolStripSeparator2"; // // menuExit // - this.menuExit.Name = "menuExit"; resources.ApplyResources(this.menuExit, "menuExit"); + this.menuExit.Name = "menuExit"; this.menuExit.Click += new System.EventHandler(this.menuExit_Click); // // bgwScan @@ -510,30 +520,31 @@ // // groupBox1 // - this.groupBox1.Controls.Add(this.scMain); resources.ApplyResources(this.groupBox1, "groupBox1"); + this.groupBox1.Controls.Add(this.scMain); this.groupBox1.Name = "groupBox1"; this.groupBox1.TabStop = false; // // groupBox2 // + resources.ApplyResources(this.groupBox2, "groupBox2"); this.groupBox2.Controls.Add(this.txtMsgBox); this.groupBox2.Controls.Add(this.ssMain); - resources.ApplyResources(this.groupBox2, "groupBox2"); this.groupBox2.Name = "groupBox2"; this.groupBox2.TabStop = false; // // txtMsgBox // + resources.ApplyResources(this.txtMsgBox, "txtMsgBox"); this.txtMsgBox.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(41)))), ((int)(((byte)(49)))), ((int)(((byte)(52))))); this.txtMsgBox.BorderStyle = System.Windows.Forms.BorderStyle.None; - resources.ApplyResources(this.txtMsgBox, "txtMsgBox"); this.txtMsgBox.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(226)))), ((int)(((byte)(228))))); this.txtMsgBox.Name = "txtMsgBox"; this.txtMsgBox.ReadOnly = true; // // ssMain // + resources.ApplyResources(this.ssMain, "ssMain"); this.ssMain.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.toolSslSocksPortLab, this.toolSslSocksPort, @@ -546,7 +557,6 @@ this.toolSslBlank3, this.toolSslServerSpeed, this.toolSslBlank4}); - resources.ApplyResources(this.ssMain, "ssMain"); this.ssMain.Name = "ssMain"; this.ssMain.ItemClicked += new System.Windows.Forms.ToolStripItemClickedEventHandler(this.ssMain_ItemClicked); // @@ -557,8 +567,8 @@ // // toolSslSocksPort // - this.toolSslSocksPort.Name = "toolSslSocksPort"; resources.ApplyResources(this.toolSslSocksPort, "toolSslSocksPort"); + this.toolSslSocksPort.Name = "toolSslSocksPort"; // // toolSslBlank1 // @@ -573,8 +583,8 @@ // // toolSslHttpPort // - this.toolSslHttpPort.Name = "toolSslHttpPort"; resources.ApplyResources(this.toolSslHttpPort, "toolSslHttpPort"); + this.toolSslHttpPort.Name = "toolSslHttpPort"; // // toolSslBlank2 // @@ -589,8 +599,8 @@ // // toolSslPacPort // - this.toolSslPacPort.Name = "toolSslPacPort"; resources.ApplyResources(this.toolSslPacPort, "toolSslPacPort"); + this.toolSslPacPort.Name = "toolSslPacPort"; // // toolSslBlank3 // @@ -606,8 +616,8 @@ // // toolSslBlank4 // - this.toolSslBlank4.Name = "toolSslBlank4"; resources.ApplyResources(this.toolSslBlank4, "toolSslBlank4"); + this.toolSslBlank4.Name = "toolSslBlank4"; // // panel1 // @@ -616,6 +626,7 @@ // // tsMain // + resources.ApplyResources(this.tsMain, "tsMain"); this.tsMain.ImageScalingSize = new System.Drawing.Size(32, 32); this.tsMain.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.tsbServer, @@ -633,61 +644,60 @@ this.tsbPromotion, this.toolStripSeparator11, this.tsbClose}); - resources.ApplyResources(this.tsMain, "tsMain"); this.tsMain.Name = "tsMain"; this.tsMain.TabStop = true; // // toolStripSeparator4 // - this.toolStripSeparator4.Name = "toolStripSeparator4"; resources.ApplyResources(this.toolStripSeparator4, "toolStripSeparator4"); + this.toolStripSeparator4.Name = "toolStripSeparator4"; // // tsbSub // + resources.ApplyResources(this.tsbSub, "tsbSub"); this.tsbSub.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.tsbSubSetting, this.tsbSubUpdate}); this.tsbSub.Image = global::v2rayN.Properties.Resources.sub; - resources.ApplyResources(this.tsbSub, "tsbSub"); this.tsbSub.Name = "tsbSub"; // // tsbSubSetting // - this.tsbSubSetting.Name = "tsbSubSetting"; resources.ApplyResources(this.tsbSubSetting, "tsbSubSetting"); + this.tsbSubSetting.Name = "tsbSubSetting"; this.tsbSubSetting.Click += new System.EventHandler(this.tsbSubSetting_Click); // // tsbSubUpdate // - this.tsbSubUpdate.Name = "tsbSubUpdate"; resources.ApplyResources(this.tsbSubUpdate, "tsbSubUpdate"); + this.tsbSubUpdate.Name = "tsbSubUpdate"; this.tsbSubUpdate.Click += new System.EventHandler(this.tsbSubUpdate_Click); // // tsbQRCodeSwitch // + resources.ApplyResources(this.tsbQRCodeSwitch, "tsbQRCodeSwitch"); this.tsbQRCodeSwitch.CheckOnClick = true; this.tsbQRCodeSwitch.ForeColor = System.Drawing.Color.Black; this.tsbQRCodeSwitch.Image = global::v2rayN.Properties.Resources.share; - resources.ApplyResources(this.tsbQRCodeSwitch, "tsbQRCodeSwitch"); this.tsbQRCodeSwitch.Name = "tsbQRCodeSwitch"; this.tsbQRCodeSwitch.CheckedChanged += new System.EventHandler(this.tsbQRCodeSwitch_CheckedChanged); // // toolStripSeparator8 // - this.toolStripSeparator8.Name = "toolStripSeparator8"; resources.ApplyResources(this.toolStripSeparator8, "toolStripSeparator8"); + this.toolStripSeparator8.Name = "toolStripSeparator8"; // // tsbOptionSetting // - this.tsbOptionSetting.Image = global::v2rayN.Properties.Resources.option; resources.ApplyResources(this.tsbOptionSetting, "tsbOptionSetting"); + this.tsbOptionSetting.Image = global::v2rayN.Properties.Resources.option; this.tsbOptionSetting.Name = "tsbOptionSetting"; this.tsbOptionSetting.Click += new System.EventHandler(this.tsbOptionSetting_Click); // // toolStripSeparator5 // - this.toolStripSeparator5.Name = "toolStripSeparator5"; resources.ApplyResources(this.toolStripSeparator5, "toolStripSeparator5"); + this.toolStripSeparator5.Name = "toolStripSeparator5"; // // tsbReload // @@ -697,11 +707,12 @@ // // toolStripSeparator7 // - this.toolStripSeparator7.Name = "toolStripSeparator7"; resources.ApplyResources(this.toolStripSeparator7, "toolStripSeparator7"); + this.toolStripSeparator7.Name = "toolStripSeparator7"; // // tsbCheckUpdate // + resources.ApplyResources(this.tsbCheckUpdate, "tsbCheckUpdate"); this.tsbCheckUpdate.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.tsbCheckUpdateN, this.tsbCheckUpdateCore, @@ -709,45 +720,45 @@ this.toolStripSeparator13, this.tsbCheckClearPACList}); this.tsbCheckUpdate.Image = global::v2rayN.Properties.Resources.checkupdate; - resources.ApplyResources(this.tsbCheckUpdate, "tsbCheckUpdate"); this.tsbCheckUpdate.Name = "tsbCheckUpdate"; // // tsbCheckUpdateN // - this.tsbCheckUpdateN.Name = "tsbCheckUpdateN"; resources.ApplyResources(this.tsbCheckUpdateN, "tsbCheckUpdateN"); + this.tsbCheckUpdateN.Name = "tsbCheckUpdateN"; this.tsbCheckUpdateN.Click += new System.EventHandler(this.tsbCheckUpdateN_Click); // // tsbCheckUpdateCore // - this.tsbCheckUpdateCore.Name = "tsbCheckUpdateCore"; resources.ApplyResources(this.tsbCheckUpdateCore, "tsbCheckUpdateCore"); + this.tsbCheckUpdateCore.Name = "tsbCheckUpdateCore"; this.tsbCheckUpdateCore.Click += new System.EventHandler(this.tsbCheckUpdateCore_Click); // // tsbCheckUpdatePACList // - this.tsbCheckUpdatePACList.Name = "tsbCheckUpdatePACList"; resources.ApplyResources(this.tsbCheckUpdatePACList, "tsbCheckUpdatePACList"); + this.tsbCheckUpdatePACList.Name = "tsbCheckUpdatePACList"; this.tsbCheckUpdatePACList.Click += new System.EventHandler(this.tsbCheckUpdatePACList_Click); // // toolStripSeparator13 // - this.toolStripSeparator13.Name = "toolStripSeparator13"; resources.ApplyResources(this.toolStripSeparator13, "toolStripSeparator13"); + this.toolStripSeparator13.Name = "toolStripSeparator13"; // // tsbCheckClearPACList // - this.tsbCheckClearPACList.Name = "tsbCheckClearPACList"; resources.ApplyResources(this.tsbCheckClearPACList, "tsbCheckClearPACList"); + this.tsbCheckClearPACList.Name = "tsbCheckClearPACList"; this.tsbCheckClearPACList.Click += new System.EventHandler(this.tsbCheckClearPACList_Click); // // toolStripSeparator10 // - this.toolStripSeparator10.Name = "toolStripSeparator10"; resources.ApplyResources(this.toolStripSeparator10, "toolStripSeparator10"); + this.toolStripSeparator10.Name = "toolStripSeparator10"; // // tsbHelp // + resources.ApplyResources(this.tsbHelp, "tsbHelp"); this.tsbHelp.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.tsbAbout, this.tsbV2rayWebsite, @@ -755,50 +766,49 @@ this.tsbLanguageDef, this.tsbLanguageZhHans}); this.tsbHelp.Image = global::v2rayN.Properties.Resources.help; - resources.ApplyResources(this.tsbHelp, "tsbHelp"); this.tsbHelp.Name = "tsbHelp"; // // tsbAbout // - this.tsbAbout.Name = "tsbAbout"; resources.ApplyResources(this.tsbAbout, "tsbAbout"); + this.tsbAbout.Name = "tsbAbout"; this.tsbAbout.Click += new System.EventHandler(this.tsbAbout_Click); // // tsbV2rayWebsite // - this.tsbV2rayWebsite.Name = "tsbV2rayWebsite"; resources.ApplyResources(this.tsbV2rayWebsite, "tsbV2rayWebsite"); + this.tsbV2rayWebsite.Name = "tsbV2rayWebsite"; this.tsbV2rayWebsite.Click += new System.EventHandler(this.tsbV2rayWebsite_Click); // // toolStripSeparator12 // - this.toolStripSeparator12.Name = "toolStripSeparator12"; resources.ApplyResources(this.toolStripSeparator12, "toolStripSeparator12"); + this.toolStripSeparator12.Name = "toolStripSeparator12"; // // tsbLanguageDef // - this.tsbLanguageDef.Name = "tsbLanguageDef"; resources.ApplyResources(this.tsbLanguageDef, "tsbLanguageDef"); + this.tsbLanguageDef.Name = "tsbLanguageDef"; this.tsbLanguageDef.Click += new System.EventHandler(this.tsbLanguageDef_Click); // // tsbLanguageZhHans // - this.tsbLanguageZhHans.Name = "tsbLanguageZhHans"; resources.ApplyResources(this.tsbLanguageZhHans, "tsbLanguageZhHans"); + this.tsbLanguageZhHans.Name = "tsbLanguageZhHans"; this.tsbLanguageZhHans.Click += new System.EventHandler(this.tsbLanguageZhHans_Click); // // tsbPromotion // + resources.ApplyResources(this.tsbPromotion, "tsbPromotion"); this.tsbPromotion.ForeColor = System.Drawing.Color.Black; this.tsbPromotion.Image = global::v2rayN.Properties.Resources.promotion; - resources.ApplyResources(this.tsbPromotion, "tsbPromotion"); this.tsbPromotion.Name = "tsbPromotion"; this.tsbPromotion.Click += new System.EventHandler(this.tsbPromotion_Click); // // toolStripSeparator11 // - this.toolStripSeparator11.Name = "toolStripSeparator11"; resources.ApplyResources(this.toolStripSeparator11, "toolStripSeparator11"); + this.toolStripSeparator11.Name = "toolStripSeparator11"; // // tsbClose // @@ -806,12 +816,6 @@ this.tsbClose.Name = "tsbClose"; this.tsbClose.Click += new System.EventHandler(this.tsbClose_Click); // - // menuAddVlessServer - // - this.menuAddVlessServer.Name = "menuAddVlessServer"; - resources.ApplyResources(this.menuAddVlessServer, "menuAddVlessServer"); - this.menuAddVlessServer.Click += new System.EventHandler(this.menuAddVlessServer_Click); - // // MainForm // resources.ApplyResources(this, "$this"); diff --git a/v2rayN/v2rayN/Forms/MainForm.resx b/v2rayN/v2rayN/Forms/MainForm.resx index cca0d7a7..de7f141e 100644 --- a/v2rayN/v2rayN/Forms/MainForm.resx +++ b/v2rayN/v2rayN/Forms/MainForm.resx @@ -117,190 +117,713 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Fill + + Remove duplicate servers - - 3, 17 - - - 327, 17 - - + 355, 22 - - Add [VMess] server + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + + Magenta + + + 355, 22 + + + 97, 53 + + 355, 22 Add [VLESS] server - - 355, 22 + + 2 - - Add [Shadowsocks] server + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 355, 22 + + Restart service + + + 184, 6 + + + tsbSubSetting + + + 264, 22 + + + groupBox2 + + + menuMoveUp Add [Socks] server - + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 355, 22 - - Add a custom configuration server + + + ImageAboveText - - 355, 22 + + 语言-[中文简体] - - Import bulk URL from clipboard (Ctrl+V) + + NoControl - - 355, 22 + + Top - - Scan QR code on the screen (Ctrl+S) + + tsbHelp - - 352, 6 + + 5 - - 355, 22 + + + False - - Remove selected servers (Delete) - - - 355, 22 - - - Remove duplicate servers - - - 355, 22 - - - Clone selected server - - - 355, 22 + + toolStripSeparator6 Set as active server (Enter) - - 352, 6 + + 99, 53 - + + Update subscriptions + + + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 187, 22 + + + groupBox2 + + + toolSslBlank2 + + 355, 22 - - Move to top (T) - - - 355, 22 - - - Up (U) - - - 355, 22 - - - Down (D) - - - 355, 22 - - - Move to bottom (B) - - - 355, 22 - - - Select All (Ctrl+A) - - - 352, 6 - - - 355, 22 - - - Test servers ping (Ctrl+P) - - - 355, 22 - - - Test servers with tcping (Ctrl+O) - - - 355, 22 - - - Test servers real delay (Ctrl+R) - - - 355, 22 - - - Test servers download speed (Ctrl+T) - - - 355, 22 - - - Test current service status - - - 352, 6 - - - 355, 22 - - - Export selected server for client configuration - - - 355, 22 - - - Export selected server for server configuration - 355, 22 - - Export share URLs to clipboard (Ctrl+C) + + tsbCheckUpdateN - + + Only open Http proxy and do nothing + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolStripSeparator7 + + + Update v2rayCore + + + Magenta + + 355, 22 - - Export subscription (base64) share to clipboard + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 356, 600 + + menuExport2SubContent - - cmsLv + + 52, 17 + + + Share + + + tsbQRCodeSwitch + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + wwAADsMBx2+oZAAAADJJREFUWEftzrENACAIRUFGdVMdTZkAG4zFXfI68kMAAD8ap9lUbpfyaDV19QAA + 8FDEBl3RImu5VcdbAAAAAElFTkSuQmCC + + + + 355, 22 + + + 0, 0 + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Export selected server for server configuration + + + 0, 17 + + + 952, 56 + + + System.Windows.Forms.SplitContainer, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 0 + + + Test servers real delay (Ctrl+R) + + + menuTcpingServer + + + 0 + + + ImageAboveText + + + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 6, 56 + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + v2rayN + + + 411, 22 + + + 355, 22 + + + toolStripSeparator1 + + + 3 + + + System.Windows.Forms.ToolStripDropDownButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 393, 22 + + + 0, 56 + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tsbClose + + + 355, 22 + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuPingServer + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tsbLanguageDef + + + Import bulk URL from clipboard (Ctrl+V) + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + wwAADsMBx2+oZAAAATdJREFUWEftloENAiEMRW8ER3AEN9ANdARHcAPdwBF0A91AN9INtC+5JvUCJwWM + mvCTFw3QUiiU65qa/lUTYT6Ato9rJZyERwT6GFNdU+EihCYNwVhsqmgm3AR1fheOAitd9PCfNvp0HDbY + FolV2MmZZCzX9J0FG0TRTlwFdbahIVE7Qe1IR5bYVnXCyr2yO5F1MNUBec25YtjomcCXSxhr9DmrV2Gr + flyL4GSrYcm9tmnEZ7JsAC7DgWr5ydbXA8hOAcVjG8FTD6ocQgvXKrW8MqFWUfc1DAXgmRwVFaJQAHsh + VbYUU87diqWA934sl/TZ7wV2Lesx0gBwsO5/1Sl5PQhLQb+G+E+bfTm9KXsRAVgHrMK+jO9gbNEzzMSh + 6DlM9nANoa+kdCeLXLNLFtc9b2r6EXXdE4e4mdByNuG1AAAAAElFTkSuQmCC + + + + 411, 22 + + + 3 + + + 3, 17 + + + 355, 22 + + + System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Fill + + + 6, 56 + + + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 220, 17 + + + menuAddCustomServer + + + statusStrip1 + + + menuMoveDown + + + Import bulk URL from clipboard + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Move to bottom (B) + + + System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 6, 12 + + + 48, 53 + + + 355, 22 + + + System.ComponentModel.BackgroundWorker, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panel1 + + + 195, 17 + + + 0 + + + 686, 331 + + + toolStripSeparator4 + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Bottom + + + System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + scMain.Panel2 + + + 39, 17 + + + menuAddServers2 + + + Fill + + + Add [VMess] server + + + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.SplitterPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + v2rayN.Forms.BaseForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + + + tsbAbout + + + 195, 17 + + + toolStripSeparator5 + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + 352, 6 + + + 355, 22 + + + 0, 0 + + + 256, 331 + + + 4, 4, 4, 4 + + + Test servers with tcping (Ctrl+O) + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 6, 56 + + + System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 195, 17 + + + 2 + + + 125, 22 + + + 0, 17 + + + scMain.Panel2 + + + 58, 53 + + + 355, 22 + + + 187, 22 + + + 6, 56 + + + Test servers download speed (Ctrl+T) + + + ssMain + + + 686 + + + ImageAboveText + + + 52, 53 + + + 265, 164 + + + 411, 22 + + + $this + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + scMain + + + Check for updates + + + 0, 17 + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 4 + + + 125, 22 + + + Only open Http proxy and clear the proxy settings + + + scMain + + + HTTP: + + + Remove selected servers (Delete) + + + 411, 22 + + + menuKeepPAC + + + 0 + + + Help + + + menuSelectAll + + + Move to top (T) + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Scan QR code on the screen (Ctrl+S) + + + ImageAboveText + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 187, 22 + + + menuAddServers + + + 355, 22 + + + menuAddVmessServer + + + tsbLanguageZhHans + + + menuRemoveDuplicateServer + + + BottomCenter + + + menuExport2ShareUrl + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tsbReload + + + v2rayN (this software) + + + Magenta + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 0, 66 + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tsbV2rayWebsite + + + Server + + + v2rayN.Base.ListViewFlickerFree, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + + + menuAddShadowsocksServer + + + txtMsgBox + + + toolSslBlank4 + + + 261, 6 + + + v2rayN + + + Language-[English] + + + 264, 22 + + + 0 + + + toolSslBlank3 + + + 128, 53 + + + tsMain + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + ImageAboveText System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - Fill + + 0, 417 + + + System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 352, 6 + + + System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + V2Ray Website + + + No + + + 1 + + + toolSslPacPort + + + System.Windows.Forms.SplitterPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Settings + + + menuMoveTop + + + menuKeep @@ -319,620 +842,533 @@ ZW0uRHJhd2luZy5HcmFwaGljc1VuaXQBAAAAB3ZhbHVlX18ACAMAAAADAAAACw== - - 0, 0 + + 952, 351 - - 686, 331 + + menuScanScreen - - - 0 + + cmsLv - - lvServers + + toolStripSeparator12 - - v2rayN.Base.ListViewFlickerFree, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + + 6, 56 - - scMain.Panel1 - - - 0 - - - scMain.Panel1 - - - System.Windows.Forms.SplitterPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - scMain - - - 0 - - + Fill - - 0, 0 + + toolSslBlank1 - - 256, 331 + + tsbSubUpdate - - 2 + + 微软雅黑, 8pt - - qrCodeControl + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - v2rayN.Forms.QRCodeControl, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + + SPEED Disabled - - scMain.Panel2 + + Promotion - - 0 + + menuSysAgentMode - - scMain.Panel2 + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - System.Windows.Forms.SplitterPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - scMain - - - 1 - - - 100 - - - 946, 331 - - - 686 - - - 0 - - - scMain - - - System.Windows.Forms.SplitContainer, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 0 - - - Magenta - - - 64, 53 - - - Servers - - + ImageAboveText - - 17, 17 - - - 137, 17 - - - NoControl + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 411, 22 + + menuScanScreen2 - - Not Enabled Http Proxy + + cmsMain - - 411, 22 + + 264, 22 - - Open Http proxy and set the system proxy (global mode) + + menuServers + + + menuUpdateSubscriptions + + + $this + + + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolStripSeparator13 + + + System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 264, 22 + + + 3, 151 + + + True + + + 355, 22 + + + Subscriptions + + + 952, 10 + + + Updates + + + 264, 22 + + + menuNotEnabledHttp + + + 0 + + + toolStripSeparator8 + + + 89, 53 + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + BottomCenter + + + Test servers ping (Ctrl+P) + + + System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 355, 22 + + + 264, 22 + + + System.Windows.Forms.ToolStripDropDownButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuSetDefaultServer + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Settings + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuCopyServer + + + Http proxy + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 411, 22 - - Open PAC and set the system proxy (PAC mode) - - - 411, 22 - - - Only open Http proxy and clear the proxy settings - - - 411, 22 - Only open PAC and clear the proxy settings - - 411, 22 + + 355, 22 - - Only open Http proxy and do nothing + + groupBox1 - - 411, 22 + + MainForm - - Only open PAC and do nothing + + toolStripSeparator9 - - 264, 22 + + menuExit - - Http proxy - - - 264, 22 - - - Server - - - 264, 22 - - - Import bulk URL from clipboard - - - 264, 22 - - - Scan QR code on the screen - - - 264, 22 - - - Copy local PAC URL - - - 264, 22 - - - Update subscriptions - - - 261, 6 - - - 264, 22 - - - Exit - - - 265, 164 - - - cmsMain - - - System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - v2rayN - - - True - - - 498, 17 - - - Fill - - - 0, 66 - - - 952, 351 - - - 0 + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Servers list - - groupBox1 + + System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + lvServers - - $this + + menuRealPingServer - - 2 + + System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - Fill + + menuGlobal - - 3, 17 - - - 0 - - - True - - - Vertical - - - 946, 134 - - - 3 - - - txtMsgBox - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 0 - - - 228, 18 - - - 微软雅黑, 8pt - - - 52, 17 - - - SOCKS5: - - - 0, 17 - - - 微软雅黑, 8pt - - - 195, 17 - - - 微软雅黑, 8pt - - - 39, 17 - - - HTTP: - - - 0, 17 - - - 微软雅黑, 8pt - - - 195, 17 - - - 微软雅黑, 8pt - - - 33, 17 - - - PAC: - - - 0, 17 - - - 微软雅黑, 8pt - - - 195, 17 - - - False - - - 微软雅黑, 8pt - - - No - - - 220, 17 - - - SPEED Disabled - - - MiddleRight - - - 0, 17 - - - 3, 151 - - - 946, 22 - - - 0 - - - statusStrip1 - - - ssMain - - - System.Windows.Forms.StatusStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 1 - - - Bottom - - - 0, 417 - - - 952, 176 - - - 3 - - - Informations - - - groupBox2 - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 3 - - - Top - - - 0, 56 - - - 952, 10 + + 100 2 - - panel1 + + Magenta - - System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + menuKeepPACNothing + + + Check for updated PAC (need the HTTP proxy are ON) + + + toolStripSeparator11 + + + 355, 22 + + + v2rayN Project + + + Servers + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Select All (Ctrl+A) + + + Informations + + + 3 + + + System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tsbCheckUpdateCore + + + SOCKS5: + + + 33, 17 + + + toolSslServerSpeed + + + menuRemoveServer + + + 355, 22 + + + tsbTestMe + + + 355, 22 + + + 946, 134 + + + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.NotifyIcon, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + scMain + + + Down (D) + + + menuCopyPACUrl + + + 352, 6 + + + Magenta + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 355, 22 + + + tsbSub + + + Magenta + + + ImageAboveText + + + Clone selected server + + + 0, 0 + + + Add [Shadowsocks] server + + + System.Windows.Forms.ToolStripDropDownButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + tsbCheckUpdate + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 微软雅黑, 8pt + + + Export share URLs to clipboard (Ctrl+C) + + + 411, 22 + + + 355, 22 + + + 微软雅黑, 8pt + + + System.Windows.Forms.ToolStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Simplify PAC (need to set Core route) + + + menuExport2ClientConfig + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 0 $this - - 4 + + Fill - - 409, 17 - - - 6, 56 + + qrCodeControl - - 180, 22 + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - Settings + + tsbServer - - 180, 22 + + 0 - - Updates + + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - Magenta + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 99, 53 + + 微软雅黑, 8pt - - Subscriptions + + tsbPromotion - + ImageAboveText - + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuGlobalPAC + + + 393, 22 + + + 356, 578 + + + $this + + + scMain.Panel1 + + + Up (U) + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + notifyMain + + + Open Http proxy and set the system proxy (global mode) + + + System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + MiddleRight + + + Magenta + + + tsbOptionSetting + + + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuAddSocksServer + + + scMain.Panel1 + + + 微软雅黑, 8pt + + + 64, 53 + + + 1 + + + 946, 22 + + + Open PAC and set the system proxy (PAC mode) + + Magenta 45, 53 - - Share + + menuAddVlessServer - - BottomCenter + + 946, 331 - - ImageAboveText + + v2rayN.Forms.QRCodeControl, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null - - 6, 56 - - - Magenta - - - 58, 53 - - - Settings - - - ImageAboveText - - - 6, 56 - - - - iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAE3SURBVFhH7ZaBDQIhDEVvBEdwBDfQDXQER3AD3cARdAPd - QDfSDbQvuSb1AicFjJrwkxcN0FIolOuamv5VE2E+gLaPayWchEcE+hhTXVPhIoQmDcFYbKpoJtwEdX4X - jgIrXfTwnzb6dBw22BaJVdjJmWQs1/SdBRtE0U5cBXW2oSFRO0HtSEeW2FZ1wsq9sjuRdTDVAXnNuWLY - 6JnAl0sYa/Q5q1dhq35ci+Bkq2HJvbZpxGeybAAuw4Fq+cnW1wPITgHFYxvBUw+qHEIL1yq1vDKhVlH3 - NQwF4JkcFRWiUAB7IVW2FFPO3YqlgPd+LJf02e8Fdi3rMdIAcLDuf9UpeT0IS0G/hvhPm305vSl7EQFY - B6zCvozvYGzRM8zEoeg5TPZwDaGvpHQni1yzSxbXPW9q+hF13ROHuJnQcjbhtQAAAABJRU5ErkJggg== - - - - BottomCenter - - - Magenta - - - 97, 53 - - - Restart service - - - ImageAboveText - - - 6, 56 - - - 393, 22 - - - v2rayN (this software) - - - 393, 22 - - - Update v2rayCore - - - 393, 22 - - - Check for updated PAC (need the HTTP proxy are ON) + + Not Enabled Http Proxy 390, 6 - + + 微软雅黑, 8pt + + + 952, 593 + + + 411, 22 + + + tsbCheckClearPACList + + + Test current service status + + + toolSslSocksPort + + + toolStripSeparator10 + + + toolSslHttpPortLab + + + menuMoveBottom + + 393, 22 - - Simplify PAC (need to set Core route) + + 1 - + Magenta - - 128, 53 - - - Check for updates - - - ImageAboveText - - - 6, 56 - - - 187, 22 - - - v2rayN Project - - - 187, 22 - - - V2Ray Website - - - 184, 6 + + menuKeepNothing 187, 22 - - Language-[English] + + menuExport2ServerConfig - - 187, 22 - - - 语言-[中文简体] - - - Magenta - - - 48, 53 - - - Help - - - ImageAboveText - - - Magenta - - - 89, 53 - - - Promotion + + 0 ImageAboveText @@ -940,572 +1376,139 @@ 6, 56 - - - iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAySURBVFhH7c6xDQAgCEVBRnVTHU2ZABuMxV3yOvJDAAA/ - GqfZVG6X8mg1dfUAAPBQxAZd0SJruVXHWwAAAABJRU5ErkJggg== - - - - Magenta - - - 52, 53 - - - Close - - - ImageAboveText - - - 0, 0 - - - 952, 56 - - - 1 - - - tsMain - - - System.Windows.Forms.ToolStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 5 - - - True - - - 108 - - - 6, 12 - - - 952, 593 - - - 4, 4, 4, 4 - - - v2rayN - - - menuAddVmessServer - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuAddShadowsocksServer - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuAddSocksServer - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuAddCustomServer - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuAddServers - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuScanScreen - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - toolStripSeparator1 - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - menuRemoveServer + + Export subscription (base64) share to clipboard - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuRemoveDuplicateServer - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuCopyServer - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuSetDefaultServer - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - toolStripSeparator3 - - - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuMoveTop - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuMoveUp - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuMoveDown - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuMoveBottom - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuSelectAll - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - toolStripSeparator9 - - - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuPingServer - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuTcpingServer - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuRealPingServer - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuSpeedServer - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tsbTestMe - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - toolStripSeparator6 - - - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuExport2ClientConfig - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuExport2ServerConfig - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuExport2ShareUrl - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuExport2SubContent - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tsbServer - - - System.Windows.Forms.ToolStripDropDownButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - notifyMain - - - System.Windows.Forms.NotifyIcon, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuSysAgentMode - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuNotEnabledHttp - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuGlobal - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuGlobalPAC - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuKeep - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuKeepPAC - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuKeepNothing - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuKeepPACNothing - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuServers - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuAddServers2 - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuScanScreen2 - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuCopyPACUrl - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuUpdateSubscriptions - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - toolStripSeparator2 - - - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuExit - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - bgwScan - - - System.ComponentModel.BackgroundWorker, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - toolSslSocksPortLab - - - System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - toolSslSocksPort - - - System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - toolSslBlank1 - - - System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - toolSslHttpPortLab - - - System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - toolSslHttpPort - - - System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - toolSslBlank2 - - - System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 393, 22 toolSslPacPortLab - - System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - toolSslPacPort - - - System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - toolSslBlank3 - - - System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - toolSslServerSpeed - - - System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - toolSslBlank4 - - - System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - toolStripSeparator4 - - - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tsbSub - - - System.Windows.Forms.ToolStripDropDownButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tsbSubSetting - - + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - tsbSubUpdate + + Exit - + + bgwScan + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - tsbQRCodeSwitch + + Scan QR code on the screen - - System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + PAC: - - toolStripSeparator8 + + Close - - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 264, 22 - - tsbOptionSetting + + 0, 17 - - System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Only open PAC and do nothing - - toolStripSeparator5 + + Export selected server for client configuration - - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + toolStripSeparator2 - - tsbReload + + toolSslSocksPortLab + + + Add a custom configuration server + + + toolSslHttpPort System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - toolStripSeparator7 + + 352, 6 - - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 952, 176 - - tsbCheckUpdate + + menuSpeedServer - + System.Windows.Forms.ToolStripDropDownButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - tsbCheckUpdateN + + 0 - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Fill - - tsbCheckUpdateCore + + Copy local PAC URL - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 3, 17 + + + toolStripSeparator3 + + + Vertical + + + 355, 22 + + + 微软雅黑, 8pt + + + 355, 22 + + + System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.StatusStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tsbCheckUpdatePACList - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - toolStripSeparator13 - - - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tsbCheckClearPACList - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - toolStripSeparator10 - - - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tsbHelp - - - System.Windows.Forms.ToolStripDropDownButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tsbAbout - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tsbV2rayWebsite - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - toolStripSeparator12 - - - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tsbLanguageDef - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tsbLanguageZhHans - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tsbPromotion - - - System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - toolStripSeparator11 - - - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tsbClose - - - System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuAddVlessServer - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - MainForm - - - v2rayN.Forms.BaseForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null - + + 228, 18 + + + zh-Hans + + + True + + + 17, 17 + + + 108 + + + 137, 17 + + + 498, 17 + + + 409, 17 + + + 327, 17 + \ No newline at end of file diff --git a/v2rayN/v2rayN/Forms/MainForm.zh-Hans.resx b/v2rayN/v2rayN/Forms/MainForm.zh-Hans.resx index 21164412..ff36e4a2 100644 --- a/v2rayN/v2rayN/Forms/MainForm.zh-Hans.resx +++ b/v2rayN/v2rayN/Forms/MainForm.zh-Hans.resx @@ -124,6 +124,12 @@ 添加[VMess]服务器 + + 300, 22 + + + 添加[VLESS]服务器 + 300, 22 @@ -241,6 +247,12 @@ 测试服务器速度(多选) (Ctrl+T) + + 300, 22 + + + 测试当前服务状态 + 297, 6 @@ -275,7 +287,7 @@ 服务器 - 301, 534 + 301, 600 @@ -294,6 +306,15 @@ ZW0uRHJhd2luZy5HcmFwaGljc1VuaXQBAAAAB3ZhbHVlX18ACAMAAAADAAAACw== + + 196, 164 + + + 195, 22 + + + Http代理 + 316, 22 @@ -336,12 +357,6 @@ 仅开启PAC,不改变系统代理 - - 195, 22 - - - Http代理 - 195, 22 @@ -381,17 +396,80 @@ 退出 - - 196, 164 - 服务器列表 + + 信息 + 网速显示未启用 - - 信息 + + 61, 53 + + + 订阅 + + + 52, 53 + + + 分享 + + + 76, 53 + + + 参数设置 + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAE3SURBVFhH7ZaBDQIhDEVvBEdwBDfQDXQER3AD3cARdAPd + QDfSDbQvuSb1AicFjJrwkxcN0FIolOuamv5VE2E+gLaPayWchEcE+hhTXVPhIoQmDcFYbKpoJtwEdX4X + jgIrXfTwnzb6dBw22BaJVdjJmWQs1/SdBRtE0U5cBXW2oSFRO0HtSEeW2FZ1wsq9sjuRdTDVAXnNuWLY + 6JnAl0sYa/Q5q1dhq35ci+Bkq2HJvbZpxGeybAAuw4Fq+cnW1wPITgHFYxvBUw+qHEIL1yq1vDKhVlH3 + NQwF4JkcFRWiUAB7IVW2FFPO3YqlgPd+LJf02e8Fdi3rMdIAcLDuf9UpeT0IS0G/hvhPm305vSl7EQFY + B6zCvozvYGzRM8zEoeg5TPZwDaGvpHQni1yzSxbXPW9q+hF13ROHuJnQcjbhtQAAAABJRU5ErkJggg== + + + + 76, 53 + + + 重启服务 + + + 85, 53 + + + 检查更新 + + + 69, 53 + + + 帮助 + + + 68, 53 + + + 推广 + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAySURBVFhH7c6xDQAgCEVBRnVTHU2ZABuMxV3yOvJDAAA/ + GqfZVG6X8mg1dfUAAPBQxAZd0SJruVXHWwAAAABJRU5ErkJggg== + + + + 76, 53 + + + 关闭窗口 124, 22 @@ -405,47 +483,6 @@ 更新订阅 - - 61, 53 - - - 订阅 - - - 76, 53 - - - 参数设置 - - - 148, 22 - - - 重启服务 - - - 148, 22 - - - 测试当前服务状态 - - - - iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - wwAADsMBx2+oZAAAATdJREFUWEftloENAiEMRW8ER3AEN9ANdARHcAPdwBF0A91AN9INtC+5JvUCJwWM - mvCTFw3QUiiU65qa/lUTYT6Ato9rJZyERwT6GFNdU+EihCYNwVhsqmgm3AR1fheOAitd9PCfNvp0HDbY - FolV2MmZZCzX9J0FG0TRTlwFdbahIVE7Qe1IR5bYVnXCyr2yO5F1MNUBec25YtjomcCXSxhr9DmrV2Gr - flyL4GSrYcm9tmnEZ7JsAC7DgWr5ydbXA8hOAcVjG8FTD6ocQgvXKrW8MqFWUfc1DAXgmRwVFaJQAHsh - VbYUU87diqWA934sl/TZ7wV2Lesx0gBwsO5/1Sl5PQhLQb+G+E+bfTm9KXsRAVgHrMK+jO9gbNEzzMSh - 6DlM9nANoa+kdCeLXLNLFtc9b2r6EXXdE4e4mdByNuG1AAAAAElFTkSuQmCC - - - - 85, 53 - - - 当前服务 - 223, 22 @@ -473,44 +510,10 @@ 简化PAC (请设置Core路由) - - 85, 53 - - - 检查更新 - v2rayN 项目 V2Ray 官网 - - 69, 53 - - - 帮助 - - - 68, 53 - - - 推广 - - - - iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - wwAADsMBx2+oZAAAADJJREFUWEftzrENACAIRUFGdVMdTZkAG4zFXfI68kMAAD8ap9lUbpfyaDV19QAA - 8FDEBl3RImu5VcdbAAAAAElFTkSuQmCC - - - - 76, 53 - - - 关闭窗口 - - - 分享 - \ No newline at end of file diff --git a/v2rayN/v2rayN/Global.cs b/v2rayN/v2rayN/Global.cs index 01181dfb..487b307d 100644 --- a/v2rayN/v2rayN/Global.cs +++ b/v2rayN/v2rayN/Global.cs @@ -116,14 +116,26 @@ namespace v2rayN /// public const string vmessProtocol = "vmess://"; /// + /// vmess + /// + public const string vmessProtocolLite = "vmess"; + /// /// shadowsocks /// public const string ssProtocol = "ss://"; /// + /// shadowsocks + /// + public const string ssProtocolLite = "shadowsocks"; + /// /// socks /// public const string socksProtocol = "socks://"; /// + /// socks + /// + public const string socksProtocolLite = "socks"; + /// /// http /// public const string httpProtocol = "http://"; @@ -131,6 +143,14 @@ namespace v2rayN /// https /// public const string httpsProtocol = "https://"; + /// + /// vless + /// + public const string vlessProtocol = "vless://"; + /// + /// vless + /// + public const string vlessProtocolLite = "vless"; /// /// pac diff --git a/v2rayN/v2rayN/Handler/ConfigHandler.cs b/v2rayN/v2rayN/Handler/ConfigHandler.cs index fefad821..aeb94abb 100644 --- a/v2rayN/v2rayN/Handler/ConfigHandler.cs +++ b/v2rayN/v2rayN/Handler/ConfigHandler.cs @@ -960,5 +960,56 @@ namespace v2rayN.Handler ToJsonFile(config); return 0; } + + /// + /// 添加服务器或编辑 + /// + /// + /// + /// + /// + public static int AddVlessServer(ref Config config, VmessItem vmessItem, int index) + { + vmessItem.configVersion = 2; + vmessItem.configType = (int)EConfigType.Vless; + + vmessItem.address = vmessItem.address.TrimEx(); + vmessItem.id = vmessItem.id.TrimEx(); + vmessItem.security = vmessItem.security.TrimEx(); + vmessItem.network = vmessItem.network.TrimEx(); + vmessItem.headerType = vmessItem.headerType.TrimEx(); + vmessItem.requestHost = vmessItem.requestHost.TrimEx(); + vmessItem.path = vmessItem.path.TrimEx(); + vmessItem.streamSecurity = vmessItem.streamSecurity.TrimEx(); + + if (index >= 0) + { + //修改 + config.vmess[index] = vmessItem; + if (config.index.Equals(index)) + { + Global.reloadV2ray = true; + } + } + else + { + //添加 + if (Utils.IsNullOrEmpty(vmessItem.allowInsecure)) + { + vmessItem.allowInsecure = config.defAllowInsecure.ToString(); + } + config.vmess.Add(vmessItem); + if (config.vmess.Count == 1) + { + config.index = 0; + Global.reloadV2ray = true; + } + } + + ToJsonFile(config); + + return 0; + } + } } diff --git a/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs b/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs index 127f2b7a..888fe0b5 100644 --- a/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs +++ b/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs @@ -370,7 +370,7 @@ namespace v2rayN.Handler StreamSettings streamSettings = outbound.streamSettings; boundStreamSettings(config, "out", ref streamSettings); - outbound.protocol = "vmess"; + outbound.protocol = Global.vmessProtocolLite; outbound.settings.servers = null; } else if (config.configType() == (int)EConfigType.Shadowsocks) @@ -398,7 +398,7 @@ namespace v2rayN.Handler outbound.mux.concurrency = -1; - outbound.protocol = "shadowsocks"; + outbound.protocol = Global.ssProtocolLite; outbound.settings.vnext = null; } else if (config.configType() == (int)EConfigType.Socks) @@ -435,9 +435,51 @@ namespace v2rayN.Handler outbound.mux.enabled = false; outbound.mux.concurrency = -1; - outbound.protocol = "socks"; + outbound.protocol = Global.socksProtocolLite; outbound.settings.vnext = null; } + else if (config.configType() == (int)EConfigType.Vless) + { + VnextItem vnextItem; + if (outbound.settings.vnext.Count <= 0) + { + vnextItem = new VnextItem(); + outbound.settings.vnext.Add(vnextItem); + } + else + { + vnextItem = outbound.settings.vnext[0]; + } + //远程服务器地址和端口 + vnextItem.address = config.address(); + vnextItem.port = config.port(); + + UsersItem usersItem; + if (vnextItem.users.Count <= 0) + { + usersItem = new UsersItem(); + vnextItem.users.Add(usersItem); + } + else + { + usersItem = vnextItem.users[0]; + } + //远程服务器用户ID + usersItem.id = config.id(); + usersItem.email = Global.userEMail; + usersItem.encryption = config.security(); + + //Mux + outbound.mux.enabled = config.muxEnabled; + outbound.mux.concurrency = config.muxEnabled ? 8 : -1; + + //远程服务器底层传输配置 + StreamSettings streamSettings = outbound.streamSettings; + boundStreamSettings(config, "out", ref streamSettings); + + outbound.protocol = Global.vlessProtocolLite; + outbound.settings.servers = null; + } } catch { @@ -922,7 +964,7 @@ namespace v2rayN.Handler Outbounds outbound = v2rayConfig.outbounds[0]; if (outbound == null || Utils.IsNullOrEmpty(outbound.protocol) - || outbound.protocol != "vmess" + || outbound.protocol != Global.vmessProtocolLite || outbound.settings == null || outbound.settings.vnext == null || outbound.settings.vnext.Count <= 0 @@ -1068,7 +1110,7 @@ namespace v2rayN.Handler Inbounds inbound = v2rayConfig.inbounds[0]; if (inbound == null || Utils.IsNullOrEmpty(inbound.protocol) - || inbound.protocol != "vmess" + || inbound.protocol != Global.vmessProtocolLite || inbound.settings == null || inbound.settings.clients == null || inbound.settings.clients.Count <= 0) diff --git a/v2rayN/v2rayN/Mode/Config.cs b/v2rayN/v2rayN/Mode/Config.cs index 3c8bf76b..8c656a3e 100644 --- a/v2rayN/v2rayN/Mode/Config.cs +++ b/v2rayN/v2rayN/Mode/Config.cs @@ -422,6 +422,10 @@ namespace v2rayN.Mode { summary += string.Format("{0}({1}:{2})", remarks, addr, port); } + if (configType == (int)EConfigType.Vless) + { + summary += string.Format("{0}({1}:{2})", remarks, addr, port); + } else { summary += string.Format("{0}", remarks); diff --git a/v2rayN/v2rayN/Properties/AssemblyInfo.cs b/v2rayN/v2rayN/Properties/AssemblyInfo.cs index 97197c1b..de099cbc 100644 --- a/v2rayN/v2rayN/Properties/AssemblyInfo.cs +++ b/v2rayN/v2rayN/Properties/AssemblyInfo.cs @@ -32,4 +32,4 @@ using System.Runtime.InteropServices; // 方法是按如下所示使用“*”: //[assembly: AssemblyVersion("1.0.*")] //[assembly: AssemblyVersion("1.0.0")] -[assembly: AssemblyFileVersion("3.19")] +[assembly: AssemblyFileVersion("3.20")] From 57299cf18253d2f4f75e41e9ee3565d7cf2195b4 Mon Sep 17 00:00:00 2001 From: 2dust <31833384+2dust@users.noreply.github.com> Date: Sat, 8 Aug 2020 13:43:26 +0800 Subject: [PATCH 11/54] up vless 3 --- v2rayN/v2rayN/Forms/MainForm.cs | 2 +- v2rayN/v2rayN/Handler/ConfigHandler.cs | 2 +- v2rayN/v2rayN/Handler/MainFormHandler.cs | 6 ++++-- v2rayN/v2rayN/Handler/V2rayConfigHandler.cs | 17 +++++++++++++++-- v2rayN/v2rayN/Mode/Config.cs | 2 +- v2rayN/v2rayN/Mode/EConfigType.cs | 2 +- 6 files changed, 23 insertions(+), 8 deletions(-) diff --git a/v2rayN/v2rayN/Forms/MainForm.cs b/v2rayN/v2rayN/Forms/MainForm.cs index be5fe009..bfbbc40f 100644 --- a/v2rayN/v2rayN/Forms/MainForm.cs +++ b/v2rayN/v2rayN/Forms/MainForm.cs @@ -513,7 +513,7 @@ namespace v2rayN.Forms LoadV2ray(); } } - else if (config.vmess[index].configType == (int)EConfigType.Vless) + else if (config.vmess[index].configType == (int)EConfigType.VLESS) { AddServer5Form fm = new AddServer5Form { diff --git a/v2rayN/v2rayN/Handler/ConfigHandler.cs b/v2rayN/v2rayN/Handler/ConfigHandler.cs index aeb94abb..d8a1a7f0 100644 --- a/v2rayN/v2rayN/Handler/ConfigHandler.cs +++ b/v2rayN/v2rayN/Handler/ConfigHandler.cs @@ -971,7 +971,7 @@ namespace v2rayN.Handler public static int AddVlessServer(ref Config config, VmessItem vmessItem, int index) { vmessItem.configVersion = 2; - vmessItem.configType = (int)EConfigType.Vless; + vmessItem.configType = (int)EConfigType.VLESS; vmessItem.address = vmessItem.address.TrimEx(); vmessItem.id = vmessItem.id.TrimEx(); diff --git a/v2rayN/v2rayN/Handler/MainFormHandler.cs b/v2rayN/v2rayN/Handler/MainFormHandler.cs index 83865d92..419ba374 100644 --- a/v2rayN/v2rayN/Handler/MainFormHandler.cs +++ b/v2rayN/v2rayN/Handler/MainFormHandler.cs @@ -72,7 +72,8 @@ namespace v2rayN.Handler { return; } - if (config.vmess[index].configType != (int)EConfigType.Vmess) + if (config.vmess[index].configType != (int)EConfigType.Vmess + && config.vmess[index].configType != (int)EConfigType.VLESS) { UI.Show(UIRes.I18N("NonVmessService")); return; @@ -112,7 +113,8 @@ namespace v2rayN.Handler { return; } - if (config.vmess[index].configType != (int)EConfigType.Vmess) + if (config.vmess[index].configType != (int)EConfigType.Vmess + && config.vmess[index].configType != (int)EConfigType.VLESS) { UI.Show(UIRes.I18N("NonVmessService")); return; diff --git a/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs b/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs index 888fe0b5..535cb887 100644 --- a/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs +++ b/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs @@ -438,7 +438,7 @@ namespace v2rayN.Handler outbound.protocol = Global.socksProtocolLite; outbound.settings.vnext = null; } - else if (config.configType() == (int)EConfigType.Vless) + else if (config.configType() == (int)EConfigType.VLESS) { VnextItem vnextItem; if (outbound.settings.vnext.Count <= 0) @@ -466,6 +466,7 @@ namespace v2rayN.Handler } //远程服务器用户ID usersItem.id = config.id(); + usersItem.alterId = 0; usersItem.email = Global.userEMail; usersItem.encryption = config.security(); @@ -888,9 +889,21 @@ namespace v2rayN.Handler //远程服务器用户ID usersItem.id = config.id(); - usersItem.alterId = config.alterId(); usersItem.email = Global.userEMail; + if (config.configType() == (int)EConfigType.Vmess) + { + inbound.protocol = Global.vmessProtocolLite; + usersItem.alterId = config.alterId(); + + } + else if (config.configType() == (int)EConfigType.VLESS) + { + inbound.protocol = Global.vlessProtocolLite; + usersItem.alterId = 0; + inbound.settings.decryption = config.security(); + } + //远程服务器底层传输配置 StreamSettings streamSettings = inbound.streamSettings; boundStreamSettings(config, "in", ref streamSettings); diff --git a/v2rayN/v2rayN/Mode/Config.cs b/v2rayN/v2rayN/Mode/Config.cs index 8c656a3e..d2450fd2 100644 --- a/v2rayN/v2rayN/Mode/Config.cs +++ b/v2rayN/v2rayN/Mode/Config.cs @@ -422,7 +422,7 @@ namespace v2rayN.Mode { summary += string.Format("{0}({1}:{2})", remarks, addr, port); } - if (configType == (int)EConfigType.Vless) + if (configType == (int)EConfigType.VLESS) { summary += string.Format("{0}({1}:{2})", remarks, addr, port); } diff --git a/v2rayN/v2rayN/Mode/EConfigType.cs b/v2rayN/v2rayN/Mode/EConfigType.cs index 2d7ab219..13381ea5 100644 --- a/v2rayN/v2rayN/Mode/EConfigType.cs +++ b/v2rayN/v2rayN/Mode/EConfigType.cs @@ -7,6 +7,6 @@ namespace v2rayN.Mode Custom = 2, Shadowsocks = 3, Socks = 4, - Vless = 5 + VLESS = 5 } } From 478521d6d989e179a8fd514eb8bad6f9156b42d1 Mon Sep 17 00:00:00 2001 From: 2dust <31833384+2dust@users.noreply.github.com> Date: Sat, 8 Aug 2020 13:47:19 +0800 Subject: [PATCH 12/54] Update AssemblyInfo.cs --- v2rayN/v2rayN/Properties/AssemblyInfo.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/v2rayN/v2rayN/Properties/AssemblyInfo.cs b/v2rayN/v2rayN/Properties/AssemblyInfo.cs index de099cbc..2e8c5a95 100644 --- a/v2rayN/v2rayN/Properties/AssemblyInfo.cs +++ b/v2rayN/v2rayN/Properties/AssemblyInfo.cs @@ -32,4 +32,4 @@ using System.Runtime.InteropServices; // 方法是按如下所示使用“*”: //[assembly: AssemblyVersion("1.0.*")] //[assembly: AssemblyVersion("1.0.0")] -[assembly: AssemblyFileVersion("3.20")] +[assembly: AssemblyFileVersion("3.21")] From 76e67693fa27d5efaabc7f192b276a581db93193 Mon Sep 17 00:00:00 2001 From: RPRX <63339210+rprx@users.noreply.github.com> Date: Sat, 8 Aug 2020 08:10:23 +0000 Subject: [PATCH 13/54] =?UTF-8?q?=E5=8A=A0=E5=AF=86=E6=96=B9=E5=BC=8F(decr?= =?UTF-8?q?yption)=20->=20=E5=8A=A0=E5=AF=86(encryption)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- v2rayN/v2rayN/Forms/AddServer5Form.zh-Hans.resx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/v2rayN/v2rayN/Forms/AddServer5Form.zh-Hans.resx b/v2rayN/v2rayN/Forms/AddServer5Form.zh-Hans.resx index b5001a79..e518fc44 100644 --- a/v2rayN/v2rayN/Forms/AddServer5Form.zh-Hans.resx +++ b/v2rayN/v2rayN/Forms/AddServer5Form.zh-Hans.resx @@ -149,10 +149,10 @@ 别名(remarks) - 125, 12 + 107, 12 - 加密方式(decryption) + 加密(encryption) 65, 12 @@ -299,4 +299,4 @@ 编辑或添加[VLESS]服务器 - \ No newline at end of file + From c0430536a6a05bd6599aebc8e00972201b4386ee Mon Sep 17 00:00:00 2001 From: 2dust <31833384+2dust@users.noreply.github.com> Date: Sat, 8 Aug 2020 17:07:23 +0800 Subject: [PATCH 14/54] up vless 4 --- .../v2rayN/Forms/AddServer5Form.Designer.cs | 32 +- v2rayN/v2rayN/Forms/AddServer5Form.resx | 2107 ++++++++--------- .../v2rayN/Forms/AddServer5Form.zh-Hans.resx | 92 +- 3 files changed, 1114 insertions(+), 1117 deletions(-) diff --git a/v2rayN/v2rayN/Forms/AddServer5Form.Designer.cs b/v2rayN/v2rayN/Forms/AddServer5Form.Designer.cs index f290e0d9..2a58add6 100644 --- a/v2rayN/v2rayN/Forms/AddServer5Form.Designer.cs +++ b/v2rayN/v2rayN/Forms/AddServer5Form.Designer.cs @@ -85,15 +85,14 @@ // // btnClose // - resources.ApplyResources(this.btnClose, "btnClose"); this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel; + resources.ApplyResources(this.btnClose, "btnClose"); this.btnClose.Name = "btnClose"; this.btnClose.UseVisualStyleBackColor = true; this.btnClose.Click += new System.EventHandler(this.btnClose_Click); // // groupBox1 // - resources.ApplyResources(this.groupBox1, "groupBox1"); this.groupBox1.Controls.Add(this.btnGUID); this.groupBox1.Controls.Add(this.label13); this.groupBox1.Controls.Add(this.groupBox2); @@ -108,6 +107,7 @@ this.groupBox1.Controls.Add(this.label2); this.groupBox1.Controls.Add(this.txtAddress); this.groupBox1.Controls.Add(this.label1); + resources.ApplyResources(this.groupBox1, "groupBox1"); this.groupBox1.Name = "groupBox1"; this.groupBox1.TabStop = false; // @@ -125,7 +125,6 @@ // // groupBox2 // - resources.ApplyResources(this.groupBox2, "groupBox2"); this.groupBox2.Controls.Add(this.label24); this.groupBox2.Controls.Add(this.label23); this.groupBox2.Controls.Add(this.panTlsMore); @@ -146,6 +145,7 @@ this.groupBox2.Controls.Add(this.label11); this.groupBox2.Controls.Add(this.label10); this.groupBox2.Controls.Add(this.cmbHeaderType); + resources.ApplyResources(this.groupBox2, "groupBox2"); this.groupBox2.Name = "groupBox2"; this.groupBox2.TabStop = false; // @@ -161,9 +161,9 @@ // // panTlsMore // - resources.ApplyResources(this.panTlsMore, "panTlsMore"); this.panTlsMore.Controls.Add(this.label21); this.panTlsMore.Controls.Add(this.cmbAllowInsecure); + resources.ApplyResources(this.panTlsMore, "panTlsMore"); this.panTlsMore.Name = "panTlsMore"; // // label21 @@ -173,13 +173,13 @@ // // cmbAllowInsecure // - resources.ApplyResources(this.cmbAllowInsecure, "cmbAllowInsecure"); this.cmbAllowInsecure.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.cmbAllowInsecure.FormattingEnabled = true; this.cmbAllowInsecure.Items.AddRange(new object[] { resources.GetString("cmbAllowInsecure.Items"), resources.GetString("cmbAllowInsecure.Items1"), resources.GetString("cmbAllowInsecure.Items2")}); + resources.ApplyResources(this.cmbAllowInsecure, "cmbAllowInsecure"); this.cmbAllowInsecure.Name = "cmbAllowInsecure"; // // label9 @@ -199,7 +199,6 @@ // // cmbNetwork // - resources.ApplyResources(this.cmbNetwork, "cmbNetwork"); this.cmbNetwork.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.cmbNetwork.FormattingEnabled = true; this.cmbNetwork.Items.AddRange(new object[] { @@ -208,6 +207,7 @@ resources.GetString("cmbNetwork.Items2"), resources.GetString("cmbNetwork.Items3"), resources.GetString("cmbNetwork.Items4")}); + resources.ApplyResources(this.cmbNetwork, "cmbNetwork"); this.cmbNetwork.Name = "cmbNetwork"; this.cmbNetwork.SelectedIndexChanged += new System.EventHandler(this.cmbNetwork_SelectedIndexChanged); // @@ -248,12 +248,12 @@ // // cmbStreamSecurity // - resources.ApplyResources(this.cmbStreamSecurity, "cmbStreamSecurity"); this.cmbStreamSecurity.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.cmbStreamSecurity.FormattingEnabled = true; this.cmbStreamSecurity.Items.AddRange(new object[] { resources.GetString("cmbStreamSecurity.Items"), resources.GetString("cmbStreamSecurity.Items1")}); + resources.ApplyResources(this.cmbStreamSecurity, "cmbStreamSecurity"); this.cmbStreamSecurity.Name = "cmbStreamSecurity"; this.cmbStreamSecurity.SelectedIndexChanged += new System.EventHandler(this.cmbStreamSecurity_SelectedIndexChanged); // @@ -279,7 +279,6 @@ // // cmbHeaderType // - resources.ApplyResources(this.cmbHeaderType, "cmbHeaderType"); this.cmbHeaderType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.cmbHeaderType.FormattingEnabled = true; this.cmbHeaderType.Items.AddRange(new object[] { @@ -290,6 +289,7 @@ resources.GetString("cmbHeaderType.Items4"), resources.GetString("cmbHeaderType.Items5"), resources.GetString("cmbHeaderType.Items6")}); + resources.ApplyResources(this.cmbHeaderType, "cmbHeaderType"); this.cmbHeaderType.Name = "cmbHeaderType"; // // label8 @@ -299,11 +299,11 @@ // // cmbSecurity // - resources.ApplyResources(this.cmbSecurity, "cmbSecurity"); this.cmbSecurity.DropDownStyle = System.Windows.Forms.ComboBoxStyle.Simple; this.cmbSecurity.FormattingEnabled = true; this.cmbSecurity.Items.AddRange(new object[] { resources.GetString("cmbSecurity.Items")}); + resources.ApplyResources(this.cmbSecurity, "cmbSecurity"); this.cmbSecurity.Name = "cmbSecurity"; // // txtRemarks @@ -353,9 +353,9 @@ // // panel2 // - resources.ApplyResources(this.panel2, "panel2"); this.panel2.Controls.Add(this.btnClose); this.panel2.Controls.Add(this.btnOK); + resources.ApplyResources(this.panel2, "panel2"); this.panel2.Name = "panel2"; // // btnOK @@ -372,42 +372,42 @@ // // menuServer // - resources.ApplyResources(this.menuServer, "menuServer"); this.menuServer.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.MenuItem1}); + resources.ApplyResources(this.menuServer, "menuServer"); this.menuServer.Name = "menuServer"; // // MenuItem1 // - resources.ApplyResources(this.MenuItem1, "MenuItem1"); this.MenuItem1.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.MenuItemImportClient, this.MenuItemImportServer, this.toolStripSeparator1, this.MenuItemImportClipboard}); this.MenuItem1.Name = "MenuItem1"; + resources.ApplyResources(this.MenuItem1, "MenuItem1"); // // MenuItemImportClient // - resources.ApplyResources(this.MenuItemImportClient, "MenuItemImportClient"); this.MenuItemImportClient.Name = "MenuItemImportClient"; + resources.ApplyResources(this.MenuItemImportClient, "MenuItemImportClient"); this.MenuItemImportClient.Click += new System.EventHandler(this.MenuItemImportClient_Click); // // MenuItemImportServer // - resources.ApplyResources(this.MenuItemImportServer, "MenuItemImportServer"); this.MenuItemImportServer.Name = "MenuItemImportServer"; + resources.ApplyResources(this.MenuItemImportServer, "MenuItemImportServer"); this.MenuItemImportServer.Click += new System.EventHandler(this.MenuItemImportServer_Click); // // toolStripSeparator1 // - resources.ApplyResources(this.toolStripSeparator1, "toolStripSeparator1"); this.toolStripSeparator1.Name = "toolStripSeparator1"; + resources.ApplyResources(this.toolStripSeparator1, "toolStripSeparator1"); // // MenuItemImportClipboard // - resources.ApplyResources(this.MenuItemImportClipboard, "MenuItemImportClipboard"); this.MenuItemImportClipboard.Name = "MenuItemImportClipboard"; + resources.ApplyResources(this.MenuItemImportClipboard, "MenuItemImportClipboard"); this.MenuItemImportClipboard.Click += new System.EventHandler(this.MenuItemImportClipboard_Click); // // AddServer5Form diff --git a/v2rayN/v2rayN/Forms/AddServer5Form.resx b/v2rayN/v2rayN/Forms/AddServer5Form.resx index 154a4a9c..9bc18f5d 100644 --- a/v2rayN/v2rayN/Forms/AddServer5Form.resx +++ b/v2rayN/v2rayN/Forms/AddServer5Form.resx @@ -117,1195 +117,1192 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 4 - - - 113, 12 + + 396, 17 - - 285, 179 - - - 124, 62 - - - 6 - - - Path - - - 83, 12 - - - Transport protocol(network) - - - 7 - - - groupBox1 - - - 1 - - - label15 - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - cmbStreamSecurity - - - 3)h2 host Separated by commas (,) - - - none - - - - Top - - - - 3 - - - 17 - - - false - - - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 19 - - - True - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 6 - - - 21 - - - 411, 83 - - - Address - - - groupBox1 - - + 75, 23 - - 59, 12 - - - 1)ws path - - - 19 - - - True - - - 26 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - txtId - - - True - - - 729, 499 - - - - - - 12, 89 - - - groupBox2 - - - tls - - - True - - - 299, 12 - - - cmbAllowInsecure - - - 127, 85 - - - 16 - - - 12, 179 + + + 4 &Cancel - - label10 - - - 723, 281 - - - 5 - - - label21 - - - 359, 21 - - - System.Windows.Forms.MenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Edit or add a [VLESS] server - - - 143, 12 - - - groupBox2 - - - toolStripSeparator1 - - - NoControl - - - 21 - - - label11 - - - 5 - - - 158, 90 - - - 2 - - - 29, 12 - - - System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 237, 22 - - - 12 - - - 3)QUIC key - - - 127, 56 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - txtPort - - - 2 - - - groupBox2 - - - Bottom - - - True - - - 127, 175 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - True + + btnClose System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 29, 12 + + panel2 - - True + + 0 - - ws + + 411, 83 - - 729, 60 + + 75, 23 - - 9, 66 - - - 13 - - - Import server configuration - - - 6, 12 - - - 1 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 15 - - - label17 - - - panel1 - - - label14 - - - groupBox2 - - - 5 - - - 215, 12 - - - 0, 0 - - - 396, 17 - - - 338, 35 - - - 12, 60 - - - MenuItemImportClient - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 23 &Generate - - Encryption method (encryption) + + btnGUID - - txtRemarks + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - v2rayN.Forms.BaseForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null - - - groupBox2 - - - true - - - panTlsMore - - - True - - - cmbNetwork - - - 284, 234 - - - 95, 12 - - - NoControl - - - 350, 32 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + groupBox1 - - True - - - 24 - - - 127, 27 - - - label12 - - - 729, 594 - - - True - - - 282, 66 - - - 12 - - - *tcp or kcp or QUIC camouflage type, default none - - - 25 - - - label23 - - - allowInsecure - - - 143, 20 - - - $this - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 33 - - - 6 - - - 0 - - - 47, 12 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - label8 - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - label13 - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - 0 + + True + + + 285, 179 + + + 113, 12 + + + 22 + + + * Fill in manually + + + label13 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 1 + + + True + + + + NoControl + + + 526, 197 + + + 65, 12 + 35 - - 13 + + 3)QUIC key - - 9 + + label24 - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 11 - - - True - - - 469, 85 - - - label9 - - - label20 - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - label18 - - - MenuItem1 - - - label1 - - - 13 - - - label7 - - - 22 - - - 143, 20 - - - groupBox2 - - - groupBox2 - - - btnClose - - + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - label19 + + groupBox2 - - 143, 21 + + 0 - - 95, 12 + + True - - groupBox1 + + NoControl - - 0, 35 + + 470, 131 - - panTlsMore + + 89, 12 34 - + + 4)QUIC securty + + + label23 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 1 + + True - + + 12, 11 + + + 83, 12 + + + 31 + + + allowInsecure + + + label21 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panTlsMore + + + 0 + + + + + + true + + + false + + + 107, 7 + + + 91, 20 + + + 30 + + + cmbAllowInsecure + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panTlsMore + + + 1 + + + 284, 234 + + + 338, 35 + + + 33 + + + panTlsMore + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 2 + + + True + + + 350, 32 + + + 113, 12 + + + 15 + + + *Default value tcp + + + label9 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 3 + + True 469, 115 - - quic + + 203, 12 - + + 29 + + + 3)h2 host Separated by commas (,) + + + label20 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + groupBox2 - - h2 + + 4 - - kcp - - - 7 - - - 143, 21 - - - 526, 162 - - - 18 - - - 12, 147 - - - 18 - - - groupBox1 - - - label2 - - - groupBox2 - - - 234, 6 - - - groupBox2 - - - 119, 12 + + 124, 157 True - + + 396, 54 + + + 28 + + + txtPath + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 5 + + + tcp + + + kcp + + + ws + + + h2 + + + quic + + + 192, 28 + + + 143, 20 + + + 12 + + + cmbNetwork + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 6 + + True - - Bottom + + 9, 32 - - 91, 20 + + 167, 12 + + + 13 + + + Transport protocol(network) + + + label7 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 7 + + + True + + + 9, 157 + + + 29, 12 27 + + Path + + + label19 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 8 + + + True + + + 526, 179 + + + 59, 12 + + + 26 + + + 2)h2 path + + + label18 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 9 + + + True + + + 469, 100 + + + 59, 12 + + + 25 + + + 2)ws host + + + label17 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 10 + + + True + + + 526, 162 + + + 59, 12 + + + 24 + + + 1)ws path + + + label16 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 11 + + + True + + + 469, 85 + + + 215, 12 + + + 23 + + + 1)http host Separated by commas (,) + + + label14 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 12 + + + True + + + 9, 246 + + + 23, 12 + + + 22 + + + TLS + + + label15 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 13 + + + + + + tls + + + 124, 242 + + + 143, 20 + + + 21 + + + cmbStreamSecurity + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + groupBox2 + + 14 + + + True + + + 282, 66 + + + 299, 12 + + + 20 + + + *tcp or kcp or QUIC camouflage type, default none + + + label12 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 15 + + + 158, 90 + + + True + + + 300, 53 + + + 16 + + + txtRequestHost + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 16 + + + True + + + 9, 66 + + + 95, 12 + + + 19 + + + Camouflage type + + + label11 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + 17 - - Port + + True - + + 9, 94 + + + 143, 12 + + + 17 + + + Camouflage domain(host) + + + label10 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + groupBox2 - - Fill + + 18 - - 10 + + none - + + http + + + srtp + + + utp + + + wechat-video + + + dtls + + + wireguard + + + 124, 62 + + + 143, 20 + + + 18 + + + cmbHeaderType + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 19 + + + Bottom + + + 3, 215 + + + 723, 281 + + + 21 + + + Transport + + groupBox2 System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - groupBox1 - - - System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 0 - - - 75, 23 - - - 4 - - - True - - - 11 - - - groupBox1 - - - 8 - - - *Recommended (none) - - - 195, 143 - - - 4 - groupBox1 - - panel2 - - - 143, 20 - - - 23 - - - 1 - - - 10 - - - groupBox2 - - - 14 - - - True - - - 3, 215 - - - Import configuration file - - - wechat-video - - - 9, 32 - - - btnOK - - - 729, 10 - - - 107, 7 - - - 470, 131 - - - True - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 22 - - - 300, 53 - - - 12, 31 - - - 14 - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - dtls - - - MenuItemImportServer - - - groupBox2 - - - panel2 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 0, 534 - - - groupBox1 - - - AddServer5Form - - - wireguard - - - groupBox1 - - - Server - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 303, 17 - - - 2)ws host - - - 6 - - - True - - - 2)h2 path - - - True - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 167, 12 - - - 8 - - - Transport - - - groupBox2 - - - * Fill in manually - - - 9, 157 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 396, 54 - - - True - - - 89, 12 - - - 29 - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 1 - - - True - - - txtPath - - - 162, 21 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - txtRequestHost - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Alias (remarks) - - - 124, 157 - - - 4 - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - &OK - - - 7 - - - 3 - - - http - - - 526, 179 - - - 9 - - - groupBox2 - - - Camouflage type - - - menuServer - - - 20 - - - TLS - - - 1 - - - 3 - - - UUID(id) - - - $this - - - MenuItemImportClipboard - - - $this - - - 3 - - - groupBox1 - - - 237, 22 - - - 143, 20 - - - panTlsMore - - - 8 - - - 15 - - - 0 - - - System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 113, 12 - - - 11 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 192, 28 - - - 203, 12 - - - utp - - - txtAddress - - - 30 - - - 12 - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 23 - - - 8 - - - groupBox1 - - + 2 - - 9, 94 - - - label3 - - - srtp - - - 5 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Import URL from clipboard - - - 469, 100 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Camouflage domain(host) - - - 185, 12 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 0 - - + True - - *Default value tcp - - - 31 - - - 124, 242 - - - 9, 246 - 353, 147 - - none + + 119, 12 - + + 14 + + + *Recommended (none) + + + label8 + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - groupBox1 - - - label5 - - - 3 - - - label16 - groupBox1 - - 237, 22 + + 3 - - 16 + + none - - 1 + + 161, 143 - - 28 + + 177, 20 - - - - - groupBox2 - - - Import client configuration - - - 4)QUIC securty - - - 0, 25 + + 6 cmbSecurity - - tcp - - - groupBox2 - - - btnGUID - - - 75, 23 - - - 23, 12 - - + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + groupBox1 - - 12, 11 + + 4 - - 0 + + 127, 175 - - groupBox2 + + 143, 21 - - 278, 21 + + 11 - - 1)http host Separated by commas (,) + + txtRemarks - - label24 + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 59, 12 + + groupBox1 - - panel2 + + 5 - - 65, 12 - - - groupBox2 - - - $this - - + True - - label6 + + 12, 179 - - 59, 12 + + 95, 12 10 - - 729, 25 + + Alias (remarks) - - cmbHeaderType + + label6 - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 526, 197 + + groupBox1 - - 2 + + 6 + + + True + + + 12, 147 + + + 137, 12 + + + 8 + + + Encryption(encryption) + + + label5 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 7 + + + 127, 85 + + + 278, 21 + + + 5 + + + txtId + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 8 + + + True + + + 12, 89 53, 12 - + + 4 + + + UUID(id) + + + label3 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 9 + + + 127, 56 + + + 143, 21 + + + 3 + + + txtPort + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 10 + + True - - - zh-Hans - + + + 12, 60 + + + 29, 12 + + + 2 + + + Port + + + label2 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 11 + + + 127, 27 + + + 359, 21 + + + 1 + + + txtAddress + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 12 + + + True + + + 12, 31 + + + 47, 12 + + + 0 + + + Address + + + label1 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 13 + + + Fill + + + 0, 35 + + + 729, 499 + + + 3 + + + Server + + + groupBox1 + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 0 + + + 303, 17 + + + 75, 23 + + + 5 + + + &OK + + + btnOK + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panel2 + + + 1 + + + Bottom + + + 0, 534 + + + 729, 60 + + + 7 + + + panel2 + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 1 + + + Top + + + 0, 25 + + + 729, 10 + + + 6 + + + panel1 + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 2 + 17, 17 + + 237, 22 + + + Import client configuration + + + 237, 22 + + + Import server configuration + + + 234, 6 + + + 237, 22 + + + Import URL from clipboard + + + 162, 21 + + + Import configuration file + + + 0, 0 + + + 729, 25 + + + 8 + + + menuServer + + + System.Windows.Forms.MenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 3 + + + True + + + 6, 12 + + + 729, 594 + + + Edit or add a [VLESS] server + + + MenuItem1 + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + MenuItemImportClient + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + MenuItemImportServer + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolStripSeparator1 + + + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + MenuItemImportClipboard + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + AddServer5Form + + + v2rayN.Forms.BaseForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/v2rayN/v2rayN/Forms/AddServer5Form.zh-Hans.resx b/v2rayN/v2rayN/Forms/AddServer5Form.zh-Hans.resx index e518fc44..197b5506 100644 --- a/v2rayN/v2rayN/Forms/AddServer5Form.zh-Hans.resx +++ b/v2rayN/v2rayN/Forms/AddServer5Form.zh-Hans.resx @@ -120,6 +120,9 @@ 取消(&C) + + 服务器 + 生成(&G) @@ -130,51 +133,6 @@ 底层传输方式(transport) - - 71, 12 - - - *非空(none) - - - 143, 143 - - - 195, 20 - - - 83, 12 - - - 别名(remarks) - - - 107, 12 - - - 加密(encryption) - - - 65, 12 - - - 用户ID(id) - - - 65, 12 - - - 端口(port) - - - 83, 12 - - - 地址(address) - - - 服务器 - 95, 12 @@ -262,6 +220,48 @@ 伪装域名(host) + + 71, 12 + + + *非空(none) + + + 127, 143 + + + 220, 20 + + + 83, 12 + + + 别名(remarks) + + + 101, 12 + + + 加密(encryption) + + + 65, 12 + + + 用户ID(id) + + + 65, 12 + + + 端口(port) + + + 83, 12 + + + 地址(address) + 确定(&O) @@ -299,4 +299,4 @@ 编辑或添加[VLESS]服务器 - + \ No newline at end of file From 3823e5ca9149d8a8ecaa9de0af1339ebd4d7fa7a Mon Sep 17 00:00:00 2001 From: 2dust <31833384+2dust@users.noreply.github.com> Date: Sun, 30 Aug 2020 14:31:19 +0800 Subject: [PATCH 15/54] add kcp seed --- .../v2rayN/Forms/AddServer5Form.Designer.cs | 32 +- v2rayN/v2rayN/Forms/AddServer5Form.resx | 2168 ++++++++--------- .../v2rayN/Forms/AddServer5Form.zh-Hans.resx | 4 +- v2rayN/v2rayN/Forms/AddServerForm.resx | 462 ++-- .../v2rayN/Forms/AddServerForm.zh-Hans.resx | 28 +- v2rayN/v2rayN/Forms/MainForm.Designer.cs | 12 +- v2rayN/v2rayN/Forms/MainForm.resx | 305 ++- v2rayN/v2rayN/Forms/MainForm.zh-Hans.resx | 110 +- v2rayN/v2rayN/Handler/V2rayConfigHandler.cs | 1 + v2rayN/v2rayN/Mode/Config.cs | 2 +- v2rayN/v2rayN/Mode/V2rayConfig.cs | 4 + 11 files changed, 1565 insertions(+), 1563 deletions(-) diff --git a/v2rayN/v2rayN/Forms/AddServer5Form.Designer.cs b/v2rayN/v2rayN/Forms/AddServer5Form.Designer.cs index 2a58add6..f290e0d9 100644 --- a/v2rayN/v2rayN/Forms/AddServer5Form.Designer.cs +++ b/v2rayN/v2rayN/Forms/AddServer5Form.Designer.cs @@ -85,14 +85,15 @@ // // btnClose // - this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel; resources.ApplyResources(this.btnClose, "btnClose"); + this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel; this.btnClose.Name = "btnClose"; this.btnClose.UseVisualStyleBackColor = true; this.btnClose.Click += new System.EventHandler(this.btnClose_Click); // // groupBox1 // + resources.ApplyResources(this.groupBox1, "groupBox1"); this.groupBox1.Controls.Add(this.btnGUID); this.groupBox1.Controls.Add(this.label13); this.groupBox1.Controls.Add(this.groupBox2); @@ -107,7 +108,6 @@ this.groupBox1.Controls.Add(this.label2); this.groupBox1.Controls.Add(this.txtAddress); this.groupBox1.Controls.Add(this.label1); - resources.ApplyResources(this.groupBox1, "groupBox1"); this.groupBox1.Name = "groupBox1"; this.groupBox1.TabStop = false; // @@ -125,6 +125,7 @@ // // groupBox2 // + resources.ApplyResources(this.groupBox2, "groupBox2"); this.groupBox2.Controls.Add(this.label24); this.groupBox2.Controls.Add(this.label23); this.groupBox2.Controls.Add(this.panTlsMore); @@ -145,7 +146,6 @@ this.groupBox2.Controls.Add(this.label11); this.groupBox2.Controls.Add(this.label10); this.groupBox2.Controls.Add(this.cmbHeaderType); - resources.ApplyResources(this.groupBox2, "groupBox2"); this.groupBox2.Name = "groupBox2"; this.groupBox2.TabStop = false; // @@ -161,9 +161,9 @@ // // panTlsMore // + resources.ApplyResources(this.panTlsMore, "panTlsMore"); this.panTlsMore.Controls.Add(this.label21); this.panTlsMore.Controls.Add(this.cmbAllowInsecure); - resources.ApplyResources(this.panTlsMore, "panTlsMore"); this.panTlsMore.Name = "panTlsMore"; // // label21 @@ -173,13 +173,13 @@ // // cmbAllowInsecure // + resources.ApplyResources(this.cmbAllowInsecure, "cmbAllowInsecure"); this.cmbAllowInsecure.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.cmbAllowInsecure.FormattingEnabled = true; this.cmbAllowInsecure.Items.AddRange(new object[] { resources.GetString("cmbAllowInsecure.Items"), resources.GetString("cmbAllowInsecure.Items1"), resources.GetString("cmbAllowInsecure.Items2")}); - resources.ApplyResources(this.cmbAllowInsecure, "cmbAllowInsecure"); this.cmbAllowInsecure.Name = "cmbAllowInsecure"; // // label9 @@ -199,6 +199,7 @@ // // cmbNetwork // + resources.ApplyResources(this.cmbNetwork, "cmbNetwork"); this.cmbNetwork.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.cmbNetwork.FormattingEnabled = true; this.cmbNetwork.Items.AddRange(new object[] { @@ -207,7 +208,6 @@ resources.GetString("cmbNetwork.Items2"), resources.GetString("cmbNetwork.Items3"), resources.GetString("cmbNetwork.Items4")}); - resources.ApplyResources(this.cmbNetwork, "cmbNetwork"); this.cmbNetwork.Name = "cmbNetwork"; this.cmbNetwork.SelectedIndexChanged += new System.EventHandler(this.cmbNetwork_SelectedIndexChanged); // @@ -248,12 +248,12 @@ // // cmbStreamSecurity // + resources.ApplyResources(this.cmbStreamSecurity, "cmbStreamSecurity"); this.cmbStreamSecurity.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.cmbStreamSecurity.FormattingEnabled = true; this.cmbStreamSecurity.Items.AddRange(new object[] { resources.GetString("cmbStreamSecurity.Items"), resources.GetString("cmbStreamSecurity.Items1")}); - resources.ApplyResources(this.cmbStreamSecurity, "cmbStreamSecurity"); this.cmbStreamSecurity.Name = "cmbStreamSecurity"; this.cmbStreamSecurity.SelectedIndexChanged += new System.EventHandler(this.cmbStreamSecurity_SelectedIndexChanged); // @@ -279,6 +279,7 @@ // // cmbHeaderType // + resources.ApplyResources(this.cmbHeaderType, "cmbHeaderType"); this.cmbHeaderType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.cmbHeaderType.FormattingEnabled = true; this.cmbHeaderType.Items.AddRange(new object[] { @@ -289,7 +290,6 @@ resources.GetString("cmbHeaderType.Items4"), resources.GetString("cmbHeaderType.Items5"), resources.GetString("cmbHeaderType.Items6")}); - resources.ApplyResources(this.cmbHeaderType, "cmbHeaderType"); this.cmbHeaderType.Name = "cmbHeaderType"; // // label8 @@ -299,11 +299,11 @@ // // cmbSecurity // + resources.ApplyResources(this.cmbSecurity, "cmbSecurity"); this.cmbSecurity.DropDownStyle = System.Windows.Forms.ComboBoxStyle.Simple; this.cmbSecurity.FormattingEnabled = true; this.cmbSecurity.Items.AddRange(new object[] { resources.GetString("cmbSecurity.Items")}); - resources.ApplyResources(this.cmbSecurity, "cmbSecurity"); this.cmbSecurity.Name = "cmbSecurity"; // // txtRemarks @@ -353,9 +353,9 @@ // // panel2 // + resources.ApplyResources(this.panel2, "panel2"); this.panel2.Controls.Add(this.btnClose); this.panel2.Controls.Add(this.btnOK); - resources.ApplyResources(this.panel2, "panel2"); this.panel2.Name = "panel2"; // // btnOK @@ -372,42 +372,42 @@ // // menuServer // + resources.ApplyResources(this.menuServer, "menuServer"); this.menuServer.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.MenuItem1}); - resources.ApplyResources(this.menuServer, "menuServer"); this.menuServer.Name = "menuServer"; // // MenuItem1 // + resources.ApplyResources(this.MenuItem1, "MenuItem1"); this.MenuItem1.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.MenuItemImportClient, this.MenuItemImportServer, this.toolStripSeparator1, this.MenuItemImportClipboard}); this.MenuItem1.Name = "MenuItem1"; - resources.ApplyResources(this.MenuItem1, "MenuItem1"); // // MenuItemImportClient // - this.MenuItemImportClient.Name = "MenuItemImportClient"; resources.ApplyResources(this.MenuItemImportClient, "MenuItemImportClient"); + this.MenuItemImportClient.Name = "MenuItemImportClient"; this.MenuItemImportClient.Click += new System.EventHandler(this.MenuItemImportClient_Click); // // MenuItemImportServer // - this.MenuItemImportServer.Name = "MenuItemImportServer"; resources.ApplyResources(this.MenuItemImportServer, "MenuItemImportServer"); + this.MenuItemImportServer.Name = "MenuItemImportServer"; this.MenuItemImportServer.Click += new System.EventHandler(this.MenuItemImportServer_Click); // // toolStripSeparator1 // - this.toolStripSeparator1.Name = "toolStripSeparator1"; resources.ApplyResources(this.toolStripSeparator1, "toolStripSeparator1"); + this.toolStripSeparator1.Name = "toolStripSeparator1"; // // MenuItemImportClipboard // - this.MenuItemImportClipboard.Name = "MenuItemImportClipboard"; resources.ApplyResources(this.MenuItemImportClipboard, "MenuItemImportClipboard"); + this.MenuItemImportClipboard.Name = "MenuItemImportClipboard"; this.MenuItemImportClipboard.Click += new System.EventHandler(this.MenuItemImportClipboard_Click); // // AddServer5Form diff --git a/v2rayN/v2rayN/Forms/AddServer5Form.resx b/v2rayN/v2rayN/Forms/AddServer5Form.resx index 9bc18f5d..3c01ce5a 100644 --- a/v2rayN/v2rayN/Forms/AddServer5Form.resx +++ b/v2rayN/v2rayN/Forms/AddServer5Form.resx @@ -117,1192 +117,1192 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 396, 17 - - - 75, 23 - - - + 4 - - &Cancel - - - btnClose - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - panel2 - - - 0 - - - 411, 83 - - - 75, 23 - - - 23 - - - &Generate - - - btnGUID - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 0 - - - True + + + 113, 12 285, 179 - - 113, 12 + + 124, 62 - - 22 - - - * Fill in manually - - - label13 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 1 - - - True - - - - NoControl - - - 526, 197 - - - 65, 12 - - - 35 - - - 3)QUIC key - - - label24 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 0 - - - True - - - NoControl - - - 470, 131 - - - 89, 12 - - - 34 - - - 4)QUIC securty - - - label23 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 1 - - - True - - - 12, 11 - - - 83, 12 - - - 31 - - - allowInsecure - - - label21 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - panTlsMore - - - 0 - - - - - - true - - - false - - - 107, 7 - - - 91, 20 - - - 30 - - - cmbAllowInsecure - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - panTlsMore - - - 1 - - - 284, 234 - - - 338, 35 - - - 33 - - - panTlsMore - - - System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 2 - - - True - - - 350, 32 - - - 113, 12 - - - 15 - - - *Default value tcp - - - label9 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 3 - - - True - - - 469, 115 - - - 203, 12 - - - 29 - - - 3)h2 host Separated by commas (,) - - - label20 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 4 - - - 124, 157 - - - True - - - 396, 54 - - - 28 - - - txtPath - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 5 - - - tcp - - - kcp - - - ws - - - h2 - - - quic - - - 192, 28 - - - 143, 20 - - - 12 - - - cmbNetwork - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - + 6 - - True - - - 9, 32 - - - 167, 12 - - - 13 - - - Transport protocol(network) - - - label7 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 7 - - - True - - - 9, 157 - - - 29, 12 - - - 27 - Path - - label19 + + 83, 12 - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Transport protocol(network) - - groupBox2 + + 7 - - 8 + + panTlsMore - - True + + groupBox1 - - 526, 179 - - - 59, 12 - - - 26 - - - 2)h2 path - - - label18 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 9 - - - True - - - 469, 100 - - - 59, 12 - - - 25 - - - 2)ws host - - - label17 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 10 - - - True - - - 526, 162 - - - 59, 12 - - - 24 - - - 1)ws path - - - label16 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 11 - - - True - - - 469, 85 - - - 215, 12 - - - 23 - - - 1)http host Separated by commas (,) - - - label14 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 12 - - - True - - - 9, 246 - - - 23, 12 - - - 22 - - - TLS + + 1 label15 - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 13 - - - - - - tls - - - 124, 242 - - - 143, 20 - - - 21 + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 cmbStreamSecurity - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 3)h2 host Separated by commas (,) - + + none + + + + Top + + + + 3 + + + 17 + + + false + + + 19 + + + True + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 6 + + + 21 + + + 411, 83 + + + Address + + + groupBox1 + + + 59, 12 + + + 1)ws path + + + 19 + + + True + + + 26 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + txtId + + + True + + + 729, 499 + + + + + + 12, 89 + + groupBox2 - - 14 + + tls - + + True + + + 299, 12 + + + panTlsMore + + + 8 + + + cmbAllowInsecure + + + 127, 85 + + + 16 + + + 12, 179 + + + &Cancel + + + label10 + + + 723, 281 + + + 5 + + + label21 + + + System.Windows.Forms.MenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 143, 12 + + + groupBox2 + + + toolStripSeparator1 + + + NoControl + + + 21 + + + label11 + + + 5 + + + 158, 90 + + + 2 + + + 29, 12 + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 234, 6 + + + 237, 22 + + + 3)QUIC key/Kcp seed + + + 127, 56 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + txtPort + + + 2 + + + groupBox2 + + + Bottom + + + True + + + 127, 175 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 29, 12 + + + ws + + + 11 + + + 9, 66 + + + 13 + + + Import server configuration + + + 6, 12 + + + 1 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 15 + + + label17 + + + panel1 + + + label14 + + + groupBox2 + + + 215, 12 + + + 0, 0 + + + 396, 17 + + + 338, 35 + + + 12, 60 + + + MenuItemImportClient + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + &Generate + + + Encryption(encryption) + + + txtRemarks + + + v2rayN.Forms.BaseForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + + + groupBox2 + + + true + + + panTlsMore + + + True + + + cmbNetwork + + + 284, 234 + + + 95, 12 + + + NoControl + + + 350, 32 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + True + + + groupBox2 + + + 127, 27 + + + label12 + + True 282, 66 - - 299, 12 + + 12 - - 20 + + 25 - - *tcp or kcp or QUIC camouflage type, default none + + label23 - - label12 + + groupBox1 + + + 143, 20 + + + 1 + + + $this + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 33 + + + 6 + + + none + + + 0 + + + 2 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + label8 + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + label13 + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 0 + + + 35 + + + 13 + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 11 + + + True + + + 469, 85 + + + label9 + + + label20 + + + 124, 157 + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + label18 + + + MenuItem1 + + + label1 + + + 13 + + + 34 + + + 22 + + + 177, 20 + + + groupBox2 + + + btnClose System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - groupBox2 + + label19 - - 15 + + 143, 21 - - 158, 90 - - - True - - - 300, 53 - - - 16 - - - txtRequestHost - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 16 - - - True - - - 9, 66 - - + 95, 12 - - 19 + + groupBox1 - - Camouflage type + + 0, 35 - - label11 - - + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 729, 60 + + + allowInsecure + + + True + + + 469, 115 + + + $this + + + quic + groupBox2 + + h2 + + + kcp + + + 7 + + + 143, 21 + + + 526, 162 + + + 18 + + + 12, 147 + + + 18 + + + groupBox1 + + + label2 + + + groupBox2 + + + 24 + + + groupBox2 + + + 119, 12 + + + True + + + True + + + Bottom + + + 91, 20 + + + 27 + + + 23 + + + groupBox2 + 17 - - True + + Port - - 9, 94 - - - 143, 12 - - - 17 - - - Camouflage domain(host) - - - label10 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + groupBox2 - - 18 + + Fill - - none + + 10 - - http - - - srtp - - - utp - - - wechat-video - - - dtls - - - wireguard - - - 124, 62 - - - 143, 20 - - - 18 - - - cmbHeaderType - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 19 - - - Bottom - - - 3, 215 - - - 723, 281 - - - 21 - - - Transport - - + groupBox2 System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - groupBox1 - - - 2 - - - True - - - 353, 147 - - - 119, 12 - - - 14 - - - *Recommended (none) - - - label8 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 3 - - - none - - - 161, 143 - - - 177, 20 - - - 6 - - - cmbSecurity - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 4 - - - 127, 175 - - - 143, 21 - - - 11 - - - txtRemarks - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - groupBox1 - - 5 - - - True - - - 12, 179 - - - 95, 12 - - - 10 - - - Alias (remarks) - - - label6 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 6 - - - True - - - 12, 147 - - - 137, 12 - - - 8 - - - Encryption(encryption) - - - label5 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 7 - - - 127, 85 - - - 278, 21 - - - 5 - - - txtId - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 8 - - - True - - - 12, 89 - - - 53, 12 - - - 4 - - - UUID(id) - - - label3 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 9 - - - 127, 56 - - - 143, 21 - - - 3 - - - txtPort - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 10 - - - True - - - 12, 60 - - - 29, 12 - - - 2 - - - Port - - - label2 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 11 - - - 127, 27 - - - 359, 21 - - - 1 - - - txtAddress - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 12 - - - True - - - 12, 31 - - - 47, 12 - - - 0 - - - Address - - - label1 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 13 - - - Fill - - - 0, 35 - - - 729, 499 - - - 3 - - - Server - - - groupBox1 - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 0 - - - 303, 17 - - - 75, 23 - - - 5 - - - &OK - - - btnOK - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - panel2 - - - 1 - - - Bottom - - - 0, 534 - - - 729, 60 - - - 7 - - - panel2 - System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - $this + + 0 - - 1 + + 75, 23 - - Top + + 4 - - 0, 25 + + True - - 729, 10 + + 11 - - 6 - - - panel1 - - - System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 2 - - - 17, 17 - - - 237, 22 - - - Import client configuration - - - 237, 22 - - - Import server configuration - - - 234, 6 - - - 237, 22 - - - Import URL from clipboard - - - 162, 21 - - - Import configuration file - - - 0, 0 - - - 729, 25 + + groupBox1 8 - - menuServer + + *Recommended (none) - - System.Windows.Forms.MenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 161, 143 - - $this + + 4 - - 3 + + groupBox1 - + + panel2 + + + 143, 20 + + + 23 + + + 1 + + + 6 + + + 10 + + + 14 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + True - - - 6, 12 - - 729, 594 + + 3, 215 - - Edit or add a [VLESS] server + + Import configuration file - - MenuItem1 + + wechat-video - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 23, 12 - - MenuItemImportClient + + 729, 10 - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 470, 131 + + + True + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 22 + + + 396, 54 + + + 300, 53 + + + 1)http host Separated by commas (,) + + + 12, 31 + + + 14 + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + dtls + + + 47, 12 MenuItemImportServer - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + groupBox2 - - toolStripSeparator1 + + panel2 - - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - MenuItemImportClipboard + + 0, 534 - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + groupBox1 AddServer5Form - - v2rayN.Forms.BaseForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + + wireguard + + groupBox1 + + + + + + Server + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 303, 17 + + + 2)ws host + + + groupBox1 + + + txtAddress + + + True + + + 2)h2 path + + + True + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 167, 12 + + + 8 + + + Transport + + + groupBox2 + + + * Fill in manually + + + 9, 157 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 12 + + + True + + + 89, 12 + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 1 + + + 119, 12 + + + txtPath + + + 162, 21 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + txtRequestHost + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Alias (remarks) + + + groupBox2 + + + label7 + + + 4 + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + &OK + + + 7 + + + 3 + + + http + + + True + + + 526, 179 + + + 9 + + + groupBox2 + + + Camouflage type + + + menuServer + + + 20 + + + TLS + + + 1 + + + 3 + + + UUID(id) + + + $this + + + MenuItemImportClipboard + + + $this + + + 3 + + + groupBox1 + + + 237, 22 + + + 143, 20 + + + True + + + 8 + + + Camouflage domain(host) + + + 0 + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 113, 12 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 192, 28 + + + 203, 12 + + + utp + + + 124, 242 + + + 30 + + + 12 + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 359, 21 + + + 29 + + + 469, 100 + + + 2 + + + 9, 94 + + + label3 + + + srtp + + + 5 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Import URL from clipboard + + + True + + + 75, 23 + + + 137, 12 + + + *Default value tcp + + + 0 + + + 729, 594 + + + 5 + + + 31 + + + True + + + 9, 246 + + + 353, 147 + + + Edit or add a [VLESS] server + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + label5 + + + 3 + + + label16 + + + btnOK + + + 237, 22 + + + 16 + + + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 28 + + + 107, 7 + + + groupBox2 + + + Import client configuration + + + 15 + + + 4)QUIC securty + + + 0, 25 + + + cmbSecurity + + + tcp + + + groupBox2 + + + btnGUID + + + 75, 23 + + + *tcp or kcp or QUIC camouflage type, default none + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 12, 11 + + + 0 + + + groupBox2 + + + 278, 21 + + + 9, 32 + + + label24 + + + 59, 12 + + + panel2 + + + 9 + + + groupBox2 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + label6 + + + 59, 12 + + + 10 + + + 729, 25 + + + cmbHeaderType + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 526, 197 + + + 53, 12 + + + True + + + 17, 17 + \ No newline at end of file diff --git a/v2rayN/v2rayN/Forms/AddServer5Form.zh-Hans.resx b/v2rayN/v2rayN/Forms/AddServer5Form.zh-Hans.resx index 197b5506..4e3deccf 100644 --- a/v2rayN/v2rayN/Forms/AddServer5Form.zh-Hans.resx +++ b/v2rayN/v2rayN/Forms/AddServer5Form.zh-Hans.resx @@ -134,10 +134,10 @@ - 95, 12 + 149, 12 - 3)QUIC 加密密钥 + 3)QUIC 加密密钥/Kcp seed 95, 12 diff --git a/v2rayN/v2rayN/Forms/AddServerForm.resx b/v2rayN/v2rayN/Forms/AddServerForm.resx index b4cd8bfa..2940479f 100644 --- a/v2rayN/v2rayN/Forms/AddServerForm.resx +++ b/v2rayN/v2rayN/Forms/AddServerForm.resx @@ -133,9 +133,6 @@ 124, 62 - - groupBox2 - 6 @@ -157,17 +154,15 @@ 1 - - 6, 12 - label15 System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - cmbStreamSecurity + + + 6 3)h2 host Separated by commas (,) @@ -176,7 +171,6 @@ Top - 3 @@ -186,6 +180,9 @@ false + + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + 19 @@ -201,9 +198,6 @@ System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - 6 @@ -261,18 +255,12 @@ True + + toolStripSeparator1 + 299, 12 - - panTlsMore - - - 10 - - - aes-128-gcm - groupBox1 @@ -282,6 +270,9 @@ 16 + + utp + 12, 179 @@ -300,17 +291,29 @@ label21 + + 359, 21 + System.Windows.Forms.MenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Edit or add a [VMess] server + 143, 12 groupBox2 - - toolStripSeparator1 + + 17 + + + tcp + + + 127, 27 NoControl @@ -321,8 +324,8 @@ label11 - - 5 + + aes-128-gcm 158, 90 @@ -342,14 +345,8 @@ 237, 22 - - 12 - - - TLS - - 3)QUIC key + 3)QUIC key/Kcp seed 127, 56 @@ -369,8 +366,8 @@ Bottom - - True + + label16 127, 175 @@ -393,26 +390,26 @@ 29, 12 + + True + ws 13 - - 9, 66 - 15 - - Import server configuration + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 173, 12 + + 6, 12 - - 1 + + 9, 157 7 @@ -426,6 +423,9 @@ panel1 + + label14 + groupBox2 @@ -438,8 +438,8 @@ 0, 0 - - 396, 17 + + 15 338, 35 @@ -456,8 +456,8 @@ &Generate - - Encryption method (security) + + 195, 143 none @@ -480,8 +480,8 @@ panTlsMore - - True + + 162, 21 127, 114 @@ -492,6 +492,9 @@ 95, 12 + + NoControl + 350, 32 @@ -516,12 +519,15 @@ groupBox2 - - 127, 27 + + 107, 7 label12 + + label2 + AlterId @@ -534,6 +540,9 @@ 12 + + *tcp or kcp or QUIC camouflage type, default none + 25 @@ -543,11 +552,8 @@ allowInsecure - - 143, 20 - - - 1 + + 9, 66 $this @@ -558,29 +564,32 @@ System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 1 + 33 6 - - none - 0 47, 12 + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + label8 System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - label13 + + 9, 32 System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -612,9 +621,6 @@ label20 - - 124, 157 - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -633,12 +639,15 @@ 13 - - 34 + + label7 143, 20 + + True + groupBox2 @@ -669,8 +678,11 @@ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 729, 60 + + 34 + + + True True @@ -678,9 +690,6 @@ 469, 115 - - $this - quic @@ -699,8 +708,8 @@ 143, 21 - - 526, 162 + + 396, 17 18 @@ -714,14 +723,17 @@ groupBox1 - - label2 + + 3, 215 + + + 729, 594 groupBox2 - - 24 + + 143, 20 groupBox2 @@ -729,38 +741,26 @@ 119, 12 - - 278, 21 - True True - - Bottom + + 4 91, 20 - - 53, 12 - 27 - - groupBox2 - - - 23 - groupBox2 - - 17 + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Port @@ -786,8 +786,8 @@ groupBox1 - - System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + True 0 @@ -813,8 +813,8 @@ *Recommended (auto) - - 4 + + cmbStreamSecurity groupBox1 @@ -831,20 +831,26 @@ 1 - - 10 + + 6 + + + groupBox2 14 - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 10 True - - 3, 215 + + 173, 12 + + + groupBox1 Import configuration file @@ -852,11 +858,14 @@ wechat-video - - 23, 12 + + btnOK - - 729, 10 + + 75, 23 + + + Import server configuration 470, 131 @@ -870,15 +879,21 @@ 22 + + 396, 54 + 300, 53 - - 1)http host Separated by commas (,) - 12, 31 + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 2 + 14 @@ -888,6 +903,9 @@ dtls + + label4 + MenuItemImportServer @@ -897,14 +915,17 @@ panel2 - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 5 0, 534 - - groupBox1 + + Encryption method (security) + + + UUID(id) AddServerForm @@ -912,14 +933,14 @@ wireguard + + 24 + groupBox1 - - - - - 124, 242 + + 729, 10 Server @@ -933,11 +954,8 @@ 2)ws host - - groupBox1 - - - 6 + + 8 True @@ -954,9 +972,6 @@ 167, 12 - - 8 - Transport @@ -966,24 +981,21 @@ * Fill in manually - - 9, 157 - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 396, 54 + + 12 True - - 12, 11 - 89, 12 + + 29 + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -993,14 +1005,17 @@ 1 - - 65, 12 + + True txtPath - - 162, 21 + + 11 + + + Bottom System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -1008,23 +1023,23 @@ txtRequestHost + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Alias (remarks) - - groupBox2 - - - label7 + + 124, 157 4 - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + cmbAllowInsecure &OK @@ -1053,14 +1068,20 @@ groupBox2 + + Camouflage type + menuServer 20 - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + TLS + + + $this 1 @@ -1068,15 +1089,18 @@ 3 - - UUID(id) + + 353, 147 - - $this + + srtp MenuItemImportClipboard + + label13 + $this @@ -1086,17 +1110,14 @@ groupBox1 - - cmbAllowInsecure - 237, 22 143, 20 - - True + + panTlsMore 8 @@ -1104,8 +1125,8 @@ 0 - - 15 + + Camouflage domain(host) 0 @@ -1125,8 +1146,8 @@ 203, 12 - - utp + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 txtAddress @@ -1140,18 +1161,18 @@ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 469, 100 + + 23 - - 359, 21 - - - 29 + + 10 auto + + 0 + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -1167,53 +1188,41 @@ label3 - - srtp - 5 - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + groupBox1 Import URL from clipboard - - True + + 469, 100 - - 75, 23 - - - Camouflage domain(host) - - - *Default value tcp + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 0 - - 729, 594 + + 526, 162 - - label4 + + *Default value tcp 31 - - True + + 124, 242 9, 246 - - 353, 147 - - - Edit or add a [VMess] server + + none System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -1221,20 +1230,14 @@ 8 - - groupBox1 - label5 3 - - label16 - - - btnOK + + groupBox1 237, 22 @@ -1242,14 +1245,14 @@ 16 - - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 1 28 - - 107, 7 + + groupBox2 @@ -1272,11 +1275,8 @@ cmbSecurity - - tcp - - - 6 + + groupBox2 btnGUID @@ -1284,8 +1284,8 @@ 75, 23 - - *tcp or kcp or QUIC camouflage type, default none + + 23, 12 System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -1293,20 +1293,20 @@ groupBox1 - - Camouflage type + + 12, 11 - - 0 + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 groupBox2 - - NoControl + + 278, 21 - - 9, 32 + + 1)http host Separated by commas (,) label24 @@ -1317,14 +1317,14 @@ panel2 - - 11 + + 119, 12 - - 195, 143 + + groupBox2 - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + $this True @@ -1350,11 +1350,11 @@ 526, 197 - - 2 + + 729, 60 - - label14 + + 53, 12 True diff --git a/v2rayN/v2rayN/Forms/AddServerForm.zh-Hans.resx b/v2rayN/v2rayN/Forms/AddServerForm.zh-Hans.resx index ac1c4911..33c992e3 100644 --- a/v2rayN/v2rayN/Forms/AddServerForm.zh-Hans.resx +++ b/v2rayN/v2rayN/Forms/AddServerForm.zh-Hans.resx @@ -120,24 +120,18 @@ 取消(&C) - - 服务器 - 生成(&G) *手填,方便识别管理 - - 底层传输方式(transport) - - 95, 12 + 149, 12 - 3)QUIC 加密密钥 + 3)QUIC 加密密钥/Kcp seed 95, 12 @@ -220,6 +214,9 @@ 伪装域名(host) + + 底层传输方式(transport) + 113, 12 @@ -268,15 +265,12 @@ 地址(address) + + 服务器 + 确定(&O) - - 92, 21 - - - 导入配置文件 - 171, 22 @@ -298,6 +292,12 @@ 从剪贴板导入URL + + 92, 21 + + + 导入配置文件 + 编辑或添加[VMess]服务器 diff --git a/v2rayN/v2rayN/Forms/MainForm.Designer.cs b/v2rayN/v2rayN/Forms/MainForm.Designer.cs index d6d2b0fc..a3c67a98 100644 --- a/v2rayN/v2rayN/Forms/MainForm.Designer.cs +++ b/v2rayN/v2rayN/Forms/MainForm.Designer.cs @@ -62,8 +62,8 @@ this.menuExport2ServerConfig = new System.Windows.Forms.ToolStripMenuItem(); this.menuExport2ShareUrl = new System.Windows.Forms.ToolStripMenuItem(); this.menuExport2SubContent = new System.Windows.Forms.ToolStripMenuItem(); - this.qrCodeControl = new v2rayN.Forms.QRCodeControl(); this.tsbServer = new System.Windows.Forms.ToolStripDropDownButton(); + this.qrCodeControl = new v2rayN.Forms.QRCodeControl(); this.notifyMain = new System.Windows.Forms.NotifyIcon(this.components); this.cmsMain = new System.Windows.Forms.ContextMenuStrip(this.components); this.menuSysAgentMode = new System.Windows.Forms.ToolStripMenuItem(); @@ -381,11 +381,6 @@ this.menuExport2SubContent.Name = "menuExport2SubContent"; this.menuExport2SubContent.Click += new System.EventHandler(this.menuExport2SubContent_Click); // - // qrCodeControl - // - resources.ApplyResources(this.qrCodeControl, "qrCodeControl"); - this.qrCodeControl.Name = "qrCodeControl"; - // // tsbServer // resources.ApplyResources(this.tsbServer, "tsbServer"); @@ -393,6 +388,11 @@ this.tsbServer.Image = global::v2rayN.Properties.Resources.server; this.tsbServer.Name = "tsbServer"; // + // qrCodeControl + // + resources.ApplyResources(this.qrCodeControl, "qrCodeControl"); + this.qrCodeControl.Name = "qrCodeControl"; + // // notifyMain // resources.ApplyResources(this.notifyMain, "notifyMain"); diff --git a/v2rayN/v2rayN/Forms/MainForm.resx b/v2rayN/v2rayN/Forms/MainForm.resx index de7f141e..128805e9 100644 --- a/v2rayN/v2rayN/Forms/MainForm.resx +++ b/v2rayN/v2rayN/Forms/MainForm.resx @@ -151,9 +151,6 @@ Restart service - - 184, 6 - tsbSubSetting @@ -172,9 +169,6 @@ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 355, 22 - ImageAboveText @@ -201,9 +195,6 @@ toolStripSeparator6 - - Set as active server (Enter) - 99, 53 @@ -216,20 +207,23 @@ 187, 22 - - groupBox2 - toolSslBlank2 + + tsbCheckUpdateN + 355, 22 355, 22 - - tsbCheckUpdateN + + Move to top (T) + + + 45, 53 Only open Http proxy and do nothing @@ -246,6 +240,9 @@ Magenta + + menuKeepNothing + 355, 22 @@ -264,18 +261,11 @@ tsbQRCodeSwitch - - - iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - wwAADsMBx2+oZAAAADJJREFUWEftzrENACAIRUFGdVMdTZkAG4zFXfI68kMAAD8ap9lUbpfyaDV19QAA - 8FDEBl3RImu5VcdbAAAAAElFTkSuQmCC - - 355, 22 - - 0, 0 + + Export selected server for client configuration System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -292,8 +282,8 @@ Export selected server for server configuration - - 0, 17 + + ImageAboveText 952, 56 @@ -310,17 +300,14 @@ menuTcpingServer - - 0 - - - ImageAboveText + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 6, 56 + + 356, 578 System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -346,18 +333,12 @@ 393, 22 - - 0, 56 - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tsbClose - - 355, 22 - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -382,9 +363,6 @@ tsbLanguageDef - - Import bulk URL from clipboard (Ctrl+V) - iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO @@ -423,15 +401,15 @@ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + toolSslPacPortLab + 220, 17 menuAddCustomServer - - statusStrip1 - menuMoveDown @@ -456,6 +434,9 @@ 48, 53 + + 393, 22 + 355, 22 @@ -495,6 +476,9 @@ scMain.Panel2 + + System.Windows.Forms.ToolStripDropDownButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + 39, 17 @@ -504,6 +488,9 @@ Fill + + tsbServer + Add [VMess] server @@ -540,11 +527,8 @@ 352, 6 - - 355, 22 - - - 0, 0 + + tsbPromotion 256, 331 @@ -588,6 +572,9 @@ 355, 22 + + Not Enabled Http Proxy + 187, 22 @@ -606,8 +593,8 @@ ImageAboveText - - 52, 53 + + lvServers 265, 164 @@ -615,11 +602,8 @@ 411, 22 - - $this - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + menuUpdateSubscriptions scMain @@ -627,8 +611,11 @@ Check for updates - - 0, 17 + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolSslServerSpeed System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -666,12 +653,15 @@ menuSelectAll - - Move to top (T) + + $this System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Vertical + System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -690,8 +680,8 @@ 187, 22 - - menuAddServers + + tsbReload 355, 22 @@ -711,14 +701,11 @@ menuExport2ShareUrl - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - tsbReload + + SOCKS5: v2rayN (this software) @@ -771,6 +758,9 @@ 0 + + Fill + toolSslBlank3 @@ -783,8 +773,8 @@ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - ImageAboveText + + toolStripSeparator11 System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -875,6 +865,12 @@ SPEED Disabled + + PAC: + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + Promotion @@ -887,6 +883,9 @@ ImageAboveText + + Export subscription (base64) share to clipboard + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -902,9 +901,6 @@ menuServers - - menuUpdateSubscriptions - $this @@ -914,11 +910,14 @@ toolStripSeparator13 + + 1 + System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 264, 22 + + 0, 17 3, 151 @@ -1019,21 +1018,21 @@ menuExit - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - Servers list System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - lvServers + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 menuRealPingServer + + Magenta + System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -1046,18 +1045,12 @@ 2 - - Magenta - menuKeepPACNothing Check for updated PAC (need the HTTP proxy are ON) - - toolStripSeparator11 - 355, 22 @@ -1067,9 +1060,6 @@ Servers - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -1088,21 +1078,18 @@ tsbCheckUpdateCore - - SOCKS5: + + menuSpeedServer 33, 17 - - toolSslServerSpeed + + 355, 22 menuRemoveServer - - 355, 22 - tsbTestMe @@ -1136,6 +1123,9 @@ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Only open PAC and do nothing + 355, 22 @@ -1154,11 +1144,8 @@ 0, 0 - - Add [Shadowsocks] server - - - System.Windows.Forms.ToolStripDropDownButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 355, 22 groupBox2 @@ -1184,6 +1171,9 @@ 355, 22 + + v2rayN.Forms.QRCodeControl, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + 微软雅黑, 8pt @@ -1193,9 +1183,6 @@ Simplify PAC (need to set Core route) - - menuExport2ClientConfig - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -1205,17 +1192,17 @@ $this - - Fill + + 0, 0 qrCodeControl - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 264, 22 - - tsbServer + + 355, 22 0 @@ -1229,8 +1216,8 @@ 微软雅黑, 8pt - - tsbPromotion + + groupBox2 ImageAboveText @@ -1244,11 +1231,11 @@ 393, 22 - - 356, 578 + + 184, 6 - - $this + + 0, 0 scMain.Panel1 @@ -1271,9 +1258,6 @@ MiddleRight - - Magenta - tsbOptionSetting @@ -1292,8 +1276,8 @@ 64, 53 - - 1 + + Magenta 946, 22 @@ -1301,23 +1285,26 @@ Open PAC and set the system proxy (PAC mode) - - Magenta + + 355, 22 - - 45, 53 + + Set as active server (Enter) menuAddVlessServer + + System.Windows.Forms.StatusStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + 946, 331 - - v2rayN.Forms.QRCodeControl, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + + 6, 56 - - Not Enabled Http Proxy + + Add [Shadowsocks] server 390, 6 @@ -1358,8 +1345,8 @@ Magenta - - menuKeepNothing + + menuExport2ClientConfig 187, 22 @@ -1376,17 +1363,23 @@ 6, 56 + + 0, 17 + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - Export subscription (base64) share to clipboard + + Magenta - - 393, 22 + + 52, 53 - - toolSslPacPortLab + + ImageAboveText + + + menuAddServers System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -1403,8 +1396,8 @@ Scan QR code on the screen - - PAC: + + 0, 56 Close @@ -1415,11 +1408,14 @@ 0, 17 - - Only open PAC and do nothing + + 0 - - Export selected server for client configuration + + Import bulk URL from clipboard (Ctrl+V) + + + $this toolStripSeparator2 @@ -1442,8 +1438,8 @@ 952, 176 - - menuSpeedServer + + statusStrip1 System.Windows.Forms.ToolStripDropDownButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -1463,8 +1459,12 @@ toolStripSeparator3 - - Vertical + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + wwAADsMBx2+oZAAAADJJREFUWEftzrENACAIRUFGdVMdTZkAG4zFXfI68kMAAD8ap9lUbpfyaDV19QAA + 8FDEBl3RImu5VcdbAAAAAElFTkSuQmCC + 355, 22 @@ -1478,8 +1478,8 @@ System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - System.Windows.Forms.StatusStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tsbCheckUpdatePACList @@ -1487,15 +1487,9 @@ 228, 18 - - zh-Hans - True - - 17, 17 - 108 @@ -1505,6 +1499,9 @@ 498, 17 + + 17, 17 + 409, 17 diff --git a/v2rayN/v2rayN/Forms/MainForm.zh-Hans.resx b/v2rayN/v2rayN/Forms/MainForm.zh-Hans.resx index ff36e4a2..cf481b01 100644 --- a/v2rayN/v2rayN/Forms/MainForm.zh-Hans.resx +++ b/v2rayN/v2rayN/Forms/MainForm.zh-Hans.resx @@ -287,7 +287,7 @@ 服务器 - 301, 600 + 301, 578 @@ -306,15 +306,6 @@ ZW0uRHJhd2luZy5HcmFwaGljc1VuaXQBAAAAB3ZhbHVlX18ACAMAAAADAAAACw== - - 196, 164 - - - 195, 22 - - - Http代理 - 316, 22 @@ -357,6 +348,12 @@ 仅开启PAC,不改变系统代理 + + 195, 22 + + + Http代理 + 195, 22 @@ -396,14 +393,29 @@ 退出 + + 196, 164 + 服务器列表 + + 网速显示未启用 + 信息 - - 网速显示未启用 + + 124, 22 + + + 订阅设置 + + + 124, 22 + + + 更新订阅 61, 53 @@ -440,49 +452,6 @@ 重启服务 - - 85, 53 - - - 检查更新 - - - 69, 53 - - - 帮助 - - - 68, 53 - - - 推广 - - - - iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAySURBVFhH7c6xDQAgCEVBRnVTHU2ZABuMxV3yOvJDAAA/ - GqfZVG6X8mg1dfUAAPBQxAZd0SJruVXHWwAAAABJRU5ErkJggg== - - - - 76, 53 - - - 关闭窗口 - - - 124, 22 - - - 订阅设置 - - - 124, 22 - - - 更新订阅 - 223, 22 @@ -510,10 +479,41 @@ 简化PAC (请设置Core路由) + + 85, 53 + + + 检查更新 + v2rayN 项目 V2Ray 官网 + + 69, 53 + + + 帮助 + + + 68, 53 + + + 推广 + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAySURBVFhH7c6xDQAgCEVBRnVTHU2ZABuMxV3yOvJDAAA/ + GqfZVG6X8mg1dfUAAPBQxAZd0SJruVXHWwAAAABJRU5ErkJggg== + + + + 76, 53 + + + 关闭窗口 + \ No newline at end of file diff --git a/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs b/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs index 535cb887..31cf5138 100644 --- a/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs +++ b/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs @@ -551,6 +551,7 @@ namespace v2rayN.Handler { type = config.headerType() }; + kcpSettings.seed = config.path(); streamSettings.kcpSettings = kcpSettings; break; //ws diff --git a/v2rayN/v2rayN/Mode/Config.cs b/v2rayN/v2rayN/Mode/Config.cs index d2450fd2..90d4eb9c 100644 --- a/v2rayN/v2rayN/Mode/Config.cs +++ b/v2rayN/v2rayN/Mode/Config.cs @@ -422,7 +422,7 @@ namespace v2rayN.Mode { summary += string.Format("{0}({1}:{2})", remarks, addr, port); } - if (configType == (int)EConfigType.VLESS) + else if (configType == (int)EConfigType.VLESS) { summary += string.Format("{0}({1}:{2})", remarks, addr, port); } diff --git a/v2rayN/v2rayN/Mode/V2rayConfig.cs b/v2rayN/v2rayN/Mode/V2rayConfig.cs index be1ad4a0..dd0bc7ca 100644 --- a/v2rayN/v2rayN/Mode/V2rayConfig.cs +++ b/v2rayN/v2rayN/Mode/V2rayConfig.cs @@ -471,6 +471,10 @@ namespace v2rayN.Mode /// /// public Header header { get; set; } + /// + /// + /// + public string seed { get; set; } } public class WsSettings From ab4d34b6ac3bf7e74694ebde7077daa4e2d71df6 Mon Sep 17 00:00:00 2001 From: 2dust <31833384+2dust@users.noreply.github.com> Date: Sun, 30 Aug 2020 14:33:22 +0800 Subject: [PATCH 16/54] Update AssemblyInfo.cs --- v2rayN/v2rayN/Properties/AssemblyInfo.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/v2rayN/v2rayN/Properties/AssemblyInfo.cs b/v2rayN/v2rayN/Properties/AssemblyInfo.cs index 2e8c5a95..6b5598e8 100644 --- a/v2rayN/v2rayN/Properties/AssemblyInfo.cs +++ b/v2rayN/v2rayN/Properties/AssemblyInfo.cs @@ -32,4 +32,4 @@ using System.Runtime.InteropServices; // 方法是按如下所示使用“*”: //[assembly: AssemblyVersion("1.0.*")] //[assembly: AssemblyVersion("1.0.0")] -[assembly: AssemblyFileVersion("3.21")] +[assembly: AssemblyFileVersion("3.22")] From 0713c0c6679b514353c98aa6a9ec381ebef2330e Mon Sep 17 00:00:00 2001 From: 2dust <31833384+2dust@users.noreply.github.com> Date: Tue, 1 Sep 2020 08:38:06 +0800 Subject: [PATCH 17/54] fix kcp seed --- v2rayN/v2rayN/Handler/V2rayConfigHandler.cs | 5 ++++- v2rayN/v2rayN/Properties/AssemblyInfo.cs | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs b/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs index 31cf5138..356acb8e 100644 --- a/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs +++ b/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs @@ -551,7 +551,10 @@ namespace v2rayN.Handler { type = config.headerType() }; - kcpSettings.seed = config.path(); + if (!Utils.IsNullOrEmpty(config.path())) + { + kcpSettings.seed = config.path(); + } streamSettings.kcpSettings = kcpSettings; break; //ws diff --git a/v2rayN/v2rayN/Properties/AssemblyInfo.cs b/v2rayN/v2rayN/Properties/AssemblyInfo.cs index 6b5598e8..c68ef520 100644 --- a/v2rayN/v2rayN/Properties/AssemblyInfo.cs +++ b/v2rayN/v2rayN/Properties/AssemblyInfo.cs @@ -32,4 +32,4 @@ using System.Runtime.InteropServices; // 方法是按如下所示使用“*”: //[assembly: AssemblyVersion("1.0.*")] //[assembly: AssemblyVersion("1.0.0")] -[assembly: AssemblyFileVersion("3.22")] +[assembly: AssemblyFileVersion("3.23")] From f892f0c533c505385b660a39e96e86fbf80f928e Mon Sep 17 00:00:00 2001 From: 2dust <31833384+2dust@users.noreply.github.com> Date: Tue, 6 Oct 2020 16:43:04 +0800 Subject: [PATCH 18/54] add VLESS xtls --- .../v2rayN/Forms/AddServer5Form.Designer.cs | 25 +- v2rayN/v2rayN/Forms/AddServer5Form.cs | 8 +- v2rayN/v2rayN/Forms/AddServer5Form.resx | 241 +++++++++++------- .../v2rayN/Forms/AddServer5Form.zh-Hans.resx | 8 +- v2rayN/v2rayN/Global.cs | 1 + v2rayN/v2rayN/Handler/V2rayConfigHandler.cs | 18 ++ v2rayN/v2rayN/Mode/Config.cs | 18 +- v2rayN/v2rayN/Mode/V2rayConfig.cs | 12 +- v2rayN/v2rayN/Properties/AssemblyInfo.cs | 2 +- 9 files changed, 237 insertions(+), 96 deletions(-) diff --git a/v2rayN/v2rayN/Forms/AddServer5Form.Designer.cs b/v2rayN/v2rayN/Forms/AddServer5Form.Designer.cs index f290e0d9..2e457125 100644 --- a/v2rayN/v2rayN/Forms/AddServer5Form.Designer.cs +++ b/v2rayN/v2rayN/Forms/AddServer5Form.Designer.cs @@ -31,6 +31,8 @@ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AddServer5Form)); this.btnClose = new System.Windows.Forms.Button(); this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.cmbFlow = new System.Windows.Forms.ComboBox(); + this.label4 = new System.Windows.Forms.Label(); this.btnGUID = new System.Windows.Forms.Button(); this.label13 = new System.Windows.Forms.Label(); this.groupBox2 = new System.Windows.Forms.GroupBox(); @@ -94,6 +96,8 @@ // groupBox1 // resources.ApplyResources(this.groupBox1, "groupBox1"); + this.groupBox1.Controls.Add(this.cmbFlow); + this.groupBox1.Controls.Add(this.label4); this.groupBox1.Controls.Add(this.btnGUID); this.groupBox1.Controls.Add(this.label13); this.groupBox1.Controls.Add(this.groupBox2); @@ -111,6 +115,22 @@ this.groupBox1.Name = "groupBox1"; this.groupBox1.TabStop = false; // + // cmbFlow + // + resources.ApplyResources(this.cmbFlow, "cmbFlow"); + this.cmbFlow.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cmbFlow.FormattingEnabled = true; + this.cmbFlow.Items.AddRange(new object[] { + resources.GetString("cmbFlow.Items"), + resources.GetString("cmbFlow.Items1"), + resources.GetString("cmbFlow.Items2")}); + this.cmbFlow.Name = "cmbFlow"; + // + // label4 + // + resources.ApplyResources(this.label4, "label4"); + this.label4.Name = "label4"; + // // btnGUID // resources.ApplyResources(this.btnGUID, "btnGUID"); @@ -253,7 +273,8 @@ this.cmbStreamSecurity.FormattingEnabled = true; this.cmbStreamSecurity.Items.AddRange(new object[] { resources.GetString("cmbStreamSecurity.Items"), - resources.GetString("cmbStreamSecurity.Items1")}); + resources.GetString("cmbStreamSecurity.Items1"), + resources.GetString("cmbStreamSecurity.Items2")}); this.cmbStreamSecurity.Name = "cmbStreamSecurity"; this.cmbStreamSecurity.SelectedIndexChanged += new System.EventHandler(this.cmbStreamSecurity_SelectedIndexChanged); // @@ -485,5 +506,7 @@ private System.Windows.Forms.Panel panTlsMore; private System.Windows.Forms.Label label24; private System.Windows.Forms.Label label23; + private System.Windows.Forms.ComboBox cmbFlow; + private System.Windows.Forms.Label label4; } } \ No newline at end of file diff --git a/v2rayN/v2rayN/Forms/AddServer5Form.cs b/v2rayN/v2rayN/Forms/AddServer5Form.cs index b11974e5..43ef11ea 100644 --- a/v2rayN/v2rayN/Forms/AddServer5Form.cs +++ b/v2rayN/v2rayN/Forms/AddServer5Form.cs @@ -36,7 +36,8 @@ namespace v2rayN.Forms { txtAddress.Text = vmessItem.address; txtPort.Text = vmessItem.port.ToString(); - txtId.Text = vmessItem.id; + txtId.Text = vmessItem.id; + cmbFlow.Text = vmessItem.flow; cmbSecurity.Text = vmessItem.security; cmbNetwork.Text = vmessItem.network; txtRemarks.Text = vmessItem.remarks; @@ -57,6 +58,7 @@ namespace v2rayN.Forms txtAddress.Text = ""; txtPort.Text = ""; txtId.Text = ""; + cmbFlow.Text = ""; cmbSecurity.Text = Global.None; cmbNetwork.Text = Global.DefaultNetwork; txtRemarks.Text = ""; @@ -112,6 +114,7 @@ namespace v2rayN.Forms string address = txtAddress.Text; string port = txtPort.Text; string id = txtId.Text; + string flow = cmbFlow.Text; string security = cmbSecurity.Text; string network = cmbNetwork.Text; string remarks = txtRemarks.Text; @@ -137,11 +140,12 @@ namespace v2rayN.Forms UI.Show(UIRes.I18N("FillUUID")); return; } - + vmessItem.address = address; vmessItem.port = Utils.ToInt(port); vmessItem.id = id; + vmessItem.flow = flow; vmessItem.security = security; vmessItem.network = network; vmessItem.remarks = remarks; diff --git a/v2rayN/v2rayN/Forms/AddServer5Form.resx b/v2rayN/v2rayN/Forms/AddServer5Form.resx index 3c01ce5a..e83bbdee 100644 --- a/v2rayN/v2rayN/Forms/AddServer5Form.resx +++ b/v2rayN/v2rayN/Forms/AddServer5Form.resx @@ -118,12 +118,15 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - 4 + 6 113, 12 + + 1 + 285, 179 @@ -131,7 +134,7 @@ 124, 62 - 6 + 8 Path @@ -143,16 +146,16 @@ Transport protocol(network) - 7 + 9 panTlsMore - - groupBox1 + + 4 - - 1 + + 6, 12 label15 @@ -166,9 +169,6 @@ 3)h2 host Separated by commas (,) - - none - Top @@ -198,6 +198,9 @@ System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 127, 117 + 6 @@ -262,10 +265,13 @@ panTlsMore - 8 + 10 - - cmbAllowInsecure + + none + + + groupBox1 127, 85 @@ -273,6 +279,9 @@ 16 + + utp + 12, 179 @@ -318,6 +327,9 @@ 158, 90 + + 0 + 2 @@ -333,6 +345,12 @@ 237, 22 + + 12 + + + TLS + 3)QUIC key/Kcp seed @@ -346,7 +364,7 @@ txtPort - 2 + 4 groupBox2 @@ -382,19 +400,19 @@ ws - 11 + 13 9, 66 - 13 + 15 Import server configuration - - 6, 12 + + 137, 12 1 @@ -405,6 +423,9 @@ 15 + + xtls-rprx-origin-udp443 + label17 @@ -417,6 +438,9 @@ groupBox2 + + 5 + 215, 12 @@ -447,6 +471,9 @@ txtRemarks + + 29, 12 + v2rayN.Forms.BaseForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null @@ -471,8 +498,8 @@ 95, 12 - - NoControl + + 1 350, 32 @@ -480,15 +507,21 @@ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 22 - - groupBox1 + + 526, 179 + + + 211, 20 True + + groupBox2 + groupBox2 @@ -498,6 +531,9 @@ label12 + + Flow + True @@ -513,8 +549,8 @@ label23 - - groupBox1 + + allowInsecure 143, 20 @@ -543,11 +579,11 @@ 0 - - 2 + + xtls - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 47, 12 label8 @@ -562,7 +598,7 @@ System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - 0 + 2 35 @@ -585,6 +621,9 @@ label9 + + cmbFlow + label20 @@ -600,24 +639,27 @@ MenuItem1 - - label1 + + groupBox1 13 - - 34 - - - 22 + + label7 177, 20 + + groupBox1 + groupBox2 + + True + btnClose @@ -645,9 +687,6 @@ 729, 60 - - allowInsecure - True @@ -672,6 +711,9 @@ 7 + + NoControl + 143, 21 @@ -705,6 +747,9 @@ 119, 12 + + 278, 21 + True @@ -739,7 +784,7 @@ Fill - 10 + 12 groupBox2 @@ -780,9 +825,6 @@ 161, 143 - - 4 - groupBox1 @@ -798,9 +840,6 @@ 1 - - 6 - 10 @@ -828,6 +867,9 @@ 729, 10 + + 107, 7 + 470, 131 @@ -840,8 +882,8 @@ 22 - - 396, 54 + + 300, 53 @@ -861,12 +903,12 @@ dtls - - 47, 12 - MenuItemImportServer + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + groupBox2 @@ -894,6 +936,9 @@ + + 124, 242 + Server @@ -909,8 +954,8 @@ groupBox1 - - txtAddress + + 6 True @@ -945,8 +990,8 @@ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 12 + + 396, 54 True @@ -958,7 +1003,7 @@ System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - 1 + 3 119, 12 @@ -984,9 +1029,6 @@ groupBox2 - - label7 - 4 @@ -1005,11 +1047,14 @@ http + + label1 + True - - 526, 179 + + 34 9 @@ -1026,14 +1071,14 @@ 20 - - TLS + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 1 - 3 + 5 UUID(id) @@ -1053,6 +1098,9 @@ groupBox1 + + cmbAllowInsecure + 237, 22 @@ -1065,8 +1113,11 @@ 8 - - Camouflage domain(host) + + 24 + + + 15 0 @@ -1086,29 +1137,32 @@ 203, 12 - - utp + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 124, 242 + + txtAddress 30 - 12 + 14 System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 469, 100 + 359, 21 29 - - 469, 100 + + groupBox1 2 @@ -1123,7 +1177,7 @@ srtp - 5 + 7 System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -1137,8 +1191,8 @@ 75, 23 - - 137, 12 + + Camouflage domain(host) *Default value tcp @@ -1149,8 +1203,8 @@ 729, 594 - - 5 + + label4 31 @@ -1197,17 +1251,20 @@ 28 - - 107, 7 + + groupBox1 groupBox2 + + xtls-rprx-origin + Import client configuration - - 15 + + 12, 121 4)QUIC securty @@ -1215,14 +1272,17 @@ 0, 25 + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + cmbSecurity tcp - - groupBox2 + + 25 btnGUID @@ -1248,8 +1308,8 @@ groupBox2 - - 278, 21 + + NoControl 9, 32 @@ -1264,7 +1324,7 @@ panel2 - 9 + 11 groupBox2 @@ -1296,6 +1356,9 @@ 526, 197 + + 2 + 53, 12 diff --git a/v2rayN/v2rayN/Forms/AddServer5Form.zh-Hans.resx b/v2rayN/v2rayN/Forms/AddServer5Form.zh-Hans.resx index 4e3deccf..61459587 100644 --- a/v2rayN/v2rayN/Forms/AddServer5Form.zh-Hans.resx +++ b/v2rayN/v2rayN/Forms/AddServer5Form.zh-Hans.resx @@ -123,6 +123,13 @@ 服务器 + + + 65, 12 + + + 流控(Flow) + 生成(&G) @@ -132,7 +139,6 @@ 底层传输方式(transport) - 149, 12 diff --git a/v2rayN/v2rayN/Global.cs b/v2rayN/v2rayN/Global.cs index 487b307d..bc7c5d8d 100644 --- a/v2rayN/v2rayN/Global.cs +++ b/v2rayN/v2rayN/Global.cs @@ -103,6 +103,7 @@ namespace v2rayN /// /// public const string StreamSecurity = "tls"; + public const string StreamSecurityX = "xtls"; public const string InboundSocks = "socks"; public const string InboundHttp = "http"; diff --git a/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs b/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs index 356acb8e..fb9d53ce 100644 --- a/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs +++ b/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs @@ -467,6 +467,7 @@ namespace v2rayN.Handler //远程服务器用户ID usersItem.id = config.id(); usersItem.alterId = 0; + usersItem.flow = config.flow(); usersItem.email = Global.userEMail; usersItem.encryption = config.security(); @@ -518,6 +519,22 @@ namespace v2rayN.Handler streamSettings.tlsSettings = tlsSettings; } + //if xtls + if (config.streamSecurity() == Global.StreamSecurityX) + { + streamSettings.security = config.streamSecurity(); + + TlsSettings xtlsSettings = new TlsSettings + { + allowInsecure = config.allowInsecure() + }; + if (!string.IsNullOrWhiteSpace(host)) + { + xtlsSettings.serverName = host; + } + streamSettings.xtlsSettings = xtlsSettings; + } + //streamSettings switch (config.network()) { @@ -905,6 +922,7 @@ namespace v2rayN.Handler { inbound.protocol = Global.vlessProtocolLite; usersItem.alterId = 0; + usersItem.flow = config.flow(); inbound.settings.decryption = config.security(); } diff --git a/v2rayN/v2rayN/Mode/Config.cs b/v2rayN/v2rayN/Mode/Config.cs index 90d4eb9c..eac745fd 100644 --- a/v2rayN/v2rayN/Mode/Config.cs +++ b/v2rayN/v2rayN/Mode/Config.cs @@ -365,7 +365,14 @@ namespace v2rayN.Mode return vmess[index].getItemId(); } - + public string flow() + { + if (index < 0) + { + return string.Empty; + } + return vmess[index].flow.TrimEx(); + } #endregion } @@ -391,6 +398,7 @@ namespace v2rayN.Mode configType = (int)EConfigType.Vmess; testResult = string.Empty; subid = string.Empty; + flow = string.Empty; } public string getSummary() @@ -582,6 +590,14 @@ namespace v2rayN.Mode { get; set; } + + /// + /// VLESS flow + /// + public string flow + { + get; set; + } } [Serializable] diff --git a/v2rayN/v2rayN/Mode/V2rayConfig.cs b/v2rayN/v2rayN/Mode/V2rayConfig.cs index dd0bc7ca..9f0cbf1f 100644 --- a/v2rayN/v2rayN/Mode/V2rayConfig.cs +++ b/v2rayN/v2rayN/Mode/V2rayConfig.cs @@ -164,6 +164,11 @@ namespace v2rayN.Mode /// VLESS /// public string encryption { get; set; } + + /// + /// VLESS + /// + public string flow { get; set; } } public class Sniffing { @@ -393,7 +398,12 @@ namespace v2rayN.Mode /// QUIC /// public QuicSettings quicSettings { get; set; } - + + /// + /// VLESS xtls + /// + public TlsSettings xtlsSettings { get; set; } + } public class TlsSettings diff --git a/v2rayN/v2rayN/Properties/AssemblyInfo.cs b/v2rayN/v2rayN/Properties/AssemblyInfo.cs index c68ef520..275106c7 100644 --- a/v2rayN/v2rayN/Properties/AssemblyInfo.cs +++ b/v2rayN/v2rayN/Properties/AssemblyInfo.cs @@ -32,4 +32,4 @@ using System.Runtime.InteropServices; // 方法是按如下所示使用“*”: //[assembly: AssemblyVersion("1.0.*")] //[assembly: AssemblyVersion("1.0.0")] -[assembly: AssemblyFileVersion("3.23")] +[assembly: AssemblyFileVersion("3.24")] From 6c0a364d0388d2f372a0d0bef1636adc3cabc622 Mon Sep 17 00:00:00 2001 From: 2dust <31833384+2dust@users.noreply.github.com> Date: Tue, 6 Oct 2020 16:49:44 +0800 Subject: [PATCH 19/54] Update V2rayConfigHandler.cs --- v2rayN/v2rayN/Handler/V2rayConfigHandler.cs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs b/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs index fb9d53ce..c42050a8 100644 --- a/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs +++ b/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs @@ -467,9 +467,14 @@ namespace v2rayN.Handler //远程服务器用户ID usersItem.id = config.id(); usersItem.alterId = 0; - usersItem.flow = config.flow(); + usersItem.flow = string.Empty; usersItem.email = Global.userEMail; usersItem.encryption = config.security(); + //if xtls + if (config.streamSecurity() == Global.StreamSecurityX) + { + usersItem.flow = config.flow(); + } //Mux outbound.mux.enabled = config.muxEnabled; From b487dcf448e10450afe1cbb27d2890e6a88e5696 Mon Sep 17 00:00:00 2001 From: 2dust <31833384+2dust@users.noreply.github.com> Date: Tue, 6 Oct 2020 19:39:17 +0800 Subject: [PATCH 20/54] Adjust UI --- .../v2rayN/Forms/AddServer3Form.Designer.cs | 14 +- v2rayN/v2rayN/Forms/AddServer3Form.resx | 688 +++-- .../v2rayN/Forms/AddServer3Form.zh-Hans.resx | 56 +- .../v2rayN/Forms/AddServer4Form.Designer.cs | 12 +- v2rayN/v2rayN/Forms/AddServer4Form.resx | 622 ++-- .../v2rayN/Forms/AddServer4Form.zh-Hans.resx | 70 +- .../v2rayN/Forms/AddServer5Form.Designer.cs | 34 +- v2rayN/v2rayN/Forms/AddServer5Form.resx | 2543 +++++++++-------- .../v2rayN/Forms/AddServer5Form.zh-Hans.resx | 54 +- v2rayN/v2rayN/Forms/AddServerForm.Designer.cs | 32 +- v2rayN/v2rayN/Forms/AddServerForm.resx | 2505 ++++++++-------- .../v2rayN/Forms/AddServerForm.zh-Hans.resx | 60 +- 12 files changed, 3890 insertions(+), 2800 deletions(-) diff --git a/v2rayN/v2rayN/Forms/AddServer3Form.Designer.cs b/v2rayN/v2rayN/Forms/AddServer3Form.Designer.cs index 3515e6b9..06312421 100644 --- a/v2rayN/v2rayN/Forms/AddServer3Form.Designer.cs +++ b/v2rayN/v2rayN/Forms/AddServer3Form.Designer.cs @@ -55,14 +55,15 @@ // // btnClose // - this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel; resources.ApplyResources(this.btnClose, "btnClose"); + this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel; this.btnClose.Name = "btnClose"; this.btnClose.UseVisualStyleBackColor = true; this.btnClose.Click += new System.EventHandler(this.btnClose_Click); // // groupBox1 // + resources.ApplyResources(this.groupBox1, "groupBox1"); this.groupBox1.Controls.Add(this.label13); this.groupBox1.Controls.Add(this.cmbSecurity); this.groupBox1.Controls.Add(this.txtRemarks); @@ -74,7 +75,6 @@ this.groupBox1.Controls.Add(this.label2); this.groupBox1.Controls.Add(this.txtAddress); this.groupBox1.Controls.Add(this.label1); - resources.ApplyResources(this.groupBox1, "groupBox1"); this.groupBox1.Name = "groupBox1"; this.groupBox1.TabStop = false; // @@ -85,6 +85,7 @@ // // cmbSecurity // + resources.ApplyResources(this.cmbSecurity, "cmbSecurity"); this.cmbSecurity.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.cmbSecurity.FormattingEnabled = true; this.cmbSecurity.Items.AddRange(new object[] { @@ -96,7 +97,6 @@ resources.GetString("cmbSecurity.Items5"), resources.GetString("cmbSecurity.Items6"), resources.GetString("cmbSecurity.Items7")}); - resources.ApplyResources(this.cmbSecurity, "cmbSecurity"); this.cmbSecurity.Name = "cmbSecurity"; // // txtRemarks @@ -146,9 +146,9 @@ // // panel2 // + resources.ApplyResources(this.panel2, "panel2"); this.panel2.Controls.Add(this.btnClose); this.panel2.Controls.Add(this.btnOK); - resources.ApplyResources(this.panel2, "panel2"); this.panel2.Name = "panel2"; // // btnOK @@ -165,22 +165,22 @@ // // menuServer // + resources.ApplyResources(this.menuServer, "menuServer"); this.menuServer.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.MenuItem1}); - resources.ApplyResources(this.menuServer, "menuServer"); this.menuServer.Name = "menuServer"; // // MenuItem1 // + resources.ApplyResources(this.MenuItem1, "MenuItem1"); this.MenuItem1.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.menuItemImportClipboard}); this.MenuItem1.Name = "MenuItem1"; - resources.ApplyResources(this.MenuItem1, "MenuItem1"); // // menuItemImportClipboard // - this.menuItemImportClipboard.Name = "menuItemImportClipboard"; resources.ApplyResources(this.menuItemImportClipboard, "menuItemImportClipboard"); + this.menuItemImportClipboard.Name = "menuItemImportClipboard"; this.menuItemImportClipboard.Click += new System.EventHandler(this.menuItemImportClipboard_Click); // // AddServer3Form diff --git a/v2rayN/v2rayN/Forms/AddServer3Form.resx b/v2rayN/v2rayN/Forms/AddServer3Form.resx index 7aa4052a..272c310f 100644 --- a/v2rayN/v2rayN/Forms/AddServer3Form.resx +++ b/v2rayN/v2rayN/Forms/AddServer3Form.resx @@ -118,267 +118,489 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 113, 12 + + + 53, 12 + + + label6 + + + groupBox1 + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 547, 25 + + + 11 + + + $this + + + groupBox1 + + + 8 + - - 6, 12 + + Bottom - - 547, 291 + + Import configuration file - - True + + groupBox1 - - Edit or add a [Shadowsocks] server + + panel1 + + + 3 + + + Password + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuItemImportClipboard + + + Fill + + + groupBox1 + + + 8 + + + 89, 12 + + + 127, 27 + + + System.Windows.Forms.MenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 0 + + + aes-256-cfb + + + 6 + + + 5 + + + 303, 17 + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 4 + + + MenuItem1 + + + 0 + + + 359, 21 + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 396, 17 - - 75, 23 + + 8 - + + 0, 0 + + + label1 + + + 547, 60 + + + 0, 25 + + + Encryption + + + groupBox1 + + + True + + + 22 + + + 162, 21 + + + 127, 123 + + + 127, 91 + + + groupBox1 + + + panel2 + + + 5 + + + 2 + + + Alias (remarks) + + + groupBox1 + + + True + + + label5 + + + txtId + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 12, 31 + + + groupBox1 + + + 1 + + + AddServer3Form + + + 194, 21 + + + groupBox1 + + + 127, 59 + + + 0 + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 71, 12 + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 12, 124 + + + 2 + + + 10 + + + txtPort + + + aes-128-cfb + + + 547, 10 + + + 0, 35 + + + 5 + + + 235, 22 + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Edit or add a [Shadowsocks] server + + + &OK + + + chacha20 + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + btnClose + + + panel2 + + + 0 + + + 3 + + + 12, 93 + + + 194, 20 + + + 10 + + + chacha20-ietf + + + True + + + panel2 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 194, 21 + + + 1 + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 6 + + + 1 + + + 7 + + + label13 + + + aes-256-gcm + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + v2rayN.Forms.BaseForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + + + label3 + + + Server port + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 0, 231 + + + 9 + + + aes-128-gcm + + 4 &Cancel - - 303, 17 - - - 75, 23 - - - 5 - - - &OK - - - aes-256-cfb - - - aes-128-cfb - - - chacha20 - - - chacha20-ietf - - - aes-256-gcm - - - aes-128-gcm - - - chacha20-poly1305 - - - chacha20-ietf-poly1305 - - - 127, 120 - - - 194, 20 - - - 6 - - - Fill - - - 0, 35 - - - 547, 196 - - - 3 - - - Server - - - True - - - 12, 31 - - - 89, 12 - - - 0 - - - Server address - True - - 337, 158 - - - 113, 12 - - - 22 - - - * Fill in manually - - - True - - - 12, 60 - - - 71, 12 - - - 2 - - - Server port - - - True - - - 12, 89 - - - 53, 12 - - - 4 - - - Password + + 6, 12 True - - 12, 124 + + Server address - - 65, 12 + + menuServer - - 8 - - - Encryption - - - True - - - 12, 158 - - - 95, 12 - - - 10 - - - Alias (remarks) - - - 162, 21 - - - Import configuration file - - - 235, 22 - - - Import URL from clipboard - - - 0, 0 - - - 547, 25 - - - 8 - - - 17, 17 - - - Top - - - 0, 25 - - - 547, 10 - - - 6 - - - Bottom - - - 0, 231 - - - 547, 60 - - - 7 - - - 127, 27 - - - 359, 21 - - - 1 - - - 127, 85 - - - * - - - 278, 21 - - - 5 - - - 127, 56 - - - 194, 21 - - - 3 + + txtAddress 127, 154 - - 194, 21 + + chacha20-poly1305 - - 11 + + 95, 12 + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + * Fill in manually + + + 7 + + + label2 + + + 12, 62 + + + 547, 291 + + + chacha20-ietf-poly1305 + + + btnOK + + + cmbSecurity + + + $this + + + 547, 196 + + + 3 + + + 75, 23 + + + 6 + + + 337, 158 + + + 65, 12 + + + 4 + + + 2 + + + 1 + + + * + + + 75, 23 + + + Import URL from clipboard + + + groupBox1 + + + Server + + + txtRemarks + + + 12, 155 + + + True + + + 278, 21 + + + Top + + + 3 + + + True + + + 17, 17 + \ No newline at end of file diff --git a/v2rayN/v2rayN/Forms/AddServer3Form.zh-Hans.resx b/v2rayN/v2rayN/Forms/AddServer3Form.zh-Hans.resx index c9d6760a..e2cbcede 100644 --- a/v2rayN/v2rayN/Forms/AddServer3Form.zh-Hans.resx +++ b/v2rayN/v2rayN/Forms/AddServer3Form.zh-Hans.resx @@ -117,40 +117,62 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 编辑或添加[Shadowsocks]服务器 - 取消(&C) - - 确定(&O) - 服务器 - - 服务器地址 - *手填,方便识别管理 - - 服务器端口 - - - 密码 - - - 加密方式 + + + 83, 12 别名(remarks) + + 53, 12 + + + 加密方式 + + + 29, 12 + + + 密码 + + + 65, 12 + + + 服务器端口 + + + 65, 12 + + + 服务器地址 + + + 确定(&O) + + + 92, 21 + 导入配置文件 + + 171, 22 + 从剪贴板导入URL + + 编辑或添加[Shadowsocks]服务器 + \ No newline at end of file diff --git a/v2rayN/v2rayN/Forms/AddServer4Form.Designer.cs b/v2rayN/v2rayN/Forms/AddServer4Form.Designer.cs index 3ae98f0b..bdcd694a 100644 --- a/v2rayN/v2rayN/Forms/AddServer4Form.Designer.cs +++ b/v2rayN/v2rayN/Forms/AddServer4Form.Designer.cs @@ -55,14 +55,15 @@ // // btnClose // - this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel; resources.ApplyResources(this.btnClose, "btnClose"); + this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel; this.btnClose.Name = "btnClose"; this.btnClose.UseVisualStyleBackColor = true; this.btnClose.Click += new System.EventHandler(this.btnClose_Click); // // groupBox1 // + resources.ApplyResources(this.groupBox1, "groupBox1"); this.groupBox1.Controls.Add(this.txtSecurity); this.groupBox1.Controls.Add(this.label4); this.groupBox1.Controls.Add(this.txtId); @@ -74,7 +75,6 @@ this.groupBox1.Controls.Add(this.label2); this.groupBox1.Controls.Add(this.txtAddress); this.groupBox1.Controls.Add(this.label1); - resources.ApplyResources(this.groupBox1, "groupBox1"); this.groupBox1.Name = "groupBox1"; this.groupBox1.TabStop = false; // @@ -135,9 +135,9 @@ // // panel2 // + resources.ApplyResources(this.panel2, "panel2"); this.panel2.Controls.Add(this.btnClose); this.panel2.Controls.Add(this.btnOK); - resources.ApplyResources(this.panel2, "panel2"); this.panel2.Name = "panel2"; // // btnOK @@ -154,22 +154,22 @@ // // menuServer // + resources.ApplyResources(this.menuServer, "menuServer"); this.menuServer.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.MenuItem1}); - resources.ApplyResources(this.menuServer, "menuServer"); this.menuServer.Name = "menuServer"; // // MenuItem1 // + resources.ApplyResources(this.MenuItem1, "MenuItem1"); this.MenuItem1.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.menuItemImportClipboard}); this.MenuItem1.Name = "MenuItem1"; - resources.ApplyResources(this.MenuItem1, "MenuItem1"); // // menuItemImportClipboard // - this.menuItemImportClipboard.Name = "menuItemImportClipboard"; resources.ApplyResources(this.menuItemImportClipboard, "menuItemImportClipboard"); + this.menuItemImportClipboard.Name = "menuItemImportClipboard"; this.menuItemImportClipboard.Click += new System.EventHandler(this.menuItemImportClipboard_Click); // // AddServer4Form diff --git a/v2rayN/v2rayN/Forms/AddServer4Form.resx b/v2rayN/v2rayN/Forms/AddServer4Form.resx index 8c8e6b8e..d245b984 100644 --- a/v2rayN/v2rayN/Forms/AddServer4Form.resx +++ b/v2rayN/v2rayN/Forms/AddServer4Form.resx @@ -118,249 +118,471 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - 6, 12 - - - 547, 291 - - - True - - - Edit or add a [Socks] server - - - 396, 17 - - - 75, 23 - - - 4 - - - &Cancel - - - 303, 17 - - - 75, 23 - - - 5 - - - &OK - - - Fill - - - 0, 35 - - - 547, 196 - - - 3 - - - Server - - - True - - - 12, 31 - - - 89, 12 - - - 0 - - - Server address - - - True - - - 337, 158 - 113, 12 - - 22 - - - * Fill in manually - - - True - - - 12, 60 - - - 71, 12 - - - 2 - - - Server port - - - True - - - NoControl - - - 12, 121 - 113, 12 - - 23 + + label6 - - Password(Optional) - - - True - - - NoControl - - - 12, 88 - - - 89, 12 - - - 25 - - - User(Optional) + + groupBox1 + True - - 12, 158 + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 95, 12 - - - 10 - - - Alias (remarks) - - - 162, 21 - - - Import configuration file - - - 235, 22 - - - Import URL from clipboard - - - 0, 0 + + panel2 547, 25 - - 8 - - - 17, 17 - - - Top - - - 0, 25 - - - 547, 10 - - - 6 + + 11 + Bottom - - 0, 231 + + Import configuration file - - 547, 60 + + panel1 - - 7 + + 3 + + + Password(Optional) + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuItemImportClipboard + + + Fill + + + groupBox1 + + + 8 + + + 89, 12 127, 27 - - 359, 21 + + System.Windows.Forms.MenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 1 + + 4 - - 127, 117 + + Edit or add a [Socks] server - - * + + NoControl - - 278, 21 + + 10 24 - - 127, 56 + + Import URL from clipboard - - 194, 21 + + 303, 17 - - 3 + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 127, 154 + + 23 - - 194, 21 + + MenuItem1 - - 11 + + 0 - - 127, 84 + + 359, 21 - - 278, 21 + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 396, 17 + + + 8 + + + 0, 0 + + + label1 + + + 547, 60 + + + 0, 25 + + + groupBox1 + + + True + + + 22 + + + 162, 21 + + + True + + + Server + + + 127, 120 + + + panel2 + + + groupBox1 + + + 5 + + + 2 26 + + groupBox1 + + + menuServer + + + groupBox1 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + NoControl + + + txtId + + + 235, 22 + + + 12, 93 + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 12, 31 + + + groupBox1 + + + 1 + + + AddServer4Form + + + 194, 21 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 127, 58 + + + 1 + + + 0 + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 71, 12 + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + groupBox1 + + + txtPort + + + panel2 + + + 547, 10 + + + * + + + 2 + + + txtSecurity + + + $this + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + label4 + + + &OK + + + btnClose + + + 278, 21 + + + 0 + + + 3 + + + 12, 124 + + + 2 + + + 10 + + + btnOK + + + 194, 21 + + + 1 + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 6 + + + 1 + + + 7 + + + label13 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + v2rayN.Forms.BaseForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + + + label3 + + + Server port + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 0, 231 + + + 9 + + + &Cancel + + + True + + + 6, 12 + + + Server address + + + 25 + + + txtAddress + + + 127, 151 + + + 95, 12 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Alias (remarks) + + + * Fill in manually + + + 7 + + + label2 + + + 12, 62 + + + 547, 291 + + + $this + + + 547, 196 + + + 6 + + + 0 + + + 75, 23 + + + 3 + + + 127, 89 + + + 337, 155 + + + True + + + 4 + + + 5 + + + 75, 23 + + + 89, 12 + + + groupBox1 + + + groupBox1 + + + 0, 35 + + + txtRemarks + + + 12, 155 + + + True + + + User(Optional) + + + 278, 21 + + + Top + + + 3 + + + True + + + 17, 17 + \ No newline at end of file diff --git a/v2rayN/v2rayN/Forms/AddServer4Form.zh-Hans.resx b/v2rayN/v2rayN/Forms/AddServer4Form.zh-Hans.resx index 71dbe272..2e8e0912 100644 --- a/v2rayN/v2rayN/Forms/AddServer4Form.zh-Hans.resx +++ b/v2rayN/v2rayN/Forms/AddServer4Form.zh-Hans.resx @@ -117,45 +117,15 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 编辑或添加[Socks]服务器 - 取消(&C) - - 确定(&O) - 服务器 - - 65, 12 - - - 服务器地址 - - - *手填,方便识别管理 - - - 65, 12 - - - 服务器端口 - - - 12, 119 - - - 65, 12 - - - 密码(可选) - - - 12, 89 + + + 194, 21 77, 12 @@ -163,12 +133,39 @@ 用户名(可选) + + 194, 21 + + + 65, 12 + + + 密码(可选) + + + *手填,方便识别管理 + 83, 12 别名(remarks) + + 65, 12 + + + 服务器端口 + + + 65, 12 + + + 服务器地址 + + + 确定(&O) + 92, 21 @@ -181,10 +178,7 @@ 从剪贴板导入URL - - 127, 115 - - - 127, 85 + + 编辑或添加[Socks]服务器 \ No newline at end of file diff --git a/v2rayN/v2rayN/Forms/AddServer5Form.Designer.cs b/v2rayN/v2rayN/Forms/AddServer5Form.Designer.cs index 2e457125..a0dd68b8 100644 --- a/v2rayN/v2rayN/Forms/AddServer5Form.Designer.cs +++ b/v2rayN/v2rayN/Forms/AddServer5Form.Designer.cs @@ -87,15 +87,14 @@ // // btnClose // - resources.ApplyResources(this.btnClose, "btnClose"); this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel; + resources.ApplyResources(this.btnClose, "btnClose"); this.btnClose.Name = "btnClose"; this.btnClose.UseVisualStyleBackColor = true; this.btnClose.Click += new System.EventHandler(this.btnClose_Click); // // groupBox1 // - resources.ApplyResources(this.groupBox1, "groupBox1"); this.groupBox1.Controls.Add(this.cmbFlow); this.groupBox1.Controls.Add(this.label4); this.groupBox1.Controls.Add(this.btnGUID); @@ -112,18 +111,19 @@ this.groupBox1.Controls.Add(this.label2); this.groupBox1.Controls.Add(this.txtAddress); this.groupBox1.Controls.Add(this.label1); + resources.ApplyResources(this.groupBox1, "groupBox1"); this.groupBox1.Name = "groupBox1"; this.groupBox1.TabStop = false; // // cmbFlow // - resources.ApplyResources(this.cmbFlow, "cmbFlow"); this.cmbFlow.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.cmbFlow.FormattingEnabled = true; this.cmbFlow.Items.AddRange(new object[] { resources.GetString("cmbFlow.Items"), resources.GetString("cmbFlow.Items1"), resources.GetString("cmbFlow.Items2")}); + resources.ApplyResources(this.cmbFlow, "cmbFlow"); this.cmbFlow.Name = "cmbFlow"; // // label4 @@ -145,7 +145,6 @@ // // groupBox2 // - resources.ApplyResources(this.groupBox2, "groupBox2"); this.groupBox2.Controls.Add(this.label24); this.groupBox2.Controls.Add(this.label23); this.groupBox2.Controls.Add(this.panTlsMore); @@ -166,6 +165,7 @@ this.groupBox2.Controls.Add(this.label11); this.groupBox2.Controls.Add(this.label10); this.groupBox2.Controls.Add(this.cmbHeaderType); + resources.ApplyResources(this.groupBox2, "groupBox2"); this.groupBox2.Name = "groupBox2"; this.groupBox2.TabStop = false; // @@ -181,9 +181,9 @@ // // panTlsMore // - resources.ApplyResources(this.panTlsMore, "panTlsMore"); this.panTlsMore.Controls.Add(this.label21); this.panTlsMore.Controls.Add(this.cmbAllowInsecure); + resources.ApplyResources(this.panTlsMore, "panTlsMore"); this.panTlsMore.Name = "panTlsMore"; // // label21 @@ -193,13 +193,13 @@ // // cmbAllowInsecure // - resources.ApplyResources(this.cmbAllowInsecure, "cmbAllowInsecure"); this.cmbAllowInsecure.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.cmbAllowInsecure.FormattingEnabled = true; this.cmbAllowInsecure.Items.AddRange(new object[] { resources.GetString("cmbAllowInsecure.Items"), resources.GetString("cmbAllowInsecure.Items1"), resources.GetString("cmbAllowInsecure.Items2")}); + resources.ApplyResources(this.cmbAllowInsecure, "cmbAllowInsecure"); this.cmbAllowInsecure.Name = "cmbAllowInsecure"; // // label9 @@ -219,7 +219,6 @@ // // cmbNetwork // - resources.ApplyResources(this.cmbNetwork, "cmbNetwork"); this.cmbNetwork.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.cmbNetwork.FormattingEnabled = true; this.cmbNetwork.Items.AddRange(new object[] { @@ -228,6 +227,7 @@ resources.GetString("cmbNetwork.Items2"), resources.GetString("cmbNetwork.Items3"), resources.GetString("cmbNetwork.Items4")}); + resources.ApplyResources(this.cmbNetwork, "cmbNetwork"); this.cmbNetwork.Name = "cmbNetwork"; this.cmbNetwork.SelectedIndexChanged += new System.EventHandler(this.cmbNetwork_SelectedIndexChanged); // @@ -268,13 +268,13 @@ // // cmbStreamSecurity // - resources.ApplyResources(this.cmbStreamSecurity, "cmbStreamSecurity"); this.cmbStreamSecurity.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.cmbStreamSecurity.FormattingEnabled = true; this.cmbStreamSecurity.Items.AddRange(new object[] { resources.GetString("cmbStreamSecurity.Items"), resources.GetString("cmbStreamSecurity.Items1"), resources.GetString("cmbStreamSecurity.Items2")}); + resources.ApplyResources(this.cmbStreamSecurity, "cmbStreamSecurity"); this.cmbStreamSecurity.Name = "cmbStreamSecurity"; this.cmbStreamSecurity.SelectedIndexChanged += new System.EventHandler(this.cmbStreamSecurity_SelectedIndexChanged); // @@ -300,7 +300,6 @@ // // cmbHeaderType // - resources.ApplyResources(this.cmbHeaderType, "cmbHeaderType"); this.cmbHeaderType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.cmbHeaderType.FormattingEnabled = true; this.cmbHeaderType.Items.AddRange(new object[] { @@ -311,6 +310,7 @@ resources.GetString("cmbHeaderType.Items4"), resources.GetString("cmbHeaderType.Items5"), resources.GetString("cmbHeaderType.Items6")}); + resources.ApplyResources(this.cmbHeaderType, "cmbHeaderType"); this.cmbHeaderType.Name = "cmbHeaderType"; // // label8 @@ -320,11 +320,11 @@ // // cmbSecurity // - resources.ApplyResources(this.cmbSecurity, "cmbSecurity"); this.cmbSecurity.DropDownStyle = System.Windows.Forms.ComboBoxStyle.Simple; this.cmbSecurity.FormattingEnabled = true; this.cmbSecurity.Items.AddRange(new object[] { resources.GetString("cmbSecurity.Items")}); + resources.ApplyResources(this.cmbSecurity, "cmbSecurity"); this.cmbSecurity.Name = "cmbSecurity"; // // txtRemarks @@ -374,9 +374,9 @@ // // panel2 // - resources.ApplyResources(this.panel2, "panel2"); this.panel2.Controls.Add(this.btnClose); this.panel2.Controls.Add(this.btnOK); + resources.ApplyResources(this.panel2, "panel2"); this.panel2.Name = "panel2"; // // btnOK @@ -393,42 +393,42 @@ // // menuServer // - resources.ApplyResources(this.menuServer, "menuServer"); this.menuServer.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.MenuItem1}); + resources.ApplyResources(this.menuServer, "menuServer"); this.menuServer.Name = "menuServer"; // // MenuItem1 // - resources.ApplyResources(this.MenuItem1, "MenuItem1"); this.MenuItem1.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.MenuItemImportClient, this.MenuItemImportServer, this.toolStripSeparator1, this.MenuItemImportClipboard}); this.MenuItem1.Name = "MenuItem1"; + resources.ApplyResources(this.MenuItem1, "MenuItem1"); // // MenuItemImportClient // - resources.ApplyResources(this.MenuItemImportClient, "MenuItemImportClient"); this.MenuItemImportClient.Name = "MenuItemImportClient"; + resources.ApplyResources(this.MenuItemImportClient, "MenuItemImportClient"); this.MenuItemImportClient.Click += new System.EventHandler(this.MenuItemImportClient_Click); // // MenuItemImportServer // - resources.ApplyResources(this.MenuItemImportServer, "MenuItemImportServer"); this.MenuItemImportServer.Name = "MenuItemImportServer"; + resources.ApplyResources(this.MenuItemImportServer, "MenuItemImportServer"); this.MenuItemImportServer.Click += new System.EventHandler(this.MenuItemImportServer_Click); // // toolStripSeparator1 // - resources.ApplyResources(this.toolStripSeparator1, "toolStripSeparator1"); this.toolStripSeparator1.Name = "toolStripSeparator1"; + resources.ApplyResources(this.toolStripSeparator1, "toolStripSeparator1"); // // MenuItemImportClipboard // - resources.ApplyResources(this.MenuItemImportClipboard, "MenuItemImportClipboard"); this.MenuItemImportClipboard.Name = "MenuItemImportClipboard"; + resources.ApplyResources(this.MenuItemImportClipboard, "MenuItemImportClipboard"); this.MenuItemImportClipboard.Click += new System.EventHandler(this.MenuItemImportClipboard_Click); // // AddServer5Form diff --git a/v2rayN/v2rayN/Forms/AddServer5Form.resx b/v2rayN/v2rayN/Forms/AddServer5Form.resx index e83bbdee..2502f924 100644 --- a/v2rayN/v2rayN/Forms/AddServer5Form.resx +++ b/v2rayN/v2rayN/Forms/AddServer5Form.resx @@ -117,1255 +117,1540 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 6 - - - 113, 12 + + 396, 17 - - 1 - - - 285, 179 - - - 124, 62 - - - 8 - - - Path - - - 83, 12 - - - Transport protocol(network) - - - 9 - - - panTlsMore - - - 4 - - - 6, 12 - - - label15 - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - cmbStreamSecurity - - - 3)h2 host Separated by commas (,) - - - - Top + + 75, 23 - - 3 - - - 17 - - - false - - - 19 - - - True - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 127, 117 - - - 6 - - - 21 - - - 411, 83 - - - Address - - - groupBox1 - - - 59, 12 - - - 1)ws path - - - 19 - - - True - - - 26 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - txtId - - - True - - - 729, 499 - - - - - - 12, 89 - - - groupBox2 - - - tls - - - True - - - 299, 12 - - - panTlsMore - - - 10 - - - none - - - groupBox1 - - - 127, 85 - - - 16 - - - utp - - - 12, 179 + + 4 &Cancel - - label10 - - - 723, 281 - - - 5 - - - label21 - - - System.Windows.Forms.MenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 143, 12 - - - groupBox2 - - - toolStripSeparator1 - - - NoControl - - - 21 - - - label11 - - - 5 - - - 158, 90 - - - 0 - - - 2 - - - 29, 12 - - - System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 234, 6 - - - 237, 22 - - - 12 - - - TLS - - - 3)QUIC key/Kcp seed - - - 127, 56 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - txtPort - - - 4 - - - groupBox2 - - - Bottom - - - True - - - 127, 175 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - True + + btnClose System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 29, 12 + + panel2 - - ws + + 0 - - 13 + + - - 9, 66 - - - 15 - - - Import server configuration - - - 137, 12 - - - 1 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 15 + + xtls-rprx-origin xtls-rprx-origin-udp443 - - label17 - - - panel1 - - - label14 - - - groupBox2 - - - 5 - - - 215, 12 - - - 0, 0 - - - 396, 17 - - - 338, 35 - - - 12, 60 - - - MenuItemImportClient - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - &Generate - - - Encryption(encryption) - - - txtRemarks - - - 29, 12 - - - v2rayN.Forms.BaseForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null - - - groupBox2 - - - true - - - panTlsMore - - - True - - - cmbNetwork - - - 284, 234 - - - 95, 12 - - - 1 - - - 350, 32 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 22 - - - 526, 179 + + 127, 123 211, 20 - - True - - - groupBox2 - - - groupBox2 - - - 127, 27 - - - label12 - - - Flow - - - True - - - 282, 66 - - - 12 - - - 25 - - - label23 - - - allowInsecure - - - 143, 20 - - - 1 - - - $this - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 33 - - - 6 - - - none - - - 0 - - - xtls - - - 47, 12 - - - label8 - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - label13 - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 2 - - - 35 - - - 13 - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 11 - - - True - - - 469, 85 - - - label9 + + 24 cmbFlow - - label20 + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 124, 157 - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - label18 - - - MenuItem1 - - + groupBox1 - - 13 - - - label7 - - - 177, 20 - - - groupBox1 - - - groupBox2 + + 0 True - - btnClose - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - label19 - - - 143, 21 - - - 95, 12 - - - groupBox1 - - - 0, 35 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 729, 60 - - - True - - - 469, 115 - - - $this - - - quic - - - groupBox2 - - - h2 - - - kcp - - - 7 - + NoControl - - 143, 21 + + 12, 127 - - 526, 162 + + 29, 12 - - 18 + + 25 - - 12, 147 + + Flow - - 18 + + label4 - + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + groupBox1 - - label2 + + 1 - - groupBox2 + + 411, 91 - - 24 - - - groupBox2 - - - 119, 12 - - - 278, 21 - - - True - - - True - - - Bottom - - - 91, 20 - - - 27 + + 75, 23 23 + + &Generate + + + btnGUID + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 2 + + + True + + + 353, 189 + + + 113, 12 + + + 22 + + + * Fill in manually + + + label13 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 3 + + + label24 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 0 + + + label23 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 1 + + + panTlsMore + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 2 + + + label9 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 3 + + + label20 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 4 + + + txtPath + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 5 + + + cmbNetwork + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 6 + + + label7 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 7 + + + label19 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 8 + + + label18 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 9 + + + label17 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 10 + + + label16 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 11 + + + label14 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 12 + + + label15 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 13 + + + cmbStreamSecurity + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + groupBox2 + + 14 + + + label12 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 15 + + + txtRequestHost + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 16 + + + label11 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + 17 - - Port + + label10 - + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + groupBox2 - - Fill + + 18 - - 12 + + cmbHeaderType - + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 19 + + + Bottom + + + 3, 215 + + + 723, 281 + + + 21 + + + Transport + + groupBox2 System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - groupBox1 - - - System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 0 - - - 75, 23 - - - 4 - - - True - - - 11 - - - groupBox1 - - - 8 - - - *Recommended (none) - - - 161, 143 - groupBox1 - - panel2 + + 4 - - 143, 20 + + True - - 23 + + NoControl - - 1 + + 353, 157 - - 10 + + 119, 12 14 - + + *Recommended (none) + + + label8 + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - True - - - 3, 215 - - - Import configuration file - - - wechat-video - - - 23, 12 - - - 729, 10 - - - 107, 7 - - - 470, 131 - - - True - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 22 - - - - - - 300, 53 - - - 1)http host Separated by commas (,) - - - 12, 31 - - - 14 - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - dtls - - - MenuItemImportServer - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - panel2 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 0, 534 - - - groupBox1 - - - AddServer5Form - - - wireguard - - - groupBox1 - - - - - - 124, 242 - - - Server - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 303, 17 - - - 2)ws host - groupBox1 - - 6 - - - True - - - 2)h2 path - - - True - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 167, 12 - - - 8 - - - Transport - - - groupBox2 - - - * Fill in manually - - - 9, 157 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 396, 54 - - - True - - - 89, 12 - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 3 - - - 119, 12 - - - txtPath - - - 162, 21 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - txtRequestHost - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Alias (remarks) - - - groupBox2 - - - 4 - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - &OK - - - 7 - - - 3 - - - http - - - label1 - - - True - - - 34 - - - 9 - - - groupBox2 - - - Camouflage type - - - menuServer - - - 20 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 1 - 5 - - UUID(id) + + none - - $this + + 127, 154 - - MenuItemImportClipboard + + 211, 20 - - $this - - - 3 - - - groupBox1 - - - cmbAllowInsecure - - - 237, 22 - - - 143, 20 - - - True - - - 8 - - - 24 - - - 15 - - - 0 - - - System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 113, 12 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 192, 28 - - - 203, 12 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - txtAddress - - - 30 - - - 14 - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 469, 100 - - - 359, 21 - - - 29 - - - groupBox1 - - - 2 - - - 9, 94 - - - label3 - - - srtp - - - 7 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Import URL from clipboard - - - True - - - 75, 23 - - - Camouflage domain(host) - - - *Default value tcp - - - 0 - - - 729, 594 - - - label4 - - - 31 - - - True - - - 9, 246 - - - 353, 147 - - - Edit or add a [VLESS] server - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - label5 - - - 3 - - - label16 - - - btnOK - - - 237, 22 - - - 16 - - - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 28 - - - groupBox1 - - - groupBox2 - - - xtls-rprx-origin - - - Import client configuration - - - 12, 121 - - - 4)QUIC securty - - - 0, 25 - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 6 cmbSecurity - - tcp - - - 25 - - - btnGUID - - - 75, 23 - - - *tcp or kcp or QUIC camouflage type, default none - - + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + groupBox1 - - 12, 11 + + 6 - - 0 + + 127, 185 - - groupBox2 + + 211, 21 - - NoControl - - - 9, 32 - - - label24 - - - 59, 12 - - - panel2 - - + 11 - - groupBox2 + + txtRemarks - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + + groupBox1 + + + 7 + + True - - label6 + + 12, 189 - - 59, 12 + + 95, 12 10 - - 729, 25 + + Alias (remarks) - - cmbHeaderType + + label6 - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 526, 197 + + groupBox1 - - 2 + + 8 + + + True + + + 12, 158 + + + 65, 12 + + + 8 + + + Encryption + + + label5 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 9 + + + 127, 91 + + + 278, 21 + + + 5 + + + txtId + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 10 + + + True + + + 12, 95 53, 12 - + + 4 + + + UUID(id) + + + label3 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 11 + + + 127, 59 + + + 143, 21 + + + 3 + + + txtPort + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 12 + + True - + + + 12, 63 + + + 29, 12 + + + 2 + + + Port + + + label2 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 13 + + + 127, 27 + + + 359, 21 + + + 1 + + + txtAddress + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 14 + + + True + + + 12, 31 + + + 47, 12 + + + 0 + + + Address + + + label1 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 15 + + + Fill + + + 0, 35 + + + 729, 499 + + + 3 + + + Server + + + groupBox1 + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 0 + + + True + + + NoControl + + + 529, 207 + + + 119, 12 + + + 35 + + + 3)QUIC key/Kcp seed + + + label24 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 0 + + + True + + + NoControl + + + 465, 140 + + + 89, 12 + + + 34 + + + 4)QUIC securty + + + label23 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 1 + + + label21 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panTlsMore + + + 0 + + + cmbAllowInsecure + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panTlsMore + + + 1 + + + 284, 232 + + + 338, 35 + + + 33 + + + panTlsMore + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 2 + + + True + + + NoControl + + + 12, 11 + + + 83, 12 + + + 31 + + + allowInsecure + + + label21 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panTlsMore + + + 0 + + + + + + true + + + false + + + 107, 7 + + + 91, 20 + + + 30 + + + cmbAllowInsecure + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panTlsMore + + + 1 + + + True + + + 353, 32 + + + 113, 12 + + + 15 + + + *Default value tcp + + + label9 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 3 + + + True + + + 464, 124 + + + 203, 12 + + + 29 + + + 3)h2 host Separated by commas (,) + + + label20 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 4 + + + 127, 169 + + + True + + + 396, 54 + + + 28 + + + txtPath + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 5 + + + tcp + + + kcp + + + ws + + + h2 + + + quic + + + 192, 28 + + + 143, 20 + + + 12 + + + cmbNetwork + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 6 + + + True + + + 9, 32 + + + 167, 12 + + + 13 + + + Transport protocol(network) + + + label7 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 7 + + + True + + + 9, 169 + + + 29, 12 + + + 27 + + + Path + + + label19 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 8 + + + True + + + 529, 189 + + + 59, 12 + + + 26 + + + 2)h2 path + + + label18 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 9 + + + True + + + 464, 109 + + + 59, 12 + + + 25 + + + 2)ws host + + + label17 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 10 + + + True + + + 529, 172 + + + 59, 12 + + + 24 + + + 1)ws path + + + label16 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 11 + + + True + + + 464, 94 + + + 215, 12 + + + 23 + + + 1)http host Separated by commas (,) + + + label14 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 12 + + + True + + + 9, 243 + + + 23, 12 + + + 22 + + + TLS + + + label15 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 13 + + + + + + tls + + + xtls + + + 127, 239 + + + 143, 20 + + + 21 + + + cmbStreamSecurity + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 14 + + + True + + + 282, 68 + + + 299, 12 + + + 20 + + + *tcp or kcp or QUIC camouflage type, default none + + + label12 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 15 + + + 158, 100 + + + True + + + 300, 53 + + + 16 + + + txtRequestHost + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 16 + + + True + + + 9, 68 + + + 95, 12 + + + 19 + + + Camouflage type + + + label11 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 17 + + + True + + + 9, 100 + + + 143, 12 + + + 17 + + + Camouflage domain(host) + + + label10 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 18 + + + none + + + http + + + srtp + + + utp + + + wechat-video + + + dtls + + + wireguard + + + 127, 64 + + + 143, 20 + + + 18 + + + cmbHeaderType + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 19 + + + btnOK + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panel2 + + + 1 + + + Bottom + + + 0, 534 + + + 729, 60 + + + 7 + + + panel2 + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 1 + + + 303, 17 + + + 75, 23 + + + 5 + + + &OK + + + btnOK + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panel2 + + + 1 + + + Top + + + 0, 25 + + + 729, 10 + + + 6 + + + panel1 + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 2 + 17, 17 + + 0, 0 + + + 729, 25 + + + 8 + + + menuServer + + + System.Windows.Forms.MenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 3 + + + 162, 21 + + + Import configuration file + + + 237, 22 + + + Import client configuration + + + 237, 22 + + + Import server configuration + + + 234, 6 + + + 237, 22 + + + Import URL from clipboard + + + True + + + 25 + + + 6, 12 + + + 729, 594 + + + Edit or add a [VLESS] server + + + MenuItem1 + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + MenuItemImportClient + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + MenuItemImportServer + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolStripSeparator1 + + + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + MenuItemImportClipboard + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + AddServer5Form + + + v2rayN.Forms.BaseForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/v2rayN/v2rayN/Forms/AddServer5Form.zh-Hans.resx b/v2rayN/v2rayN/Forms/AddServer5Form.zh-Hans.resx index 61459587..46ec6353 100644 --- a/v2rayN/v2rayN/Forms/AddServer5Form.zh-Hans.resx +++ b/v2rayN/v2rayN/Forms/AddServer5Form.zh-Hans.resx @@ -124,11 +124,14 @@ 服务器 + + 220, 20 + 65, 12 - 流控(Flow) + 流控(flow) 生成(&G) @@ -160,6 +163,9 @@ 223, 7 + + 353, 36 + 143, 12 @@ -172,11 +178,17 @@ 3)h2 host中间逗号(,)隔开 + + 127, 168 + - 124, 32 + 127, 32 - 211, 20 + 220, 20 + + + 9, 36 107, 12 @@ -184,6 +196,9 @@ 传输协议(network) + + 9, 168 + 65, 12 @@ -196,11 +211,20 @@ 1)http host中间逗号(,)隔开 + + 9, 241 + - 77, 12 + 107, 12 - 底层传输安全 + 底层传输安全(tls) + + + 127, 237 + + + 282, 71 197, 12 @@ -209,35 +233,47 @@ *tcp或kcp或QUIC伪装类型,默认none - 124, 94 + 127, 102 334, 51 + + 9, 71 + 89, 12 伪装类型(type) + + 9, 102 + 89, 12 伪装域名(host) + + 127, 67 + + + 353, 158 + 71, 12 *非空(none) - - 127, 143 - 220, 20 + + 220, 21 + 83, 12 diff --git a/v2rayN/v2rayN/Forms/AddServerForm.Designer.cs b/v2rayN/v2rayN/Forms/AddServerForm.Designer.cs index bdb027f6..a96b32ab 100644 --- a/v2rayN/v2rayN/Forms/AddServerForm.Designer.cs +++ b/v2rayN/v2rayN/Forms/AddServerForm.Designer.cs @@ -87,15 +87,14 @@ // // btnClose // - resources.ApplyResources(this.btnClose, "btnClose"); this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel; + resources.ApplyResources(this.btnClose, "btnClose"); this.btnClose.Name = "btnClose"; this.btnClose.UseVisualStyleBackColor = true; this.btnClose.Click += new System.EventHandler(this.btnClose_Click); // // groupBox1 // - resources.ApplyResources(this.groupBox1, "groupBox1"); this.groupBox1.Controls.Add(this.btnGUID); this.groupBox1.Controls.Add(this.label13); this.groupBox1.Controls.Add(this.groupBox2); @@ -112,6 +111,7 @@ this.groupBox1.Controls.Add(this.label2); this.groupBox1.Controls.Add(this.txtAddress); this.groupBox1.Controls.Add(this.label1); + resources.ApplyResources(this.groupBox1, "groupBox1"); this.groupBox1.Name = "groupBox1"; this.groupBox1.TabStop = false; // @@ -129,7 +129,6 @@ // // groupBox2 // - resources.ApplyResources(this.groupBox2, "groupBox2"); this.groupBox2.Controls.Add(this.label24); this.groupBox2.Controls.Add(this.label23); this.groupBox2.Controls.Add(this.panTlsMore); @@ -150,6 +149,7 @@ this.groupBox2.Controls.Add(this.label11); this.groupBox2.Controls.Add(this.label10); this.groupBox2.Controls.Add(this.cmbHeaderType); + resources.ApplyResources(this.groupBox2, "groupBox2"); this.groupBox2.Name = "groupBox2"; this.groupBox2.TabStop = false; // @@ -165,9 +165,9 @@ // // panTlsMore // - resources.ApplyResources(this.panTlsMore, "panTlsMore"); this.panTlsMore.Controls.Add(this.label21); this.panTlsMore.Controls.Add(this.cmbAllowInsecure); + resources.ApplyResources(this.panTlsMore, "panTlsMore"); this.panTlsMore.Name = "panTlsMore"; // // label21 @@ -177,13 +177,13 @@ // // cmbAllowInsecure // - resources.ApplyResources(this.cmbAllowInsecure, "cmbAllowInsecure"); this.cmbAllowInsecure.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.cmbAllowInsecure.FormattingEnabled = true; this.cmbAllowInsecure.Items.AddRange(new object[] { resources.GetString("cmbAllowInsecure.Items"), resources.GetString("cmbAllowInsecure.Items1"), resources.GetString("cmbAllowInsecure.Items2")}); + resources.ApplyResources(this.cmbAllowInsecure, "cmbAllowInsecure"); this.cmbAllowInsecure.Name = "cmbAllowInsecure"; // // label9 @@ -203,7 +203,6 @@ // // cmbNetwork // - resources.ApplyResources(this.cmbNetwork, "cmbNetwork"); this.cmbNetwork.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.cmbNetwork.FormattingEnabled = true; this.cmbNetwork.Items.AddRange(new object[] { @@ -212,6 +211,7 @@ resources.GetString("cmbNetwork.Items2"), resources.GetString("cmbNetwork.Items3"), resources.GetString("cmbNetwork.Items4")}); + resources.ApplyResources(this.cmbNetwork, "cmbNetwork"); this.cmbNetwork.Name = "cmbNetwork"; this.cmbNetwork.SelectedIndexChanged += new System.EventHandler(this.cmbNetwork_SelectedIndexChanged); // @@ -252,12 +252,12 @@ // // cmbStreamSecurity // - resources.ApplyResources(this.cmbStreamSecurity, "cmbStreamSecurity"); this.cmbStreamSecurity.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.cmbStreamSecurity.FormattingEnabled = true; this.cmbStreamSecurity.Items.AddRange(new object[] { resources.GetString("cmbStreamSecurity.Items"), resources.GetString("cmbStreamSecurity.Items1")}); + resources.ApplyResources(this.cmbStreamSecurity, "cmbStreamSecurity"); this.cmbStreamSecurity.Name = "cmbStreamSecurity"; this.cmbStreamSecurity.SelectedIndexChanged += new System.EventHandler(this.cmbStreamSecurity_SelectedIndexChanged); // @@ -283,7 +283,6 @@ // // cmbHeaderType // - resources.ApplyResources(this.cmbHeaderType, "cmbHeaderType"); this.cmbHeaderType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.cmbHeaderType.FormattingEnabled = true; this.cmbHeaderType.Items.AddRange(new object[] { @@ -294,6 +293,7 @@ resources.GetString("cmbHeaderType.Items4"), resources.GetString("cmbHeaderType.Items5"), resources.GetString("cmbHeaderType.Items6")}); + resources.ApplyResources(this.cmbHeaderType, "cmbHeaderType"); this.cmbHeaderType.Name = "cmbHeaderType"; // // label8 @@ -303,7 +303,6 @@ // // cmbSecurity // - resources.ApplyResources(this.cmbSecurity, "cmbSecurity"); this.cmbSecurity.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.cmbSecurity.FormattingEnabled = true; this.cmbSecurity.Items.AddRange(new object[] { @@ -311,6 +310,7 @@ resources.GetString("cmbSecurity.Items1"), resources.GetString("cmbSecurity.Items2"), resources.GetString("cmbSecurity.Items3")}); + resources.ApplyResources(this.cmbSecurity, "cmbSecurity"); this.cmbSecurity.Name = "cmbSecurity"; // // txtRemarks @@ -370,9 +370,9 @@ // // panel2 // - resources.ApplyResources(this.panel2, "panel2"); this.panel2.Controls.Add(this.btnClose); this.panel2.Controls.Add(this.btnOK); + resources.ApplyResources(this.panel2, "panel2"); this.panel2.Name = "panel2"; // // btnOK @@ -389,42 +389,42 @@ // // menuServer // - resources.ApplyResources(this.menuServer, "menuServer"); this.menuServer.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.MenuItem1}); + resources.ApplyResources(this.menuServer, "menuServer"); this.menuServer.Name = "menuServer"; // // MenuItem1 // - resources.ApplyResources(this.MenuItem1, "MenuItem1"); this.MenuItem1.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.MenuItemImportClient, this.MenuItemImportServer, this.toolStripSeparator1, this.MenuItemImportClipboard}); this.MenuItem1.Name = "MenuItem1"; + resources.ApplyResources(this.MenuItem1, "MenuItem1"); // // MenuItemImportClient // - resources.ApplyResources(this.MenuItemImportClient, "MenuItemImportClient"); this.MenuItemImportClient.Name = "MenuItemImportClient"; + resources.ApplyResources(this.MenuItemImportClient, "MenuItemImportClient"); this.MenuItemImportClient.Click += new System.EventHandler(this.MenuItemImportClient_Click); // // MenuItemImportServer // - resources.ApplyResources(this.MenuItemImportServer, "MenuItemImportServer"); this.MenuItemImportServer.Name = "MenuItemImportServer"; + resources.ApplyResources(this.MenuItemImportServer, "MenuItemImportServer"); this.MenuItemImportServer.Click += new System.EventHandler(this.MenuItemImportServer_Click); // // toolStripSeparator1 // - resources.ApplyResources(this.toolStripSeparator1, "toolStripSeparator1"); this.toolStripSeparator1.Name = "toolStripSeparator1"; + resources.ApplyResources(this.toolStripSeparator1, "toolStripSeparator1"); // // MenuItemImportClipboard // - resources.ApplyResources(this.MenuItemImportClipboard, "MenuItemImportClipboard"); this.MenuItemImportClipboard.Name = "MenuItemImportClipboard"; + resources.ApplyResources(this.MenuItemImportClipboard, "MenuItemImportClipboard"); this.MenuItemImportClipboard.Click += new System.EventHandler(this.MenuItemImportClipboard_Click); // // AddServerForm diff --git a/v2rayN/v2rayN/Forms/AddServerForm.resx b/v2rayN/v2rayN/Forms/AddServerForm.resx index 2940479f..e38dd5aa 100644 --- a/v2rayN/v2rayN/Forms/AddServerForm.resx +++ b/v2rayN/v2rayN/Forms/AddServerForm.resx @@ -117,1249 +117,1528 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 4 - - - 113, 12 + + 396, 17 - - 9 - - - 285, 179 - - - 124, 62 - - - 6 - - - Path - - - 83, 12 - - - Transport protocol(network) - - - 7 - - - panTlsMore - - - 1 - - - label15 - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 75, 23 - - 6 - - - 3)h2 host Separated by commas (,) - - - - Top - - - 3 - - - 17 - - - false - - - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 19 - - - True - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 6 - - - 21 - - - 411, 83 - - - Address - - - groupBox1 - - - 59, 12 - - - 1)ws path - - - 19 - - - True - - - 26 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - txtId - - - True - - - 729, 499 - - - - - - 12, 89 - - - groupBox2 - - - tls - - - True - - - toolStripSeparator1 - - - 299, 12 - - - groupBox1 - - - 127, 85 - - - 16 - - - utp - - - 12, 179 + + 4 &Cancel - - label10 - - - 723, 281 - - - 5 - - - label21 - - - 359, 21 - - - System.Windows.Forms.MenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Edit or add a [VMess] server - - - 143, 12 - - - groupBox2 - - - 17 - - - tcp - - - 127, 27 - - - NoControl - - - 21 - - - label11 - - - aes-128-gcm - - - 158, 90 - - - 2 - - - 29, 12 - - - System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 234, 6 - - - 237, 22 - - - 3)QUIC key/Kcp seed - - - 127, 56 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - txtPort - - - 2 - - - groupBox2 - - - Bottom - - - label16 - - - 127, 175 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - True + + btnClose System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 29, 12 + + panel2 - - True + + 0 - - ws + + 411, 83 - - 13 + + 75, 23 - - 15 - - - System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 6, 12 - - - 9, 157 - - - 7 - - - 15 - - - label17 - - - panel1 - - - label14 - - - groupBox2 - - - 5 - - - 215, 12 - - - 0, 0 - - - 15 - - - 338, 35 - - - 12, 60 - - - MenuItemImportClient - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 23 &Generate - - 195, 143 + + btnGUID - - none + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - txtRemarks + + groupBox1 - - 47, 12 + + 0 - - v2rayN.Forms.BaseForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + + True - + + 285, 175 + + + 113, 12 + + + 22 + + + * Fill in manually + + + label13 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 1 + + + label24 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + groupBox2 - - true + + 0 - + + label23 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 1 + + panTlsMore - - 162, 21 + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 127, 114 + + groupBox2 - - 284, 234 + + 2 - - 95, 12 + + label9 - - NoControl + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 350, 32 + + groupBox2 + + + 3 + + + label20 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 4 + + + txtPath + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 5 cmbNetwork + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 6 + + + label7 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 7 + + + label19 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 8 + + + label18 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 9 + + + label17 + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 22 + + groupBox2 - - groupBox1 + + 10 - - True + + label16 - + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 11 + + + label14 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 12 + + + label15 + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 groupBox2 - - 107, 7 - - - label12 - - - label2 - - - AlterId - - - True - - - 282, 66 - - - 12 - - - *tcp or kcp or QUIC camouflage type, default none - - - 25 - - - label23 - - - allowInsecure - - - 9, 66 - - - $this - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 1 - - - 33 - - - 6 - - - 0 - - - 47, 12 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - label8 - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 9, 32 - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - txtAlterId - - - 35 - 13 - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + cmbStreamSecurity - - 11 - - - True - - - 469, 85 - - - label9 - - - label20 - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - label18 - - - MenuItem1 - - - groupBox1 - - - 13 - - - label7 - - - 143, 20 - - - True - - - groupBox2 - - - True - - - btnClose - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - label19 - - - 143, 21 - - - 95, 12 - - - groupBox1 - - - 0, 35 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 34 - - - True - - - True - - - 469, 115 - - - quic - - - groupBox2 - - - h2 - - - kcp - - - 7 - - - 143, 21 - - - 396, 17 - - - 18 - - - 12, 147 - - - 18 - - - groupBox1 - - - 3, 215 - - - 729, 594 - - - groupBox2 - - - 143, 20 - - - groupBox2 - - - 119, 12 - - - True - - - True - - - 4 - - - 91, 20 - - - 27 + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 groupBox2 - + + 14 + + + label12 + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - Port - - + groupBox2 - - Fill + + 15 - - chacha20-poly1305 + + txtRequestHost - - 12 + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + + groupBox2 + + + 16 + + + label11 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 17 + + + label10 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 18 + + + cmbHeaderType + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 19 + + + + Bottom + + + 3, 215 + + + 723, 281 + + + 21 + + + Transport + + groupBox2 System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - groupBox1 - - - True - - - 0 - - - 75, 23 - - - 4 - - - True - - - 11 - - - groupBox1 - - - 8 - - - *Recommended (auto) - - - cmbStreamSecurity - groupBox1 - - panel2 - - - 143, 20 - - - 23 - - - 1 - - - 6 - - - groupBox2 - - - 14 - - - 10 - - - True - - - 173, 12 - - - groupBox1 - - - Import configuration file - - - wechat-video - - - btnOK - - - 75, 23 - - - Import server configuration - - - 470, 131 - - - True - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 22 - - - 396, 54 - - - 300, 53 - - - 12, 31 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + 2 - - 14 - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - dtls - - - label4 - - - MenuItemImportServer - - - groupBox2 - - - panel2 - - - 5 - - - 0, 534 - - - Encryption method (security) - - - UUID(id) - - - AddServerForm - - - wireguard - - - 24 - - - groupBox1 - - - 729, 10 - - - Server - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 303, 17 - - - 2)ws host - - - 8 - - + True - - 2)h2 path - - - True - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 167, 12 - - - Transport - - - groupBox2 - - - * Fill in manually - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 12 - - - True - - - 89, 12 - - - 29 - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 143, 21 - - - 1 - - - True - - - txtPath - - - 11 - - - Bottom - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - txtRequestHost - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Alias (remarks) - - - 124, 157 - - - 4 - - - cmbAllowInsecure - - - &OK - - - 7 - - - 3 - - - http - - - label1 - - - True - - - 526, 179 - - - 9 - - - groupBox2 - - - Camouflage type - - - menuServer - - - 20 - - - TLS - - - $this - - - 1 - - - 3 - 353, 147 - - srtp + + 119, 12 - - MenuItemImportClipboard - - - label13 - - - $this - - - 3 - - - groupBox1 - - - 237, 22 - - - 143, 20 - - - panTlsMore - - - 8 - - - 0 - - - Camouflage domain(host) - - - 0 - - - System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 113, 12 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 192, 28 - - - 203, 12 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - txtAddress - - - 30 - - + 14 - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + *Recommended (auto) - - 23 + + label8 - - 10 - - - auto - - - 0 - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 2 - - - 9, 94 - - - label3 - - - 5 - - - groupBox1 - - - Import URL from clipboard - - - 469, 100 - - + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 0 - - - 526, 162 - - - *Default value tcp - - - 31 - - - 124, 242 - - - 9, 246 - - - none - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 8 - - - label5 - - - 3 - groupBox1 - - 237, 22 + + 3 - - 16 + + aes-128-gcm - - 1 + + chacha20-poly1305 - - 28 + + auto - - + + none - - groupBox2 + + 195, 143 - - Import client configuration + + 143, 20 - - 12, 118 - - - 4)QUIC securty - - - 0, 25 - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 6 cmbSecurity - - groupBox2 - - - btnGUID - - - 75, 23 - - - 23, 12 - - + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + groupBox1 - - 12, 11 + + 4 - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 127, 171 - - groupBox2 + + 143, 21 - - 278, 21 + + 11 - - 1)http host Separated by commas (,) + + txtRemarks - - label24 + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 59, 12 + + groupBox1 - - panel2 + + 5 - - 119, 12 - - - groupBox2 - - - $this - - + True - - label6 + + 12, 175 - - 59, 12 + + 95, 12 10 - - 729, 25 + + Alias (remarks) - - cmbHeaderType + + label6 - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 526, 197 + + groupBox1 - - 729, 60 + + 6 + + + True + + + 12, 147 + + + 173, 12 + + + 8 + + + Encryption method (security) + + + label5 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 7 + + + 127, 114 + + + 143, 21 + + + 7 + + + txtAlterId + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 8 + + + True + + + 12, 118 + + + 47, 12 + + + 6 + + + AlterId + + + label4 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 9 + + + 127, 85 + + + 278, 21 + + + 5 + + + txtId + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 10 + + + True + + + 12, 89 53, 12 - + + 4 + + + UUID(id) + + + label3 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 11 + + + 127, 56 + + + 143, 21 + + + 3 + + + txtPort + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 12 + + True - + + + 12, 60 + + + 29, 12 + + + 2 + + + Port + + + label2 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 13 + + + 127, 27 + + + 359, 21 + + + 1 + + + txtAddress + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 14 + + + True + + + 12, 31 + + + 47, 12 + + + 0 + + + Address + + + label1 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 15 + + + Fill + + + 0, 35 + + + 729, 499 + + + 3 + + + Server + + + groupBox1 + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 0 + + + True + + + NoControl + + + 529, 207 + + + 119, 12 + + + 35 + + + 3)QUIC key/Kcp seed + + + label24 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 0 + + + True + + + NoControl + + + 465, 146 + + + 89, 12 + + + 34 + + + 4)QUIC securty + + + label23 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 1 + + + label21 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panTlsMore + + + 0 + + + cmbAllowInsecure + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panTlsMore + + + 1 + + + 284, 234 + + + 338, 35 + + + 33 + + + panTlsMore + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 2 + + + True + + + 12, 11 + + + 83, 12 + + + 31 + + + allowInsecure + + + label21 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panTlsMore + + + 0 + + + + + + true + + + false + + + 107, 7 + + + 91, 20 + + + 30 + + + cmbAllowInsecure + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panTlsMore + + + 1 + + + True + + + 350, 32 + + + 113, 12 + + + 15 + + + *Default value tcp + + + label9 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 3 + + + True + + + 464, 130 + + + 203, 12 + + + 29 + + + 3)h2 host Separated by commas (,) + + + label20 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 4 + + + 127, 169 + + + True + + + 396, 54 + + + 28 + + + txtPath + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 5 + + + tcp + + + kcp + + + ws + + + h2 + + + quic + + + 192, 28 + + + 143, 20 + + + 12 + + + cmbNetwork + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 6 + + + True + + + 9, 32 + + + 167, 12 + + + 13 + + + Transport protocol(network) + + + label7 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 7 + + + True + + + 9, 169 + + + 29, 12 + + + 27 + + + Path + + + label19 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 8 + + + True + + + 529, 189 + + + 59, 12 + + + 26 + + + 2)h2 path + + + label18 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 9 + + + True + + + 464, 115 + + + 59, 12 + + + 25 + + + 2)ws host + + + label17 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 10 + + + True + + + 529, 172 + + + 59, 12 + + + 24 + + + 1)ws path + + + label16 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 11 + + + True + + + 464, 100 + + + 215, 12 + + + 23 + + + 1)http host Separated by commas (,) + + + label14 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 12 + + + True + + + 9, 239 + + + 23, 12 + + + 22 + + + TLS + + + label15 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 13 + + + + + + tls + + + 127, 239 + + + 143, 20 + + + 21 + + + cmbStreamSecurity + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 14 + + + True + + + 282, 66 + + + 299, 12 + + + 20 + + + *tcp or kcp or QUIC camouflage type, default none + + + label12 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 15 + + + 158, 100 + + + True + + + 300, 53 + + + 16 + + + txtRequestHost + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 16 + + + True + + + 9, 66 + + + 95, 12 + + + 19 + + + Camouflage type + + + label11 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 17 + + + True + + + 9, 100 + + + 143, 12 + + + 17 + + + Camouflage domain(host) + + + label10 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 18 + + + none + + + http + + + srtp + + + utp + + + wechat-video + + + dtls + + + wireguard + + + 127, 64 + + + 143, 20 + + + 18 + + + cmbHeaderType + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 19 + + + btnOK + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panel2 + + + 1 + + + Bottom + + + 0, 534 + + + 729, 60 + + + 7 + + + panel2 + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 1 + + + 303, 17 + + + 75, 23 + + + 5 + + + &OK + + + btnOK + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panel2 + + + 1 + + + Top + + + 0, 25 + + + 729, 10 + + + 6 + + + panel1 + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 2 + 17, 17 + + 0, 0 + + + 729, 25 + + + 8 + + + menuServer + + + System.Windows.Forms.MenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 3 + + + 162, 21 + + + Import configuration file + + + 237, 22 + + + Import client configuration + + + 237, 22 + + + Import server configuration + + + 234, 6 + + + 237, 22 + + + Import URL from clipboard + + + True + + + 25 + + + 6, 12 + + + 729, 594 + + + Edit or add a [VMess] server + + + MenuItem1 + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + MenuItemImportClient + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + MenuItemImportServer + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolStripSeparator1 + + + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + MenuItemImportClipboard + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + AddServerForm + + + v2rayN.Forms.BaseForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/v2rayN/v2rayN/Forms/AddServerForm.zh-Hans.resx b/v2rayN/v2rayN/Forms/AddServerForm.zh-Hans.resx index 33c992e3..489f5fd2 100644 --- a/v2rayN/v2rayN/Forms/AddServerForm.zh-Hans.resx +++ b/v2rayN/v2rayN/Forms/AddServerForm.zh-Hans.resx @@ -120,12 +120,18 @@ 取消(&C) + + 服务器 + 生成(&G) *手填,方便识别管理 + + 底层传输方式(transport) + 149, 12 @@ -148,6 +154,9 @@ 223, 7 + + 350, 36 + 143, 12 @@ -160,18 +169,27 @@ 3)h2 host中间逗号(,)隔开 + + 127, 168 + - 124, 32 + 127, 32 211, 20 + + 9, 36 + 107, 12 传输协议(network) + + 9, 168 + 65, 12 @@ -184,11 +202,20 @@ 1)http host中间逗号(,)隔开 + + 9, 237 + - 77, 12 + 107, 12 - 底层传输安全 + 底层传输安全(tls) + + + 127, 237 + + + 282, 71 197, 12 @@ -197,25 +224,31 @@ *tcp或kcp或QUIC伪装类型,默认none - 124, 94 + 127, 102 334, 51 + + 9, 71 + 89, 12 伪装类型(type) + + 9, 102 + 89, 12 伪装域名(host) - - 底层传输方式(transport) + + 127, 67 113, 12 @@ -265,12 +298,15 @@ 地址(address) - - 服务器 - 确定(&O) + + 92, 21 + + + 导入配置文件 + 171, 22 @@ -292,12 +328,6 @@ 从剪贴板导入URL - - 92, 21 - - - 导入配置文件 - 编辑或添加[VMess]服务器 From e2de9b4703296307eee881ef12d4781191050f60 Mon Sep 17 00:00:00 2001 From: 2dust <31833384+2dust@users.noreply.github.com> Date: Wed, 7 Oct 2020 15:18:51 +0800 Subject: [PATCH 21/54] Update V2rayConfigHandler.cs --- v2rayN/v2rayN/Handler/V2rayConfigHandler.cs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs b/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs index c42050a8..b40f13c3 100644 --- a/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs +++ b/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs @@ -473,7 +473,14 @@ namespace v2rayN.Handler //if xtls if (config.streamSecurity() == Global.StreamSecurityX) { - usersItem.flow = config.flow(); + if (Utils.IsNullOrEmpty(config.flow())) + { + usersItem.flow = "xtls-rprx-origin"; + } + else + { + usersItem.flow = config.flow(); + } } //Mux From a370f7bfbb0f69468f400ff27a15084f422f1b1d Mon Sep 17 00:00:00 2001 From: 2dust <31833384+2dust@users.noreply.github.com> Date: Wed, 7 Oct 2020 17:22:22 +0800 Subject: [PATCH 22/54] add Trojan --- v2rayN/v2rayN/Forms/AddServer2Form.cs | 6 +- v2rayN/v2rayN/Forms/AddServer3Form.cs | 6 +- v2rayN/v2rayN/Forms/AddServer4Form.cs | 6 +- v2rayN/v2rayN/Forms/AddServer5Form.cs | 6 +- .../v2rayN/Forms/AddServer6Form.Designer.cs | 173 +++ v2rayN/v2rayN/Forms/AddServer6Form.cs | 96 ++ v2rayN/v2rayN/Forms/AddServer6Form.resx | 486 +++++++ .../v2rayN/Forms/AddServer6Form.zh-Hans.resx | 160 +++ v2rayN/v2rayN/Forms/AddServerForm.cs | 6 +- v2rayN/v2rayN/Forms/AddServerForm.resx | 1098 ++++++--------- .../v2rayN/Forms/BaseServerForm.Designer.cs | 51 + v2rayN/v2rayN/Forms/BaseServerForm.cs | 18 + v2rayN/v2rayN/Forms/BaseServerForm.resx | 1253 +++++++++++++++++ v2rayN/v2rayN/Forms/MainForm.Designer.cs | 22 +- v2rayN/v2rayN/Forms/MainForm.cs | 141 +- v2rayN/v2rayN/Forms/MainForm.resx | 108 +- v2rayN/v2rayN/Forms/MainForm.zh-Hans.resx | 74 +- v2rayN/v2rayN/Global.cs | 8 + v2rayN/v2rayN/Handler/ConfigHandler.cs | 64 + v2rayN/v2rayN/Handler/V2rayConfigHandler.cs | 73 + v2rayN/v2rayN/Mode/Config.cs | 39 +- v2rayN/v2rayN/Mode/EConfigType.cs | 3 +- v2rayN/v2rayN/Properties/AssemblyInfo.cs | 2 +- v2rayN/v2rayN/v2rayN.csproj | 23 + 24 files changed, 3005 insertions(+), 917 deletions(-) create mode 100644 v2rayN/v2rayN/Forms/AddServer6Form.Designer.cs create mode 100644 v2rayN/v2rayN/Forms/AddServer6Form.cs create mode 100644 v2rayN/v2rayN/Forms/AddServer6Form.resx create mode 100644 v2rayN/v2rayN/Forms/AddServer6Form.zh-Hans.resx create mode 100644 v2rayN/v2rayN/Forms/BaseServerForm.Designer.cs create mode 100644 v2rayN/v2rayN/Forms/BaseServerForm.cs create mode 100644 v2rayN/v2rayN/Forms/BaseServerForm.resx diff --git a/v2rayN/v2rayN/Forms/AddServer2Form.cs b/v2rayN/v2rayN/Forms/AddServer2Form.cs index 98ba9904..999b0c25 100644 --- a/v2rayN/v2rayN/Forms/AddServer2Form.cs +++ b/v2rayN/v2rayN/Forms/AddServer2Form.cs @@ -5,10 +5,8 @@ using v2rayN.Mode; namespace v2rayN.Forms { - public partial class AddServer2Form : BaseForm - { - public int EditIndex { get; set; } - VmessItem vmessItem; + public partial class AddServer2Form : BaseServerForm + { public AddServer2Form() { diff --git a/v2rayN/v2rayN/Forms/AddServer3Form.cs b/v2rayN/v2rayN/Forms/AddServer3Form.cs index 06d43374..8113a784 100644 --- a/v2rayN/v2rayN/Forms/AddServer3Form.cs +++ b/v2rayN/v2rayN/Forms/AddServer3Form.cs @@ -5,10 +5,8 @@ using v2rayN.Mode; namespace v2rayN.Forms { - public partial class AddServer3Form : BaseForm - { - public int EditIndex { get; set; } - VmessItem vmessItem = null; + public partial class AddServer3Form : BaseServerForm + { public AddServer3Form() { diff --git a/v2rayN/v2rayN/Forms/AddServer4Form.cs b/v2rayN/v2rayN/Forms/AddServer4Form.cs index 90fc63ac..23ec6aaa 100644 --- a/v2rayN/v2rayN/Forms/AddServer4Form.cs +++ b/v2rayN/v2rayN/Forms/AddServer4Form.cs @@ -5,10 +5,8 @@ using v2rayN.Mode; namespace v2rayN.Forms { - public partial class AddServer4Form : BaseForm - { - public int EditIndex { get; set; } - VmessItem vmessItem = null; + public partial class AddServer4Form : BaseServerForm + { public AddServer4Form() { diff --git a/v2rayN/v2rayN/Forms/AddServer5Form.cs b/v2rayN/v2rayN/Forms/AddServer5Form.cs index 43ef11ea..d426e5c6 100644 --- a/v2rayN/v2rayN/Forms/AddServer5Form.cs +++ b/v2rayN/v2rayN/Forms/AddServer5Form.cs @@ -5,10 +5,8 @@ using v2rayN.Mode; namespace v2rayN.Forms { - public partial class AddServer5Form : BaseForm - { - public int EditIndex { get; set; } - VmessItem vmessItem = null; + public partial class AddServer5Form : BaseServerForm + { public AddServer5Form() { diff --git a/v2rayN/v2rayN/Forms/AddServer6Form.Designer.cs b/v2rayN/v2rayN/Forms/AddServer6Form.Designer.cs new file mode 100644 index 00000000..eba21fc8 --- /dev/null +++ b/v2rayN/v2rayN/Forms/AddServer6Form.Designer.cs @@ -0,0 +1,173 @@ +namespace v2rayN.Forms +{ + partial class AddServer6Form + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AddServer6Form)); + this.btnClose = new System.Windows.Forms.Button(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.label13 = new System.Windows.Forms.Label(); + this.txtRemarks = new System.Windows.Forms.TextBox(); + this.label6 = new System.Windows.Forms.Label(); + this.txtId = new System.Windows.Forms.TextBox(); + this.label3 = new System.Windows.Forms.Label(); + this.txtPort = new System.Windows.Forms.TextBox(); + this.label2 = new System.Windows.Forms.Label(); + this.txtAddress = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.panel2 = new System.Windows.Forms.Panel(); + this.btnOK = new System.Windows.Forms.Button(); + this.panel1 = new System.Windows.Forms.Panel(); + this.groupBox1.SuspendLayout(); + this.panel2.SuspendLayout(); + this.SuspendLayout(); + // + // btnClose + // + resources.ApplyResources(this.btnClose, "btnClose"); + this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.btnClose.Name = "btnClose"; + this.btnClose.UseVisualStyleBackColor = true; + this.btnClose.Click += new System.EventHandler(this.btnClose_Click); + // + // groupBox1 + // + resources.ApplyResources(this.groupBox1, "groupBox1"); + this.groupBox1.Controls.Add(this.label13); + this.groupBox1.Controls.Add(this.txtRemarks); + this.groupBox1.Controls.Add(this.label6); + this.groupBox1.Controls.Add(this.txtId); + this.groupBox1.Controls.Add(this.label3); + this.groupBox1.Controls.Add(this.txtPort); + this.groupBox1.Controls.Add(this.label2); + this.groupBox1.Controls.Add(this.txtAddress); + this.groupBox1.Controls.Add(this.label1); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.TabStop = false; + // + // label13 + // + resources.ApplyResources(this.label13, "label13"); + this.label13.Name = "label13"; + // + // txtRemarks + // + resources.ApplyResources(this.txtRemarks, "txtRemarks"); + this.txtRemarks.Name = "txtRemarks"; + // + // label6 + // + resources.ApplyResources(this.label6, "label6"); + this.label6.Name = "label6"; + // + // txtId + // + resources.ApplyResources(this.txtId, "txtId"); + this.txtId.Name = "txtId"; + // + // label3 + // + resources.ApplyResources(this.label3, "label3"); + this.label3.Name = "label3"; + // + // txtPort + // + resources.ApplyResources(this.txtPort, "txtPort"); + this.txtPort.Name = "txtPort"; + // + // label2 + // + resources.ApplyResources(this.label2, "label2"); + this.label2.Name = "label2"; + // + // txtAddress + // + resources.ApplyResources(this.txtAddress, "txtAddress"); + this.txtAddress.Name = "txtAddress"; + // + // label1 + // + resources.ApplyResources(this.label1, "label1"); + this.label1.Name = "label1"; + // + // panel2 + // + resources.ApplyResources(this.panel2, "panel2"); + this.panel2.Controls.Add(this.btnClose); + this.panel2.Controls.Add(this.btnOK); + this.panel2.Name = "panel2"; + // + // btnOK + // + resources.ApplyResources(this.btnOK, "btnOK"); + this.btnOK.Name = "btnOK"; + this.btnOK.UseVisualStyleBackColor = true; + this.btnOK.Click += new System.EventHandler(this.btnOK_Click); + // + // panel1 + // + resources.ApplyResources(this.panel1, "panel1"); + this.panel1.Name = "panel1"; + // + // AddServer6Form + // + resources.ApplyResources(this, "$this"); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.CancelButton = this.btnClose; + this.Controls.Add(this.groupBox1); + this.Controls.Add(this.panel2); + this.Controls.Add(this.panel1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.MinimizeBox = true; + this.Name = "AddServer6Form"; + this.Load += new System.EventHandler(this.AddServer6Form_Load); + this.groupBox1.ResumeLayout(false); + this.groupBox1.PerformLayout(); + this.panel2.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.Button btnClose; + private System.Windows.Forms.Button btnOK; + private System.Windows.Forms.TextBox txtRemarks; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.TextBox txtId; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.TextBox txtPort; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.TextBox txtAddress; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.Panel panel2; + private System.Windows.Forms.Label label13; + } +} \ No newline at end of file diff --git a/v2rayN/v2rayN/Forms/AddServer6Form.cs b/v2rayN/v2rayN/Forms/AddServer6Form.cs new file mode 100644 index 00000000..37e3f565 --- /dev/null +++ b/v2rayN/v2rayN/Forms/AddServer6Form.cs @@ -0,0 +1,96 @@ +using System; +using System.Windows.Forms; +using v2rayN.Handler; +using v2rayN.Mode; + +namespace v2rayN.Forms +{ + public partial class AddServer6Form : BaseServerForm + { + public AddServer6Form() + { + InitializeComponent(); + } + + private void AddServer6Form_Load(object sender, EventArgs e) + { + if (EditIndex >= 0) + { + vmessItem = config.vmess[EditIndex]; + BindingServer(); + } + else + { + vmessItem = new VmessItem(); + ClearServer(); + } + } + + /// + /// 绑定数据 + /// + private void BindingServer() + { + + txtAddress.Text = vmessItem.address; + txtPort.Text = vmessItem.port.ToString(); + txtId.Text = vmessItem.id; + txtRemarks.Text = vmessItem.remarks; + } + + + /// + /// 清除设置 + /// + private void ClearServer() + { + txtAddress.Text = ""; + txtPort.Text = ""; + txtId.Text = ""; + txtRemarks.Text = ""; + } + + private void btnOK_Click(object sender, EventArgs e) + { + string address = txtAddress.Text; + string port = txtPort.Text; + string id = txtId.Text; + string remarks = txtRemarks.Text; + + if (Utils.IsNullOrEmpty(address)) + { + UI.Show(UIRes.I18N("FillServerAddress")); + return; + } + if (Utils.IsNullOrEmpty(port) || !Utils.IsNumberic(port)) + { + UI.Show(UIRes.I18N("FillCorrectServerPort")); + return; + } + if (Utils.IsNullOrEmpty(id)) + { + UI.Show(UIRes.I18N("FillPassword")); + return; + } + + vmessItem.address = address; + vmessItem.port = Utils.ToInt(port); + vmessItem.id = id; + vmessItem.remarks = remarks; + + if (ConfigHandler.AddTrojanServer(ref config, vmessItem, EditIndex) == 0) + { + this.DialogResult = DialogResult.OK; + } + else + { + UI.ShowWarning(UIRes.I18N("OperationFailed")); + } + } + private void btnClose_Click(object sender, EventArgs e) + { + this.DialogResult = DialogResult.Cancel; + } + + } +} diff --git a/v2rayN/v2rayN/Forms/AddServer6Form.resx b/v2rayN/v2rayN/Forms/AddServer6Form.resx new file mode 100644 index 00000000..e3935dc5 --- /dev/null +++ b/v2rayN/v2rayN/Forms/AddServer6Form.resx @@ -0,0 +1,486 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + Server address + + + + 3 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + Bottom + + + txtPort + + + True + + + groupBox1 + + + 4 + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + btnOK + + + txtRemarks + + + + 194, 21 + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + AddServer6Form + + + label1 + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + panel2 + + + 12, 155 + + + True + + + 53, 12 + + + Fill + + + 194, 21 + + + groupBox1 + + + 6, 12 + + + True + + + label3 + + + 127, 154 + + + True + + + 6 + + + 7 + + + groupBox1 + + + 113, 12 + + + 12, 93 + + + 8 + + + Server + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 0 + + + 2 + + + 547, 60 + + + 89, 12 + + + 278, 21 + + + 359, 21 + + + label6 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + * + + + groupBox1 + + + * Fill in manually + + + 11 + + + 10 + + + 71, 12 + + + 75, 23 + + + panel1 + + + txtId + + + 12, 62 + + + 1 + + + btnClose + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + &OK + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Password + + + 75, 23 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + txtAddress + + + 547, 10 + + + Top + + + 0, 10 + + + 2 + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 547, 221 + + + 2 + + + groupBox1 + + + 4 + + + 3 + + + 127, 27 + + + 5 + + + groupBox1 + + + True + + + 127, 59 + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Alias (remarks) + + + 5 + + + groupBox1 + + + 303, 17 + + + $this + + + 6 + + + &Cancel + + + 12, 31 + + + Edit or add a [Trojan] server + + + 0 + + + Server port + + + 4 + + + 337, 158 + + + groupBox1 + + + 127, 91 + + + 5 + + + $this + + + 1 + + + 0, 0 + + + 1 + + + label13 + + + 3 + + + 95, 12 + + + label2 + + + 0 + + + panel2 + + + 0, 231 + + + 22 + + + 7 + + + 547, 291 + + + 0 + + + v2rayN.Forms.BaseServerForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + + + $this + + + 396, 17 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 1 + + + panel2 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + \ No newline at end of file diff --git a/v2rayN/v2rayN/Forms/AddServer6Form.zh-Hans.resx b/v2rayN/v2rayN/Forms/AddServer6Form.zh-Hans.resx new file mode 100644 index 00000000..d7642edd --- /dev/null +++ b/v2rayN/v2rayN/Forms/AddServer6Form.zh-Hans.resx @@ -0,0 +1,160 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 取消(&C) + + + 服务器 + + + *手填,方便识别管理 + + + + 83, 12 + + + 别名(remarks) + + + 29, 12 + + + 密码 + + + 65, 12 + + + 服务器端口 + + + 65, 12 + + + 服务器地址 + + + 确定(&O) + + + 编辑或添加[Trojan]服务器 + + \ No newline at end of file diff --git a/v2rayN/v2rayN/Forms/AddServerForm.cs b/v2rayN/v2rayN/Forms/AddServerForm.cs index a6a751e4..bd80867b 100644 --- a/v2rayN/v2rayN/Forms/AddServerForm.cs +++ b/v2rayN/v2rayN/Forms/AddServerForm.cs @@ -5,10 +5,8 @@ using v2rayN.Mode; namespace v2rayN.Forms { - public partial class AddServerForm : BaseForm - { - public int EditIndex { get; set; } - VmessItem vmessItem = null; + public partial class AddServerForm : BaseServerForm + { public AddServerForm() { diff --git a/v2rayN/v2rayN/Forms/AddServerForm.resx b/v2rayN/v2rayN/Forms/AddServerForm.resx index e38dd5aa..6d3eec6c 100644 --- a/v2rayN/v2rayN/Forms/AddServerForm.resx +++ b/v2rayN/v2rayN/Forms/AddServerForm.resx @@ -194,6 +194,25 @@ 1 + + True + + + + NoControl + + + 529, 207 + + + 119, 12 + + + 35 + + + 3)QUIC key/Kcp seed + label24 @@ -206,6 +225,24 @@ 0 + + True + + + NoControl + + + 465, 146 + + + 89, 12 + + + 34 + + + 4)QUIC securty + label23 @@ -218,6 +255,72 @@ 1 + + True + + + 12, 11 + + + 83, 12 + + + 31 + + + allowInsecure + + + label21 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panTlsMore + + + 0 + + + + + + true + + + false + + + 107, 7 + + + 91, 20 + + + 30 + + + cmbAllowInsecure + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panTlsMore + + + 1 + + + 284, 234 + + + 338, 35 + + + 33 + panTlsMore @@ -230,6 +333,21 @@ 2 + + True + + + 350, 32 + + + 113, 12 + + + 15 + + + *Default value tcp + label9 @@ -242,6 +360,21 @@ 3 + + True + + + 464, 130 + + + 203, 12 + + + 29 + + + 3)h2 host Separated by commas (,) + label20 @@ -254,6 +387,18 @@ 4 + + 127, 169 + + + True + + + 396, 54 + + + 28 + txtPath @@ -266,6 +411,30 @@ 5 + + tcp + + + kcp + + + ws + + + h2 + + + quic + + + 192, 28 + + + 143, 20 + + + 12 + cmbNetwork @@ -278,6 +447,21 @@ 6 + + True + + + 9, 32 + + + 167, 12 + + + 13 + + + Transport protocol(network) + label7 @@ -290,6 +474,21 @@ 7 + + True + + + 9, 169 + + + 29, 12 + + + 27 + + + Path + label19 @@ -302,6 +501,21 @@ 8 + + True + + + 529, 189 + + + 59, 12 + + + 26 + + + 2)h2 path + label18 @@ -314,6 +528,21 @@ 9 + + True + + + 464, 115 + + + 59, 12 + + + 25 + + + 2)ws host + label17 @@ -326,6 +555,21 @@ 10 + + True + + + 529, 172 + + + 59, 12 + + + 24 + + + 1)ws path + label16 @@ -338,6 +582,21 @@ 11 + + True + + + 464, 100 + + + 215, 12 + + + 23 + + + 1)http host Separated by commas (,) + label14 @@ -350,6 +609,21 @@ 12 + + True + + + 9, 243 + + + 23, 12 + + + 22 + + + TLS + label15 @@ -362,6 +636,21 @@ 13 + + + + + tls + + + 127, 239 + + + 143, 20 + + + 21 + cmbStreamSecurity @@ -374,6 +663,21 @@ 14 + + True + + + 282, 66 + + + 299, 12 + + + 20 + + + *tcp or kcp or QUIC camouflage type, default none + label12 @@ -386,6 +690,18 @@ 15 + + 158, 100 + + + True + + + 300, 53 + + + 16 + txtRequestHost @@ -398,6 +714,21 @@ 16 + + True + + + 9, 66 + + + 95, 12 + + + 19 + + + Camouflage type + label11 @@ -410,6 +741,21 @@ 17 + + True + + + 9, 100 + + + 143, 12 + + + 17 + + + Camouflage domain(host) + label10 @@ -422,6 +768,36 @@ 18 + + none + + + http + + + srtp + + + utp + + + wechat-video + + + dtls + + + wireguard + + + 127, 64 + + + 143, 20 + + + 18 + cmbHeaderType @@ -434,7 +810,6 @@ 19 - Bottom @@ -816,644 +1191,17 @@ 0 - - True + + 303, 17 - - NoControl + + 75, 23 - - 529, 207 - - - 119, 12 - - - 35 - - - 3)QUIC key/Kcp seed - - - label24 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 0 - - - True - - - NoControl - - - 465, 146 - - - 89, 12 - - - 34 - - - 4)QUIC securty - - - label23 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 1 - - - label21 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - panTlsMore - - - 0 - - - cmbAllowInsecure - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - panTlsMore - - - 1 - - - 284, 234 - - - 338, 35 - - - 33 - - - panTlsMore - - - System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 2 - - - True - - - 12, 11 - - - 83, 12 - - - 31 - - - allowInsecure - - - label21 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - panTlsMore - - - 0 - - - - - - true - - - false - - - 107, 7 - - - 91, 20 - - - 30 - - - cmbAllowInsecure - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - panTlsMore - - - 1 - - - True - - - 350, 32 - - - 113, 12 - - - 15 - - - *Default value tcp - - - label9 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 3 - - - True - - - 464, 130 - - - 203, 12 - - - 29 - - - 3)h2 host Separated by commas (,) - - - label20 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 4 - - - 127, 169 - - - True - - - 396, 54 - - - 28 - - - txtPath - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - + 5 - - tcp - - - kcp - - - ws - - - h2 - - - quic - - - 192, 28 - - - 143, 20 - - - 12 - - - cmbNetwork - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 6 - - - True - - - 9, 32 - - - 167, 12 - - - 13 - - - Transport protocol(network) - - - label7 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 7 - - - True - - - 9, 169 - - - 29, 12 - - - 27 - - - Path - - - label19 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 8 - - - True - - - 529, 189 - - - 59, 12 - - - 26 - - - 2)h2 path - - - label18 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 9 - - - True - - - 464, 115 - - - 59, 12 - - - 25 - - - 2)ws host - - - label17 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 10 - - - True - - - 529, 172 - - - 59, 12 - - - 24 - - - 1)ws path - - - label16 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 11 - - - True - - - 464, 100 - - - 215, 12 - - - 23 - - - 1)http host Separated by commas (,) - - - label14 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 12 - - - True - - - 9, 239 - - - 23, 12 - - - 22 - - - TLS - - - label15 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 13 - - - - - - tls - - - 127, 239 - - - 143, 20 - - - 21 - - - cmbStreamSecurity - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 14 - - - True - - - 282, 66 - - - 299, 12 - - - 20 - - - *tcp or kcp or QUIC camouflage type, default none - - - label12 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 15 - - - 158, 100 - - - True - - - 300, 53 - - - 16 - - - txtRequestHost - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 16 - - - True - - - 9, 66 - - - 95, 12 - - - 19 - - - Camouflage type - - - label11 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 17 - - - True - - - 9, 100 - - - 143, 12 - - - 17 - - - Camouflage domain(host) - - - label10 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 18 - - - none - - - http - - - srtp - - - utp - - - wechat-video - - - dtls - - - wireguard - - - 127, 64 - - - 143, 20 - - - 18 - - - cmbHeaderType - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 19 + + &OK btnOK @@ -1491,30 +1239,6 @@ 1 - - 303, 17 - - - 75, 23 - - - 5 - - - &OK - - - btnOK - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - panel2 - - - 1 - Top @@ -1542,33 +1266,6 @@ 17, 17 - - 0, 0 - - - 729, 25 - - - 8 - - - menuServer - - - System.Windows.Forms.MenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 3 - - - 162, 21 - - - Import configuration file - 237, 22 @@ -1590,6 +1287,33 @@ Import URL from clipboard + + 162, 21 + + + Import configuration file + + + 0, 0 + + + 729, 25 + + + 8 + + + menuServer + + + System.Windows.Forms.MenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 3 + True @@ -1639,6 +1363,6 @@ AddServerForm - v2rayN.Forms.BaseForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + v2rayN.Forms.BaseServerForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null \ No newline at end of file diff --git a/v2rayN/v2rayN/Forms/BaseServerForm.Designer.cs b/v2rayN/v2rayN/Forms/BaseServerForm.Designer.cs new file mode 100644 index 00000000..7fe6a797 --- /dev/null +++ b/v2rayN/v2rayN/Forms/BaseServerForm.Designer.cs @@ -0,0 +1,51 @@ +namespace v2rayN.Forms +{ + partial class BaseServerForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(BaseServerForm)); + this.SuspendLayout(); + // + // BaseServerForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(292, 273); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "BaseServerForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "BaseServerForm"; + this.ResumeLayout(false); + + } + + #endregion + } +} \ No newline at end of file diff --git a/v2rayN/v2rayN/Forms/BaseServerForm.cs b/v2rayN/v2rayN/Forms/BaseServerForm.cs new file mode 100644 index 00000000..84711727 --- /dev/null +++ b/v2rayN/v2rayN/Forms/BaseServerForm.cs @@ -0,0 +1,18 @@ +using System; +using System.Windows.Forms; +using v2rayN.Mode; + +namespace v2rayN.Forms +{ + public partial class BaseServerForm : BaseForm + { + public int EditIndex { get; set; } + protected VmessItem vmessItem = null; + + public BaseServerForm() + { + InitializeComponent(); + } + + } +} diff --git a/v2rayN/v2rayN/Forms/BaseServerForm.resx b/v2rayN/v2rayN/Forms/BaseServerForm.resx new file mode 100644 index 00000000..61360d3d --- /dev/null +++ b/v2rayN/v2rayN/Forms/BaseServerForm.resx @@ -0,0 +1,1253 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAEAgIAAAAEAIAAoCAEAFgAAACgAAACAAAAAAAEAAAEAIAAAAAAAAAABAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAgAAAAIAAAACAAAAAwAA + AAMAAAADAAAAAwAAAAQAAAAEAAAABAAAAAQAAAADAAAAAwAAAAMAAAADAAAAAgAAAAIAAAACAAAAAQAA + AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAQAA + AAIAAAADAAAABAAAAAUAAAAGAAAACAAAAAgAAAAKAAAACgAAAAsAAAAMAAAADQAAAA0AAAANAAAADQAA + AAwAAAALAAAACgAAAAoAAAAIAAAACAAAAAYAAAAFAAAABAAAAAMAAAACAAAAAQAAAAEAAAABAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAQAAAAIAAAACAAAABAAAAAUAAAAHAAAACQAAAAwAAAAOAAAAEQAAABMAAAAVAAAAFwAA + ABgAAAAaAAAAGwAAABwAAAAcAAAAHQAAAB0AAAAcAAAAHAAAABsAAAAaAAAAGAAAABcAAAAVAAAAEwAA + ABEAAAAOAAAADAAAAAkAAAAHAAAABQAAAAQAAAACAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAMAAAAEAAAABwAAAAkAAAAMAAAAEAAA + ABMAAAAXAAAAGgAAAB4BAQAgAgEBIwMDASUDAgEmAwMBKAUEASkGAwMrCAUDKwgFAysIBQMsCAUDLAgF + AysIBQMrBgMDKwUEASkDAwEoAwIBJgMDASUCAQEjAQEAIAAAAB4AAAAaAAAAFwAAABMAAAAQAAAADAAA + AAkAAAAHAAAABAAAAAMAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAA + AAQAAAAHAAAACgAAAA4AAAASAAAAFwAAABwAAAAgAwIBJAUDAicGBAIqBQUCKwICAi0FAwMvCQcEMQgH + BjACAwQwAAECMQYFBTURDgg5GRMJPBwWCz0cFgs9GRMJPBEOCDkGBQU1AAECMQICBDAIBwYwCQcEMQUD + Ay8CAgItBQUCKwYEAioFAwInAwIBJAAAACAAAAAcAAAAFwAAABIAAAAOAAAACgAAAAcAAAAEAAAAAgAA + AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAUAAAAIAAAADQAAABIAAAAXAQAAHQIBASIDAgEmBgMDKgQD + AywAAAEtBQQEMRYRCTckHA0+OCoTSlU/G19sUCF1elomhoZjKZWOaCufkmstqphwL7Kccy+3nnQwup51 + MLqccy+3mXEvspNsLaqOaSufh2QqlHtbJ4ZtTyJ1Vj8cXzgpE0okHA0+FhEJNwUEBDEAAAEtBAMDLAYD + AyoDAgEmAgEBIgAAAB0AAAAXAAAAEgAAAA0AAAAIAAAABQAAAAMAAAABAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAYAAAAKAAAADwAA + ABUAAAAcAgIAIgQCAicFBAErBAMDLgUEBDAWEQo5QjEWT2BHH2d6WiaHkGssq6B2MMWtfzTbt4Y367+M + OfXEjzv5yZM8/M2WPv7PmD7/0Zk//9KaP//Tmz//05s//9OaP//Smj//0Jg+/82WPv3KlD37xZA7+cCM + OvW4iDjrroA126F2McWRbCyre1smh2FHH2dCMRZPFhEKOQUEBDAEAwMuBQQBKwQCAicCAgAiAAAAHAAA + ABUAAAAPAAAACgAAAAYAAAADAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAABAAAAAwAAAAYAAAAKAAAAEAAAABcBAQAeAwIBJAYDAyoBAAEsBwUEMSIaDDxSPBtaelomhpRt + LbGoezPVt4Y37MSQO/nMlj3/0Zk//9WcQP/YnkH/2J5B/9ieQP/XnkD/155A/9eeQP7XnkD+155A/tee + QP7XnkD+155A/teeQP7XnkD+155A/9eeQP/YnkD/2J5B/9ieQf/WnED/0po//82WPf/FkTv5uog47Kp8 + M9WVbi6xelomh1E8GlshGQw8BwUFMgEAASwGAwMqAwIBJAEBAB4AAAAXAAAAEAAAAAoAAAAGAAAAAwAA + AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAYAAAAKAAAAEQAAABgBAQAgBAMBJgUD + AysDAgMvGRIKOVQ+G1p+XSiKm3MvvrKDNubCjjr5zZY+/tWcQP/XnUD/2J9B/tieQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/2J5A/9ifQf7XnUD/1ZxA/8+YPv7Djzv5s4M25pxyL799XCeLUj0bWhkT + CzkDAgMvBQMDKwQDASYBAQAfAAAAGAAAABEAAAAKAAAABgAAAAMAAAABAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAA + AAQAAAAJAAAADwAAABcBAQAfBAMBJgMCASsIBgQwMSQRQ2xQIXOUbS2xr4A14cOOO/nPmD7/1p1A/9ie + QP/XnkD+155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/tieQP/WnUD/0Jg+/8SPO/mvgTXhlG0usWtOInQwIxJDCAYEMAMCASsEAwEnAQEAHwAA + ABcAAAAPAAAACQAAAAQAAAACAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAMAAAAHAAAADQAAABQBAQAdBQQBJQUFAiwGBQQwRDMXTXxc + J4ahdjHKuog48syVPf7VnED/155B/9ieQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/2J5B/9Wc + QP/Nlj3+uok486B2Mcp6WiaGQjIWTgYFBDAEAwIsBAMBJQEBAB0AAAAUAAAADQAAAAcAAAADAAAAAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAEAAAACgAA + ABEAAAAaAwIBIwUDAioHBgQvQDAVSoFeKIynejLTv4w6+NCYPv/XnkD/155A/teeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP7XnkD/0Jk+/8CNOvimejLTfl0njT0u + FEoGBQQvBQMCKgMCASMAAAAaAAAAEQAAAAoAAAAEAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAEAAAADAAAABwAAAA0AAAAWAQAAHwQDASgDAgIuNScSRHxbJoOnejPSwY06+dKa + P//YnkD+2J5A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/2J5B/tObP//Bjjr5pXky03hZJoQzJhJEAwMCLgQDASgBAAAfAAAAFgAA + AA0AAAAHAAAAAwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAgAAAAQAAAAGQQC + AiQDAQIqFBAINWlOIWuedDDBvos59dGZP//XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ie + Qf/Smj//vYs59ZtyL8JlSh9sEw8INQMBAioEAgIkAAAAGQAAABAAAAAIAAAAAwAAAAEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAgAAAAQAAAAKAAAAEwIBAR0FAwInAQECLUg1GE2QaiyjtoU3686WPf/XnUD/2J5A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/zpc+/7SEN+yLZiqlRTMXTwEB + Ai4FAwInAgEBHQAAABMAAAAKAAAABAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAFAAAADAAAABUDAgEgBAIBKBoU + CTVxUyNxpnkyzcWQO/zVnED/2J5A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/1ZxA/8WQO/yidzHPak8hcxkTCTUEAgEoAwIBIAAAABUAAAAMAAAABQAA + AAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAACAAAABgAAAA0AAAAXAwMBIgIBAis4KhNDj2ksm7iHN+7QmD7/155A/teeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/2J5B/tCZ + Pv+2hTfviGQqnTUnEkUDAgIrAwMBIwAAABcAAAANAAAABgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAYAAAAOAQEAGQQCAiQIBgMsXEQdWaB2 + Mb3Djzr51ZxA/9ieQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/tacQP/Cjjr5mnAvv1U/G1sIBgMtBAICJAEB + ABkAAAAOAAAABgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAIAAAAHAAAADwEBABkFAwIlCQcDLnVWJHCvgDXZzJY9/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/LlT3/qHwz2m1QInIJBwMvBQMCJgEBABkAAAAPAAAABwAAAAIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAABgAAAA8CAQAaAwIBJhIOBjJ/Xid+toY35tGZ + P//YnkD+155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ieQP7RmT7/sYI26HZX + JYARDQYzBAIBJgIBABoAAAAPAAAABgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAA + AAYAAAAOAQEAGgYFASYjGgw4jGcrkLuJOO7Tmz//2J5A/teeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP7UnD//toY374FeKJIgGAs5BgUBJwEBABoAAAAOAAAABgAA + AAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAFAAAADQIBABkBAQEkLCENOpJrLZnAjTrz1Js//9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/VnED/u4k49IdjKZwpHw07AgEBJAIBABkAAAANAAAABQAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAA + AAwBAQAXBgQBJSwiDjmXby2fw4469tadQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/WnUD/vYs594tmKqEqHg07BwUBJQEB + ABcAAAAMAAAABQAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAQAAAAKAQEAFgMCASImHAw2lm4umMSPO/bVnED+155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/VnED+vos59ohkKZsiGgw4AwIBIgEBABYAAAAKAAAABAAAAAEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAACQEB + ABMGBAIhFQ8IMJJrLY/Djzrz1p1A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/WnUD/vIo59INh + KZMUDggxBgQCIQEBABMAAAAJAAAAAwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAYAAAAQBQICHQgGAyqHYyl8wI067tWcQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/VnED/uIc38HhYJYAIBgMrBQICHQAAABAAAAAGAAAAAgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAADQQD + ARoEAwEnf10mbr2LOebVnED/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/UnD//s4M26HBSInEFAwEnBAQBGgAAAA0AAAAFAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAoFAwIWAQABI2hNIFW5hzjY05o//9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/RmT//qn0021tCHFoDAQEjBAMCFgAA + AAoAAAADAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAHAwICEgAA + AB9GNBU/roA0vdCZPv7XnkD+155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP7Mlj3/nXIwwTwsEkEAAAEfAwICEgAAAAcAAAACAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAA0GBAMbHRUJLaF2MJnMlT35155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeP//XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP7Djzv6jGcrnhoT + CC8HBAMbAAAADQAAAAUAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAJBgQDFgAA + ACOGYiluxpE779adQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ifQ//cq1n/2qVN/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9adQP+5hzfwc1QjcwAAACQGAwMWAAAACQAAAAMAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAABAAAABgIBARAAAAEdW0MbR7mIN83Um0D/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/2KFH/+XCiP/pypf/26dS/9eeP//XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/tGZ + P/+nejPRTjkYSgAAAR0CAQEQAAAABgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAMBAAEKBgMDGBwU + CSypfDOh0Jg+/deeQf7XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeP//Zokf/6cqX//jw5P/qzZ7/2aNL/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155B/seSPP2SayynGBEILQcDAxgBAAELAAAAAwAA + AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAACAAAABwcEAxECAAIghWEoZciSPOvXnUD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/154//9iiR//pyZf//Pr3//n06//mw4v/2aRM/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/1p1A/reHN+1uUSFqBAICIAcEAhEAAAAHAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMCAwALAAAAGE05 + Fzm6iDe/1ZtA/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/Xnj//2KJH/+nJl//8+vj//f7+//jv + 4//nxY7/2aJJ/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/0Jg+/6F3McVBMBQ9AgIAGAID + AAsAAAADAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAABAAAABggGAhIHBQMgnHMvf8+YPvbXnkH/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeP//Yokf/6cmX//z69//9/f7//f39//jw4v/kvX//2aJI/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/YnkH/wY4694JhKIQIBgMhCAYCEgAAAAYAAAABAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMEBAELAQEAGFxC + G0DCjjrR151A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/154//9iiR//pyZf//Pr4//39 + /f/9/f3//f39//bs3P/kv4L/2KFG/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/Tmz//q3401Us3 + F0MCAgAYBQMBCwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAABAAAABQkHARACAgEgpXgxh9KaP/rYnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/Xnj//2KJH/+nJl//8+vj//f39//39/f/9/f3//fz8//br2f/huHX/2KFF/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/FkDv7iWQpjQQCASEJBwERAAAABQAAAAEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIDAwAJAAAAFWhL + H0HGkTzS2J5B/9eeQP7XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeP//Yokf/6cmX//z6 + +P/9/f3//f39//39/f/9/f3//f39//Xo1P/iuXf/2KBE/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/tSb + QP+tfzTWVD0ZRQAAABUDAwAJAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAABAAAABAsIAw4HBQIdpnkygNObP/nYnkH+155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/154//9iiR//pyZf//Pr4//39/f/9/f3//f39//39/f/9/f3//fz6//Tl + zv/fs2v/159C/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/2J5B/sSQO/qJZCmHCQYCHgsIAw4AAAAEAAAAAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIGBQEHBgYAE1Q+ + GTTFkTvI155B/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/Xnj//2KJH/+nJ + l//8+vj//f39//39/f/9/f3//f39//39/f/9/f3//fz7//Pky//gtW3/159C/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/0po//6p8M85FMRQ4BwcBEwYFAQcAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAwkGBAsCAAEZnHMvatObP/LYnkH/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeP//Yokf/6cmX//z6+P/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//Pv4//Hfwf/er2H/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/wI069H5cJnIDAgIZCQYECwAA + AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFCgQFDzUn + ESfAjTqt155B/9eeQP7XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/154//9ii + R//pyZf//Pr4//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//Pv5//Hfwv/esWb/155B/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP7QmD7/n3YwtCwhDioLBQYQAAAABQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQoJAQgAAAAShmIoTM+YPt/YnkH/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/Xnj//2KJH/+nJl//8+vj//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//Pn1/+/Ztv/drFz/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9adQP+2hjfkaE0gUgAA + ABIJCQEIAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADEw0GCw4K + BRmygjWC1p1A+teeQP7XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + P//Yokf/6cmX//z6+P/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f7//Pn2/+/Y + tf/drV3/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/2J5B/siTPPuOaSuKDwsFGxMNBgsAAAADAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQUEAAQEBAANRjQVKMiSPLrYnkH/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/154//9iiR//pyZf//Pr4//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f7/+/fx/+3Uq//bqVX/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/0po//6h7 + M8I2JxErBgUADQUEAAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABDgoFBgYE + AhGOaCpK05s/5tieQf/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/Xnj//2KJH/+nJl//8+vj//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f7/+/fy/+zSqP/bqVX/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnUD/vIk56m1PIVMJBQMSDgoEBgAAAAEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIUEQMIAAAAFLSENnvXnUH5155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeP//Yokf/6cmX//z6+P/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f7/+vTs/+rOof/apk//154//9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ie + QP/Ikzz6jWgrhAAAABUUEQMIAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAxcP + Bws+LBMhyJI8rdieQf/XnkD+155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/154//9iiR//pyZf//Pr4//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3/+vTs/+rMnP/apU7/154//9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/2J5A/tKZP/+keDK0MSMPJRcPBwsAAAADAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQADAAAADIRgJznRmT/S2J9B/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/Xnj//2KJH/+nJl//8+vj//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3/+fHm/+jJ + lv/Zo0r/154//9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/1p1A/7SFNthlSh5AAAAADAABAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARsV + BgUAAAAMpXkyV9acQOvYnkH/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeP//Yokf/6cmX//z6+P/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3/+PLm/+fGj//Zo0r/154//9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/YnkH/wY06735cJl4AAAANGRQFBgAA + AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIxcMBwwHBRK7iTl82J5B/NeeQf7XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/154//9iiR//pyZf//Pr4//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/fz/9+7g/+bDi//YoUb/154//9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9ieQf7LlT38lGwthg8KBhQiFgsHAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAEQCAcIQS4UG8iSPKLZn0H/155A/teeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/Xnj//2KJH/+nJl//8+vj//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/Pz/9+7g/+S/gv/YoUf/154//9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/2J5A/tGZPv+leTGsMyQPHRMK + CAgAAAABAAAAAAAAAAAAAAAAAAAAAAAAAABkVw0ACwoAAgAAAAhcQxwizpg+wdmfQf/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeP//Yokf/6cmX//z6 + +P/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/Pz/9erX/+S+gP/YoEP/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/1ZxA/7CBNchCMBQmAgEACAoKAAJLQQoAAAAAAAAAAAAAAAAAAAAAAAAA + AAAcEQsCBwAFCodiKTPUmz/c2J5B/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/154//9iiR//pyZf//Pr4//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/Pv/9uvZ/+K5 + dv/YoEX/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnUH/uog34GRK + HjoLBAYKGxALAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8VCgMLBgQLpXkxTNadQO7YnkH/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/Xnj//2KJH/+nJ + l//8+vj//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/Pv/8+TM/+G3c//Xn0L/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9ieQf/Cjjrwf10mVQ4IBQweFAoDAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAIBcJAwsIAg21hDZj155A9deeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeP//Yokf/6cmX//z6+P/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/8+/r/9ObR/9+zaf/YoEP/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/8eS + PPeOaCtsDgoEDR8WCQMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVDgcEAAABDL+MOXfXnkH4155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/154//9ii + R//pyZf//Pr4//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/Pv/8d/C/9+yaf/Xn0H/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/y5U9+phwLoAAAAIMFQ4HBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAASAfAQQAAAAMxpA7idieQfzXnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/Xnj//2KJH/+nJl//8+vj//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/8+/n/8uDF/92vYv/Xn0L/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/Plz79oHYwkAAAAAwfHgEEAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAABKxoQBQwKBQ/JkzyX2J5B/tee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + P//Yokf/6cmX//z6+P/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/8+/n/79m2/92t + X//XnkH/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/tGZP/+leTKeDAkFEigYDwUAAAABAAAAAAAA + AAAAAAAAAAAAAAAAAAE4IxUFRC8UE82WPaTYnkH/155A/teeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/154//9iiR//pyZf//Pr4//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/8+vf/8Nu6/9ysW//Xn0H/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD+05s//6x+M6s0JBEYNiMTBgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAS8eEAZcQhwXz5g+rtie + Qf/XnkD+155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/Xnj//2KJH/+nJl//8+vj//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/7+fX/7NOq/9upV//XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP7Um0D/sIE0tEYzFhwvHhEGAAAAAQAA + AAAAAAAAAAAAAAAAAAAAAAABKRoPBmlMIBnQmT+12J5B/9eeQP7XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeP//Yokf/6cmX//z6+P/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/v/7+PP/7dWu/9uoVf/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/tWcQP+0gza7UzoYHioaDwYAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAE5Kg4FcVMiGtGZ + PrjYnkH/155A/teeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/154//9iiR//pyZf//Pr4//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/69u//6s2d/9qmT//Xnj//155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD+1ZxA/7WENr5aQBkfOSsPBgAA + AAEAAAAAAAAAAAAAAAAAAAAAAAAAADwsDwV1VSIa0Zk+uNieQf/XnkD+155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/Xnj//2KJH/+nJl//8+vj//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/v/69vD/69Ci/9qm + UP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP7VnED/tYU2vltCGh89LRAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANCATBHNU + IhjSmj+12J5B/9eeQP7XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeP//Yokf/6cmX//z6+P/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/58+n/6MiU/9qkTP/Xnj//155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/tWcQP+1hTa6WUAaHTUh + EwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBKRcEa04gFdGZP67YnkH/155A/teeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/154//9iiR//pyZf//Pr4//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /v/58uj/6MiU/9mkS//XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD+1ZtA/7ODNbRSPRcaPSYWBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFM0 + HgRbQhwQ0Jg+pdieQf/XnkD+155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/Xnj//2KJH/+nJl//8+vj//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/v/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/37+H/5cGH/9miSP/Xnj//155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP7Tmz//sIE0q0Uy + FhVKLxoEAAAAAAAAAAAAAAAAAAAAAAAAAACCRD4AYC4xAyQXDArPlz6W2J5B/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeP//YoUf/6cmX//z6 + 9//9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/v/7+PT/+fLo//38+//9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/37uD/5cKI/9iiSP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/tKaP/+rfTOdHRMKDlQpKwNpNzIAAAAAAAAAAAAAAAAAAAAAACQb + CgBVPhcCAAAABs2WPYfYnkH8155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/154//9ihR//pyZf//Pr3//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f7///ft3v/pypn/9ejT//38+//9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/P/27Nv/471//9ih + Rf/Xnj//155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/YnkD/0Jg+/ah7 + Mo4AAAAHUDsWAiMaCQAAAAAAAAAAAAAAAAAAAAAAPzMNADUvCgEAAAAFyZM9ddieQfnYnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/Xnj//2KJH/+nJ + l//8+vj//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/v//9urZ/96wZP/ht3P/8+TM//z7 + +v/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/P/26tj/47x9/9igRP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP7Nlj36pHgxfQAAAAU2MAoBPzMNAAAAAAAAAAAAAAAAAAAA + AABuUB4AVj8XARsTBQbGkDte2J5B9deeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeP//Yokf/6cmX//z6+P/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//3+///26tn/3a5f/9igQ//htnD/8+LJ//z7+f/9/f7//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//38 + +v/159P/4rh0/9ifQ//XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/8mT + PPadcy9nIBcHBlE7FgFmShsAAAAAAAAAAAAAAAAAAAAAAH1bIgBrTh0BKB0JBcCMOkbYnkHu2J5B/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/154//9ii + R//pyZf//Pr4//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f7///bq2f/drmD/150+/9ef + Qv/gs2v/8d/B//z6+P/9/f7//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//38+//05c7/4bdy/9efQv/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/YnkH/xZE78JduLU8rHwoFYEYaAW1QHgAAAAAAAAAAAAAA + AAAAAAAAi1M4ALluSwASABEDsYI2LNedQN3Zn0H/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/Xnj//2KJH/+nJl//8+vj//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/v//9urZ/92uYP/XnT//155A/9efQv/fsWf/8d6///z59v/9/f7//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//z7+P/z48r/37Nq/9eeQf/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ie + Qf/AjTnghGIoMhsGEgOPVToAckQuAAAAAAAAAAAAAAAAAAAAAAB/dAsAvasRAAARAAKacC4Y1ZxAwdmf + Qf/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + P//Yokf/6cmX//z6+P/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//3+///26tn/3a5g/9ed + P//XnkD/155A/9eeQf/esGT/79m3//v49P/9/f7//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//z7+f/x4MP/37Np/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/1ZxA/7mHN8dwUiIbCh4AArGgEAB6bwoAAAAAAAAA + AAAAAAAAAAAAAEZHAAAADwAATT8MAolkKQ7Smj+g2Z9B/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/154//9iiR//pyZf//Pr4//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f7///bq2f/drmD/150//9eeQP/XnkD/155A/9efQf/drV7/7tex//v3 + 8P/9/f7//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//z59v/w3sD/3a5g/9eeQf/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/Smj//soI2qWhMIBBZSA8CABAAAEdIAAAAAAAAAAAAAAAAAAAAAAAAAAAAALR4PACfZzcBRTAXBs+Y + PnjZn0H92J5A/teeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/Xnj//2KJH/+nJl//8+vj//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/v//9urZ/92u + YP/XnT//155A/9eeQP/XnkD/155A/9eeQP/cq1n/69Gl//r28P/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//v6 + 9v/v2rf/3q5h/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/2J9A/s6XPf2pfDOBOygVCIpZMAKVYzIAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAt25JAL9yTQEAAAAAyJI8TtieQezYn0H/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeP//Yokf/6cmX//z6+P/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//3+///26tn/3a5g/9edP//XnkD/155A/9eeQP/XnkD/155A/9ee + QP/bqVT/69Gl//r17P/9/f7//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f3+//v48//u2LT/26lW/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/YnkH+yJI87590MFQAAAABlVk8AY5WOQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADixB0A/+AeAAAA + AADAjDkt151A0tmfQf/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/154//9iiR//pyZf//Pr4//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f7///bq + 2f/drmD/150//9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/aqFP/6cuZ//n07P/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//v49P/s0qj/3KpY/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9edQP+/jDnXlGwsMgAAAADjyBsAy7AaAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABcPx4AfU8rAqF1MBHVnD+r2Z9B/9ieQP7XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/Xnj//2KJH/+nJl//8+vj//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/v//9urZ/92uYP/XnT//155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/apU3/6cyb//nx5v/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f3+//r27v/s0af/2qVO/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/YnkD+1JtA/7eGNrF3VyQWdksoAlM5GwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGdO + GQCMdxUBAAAAAtGZPnTZn0H52J5A/teeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeP//Yokf/6cmX//z6+P/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//3+ + ///26tn/3a5g/9edP//XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeP//apEz/5sSL//ny + 5//9/Pz//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f3+//v48v/py5r/2qdS/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ifQP7Olz76rX40fAAAAAONeBUBZU0ZAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArXY3AMqKQQAtFhICyJM9PtieQejYnkH/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/154//9iiR//pyZf//Pr4//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f7///bq2f/drmD/150//9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/Yokj/58eR//fv4f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f3+//nz + 6f/pyZf/2aNL/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/2J5B/8aRO+ueczBGOSAVAq53OACZaDEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AACSghAAtrAHAAADAAGwgDYV1p1AutmfQf/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/Xnj//2KJH/+nJl//8+vj//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/v//9urZ/92uYP/XnT//155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + P//Yokf/5L6B//ft3v/8/Pr//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//r17f/nxpH/2qVN/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/VnED/u4k4wIJfKBgbGAABop0GAId4 + DwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC+dEsAvWpTAXdSJgXSmj972Z9B/Nie + QP7XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeP//Yokf/6cmX//z6 + +P/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//3+///26tn/3a5g/9edP//XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/YoEX/5cGF//br2f/9/fz//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//jw4//mxIz/2KJH/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/2J5B/s+YPv2xgjWDWz0cB6pgSQGkZEEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAO+CbgD+iXYA//+JAMuUPTvYnkHf2J9B/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/154//9iiR//pyZf//Pr4//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f7///bq2f/drmD/150//9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/YoET/4bh1//Xo1P/8+/n//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//ny6P/lwof/2aNJ/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/xZA746J3MUH//4YA8oJxAd55 + ZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJMKACQVDgBtIM3Etad + QKvZn0H/155A/teeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/Xnj//2KFH/+nJ + l//8+vf//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/v//9urZ/92uYP/XnT//155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/YoET/4rp5//Tn + 0P/9/Pv//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//bs3P/kvX//2KBE/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/2J5A/tObP/+6iDiwiGMrFZpcOQFrRyYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAnVxAALlxSAEAABMB0po/XtmfQfTYnkH/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + Qf/Xn0L/159C/9efQv/Xn0L/159C/9efQv/Zo0n/6cqY//z6+P/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//3+///26tn/3a5g/9edP//XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/Xn0L/37Jn//Lgxf/8+vf//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//fu + 4P/kvX7/2KFG/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/YnkH+y5U99q6ANGUGABcCn2E+AY1T + OgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACyiycAyJ0rAB4k + AAHDjzse155BydmfQf/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/2qZQ/+K5dv/kvoH/5L6A/+S+gP/kvoD/5L6A/+XA + hf/v27r//Pv5//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f7///bq2f/drmD/150//9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/Yn0L/4LNr//LgxP/8+/n//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//fz7//Tn0v/iuXb/2J9D/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9WdQP/AjTrNmXEuITk1AAGphSUAm3kiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADKfU4AynRVAaNvNQPUmz922Z9B+tifQP7XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + P//gtGz/9OjU//r38P/69u//+vbv//r27//69u//+vbw//v59f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/v//9urZ/92uYP/XnT//155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/Xn0H/3a5g/+/auP/8+fT//f3+//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//fz8//Xo1P/iuHT/2KBE/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/Yn0D+zpc9+7OENn10UCYFv25PAbRw + RQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP+B + gwD/i5AA//91AMuWPSzYnkHS2Z9B/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/150//+C2b//37uD//f7+//39/v/9/f7//f3+//39 + /v/9/f7//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//3+///26tn/3a5g/9ed + P//XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/Xn0H/3a9h/+/Ztv/7+fX//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//Pv6//LiyP/fs2v/159B/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9adQP/EkDrWo3gxMf//ZAC2Wl0AqlVWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJZaPQDLZWYBjmcpBdWcP37Zn0H62J9A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnT//4LZv//fu3//9/f7//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f7///bq2f/drmD/150//9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/3KtZ/+3U + rf/69/D//f3+//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//Pv5//Lhxv/fsmj/159C/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/YnkD/z5g++7eGNoRoSx4GolBQAX9L + MwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAwXFRANB5VwBGAEQBzZc+KNieQdLZn0H/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9edP//gtm//9+7f//39/v/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/v//9urZ/92u + YP/XnT//155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/3KpZ/+zSqf/69vD//f3+//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//Pr3//Dd + vf/er2P/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9adQP/FkDvVpnozLFoORQG3a00ArGRJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/mswA87wPAP/AWgDCjzUD1p1Ac9mf + QfjYn0D+155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/150//+C2b//37t///f3+//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//3+///26tn/3a5g/9edP//XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/26hT/+rPov/69Oz//f3+//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f7//Pr2/+/bu//drV//155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/Xn0D+z5g++bmIN3mMaSUE/+FqAPSv + DgD/v/0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD//wAA//8AAP/+agDTmkEf2J5Bv9mfQf/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnT//4LZv//fu4P/9/v7//f3+//39 + /v/9/f7//f3+//39/v/9/f7//f3+//39/v/9/f7//f3+//39/v/9/f7//f3+//39/v/9/f7//v7///br + 2f/drmD/150//9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/26hU/+rMnf/59Or//f3+//39 + /v/9/f7//f3+//39/v/9/f7//f3+//39/v/9/f7//f3+//39/v/9/f7//f3+//39/v/9/f7//f3+//39 + /v/9/f7/+/n1/+7Xs//drFz/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9WdQP/EkDvDrH00Iv//dwD//wAA//8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADGdVEA1YJTAF4h + PQHVnEBW2Z9B7difQf7XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeP//gtW3/9erY//z59v/8+fX//Pn1//z59f/8+fX//Pn1//z59f/8+fX//Pn1//z5 + 9f/8+fX//Pn1//z59f/8+fX//Pn1//z59f/8+vf/9OfS/92tX//XnT//155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/2qVP/+nJlv/37+H//Pn1//z59f/8+fX//Pn1//z59f/8+fX//Pn1//z5 + 9f/8+fX//Pn1//z59f/8+fX//Pn1//z59f/8+fX//Pn1//z59f/8+fX/+fPq/+zSqP/bp1P/154//9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD+zZY97riHN1pbJTECtm9HAbBo + SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP+sVQD/3nIAwXpDAceROw3XnkGd2Z9B/tifQP7XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9upV//mxYz/6syb/+rM + m//qzJv/6syb/+rMm//qzJv/6syb/+rMm//qzJv/6syb/+rMm//qzJv/6syb/+rMm//qzJv/6syb/+rM + nP/mw4n/2qZP/9eeP//XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/Xnj//2qVO/+O9 + f//pzJr/6syb/+rMm//qzJv/6syb/+rMm//qzJv/6syb/+rMm//qzJv/6syb/+rMm//qzJv/6syb/+rM + m//qzJv/6syb/+rMm//qzJv/58WO/9yrW//Xnj//155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/tObP//CjjqhnnIvD7RzPgHLh0UAwIFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOfK + HgDu0xsA5aVJANKZPy7YnkHO2Z9B/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155B/9igQ//YoET/2KBD/9igQ//YoEP/2KBD/9igQ//YoEP/2KBD/9ig + Q//YoEP/2KBD/9igQ//YoEP/2KBD/9igQ//YoEP/2KBE/9ifQ//XnkH/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/159C/9igQ//YoEP/2KBD/9igQ//YoEP/2KBD/9ig + Q//YoEP/2KBD/9igQ//YoEP/2KBD/9igQ//YoEP/2KBD/9igQ//YoEP/2KBD/9igRP/YoET/159C/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/WnkD/yZM80bKCNjHVmkcA9tkcAOfK + HgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMaSNADwpkgBpXwvA9acP2HZn0Hy2J9B/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/2J5B/8+YPvO9iThliGQpBMuNPQG8ijEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA6s8bAOXPFgD//wAAzZc8C9edQJPZn0H62J9B/teeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9efQP7Tmz/7xJA7l6h9MQz//wAA5ccWAOrP + GwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/6pWAP+wWQD//0MA0Jg/JNif + Qb/Zn0H/2J5A/teeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/YnkD+1p1A/8qUPcG0hDcn//9RAP+0WwD/qlYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAwIs2AMaKPABOQBEB151AP9mfQdrZn0H/2J5A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQf/Plz7cwIw5QlxRGwHWlEAAyJE4AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//wAA//8AAP+7 + dgDXik8B151BW9mfQejZn0H/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/Yn0D/0Zo/6cSPO16dYz0C/+KKAP//AAD//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/gIAA/3yEAP+6egDVmj8H2J5Ac9mfQfHYn0H+155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/tSbP/LJkjx2sYA1CP/ikQD/fIQA/4CAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADAgEAAxIVAAKJbQAHOlj4O2J5AitmfQfbYn0H+155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9if + QP7VnD/3ypQ9jbKAOA++bkkBwoRAAMGBQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC/gEAAxYRCAP///wDOmD4U2J9Bldmf + QfrYn0H+155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/Yn0H+155A+82XPZi3hzgW//9PAMeGQwC/gEAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADSpiwA0qoqAMabGQDUmj8Z2J5BntmfQfrYn0H+155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/2J9A/tee + QPrRmT6gwo07GvrDIgDUrCoA1qktAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//AAD/4CcA/+seAMN8 + TwDZnkEY2Z9BltmfQffYn0H+155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9ieQP7XnkD30po/mMiTPBm6dUkA/+0eAP/gJwD//wAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/3SsA//YVAPHUHgDVm0EU2Z5Bi9mfQfLZn0H/2J5A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/Yn0D/2J5A8tOa + P4zGkD0V//8qAP/4FQD/4iwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + AAB+AIEAyZQ3AP//SADUmkAO2Z9BdNmfQejZn0H/2J5A/teeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD+2J5B/9edQOnTmj91xo88D///KgDKlTcAfgCBAP//AAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC6ekAAv4FAAJ5YPwHJlj4G2Z5BXNmf + QdvZn0H/2J9B/teeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/159A/tifQf/YnkHb1Js/XbiI + NwepYUMBwoNAAL19QQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAC/gEAAv4BAALdxQQHXnEED2J9BQNmfQcHZn0H72J9B/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9ifQf/Zn0H72J9BwdSdQEHPlz0DvXVEAb+AQAC/gEAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/qlUA/6pVAP+t + WQDBjC4A2Z5BJdmfQZTZn0Hy2Z9B/9ifQP7XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP7Yn0H/2Z9B8tmfQZTXnUAlqHoqAP+v + WQD/q1UA/6tVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//wAA//8AAOCaRQAIAEwA155AC9ieQWLZn0HQ2Z9B/dif + Qf7XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/Yn0H+2Z9B/dmfQdDYnkFi155ACwoAUwDinEUA//8AAP//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA/6tWAP+sVgD/k2MAx4tCA9ieQS/YnkGg2Z9B7tmfQf/Yn0D+155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD+2J9B/9mfQe7YnkGg2J5BL8eLQgP/k2MA/6xWAP+r + VgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAypc1APXnDwC4eD4Bn1w2ANab + Qg/Zn0FZ2Z9BxNmfQfjZn0H/2J5B/teeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD+2J9B/9mf + QfjZn0HE2Z9BWdabQg+fXDYAuHg+AfXnDwDKlzUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMaVMQDjzRMAxopOAeGlUAHZoEEh2J5Bd9mfQdXZn0H72Z9B/9if + QP7XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD+2J9B/9mfQfvZn0HV2Z9BdtmgQSHhpVABxopOAePNEwDGlTEAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP+q + VQD/q1gA7dAbAYdJLQDbnUUE2J9CKtmfQYLZn0HV2Z9B+tmfQf/Yn0D/155A/teeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP7YnkD/2J9B/9ifQfrZn0HV2Z9Bg9if + QirgoEYEh0ktAO3QGwH/q1gA/6pVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/f4EA/3+BAP+fcgEMAIwA1pxIBNme + Qi7Zn0F72Z9BztmfQffZn0H/2J9B/tieQP7XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ie + QP7Yn0D+2J9B/9mfQffZn0HO2Z9Be9qfQi7ZlkMFAgCRAP+ecgH/f4EA/3+BAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD/gIAA/4CqANp/XADzpFQB/9emAN6gQQTZn0Ae2Z9CY9mfQbDZn0Hj2Z9B/dif + Qf/YnkH/2J5A/9eeQP7XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD+2J5A/9ieQf/Yn0H/2Z9B/dmfQePZn0Gw2Z9CY9mfQB7eoEEE/+ezAPOm + VQHaf1wA/4CqAP+AgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP9+ + hAD/foQA/6BzAY5EQwC6cUYB2Z9DEtmfQT7Zn0GB2Z9Bv9mfQezZn0H62Z9B/9ifQf/Yn0H+155A/tee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee + QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP7YnkD+2J5B/9ifQf/Zn0H62Z9B7Nmf + Qb/Zn0GB2Z9BPtmfQxK6cUYBjkRDAP+gcwH/foQA/36EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//AAD//wAA0KMtAN+pPwD/uGIAAAAAAOGi + SATbnkMV2aBBQtmfQXnZn0Gx2Z9B1tmfQfDZn0H+2Z9B/9mfQf/YnkH/2J5A/9eeQP/YnkD+155A/tee + QP7XnkD+155A/teeQP7XnkD+155A/teeQP7XnkD+155A/teeQP7XnkD+155A/teeQP/XnkD/2J5B/9if + Qf/Zn0H/2Z9B/tmfQfDZn0HW2Z9BsdmfQXnZoEFC255DFeGiSAQAAAAA/7hiAN+pPwDQoy0A//8AAP// + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP+ZbAD/iHsA/6BoAbohkgCBMUIA3aFBAdmeQBHYnkEt2Z9AUtqf + QX/Zn0Gm2Z9ByNmfQePZn0Hx2Z9B9tmfQfrZn0H+2Z9B/9ieQf/YnkH/2J5B/9ieQf/YnkH/2J5B/9ie + Qf/YnkH/2Z9B/9mfQf7Zn0H62Z9B9tmfQfHZn0Hj2Z9ByNmfQabZn0F+2Z9AUtieQS3ZnkAR3aFBAYEx + QgC6IZIA/6BoAf+IewD/mWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADSgFMA635uANaMSgD/jXgB7qBwAQAAIAD//2kA46NHBNueRAvYn0MW2Z9CLtmfQEnZn0Fj2Z9Bedie + QYzZn0Ge2Z9BrNmfQbbZn0G82Z9Bv9mfQb/Zn0G82Z9BttmfQazZn0Ge2J5BjNmfQXnZn0Fj2Z9ASdmf + Qi7Yn0MW255EC+GkSgP///8AAAAbAO6gcAH/jXgB1oxKAOt+bgDSgFMAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/p1oA/94hAP+Z + awH/rGAB/2SnAP/B6gC9f2oAqngnAcCcGgDRpzoA0ao7AdudPwfZnD8M2KBBEdmgQxTaoEIX2qBCF9mg + QxTYoEER2Zw/DNudPwfRqjsB0ac6AMCcGgCqeCcBvX9qAP/B6gD/Y6YA/6xgAf+ZagH/3iEA/6daAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//AAD//wAA/6NgAOOUUADLkzkB951ZAP/P + MQD/mW4B9qlcAbJxQwGhWz8Bj0U8AX0yOgF9MjoBj0U8AaFbPwGycUMB9qlcAf+ZbgH/zzEA951ZAMuT + OQHjlFAA/6NgAP//AAD//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA////////4AAAB///////////////+AAAAAAf/////////////+AAAAAA + B/////////////8AAAAAAAD////////////8AAAAAAAAP///////////4AAAAAAAAAf//////////8AA + AAAAAAAD//////////8AAAAAAAAAAP/////////+AAAAAAAAAAB/////////+AAAAAAAAAAAH/////// + //AAAAAAAAAAAA/////////AAAAAAAAAAAAD////////wAAAAAAAAAAAA////////wAAAAAAAAAAAAD/ + //////4AAAAAAAAAAAAAf//////8AAAAAAAAAAAAAD//////+AAAAAAAAAAAAAAf//////AAAAAAAAAA + AAAAD//////gAAAAAAAAAAAAAAf/////wAAAAAAAAAAAAAAD/////4AAAAAAAAAAAAAAAf////8AAAAA + AAAAAAAAAAD////+AAAAAAAAAAAAAAAAf////AAAAAAAAAAAAAAAAD////gAAAAAAAAAAAAAAAAf///4 + AAAAAAAAAAAAAAAAH///8AAAAAAAAAAAAAAAAA////AAAAAAAAAAAAAAAAAP///gAAAAAAAAAAAAAAAA + B///wAAAAAAAAAAAAAAAAAP//8AAAAAAAAAAAAAAAAAD//+AAAAAAAAAAAAAAAAAAf//gAAAAAAAAAAA + AAAAAAH//wAAAAAAAAAAAAAAAAAA//8AAAAAAAAAAAAAAAAAAH/+AAAAAAAAAAAAAAAAAAB//gAAAAAA + AAAAAAAAAAAAf/wAAAAAAAAAAAAAAAAAAD/8AAAAAAAAAAAAAAAAAAA//AAAAAAAAAAAAAAAAAAAP/gA + AAAAAAAAAAAAAAAAAB/4AAAAAAAAAAAAAAAAAAAf+AAAAAAAAAAAAAAAAAAAH/gAAAAAAAAAAAAAAAAA + AB/wAAAAAAAAAAAAAAAAAAAP8AAAAAAAAAAAAAAAAAAAD+AAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAA + AAAAAAAH4AAAAAAAAAAAAAAAAAAAB+AAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAH4AAAAAAA + AAAAAAAAAAAAB+AAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAHwAAAAAAAAAAAAAAAAAAAA8AA + AAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAA + AAPAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAA + AAAAAAADwAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAADwAAAAAAA + AAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAPgAAAAAAAAAAAAAAAAAAAH4AAAAAAAAAAAAAAAAAAAB+AA + AAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAH4AAAAAAAAAAAAAAAAAAAB+AAAAAAAAAAAAAAAAAA + AAfgAAAAAAAAAAAAAAAAAAAH4AAAAAAAAAAAAAAAAAAAB/AAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAA + AAAAAAAP8AAAAAAAAAAAAAAAAAAAD/gAAAAAAAAAAAAAAAAAAB/4AAAAAAAAAAAAAAAAAAAf+AAAAAAA + AAAAAAAAAAAAH/gAAAAAAAAAAAAAAAAAAB/8AAAAAAAAAAAAAAAAAAA//QAAAAAAAAAAAAAAAAAAv/4A + AAAAAAAAAAAAAAAAAH/+AAAAAAAAAAAAAAAAAAB//gAAAAAAAAAAAAAAAAAAf/8AAAAAAAAAAAAAAAAA + AP//QAAAAAAAAAAAAAAAAAL//4AAAAAAAAAAAAAAAAAB//+AAAAAAAAAAAAAAAAAAf//wAAAAAAAAAAA + AAAAAAP//9AAAAAAAAAAAAAAAAAL///gAAAAAAAAAAAAAAAAB///4AAAAAAAAAAAAAAAAAf///QAAAAA + AAAAAAAAAAAv///4AAAAAAAAAAAAAAAAH///+AAAAAAAAAAAAAAAAB////0AAAAAAAAAAAAAAAC////+ + AAAAAAAAAAAAAAAAf////gAAAAAAAAAAAAAAAH////8AAAAAAAAAAAAAAAD/////gAAAAAAAAAAAAAAB + /////9AAAAAAAAAAAAAAC//////gAAAAAAAAAAAAAAf/////9AAAAAAAAAAAAAAv//////gAAAAAAAAA + AAAAH//////9AAAAAAAAAAAAAL///////gAAAAAAAAAAAAB///////8AAAAAAAAAAAAA////////gAAA + AAAAAAAAAf///////8AAAAAAAAAAAAP////////wAAAAAAAAAAAP////////+AAAAAAAAAAAH/////// + //4AAAAAAAAAAH//////////AAAAAAAAAAD//////////8AAAAAAAAAD///////////gAAAAAAAAB/// + /////////AAAAAAAAD////////////4QAAAAAAh/////////////4AAAAAAH//////////////gAAAAA + H///////////////gEACAf////////////////AAAA////////////////////////////////////// + //////////////////////////////////8= + + + \ No newline at end of file diff --git a/v2rayN/v2rayN/Forms/MainForm.Designer.cs b/v2rayN/v2rayN/Forms/MainForm.Designer.cs index a3c67a98..86a73954 100644 --- a/v2rayN/v2rayN/Forms/MainForm.Designer.cs +++ b/v2rayN/v2rayN/Forms/MainForm.Designer.cs @@ -37,6 +37,7 @@ this.menuAddVlessServer = new System.Windows.Forms.ToolStripMenuItem(); this.menuAddShadowsocksServer = new System.Windows.Forms.ToolStripMenuItem(); this.menuAddSocksServer = new System.Windows.Forms.ToolStripMenuItem(); + this.menuAddTrojanServer = new System.Windows.Forms.ToolStripMenuItem(); this.menuAddCustomServer = new System.Windows.Forms.ToolStripMenuItem(); this.menuAddServers = new System.Windows.Forms.ToolStripMenuItem(); this.menuScanScreen = new System.Windows.Forms.ToolStripMenuItem(); @@ -62,8 +63,8 @@ this.menuExport2ServerConfig = new System.Windows.Forms.ToolStripMenuItem(); this.menuExport2ShareUrl = new System.Windows.Forms.ToolStripMenuItem(); this.menuExport2SubContent = new System.Windows.Forms.ToolStripMenuItem(); - this.tsbServer = new System.Windows.Forms.ToolStripDropDownButton(); this.qrCodeControl = new v2rayN.Forms.QRCodeControl(); + this.tsbServer = new System.Windows.Forms.ToolStripDropDownButton(); this.notifyMain = new System.Windows.Forms.NotifyIcon(this.components); this.cmsMain = new System.Windows.Forms.ContextMenuStrip(this.components); this.menuSysAgentMode = new System.Windows.Forms.ToolStripMenuItem(); @@ -183,6 +184,7 @@ this.menuAddVlessServer, this.menuAddShadowsocksServer, this.menuAddSocksServer, + this.menuAddTrojanServer, this.menuAddCustomServer, this.menuAddServers, this.menuScanScreen, @@ -209,7 +211,6 @@ this.menuExport2ShareUrl, this.menuExport2SubContent}); this.cmsLv.Name = "cmsLv"; - this.cmsLv.OwnerItem = this.tsbServer; // // menuAddVmessServer // @@ -235,6 +236,12 @@ this.menuAddSocksServer.Name = "menuAddSocksServer"; this.menuAddSocksServer.Click += new System.EventHandler(this.menuAddSocksServer_Click); // + // menuAddTrojanServer + // + resources.ApplyResources(this.menuAddTrojanServer, "menuAddTrojanServer"); + this.menuAddTrojanServer.Name = "menuAddTrojanServer"; + this.menuAddTrojanServer.Click += new System.EventHandler(this.menuAddTrojanServer_Click); + // // menuAddCustomServer // resources.ApplyResources(this.menuAddCustomServer, "menuAddCustomServer"); @@ -381,6 +388,11 @@ this.menuExport2SubContent.Name = "menuExport2SubContent"; this.menuExport2SubContent.Click += new System.EventHandler(this.menuExport2SubContent_Click); // + // qrCodeControl + // + resources.ApplyResources(this.qrCodeControl, "qrCodeControl"); + this.qrCodeControl.Name = "qrCodeControl"; + // // tsbServer // resources.ApplyResources(this.tsbServer, "tsbServer"); @@ -388,11 +400,6 @@ this.tsbServer.Image = global::v2rayN.Properties.Resources.server; this.tsbServer.Name = "tsbServer"; // - // qrCodeControl - // - resources.ApplyResources(this.qrCodeControl, "qrCodeControl"); - this.qrCodeControl.Name = "qrCodeControl"; - // // notifyMain // resources.ApplyResources(this.notifyMain, "notifyMain"); @@ -947,6 +954,7 @@ private System.Windows.Forms.ToolStripButton tsbReload; private System.Windows.Forms.ToolStripButton tsbQRCodeSwitch; private System.Windows.Forms.ToolStripMenuItem menuAddVlessServer; + private System.Windows.Forms.ToolStripMenuItem menuAddTrojanServer; } } diff --git a/v2rayN/v2rayN/Forms/MainForm.cs b/v2rayN/v2rayN/Forms/MainForm.cs index bfbbc40f..7d041432 100644 --- a/v2rayN/v2rayN/Forms/MainForm.cs +++ b/v2rayN/v2rayN/Forms/MainForm.cs @@ -475,72 +475,42 @@ namespace v2rayN.Forms { return; } - - if (config.vmess[index].configType == (int)EConfigType.Vmess) + ShowServerForm(config.vmess[index].configType, index); + } + private void ShowServerForm(int configType, int index) + { + BaseServerForm fm; + switch (configType) { - AddServerForm fm = new AddServerForm - { - EditIndex = index - }; - if (fm.ShowDialog() == DialogResult.OK) - { - //刷新 - RefreshServers(); - LoadV2ray(); - } + case (int)EConfigType.Vmess: + fm = new AddServerForm(); + break; + case (int)EConfigType.Shadowsocks: + fm = new AddServer3Form(); + break; + case (int)EConfigType.Socks: + fm = new AddServer4Form(); + break; + case (int)EConfigType.VLESS: + fm = new AddServer5Form(); + break; + case (int)EConfigType.Trojan: + fm = new AddServer6Form(); + break; + default: + fm = new AddServer2Form(); + break; } - else if (config.vmess[index].configType == (int)EConfigType.Shadowsocks) + fm.EditIndex = index; + if (fm.ShowDialog() == DialogResult.OK) { - AddServer3Form fm = new AddServer3Form - { - EditIndex = index - }; - if (fm.ShowDialog() == DialogResult.OK) - { - RefreshServers(); - LoadV2ray(); - } - } - else if (config.vmess[index].configType == (int)EConfigType.Socks) - { - AddServer4Form fm = new AddServer4Form - { - EditIndex = index - }; - if (fm.ShowDialog() == DialogResult.OK) - { - RefreshServers(); - LoadV2ray(); - } - } - else if (config.vmess[index].configType == (int)EConfigType.VLESS) - { - AddServer5Form fm = new AddServer5Form - { - EditIndex = index - }; - if (fm.ShowDialog() == DialogResult.OK) - { - //刷新 - RefreshServers(); - LoadV2ray(); - } - } - else - { - AddServer2Form fm2 = new AddServer2Form - { - EditIndex = index - }; - if (fm2.ShowDialog() == DialogResult.OK) - { - //刷新 - RefreshServers(); - LoadV2ray(); - } + //刷新 + RefreshServers(); + LoadV2ray(); } } + private void lvServers_KeyDown(object sender, KeyEventArgs e) { if (e.Control) @@ -601,30 +571,12 @@ namespace v2rayN.Forms private void menuAddVmessServer_Click(object sender, EventArgs e) { - AddServerForm fm = new AddServerForm - { - EditIndex = -1 - }; - if (fm.ShowDialog() == DialogResult.OK) - { - //刷新 - RefreshServers(); - LoadV2ray(); - } + ShowServerForm((int)EConfigType.Vmess, -1); } private void menuAddVlessServer_Click(object sender, EventArgs e) { - var fm = new AddServer5Form - { - EditIndex = -1 - }; - if (fm.ShowDialog() == DialogResult.OK) - { - //刷新 - RefreshServers(); - LoadV2ray(); - } + ShowServerForm((int)EConfigType.VLESS, -1); } private void menuRemoveServer_Click(object sender, EventArgs e) @@ -906,31 +858,19 @@ namespace v2rayN.Forms private void menuAddShadowsocksServer_Click(object sender, EventArgs e) { - AddServer3Form fm = new AddServer3Form - { - EditIndex = -1 - }; - if (fm.ShowDialog() == DialogResult.OK) - { - //刷新 - RefreshServers(); - LoadV2ray(); - } + ShowServerForm((int)EConfigType.Shadowsocks, -1); ShowForm(); } private void menuAddSocksServer_Click(object sender, EventArgs e) { - AddServer4Form fm = new AddServer4Form - { - EditIndex = -1 - }; - if (fm.ShowDialog() == DialogResult.OK) - { - //刷新 - RefreshServers(); - LoadV2ray(); - } + ShowServerForm((int)EConfigType.Socks, -1); + ShowForm(); + } + + private void menuAddTrojanServer_Click(object sender, EventArgs e) + { + ShowServerForm((int)EConfigType.Trojan, -1); ShowForm(); } @@ -1629,6 +1569,7 @@ namespace v2rayN.Forms + #endregion diff --git a/v2rayN/v2rayN/Forms/MainForm.resx b/v2rayN/v2rayN/Forms/MainForm.resx index 128805e9..eb1e2e63 100644 --- a/v2rayN/v2rayN/Forms/MainForm.resx +++ b/v2rayN/v2rayN/Forms/MainForm.resx @@ -136,8 +136,8 @@ 97, 53 - - 355, 22 + + groupBox2 Add [VLESS] server @@ -151,6 +151,9 @@ Restart service + + 184, 6 + tsbSubSetting @@ -195,6 +198,9 @@ toolStripSeparator6 + + 355, 22 + 99, 53 @@ -306,9 +312,6 @@ System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 356, 578 - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -401,9 +404,6 @@ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - toolSslPacPortLab - 220, 17 @@ -419,8 +419,8 @@ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 411, 22 Move to bottom (B) @@ -527,9 +527,6 @@ 352, 6 - - tsbPromotion - 256, 331 @@ -593,17 +590,14 @@ ImageAboveText - - lvServers - 265, 164 - - 411, 22 + + 355, 22 - - menuUpdateSubscriptions + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 scMain @@ -680,8 +674,8 @@ 187, 22 - - tsbReload + + menuAddServers 355, 22 @@ -701,11 +695,14 @@ menuExport2ShareUrl + + tsMain + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - SOCKS5: + + tsbReload v2rayN (this software) @@ -743,6 +740,9 @@ toolSslBlank4 + + menuAddTrojanServer + 261, 6 @@ -752,23 +752,23 @@ Language-[English] + + menuSpeedServer + 264, 22 0 - - Fill - toolSslBlank3 128, 53 - - tsMain + + Add [Trojan] server System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -868,9 +868,6 @@ PAC: - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - Promotion @@ -880,8 +877,8 @@ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - ImageAboveText + + 0, 0 Export subscription (base64) share to clipboard @@ -901,6 +898,9 @@ menuServers + + menuUpdateSubscriptions + $this @@ -946,6 +946,9 @@ 0 + + Informations + toolStripSeparator8 @@ -1018,14 +1021,17 @@ menuExit + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + Servers list System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + lvServers menuRealPingServer @@ -1060,14 +1066,17 @@ Servers + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Select All (Ctrl+A) - - Informations + + ImageAboveText 3 @@ -1078,8 +1087,8 @@ tsbCheckUpdateCore - - menuSpeedServer + + SOCKS5: 33, 17 @@ -1192,8 +1201,8 @@ $this - - 0, 0 + + Fill qrCodeControl @@ -1216,8 +1225,8 @@ 微软雅黑, 8pt - - groupBox2 + + tsbPromotion ImageAboveText @@ -1231,8 +1240,8 @@ 393, 22 - - 184, 6 + + 356, 600 0, 0 @@ -1369,6 +1378,9 @@ System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + Magenta @@ -1378,8 +1390,8 @@ ImageAboveText - - menuAddServers + + toolSslPacPortLab System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 diff --git a/v2rayN/v2rayN/Forms/MainForm.zh-Hans.resx b/v2rayN/v2rayN/Forms/MainForm.zh-Hans.resx index cf481b01..83e8f530 100644 --- a/v2rayN/v2rayN/Forms/MainForm.zh-Hans.resx +++ b/v2rayN/v2rayN/Forms/MainForm.zh-Hans.resx @@ -142,6 +142,12 @@ 添加[Socks]服务器 + + 300, 22 + + + 添加[Trojan]服务器 + 300, 22 @@ -280,14 +286,8 @@ 批量导出订阅内容至剪贴板(多选) - - 73, 53 - - - 服务器 - - 301, 578 + 301, 600 @@ -306,6 +306,21 @@ ZW0uRHJhd2luZy5HcmFwaGljc1VuaXQBAAAAB3ZhbHVlX18ACAMAAAADAAAACw== + + 73, 53 + + + 服务器 + + + 196, 164 + + + 195, 22 + + + Http代理 + 316, 22 @@ -348,12 +363,6 @@ 仅开启PAC,不改变系统代理 - - 195, 22 - - - Http代理 - 195, 22 @@ -393,17 +402,20 @@ 退出 - - 196, 164 - 服务器列表 + + 信息 + 网速显示未启用 - - 信息 + + 61, 53 + + + 订阅 124, 22 @@ -417,12 +429,6 @@ 更新订阅 - - 61, 53 - - - 订阅 - 52, 53 @@ -452,6 +458,12 @@ 重启服务 + + 85, 53 + + + 检查更新 + 223, 22 @@ -479,11 +491,11 @@ 简化PAC (请设置Core路由) - - 85, 53 + + 69, 53 - - 检查更新 + + 帮助 v2rayN 项目 @@ -491,12 +503,6 @@ V2Ray 官网 - - 69, 53 - - - 帮助 - 68, 53 diff --git a/v2rayN/v2rayN/Global.cs b/v2rayN/v2rayN/Global.cs index bc7c5d8d..58bcc689 100644 --- a/v2rayN/v2rayN/Global.cs +++ b/v2rayN/v2rayN/Global.cs @@ -152,6 +152,14 @@ namespace v2rayN /// vless /// public const string vlessProtocolLite = "vless"; + /// + /// trojan + /// + public const string trojanProtocol = "trojan://"; + /// + /// trojan + /// + public const string trojanProtocolLite = "trojan"; /// /// pac diff --git a/v2rayN/v2rayN/Handler/ConfigHandler.cs b/v2rayN/v2rayN/Handler/ConfigHandler.cs index d8a1a7f0..8af1fcf0 100644 --- a/v2rayN/v2rayN/Handler/ConfigHandler.cs +++ b/v2rayN/v2rayN/Handler/ConfigHandler.cs @@ -423,6 +423,19 @@ namespace v2rayN.Handler url = Utils.Base64Encode(url); url = string.Format("{0}{1}{2}", Global.socksProtocol, url, remark); } + else if (vmessItem.configType == (int)EConfigType.Trojan) + { + string remark = string.Empty; + if (!Utils.IsNullOrEmpty(vmessItem.remarks)) + { + remark = "#" + WebUtility.UrlEncode(vmessItem.remarks); + } + url = string.Format("{0}@{1}:{2}", + vmessItem.id, + vmessItem.address, + vmessItem.port); + url = string.Format("{0}{1}{2}", Global.trojanProtocol, url, remark); + } else { } @@ -684,6 +697,50 @@ namespace v2rayN.Handler return 0; } + + /// + /// 添加服务器或编辑 + /// + /// + /// + /// + /// + public static int AddTrojanServer(ref Config config, VmessItem vmessItem, int index) + { + vmessItem.configVersion = 2; + vmessItem.configType = (int)EConfigType.Trojan; + + vmessItem.address = vmessItem.address.TrimEx(); + vmessItem.id = vmessItem.id.TrimEx(); + + vmessItem.streamSecurity = Global.StreamSecurity; + vmessItem.allowInsecure = "false"; + + if (index >= 0) + { + //修改 + config.vmess[index] = vmessItem; + if (config.index.Equals(index)) + { + Global.reloadV2ray = true; + } + } + else + { + //添加 + config.vmess.Add(vmessItem); + if (config.vmess.Count == 1) + { + config.index = 0; + Global.reloadV2ray = true; + } + } + + ToJsonFile(config); + + return 0; + } + /// /// 配置文件版本升级 /// @@ -808,6 +865,13 @@ namespace v2rayN.Handler countServers++; } } + else if (vmessItem.configType == (int)EConfigType.Trojan) + { + if (AddTrojanServer(ref config, vmessItem, -1) == 0) + { + countServers++; + } + } } return countServers; } diff --git a/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs b/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs index b40f13c3..fa7efae3 100644 --- a/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs +++ b/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs @@ -494,6 +494,37 @@ namespace v2rayN.Handler outbound.protocol = Global.vlessProtocolLite; outbound.settings.servers = null; } + else if (config.configType() == (int)EConfigType.Trojan) + { + ServersItem serversItem; + if (outbound.settings.servers.Count <= 0) + { + serversItem = new ServersItem(); + outbound.settings.servers.Add(serversItem); + } + else + { + serversItem = outbound.settings.servers[0]; + } + //远程服务器地址和端口 + serversItem.address = config.address(); + serversItem.port = config.port(); + serversItem.password = config.id(); + + serversItem.ota = false; + serversItem.level = 1; + + outbound.mux.enabled = false; + outbound.mux.concurrency = -1; + + + //远程服务器底层传输配置 + StreamSettings streamSettings = outbound.streamSettings; + boundStreamSettings(config, "out", ref streamSettings); + + outbound.protocol = Global.trojanProtocolLite; + outbound.settings.vnext = null; + } } catch { @@ -1395,6 +1426,48 @@ namespace v2rayN.Handler vmessItem.security = arr21[0]; vmessItem.id = arr21[1]; } + else if (result.StartsWith(Global.trojanProtocol)) + { + msg = UIRes.I18N("ConfigurationFormatIncorrect"); + + vmessItem.configType = (int)EConfigType.Trojan; + result = result.Substring(Global.trojanProtocol.Length); + //remark + int indexRemark = result.IndexOf("#"); + if (indexRemark > 0) + { + try + { + vmessItem.remarks = WebUtility.UrlDecode(result.Substring(indexRemark + 1, result.Length - indexRemark - 1)); + } + catch { } + result = result.Substring(0, indexRemark); + } + //part decode + int indexS = result.IndexOf("@"); + if (indexS > 0) + { + } + else + { + result = Utils.Base64Decode(result); + } + + string[] arr1 = result.Split('@'); + if (arr1.Length != 2) + { + return null; + } + int indexPort = arr1[1].LastIndexOf(":"); + if (indexPort < 0) + { + return null; + } + vmessItem.address = arr1[1].Substring(0, indexPort); + vmessItem.port = Utils.ToInt(arr1[1].Substring(indexPort + 1, arr1[1].Length - (indexPort + 1))); + + vmessItem.id = arr1[0]; + } else { msg = UIRes.I18N("NonvmessOrssProtocol"); diff --git a/v2rayN/v2rayN/Mode/Config.cs b/v2rayN/v2rayN/Mode/Config.cs index eac745fd..3d015b26 100644 --- a/v2rayN/v2rayN/Mode/Config.cs +++ b/v2rayN/v2rayN/Mode/Config.cs @@ -418,25 +418,26 @@ namespace v2rayN.Mode { addr = address; } - if (configType == (int)EConfigType.Vmess) + switch (configType) { - summary += string.Format("{0}({1}:{2})", remarks, addr, port); - } - else if (configType == (int)EConfigType.Shadowsocks) - { - summary += string.Format("{0}({1}:{2})", remarks, addr, port); - } - else if (configType == (int)EConfigType.Socks) - { - summary += string.Format("{0}({1}:{2})", remarks, addr, port); - } - else if (configType == (int)EConfigType.VLESS) - { - summary += string.Format("{0}({1}:{2})", remarks, addr, port); - } - else - { - summary += string.Format("{0}", remarks); + case (int)EConfigType.Vmess: + summary += string.Format("{0}({1}:{2})", remarks, addr, port); + break; + case (int)EConfigType.Shadowsocks: + summary += string.Format("{0}({1}:{2})", remarks, addr, port); + break; + case (int)EConfigType.Socks: + summary += string.Format("{0}({1}:{2})", remarks, addr, port); + break; + case (int)EConfigType.VLESS: + summary += string.Format("{0}({1}:{2})", remarks, addr, port); + break; + case (int)EConfigType.Trojan: + summary += string.Format("{0}({1}:{2})", remarks, addr, port); + break; + default: + summary += string.Format("{0}", remarks); + break; } return summary; } @@ -597,7 +598,7 @@ namespace v2rayN.Mode public string flow { get; set; - } + } } [Serializable] diff --git a/v2rayN/v2rayN/Mode/EConfigType.cs b/v2rayN/v2rayN/Mode/EConfigType.cs index 13381ea5..e1adc53c 100644 --- a/v2rayN/v2rayN/Mode/EConfigType.cs +++ b/v2rayN/v2rayN/Mode/EConfigType.cs @@ -7,6 +7,7 @@ namespace v2rayN.Mode Custom = 2, Shadowsocks = 3, Socks = 4, - VLESS = 5 + VLESS = 5, + Trojan = 6 } } diff --git a/v2rayN/v2rayN/Properties/AssemblyInfo.cs b/v2rayN/v2rayN/Properties/AssemblyInfo.cs index 275106c7..e893f28e 100644 --- a/v2rayN/v2rayN/Properties/AssemblyInfo.cs +++ b/v2rayN/v2rayN/Properties/AssemblyInfo.cs @@ -32,4 +32,4 @@ using System.Runtime.InteropServices; // 方法是按如下所示使用“*”: //[assembly: AssemblyVersion("1.0.*")] //[assembly: AssemblyVersion("1.0.0")] -[assembly: AssemblyFileVersion("3.24")] +[assembly: AssemblyFileVersion("3.25")] diff --git a/v2rayN/v2rayN/v2rayN.csproj b/v2rayN/v2rayN/v2rayN.csproj index 8a004c44..d1f912ba 100644 --- a/v2rayN/v2rayN/v2rayN.csproj +++ b/v2rayN/v2rayN/v2rayN.csproj @@ -98,6 +98,12 @@ + + Form + + + AddServer6Form.cs + Form @@ -113,6 +119,12 @@ AddServer5Form.cs + + Form + + + BaseServerForm.cs + Form @@ -225,6 +237,14 @@ AddServer2Form.cs Designer + + AddServer6Form.cs + Designer + + + AddServer6Form.cs + Designer + AddServer4Form.cs Designer @@ -249,6 +269,9 @@ AddServerForm.cs Designer + + BaseServerForm.cs + MainForm.cs Designer From b20c90acf0f1ee2b7b69d413f7fd4a8dd758f959 Mon Sep 17 00:00:00 2001 From: 2dust <31833384+2dust@users.noreply.github.com> Date: Wed, 7 Oct 2020 20:00:37 +0800 Subject: [PATCH 23/54] Update V2rayConfigHandler.cs --- v2rayN/v2rayN/Handler/V2rayConfigHandler.cs | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs b/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs index fa7efae3..078a3fbc 100644 --- a/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs +++ b/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs @@ -470,6 +470,15 @@ namespace v2rayN.Handler usersItem.flow = string.Empty; usersItem.email = Global.userEMail; usersItem.encryption = config.security(); + + //Mux + outbound.mux.enabled = config.muxEnabled; + outbound.mux.concurrency = config.muxEnabled ? 8 : -1; + + //远程服务器底层传输配置 + StreamSettings streamSettings = outbound.streamSettings; + boundStreamSettings(config, "out", ref streamSettings); + //if xtls if (config.streamSecurity() == Global.StreamSecurityX) { @@ -481,16 +490,11 @@ namespace v2rayN.Handler { usersItem.flow = config.flow(); } + + outbound.mux.enabled = false; + outbound.mux.concurrency = -1; } - //Mux - outbound.mux.enabled = config.muxEnabled; - outbound.mux.concurrency = config.muxEnabled ? 8 : -1; - - //远程服务器底层传输配置 - StreamSettings streamSettings = outbound.streamSettings; - boundStreamSettings(config, "out", ref streamSettings); - outbound.protocol = Global.vlessProtocolLite; outbound.settings.servers = null; } From 1675c67ddd2fd5a5abe16c9ace931485e65df089 Mon Sep 17 00:00:00 2001 From: Beta Soft Date: Fri, 9 Oct 2020 20:10:51 +0800 Subject: [PATCH 24/54] Config.cs: getSummary: adjust server summary Signed-off-by: Beta Soft --- v2rayN/v2rayN/Mode/Config.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/v2rayN/v2rayN/Mode/Config.cs b/v2rayN/v2rayN/Mode/Config.cs index 3d015b26..fb737942 100644 --- a/v2rayN/v2rayN/Mode/Config.cs +++ b/v2rayN/v2rayN/Mode/Config.cs @@ -403,7 +403,7 @@ namespace v2rayN.Mode public string getSummary() { - string summary = string.Format("{0}-", ((EConfigType)configType).ToString()); + string summary = string.Format("[{0}] ", ((EConfigType)configType).ToString()); string[] arrAddr = address.Split('.'); string addr; if (arrAddr.Length > 2) From 3697de973c83e3abe1e08df402a361872980fecb Mon Sep 17 00:00:00 2001 From: 2dust <31833384+2dust@users.noreply.github.com> Date: Fri, 9 Oct 2020 20:35:08 +0800 Subject: [PATCH 25/54] up --- .../v2rayN/Forms/AddServer5Form.Designer.cs | 5 +- v2rayN/v2rayN/Forms/AddServer5Form.resx | 1058 ++++++----------- v2rayN/v2rayN/Global.cs | 2 +- v2rayN/v2rayN/Handler/ConfigHandler.cs | 2 +- v2rayN/v2rayN/Properties/AssemblyInfo.cs | 2 +- 5 files changed, 400 insertions(+), 669 deletions(-) diff --git a/v2rayN/v2rayN/Forms/AddServer5Form.Designer.cs b/v2rayN/v2rayN/Forms/AddServer5Form.Designer.cs index a0dd68b8..423b7386 100644 --- a/v2rayN/v2rayN/Forms/AddServer5Form.Designer.cs +++ b/v2rayN/v2rayN/Forms/AddServer5Form.Designer.cs @@ -117,12 +117,13 @@ // // cmbFlow // - this.cmbFlow.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.cmbFlow.FormattingEnabled = true; this.cmbFlow.Items.AddRange(new object[] { resources.GetString("cmbFlow.Items"), resources.GetString("cmbFlow.Items1"), - resources.GetString("cmbFlow.Items2")}); + resources.GetString("cmbFlow.Items2"), + resources.GetString("cmbFlow.Items3"), + resources.GetString("cmbFlow.Items4")}); resources.ApplyResources(this.cmbFlow, "cmbFlow"); this.cmbFlow.Name = "cmbFlow"; // diff --git a/v2rayN/v2rayN/Forms/AddServer5Form.resx b/v2rayN/v2rayN/Forms/AddServer5Form.resx index 2502f924..e4c57a41 100644 --- a/v2rayN/v2rayN/Forms/AddServer5Form.resx +++ b/v2rayN/v2rayN/Forms/AddServer5Form.resx @@ -152,6 +152,12 @@ xtls-rprx-origin-udp443 + + xtls-rprx-direct + + + xtls-rprx-direct-udp443 + 127, 123 @@ -255,573 +261,6 @@ 3 - - label24 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 0 - - - label23 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 1 - - - panTlsMore - - - System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 2 - - - label9 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 3 - - - label20 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 4 - - - txtPath - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 5 - - - cmbNetwork - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 6 - - - label7 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 7 - - - label19 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 8 - - - label18 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 9 - - - label17 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 10 - - - label16 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 11 - - - label14 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 12 - - - label15 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 13 - - - cmbStreamSecurity - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 14 - - - label12 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 15 - - - txtRequestHost - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 16 - - - label11 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 17 - - - label10 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 18 - - - cmbHeaderType - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 19 - - - Bottom - - - 3, 215 - - - 723, 281 - - - 21 - - - Transport - - - groupBox2 - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 4 - - - True - - - NoControl - - - 353, 157 - - - 119, 12 - - - 14 - - - *Recommended (none) - - - label8 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 5 - - - none - - - 127, 154 - - - 211, 20 - - - 6 - - - cmbSecurity - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 6 - - - 127, 185 - - - 211, 21 - - - 11 - - - txtRemarks - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 7 - - - True - - - 12, 189 - - - 95, 12 - - - 10 - - - Alias (remarks) - - - label6 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 8 - - - True - - - 12, 158 - - - 65, 12 - - - 8 - - - Encryption - - - label5 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 9 - - - 127, 91 - - - 278, 21 - - - 5 - - - txtId - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 10 - - - True - - - 12, 95 - - - 53, 12 - - - 4 - - - UUID(id) - - - label3 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 11 - - - 127, 59 - - - 143, 21 - - - 3 - - - txtPort - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 12 - - - True - - - 12, 63 - - - 29, 12 - - - 2 - - - Port - - - label2 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 13 - - - 127, 27 - - - 359, 21 - - - 1 - - - txtAddress - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 14 - - - True - - - 12, 31 - - - 47, 12 - - - 0 - - - Address - - - label1 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 15 - - - Fill - - - 0, 35 - - - 729, 499 - - - 3 - - - Server - - - groupBox1 - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 0 - True @@ -882,51 +321,6 @@ 1 - - label21 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - panTlsMore - - - 0 - - - cmbAllowInsecure - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - panTlsMore - - - 1 - - - 284, 232 - - - 338, 35 - - - 33 - - - panTlsMore - - - System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 2 - True @@ -987,6 +381,27 @@ 1 + + 284, 232 + + + 338, 35 + + + 33 + + + panTlsMore + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 2 + True @@ -1467,6 +882,345 @@ 19 + + Bottom + + + 3, 215 + + + 723, 281 + + + 21 + + + Transport + + + groupBox2 + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 4 + + + True + + + NoControl + + + 353, 157 + + + 119, 12 + + + 14 + + + *Recommended (none) + + + label8 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 5 + + + none + + + 127, 154 + + + 211, 20 + + + 6 + + + cmbSecurity + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 6 + + + 127, 185 + + + 211, 21 + + + 11 + + + txtRemarks + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 7 + + + True + + + 12, 189 + + + 95, 12 + + + 10 + + + Alias (remarks) + + + label6 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 8 + + + True + + + 12, 158 + + + 65, 12 + + + 8 + + + Encryption + + + label5 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 9 + + + 127, 91 + + + 278, 21 + + + 5 + + + txtId + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 10 + + + True + + + 12, 95 + + + 53, 12 + + + 4 + + + UUID(id) + + + label3 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 11 + + + 127, 59 + + + 143, 21 + + + 3 + + + txtPort + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 12 + + + True + + + 12, 63 + + + 29, 12 + + + 2 + + + Port + + + label2 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 13 + + + 127, 27 + + + 359, 21 + + + 1 + + + txtAddress + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 14 + + + True + + + 12, 31 + + + 47, 12 + + + 0 + + + Address + + + label1 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 15 + + + Fill + + + 0, 35 + + + 729, 499 + + + 3 + + + Server + + + groupBox1 + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 0 + + + 303, 17 + + + 75, 23 + + + 5 + + + &OK + btnOK @@ -1503,30 +1257,6 @@ 1 - - 303, 17 - - - 75, 23 - - - 5 - - - &OK - - - btnOK - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - panel2 - - - 1 - Top @@ -1554,33 +1284,6 @@ 17, 17 - - 0, 0 - - - 729, 25 - - - 8 - - - menuServer - - - System.Windows.Forms.MenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 3 - - - 162, 21 - - - Import configuration file - 237, 22 @@ -1602,6 +1305,33 @@ Import URL from clipboard + + 162, 21 + + + Import configuration file + + + 0, 0 + + + 729, 25 + + + 8 + + + menuServer + + + System.Windows.Forms.MenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 3 + True @@ -1651,6 +1381,6 @@ AddServer5Form - v2rayN.Forms.BaseForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + v2rayN.Forms.BaseServerForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null \ No newline at end of file diff --git a/v2rayN/v2rayN/Global.cs b/v2rayN/v2rayN/Global.cs index 58bcc689..55eeea14 100644 --- a/v2rayN/v2rayN/Global.cs +++ b/v2rayN/v2rayN/Global.cs @@ -14,7 +14,7 @@ namespace v2rayN /// /// SpeedTestUrl /// - public const string SpeedTestUrl = @"http://speedtest-sgp1.digitalocean.com/10mb.test"; + public const string SpeedTestUrl = @"http://cachefly.cachefly.net/10mb.test"; public const string SpeedPingTestUrl = @"https://www.google.com/generate_204"; public const string AvailabilityTestUrl = @"https://www.google.com/generate_204"; diff --git a/v2rayN/v2rayN/Handler/ConfigHandler.cs b/v2rayN/v2rayN/Handler/ConfigHandler.cs index 8af1fcf0..59c0dcd7 100644 --- a/v2rayN/v2rayN/Handler/ConfigHandler.cs +++ b/v2rayN/v2rayN/Handler/ConfigHandler.cs @@ -40,7 +40,7 @@ namespace v2rayN.Handler vmess = new List(), //Mux - muxEnabled = true, + muxEnabled = false, ////默认监听端口 //config.pacPort = 8888; diff --git a/v2rayN/v2rayN/Properties/AssemblyInfo.cs b/v2rayN/v2rayN/Properties/AssemblyInfo.cs index e893f28e..fa240436 100644 --- a/v2rayN/v2rayN/Properties/AssemblyInfo.cs +++ b/v2rayN/v2rayN/Properties/AssemblyInfo.cs @@ -32,4 +32,4 @@ using System.Runtime.InteropServices; // 方法是按如下所示使用“*”: //[assembly: AssemblyVersion("1.0.*")] //[assembly: AssemblyVersion("1.0.0")] -[assembly: AssemblyFileVersion("3.25")] +[assembly: AssemblyFileVersion("3.26")] From 00982fd40b0f4ee2c3e481e6c614ecd8f2e393a9 Mon Sep 17 00:00:00 2001 From: 2dust <31833384+2dust@users.noreply.github.com> Date: Tue, 13 Oct 2020 20:32:20 +0800 Subject: [PATCH 26/54] Update V2rayConfigHandler.cs --- v2rayN/v2rayN/Handler/V2rayConfigHandler.cs | 43 ++++++--------------- 1 file changed, 11 insertions(+), 32 deletions(-) diff --git a/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs b/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs index 078a3fbc..9ca18e61 100644 --- a/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs +++ b/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs @@ -1435,42 +1435,21 @@ namespace v2rayN.Handler msg = UIRes.I18N("ConfigurationFormatIncorrect"); vmessItem.configType = (int)EConfigType.Trojan; - result = result.Substring(Global.trojanProtocol.Length); - //remark - int indexRemark = result.IndexOf("#"); - if (indexRemark > 0) - { - try - { - vmessItem.remarks = WebUtility.UrlDecode(result.Substring(indexRemark + 1, result.Length - indexRemark - 1)); - } - catch { } - result = result.Substring(0, indexRemark); - } - //part decode - int indexS = result.IndexOf("@"); - if (indexS > 0) + + Uri uri = new Uri(result); + vmessItem.address = uri.IdnHost; + vmessItem.port = uri.Port; + vmessItem.id = uri.UserInfo; + + var remarks = uri.Fragment.Replace("#", ""); + if (Utils.IsNullOrEmpty(remarks)) { + vmessItem.remarks = "NONE"; } else { - result = Utils.Base64Decode(result); - } - - string[] arr1 = result.Split('@'); - if (arr1.Length != 2) - { - return null; - } - int indexPort = arr1[1].LastIndexOf(":"); - if (indexPort < 0) - { - return null; - } - vmessItem.address = arr1[1].Substring(0, indexPort); - vmessItem.port = Utils.ToInt(arr1[1].Substring(indexPort + 1, arr1[1].Length - (indexPort + 1))); - - vmessItem.id = arr1[0]; + vmessItem.remarks = WebUtility.UrlDecode(remarks); + } } else { From 1663c7d819c069ff21a61f90c83f73401fd25e37 Mon Sep 17 00:00:00 2001 From: 2dust <31833384+2dust@users.noreply.github.com> Date: Sat, 24 Oct 2020 12:13:38 +0800 Subject: [PATCH 27/54] add trojan sni --- .../v2rayN/Forms/AddServer6Form.Designer.cs | 16 ++ v2rayN/v2rayN/Forms/AddServer6Form.cs | 4 + v2rayN/v2rayN/Forms/AddServer6Form.resx | 171 ++++++++++++------ .../v2rayN/Forms/AddServer6Form.zh-Hans.resx | 3 + v2rayN/v2rayN/Handler/ConfigHandler.cs | 7 +- v2rayN/v2rayN/Handler/V2rayConfigHandler.cs | 7 +- v2rayN/v2rayN/Properties/AssemblyInfo.cs | 2 +- 7 files changed, 146 insertions(+), 64 deletions(-) diff --git a/v2rayN/v2rayN/Forms/AddServer6Form.Designer.cs b/v2rayN/v2rayN/Forms/AddServer6Form.Designer.cs index eba21fc8..f14d46e4 100644 --- a/v2rayN/v2rayN/Forms/AddServer6Form.Designer.cs +++ b/v2rayN/v2rayN/Forms/AddServer6Form.Designer.cs @@ -31,6 +31,8 @@ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AddServer6Form)); this.btnClose = new System.Windows.Forms.Button(); this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.label4 = new System.Windows.Forms.Label(); + this.txtRequestHost = new System.Windows.Forms.TextBox(); this.label13 = new System.Windows.Forms.Label(); this.txtRemarks = new System.Windows.Forms.TextBox(); this.label6 = new System.Windows.Forms.Label(); @@ -58,6 +60,8 @@ // groupBox1 // resources.ApplyResources(this.groupBox1, "groupBox1"); + this.groupBox1.Controls.Add(this.label4); + this.groupBox1.Controls.Add(this.txtRequestHost); this.groupBox1.Controls.Add(this.label13); this.groupBox1.Controls.Add(this.txtRemarks); this.groupBox1.Controls.Add(this.label6); @@ -70,6 +74,16 @@ this.groupBox1.Name = "groupBox1"; this.groupBox1.TabStop = false; // + // label4 + // + resources.ApplyResources(this.label4, "label4"); + this.label4.Name = "label4"; + // + // txtRequestHost + // + resources.ApplyResources(this.txtRequestHost, "txtRequestHost"); + this.txtRequestHost.Name = "txtRequestHost"; + // // label13 // resources.ApplyResources(this.label13, "label13"); @@ -169,5 +183,7 @@ private System.Windows.Forms.Panel panel1; private System.Windows.Forms.Panel panel2; private System.Windows.Forms.Label label13; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.TextBox txtRequestHost; } } \ No newline at end of file diff --git a/v2rayN/v2rayN/Forms/AddServer6Form.cs b/v2rayN/v2rayN/Forms/AddServer6Form.cs index 37e3f565..6911714f 100644 --- a/v2rayN/v2rayN/Forms/AddServer6Form.cs +++ b/v2rayN/v2rayN/Forms/AddServer6Form.cs @@ -35,6 +35,7 @@ namespace v2rayN.Forms txtAddress.Text = vmessItem.address; txtPort.Text = vmessItem.port.ToString(); txtId.Text = vmessItem.id; + txtRequestHost.Text = vmessItem.requestHost; txtRemarks.Text = vmessItem.remarks; } @@ -47,6 +48,7 @@ namespace v2rayN.Forms txtAddress.Text = ""; txtPort.Text = ""; txtId.Text = ""; + txtRequestHost.Text = ""; txtRemarks.Text = ""; } @@ -55,6 +57,7 @@ namespace v2rayN.Forms string address = txtAddress.Text; string port = txtPort.Text; string id = txtId.Text; + string requestHost = txtRequestHost.Text; string remarks = txtRemarks.Text; if (Utils.IsNullOrEmpty(address)) @@ -76,6 +79,7 @@ namespace v2rayN.Forms vmessItem.address = address; vmessItem.port = Utils.ToInt(port); vmessItem.id = id; + vmessItem.requestHost = requestHost.Replace(" ", ""); vmessItem.remarks = remarks; if (ConfigHandler.AddTrojanServer(ref config, vmessItem, EditIndex) == 0) diff --git a/v2rayN/v2rayN/Forms/AddServer6Form.resx b/v2rayN/v2rayN/Forms/AddServer6Form.resx index e3935dc5..6d3c8975 100644 --- a/v2rayN/v2rayN/Forms/AddServer6Form.resx +++ b/v2rayN/v2rayN/Forms/AddServer6Form.resx @@ -134,20 +134,17 @@ Bottom + + NoControl + txtPort True - - groupBox1 - - - 4 - - - System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Alias (remarks) System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -171,26 +168,32 @@ label1 + + 359, 21 + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 groupBox1 + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + panel2 12, 155 - - True + + Fill 53, 12 - - Fill + + 127, 123 194, 21 @@ -201,6 +204,9 @@ 6, 12 + + 396, 17 + True @@ -229,35 +235,44 @@ 12, 93 - 8 + 10 Server + + 3 + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 0 - - 2 + + txtRequestHost + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 547, 60 - - 89, 12 + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 - 278, 21 + 359, 21 + + + Edit or add a [Trojan] server 359, 21 - - label6 - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -279,29 +294,35 @@ 71, 12 - - 75, 23 + + 24 - - panel1 + + label4 txtId - - 12, 62 + + 303, 17 - - 1 + + $this + + + 75, 23 btnClose - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Host(SNI) - - &OK + + label6 + + + 5 System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -312,14 +333,14 @@ 75, 23 - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 1 txtAddress - - 547, 10 + + groupBox1 Top @@ -328,7 +349,7 @@ 0, 10 - 2 + 4 System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -357,8 +378,11 @@ groupBox1 - - True + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 23 127, 59 @@ -366,23 +390,26 @@ System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - Alias (remarks) + + True - - 5 + + True - + + 89, 12 + + groupBox1 - - 303, 17 + + 0 - - $this + + 547, 10 - 6 + 8 &Cancel @@ -390,8 +417,11 @@ 12, 31 - - Edit or add a [Trojan] server + + &OK + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 0 @@ -405,21 +435,33 @@ 337, 158 - - groupBox1 + + True + + + 12, 62 127, 91 + + 12, 126 + - 5 + 7 $this + + 59, 12 + 1 + + groupBox1 + 0, 0 @@ -430,7 +472,7 @@ label13 - 3 + 5 95, 12 @@ -439,7 +481,7 @@ label2 - 0 + 2 panel2 @@ -451,7 +493,7 @@ 22 - 7 + 9 547, 291 @@ -462,11 +504,14 @@ v2rayN.Forms.BaseServerForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + + groupBox1 + $this - - 396, 17 + + 6 System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -477,9 +522,15 @@ panel2 + + panel1 + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 2 + True diff --git a/v2rayN/v2rayN/Forms/AddServer6Form.zh-Hans.resx b/v2rayN/v2rayN/Forms/AddServer6Form.zh-Hans.resx index d7642edd..375c223d 100644 --- a/v2rayN/v2rayN/Forms/AddServer6Form.zh-Hans.resx +++ b/v2rayN/v2rayN/Forms/AddServer6Form.zh-Hans.resx @@ -123,6 +123,9 @@ 服务器 + + 域名(SNI) + *手填,方便识别管理 diff --git a/v2rayN/v2rayN/Handler/ConfigHandler.cs b/v2rayN/v2rayN/Handler/ConfigHandler.cs index 59c0dcd7..37a9878e 100644 --- a/v2rayN/v2rayN/Handler/ConfigHandler.cs +++ b/v2rayN/v2rayN/Handler/ConfigHandler.cs @@ -430,11 +430,16 @@ namespace v2rayN.Handler { remark = "#" + WebUtility.UrlEncode(vmessItem.remarks); } + string query = string.Empty; + if (!Utils.IsNullOrEmpty(vmessItem.requestHost)) + { + query = string.Format("?sni={0}", vmessItem.requestHost); + } url = string.Format("{0}@{1}:{2}", vmessItem.id, vmessItem.address, vmessItem.port); - url = string.Format("{0}{1}{2}", Global.trojanProtocol, url, remark); + url = string.Format("{0}{1}{2}{3}", Global.trojanProtocol, url, query, remark); } else { diff --git a/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs b/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs index 9ca18e61..a79ae73e 100644 --- a/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs +++ b/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs @@ -561,7 +561,7 @@ namespace v2rayN.Handler }; if (!string.IsNullOrWhiteSpace(host)) { - tlsSettings.serverName = host; + tlsSettings.serverName = Utils.String2List(host)[0]; } streamSettings.tlsSettings = tlsSettings; } @@ -577,7 +577,7 @@ namespace v2rayN.Handler }; if (!string.IsNullOrWhiteSpace(host)) { - xtlsSettings.serverName = host; + xtlsSettings.serverName = Utils.String2List(host)[0]; } streamSettings.xtlsSettings = xtlsSettings; } @@ -1441,6 +1441,9 @@ namespace v2rayN.Handler vmessItem.port = uri.Port; vmessItem.id = uri.UserInfo; + var qurery = HttpUtility.ParseQueryString(uri.Query); + vmessItem.requestHost = qurery["sni"] ?? ""; + var remarks = uri.Fragment.Replace("#", ""); if (Utils.IsNullOrEmpty(remarks)) { diff --git a/v2rayN/v2rayN/Properties/AssemblyInfo.cs b/v2rayN/v2rayN/Properties/AssemblyInfo.cs index fa240436..8979aba5 100644 --- a/v2rayN/v2rayN/Properties/AssemblyInfo.cs +++ b/v2rayN/v2rayN/Properties/AssemblyInfo.cs @@ -32,4 +32,4 @@ using System.Runtime.InteropServices; // 方法是按如下所示使用“*”: //[assembly: AssemblyVersion("1.0.*")] //[assembly: AssemblyVersion("1.0.0")] -[assembly: AssemblyFileVersion("3.26")] +[assembly: AssemblyFileVersion("3.27")] From 7c633374f6dc35a0b78079539fcb67e8e290e456 Mon Sep 17 00:00:00 2001 From: nkh0472 Date: Wed, 4 Nov 2020 10:04:42 +0800 Subject: [PATCH 28/54] =?UTF-8?q?=E4=B8=8E=E6=9C=80=E6=96=B0=E7=9A=84?= =?UTF-8?q?=E5=9C=A8=E7=BA=BF=E9=BB=98=E8=AE=A4=E8=A7=84=E5=88=99=E4=BF=9D?= =?UTF-8?q?=E6=8C=81=E4=B8=80=E8=87=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit category-ads-all包含category-ads,并增添了提供广告的域名。 详见https://github.com/v2fly/domain-list-community/blob/master/data/category-ads-all --- v2rayN/v2rayN/Sample/custom_routing_block | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/v2rayN/v2rayN/Sample/custom_routing_block b/v2rayN/v2rayN/Sample/custom_routing_block index 738fe38c..0cd55ac3 100644 --- a/v2rayN/v2rayN/Sample/custom_routing_block +++ b/v2rayN/v2rayN/Sample/custom_routing_block @@ -1 +1 @@ -geosite:category-ads, \ No newline at end of file +geosite:category-ads-all, From 378f350c52324eaac26843e88b12671499c38dc6 Mon Sep 17 00:00:00 2001 From: 2dust <31833384+2dust@users.noreply.github.com> Date: Mon, 23 Nov 2020 21:18:44 +0800 Subject: [PATCH 29/54] ToJsonFile --- v2rayN/v2rayN/Handler/V2rayConfigHandler.cs | 4 ++-- v2rayN/v2rayN/Tool/Utils.cs | 16 +++++++++++----- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs b/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs index a79ae73e..bc28924c 100644 --- a/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs +++ b/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs @@ -84,7 +84,7 @@ namespace v2rayN.Handler // TODO: 统计配置 statistic(config, ref v2rayConfig); - Utils.ToJsonFile(v2rayConfig, fileName); + Utils.ToJsonFile(v2rayConfig, fileName, false); msg = string.Format(UIRes.I18N("SuccessfulConfiguration"), config.getSummary()); } @@ -919,7 +919,7 @@ namespace v2rayN.Handler //传出设置 ServerOutbound(config, ref v2rayConfig); - Utils.ToJsonFile(v2rayConfig, fileName); + Utils.ToJsonFile(v2rayConfig, fileName, false); msg = string.Format(UIRes.I18N("SuccessfulConfiguration"), config.getSummary()); } diff --git a/v2rayN/v2rayN/Tool/Utils.cs b/v2rayN/v2rayN/Tool/Utils.cs index 09c023de..22c37976 100644 --- a/v2rayN/v2rayN/Tool/Utils.cs +++ b/v2rayN/v2rayN/Tool/Utils.cs @@ -119,16 +119,22 @@ namespace v2rayN /// /// /// - public static int ToJsonFile(Object obj, string filePath) + public static int ToJsonFile(Object obj, string filePath, bool nullValue = true) { int result; try { using (StreamWriter file = File.CreateText(filePath)) { - //JsonSerializer serializer = new JsonSerializer(); - JsonSerializer serializer = new JsonSerializer() { Formatting = Formatting.Indented }; - //JsonSerializer serializer = new JsonSerializer() { Formatting = Formatting.Indented, NullValueHandling = NullValueHandling.Ignore }; + JsonSerializer serializer; + if (nullValue) + { + serializer = new JsonSerializer() { Formatting = Formatting.Indented }; + } + else + { + serializer = new JsonSerializer() { Formatting = Formatting.Indented, NullValueHandling = NullValueHandling.Ignore }; + } serializer.Serialize(file, obj); } @@ -800,7 +806,7 @@ namespace v2rayN public static string GetTempPath(string filename) { return Path.Combine(GetTempPath(), filename); - } + } public static string UnGzip(byte[] buf) { From b8848823cdae7200adb6dd3a8c3ff314f182e1e7 Mon Sep 17 00:00:00 2001 From: 2dust <31833384+2dust@users.noreply.github.com> Date: Sun, 29 Nov 2020 20:43:26 +0800 Subject: [PATCH 30/54] add xray start --- v2rayN/v2rayN/Handler/V2rayHandler.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/v2rayN/v2rayN/Handler/V2rayHandler.cs b/v2rayN/v2rayN/Handler/V2rayHandler.cs index cc6c404e..e4d13371 100644 --- a/v2rayN/v2rayN/Handler/V2rayHandler.cs +++ b/v2rayN/v2rayN/Handler/V2rayHandler.cs @@ -30,6 +30,7 @@ namespace v2rayN.Handler { lstV2ray = new List { + "xray", "wv2ray", "v2ray" }; @@ -161,7 +162,7 @@ namespace v2rayN.Handler private string V2rayFindexe() { //查找v2ray文件是否存在 string fileName = string.Empty; - lstV2ray.Reverse(); + //lstV2ray.Reverse(); foreach (string name in lstV2ray) { string vName = string.Format("{0}.exe", name); From 162b3ab29c6597bf15bc0d5d8494f5a9c0e6738f Mon Sep 17 00:00:00 2001 From: 2dust <31833384+2dust@users.noreply.github.com> Date: Sun, 29 Nov 2020 20:44:02 +0800 Subject: [PATCH 31/54] Update AssemblyInfo.cs --- v2rayN/v2rayN/Properties/AssemblyInfo.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/v2rayN/v2rayN/Properties/AssemblyInfo.cs b/v2rayN/v2rayN/Properties/AssemblyInfo.cs index 8979aba5..8ddd2cb3 100644 --- a/v2rayN/v2rayN/Properties/AssemblyInfo.cs +++ b/v2rayN/v2rayN/Properties/AssemblyInfo.cs @@ -32,4 +32,4 @@ using System.Runtime.InteropServices; // 方法是按如下所示使用“*”: //[assembly: AssemblyVersion("1.0.*")] //[assembly: AssemblyVersion("1.0.0")] -[assembly: AssemblyFileVersion("3.27")] +[assembly: AssemblyFileVersion("3.28")] From 3aeaadade6b29ea27a27864a2f22d05a99f04b70 Mon Sep 17 00:00:00 2001 From: 2dust <31833384+2dust@users.noreply.github.com> Date: Sat, 5 Dec 2020 18:12:55 +0800 Subject: [PATCH 32/54] remove connectionReuse --- v2rayN/v2rayN/Handler/V2rayConfigHandler.cs | 4 +--- v2rayN/v2rayN/Mode/V2rayConfig.cs | 13 ++----------- 2 files changed, 3 insertions(+), 14 deletions(-) diff --git a/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs b/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs index bc28924c..b02ea327 100644 --- a/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs +++ b/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs @@ -624,8 +624,7 @@ namespace v2rayN.Handler //ws case "ws": WsSettings wsSettings = new WsSettings - { - connectionReuse = true + { }; string path = config.path(); @@ -689,7 +688,6 @@ namespace v2rayN.Handler { TcpSettings tcpSettings = new TcpSettings { - connectionReuse = true, header = new Header { type = config.headerType() diff --git a/v2rayN/v2rayN/Mode/V2rayConfig.cs b/v2rayN/v2rayN/Mode/V2rayConfig.cs index 9f0cbf1f..bc85c18f 100644 --- a/v2rayN/v2rayN/Mode/V2rayConfig.cs +++ b/v2rayN/v2rayN/Mode/V2rayConfig.cs @@ -420,11 +420,7 @@ namespace v2rayN.Mode } public class TcpSettings - { - /// - /// 是否重用 TCP 连接 - /// - public bool connectionReuse { get; set; } + { /// /// 数据包头部伪装设置 /// @@ -488,12 +484,7 @@ namespace v2rayN.Mode } public class WsSettings - { - /// - /// - /// - public bool connectionReuse { get; set; } - + { /// /// /// From 47dce69aa4520766807a00d35c929651e4744844 Mon Sep 17 00:00:00 2001 From: 2dust <31833384+2dust@users.noreply.github.com> Date: Sat, 5 Dec 2020 18:13:24 +0800 Subject: [PATCH 33/54] up --- v2rayN/v2rayN/Forms/MainForm.cs | 4 ++-- v2rayN/v2rayN/Properties/AssemblyInfo.cs | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/v2rayN/v2rayN/Forms/MainForm.cs b/v2rayN/v2rayN/Forms/MainForm.cs index 7d041432..90977fd0 100644 --- a/v2rayN/v2rayN/Forms/MainForm.cs +++ b/v2rayN/v2rayN/Forms/MainForm.cs @@ -847,7 +847,7 @@ namespace v2rayN.Forms { //刷新 RefreshServers(); - LoadV2ray(); + //LoadV2ray(); UI.Show(UIRes.I18N("SuccessfullyImportedCustomServer")); } else @@ -1136,7 +1136,7 @@ namespace v2rayN.Forms { //TODO: reload is not good. RefreshServers(); - LoadV2ray(); + //LoadV2ray(); } } private void menuSelectAll_Click(object sender, EventArgs e) diff --git a/v2rayN/v2rayN/Properties/AssemblyInfo.cs b/v2rayN/v2rayN/Properties/AssemblyInfo.cs index 8ddd2cb3..152885aa 100644 --- a/v2rayN/v2rayN/Properties/AssemblyInfo.cs +++ b/v2rayN/v2rayN/Properties/AssemblyInfo.cs @@ -32,4 +32,4 @@ using System.Runtime.InteropServices; // 方法是按如下所示使用“*”: //[assembly: AssemblyVersion("1.0.*")] //[assembly: AssemblyVersion("1.0.0")] -[assembly: AssemblyFileVersion("3.28")] +[assembly: AssemblyFileVersion("3.29")] From b3907762199973603332eb10340d34b441561e7a Mon Sep 17 00:00:00 2001 From: 2dust <31833384+2dust@users.noreply.github.com> Date: Fri, 25 Dec 2020 20:43:28 +0800 Subject: [PATCH 34/54] up4.0 --- v2rayN/v2rayN/Base/HttpWebServer.cs | 101 - v2rayN/v2rayN/Base/HttpWebServerB.cs | 141 - v2rayN/v2rayN/Forms/MainForm.Designer.cs | 161 +- v2rayN/v2rayN/Forms/MainForm.cs | 184 +- v2rayN/v2rayN/Forms/MainForm.resx | 473 ++- v2rayN/v2rayN/Forms/MainForm.zh-Hans.resx | 165 +- .../Forms/OptionSettingForm.Designer.cs | 297 +- v2rayN/v2rayN/Forms/OptionSettingForm.cs | 157 +- v2rayN/v2rayN/Forms/OptionSettingForm.resx | 3128 +++++++---------- .../Forms/OptionSettingForm.zh-Hans.resx | 171 +- .../Forms/RoutingSettingControl.Designer.cs | 159 + v2rayN/v2rayN/Forms/RoutingSettingControl.cs | 76 + .../v2rayN/Forms/RoutingSettingControl.resx | 456 +++ .../Forms/RoutingSettingControl.zh-Hans.resx | 184 + .../Forms/RoutingSettingForm.Designer.cs | 151 + v2rayN/v2rayN/Forms/RoutingSettingForm.cs | 143 + v2rayN/v2rayN/Forms/RoutingSettingForm.resx | 420 +++ .../Forms/RoutingSettingForm.zh-Hans.resx | 145 + .../Forms/SubSettingControl.Designer.cs | 53 +- v2rayN/v2rayN/Forms/SubSettingControl.cs | 25 +- v2rayN/v2rayN/Forms/SubSettingControl.resx | 337 +- .../Forms/SubSettingControl.zh-Hans.resx | 13 +- v2rayN/v2rayN/Forms/SubSettingForm.resx | 126 +- v2rayN/v2rayN/Global.cs | 20 +- v2rayN/v2rayN/Handler/ConfigHandler.cs | 52 +- v2rayN/v2rayN/Handler/DownloadHandle.cs | 87 +- v2rayN/v2rayN/Handler/MainFormHandler.cs | 2 +- v2rayN/v2rayN/Handler/V2rayConfigHandler.cs | 113 +- .../HttpProxyHandler/HttpProxyHandle.cs | 94 +- .../HttpProxyHandler/PACServerHandle.cs | 209 -- v2rayN/v2rayN/Mode/ComboItem.cs | 14 + v2rayN/v2rayN/Mode/Config.cs | 90 +- v2rayN/v2rayN/Mode/ERoutingSort.cs | 11 + v2rayN/v2rayN/Mode/ESysProxyType.cs | 10 + v2rayN/v2rayN/Mode/V2rayConfig.cs | 10 +- v2rayN/v2rayN/Properties/AssemblyInfo.cs | 2 +- .../v2rayN/Properties/Resources.Designer.cs | 22 +- v2rayN/v2rayN/Properties/Resources.resx | 6 - v2rayN/v2rayN/Resources/abp.js.gz | Bin 4467 -> 0 bytes v2rayN/v2rayN/Resources/pac.txt.gz | Bin 44429 -> 0 bytes v2rayN/v2rayN/Sample/BlankPac.txt | 5 - v2rayN/v2rayN/Sample/SampleClientConfig.txt | 28 +- v2rayN/v2rayN/Tool/Utils.cs | 14 + v2rayN/v2rayN/v2rayN.csproj | 36 +- 44 files changed, 4178 insertions(+), 3913 deletions(-) delete mode 100644 v2rayN/v2rayN/Base/HttpWebServer.cs delete mode 100644 v2rayN/v2rayN/Base/HttpWebServerB.cs create mode 100644 v2rayN/v2rayN/Forms/RoutingSettingControl.Designer.cs create mode 100644 v2rayN/v2rayN/Forms/RoutingSettingControl.cs create mode 100644 v2rayN/v2rayN/Forms/RoutingSettingControl.resx create mode 100644 v2rayN/v2rayN/Forms/RoutingSettingControl.zh-Hans.resx create mode 100644 v2rayN/v2rayN/Forms/RoutingSettingForm.Designer.cs create mode 100644 v2rayN/v2rayN/Forms/RoutingSettingForm.cs create mode 100644 v2rayN/v2rayN/Forms/RoutingSettingForm.resx create mode 100644 v2rayN/v2rayN/Forms/RoutingSettingForm.zh-Hans.resx delete mode 100644 v2rayN/v2rayN/HttpProxyHandler/PACServerHandle.cs create mode 100644 v2rayN/v2rayN/Mode/ComboItem.cs create mode 100644 v2rayN/v2rayN/Mode/ERoutingSort.cs create mode 100644 v2rayN/v2rayN/Mode/ESysProxyType.cs delete mode 100644 v2rayN/v2rayN/Resources/abp.js.gz delete mode 100644 v2rayN/v2rayN/Resources/pac.txt.gz delete mode 100644 v2rayN/v2rayN/Sample/BlankPac.txt diff --git a/v2rayN/v2rayN/Base/HttpWebServer.cs b/v2rayN/v2rayN/Base/HttpWebServer.cs deleted file mode 100644 index 9fa72495..00000000 --- a/v2rayN/v2rayN/Base/HttpWebServer.cs +++ /dev/null @@ -1,101 +0,0 @@ -using System; -using System.Net; -using System.Text; -using System.Threading; - -namespace v2rayN.Base -{ - public class HttpWebServer - { - private HttpListener _listener; - private Func _responderMethod; - - public HttpWebServer(string[] prefixes, Func method) - { - try - { - _listener = new HttpListener(); - - if (!HttpListener.IsSupported) - throw new NotSupportedException( - "Needs Windows XP SP2, Server 2003 or later."); - - // URI prefixes are required, for example - // "http://localhost:8080/index/". - if (prefixes == null || prefixes.Length == 0) - throw new ArgumentException("prefixes"); - - // A responder method is required - if (method == null) - throw new ArgumentException("method"); - - foreach (string s in prefixes) - _listener.Prefixes.Add(s); - - _responderMethod = method; - _listener.Start(); - - } - catch (Exception ex) - { - Utils.SaveLog(ex.Message, ex); - throw; - } - } - - public HttpWebServer(Func method, params string[] prefixes) - : this(prefixes, method) { } - - public void Run() - { - ThreadPool.QueueUserWorkItem((o) => - { - Utils.SaveLog("Webserver running..."); - try - { - while (_listener.IsListening) - { - ThreadPool.QueueUserWorkItem((c) => - { - HttpListenerContext ctx = c as HttpListenerContext; - try - { - string address = ctx.Request.LocalEndPoint.Address.ToString(); - Utils.SaveLog("Webserver Request " + address); - string rstr = _responderMethod(address); - byte[] buf = Encoding.UTF8.GetBytes(rstr); - ctx.Response.StatusCode = 200; - ctx.Response.ContentType = "application/x-ns-proxy-autoconfig"; - ctx.Response.ContentLength64 = buf.Length; - ctx.Response.OutputStream.Write(buf, 0, buf.Length); - } - catch - { - } // suppress any exceptions - finally - { - // always close the stream - ctx.Response.OutputStream.Close(); - } - }, _listener.GetContext()); - } - } - catch (Exception ex) - { - Utils.SaveLog(ex.Message, ex); - } // suppress any exceptions - }); - } - - public void Stop() - { - if (_listener != null) - { - _listener.Stop(); - _listener.Close(); - _listener = null; - } - } - - } -} diff --git a/v2rayN/v2rayN/Base/HttpWebServerB.cs b/v2rayN/v2rayN/Base/HttpWebServerB.cs deleted file mode 100644 index fcbca1dd..00000000 --- a/v2rayN/v2rayN/Base/HttpWebServerB.cs +++ /dev/null @@ -1,141 +0,0 @@ -using System; -using System.IO; -using System.Net; -using System.Net.Sockets; -using System.Threading; - -namespace v2rayN.Base -{ - public class HttpWebServerB - { - private TcpListener listener; - private int port; - private Func _responderMethod; - - public HttpWebServerB(int port, Func method) - { - this.port = port; - this._responderMethod = method; - - Thread thread = new Thread(StartListen) - { - IsBackground = true - }; - thread.Start(); - } - - public void Stop() - { - if (listener != null) - { - listener.Stop(); - listener = null; - } - } - - private void StartListen() - { - try - { - listener = new TcpListener(IPAddress.Any, port); - listener.Start(); - Utils.SaveLog("WebserverB running..."); - - while (true) - { - if (!listener.Pending()) - { - Thread.Sleep(100); - continue; - } - - TcpClient socket = listener.AcceptTcpClient(); - Thread thread = new Thread(new ParameterizedThreadStart(ProcessThread)) - { - IsBackground = true - }; - thread.Start(socket); - Thread.Sleep(1); - } - } - catch - { - Utils.SaveLog("WebserverB start fail."); - } - } - private void ProcessThread(object obj) - { - try - { - TcpClient socket = obj as TcpClient; - - BufferedStream inputStream = new BufferedStream(socket.GetStream()); - StreamWriter outputStream = new StreamWriter(new BufferedStream(socket.GetStream())); - if (inputStream.CanRead) - { - string data = ReadStream(inputStream); - - if (data.Contains("/pac/")) - { - if (_responderMethod != null) - { - string address = ((IPEndPoint)socket.Client.LocalEndPoint).Address.ToString(); - Utils.SaveLog("WebserverB Request " + address); - string pac = _responderMethod(address); - - if (inputStream.CanWrite) - { - WriteStream(outputStream, pac); - } - } - } - } - - outputStream.BaseStream.Flush(); - inputStream = null; - outputStream = null; - socket.Close(); - } - catch (Exception ex) - { - Utils.SaveLog(ex.Message, ex); - } - } - - private string ReadStream(Stream inputStream) - { - int nextchar; - string data = ""; - while (true) - { - nextchar = inputStream.ReadByte(); - if (nextchar == '\n') - { - break; - } - if (nextchar == '\r') - { - continue; - } - if (nextchar == -1) - { - Thread.Sleep(1); - continue; - }; - data += Convert.ToChar(nextchar); - } - return data; - } - - private void WriteStream(StreamWriter outputStream, string pac) - { - string content_type = "application/x-ns-proxy-autoconfig"; - outputStream.WriteLine("HTTP/1.1 200 OK"); - outputStream.WriteLine(String.Format("Content-Type:{0}", content_type)); - outputStream.WriteLine("Connection: close"); - outputStream.WriteLine(""); - outputStream.WriteLine(pac); - outputStream.Flush(); - } - } -} diff --git a/v2rayN/v2rayN/Forms/MainForm.Designer.cs b/v2rayN/v2rayN/Forms/MainForm.Designer.cs index 86a73954..1b546c7b 100644 --- a/v2rayN/v2rayN/Forms/MainForm.Designer.cs +++ b/v2rayN/v2rayN/Forms/MainForm.Designer.cs @@ -63,22 +63,17 @@ this.menuExport2ServerConfig = new System.Windows.Forms.ToolStripMenuItem(); this.menuExport2ShareUrl = new System.Windows.Forms.ToolStripMenuItem(); this.menuExport2SubContent = new System.Windows.Forms.ToolStripMenuItem(); - this.qrCodeControl = new v2rayN.Forms.QRCodeControl(); this.tsbServer = new System.Windows.Forms.ToolStripDropDownButton(); + this.qrCodeControl = new v2rayN.Forms.QRCodeControl(); this.notifyMain = new System.Windows.Forms.NotifyIcon(this.components); this.cmsMain = new System.Windows.Forms.ContextMenuStrip(this.components); this.menuSysAgentMode = new System.Windows.Forms.ToolStripMenuItem(); - this.menuNotEnabledHttp = new System.Windows.Forms.ToolStripMenuItem(); - this.menuGlobal = new System.Windows.Forms.ToolStripMenuItem(); - this.menuGlobalPAC = new System.Windows.Forms.ToolStripMenuItem(); - this.menuKeep = new System.Windows.Forms.ToolStripMenuItem(); - this.menuKeepPAC = new System.Windows.Forms.ToolStripMenuItem(); this.menuKeepNothing = new System.Windows.Forms.ToolStripMenuItem(); - this.menuKeepPACNothing = new System.Windows.Forms.ToolStripMenuItem(); + this.menuGlobal = new System.Windows.Forms.ToolStripMenuItem(); + this.menuKeepClear = new System.Windows.Forms.ToolStripMenuItem(); this.menuServers = new System.Windows.Forms.ToolStripMenuItem(); this.menuAddServers2 = new System.Windows.Forms.ToolStripMenuItem(); this.menuScanScreen2 = new System.Windows.Forms.ToolStripMenuItem(); - this.menuCopyPACUrl = new System.Windows.Forms.ToolStripMenuItem(); this.menuUpdateSubscriptions = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator(); this.menuExit = new System.Windows.Forms.ToolStripMenuItem(); @@ -93,8 +88,6 @@ this.toolSslHttpPortLab = new System.Windows.Forms.ToolStripStatusLabel(); this.toolSslHttpPort = new System.Windows.Forms.ToolStripStatusLabel(); this.toolSslBlank2 = new System.Windows.Forms.ToolStripStatusLabel(); - this.toolSslPacPortLab = new System.Windows.Forms.ToolStripStatusLabel(); - this.toolSslPacPort = new System.Windows.Forms.ToolStripStatusLabel(); this.toolSslBlank3 = new System.Windows.Forms.ToolStripStatusLabel(); this.toolSslServerSpeed = new System.Windows.Forms.ToolStripStatusLabel(); this.toolSslBlank4 = new System.Windows.Forms.ToolStripStatusLabel(); @@ -106,16 +99,16 @@ this.tsbSubUpdate = new System.Windows.Forms.ToolStripMenuItem(); this.tsbQRCodeSwitch = new System.Windows.Forms.ToolStripButton(); this.toolStripSeparator8 = new System.Windows.Forms.ToolStripSeparator(); - this.tsbOptionSetting = new System.Windows.Forms.ToolStripButton(); + this.tsbSetting = new System.Windows.Forms.ToolStripDropDownButton(); + this.tsbOptionSetting = new System.Windows.Forms.ToolStripMenuItem(); + this.tsbRoutingSetting = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripSeparator5 = new System.Windows.Forms.ToolStripSeparator(); this.tsbReload = new System.Windows.Forms.ToolStripButton(); this.toolStripSeparator7 = new System.Windows.Forms.ToolStripSeparator(); this.tsbCheckUpdate = new System.Windows.Forms.ToolStripDropDownButton(); this.tsbCheckUpdateN = new System.Windows.Forms.ToolStripMenuItem(); this.tsbCheckUpdateCore = new System.Windows.Forms.ToolStripMenuItem(); - this.tsbCheckUpdatePACList = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator13 = new System.Windows.Forms.ToolStripSeparator(); - this.tsbCheckClearPACList = new System.Windows.Forms.ToolStripMenuItem(); + this.tsbCheckUpdateXrayCore = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripSeparator10 = new System.Windows.Forms.ToolStripSeparator(); this.tsbHelp = new System.Windows.Forms.ToolStripDropDownButton(); this.tsbAbout = new System.Windows.Forms.ToolStripMenuItem(); @@ -211,6 +204,7 @@ this.menuExport2ShareUrl, this.menuExport2SubContent}); this.cmsLv.Name = "cmsLv"; + this.cmsLv.OwnerItem = this.tsbServer; // // menuAddVmessServer // @@ -388,11 +382,6 @@ this.menuExport2SubContent.Name = "menuExport2SubContent"; this.menuExport2SubContent.Click += new System.EventHandler(this.menuExport2SubContent_Click); // - // qrCodeControl - // - resources.ApplyResources(this.qrCodeControl, "qrCodeControl"); - this.qrCodeControl.Name = "qrCodeControl"; - // // tsbServer // resources.ApplyResources(this.tsbServer, "tsbServer"); @@ -400,6 +389,11 @@ this.tsbServer.Image = global::v2rayN.Properties.Resources.server; this.tsbServer.Name = "tsbServer"; // + // qrCodeControl + // + resources.ApplyResources(this.qrCodeControl, "qrCodeControl"); + this.qrCodeControl.Name = "qrCodeControl"; + // // notifyMain // resources.ApplyResources(this.notifyMain, "notifyMain"); @@ -415,7 +409,6 @@ this.menuServers, this.menuAddServers2, this.menuScanScreen2, - this.menuCopyPACUrl, this.menuUpdateSubscriptions, this.toolStripSeparator2, this.menuExit}); @@ -428,56 +421,28 @@ // resources.ApplyResources(this.menuSysAgentMode, "menuSysAgentMode"); this.menuSysAgentMode.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.menuNotEnabledHttp, - this.menuGlobal, - this.menuGlobalPAC, - this.menuKeep, - this.menuKeepPAC, this.menuKeepNothing, - this.menuKeepPACNothing}); + this.menuGlobal, + this.menuKeepClear}); this.menuSysAgentMode.Name = "menuSysAgentMode"; // - // menuNotEnabledHttp - // - resources.ApplyResources(this.menuNotEnabledHttp, "menuNotEnabledHttp"); - this.menuNotEnabledHttp.Name = "menuNotEnabledHttp"; - this.menuNotEnabledHttp.Click += new System.EventHandler(this.menuNotEnabledHttp_Click); - // - // menuGlobal - // - resources.ApplyResources(this.menuGlobal, "menuGlobal"); - this.menuGlobal.Name = "menuGlobal"; - this.menuGlobal.Click += new System.EventHandler(this.menuGlobal_Click); - // - // menuGlobalPAC - // - resources.ApplyResources(this.menuGlobalPAC, "menuGlobalPAC"); - this.menuGlobalPAC.Name = "menuGlobalPAC"; - this.menuGlobalPAC.Click += new System.EventHandler(this.menuGlobalPAC_Click); - // - // menuKeep - // - resources.ApplyResources(this.menuKeep, "menuKeep"); - this.menuKeep.Name = "menuKeep"; - this.menuKeep.Click += new System.EventHandler(this.menuKeep_Click); - // - // menuKeepPAC - // - resources.ApplyResources(this.menuKeepPAC, "menuKeepPAC"); - this.menuKeepPAC.Name = "menuKeepPAC"; - this.menuKeepPAC.Click += new System.EventHandler(this.menuKeepPAC_Click); - // // menuKeepNothing // resources.ApplyResources(this.menuKeepNothing, "menuKeepNothing"); this.menuKeepNothing.Name = "menuKeepNothing"; this.menuKeepNothing.Click += new System.EventHandler(this.menuKeepNothing_Click); // - // menuKeepPACNothing + // menuGlobal // - resources.ApplyResources(this.menuKeepPACNothing, "menuKeepPACNothing"); - this.menuKeepPACNothing.Name = "menuKeepPACNothing"; - this.menuKeepPACNothing.Click += new System.EventHandler(this.menuKeepPACNothing_Click); + resources.ApplyResources(this.menuGlobal, "menuGlobal"); + this.menuGlobal.Name = "menuGlobal"; + this.menuGlobal.Click += new System.EventHandler(this.menuGlobal_Click); + // + // menuKeepClear + // + resources.ApplyResources(this.menuKeepClear, "menuKeepClear"); + this.menuKeepClear.Name = "menuKeepClear"; + this.menuKeepClear.Click += new System.EventHandler(this.menuKeepClear_Click); // // menuServers // @@ -496,12 +461,6 @@ this.menuScanScreen2.Name = "menuScanScreen2"; this.menuScanScreen2.Click += new System.EventHandler(this.menuScanScreen_Click); // - // menuCopyPACUrl - // - resources.ApplyResources(this.menuCopyPACUrl, "menuCopyPACUrl"); - this.menuCopyPACUrl.Name = "menuCopyPACUrl"; - this.menuCopyPACUrl.Click += new System.EventHandler(this.menuCopyPACUrl_Click); - // // menuUpdateSubscriptions // resources.ApplyResources(this.menuUpdateSubscriptions, "menuUpdateSubscriptions"); @@ -559,8 +518,6 @@ this.toolSslHttpPortLab, this.toolSslHttpPort, this.toolSslBlank2, - this.toolSslPacPortLab, - this.toolSslPacPort, this.toolSslBlank3, this.toolSslServerSpeed, this.toolSslBlank4}); @@ -599,16 +556,6 @@ this.toolSslBlank2.Name = "toolSslBlank2"; this.toolSslBlank2.Spring = true; // - // toolSslPacPortLab - // - resources.ApplyResources(this.toolSslPacPortLab, "toolSslPacPortLab"); - this.toolSslPacPortLab.Name = "toolSslPacPortLab"; - // - // toolSslPacPort - // - resources.ApplyResources(this.toolSslPacPort, "toolSslPacPort"); - this.toolSslPacPort.Name = "toolSslPacPort"; - // // toolSslBlank3 // resources.ApplyResources(this.toolSslBlank3, "toolSslBlank3"); @@ -641,7 +588,7 @@ this.tsbSub, this.tsbQRCodeSwitch, this.toolStripSeparator8, - this.tsbOptionSetting, + this.tsbSetting, this.toolStripSeparator5, this.tsbReload, this.toolStripSeparator7, @@ -694,13 +641,27 @@ resources.ApplyResources(this.toolStripSeparator8, "toolStripSeparator8"); this.toolStripSeparator8.Name = "toolStripSeparator8"; // + // tsbSetting + // + resources.ApplyResources(this.tsbSetting, "tsbSetting"); + this.tsbSetting.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.tsbOptionSetting, + this.tsbRoutingSetting}); + this.tsbSetting.Image = global::v2rayN.Properties.Resources.option; + this.tsbSetting.Name = "tsbSetting"; + // // tsbOptionSetting // resources.ApplyResources(this.tsbOptionSetting, "tsbOptionSetting"); - this.tsbOptionSetting.Image = global::v2rayN.Properties.Resources.option; this.tsbOptionSetting.Name = "tsbOptionSetting"; this.tsbOptionSetting.Click += new System.EventHandler(this.tsbOptionSetting_Click); // + // tsbRoutingSetting + // + resources.ApplyResources(this.tsbRoutingSetting, "tsbRoutingSetting"); + this.tsbRoutingSetting.Name = "tsbRoutingSetting"; + this.tsbRoutingSetting.Click += new System.EventHandler(this.tsbRoutingSetting_Click); + // // toolStripSeparator5 // resources.ApplyResources(this.toolStripSeparator5, "toolStripSeparator5"); @@ -723,9 +684,7 @@ this.tsbCheckUpdate.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.tsbCheckUpdateN, this.tsbCheckUpdateCore, - this.tsbCheckUpdatePACList, - this.toolStripSeparator13, - this.tsbCheckClearPACList}); + this.tsbCheckUpdateXrayCore}); this.tsbCheckUpdate.Image = global::v2rayN.Properties.Resources.checkupdate; this.tsbCheckUpdate.Name = "tsbCheckUpdate"; // @@ -741,22 +700,11 @@ this.tsbCheckUpdateCore.Name = "tsbCheckUpdateCore"; this.tsbCheckUpdateCore.Click += new System.EventHandler(this.tsbCheckUpdateCore_Click); // - // tsbCheckUpdatePACList + // tsbCheckUpdateXrayCore // - resources.ApplyResources(this.tsbCheckUpdatePACList, "tsbCheckUpdatePACList"); - this.tsbCheckUpdatePACList.Name = "tsbCheckUpdatePACList"; - this.tsbCheckUpdatePACList.Click += new System.EventHandler(this.tsbCheckUpdatePACList_Click); - // - // toolStripSeparator13 - // - resources.ApplyResources(this.toolStripSeparator13, "toolStripSeparator13"); - this.toolStripSeparator13.Name = "toolStripSeparator13"; - // - // tsbCheckClearPACList - // - resources.ApplyResources(this.tsbCheckClearPACList, "tsbCheckClearPACList"); - this.tsbCheckClearPACList.Name = "tsbCheckClearPACList"; - this.tsbCheckClearPACList.Click += new System.EventHandler(this.tsbCheckClearPACList_Click); + resources.ApplyResources(this.tsbCheckUpdateXrayCore, "tsbCheckUpdateXrayCore"); + this.tsbCheckUpdateXrayCore.Name = "tsbCheckUpdateXrayCore"; + this.tsbCheckUpdateXrayCore.Click += new System.EventHandler(this.tsbCheckUpdateXrayCore_Click); // // toolStripSeparator10 // @@ -880,7 +828,6 @@ private System.Windows.Forms.ToolStripMenuItem menuExport2ServerConfig; private System.Windows.Forms.ToolStrip tsMain; private System.Windows.Forms.ToolStripDropDownButton tsbServer; - private System.Windows.Forms.ToolStripButton tsbOptionSetting; private System.Windows.Forms.ToolStripButton tsbClose; private System.Windows.Forms.ToolStripSeparator toolStripSeparator4; private System.Windows.Forms.ToolStripSeparator toolStripSeparator5; @@ -893,9 +840,7 @@ private System.Windows.Forms.ToolStripSeparator toolStripSeparator9; private System.Windows.Forms.ToolStripMenuItem menuSysAgentMode; private System.Windows.Forms.ToolStripMenuItem menuGlobal; - private System.Windows.Forms.ToolStripMenuItem menuGlobalPAC; - private System.Windows.Forms.ToolStripMenuItem menuKeep; - private System.Windows.Forms.ToolStripMenuItem menuCopyPACUrl; + private System.Windows.Forms.ToolStripMenuItem menuKeepClear; private System.Windows.Forms.ToolStripMenuItem menuAddCustomServer; private System.Windows.Forms.ToolStripSeparator toolStripSeparator1; private System.Windows.Forms.ToolStripMenuItem menuAddShadowsocksServer; @@ -905,7 +850,6 @@ private System.Windows.Forms.ToolStripDropDownButton tsbCheckUpdate; private System.Windows.Forms.ToolStripMenuItem tsbCheckUpdateN; private System.Windows.Forms.ToolStripMenuItem tsbCheckUpdateCore; - private System.Windows.Forms.ToolStripMenuItem tsbCheckUpdatePACList; private System.Windows.Forms.ToolStripMenuItem menuAddServers; private System.Windows.Forms.ToolStripMenuItem menuExport2ShareUrl; private System.Windows.Forms.ToolStripMenuItem menuSpeedServer; @@ -920,8 +864,6 @@ private System.Windows.Forms.ToolStripSeparator toolStripSeparator8; private System.Windows.Forms.ToolStripMenuItem tsbSubSetting; private System.Windows.Forms.ToolStripMenuItem tsbSubUpdate; - private System.Windows.Forms.ToolStripMenuItem tsbCheckClearPACList; - private System.Windows.Forms.ToolStripMenuItem menuKeepPAC; private System.Windows.Forms.ToolStripMenuItem menuSelectAll; private System.Windows.Forms.ToolStripMenuItem menuExport2SubContent; private System.Windows.Forms.ToolStripSeparator toolStripSeparator12; @@ -934,27 +876,26 @@ private System.Windows.Forms.ToolStripStatusLabel toolSslHttpPort; private System.Windows.Forms.ToolStripStatusLabel toolSslBlank2; private System.Windows.Forms.ToolStripStatusLabel toolSslBlank1; - private System.Windows.Forms.ToolStripStatusLabel toolSslPacPort; private System.Windows.Forms.ToolStripStatusLabel toolSslBlank3; private System.Windows.Forms.ToolStripStatusLabel toolSslSocksPortLab; private System.Windows.Forms.ToolStripStatusLabel toolSslHttpPortLab; - private System.Windows.Forms.ToolStripStatusLabel toolSslPacPortLab; private System.Windows.Forms.ToolStripStatusLabel toolSslServerSpeed; private System.Windows.Forms.ToolStripStatusLabel toolSslBlank4; private System.Windows.Forms.ToolStripMenuItem menuRemoveDuplicateServer; private System.Windows.Forms.ToolStripMenuItem menuTcpingServer; private System.Windows.Forms.ToolStripMenuItem menuRealPingServer; - private System.Windows.Forms.ToolStripMenuItem menuNotEnabledHttp; - private System.Windows.Forms.ToolStripSeparator toolStripSeparator13; private System.Windows.Forms.ToolStripMenuItem menuUpdateSubscriptions; private System.Windows.Forms.ToolStripMenuItem tsbV2rayWebsite; private System.Windows.Forms.ToolStripMenuItem menuKeepNothing; - private System.Windows.Forms.ToolStripMenuItem menuKeepPACNothing; private System.Windows.Forms.ToolStripMenuItem tsbTestMe; private System.Windows.Forms.ToolStripButton tsbReload; private System.Windows.Forms.ToolStripButton tsbQRCodeSwitch; private System.Windows.Forms.ToolStripMenuItem menuAddVlessServer; private System.Windows.Forms.ToolStripMenuItem menuAddTrojanServer; + private System.Windows.Forms.ToolStripDropDownButton tsbSetting; + private System.Windows.Forms.ToolStripMenuItem tsbOptionSetting; + private System.Windows.Forms.ToolStripMenuItem tsbRoutingSetting; + private System.Windows.Forms.ToolStripMenuItem tsbCheckUpdateXrayCore; } } diff --git a/v2rayN/v2rayN/Forms/MainForm.cs b/v2rayN/v2rayN/Forms/MainForm.cs index 90977fd0..0b7b2e55 100644 --- a/v2rayN/v2rayN/Forms/MainForm.cs +++ b/v2rayN/v2rayN/Forms/MainForm.cs @@ -35,8 +35,8 @@ namespace v2rayN.Forms { v2rayHandler.V2rayStop(); - HttpProxyHandle.CloseHttpAgent(config); - PACServerHandle.Stop(); + //HttpProxyHandle.CloseHttpAgent(config); + HttpProxyHandle.UpdateSysProxy(config, true); ConfigHandler.SaveConfig(ref config); statistics?.SaveToFile(); @@ -205,6 +205,8 @@ namespace v2rayN.Forms /// private void RefreshServersView() { + int index = lvServers.SelectedIndices.Count > 0 ? lvServers.SelectedIndices[0] : -1; + lvServers.BeginUpdate(); lvServers.Items.Clear(); @@ -270,15 +272,11 @@ namespace v2rayN.Forms } lvServers.EndUpdate(); - //if (lvServers.Items.Count > 0) - //{ - // if (lvServers.Items.Count <= testConfigIndex) - // { - // testConfigIndex = lvServers.Items.Count - 1; - // } - // lvServers.Items[testConfigIndex].Selected = true; - // lvServers.Select(); - //} + if (index >= 0 && index < lvServers.Items.Count && lvServers.Items.Count > 0) + { + lvServers.Items[index].Selected = true; + lvServers.EnsureVisible(index); // workaround + } } /// @@ -343,29 +341,8 @@ namespace v2rayN.Forms private void DisplayToolStatus() { - toolSslSocksPort.Text = - toolSslHttpPort.Text = - toolSslPacPort.Text = "OFF"; - toolSslSocksPort.Text = $"{Global.Loopback}:{config.inbound[0].localPort}"; - - if (config.listenerType != (int)ListenerType.noHttpProxy) - { - toolSslHttpPort.Text = $"{Global.Loopback}:{Global.httpPort}"; - if (config.listenerType == ListenerType.GlobalPac || - config.listenerType == ListenerType.PacOpenAndClear || - config.listenerType == ListenerType.PacOpenOnly) - { - if (PACServerHandle.IsRunning) - { - toolSslPacPort.Text = $"{HttpProxyHandle.GetPacUrl()}"; - } - else - { - toolSslPacPort.Text = UIRes.I18N("StartPacFailed"); - } - } - } + toolSslHttpPort.Text = $"{Global.Loopback}:{Global.httpPort}"; notifyMain.Icon = MainFormHandler.Instance.GetNotifyIcon(config, this.Icon); } @@ -426,7 +403,7 @@ namespace v2rayN.Forms ConfigHandler.SaveConfig(ref config, false); statistics?.SaveToFile(); - ChangePACButtonStatus(config.listenerType); + ChangePACButtonStatus(config.sysProxyType); tsbReload.Enabled = true; } @@ -576,7 +553,7 @@ namespace v2rayN.Forms private void menuAddVlessServer_Click(object sender, EventArgs e) { - ShowServerForm((int)EConfigType.VLESS, -1); + ShowServerForm((int)EConfigType.VLESS, -1); } private void menuRemoveServer_Click(object sender, EventArgs e) @@ -758,7 +735,17 @@ namespace v2rayN.Forms //刷新 RefreshServers(); LoadV2ray(); - HttpProxyHandle.RestartHttpAgent(config, true); + } + } + + private void tsbRoutingSetting_Click(object sender, EventArgs e) + { + RoutingSettingForm fm = new RoutingSettingForm(); + if (fm.ShowDialog() == DialogResult.OK) + { + //刷新 + RefreshServers(); + LoadV2ray(); } } @@ -858,13 +845,13 @@ namespace v2rayN.Forms private void menuAddShadowsocksServer_Click(object sender, EventArgs e) { - ShowServerForm((int)EConfigType.Shadowsocks, -1); + ShowServerForm((int)EConfigType.Shadowsocks, -1); ShowForm(); } private void menuAddSocksServer_Click(object sender, EventArgs e) { - ShowServerForm((int)EConfigType.Socks, -1); + ShowServerForm((int)EConfigType.Socks, -1); ShowForm(); } @@ -1020,10 +1007,11 @@ namespace v2rayN.Forms this.ShowInTaskbar = true; //this.notifyIcon1.Visible = false; this.txtMsgBox.ScrollToCaret(); - if (config.index >= 0 && config.index < lvServers.Items.Count) - { - lvServers.EnsureVisible(config.index); // workaround - } + //if (config.index >= 0 && config.index < lvServers.Items.Count) + //{ + // lvServers.Items[config.index].Selected = true; + // lvServers.EnsureVisible(config.index); // workaround + //} SetVisibleCore(true); } @@ -1151,55 +1139,37 @@ namespace v2rayN.Forms #region 系统代理相关 - private void menuCopyPACUrl_Click(object sender, EventArgs e) - { - Utils.SetClipboardData(HttpProxyHandle.GetPacUrl()); - } - private void menuNotEnabledHttp_Click(object sender, EventArgs e) - { - SetListenerType(ListenerType.noHttpProxy); - } private void menuGlobal_Click(object sender, EventArgs e) { - SetListenerType(ListenerType.GlobalHttp); + SetListenerType(ESysProxyType.ForcedChange); } - private void menuGlobalPAC_Click(object sender, EventArgs e) + + private void menuKeepClear_Click(object sender, EventArgs e) { - SetListenerType(ListenerType.GlobalPac); - } - private void menuKeep_Click(object sender, EventArgs e) - { - SetListenerType(ListenerType.HttpOpenAndClear); - } - private void menuKeepPAC_Click(object sender, EventArgs e) - { - SetListenerType(ListenerType.PacOpenAndClear); + SetListenerType(ESysProxyType.ForcedClear); } private void menuKeepNothing_Click(object sender, EventArgs e) { - SetListenerType(ListenerType.HttpOpenOnly); + SetListenerType(ESysProxyType.Unchanged); } - private void menuKeepPACNothing_Click(object sender, EventArgs e) + private void SetListenerType(ESysProxyType type) { - SetListenerType(ListenerType.PacOpenOnly); - } - private void SetListenerType(ListenerType type) - { - config.listenerType = type; + config.sysProxyType = type; ChangePACButtonStatus(type); } - private void ChangePACButtonStatus(ListenerType type) + private void ChangePACButtonStatus(ESysProxyType type) { - if (type != ListenerType.noHttpProxy) - { - HttpProxyHandle.RestartHttpAgent(config, false); - } - else - { - HttpProxyHandle.CloseHttpAgent(config); - } + HttpProxyHandle.UpdateSysProxy(config, false); + //if (type != ListenerType.noHttpProxy) + //{ + // HttpProxyHandle.RestartHttpAgent(config, false); + //} + //else + //{ + // HttpProxyHandle.CloseHttpAgent(config); + //} for (int k = 0; k < menuSysAgentMode.DropDownItems.Count; k++) { @@ -1301,6 +1271,16 @@ namespace v2rayN.Forms } private void tsbCheckUpdateCore_Click(object sender, EventArgs e) + { + CheckUpdateCore("v2fly"); + } + + private void tsbCheckUpdateXrayCore_Click(object sender, EventArgs e) + { + CheckUpdateCore("xray"); + } + + private void CheckUpdateCore(string type) { DownloadHandle downloadHandle = null; if (downloadHandle == null) @@ -1362,53 +1342,7 @@ namespace v2rayN.Forms } AppendText(false, string.Format(UIRes.I18N("MsgStartUpdating"), "v2rayCore")); - downloadHandle.CheckUpdateAsync("Core"); - } - - private void tsbCheckUpdatePACList_Click(object sender, EventArgs e) - { - DownloadHandle pacListHandle = null; - if (pacListHandle == null) - { - pacListHandle = new DownloadHandle(); - pacListHandle.UpdateCompleted += (sender2, args) => - { - if (args.Success) - { - string result = args.Msg; - if (Utils.IsNullOrEmpty(result)) - { - return; - } - pacListHandle.GenPacFile(result); - - AppendText(false, UIRes.I18N("MsgPACUpdateSuccessfully")); - } - else - { - AppendText(false, UIRes.I18N("MsgPACUpdateFailed")); - } - }; - pacListHandle.Error += (sender2, args) => - { - AppendText(true, args.GetException().Message); - }; - } - AppendText(false, UIRes.I18N("MsgStartUpdatingPAC")); - pacListHandle.WebDownloadString(config.urlGFWList); - } - - private void tsbCheckClearPACList_Click(object sender, EventArgs e) - { - try - { - File.WriteAllText(Utils.GetPath(Global.pacFILE), Utils.GetEmbedText(Global.BlankPacFileName), Encoding.UTF8); - AppendText(false, UIRes.I18N("MsgSimplifyPAC")); - } - catch (Exception ex) - { - Utils.SaveLog(ex.Message, ex); - } + downloadHandle.CheckUpdateAsync(type); } #endregion @@ -1570,8 +1504,8 @@ namespace v2rayN.Forms + #endregion - } } diff --git a/v2rayN/v2rayN/Forms/MainForm.resx b/v2rayN/v2rayN/Forms/MainForm.resx index eb1e2e63..e1d6def6 100644 --- a/v2rayN/v2rayN/Forms/MainForm.resx +++ b/v2rayN/v2rayN/Forms/MainForm.resx @@ -127,17 +127,14 @@ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - Magenta - 355, 22 97, 53 - - groupBox2 + + 355, 22 Add [VLESS] server @@ -151,11 +148,8 @@ Restart service - - 184, 6 - - - tsbSubSetting + + menuCopyServer 264, 22 @@ -176,22 +170,25 @@ ImageAboveText + + System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + 语言-[中文简体] NoControl - - Top + + Settings tsbHelp - - 5 - + + 0 + False @@ -213,23 +210,20 @@ 187, 22 + + tsbSetting + toolSslBlank2 - - tsbCheckUpdateN - 355, 22 355, 22 - - Move to top (T) - - - 45, 53 + + tsbCheckUpdateN Only open Http proxy and do nothing @@ -237,11 +231,14 @@ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + menuExport2SubContent + toolStripSeparator7 - Update v2rayCore + Update v2flyCore Magenta @@ -255,8 +252,8 @@ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - menuExport2SubContent + + Fill 52, 17 @@ -264,8 +261,14 @@ Share - - tsbQRCodeSwitch + + Subscriptions + + + 952, 351 + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 355, 22 @@ -273,23 +276,23 @@ Export selected server for client configuration + + tsbRoutingSetting + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Export selected server for server configuration - - ImageAboveText + + 0, 17 952, 56 @@ -306,21 +309,21 @@ menuTcpingServer - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + ImageAboveText System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 356, 600 + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 v2rayN - - 411, 22 - 355, 22 @@ -334,25 +337,19 @@ System.Windows.Forms.ToolStripDropDownButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - 393, 22 + 203, 22 System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - tsbClose - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 187, 22 System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -368,17 +365,17 @@ - iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - wwAADsMBx2+oZAAAATdJREFUWEftloENAiEMRW8ER3AEN9ANdARHcAPdwBF0A91AN9INtC+5JvUCJwWM - mvCTFw3QUiiU65qa/lUTYT6Ato9rJZyERwT6GFNdU+EihCYNwVhsqmgm3AR1fheOAitd9PCfNvp0HDbY - FolV2MmZZCzX9J0FG0TRTlwFdbahIVE7Qe1IR5bYVnXCyr2yO5F1MNUBec25YtjomcCXSxhr9DmrV2Gr - flyL4GSrYcm9tmnEZ7JsAC7DgWr5ydbXA8hOAcVjG8FTD6ocQgvXKrW8MqFWUfc1DAXgmRwVFaJQAHsh - VbYUU87diqWA934sl/TZ7wV2Lesx0gBwsO5/1Sl5PQhLQb+G+E+bfTm9KXsRAVgHrMK+jO9gbNEzzMSh - 6DlM9nANoa+kdCeLXLNLFtc9b2r6EXXdE4e4mdByNuG1AAAAAElFTkSuQmCC + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsIAAA7CARUoSoAAAAE3SURBVFhH7ZaBDQIhDEVvBEdwBDfQDXQER3AD3cARdAPd + QDfSDbQvuSb1AicFjJrwkxcN0FIolOuamv5VE2E+gLaPayWchEcE+hhTXVPhIoQmDcFYbKpoJtwEdX4X + jgIrXfTwnzb6dBw22BaJVdjJmWQs1/SdBRtE0U5cBXW2oSFRO0HtSEeW2FZ1wsq9sjuRdTDVAXnNuWLY + 6JnAl0sYa/Q5q1dhq35ci+Bkq2HJvbZpxGeybAAuw4Fq+cnW1wPITgHFYxvBUw+qHEIL1yq1vDKhVlH3 + NQwF4JkcFRWiUAB7IVW2FFPO3YqlgPd+LJf02e8Fdi3rMdIAcLDuf9UpeT0IS0G/hvhPm305vSl7EQFY + B6zCvozvYGzRM8zEoeg5TPZwDaGvpHQni1yzSxbXPW9q+hF13ROHuJnQcjbhtQAAAABJRU5ErkJggg== - - 411, 22 + + Servers 3 @@ -413,15 +410,15 @@ menuMoveDown + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + Import bulk URL from clipboard - + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 411, 22 - Move to bottom (B) @@ -434,8 +431,8 @@ 48, 53 - - 393, 22 + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 355, 22 @@ -447,7 +444,7 @@ panel1 - 195, 17 + 206, 17 0 @@ -461,17 +458,17 @@ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + menuKeepClear + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - Bottom - - System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Export share URLs to clipboard (Ctrl+C) scMain.Panel2 @@ -510,7 +507,7 @@ tsbAbout - 195, 17 + 206, 17 toolStripSeparator5 @@ -527,6 +524,9 @@ 352, 6 + + tsbPromotion + 256, 331 @@ -539,17 +539,14 @@ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 6, 56 - - - System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 352, 6 groupBox1 - 195, 17 + 206, 17 2 @@ -557,21 +554,15 @@ 125, 22 - - 0, 17 - scMain.Panel2 - 58, 53 + 161, 22 355, 22 - - Not Enabled Http Proxy - 187, 22 @@ -587,14 +578,17 @@ 686 - - ImageAboveText + + tsbTestMe - 265, 164 + 265, 142 - - 355, 22 + + 411, 22 + + + $this System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -605,9 +599,15 @@ Check for updates - + + tsbCheckUpdateXrayCore + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 0, 17 + toolSslServerSpeed @@ -620,24 +620,18 @@ 125, 22 - - Only open Http proxy and clear the proxy settings - scMain + + 203, 22 + HTTP: Remove selected servers (Delete) - - 411, 22 - - - menuKeepPAC - 0 @@ -647,17 +641,11 @@ menuSelectAll - - $this - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Vertical + + Move to top (T) - System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -668,11 +656,11 @@ ImageAboveText - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 1 - - 187, 22 + + Promotion menuAddServers @@ -695,14 +683,17 @@ menuExport2ShareUrl + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + tsMain System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - tsbReload + + SOCKS5: v2rayN (this software) @@ -719,8 +710,8 @@ 0, 66 - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 5 tsbV2rayWebsite @@ -752,8 +743,8 @@ Language-[English] - - menuSpeedServer + + tsbSubSetting 264, 22 @@ -761,6 +752,9 @@ 0 + + Fill + toolSslBlank3 @@ -770,11 +764,14 @@ Add [Trojan] server + + 161, 22 + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - toolStripSeparator11 + + ImageAboveText System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -782,9 +779,6 @@ 0, 417 - - System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - 352, 6 @@ -800,20 +794,17 @@ 1 - - toolSslPacPort - System.Windows.Forms.SplitterPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - Settings + OptionSetting menuMoveTop - - menuKeep + + tsbCheckUpdateCore @@ -832,12 +823,12 @@ ZW0uRHJhd2luZy5HcmFwaGljc1VuaXQBAAAAB3ZhbHVlX18ACAMAAAADAAAACw== - - 952, 351 - menuScanScreen + + ImageAboveText + cmsLv @@ -847,12 +838,15 @@ 6, 56 - - Fill - toolSslBlank1 + + scMain.Panel1 + + + tsbReload + tsbSubUpdate @@ -865,11 +859,8 @@ SPEED Disabled - - PAC: - - - Promotion + + 67, 53 menuSysAgentMode @@ -877,8 +868,8 @@ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 0, 0 + + ImageAboveText Export subscription (base64) share to clipboard @@ -907,17 +898,17 @@ System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - toolStripSeparator13 + + tsbClose - - 1 + + RoutingSetting System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 0, 17 + + tsbQRCodeSwitch 3, 151 @@ -928,8 +919,8 @@ 355, 22 - - Subscriptions + + 6, 56 952, 10 @@ -940,15 +931,9 @@ 264, 22 - - menuNotEnabledHttp - 0 - - Informations - toolStripSeparator8 @@ -964,9 +949,6 @@ Test servers ping (Ctrl+P) - - System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -979,6 +961,15 @@ System.Windows.Forms.ToolStripDropDownButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.ToolStripDropDownButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Top + menuSetDefaultServer @@ -988,11 +979,11 @@ Settings - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 45, 53 - - menuCopyServer + + System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Http proxy @@ -1000,12 +991,6 @@ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 411, 22 - - - Only open PAC and clear the proxy settings - 355, 22 @@ -1051,11 +1036,11 @@ 2 - - menuKeepPACNothing + + toolStripSeparator11 - - Check for updated PAC (need the HTTP proxy are ON) + + Magenta 355, 22 @@ -1063,11 +1048,8 @@ v2rayN Project - - Servers - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 0 System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -1075,8 +1057,8 @@ Select All (Ctrl+A) - - ImageAboveText + + Informations 3 @@ -1084,14 +1066,8 @@ System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - tsbCheckUpdateCore - - - SOCKS5: - - - 33, 17 + + menuSpeedServer 355, 22 @@ -1099,8 +1075,8 @@ menuRemoveServer - - tsbTestMe + + Test current service status 355, 22 @@ -1120,20 +1096,14 @@ Down (D) - - menuCopyPACUrl - 352, 6 Magenta - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Only open PAC and do nothing + + 411, 22 355, 22 @@ -1156,6 +1126,9 @@ 355, 22 + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + groupBox2 @@ -1171,8 +1144,8 @@ 微软雅黑, 8pt - - Export share URLs to clipboard (Ctrl+C) + + Vertical 411, 22 @@ -1189,26 +1162,17 @@ System.Windows.Forms.ToolStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - Simplify PAC (need to set Core route) - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 0 - $this - - Fill + + 0, 0 qrCodeControl - - 264, 22 + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 355, 22 @@ -1225,8 +1189,8 @@ 微软雅黑, 8pt - - tsbPromotion + + groupBox2 ImageAboveText @@ -1234,21 +1198,15 @@ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - menuGlobalPAC - - 393, 22 + 203, 22 - - 356, 600 + + 184, 6 0, 0 - - scMain.Panel1 - Up (U) @@ -1291,9 +1249,6 @@ 946, 22 - - Open PAC and set the system proxy (PAC mode) - 355, 22 @@ -1303,9 +1258,6 @@ menuAddVlessServer - - System.Windows.Forms.StatusStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - 946, 331 @@ -1315,23 +1267,14 @@ Add [Shadowsocks] server - - 390, 6 - 微软雅黑, 8pt 952, 593 - - 411, 22 - - - tsbCheckClearPACList - - - Test current service status + + Scan QR code on the screen toolSslSocksPort @@ -1345,9 +1288,6 @@ menuMoveBottom - - 393, 22 - 1 @@ -1372,26 +1312,17 @@ 6, 56 - - 0, 17 - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - Magenta 52, 53 - - ImageAboveText - - - toolSslPacPortLab + + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -1405,9 +1336,6 @@ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - Scan QR code on the screen - 0, 56 @@ -1429,6 +1357,9 @@ $this + + Update xrayCore + toolStripSeparator2 @@ -1444,9 +1375,6 @@ System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 352, 6 - 952, 176 @@ -1456,15 +1384,9 @@ System.Windows.Forms.ToolStripDropDownButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 0 - Fill - - Copy local PAC URL - 3, 17 @@ -1473,37 +1395,34 @@ - iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - wwAADsMBx2+oZAAAADJJREFUWEftzrENACAIRUFGdVMdTZkAG4zFXfI68kMAAD8ap9lUbpfyaDV19QAA - 8FDEBl3RImu5VcdbAAAAAElFTkSuQmCC + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsIAAA7CARUoSoAAAAAySURBVFhH7c6xDQAgCEVBRnVTHU2ZABuMxV3yOvJDAAA/ + GqfZVG6X8mg1dfUAAPBQxAZd0SJruVXHWwAAAABJRU5ErkJggg== 355, 22 - - 微软雅黑, 8pt - 355, 22 System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tsbCheckUpdatePACList + + System.Windows.Forms.StatusStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 228, 18 + + zh-Hans + True - 108 + 65 137, 17 diff --git a/v2rayN/v2rayN/Forms/MainForm.zh-Hans.resx b/v2rayN/v2rayN/Forms/MainForm.zh-Hans.resx index 83e8f530..ab434f47 100644 --- a/v2rayN/v2rayN/Forms/MainForm.zh-Hans.resx +++ b/v2rayN/v2rayN/Forms/MainForm.zh-Hans.resx @@ -286,6 +286,12 @@ 批量导出订阅内容至剪贴板(多选) + + 73, 53 + + + 服务器 + 301, 600 @@ -306,62 +312,29 @@ ZW0uRHJhd2luZy5HcmFwaGljc1VuaXQBAAAAB3ZhbHVlX18ACAMAAAADAAAACw== - - 73, 53 + + 228, 22 - - 服务器 + + 不改变系统代理 - - 196, 164 + + 228, 22 + + + 自动配置系统代理(全局模式) + + + 228, 22 + + + 清除系统代理 195, 22 - Http代理 - - - 316, 22 - - - 关闭Http代理 - - - 316, 22 - - - 开启Http代理,并自动配置系统代理(全局模式) - - - 316, 22 - - - 开启PAC,并自动配置系统代理(PAC模式) - - - 316, 22 - - - 仅开启Http代理,并清除系统代理 - - - 316, 22 - - - 仅开启PAC,并清除系统代理 - - - 316, 22 - - - 仅开启Http代理,不改变系统代理 - - - 316, 22 - - - 仅开启PAC,不改变系统代理 + 系统代理 195, 22 @@ -381,12 +354,6 @@ 扫描屏幕上的二维码 - - 195, 22 - - - 复制本地PAC网址 - 195, 22 @@ -402,20 +369,17 @@ 退出 + + 196, 142 + 服务器列表 - - 信息 - 网速显示未启用 - - 61, 53 - - - 订阅 + + 信息 124, 22 @@ -429,6 +393,12 @@ 更新订阅 + + 61, 53 + + + 订阅 + 52, 53 @@ -436,10 +406,22 @@ 分享 - 76, 53 + 124, 22 - 参数设置 + 参数设置 + + + 124, 22 + + + 路由设置 + + + 61, 53 + + + 设置 @@ -458,38 +440,35 @@ 重启服务 + + 180, 22 + + + v2rayN + + + 180, 22 + + + v2fly-Core + + + 180, 22 + + + xray-Core + 85, 53 检查更新 - - 223, 22 + + v2rayN 项目 - - v2rayN - - - 223, 22 - - - v2rayCore - - - 223, 22 - - - PAC - - - 220, 6 - - - 223, 22 - - - 简化PAC (请设置Core路由) + + V2Ray 官网 69, 53 @@ -497,12 +476,6 @@ 帮助 - - v2rayN 项目 - - - V2Ray 官网 - 68, 53 diff --git a/v2rayN/v2rayN/Forms/OptionSettingForm.Designer.cs b/v2rayN/v2rayN/Forms/OptionSettingForm.Designer.cs index 62af6048..27a61a74 100644 --- a/v2rayN/v2rayN/Forms/OptionSettingForm.Designer.cs +++ b/v2rayN/v2rayN/Forms/OptionSettingForm.Designer.cs @@ -34,12 +34,8 @@ this.tabPage1 = new System.Windows.Forms.TabPage(); this.groupBox1 = new System.Windows.Forms.GroupBox(); this.chkdefAllowInsecure = new System.Windows.Forms.CheckBox(); - this.label16 = new System.Windows.Forms.Label(); - this.cmblistenerType = new System.Windows.Forms.ComboBox(); this.chksniffingEnabled2 = new System.Windows.Forms.CheckBox(); this.chksniffingEnabled = new System.Windows.Forms.CheckBox(); - this.txtremoteDNS = new System.Windows.Forms.TextBox(); - this.label14 = new System.Windows.Forms.Label(); this.chkmuxEnabled = new System.Windows.Forms.CheckBox(); this.chkAllowIn2 = new System.Windows.Forms.CheckBox(); this.chkudpEnabled2 = new System.Windows.Forms.CheckBox(); @@ -55,21 +51,9 @@ this.txtlocalPort = new System.Windows.Forms.TextBox(); this.label2 = new System.Windows.Forms.Label(); this.tabPage2 = new System.Windows.Forms.TabPage(); - this.groupBox2 = new System.Windows.Forms.GroupBox(); - this.tabControl2 = new System.Windows.Forms.TabControl(); - this.tabPage3 = new System.Windows.Forms.TabPage(); - this.txtUseragent = new System.Windows.Forms.TextBox(); - this.tabPage4 = new System.Windows.Forms.TabPage(); - this.txtUserdirect = new System.Windows.Forms.TextBox(); - this.tabPage5 = new System.Windows.Forms.TabPage(); - this.txtUserblock = new System.Windows.Forms.TextBox(); - this.tabPage8 = new System.Windows.Forms.TabPage(); - this.cmbroutingMode = new System.Windows.Forms.ComboBox(); - this.panel3 = new System.Windows.Forms.Panel(); - this.linkLabelRoutingDoc = new System.Windows.Forms.LinkLabel(); - this.btnSetDefRountingRule = new System.Windows.Forms.Button(); - this.labRoutingTips = new System.Windows.Forms.Label(); - this.cmbdomainStrategy = new System.Windows.Forms.ComboBox(); + this.linkDnsObjectDoc = new System.Windows.Forms.LinkLabel(); + this.txtremoteDNS = new System.Windows.Forms.TextBox(); + this.label14 = new System.Windows.Forms.Label(); this.tabPage6 = new System.Windows.Forms.TabPage(); this.chkKcpcongestion = new System.Windows.Forms.CheckBox(); this.txtKcpwriteBufferSize = new System.Windows.Forms.TextBox(); @@ -90,13 +74,7 @@ this.lbFreshrate = new System.Windows.Forms.Label(); this.chkEnableStatistics = new System.Windows.Forms.CheckBox(); this.chkAllowLANConn = new System.Windows.Forms.CheckBox(); - this.txturlGFWList = new System.Windows.Forms.TextBox(); - this.label13 = new System.Windows.Forms.Label(); this.chkAutoRun = new System.Windows.Forms.CheckBox(); - this.tabPage9 = new System.Windows.Forms.TabPage(); - this.txtuserPacRule = new System.Windows.Forms.TextBox(); - this.panel4 = new System.Windows.Forms.Panel(); - this.label4 = new System.Windows.Forms.Label(); this.panel2 = new System.Windows.Forms.Panel(); this.btnOK = new System.Windows.Forms.Button(); this.panel1 = new System.Windows.Forms.Panel(); @@ -104,56 +82,41 @@ this.tabPage1.SuspendLayout(); this.groupBox1.SuspendLayout(); this.tabPage2.SuspendLayout(); - this.groupBox2.SuspendLayout(); - this.tabControl2.SuspendLayout(); - this.tabPage3.SuspendLayout(); - this.tabPage4.SuspendLayout(); - this.tabPage5.SuspendLayout(); - this.tabPage8.SuspendLayout(); - this.panel3.SuspendLayout(); this.tabPage6.SuspendLayout(); this.tabPage7.SuspendLayout(); - this.tabPage9.SuspendLayout(); - this.panel4.SuspendLayout(); this.panel2.SuspendLayout(); this.SuspendLayout(); // // btnClose // - resources.ApplyResources(this.btnClose, "btnClose"); this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel; + resources.ApplyResources(this.btnClose, "btnClose"); this.btnClose.Name = "btnClose"; this.btnClose.UseVisualStyleBackColor = true; this.btnClose.Click += new System.EventHandler(this.btnClose_Click); // // tabControl1 // - resources.ApplyResources(this.tabControl1, "tabControl1"); this.tabControl1.Controls.Add(this.tabPage1); this.tabControl1.Controls.Add(this.tabPage2); this.tabControl1.Controls.Add(this.tabPage6); this.tabControl1.Controls.Add(this.tabPage7); - this.tabControl1.Controls.Add(this.tabPage9); + resources.ApplyResources(this.tabControl1, "tabControl1"); this.tabControl1.Name = "tabControl1"; this.tabControl1.SelectedIndex = 0; // // tabPage1 // - resources.ApplyResources(this.tabPage1, "tabPage1"); this.tabPage1.Controls.Add(this.groupBox1); + resources.ApplyResources(this.tabPage1, "tabPage1"); this.tabPage1.Name = "tabPage1"; this.tabPage1.UseVisualStyleBackColor = true; // // groupBox1 // - resources.ApplyResources(this.groupBox1, "groupBox1"); this.groupBox1.Controls.Add(this.chkdefAllowInsecure); - this.groupBox1.Controls.Add(this.label16); - this.groupBox1.Controls.Add(this.cmblistenerType); this.groupBox1.Controls.Add(this.chksniffingEnabled2); this.groupBox1.Controls.Add(this.chksniffingEnabled); - this.groupBox1.Controls.Add(this.txtremoteDNS); - this.groupBox1.Controls.Add(this.label14); this.groupBox1.Controls.Add(this.chkmuxEnabled); this.groupBox1.Controls.Add(this.chkAllowIn2); this.groupBox1.Controls.Add(this.chkudpEnabled2); @@ -168,6 +131,7 @@ this.groupBox1.Controls.Add(this.label5); this.groupBox1.Controls.Add(this.txtlocalPort); this.groupBox1.Controls.Add(this.label2); + resources.ApplyResources(this.groupBox1, "groupBox1"); this.groupBox1.Name = "groupBox1"; this.groupBox1.TabStop = false; // @@ -177,26 +141,6 @@ this.chkdefAllowInsecure.Name = "chkdefAllowInsecure"; this.chkdefAllowInsecure.UseVisualStyleBackColor = true; // - // label16 - // - resources.ApplyResources(this.label16, "label16"); - this.label16.Name = "label16"; - // - // cmblistenerType - // - resources.ApplyResources(this.cmblistenerType, "cmblistenerType"); - this.cmblistenerType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.cmblistenerType.FormattingEnabled = true; - this.cmblistenerType.Items.AddRange(new object[] { - resources.GetString("cmblistenerType.Items"), - resources.GetString("cmblistenerType.Items1"), - resources.GetString("cmblistenerType.Items2"), - resources.GetString("cmblistenerType.Items3"), - resources.GetString("cmblistenerType.Items4"), - resources.GetString("cmblistenerType.Items5"), - resources.GetString("cmblistenerType.Items6")}); - this.cmblistenerType.Name = "cmblistenerType"; - // // chksniffingEnabled2 // resources.ApplyResources(this.chksniffingEnabled2, "chksniffingEnabled2"); @@ -209,16 +153,6 @@ this.chksniffingEnabled.Name = "chksniffingEnabled"; this.chksniffingEnabled.UseVisualStyleBackColor = true; // - // txtremoteDNS - // - resources.ApplyResources(this.txtremoteDNS, "txtremoteDNS"); - this.txtremoteDNS.Name = "txtremoteDNS"; - // - // label14 - // - resources.ApplyResources(this.label14, "label14"); - this.label14.Name = "label14"; - // // chkmuxEnabled // resources.ApplyResources(this.chkmuxEnabled, "chkmuxEnabled"); @@ -240,12 +174,12 @@ // // cmbprotocol2 // - resources.ApplyResources(this.cmbprotocol2, "cmbprotocol2"); this.cmbprotocol2.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.cmbprotocol2.FormattingEnabled = true; this.cmbprotocol2.Items.AddRange(new object[] { resources.GetString("cmbprotocol2.Items"), resources.GetString("cmbprotocol2.Items1")}); + resources.ApplyResources(this.cmbprotocol2, "cmbprotocol2"); this.cmbprotocol2.Name = "cmbprotocol2"; // // label3 @@ -260,8 +194,8 @@ // // cmbprotocol // - resources.ApplyResources(this.cmbprotocol, "cmbprotocol"); this.cmbprotocol.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + resources.ApplyResources(this.cmbprotocol, "cmbprotocol"); this.cmbprotocol.FormattingEnabled = true; this.cmbprotocol.Items.AddRange(new object[] { resources.GetString("cmbprotocol.Items"), @@ -287,7 +221,6 @@ // // cmbloglevel // - resources.ApplyResources(this.cmbloglevel, "cmbloglevel"); this.cmbloglevel.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.cmbloglevel.FormattingEnabled = true; this.cmbloglevel.Items.AddRange(new object[] { @@ -296,6 +229,7 @@ resources.GetString("cmbloglevel.Items2"), resources.GetString("cmbloglevel.Items3"), resources.GetString("cmbloglevel.Items4")}); + resources.ApplyResources(this.cmbloglevel, "cmbloglevel"); this.cmbloglevel.Name = "cmbloglevel"; // // label5 @@ -315,127 +249,31 @@ // // tabPage2 // + this.tabPage2.Controls.Add(this.linkDnsObjectDoc); + this.tabPage2.Controls.Add(this.txtremoteDNS); + this.tabPage2.Controls.Add(this.label14); resources.ApplyResources(this.tabPage2, "tabPage2"); - this.tabPage2.Controls.Add(this.groupBox2); this.tabPage2.Name = "tabPage2"; this.tabPage2.UseVisualStyleBackColor = true; // - // groupBox2 + // linkDnsObjectDoc // - resources.ApplyResources(this.groupBox2, "groupBox2"); - this.groupBox2.Controls.Add(this.tabControl2); - this.groupBox2.Controls.Add(this.panel3); - this.groupBox2.Name = "groupBox2"; - this.groupBox2.TabStop = false; + resources.ApplyResources(this.linkDnsObjectDoc, "linkDnsObjectDoc"); + this.linkDnsObjectDoc.Name = "linkDnsObjectDoc"; + this.linkDnsObjectDoc.TabStop = true; // - // tabControl2 + // txtremoteDNS // - resources.ApplyResources(this.tabControl2, "tabControl2"); - this.tabControl2.Controls.Add(this.tabPage3); - this.tabControl2.Controls.Add(this.tabPage4); - this.tabControl2.Controls.Add(this.tabPage5); - this.tabControl2.Controls.Add(this.tabPage8); - this.tabControl2.Name = "tabControl2"; - this.tabControl2.SelectedIndex = 0; + resources.ApplyResources(this.txtremoteDNS, "txtremoteDNS"); + this.txtremoteDNS.Name = "txtremoteDNS"; // - // tabPage3 + // label14 // - resources.ApplyResources(this.tabPage3, "tabPage3"); - this.tabPage3.Controls.Add(this.txtUseragent); - this.tabPage3.Name = "tabPage3"; - this.tabPage3.UseVisualStyleBackColor = true; - // - // txtUseragent - // - resources.ApplyResources(this.txtUseragent, "txtUseragent"); - this.txtUseragent.Name = "txtUseragent"; - // - // tabPage4 - // - resources.ApplyResources(this.tabPage4, "tabPage4"); - this.tabPage4.Controls.Add(this.txtUserdirect); - this.tabPage4.Name = "tabPage4"; - this.tabPage4.UseVisualStyleBackColor = true; - // - // txtUserdirect - // - resources.ApplyResources(this.txtUserdirect, "txtUserdirect"); - this.txtUserdirect.Name = "txtUserdirect"; - // - // tabPage5 - // - resources.ApplyResources(this.tabPage5, "tabPage5"); - this.tabPage5.Controls.Add(this.txtUserblock); - this.tabPage5.Name = "tabPage5"; - this.tabPage5.UseVisualStyleBackColor = true; - // - // txtUserblock - // - resources.ApplyResources(this.txtUserblock, "txtUserblock"); - this.txtUserblock.Name = "txtUserblock"; - // - // tabPage8 - // - resources.ApplyResources(this.tabPage8, "tabPage8"); - this.tabPage8.Controls.Add(this.cmbroutingMode); - this.tabPage8.Name = "tabPage8"; - this.tabPage8.UseVisualStyleBackColor = true; - // - // cmbroutingMode - // - resources.ApplyResources(this.cmbroutingMode, "cmbroutingMode"); - this.cmbroutingMode.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.cmbroutingMode.FormattingEnabled = true; - this.cmbroutingMode.Items.AddRange(new object[] { - resources.GetString("cmbroutingMode.Items"), - resources.GetString("cmbroutingMode.Items1"), - resources.GetString("cmbroutingMode.Items2"), - resources.GetString("cmbroutingMode.Items3")}); - this.cmbroutingMode.Name = "cmbroutingMode"; - // - // panel3 - // - resources.ApplyResources(this.panel3, "panel3"); - this.panel3.Controls.Add(this.linkLabelRoutingDoc); - this.panel3.Controls.Add(this.btnSetDefRountingRule); - this.panel3.Controls.Add(this.labRoutingTips); - this.panel3.Controls.Add(this.cmbdomainStrategy); - this.panel3.Name = "panel3"; - // - // linkLabelRoutingDoc - // - resources.ApplyResources(this.linkLabelRoutingDoc, "linkLabelRoutingDoc"); - this.linkLabelRoutingDoc.Name = "linkLabelRoutingDoc"; - this.linkLabelRoutingDoc.TabStop = true; - this.linkLabelRoutingDoc.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabelRoutingDoc_LinkClicked); - // - // btnSetDefRountingRule - // - resources.ApplyResources(this.btnSetDefRountingRule, "btnSetDefRountingRule"); - this.btnSetDefRountingRule.Name = "btnSetDefRountingRule"; - this.btnSetDefRountingRule.UseVisualStyleBackColor = true; - this.btnSetDefRountingRule.Click += new System.EventHandler(this.btnSetDefRountingRule_Click); - // - // labRoutingTips - // - resources.ApplyResources(this.labRoutingTips, "labRoutingTips"); - this.labRoutingTips.ForeColor = System.Drawing.Color.Brown; - this.labRoutingTips.Name = "labRoutingTips"; - // - // cmbdomainStrategy - // - resources.ApplyResources(this.cmbdomainStrategy, "cmbdomainStrategy"); - this.cmbdomainStrategy.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.cmbdomainStrategy.FormattingEnabled = true; - this.cmbdomainStrategy.Items.AddRange(new object[] { - resources.GetString("cmbdomainStrategy.Items"), - resources.GetString("cmbdomainStrategy.Items1"), - resources.GetString("cmbdomainStrategy.Items2")}); - this.cmbdomainStrategy.Name = "cmbdomainStrategy"; + resources.ApplyResources(this.label14, "label14"); + this.label14.Name = "label14"; // // tabPage6 // - resources.ApplyResources(this.tabPage6, "tabPage6"); this.tabPage6.Controls.Add(this.chkKcpcongestion); this.tabPage6.Controls.Add(this.txtKcpwriteBufferSize); this.tabPage6.Controls.Add(this.label10); @@ -449,6 +287,7 @@ this.tabPage6.Controls.Add(this.label7); this.tabPage6.Controls.Add(this.txtKcpmtu); this.tabPage6.Controls.Add(this.label6); + resources.ApplyResources(this.tabPage6, "tabPage6"); this.tabPage6.Name = "tabPage6"; this.tabPage6.UseVisualStyleBackColor = true; // @@ -520,15 +359,13 @@ // // tabPage7 // - resources.ApplyResources(this.tabPage7, "tabPage7"); this.tabPage7.Controls.Add(this.chkKeepOlderDedupl); this.tabPage7.Controls.Add(this.cbFreshrate); this.tabPage7.Controls.Add(this.lbFreshrate); this.tabPage7.Controls.Add(this.chkEnableStatistics); this.tabPage7.Controls.Add(this.chkAllowLANConn); - this.tabPage7.Controls.Add(this.txturlGFWList); - this.tabPage7.Controls.Add(this.label13); this.tabPage7.Controls.Add(this.chkAutoRun); + resources.ApplyResources(this.tabPage7, "tabPage7"); this.tabPage7.Name = "tabPage7"; this.tabPage7.UseVisualStyleBackColor = true; // @@ -540,9 +377,9 @@ // // cbFreshrate // - resources.ApplyResources(this.cbFreshrate, "cbFreshrate"); this.cbFreshrate.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.cbFreshrate.FormattingEnabled = true; + resources.ApplyResources(this.cbFreshrate, "cbFreshrate"); this.cbFreshrate.Name = "cbFreshrate"; // // lbFreshrate @@ -562,52 +399,17 @@ this.chkAllowLANConn.Name = "chkAllowLANConn"; this.chkAllowLANConn.UseVisualStyleBackColor = true; // - // txturlGFWList - // - resources.ApplyResources(this.txturlGFWList, "txturlGFWList"); - this.txturlGFWList.Name = "txturlGFWList"; - // - // label13 - // - resources.ApplyResources(this.label13, "label13"); - this.label13.Name = "label13"; - // // chkAutoRun // resources.ApplyResources(this.chkAutoRun, "chkAutoRun"); this.chkAutoRun.Name = "chkAutoRun"; this.chkAutoRun.UseVisualStyleBackColor = true; // - // tabPage9 - // - resources.ApplyResources(this.tabPage9, "tabPage9"); - this.tabPage9.Controls.Add(this.txtuserPacRule); - this.tabPage9.Controls.Add(this.panel4); - this.tabPage9.Name = "tabPage9"; - this.tabPage9.UseVisualStyleBackColor = true; - // - // txtuserPacRule - // - resources.ApplyResources(this.txtuserPacRule, "txtuserPacRule"); - this.txtuserPacRule.Name = "txtuserPacRule"; - // - // panel4 - // - resources.ApplyResources(this.panel4, "panel4"); - this.panel4.Controls.Add(this.label4); - this.panel4.Name = "panel4"; - // - // label4 - // - resources.ApplyResources(this.label4, "label4"); - this.label4.ForeColor = System.Drawing.Color.Brown; - this.label4.Name = "label4"; - // // panel2 // - resources.ApplyResources(this.panel2, "panel2"); this.panel2.Controls.Add(this.btnClose); this.panel2.Controls.Add(this.btnOK); + resources.ApplyResources(this.panel2, "panel2"); this.panel2.Name = "panel2"; // // btnOK @@ -638,24 +440,11 @@ this.groupBox1.ResumeLayout(false); this.groupBox1.PerformLayout(); this.tabPage2.ResumeLayout(false); - this.groupBox2.ResumeLayout(false); - this.tabControl2.ResumeLayout(false); - this.tabPage3.ResumeLayout(false); - this.tabPage3.PerformLayout(); - this.tabPage4.ResumeLayout(false); - this.tabPage4.PerformLayout(); - this.tabPage5.ResumeLayout(false); - this.tabPage5.PerformLayout(); - this.tabPage8.ResumeLayout(false); - this.panel3.ResumeLayout(false); - this.panel3.PerformLayout(); + this.tabPage2.PerformLayout(); this.tabPage6.ResumeLayout(false); this.tabPage6.PerformLayout(); this.tabPage7.ResumeLayout(false); this.tabPage7.PerformLayout(); - this.tabPage9.ResumeLayout(false); - this.tabPage9.PerformLayout(); - this.panel4.ResumeLayout(false); this.panel2.ResumeLayout(false); this.ResumeLayout(false); @@ -675,9 +464,7 @@ private System.Windows.Forms.Panel panel1; private System.Windows.Forms.TabControl tabControl1; private System.Windows.Forms.TabPage tabPage1; - private System.Windows.Forms.TabPage tabPage2; private System.Windows.Forms.Panel panel2; - private System.Windows.Forms.GroupBox groupBox2; private System.Windows.Forms.ComboBox cmbprotocol; private System.Windows.Forms.Label label1; private System.Windows.Forms.ComboBox cmbprotocol2; @@ -686,14 +473,6 @@ private System.Windows.Forms.CheckBox chkudpEnabled2; private System.Windows.Forms.CheckBox chkAllowIn2; private System.Windows.Forms.CheckBox chkmuxEnabled; - private System.Windows.Forms.TabControl tabControl2; - private System.Windows.Forms.TabPage tabPage3; - private System.Windows.Forms.TabPage tabPage4; - private System.Windows.Forms.Label labRoutingTips; - private System.Windows.Forms.TextBox txtUseragent; - private System.Windows.Forms.TabPage tabPage5; - private System.Windows.Forms.TextBox txtUserdirect; - private System.Windows.Forms.TextBox txtUserblock; private System.Windows.Forms.TabPage tabPage6; private System.Windows.Forms.TextBox txtKcpmtu; private System.Windows.Forms.Label label6; @@ -710,29 +489,17 @@ private System.Windows.Forms.CheckBox chkKcpcongestion; private System.Windows.Forms.TabPage tabPage7; private System.Windows.Forms.CheckBox chkAutoRun; - private System.Windows.Forms.Label label13; - private System.Windows.Forms.TextBox txturlGFWList; private System.Windows.Forms.CheckBox chkAllowLANConn; - private System.Windows.Forms.TextBox txtremoteDNS; - private System.Windows.Forms.Label label14; - private System.Windows.Forms.Panel panel3; - private System.Windows.Forms.ComboBox cmbdomainStrategy; - private System.Windows.Forms.ComboBox cmbroutingMode; private System.Windows.Forms.CheckBox chksniffingEnabled; private System.Windows.Forms.CheckBox chksniffingEnabled2; - private System.Windows.Forms.Button btnSetDefRountingRule; private System.Windows.Forms.CheckBox chkEnableStatistics; private System.Windows.Forms.ComboBox cbFreshrate; private System.Windows.Forms.Label lbFreshrate; - private System.Windows.Forms.Label label16; - private System.Windows.Forms.ComboBox cmblistenerType; - private System.Windows.Forms.TabPage tabPage8; - private System.Windows.Forms.TabPage tabPage9; - private System.Windows.Forms.TextBox txtuserPacRule; - private System.Windows.Forms.Panel panel4; - private System.Windows.Forms.Label label4; private System.Windows.Forms.CheckBox chkKeepOlderDedupl; - private System.Windows.Forms.LinkLabel linkLabelRoutingDoc; private System.Windows.Forms.CheckBox chkdefAllowInsecure; + private System.Windows.Forms.TabPage tabPage2; + private System.Windows.Forms.LinkLabel linkDnsObjectDoc; + private System.Windows.Forms.TextBox txtremoteDNS; + private System.Windows.Forms.Label label14; } } \ No newline at end of file diff --git a/v2rayN/v2rayN/Forms/OptionSettingForm.cs b/v2rayN/v2rayN/Forms/OptionSettingForm.cs index 78d4eeff..d1262268 100644 --- a/v2rayN/v2rayN/Forms/OptionSettingForm.cs +++ b/v2rayN/v2rayN/Forms/OptionSettingForm.cs @@ -4,6 +4,7 @@ using System.Windows.Forms; using v2rayN.Handler; using v2rayN.Base; using v2rayN.HttpProxyHandler; +using v2rayN.Mode; namespace v2rayN.Forms { @@ -18,13 +19,9 @@ namespace v2rayN.Forms { InitBase(); - InitRouting(); - InitKCP(); InitGUI(); - - InitUserPAC(); } /// @@ -68,25 +65,10 @@ namespace v2rayN.Forms //remoteDNS txtremoteDNS.Text = config.remoteDNS; - cmblistenerType.SelectedIndex = (int)config.listenerType; chkdefAllowInsecure.Checked = config.defAllowInsecure; } - /// - /// 初始化路由设置 - /// - private void InitRouting() - { - //路由 - cmbdomainStrategy.Text = config.domainStrategy; - int.TryParse(config.routingMode, out int routingMode); - cmbroutingMode.SelectedIndex = routingMode; - - txtUseragent.Text = Utils.List2String(config.useragent, true); - txtUserdirect.Text = Utils.List2String(config.userdirect, true); - txtUserblock.Text = Utils.List2String(config.userblock, true); - } /// /// 初始化KCP设置 @@ -110,16 +92,10 @@ namespace v2rayN.Forms //开机自动启动 chkAutoRun.Checked = Utils.IsAutoRun(); - //自定义GFWList - txturlGFWList.Text = config.urlGFWList; - chkAllowLANConn.Checked = config.allowLANConn; chkEnableStatistics.Checked = config.enableStatistics; chkKeepOlderDedupl.Checked = config.keepOlderDedupl; - - - ComboItem[] cbSource = new ComboItem[] { new ComboItem{ID = (int)Global.StatisticsFreshRate.quick, Text = UIRes.I18N("QuickFresh")}, @@ -145,12 +121,6 @@ namespace v2rayN.Forms } } - - private void InitUserPAC() - { - txtuserPacRule.Text = Utils.List2String(config.userPacRule, true); - } - private void btnOK_Click(object sender, EventArgs e) { if (SaveBase() != 0) @@ -158,10 +128,6 @@ namespace v2rayN.Forms return; } - if (SaveRouting() != 0) - { - return; - } if (SaveKCP() != 0) { @@ -173,11 +139,6 @@ namespace v2rayN.Forms return; } - if (SaveUserPAC() != 0) - { - return; - } - if (ConfigHandler.SaveConfig(ref config) == 0) { this.DialogResult = DialogResult.OK; @@ -265,36 +226,12 @@ namespace v2rayN.Forms //remoteDNS config.remoteDNS = txtremoteDNS.Text.TrimEx(); - config.listenerType = (ListenerType)Enum.ToObject(typeof(ListenerType), cmblistenerType.SelectedIndex); config.defAllowInsecure = chkdefAllowInsecure.Checked; return 0; } - /// - /// 保存路由设置 - /// - /// - private int SaveRouting() - { - //路由 - string domainStrategy = cmbdomainStrategy.Text; - string routingMode = cmbroutingMode.SelectedIndex.ToString(); - - string useragent = txtUseragent.Text.TrimEx(); - string userdirect = txtUserdirect.Text.TrimEx(); - string userblock = txtUserblock.Text.TrimEx(); - - config.domainStrategy = domainStrategy; - config.routingMode = routingMode; - - config.useragent = Utils.String2List(useragent); - config.userdirect = Utils.String2List(userdirect); - config.userblock = Utils.String2List(userblock); - - return 0; - } /// /// 保存KCP设置 @@ -340,9 +277,6 @@ namespace v2rayN.Forms //开机自动启动 Utils.SetAutoRun(chkAutoRun.Checked); - //自定义GFWList - config.urlGFWList = txturlGFWList.Text.TrimEx(); - config.allowLANConn = chkAllowLANConn.Checked; bool lastEnableStatistics = config.enableStatistics; @@ -350,27 +284,10 @@ namespace v2rayN.Forms config.statisticsFreshRate = (int)cbFreshrate.SelectedValue; config.keepOlderDedupl = chkKeepOlderDedupl.Checked; - //if(lastEnableStatistics != config.enableStatistics) - //{ - // /// https://stackoverflow.com/questions/779405/how-do-i-restart-my-c-sharp-winform-application - // // Shut down the current app instance. - // Application.Exit(); - - // // Restart the app passing "/restart [processId]" as cmd line args - // Process.Start(Application.ExecutablePath, "/restart " + Process.GetCurrentProcess().Id); - //} - return 0; - } - - private int SaveUserPAC() - { - string userPacRule = txtuserPacRule.Text.TrimEx(); - userPacRule = userPacRule.Replace("\"", ""); - - config.userPacRule = Utils.String2List(userPacRule); return 0; } + private void btnClose_Click(object sender, EventArgs e) { this.DialogResult = DialogResult.Cancel; @@ -388,75 +305,9 @@ namespace v2rayN.Forms chkudpEnabled2.Enabled = blAllow2; } - private void btnSetDefRountingRule_Click(object sender, EventArgs e) + private void linkDnsObjectDoc_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { - txtUseragent.Text = Utils.GetEmbedText(Global.CustomRoutingFileName + Global.agentTag); - txtUserdirect.Text = Utils.GetEmbedText(Global.CustomRoutingFileName + Global.directTag); - txtUserblock.Text = Utils.GetEmbedText(Global.CustomRoutingFileName + Global.blockTag); - cmbroutingMode.SelectedIndex = 3; - - List lstUrl = new List - { - Global.CustomRoutingListUrl + Global.agentTag, - Global.CustomRoutingListUrl + Global.directTag, - Global.CustomRoutingListUrl + Global.blockTag - }; - - List lstTxt = new List - { - txtUseragent, - txtUserdirect, - txtUserblock - }; - - for (int k = 0; k < lstUrl.Count; k++) - { - TextBox txt = lstTxt[k]; - DownloadHandle downloadHandle = new DownloadHandle(); - downloadHandle.UpdateCompleted += (sender2, args) => - { - if (args.Success) - { - string result = args.Msg; - if (Utils.IsNullOrEmpty(result)) - { - return; - } - txt.Text = result; - } - else - { - AppendText(false, args.Msg); - } - }; - downloadHandle.Error += (sender2, args) => - { - AppendText(true, args.GetException().Message); - }; - - downloadHandle.WebDownloadString(lstUrl[k]); - } - } - void AppendText(bool notify, string text) - { - labRoutingTips.Text = text; - } - - private void linkLabelRoutingDoc_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - System.Diagnostics.Process.Start("https://www.v2fly.org/config/routing.html"); - } - } - - class ComboItem - { - public int ID - { - get; set; - } - public string Text - { - get; set; + System.Diagnostics.Process.Start("https://www.v2fly.org/config/dns.html#dnsobject"); } } } diff --git a/v2rayN/v2rayN/Forms/OptionSettingForm.resx b/v2rayN/v2rayN/Forms/OptionSettingForm.resx index 2d85641a..f0757e7d 100644 --- a/v2rayN/v2rayN/Forms/OptionSettingForm.resx +++ b/v2rayN/v2rayN/Forms/OptionSettingForm.resx @@ -117,34 +117,992 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 355, 16 + + + 75, 23 + + + 7 + + + &Cancel + + + btnClose + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panel2 + + + 0 + + + True + + + + NoControl + + + 15, 192 + + + 102, 16 + + + 35 + + + allowInsecure + + + chkdefAllowInsecure + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 0 + + + True + + + NoControl + + + 468, 60 + + + 120, 16 + + + 32 + + + Turn on Sniffing + + + False + + + chksniffingEnabled2 + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 1 + + + True + + + NoControl + + + 468, 27 + + + 120, 16 + + + 31 + + + Turn on Sniffing + + + chksniffingEnabled + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 2 + + + True + + + 15, 129 + + + 174, 16 + + + 20 + + + Turn on Mux Multiplexing + + + chkmuxEnabled + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 3 + True - + + 15, 63 + + + 120, 16 + + + 19 + + + listening port 2 + + + False + + + chkAllowIn2 + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 4 + + + True + + + 369, 62 + + + 84, 16 + + + 18 + + + Enable UDP + + + False + + + chkudpEnabled2 + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 5 + + + socks + + + http + + + 257, 60 + + + 97, 20 + + + 17 + + + False + + + cmbprotocol2 + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 6 + + + True + + + 206, 64 + + + 53, 12 + + + 16 + + + protocol + + + False + + + label3 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 7 + + + 124, 60 + + + 78, 21 + + + 14 + + + False + + + txtlocalPort2 + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + + groupBox1 + + + 8 + + + False + + + socks + + + http + + + 257, 25 + + + 97, 20 + + + 12 + + + cmbprotocol + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 9 + + + True + + + 206, 29 + + + 53, 12 + + 11 - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + protocol - - groupBox2 + + label1 - - 2 + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 30, 176 + + groupBox1 + + + 10 + + + True + + + 369, 27 + + + 84, 16 + + + 10 + + + Enable UDP + + + chkudpEnabled + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 11 + + + True + + + 15, 160 + + + 126, 16 + + + 9 Record local logs - - 634, 460 + + chklogEnabled + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 12 + + + debug + + + info + + + warning + + + error + + + none + + + 257, 158 + + + 97, 20 + + + 6 + + + cmbloglevel + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 13 + + + True + + + 193, 162 + + + 59, 12 + + + 8 + + + Log level + + + label5 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 14 + + + 124, 25 + + + 78, 21 + + + 3 + + + txtlocalPort + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 15 + + + True + + + 33, 29 + + + 89, 12 + + + 2 + + + Listening port + + + label2 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 16 + + + Fill + + + 3, 3 + + + 648, 421 + + + 6 + + + groupBox1 + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage1 + + + 0 + + + 4, 22 + + + 3, 3, 3, 3 + + + 654, 427 + + + 0 + + + Core: basic settings + + + tabPage1 + + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabControl1 + + + 0 + + + True + + + NoControl + + + 342, 17 + + + 0, 0, 0, 0 + + + 107, 12 + + + 40 + + + Support DnsObject + + + linkDnsObjectDoc + + + System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage2 + + + 0 + + + 8, 41 + + + True + + + 638, 356 + + + 39 + + + txtremoteDNS + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage2 + + + 1 + + + True + + + NoControl + + + 8, 17 + + + 281, 12 + + + 38 + + + Custom DNS (multiple, separated by commas (,)) + + + label14 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage2 + + + 2 + + + 4, 22 + + + 654, 427 + + + 4 + + + Core: DNS settings + + + tabPage2 + + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabControl1 + + + 1 + + + True + + + 20, 143 + + + 84, 16 + + + 20 + + + congestion + + + chkKcpcongestion + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage6 + + + 0 + + + 345, 100 + + + 94, 21 + + + 15 + + + txtKcpwriteBufferSize + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage6 + + + 1 + + + True + + + 236, 104 + + + 95, 12 + + + 14 + + + writeBufferSize + + + label10 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage6 + + + 2 + + + 111, 100 + + + 94, 21 + + + 13 + + + txtKcpreadBufferSize + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage6 + + + 3 + + + True + + + 18, 104 + + + 89, 12 + + + 12 + + + readBufferSize + + + label11 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage6 + + + 4 + + + 345, 62 + + + 94, 21 + + + 11 + + + txtKcpdownlinkCapacity + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage6 + + + 5 + + + True + + + 236, 66 + + + 101, 12 + + + 10 + + + downlinkCapacity + + + label8 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage6 + + + 6 + + + 111, 62 + + + 94, 21 + + + 9 + + + txtKcpuplinkCapacity + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage6 + + + 7 + + + True + + + 18, 66 + + + 89, 12 + + + 8 + + + uplinkCapacity + + + label9 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage6 + + + 8 + + + 345, 24 + + + 94, 21 + + + 7 + + + txtKcptti + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage6 + + + 9 + + + True + + + 236, 28 + + + 23, 12 + + + 6 + + + tti + + + label7 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage6 + + + 10 + + + 111, 24 + + + 94, 21 + + + 5 + + + txtKcpmtu + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage6 + + + 11 + + + True + + + 18, 28 + + + 23, 12 + + + 4 + + + mtu + + + label6 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage6 12 @@ -152,1922 +1110,340 @@ 4, 22 - - txtKcpwriteBufferSize - - - txtuserPacRule - - - 2 - - - False - - - 18 - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabControl1 - - - groupBox1 - - - 5 - - - 94, 21 - - - 9 - - - groupBox1 - - - tabPage9 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - linkLabelRoutingDoc - - - 468, 60 - - - - Top - - - 102, 16 - - - 6 - - - txtKcptti - - - tabPage3 - - - 4, 22 - - - cmblistenerType - - - 0 - - - 634, 460 - - - 0 - - - 111, 100 - - - True - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 3, 3 - - - 598, 16 - - - Core: basic settings - - - True - - - 120, 16 - - - 281, 12 - - - panel3 - - - True - - - tti - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 84, 16 - - - groupBox1 - - - 65, 12 - - - 628, 454 - - - tabPage7 - - - Only open PAC, do not automatically configure PAC - - - 12 - - - 662, 60 - - - 20 - - - http - - - 7 - - - chkdefAllowInsecure - - - 648, 573 - - - 206, 64 - - - 95, 12 - - - tabPage6 - - - 14 - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 15, 63 - - - tabControl2 - - - 16 - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Fill - - - Enable UDP - - - 94, 21 - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Fill - - - &Cancel - - - label10 - - - 648, 573 - - - Vertical - - - groupBox1 - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 0 - - - 1 - - - Bypassing the LAN address - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Bypassing LAN and mainland address - - - Bypass mainland address - - - Top - - - 12 - - - txtKcpmtu - - - lbFreshrate - - - 1 - - - label11 - - - 29 - - - 1 - - - NoControl - - - Turn on Sniffing - - - Only open Http proxy, do not automatically configure proxy server (direct mode) - - - False - - - 4 - - - tabPage6 - - - False - - - tabControl2 - - - 1 - - - $this - - - 7 - - - 3 - - - 4 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 0 - - - readBufferSize - - - 0 - - - tabPage6 - - - 3 - - - True - - - 18 - - - True - - - Fill - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - True - - - congestion - - - NoControl - - - groupBox1 - - - panel3 - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + 3, 3, 3, 3 - - 89, 12 - - - info - - - txtUseragent - - - 1 - - - tabPage7 - - - v2rayN settings - - - 20 - - - groupBox1 - - - 16 - - - Not Enabled Http Proxy - - - 14 - - - 32 - - - 628, 454 - - - 6, 12 - - - groupBox1 - - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - txtKcpdownlinkCapacity - - - 198, 16 - - - Automatically start at system startup - - - 3, 3, 3, 3 - - - 1 - - - Http proxy - - - 4 - - - groupBox1 - - - tabPage6 - - - 355, 16 - - - 3, 3, 3, 3 - - - 97, 20 - - - 3 - - - 662, 605 - - - 33, 29 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 78, 21 - - - 5, 45 - - - Custom DNS (multiple, separated by commas (,)) - - - tabControl1 - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 598, 16 - - - v2rayN.Forms.BaseForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null - - - warning - - - groupBox1 - - - 0 - - - tabPage7 - - - Statistics freshrate - - - label5 - - - 120, 16 - - - 20 - - - 89, 12 - - - Only open Http proxy and do nothing - - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 18, 66 - - - 20, 143 - - - 11 - - - 4, 4, 4, 4 - - - tabPage6 - - - btnClose - - - Turn on Sniffing - - - groupBox1 - - - 18, 28 - - - 30 - - - 34 - - - 20 - - - 29 - - - 0 - - - 21, 17 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 2 - - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 14 - - - 19 - - - 4, 22 - - - *Set user pac rules, separated by commas (,) - - - True - - - chksniffingEnabled - - - 6 - - - 174, 16 - - - 16 - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 18, 104 - - - tabPage2 - - - NoControl - - - 97, 20 - - - socks - - - tabPage5 - - - 576, 16 - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 464, 20 - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabPage9 - - - True - - - tabPage6 - - - *Set the rules, separated by commas (,); support Domain (pure string / regular / subdomain) and IP - - - tabPage3 - - - 30 - - - 53, 12 - - - 17 - - - label8 - - - 468, 27 - - - label13 - - - chkAutoRun - - - tabControl2 - - - 654, 579 - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 345, 62 - - - 15 - - - 12 - - - 1 - - - chkudpEnabled - - - True - - - 33, 253 - - - tabPage1 - - - 5 - - - tabPage6 - - - 2 - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 5 - - - btnSetDefRountingRule - - - True - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 32 - - - label1 - - - 84, 16 - - - tabPage8 - - - True - - - panel4 - - - label7 - - - allowInsecure - - - txtlocalPort - - - True - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabPage7 - - - 3, 17 - - - 3, 40 - - - labRoutingTips - - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 3, 3, 3, 3 - - - 124, 25 - - - protocol - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabControl2 - - - Top, Right - - - Turn on Mux Multiplexing - - - True - - - 23, 12 - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 555, 100 - - - socks - - - 0 - - - 3, 3 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - chkAllowLANConn - - - 84, 16 - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabControl1 - - - tabControl1 - - - True - - - tabPage6 - - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 15, 38 - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 3 - - - 10 - - - 369, 62 - - - 13 - - - 1.Proxy Domain or IP - - - groupBox1 - - - panel3 - - - NoControl - - - 654, 579 - - - chkEnableStatistics - - - 14 - - - 8 - - - 7 - - - http - - - 53, 12 - - - 193, 162 - - - True - - - 2 - - - 0 - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabPage6 - - - label2 - - - 165, 20 - - - False - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 0 - - - 3, 3 - - - 9 - - - groupBox1 - - - 4.Pre-defined rules - - - 101, 12 - - - 3 - - - 12 - - - 431, 12 - - - Domain strategy - - - cmbprotocol - - - 648, 37 - - - True - - - Enable Statistics (Realtime netspeed and traffic records. Require restart the v2rayN client) - - - System.Windows.Forms.TabControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 4 - - - Listening port - - - Vertical - - - Fill - - - 1 - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Vertical - - - 1 - - - 28 - - - 257, 60 - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 94, 21 - - - True - - - cmbprotocol2 - - - Open Http proxy and automatically configure proxy server (global mode) - - - groupBox2 - - - chkKeepOlderDedupl - - - 15, 129 - - - 255, 20 - - - mtu - - - True - - - True - - - True - - - chkKcpcongestion - - - 1 - - - 0 - - - 257, 25 - - - 3, 84 - - - groupBox1 - - - Top - - - listening port 2 - - - 97, 20 - - - chkAllowIn2 - - - tabPage2 - - - System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - True - - - True - - - False - - - 3 - - - 33 - - - 4, 22 - - - 9 - - - 541, 100 - - - Core: KCP settings - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - error - - - 15, 160 - - - True - - - 59, 12 - - - 5, 14 - - - groupBox1 - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 634, 460 - - - 12 - - - 120, 16 - - - 662, 10 - - - txtlocalPort2 - - - Only open PAC and do nothing - - - True - - - Fill - - - groupBox1 - - - 654, 579 - - - 7 - - - 27 - - - 10 - - - False - - - Vertical - - - 206, 29 - - - 8 - - - txtUserdirect - - - chkudpEnabled2 - - - 0 - - - 0 - - - 648, 536 - - - Allow connections from the LAN - - - 161, 84 - - - panel3 - - - 0 - - - tabPage6 - - - tabControl2 - - - 30, 87 - - - txtKcpreadBufferSize - - - 4 - - - panel2 - - - 3 - - - 8 - - - 35 - - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - User PAC settings - - - 95, 12 - - - tabPage7 - - - 10 - - - none - - - Log level - - - tabControl1 - - - protocol - - - 6 - - - tabPage4 - - - NoControl + + 654, 427 2 - - AsIs - - - 15, 62 - - - 7 - - - tabPage7 - - - 642, 486 - - - 4, 22 - - - 58, 20 - - - groupBox1 - - - 1 - - - 42, 98 - - - 13 - - - 13 - - - 2 - - - downlinkCapacity - - - True - - - 78, 21 - - - tabPage7 - - - True - - - 19 - - - System.Windows.Forms.TabControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - True - - - cmbroutingMode - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 1 - - - 23, 12 - - - True - - - 8 - - - True - - - 3, 3, 3, 3 - - - Custom GFWList address (please fill in the blank without customization) - - - 345, 100 - - - panel3 - - - 75, 23 - - - 654, 579 - - - 10 - - - 204, 16 - - - 17 - - - 628, 454 - - - debug - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 6 - - - 1 - - - txtUserblock - - - 229, 23 - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabPage1 - - - 15 - - - 2 - - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 0 - - - 11 - - - 18 - - - 126, 16 - - - 345, 24 - - - NoControl - - - 4, 22 - - - cmbdomainStrategy - - - False - - - 257, 158 - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - &OK - - - 10 - - - 634, 460 - - - panel2 - - - txtKcpuplinkCapacity - - - 115, 10 - - - System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabPage4 - - - chklogEnabled - - - chksniffingEnabled2 - - - tabPage7 - - - 642, 67 - - - 0 - - - 4, 22 - - - True - - - System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabPage5 - - - 9 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - IPIfNonMatch - - - groupBox1 - - - 4, 22 - - - 23 - - - 3.Block Domain or IP - - - label3 - - - 6 - - - 236, 66 - - - tabPage7 - - - $this - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - True - - - $this - - - 8 - - - txtremoteDNS - - - 3, 3 - - - 0, 615 - - - 19 - - - 33 - - - 94, 21 - - - 4, 22 - - - writeBufferSize - - - 11 - - - System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 89, 12 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 0 - - - 31 - - - 369, 27 - - - 4 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Fill + + Core: KCP settings tabPage6 - - groupBox1 - - - groupBox1 - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - panel4 - - - True - - - 29 - - - Fill - - - True - - - 3, 3 - - - OptionSettingForm - - - 124, 94 - - - Core: Routing settings - - - 13 - - - tabPage8 - - - 2 - - - 236, 104 - - - 5 - - - Open PAC and automatically configure PAC (PAC mode) - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - NoControl - - - tabPage9 - - - 94, 21 - - - 75, 23 - - - 15, 16 - - - 33, 277 - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 0, 0, 0, 0 - - - 662, 675 - - - uplinkCapacity - - - IPOnDemand - - - NoControl - - - True - - - 6 - - - 1 - - - 0 - - - Settings - - - 0 - - - 3, 3, 3, 3 - - - 3, 3 - - - 32, 205 - - - cmbloglevel - - - 111, 62 - - + System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - label4 - - - System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - label16 - - - btnOK - - - Set default custom routing rules - - - tabPage6 - - - txturlGFWList - - - chkmuxEnabled - - - 654, 579 - - - tabPage6 - - + tabControl1 - - 0 + + 2 + + + True + + + NoControl 15, 110 - - 5, 11 + + 198, 16 - - 0 - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 0, 0 - - - Enable UDP - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 3, 3, 3, 3 - - - groupBox1 - - - 19 - - - 2.Direct Domain or IP - - - 267, 16 - - - Global - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Fill - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 9 - - - 0 - - - 322, 10 - - - 15, 192 - - - 0 - - - 94, 21 - - - 3 + + 33 Keep older when deduplication - - 3, 3, 3, 3 + + chkKeepOlderDedupl - - 236, 28 + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - Bottom + + tabPage7 - - 3 - - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + 0 - - groupBox1 + + 161, 84 - - 125, 12 + + 58, 20 - - 3, 3, 3, 3 - - - 11 - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 124, 60 + + 32 cbFreshrate + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage7 + + + 1 + + + True + + + NoControl + + + 30, 87 + + + 125, 12 + + + 30 + + + Statistics freshrate + + + lbFreshrate + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage7 + + + 2 + + + True + + + NoControl + + + 15, 62 + + + 576, 16 + + + 29 + + + Enable Statistics (Realtime netspeed and traffic records. Require restart the v2rayN client) + + + chkEnableStatistics + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage7 + + + 3 + + + True + + + 15, 38 + + + 204, 16 + + + 29 + + + Allow connections from the LAN + + + chkAllowLANConn + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage7 + + + 4 + + + True + + + 15, 16 + 246, 16 - - tabPage6 + + 23 - - label6 + + Automatically start at system startup - - 111, 24 + + chkAutoRun - - panel2 + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 21 + + tabPage7 - - label9 + + 5 + + + 4, 22 + + + 3, 3, 3, 3 + + + 654, 427 + + + 3 + + + v2rayN settings + + + tabPage7 + + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabControl1 + + + 3 + + + Fill 0, 10 + + 662, 453 + + + 10 + + + tabControl1 + + + System.Windows.Forms.TabControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 0 + + + 267, 16 + + + 75, 23 + + + 8 + + + &OK + + + btnOK + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panel2 + + + 1 + + + Bottom + + + 0, 463 + + + 662, 60 + + + 11 + + + panel2 + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 1 + + + Top + + + 0, 0 + + + 662, 10 + + + 9 + panel1 + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + 2 - - label14 - True + + zh-Hans + + + 6, 12 + + + 662, 523 + + + 4, 4, 4, 4 + + + Settings + + + OptionSettingForm + + + v2rayN.Forms.BaseForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/v2rayN/v2rayN/Forms/OptionSettingForm.zh-Hans.resx b/v2rayN/v2rayN/Forms/OptionSettingForm.zh-Hans.resx index 81c0d92c..0618fb5f 100644 --- a/v2rayN/v2rayN/Forms/OptionSettingForm.zh-Hans.resx +++ b/v2rayN/v2rayN/Forms/OptionSettingForm.zh-Hans.resx @@ -120,43 +120,19 @@ 取消(&C) - - Core:基础设置 - + + 161, 12 + + + 支持填写DnsObject,JSON格式 + - 222, 16 + 336, 16 底层传输安全选tls时,默认跳过证书验证(allowInsecure) - - 53, 12 - - - Http代理 - - - 关闭Http代理 - - - 开启Http代理,并自动配置系统代理(全局模式) - - - 开启PAC,并自动配置系统代理(PAC模式) - - - 仅开启Http代理,并清除系统代理 - - - 仅开启PAC,并清除系统代理 - - - 仅开启Http代理,不改变系统代理 - - - 仅开启PAC,不改变系统代理 - 96, 16 @@ -226,107 +202,27 @@ 本地监听端口 + + 648, 437 + + + 654, 443 + + + Core:基础设置 + + + 654, 443 + - Core:路由设置 + Core:DNS设置 - - 3, 89 - - - 642, 481 - - - 634, 455 - - - 1.代理的Domain或IP - - - 628, 449 - - - 634, 455 - - - 2.直连的Domain或IP - - - 628, 449 - - - 634, 455 - - - 3.阻止的Domain或IP - - - 628, 449 - - - 634, 455 - - - 4.预定义规则 - - - 全局 - - - 绕过局域网地址 - - - 绕过大陆地址 - - - 绕过局域网及大陆地址 - - - 19, 26 - - - 244, 20 - - - 642, 72 - - - 77, 12 - - - 域名解析策略 - - - - NoControl - - - 351, 14 - - - 201, 23 - - - 一键设置默认自定义路由规则 - - - - True - - - 5, 49 - - - 383, 12 - - - *设置的规则,用逗号(,)隔开;支持Domain(纯字符串/正则/子域名)和IP + + 654, 443 Core:KCP设置 - - v2rayN设置 - 156, 16 @@ -351,27 +247,30 @@ 允许来自局域网的连接 - - 227, 12 - - - 自定义GFWList地址(不需自定义请填空白) - 180, 16 开机自动启动(可能会不成功) - - 用户PAC设置 + + 654, 443 - - *设置用户PAC规则,用逗号(,)隔开 + + v2rayN设置 + + + 662, 469 确定(&O) + + 0, 479 + + + 662, 539 + 参数设置 diff --git a/v2rayN/v2rayN/Forms/RoutingSettingControl.Designer.cs b/v2rayN/v2rayN/Forms/RoutingSettingControl.Designer.cs new file mode 100644 index 00000000..56ae1ccf --- /dev/null +++ b/v2rayN/v2rayN/Forms/RoutingSettingControl.Designer.cs @@ -0,0 +1,159 @@ +namespace v2rayN.Forms +{ + partial class RoutingSettingControl + { + /// + /// 必需的设计器变量。 + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 清理所有正在使用的资源。 + /// + /// 如果应释放托管资源,为 true;否则为 false。 + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region 组件设计器生成的代码 + + /// + /// 设计器支持所需的方法 - 不要修改 + /// 使用代码编辑器修改此方法的内容。 + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(RoutingSettingControl)); + this.groupBox2 = new System.Windows.Forms.GroupBox(); + this.btnExpand = new System.Windows.Forms.Button(); + this.label4 = new System.Windows.Forms.Label(); + this.label1 = new System.Windows.Forms.Label(); + this.cmbroutingMode = new System.Windows.Forms.ComboBox(); + this.cmbOutboundTag = new System.Windows.Forms.ComboBox(); + this.btnRemove = new System.Windows.Forms.Button(); + this.txtUserRule = new System.Windows.Forms.TextBox(); + this.txtRemarks = new System.Windows.Forms.TextBox(); + this.label2 = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.groupBox2.SuspendLayout(); + this.SuspendLayout(); + // + // groupBox2 + // + resources.ApplyResources(this.groupBox2, "groupBox2"); + this.groupBox2.Controls.Add(this.btnExpand); + this.groupBox2.Controls.Add(this.label4); + this.groupBox2.Controls.Add(this.label1); + this.groupBox2.Controls.Add(this.cmbroutingMode); + this.groupBox2.Controls.Add(this.cmbOutboundTag); + this.groupBox2.Controls.Add(this.btnRemove); + this.groupBox2.Controls.Add(this.txtUserRule); + this.groupBox2.Controls.Add(this.txtRemarks); + this.groupBox2.Controls.Add(this.label2); + this.groupBox2.Controls.Add(this.label3); + this.groupBox2.Name = "groupBox2"; + this.groupBox2.TabStop = false; + // + // btnExpand + // + resources.ApplyResources(this.btnExpand, "btnExpand"); + this.btnExpand.Name = "btnExpand"; + this.btnExpand.UseVisualStyleBackColor = true; + this.btnExpand.Click += new System.EventHandler(this.btnExpand_Click); + // + // label4 + // + resources.ApplyResources(this.label4, "label4"); + this.label4.Name = "label4"; + // + // label1 + // + resources.ApplyResources(this.label1, "label1"); + this.label1.Name = "label1"; + // + // cmbroutingMode + // + resources.ApplyResources(this.cmbroutingMode, "cmbroutingMode"); + this.cmbroutingMode.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cmbroutingMode.FormattingEnabled = true; + this.cmbroutingMode.Items.AddRange(new object[] { + resources.GetString("cmbroutingMode.Items"), + resources.GetString("cmbroutingMode.Items1"), + resources.GetString("cmbroutingMode.Items2"), + resources.GetString("cmbroutingMode.Items3"), + resources.GetString("cmbroutingMode.Items4")}); + this.cmbroutingMode.Name = "cmbroutingMode"; + // + // cmbOutboundTag + // + resources.ApplyResources(this.cmbOutboundTag, "cmbOutboundTag"); + this.cmbOutboundTag.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cmbOutboundTag.FormattingEnabled = true; + this.cmbOutboundTag.Items.AddRange(new object[] { + resources.GetString("cmbOutboundTag.Items"), + resources.GetString("cmbOutboundTag.Items1"), + resources.GetString("cmbOutboundTag.Items2")}); + this.cmbOutboundTag.Name = "cmbOutboundTag"; + // + // btnRemove + // + resources.ApplyResources(this.btnRemove, "btnRemove"); + this.btnRemove.Name = "btnRemove"; + this.btnRemove.UseVisualStyleBackColor = true; + this.btnRemove.Click += new System.EventHandler(this.btnRemove_Click); + // + // txtUserRule + // + resources.ApplyResources(this.txtUserRule, "txtUserRule"); + this.txtUserRule.Name = "txtUserRule"; + this.txtUserRule.Leave += new System.EventHandler(this.txtRemarks_Leave); + // + // txtRemarks + // + resources.ApplyResources(this.txtRemarks, "txtRemarks"); + this.txtRemarks.Name = "txtRemarks"; + this.txtRemarks.Leave += new System.EventHandler(this.txtRemarks_Leave); + // + // label2 + // + resources.ApplyResources(this.label2, "label2"); + this.label2.Name = "label2"; + // + // label3 + // + resources.ApplyResources(this.label3, "label3"); + this.label3.Name = "label3"; + // + // RoutingSettingControl + // + resources.ApplyResources(this, "$this"); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.groupBox2); + this.Name = "RoutingSettingControl"; + this.Load += new System.EventHandler(this.RoutingSettingControl_Load); + this.groupBox2.ResumeLayout(false); + this.groupBox2.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.GroupBox groupBox2; + private System.Windows.Forms.TextBox txtUserRule; + private System.Windows.Forms.TextBox txtRemarks; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Button btnRemove; + private System.Windows.Forms.ComboBox cmbOutboundTag; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.ComboBox cmbroutingMode; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.Button btnExpand; + } +} diff --git a/v2rayN/v2rayN/Forms/RoutingSettingControl.cs b/v2rayN/v2rayN/Forms/RoutingSettingControl.cs new file mode 100644 index 00000000..2637aacf --- /dev/null +++ b/v2rayN/v2rayN/Forms/RoutingSettingControl.cs @@ -0,0 +1,76 @@ +using System; +using System.Windows.Forms; +using v2rayN.Base; +using v2rayN.Mode; + +namespace v2rayN.Forms +{ + public partial class RoutingSettingControl : UserControl + { + public event ChangeEventHandler OnButtonClicked; + + + public RoutingItem routingItem + { + get; set; + } + + public RoutingSettingControl() + { + InitializeComponent(); + } + + private void RoutingSettingControl_Load(object sender, EventArgs e) + { + BindingSub(); + } + + private void BindingSub() + { + if (routingItem != null) + { + txtRemarks.Text = routingItem.remarks.ToString(); + cmbOutboundTag.Text = routingItem.outboundTag; + int.TryParse(routingItem.routingMode, out int routingMode); + cmbroutingMode.SelectedIndex = routingMode; + txtUserRule.Text = Utils.List2String(routingItem.userRules, true); + } + } + private void EndBindingSub() + { + if (routingItem != null) + { + routingItem.remarks = txtRemarks.Text.TrimEx(); + routingItem.outboundTag = cmbOutboundTag.Text; + routingItem.routingMode = cmbroutingMode.SelectedIndex.ToString(); + routingItem.userRules = Utils.String2List(txtUserRule.Text); + } + } + private void txtRemarks_Leave(object sender, EventArgs e) + { + EndBindingSub(); + } + + private void btnRemove_Click(object sender, EventArgs e) + { + if (routingItem != null) + { + routingItem.remarks = string.Empty; + } + + OnButtonClicked?.Invoke(sender, e); + } + + private void btnExpand_Click(object sender, EventArgs e) + { + if (this.Height > 200) + { + this.Height = 160; + } + else + { + this.Height = 500; + } + } + } +} diff --git a/v2rayN/v2rayN/Forms/RoutingSettingControl.resx b/v2rayN/v2rayN/Forms/RoutingSettingControl.resx new file mode 100644 index 00000000..7c33a91b --- /dev/null +++ b/v2rayN/v2rayN/Forms/RoutingSettingControl.resx @@ -0,0 +1,456 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Pre-defined + + + + NoControl + + + + 733, 164 + + + 119, 20 + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 9 + + + 127, 53 + + + 75, 23 + + + 127, 87 + + + Remove + + + txtRemarks + + + + 24 + + + 23 + + + RoutingSettingControl + + + 162, 21 + + + label1 + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 28 + + + 7 + + + proxy + + + 77, 12 + + + 362, 21 + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 6, 12 + + + label3 + + + 127, 21 + + + True + + + 0 + + + btnExpand + + + groupBox2 + + + 12, 87 + + + 2 + + + cmbroutingMode + + + 255, 20 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Global + + + 71, 12 + + + Bypass mainland address + + + Bypassing the LAN address + + + 4 + + + 640, 21 + + + Fill + + + NoControl + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 25 + + + groupBox2 + + + NoControl + + + 47, 12 + + + True + + + btnRemove + + + 0, 0 + + + 29 + + + label4 + + + NoControl + + + Out Tag + + + 27 + + + block + + + direct + + + 75, 23 + + + NoControl + + + 26 + + + 5 + + + groupBox2 + + + 6 + + + Expand + + + 1 + + + groupBox2 + + + groupBox2 + + + 588, 68 + + + True + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + True + + + Bypassing LAN and mainland address + + + NoControl + + + label2 + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 733, 164 + + + 8 + + + Top, Bottom, Left, Right + + + 12, 57 + + + cmbOutboundTag + + + 11 + + + Remarks + + + groupBox2 + + + 3 + + + True + + + 12, 25 + + + groupBox2 + + + 301, 26 + + + 47, 12 + + + Rule + + + 10 + + + Domain or IP + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + txtUserRule + + + 0 + + + System.Windows.Forms.UserControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 0 + + + $this + + + Use custom Domain or IP + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 640, 46 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 10 + + + True + + + zh-Hans + + \ No newline at end of file diff --git a/v2rayN/v2rayN/Forms/RoutingSettingControl.zh-Hans.resx b/v2rayN/v2rayN/Forms/RoutingSettingControl.zh-Hans.resx new file mode 100644 index 00000000..d95c2560 --- /dev/null +++ b/v2rayN/v2rayN/Forms/RoutingSettingControl.zh-Hans.resx @@ -0,0 +1,184 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + 619, 46 + + + 扩大 + + + 53, 12 + + + 出口标签 + + + 65, 12 + + + 预定义规则 + + + 使用自定义域名或IP + + + 全局 + + + 绕过局域网 + + + 绕过大陆地址 + + + 绕过局域网及大陆地址 + + + 619, 20 + + + 移除 + + + 567, 64 + + + 29, 12 + + + 备注 + + + 53, 12 + + + 域名或IP + + + 709, 160 + + + 规则 + + + 709, 160 + + \ No newline at end of file diff --git a/v2rayN/v2rayN/Forms/RoutingSettingForm.Designer.cs b/v2rayN/v2rayN/Forms/RoutingSettingForm.Designer.cs new file mode 100644 index 00000000..5a87e09a --- /dev/null +++ b/v2rayN/v2rayN/Forms/RoutingSettingForm.Designer.cs @@ -0,0 +1,151 @@ +namespace v2rayN.Forms +{ + partial class RoutingSettingForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(RoutingSettingForm)); + this.btnClose = new System.Windows.Forms.Button(); + this.panCon = new System.Windows.Forms.Panel(); + this.panel2 = new System.Windows.Forms.Panel(); + this.btnAdd = new System.Windows.Forms.Button(); + this.btnOK = new System.Windows.Forms.Button(); + this.btnSetDefRountingRule = new System.Windows.Forms.Button(); + this.panel1 = new System.Windows.Forms.Panel(); + this.labRoutingTips = new System.Windows.Forms.Label(); + this.linkLabelRoutingDoc = new System.Windows.Forms.LinkLabel(); + this.cmbdomainStrategy = new System.Windows.Forms.ComboBox(); + this.panel2.SuspendLayout(); + this.panel1.SuspendLayout(); + this.SuspendLayout(); + // + // btnClose + // + this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel; + resources.ApplyResources(this.btnClose, "btnClose"); + this.btnClose.Name = "btnClose"; + this.btnClose.UseVisualStyleBackColor = true; + this.btnClose.Click += new System.EventHandler(this.btnClose_Click); + // + // panCon + // + resources.ApplyResources(this.panCon, "panCon"); + this.panCon.Name = "panCon"; + // + // panel2 + // + this.panel2.Controls.Add(this.btnAdd); + this.panel2.Controls.Add(this.btnClose); + this.panel2.Controls.Add(this.btnOK); + resources.ApplyResources(this.panel2, "panel2"); + this.panel2.Name = "panel2"; + // + // btnAdd + // + resources.ApplyResources(this.btnAdd, "btnAdd"); + this.btnAdd.Name = "btnAdd"; + this.btnAdd.UseVisualStyleBackColor = true; + this.btnAdd.Click += new System.EventHandler(this.btnAdd_Click); + // + // btnOK + // + resources.ApplyResources(this.btnOK, "btnOK"); + this.btnOK.Name = "btnOK"; + this.btnOK.UseVisualStyleBackColor = true; + this.btnOK.Click += new System.EventHandler(this.btnOK_Click); + // + // btnSetDefRountingRule + // + resources.ApplyResources(this.btnSetDefRountingRule, "btnSetDefRountingRule"); + this.btnSetDefRountingRule.Name = "btnSetDefRountingRule"; + this.btnSetDefRountingRule.UseVisualStyleBackColor = true; + this.btnSetDefRountingRule.Click += new System.EventHandler(this.btnSetDefRountingRule_Click); + // + // panel1 + // + this.panel1.Controls.Add(this.btnSetDefRountingRule); + this.panel1.Controls.Add(this.labRoutingTips); + this.panel1.Controls.Add(this.linkLabelRoutingDoc); + this.panel1.Controls.Add(this.cmbdomainStrategy); + resources.ApplyResources(this.panel1, "panel1"); + this.panel1.Name = "panel1"; + // + // labRoutingTips + // + this.labRoutingTips.ForeColor = System.Drawing.Color.Brown; + resources.ApplyResources(this.labRoutingTips, "labRoutingTips"); + this.labRoutingTips.Name = "labRoutingTips"; + // + // linkLabelRoutingDoc + // + resources.ApplyResources(this.linkLabelRoutingDoc, "linkLabelRoutingDoc"); + this.linkLabelRoutingDoc.Name = "linkLabelRoutingDoc"; + this.linkLabelRoutingDoc.TabStop = true; + this.linkLabelRoutingDoc.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabelRoutingDoc_LinkClicked); + // + // cmbdomainStrategy + // + this.cmbdomainStrategy.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cmbdomainStrategy.FormattingEnabled = true; + this.cmbdomainStrategy.Items.AddRange(new object[] { + resources.GetString("cmbdomainStrategy.Items"), + resources.GetString("cmbdomainStrategy.Items1"), + resources.GetString("cmbdomainStrategy.Items2")}); + resources.ApplyResources(this.cmbdomainStrategy, "cmbdomainStrategy"); + this.cmbdomainStrategy.Name = "cmbdomainStrategy"; + // + // RoutingSettingForm + // + resources.ApplyResources(this, "$this"); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.CancelButton = this.btnClose; + this.Controls.Add(this.panCon); + this.Controls.Add(this.panel1); + this.Controls.Add(this.panel2); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.Name = "RoutingSettingForm"; + this.Load += new System.EventHandler(this.RoutingSettingForm_Load); + this.panel2.ResumeLayout(false); + this.panel1.ResumeLayout(false); + this.panel1.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + private System.Windows.Forms.Button btnClose; + private System.Windows.Forms.Button btnOK; + private System.Windows.Forms.Panel panel2; + private System.Windows.Forms.Button btnAdd; + private System.Windows.Forms.Panel panCon; + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.Label labRoutingTips; + private System.Windows.Forms.LinkLabel linkLabelRoutingDoc; + private System.Windows.Forms.ComboBox cmbdomainStrategy; + private System.Windows.Forms.Button btnSetDefRountingRule; + } +} \ No newline at end of file diff --git a/v2rayN/v2rayN/Forms/RoutingSettingForm.cs b/v2rayN/v2rayN/Forms/RoutingSettingForm.cs new file mode 100644 index 00000000..0b145a04 --- /dev/null +++ b/v2rayN/v2rayN/Forms/RoutingSettingForm.cs @@ -0,0 +1,143 @@ +using System; +using System.Collections.Generic; +using System.Windows.Forms; +using v2rayN.Handler; +using v2rayN.Mode; + +namespace v2rayN.Forms +{ + public partial class RoutingSettingForm : BaseForm + { + List lstControls = new List(); + + public RoutingSettingForm() + { + InitializeComponent(); + } + + private void RoutingSettingForm_Load(object sender, EventArgs e) + { + cmbdomainStrategy.Text = config.domainStrategy; + + if (config.routingItem == null) + { + config.routingItem = new List(); + } + + RefreshSubsView(); + } + + /// + /// 刷新列表 + /// + private void RefreshSubsView() + { + panCon.Controls.Clear(); + lstControls.Clear(); + + for (int k = config.routingItem.Count - 1; k >= 0; k--) + { + RoutingItem item = config.routingItem[k]; + if (Utils.IsNullOrEmpty(item.remarks)) + { + config.routingItem.RemoveAt(k); + } + } + + foreach (RoutingItem item in config.routingItem) + { + RoutingSettingControl control = new RoutingSettingControl(); + control.OnButtonClicked += Control_OnButtonClicked; + control.routingItem = item; + control.Dock = DockStyle.Top; + + panCon.Controls.Add(control); + panCon.Controls.SetChildIndex(control, 0); + + lstControls.Add(control); + } + } + + private void Control_OnButtonClicked(object sender, EventArgs e) + { + RefreshSubsView(); + } + + private void btnOK_Click(object sender, EventArgs e) + { + if (config.routingItem.Count <= 0) + { + AddSub("proxy", ""); + } + if (ConfigHandler.SaveRoutingItem(ref config) == 0) + { + this.DialogResult = DialogResult.OK; + } + else + { + UI.ShowWarning(UIRes.I18N("OperationFailed")); + } + + } + + private void btnClose_Click(object sender, EventArgs e) + { + this.DialogResult = DialogResult.Cancel; + } + + private void btnAdd_Click(object sender, EventArgs e) + { + AddSub("proxy", ""); + + RefreshSubsView(); + } + + + private void AddSub(string outboundTag, string userRule, string routingMode = "0") + { + RoutingItem RoutingItem = new RoutingItem + { + remarks = outboundTag, + routingMode = routingMode, + outboundTag = outboundTag, + userRules = Utils.String2List(userRule) + + }; + config.routingItem.Add(RoutingItem); + } + + + private void btnSetDefRountingRule_Click(object sender, EventArgs e) + { + config.routingItem.Clear(); + + List lstTag = new List + { + Global.agentTag, + Global.directTag, + Global.blockTag + }; + for (int k = 0; k < lstTag.Count; k++) + { + DownloadHandle downloadHandle = new DownloadHandle(); + + string result = downloadHandle.WebDownloadStringSync(Global.CustomRoutingListUrl + lstTag[k]); + if (Utils.IsNullOrEmpty(result)) + { + result = Utils.GetEmbedText(Global.CustomRoutingFileName + lstTag[k]); + } + AddSub(lstTag[k], result); + } + + AddSub(Global.directTag, "", "4"); + AddSub(Global.agentTag, "", "0"); + + RefreshSubsView(); + } + + private void linkLabelRoutingDoc_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + System.Diagnostics.Process.Start("https://www.v2fly.org/config/routing.html"); + } + } +} diff --git a/v2rayN/v2rayN/Forms/RoutingSettingForm.resx b/v2rayN/v2rayN/Forms/RoutingSettingForm.resx new file mode 100644 index 00000000..9c08b219 --- /dev/null +++ b/v2rayN/v2rayN/Forms/RoutingSettingForm.resx @@ -0,0 +1,420 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + NoControl + + + + 568, 17 + + + 75, 23 + + + + 4 + + + &Cancel + + + btnClose + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panel2 + + + 1 + + + True + + + Fill + + + 0, 68 + + + 765, 545 + + + 10 + + + panCon + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 0 + + + NoControl + + + 47, 17 + + + 75, 23 + + + 6 + + + &Add + + + btnAdd + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panel2 + + + 0 + + + NoControl + + + 475, 17 + + + 75, 23 + + + 5 + + + &OK + + + btnOK + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panel2 + + + 2 + + + Bottom + + + 0, 613 + + + 765, 60 + + + 7 + + + panel2 + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 2 + + + Top, Right + + + True + + + NoControl + + + 319, 17 + + + 229, 23 + + + 19 + + + Set default custom routing rules + + + btnSetDefRountingRule + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panel1 + + + 0 + + + NoControl + + + 10, 42 + + + 598, 16 + + + 13 + + + *Set the rules, separated by commas (,); support Domain (pure string / regular / subdomain) and IP + + + labRoutingTips + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panel1 + + + 1 + + + True + + + NoControl + + + 6, 21 + + + 0, 0, 0, 0 + + + 95, 12 + + + 19 + + + Domain strategy + + + linkLabelRoutingDoc + + + System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panel1 + + + 2 + + + AsIs + + + IPIfNonMatch + + + IPOnDemand + + + 116, 17 + + + 165, 20 + + + 16 + + + cmbdomainStrategy + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panel1 + + + 3 + + + Top + + + 0, 0 + + + 765, 68 + + + 11 + + + panel1 + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 1 + + + True + + + 6, 12 + + + 765, 673 + + + Routing Settings + + + RoutingSettingForm + + + v2rayN.Forms.BaseForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + + \ No newline at end of file diff --git a/v2rayN/v2rayN/Forms/RoutingSettingForm.zh-Hans.resx b/v2rayN/v2rayN/Forms/RoutingSettingForm.zh-Hans.resx new file mode 100644 index 00000000..dc3bb7b1 --- /dev/null +++ b/v2rayN/v2rayN/Forms/RoutingSettingForm.zh-Hans.resx @@ -0,0 +1,145 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 取消(&C) + + + 添加(&A) + + + 确定(&O) + + + 一键设置默认自定义路由规则 + + + *设置的规则,用逗号(,)隔开;支持Domain(纯字符串/正则/子域名)和IP + + + + 77, 12 + + + 域名解析策略 + + + 路由设置 + + \ No newline at end of file diff --git a/v2rayN/v2rayN/Forms/SubSettingControl.Designer.cs b/v2rayN/v2rayN/Forms/SubSettingControl.Designer.cs index 30fcadf5..b23cac62 100644 --- a/v2rayN/v2rayN/Forms/SubSettingControl.Designer.cs +++ b/v2rayN/v2rayN/Forms/SubSettingControl.Designer.cs @@ -29,27 +29,38 @@ private void InitializeComponent() { System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SubSettingControl)); - this.groupBox2 = new System.Windows.Forms.GroupBox(); + this.grbMain = new System.Windows.Forms.GroupBox(); + this.btnShare = new System.Windows.Forms.Button(); this.chkEnabled = new System.Windows.Forms.CheckBox(); this.btnRemove = new System.Windows.Forms.Button(); this.txtUrl = new System.Windows.Forms.TextBox(); this.txtRemarks = new System.Windows.Forms.TextBox(); this.label2 = new System.Windows.Forms.Label(); this.label3 = new System.Windows.Forms.Label(); - this.groupBox2.SuspendLayout(); + this.picQRCode = new System.Windows.Forms.PictureBox(); + this.grbMain.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.picQRCode)).BeginInit(); this.SuspendLayout(); // - // groupBox2 + // grbMain // - resources.ApplyResources(this.groupBox2, "groupBox2"); - this.groupBox2.Controls.Add(this.chkEnabled); - this.groupBox2.Controls.Add(this.btnRemove); - this.groupBox2.Controls.Add(this.txtUrl); - this.groupBox2.Controls.Add(this.txtRemarks); - this.groupBox2.Controls.Add(this.label2); - this.groupBox2.Controls.Add(this.label3); - this.groupBox2.Name = "groupBox2"; - this.groupBox2.TabStop = false; + resources.ApplyResources(this.grbMain, "grbMain"); + this.grbMain.Controls.Add(this.btnShare); + this.grbMain.Controls.Add(this.chkEnabled); + this.grbMain.Controls.Add(this.btnRemove); + this.grbMain.Controls.Add(this.txtUrl); + this.grbMain.Controls.Add(this.txtRemarks); + this.grbMain.Controls.Add(this.label2); + this.grbMain.Controls.Add(this.label3); + this.grbMain.Name = "grbMain"; + this.grbMain.TabStop = false; + // + // btnShare + // + resources.ApplyResources(this.btnShare, "btnShare"); + this.btnShare.Name = "btnShare"; + this.btnShare.UseVisualStyleBackColor = true; + this.btnShare.Click += new System.EventHandler(this.btnShare_Click); // // chkEnabled // @@ -87,27 +98,37 @@ resources.ApplyResources(this.label3, "label3"); this.label3.Name = "label3"; // + // picQRCode + // + resources.ApplyResources(this.picQRCode, "picQRCode"); + this.picQRCode.Name = "picQRCode"; + this.picQRCode.TabStop = false; + // // SubSettingControl // resources.ApplyResources(this, "$this"); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.Controls.Add(this.groupBox2); + this.Controls.Add(this.picQRCode); + this.Controls.Add(this.grbMain); this.Name = "SubSettingControl"; this.Load += new System.EventHandler(this.SubSettingControl_Load); - this.groupBox2.ResumeLayout(false); - this.groupBox2.PerformLayout(); + this.grbMain.ResumeLayout(false); + this.grbMain.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.picQRCode)).EndInit(); this.ResumeLayout(false); } #endregion - private System.Windows.Forms.GroupBox groupBox2; + private System.Windows.Forms.GroupBox grbMain; private System.Windows.Forms.TextBox txtUrl; private System.Windows.Forms.TextBox txtRemarks; private System.Windows.Forms.Label label2; private System.Windows.Forms.Label label3; private System.Windows.Forms.Button btnRemove; private System.Windows.Forms.CheckBox chkEnabled; + private System.Windows.Forms.Button btnShare; + private System.Windows.Forms.PictureBox picQRCode; } } diff --git a/v2rayN/v2rayN/Forms/SubSettingControl.cs b/v2rayN/v2rayN/Forms/SubSettingControl.cs index 9836be5d..652e389e 100644 --- a/v2rayN/v2rayN/Forms/SubSettingControl.cs +++ b/v2rayN/v2rayN/Forms/SubSettingControl.cs @@ -1,6 +1,7 @@ using System; using System.Windows.Forms; using v2rayN.Base; +using v2rayN.Handler; using v2rayN.Mode; namespace v2rayN.Forms @@ -11,7 +12,10 @@ namespace v2rayN.Forms public event ChangeEventHandler OnButtonClicked; - public SubItem subItem { get; set; } + public SubItem subItem + { + get; set; + } public SubSettingControl() { @@ -20,6 +24,7 @@ namespace v2rayN.Forms private void SubSettingControl_Load(object sender, EventArgs e) { + this.Height = grbMain.Height; BindingSub(); } @@ -56,5 +61,23 @@ namespace v2rayN.Forms OnButtonClicked?.Invoke(sender, e); } + + private void btnShare_Click(object sender, EventArgs e) + { + if (this.Height <= grbMain.Height) + { + if (Utils.IsNullOrEmpty(subItem.url)) + { + picQRCode.Image = null; + return; + } + picQRCode.Image = QRCodeHelper.GetQRCode(subItem.url); + this.Height = grbMain.Height + 200; + } + else + { + this.Height = grbMain.Height; + } + } } } diff --git a/v2rayN/v2rayN/Forms/SubSettingControl.resx b/v2rayN/v2rayN/Forms/SubSettingControl.resx index a5dec524..fdeefb50 100644 --- a/v2rayN/v2rayN/Forms/SubSettingControl.resx +++ b/v2rayN/v2rayN/Forms/SubSettingControl.resx @@ -118,123 +118,270 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - 6, 12 - - - zh-Hans - - - True - - - 584, 119 - - - NoControl - - - 484, 21 - - - 75, 23 - - - 24 - - - &Remove - - - True - - - NoControl - - - 406, 23 - - - 60, 16 - - - 25 - - - Enable - - - Bottom - - - 0, 9 - - - 584, 110 - - - 10 - - - Subscription details - - - True - NoControl - - 12, 25 + + grbMain - - 47, 12 + + + 60, 16 - - 10 + + txtUrl - - Remarks + + 6 - - True + + picQRCode - - NoControl + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 12, 55 + + Remove - - 83, 12 + + txtRemarks - - 0 + + + 24 - - Address (url) + + grbMain - - 127, 21 + + SubSettingControl - - 265, 21 + + Zoom - - 11 + + Subscription details - - 127, 55 + + 26 + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 True - - 432, 46 + + grbMain + + + 434, 21 + + + 83, 12 + + + 232, 21 + + + Top + + + 6, 12 + + + label3 + + + 127, 21 + + + True + + + Share + + + 619, 200 + + + 1 + + + 12, 55 + + + NoControl + + + Fill + + + $this + + + 25 + + + 127, 55 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 3 + + + grbMain + + + 5 + + + 47, 12 + + + btnRemove + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Enable + + + chkEnabled + + + 4 + + + NoControl + + + 0, 110 + + + 75, 23 + + + 2 + + + grbMain + + + 25 + + + 10 23 + + grbMain + + + grbMain + + + 368, 23 + + + True + + + True + + + 0, 0 + + + $this + + + 0 + + + NoControl + + + label2 + + + 619, 110 + + + btnShare + + + 0 + + + NoControl + + + 619, 310 + + + 11 + + + Remarks + + + 0 + + + NoControl + + + 473, 46 + + + 12, 25 + + + 75, 23 + + + grbMain + + + 1 + + + Address (url) + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.UserControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 525, 21 + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 10 + + + True + + + zh-Hans + \ No newline at end of file diff --git a/v2rayN/v2rayN/Forms/SubSettingControl.zh-Hans.resx b/v2rayN/v2rayN/Forms/SubSettingControl.zh-Hans.resx index 95e5122f..6979e601 100644 --- a/v2rayN/v2rayN/Forms/SubSettingControl.zh-Hans.resx +++ b/v2rayN/v2rayN/Forms/SubSettingControl.zh-Hans.resx @@ -117,18 +117,18 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 移除 + + 分享 + 48, 16 启用 - - 订阅详情 + + 移除 29, 12 @@ -142,4 +142,7 @@ 地址 (url) + + 订阅详情 + \ No newline at end of file diff --git a/v2rayN/v2rayN/Forms/SubSettingForm.resx b/v2rayN/v2rayN/Forms/SubSettingForm.resx index e2001bb5..0f5ca1f3 100644 --- a/v2rayN/v2rayN/Forms/SubSettingForm.resx +++ b/v2rayN/v2rayN/Forms/SubSettingForm.resx @@ -118,19 +118,61 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + NoControl + + + 448, 17 + + + 75, 23 + - - 6, 12 + + 4 - - 581, 629 + + &Cancel - + + btnClose + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panel2 + + + 1 + + True - - Subscription settings + + Fill + + + 0, 0 + + + 614, 569 + + + 10 + + + panCon + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 0 NoControl @@ -147,20 +189,17 @@ &Add - - NoControl + + btnAdd - - 448, 17 + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 75, 23 + + panel2 - - 4 - - - &Cancel + + 0 NoControl @@ -177,20 +216,17 @@ &OK - - True + + btnOK - - Fill + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 0, 0 + + panel2 - - 581, 569 - - - 10 + + 2 Bottom @@ -199,9 +235,39 @@ 0, 569 - 581, 60 + 614, 60 7 + + panel2 + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 1 + + + True + + + 6, 12 + + + 614, 629 + + + Subscription settings + + + SubSettingForm + + + v2rayN.Forms.BaseForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/v2rayN/v2rayN/Global.cs b/v2rayN/v2rayN/Global.cs index 55eeea14..7c96ee51 100644 --- a/v2rayN/v2rayN/Global.cs +++ b/v2rayN/v2rayN/Global.cs @@ -23,7 +23,6 @@ namespace v2rayN /// public const string CustomRoutingListUrl = @"https://raw.githubusercontent.com/2dust/v2rayCustomRoutingList/master/"; - public const string GFWLIST_URL = "https://raw.githubusercontent.com/gfwlist/gfwlist/master/gfwlist.txt"; /// /// PromotionUrl @@ -56,10 +55,7 @@ namespace v2rayN /// v2ray配置Httpresponse文件名 /// public const string v2raySampleHttpresponseFileName = "v2rayN.Sample.SampleHttpresponse.txt"; - /// - /// 空白的pac文件 - /// - public const string BlankPacFileName = "v2rayN.Sample.BlankPac.txt"; + public const string CustomRoutingFileName = "v2rayN.Sample.custom_routing_"; @@ -97,7 +93,7 @@ namespace v2rayN /// /// 阻止 tag值 /// - public const string blockTag = "block"; + public const string blockTag = "block"; /// /// @@ -161,11 +157,6 @@ namespace v2rayN /// public const string trojanProtocolLite = "trojan"; - /// - /// pac - /// - public const string pacFILE = "pac.txt"; - /// /// email /// @@ -231,13 +222,6 @@ namespace v2rayN get; set; } - /// - /// PAC端口 - /// - public static int pacPort - { - get; set; - } /// /// diff --git a/v2rayN/v2rayN/Handler/ConfigHandler.cs b/v2rayN/v2rayN/Handler/ConfigHandler.cs index 37a9878e..ddce8665 100644 --- a/v2rayN/v2rayN/Handler/ConfigHandler.cs +++ b/v2rayN/v2rayN/Handler/ConfigHandler.cs @@ -86,22 +86,10 @@ namespace v2rayN.Handler if (Utils.IsNullOrEmpty(config.domainStrategy)) { config.domainStrategy = "IPIfNonMatch"; - } - if (Utils.IsNullOrEmpty(config.routingMode)) + } + if (config.routingItem == null) { - config.routingMode = "0"; - } - if (config.useragent == null) - { - config.useragent = new List(); - } - if (config.userdirect == null) - { - config.userdirect = new List(); - } - if (config.userblock == null) - { - config.userblock = new List(); + config.routingItem = new List(); } //kcp if (config.kcpItem == null) @@ -139,10 +127,6 @@ namespace v2rayN.Handler { config.speedPingTestUrl = Global.SpeedPingTestUrl; } - if (Utils.IsNullOrEmpty(config.urlGFWList)) - { - config.urlGFWList = Global.GFWLIST_URL; - } //if (Utils.IsNullOrEmpty(config.remoteDNS)) //{ // config.remoteDNS = "1.1.1.1"; @@ -152,10 +136,6 @@ namespace v2rayN.Handler { config.subItem = new List(); } - if (config.userPacRule == null) - { - config.userPacRule = new List(); - } if (config == null || config.index < 0 @@ -299,7 +279,8 @@ namespace v2rayN.Handler path = config.vmess[index].path, streamSecurity = config.vmess[index].streamSecurity, allowInsecure = config.vmess[index].allowInsecure, - configType = config.vmess[index].configType + configType = config.vmess[index].configType, + flow = config.vmess[index].flow }; config.vmess.Insert(index + 1, vmessItem); // 插入到下一项 @@ -1080,5 +1061,28 @@ namespace v2rayN.Handler return 0; } + + /// + /// SaveRoutingItem + /// + /// + /// + public static int SaveRoutingItem(ref Config config) + { + if (config.routingItem == null || config.routingItem.Count <= 0) + { + return -1; + } + + foreach (RoutingItem sub in config.routingItem) + { + + } + Global.reloadV2ray = true; + + ToJsonFile(config); + return 0; + } + } } diff --git a/v2rayN/v2rayN/Handler/DownloadHandle.cs b/v2rayN/v2rayN/Handler/DownloadHandle.cs index 67a936f2..369fbc72 100644 --- a/v2rayN/v2rayN/Handler/DownloadHandle.cs +++ b/v2rayN/v2rayN/Handler/DownloadHandle.cs @@ -54,8 +54,10 @@ namespace v2rayN.Handler private readonly string nLatestUrl = "https://github.com/2dust/v2rayN/releases/latest"; private const string nUrl = "https://github.com/2dust/v2rayN/releases/download/{0}/v2rayN.zip"; - private readonly string coreLatestUrl = "https://github.com/v2fly/v2ray-core/releases/latest"; - private const string coreUrl = "https://github.com/v2fly/v2ray-core/releases/download/{0}/v2ray-windows-{1}.zip"; + private readonly string v2flyCoreLatestUrl = "https://github.com/v2fly/v2ray-core/releases/latest"; + private const string v2flyCoreUrl = "https://github.com/v2fly/v2ray-core/releases/download/{0}/v2ray-windows-{1}.zip"; + private readonly string xrayCoreLatestUrl = "https://github.com/xtls/xray-core/releases/latest"; + private const string xrayCoreUrl = "https://github.com/xtls/xray-core/releases/download/{0}/xray-windows-{1}.zip"; public async void CheckUpdateAsync(string type) { @@ -67,9 +69,13 @@ namespace v2rayN.Handler HttpClient httpClient = new HttpClient(webRequestHandler); string url; - if (type == "Core") + if (type == "v2fly") { - url = coreLatestUrl; + url = v2flyCoreLatestUrl; + } + else if (type == "xray") + { + url = xrayCoreLatestUrl; } else if (type == "v2rayN") { @@ -94,11 +100,23 @@ namespace v2rayN.Handler /// /// 获取V2RayCore版本 /// - public string getV2rayVersion() + public string getCoreVersion(string type) { try { - string filePath = Utils.GetPath("V2ray.exe"); + var core = string.Empty; + var match = string.Empty; + if (type == "v2fly") + { + core = "v2ray.exe"; + match = "V2Ray"; + } + else if (type == "xray") + { + core = "xray.exe"; + match = "Xray"; + } + string filePath = Utils.GetPath(core); if (!File.Exists(filePath)) { string msg = string.Format(UIRes.I18N("NotFoundCore"), @"https://github.com/v2fly/v2ray-core/releases"); @@ -117,10 +135,9 @@ namespace v2rayN.Handler p.Start(); p.WaitForExit(5000); string echo = p.StandardOutput.ReadToEnd(); - string version = Regex.Match(echo, "V2Ray ([0-9.]+) \\(").Groups[1].Value; + string version = Regex.Match(echo, $"{match} ([0-9.]+) \\(").Groups[1].Value; return version; } - catch (Exception ex) { Utils.SaveLog(ex.Message, ex); @@ -136,12 +153,19 @@ namespace v2rayN.Handler string curVersion; string message; string url; - if (type == "Core") + if (type == "v2fly") { - curVersion = "v" + getV2rayVersion(); + curVersion = "v" + getCoreVersion(type); message = string.Format(UIRes.I18N("IsLatestCore"), curVersion); string osBit = Environment.Is64BitProcess ? "64" : "32"; - url = string.Format(coreUrl, version, osBit); + url = string.Format(v2flyCoreUrl, version, osBit); + } + else if (type == "xray") + { + curVersion = "v" + getCoreVersion(type); + message = string.Format(UIRes.I18N("IsLatestCore"), curVersion); + string osBit = Environment.Is64BitProcess ? "64" : "32"; + url = string.Format(xrayCoreUrl, version, osBit); } else if (type == "v2rayN") { @@ -313,47 +337,24 @@ namespace v2rayN.Handler } } - #endregion - - #region PAC - - public string GenPacFile(string result) + public string WebDownloadStringSync(string url) { + string source = string.Empty; try { - File.WriteAllText(Utils.GetTempPath("gfwlist.txt"), result, Encoding.UTF8); - List lines = ParsePacResult(result); - string abpContent = Utils.UnGzip(Resources.abp_js); - abpContent = abpContent.Replace("__RULES__", JsonConvert.SerializeObject(lines, Formatting.Indented)); - File.WriteAllText(Utils.GetPath(Global.pacFILE), abpContent, Encoding.UTF8); + Utils.SetSecurityProtocol(); + + WebClientEx ws = new WebClientEx(); + + return ws.DownloadString(new Uri(url)); } catch (Exception ex) { Utils.SaveLog(ex.Message, ex); - return ex.Message; + return string.Empty; } - return string.Empty; } - - private List ParsePacResult(string response) - { - IEnumerable IgnoredLineBegins = new[] { '!', '[' }; - - byte[] bytes = Convert.FromBase64String(response); - string content = Encoding.UTF8.GetString(bytes); - List valid_lines = new List(); - using (StringReader sr = new StringReader(content)) - { - foreach (string line in sr.NonWhiteSpaceLines()) - { - if (line.BeginWithAny(IgnoredLineBegins)) - continue; - valid_lines.Add(line); - } - } - return valid_lines; - } - #endregion + } } diff --git a/v2rayN/v2rayN/Handler/MainFormHandler.cs b/v2rayN/v2rayN/Handler/MainFormHandler.cs index 419ba374..95142bb5 100644 --- a/v2rayN/v2rayN/Handler/MainFormHandler.cs +++ b/v2rayN/v2rayN/Handler/MainFormHandler.cs @@ -32,7 +32,7 @@ namespace v2rayN.Handler try { Color color = ColorTranslator.FromHtml("#3399CC"); - int index = (int)config.listenerType; + int index = (int)config.sysProxyType; if (index > 0) { color = (new Color[] { Color.Red, Color.Purple, Color.DarkGreen, Color.Orange, Color.DarkSlateBlue, Color.RoyalBlue })[index - 1]; diff --git a/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs b/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs index b02ea327..654a7571 100644 --- a/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs +++ b/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs @@ -166,6 +166,13 @@ namespace v2rayN.Handler //开启udp inbound.settings.udp = config.inbound[0].udpEnabled; inbound.sniffing.enabled = config.inbound[0].sniffingEnabled; + + //http + Inbounds inbound2 = v2rayConfig.inbounds[1]; + inbound2.port = config.GetLocalPort(Global.InboundHttp); + inbound2.protocol = Global.InboundHttp; + inbound2.listen = inbound.listen; + inbound2.settings.allowTransparent = false; } catch { @@ -188,31 +195,31 @@ namespace v2rayN.Handler { v2rayConfig.routing.domainStrategy = config.domainStrategy; - //自定义 - //需代理 - routingUserRule(config.useragent, Global.agentTag, ref v2rayConfig); - //直连 - routingUserRule(config.userdirect, Global.directTag, ref v2rayConfig); - //阻止 - routingUserRule(config.userblock, Global.blockTag, ref v2rayConfig); - - - switch (config.routingMode) + foreach (var item in config.routingItem) { - case "0": - break; - case "1": - routingGeo("ip", "private", Global.directTag, ref v2rayConfig); - break; - case "2": - routingGeo("", "cn", Global.directTag, ref v2rayConfig); - break; - case "3": - routingGeo("ip", "private", Global.directTag, ref v2rayConfig); - routingGeo("", "cn", Global.directTag, ref v2rayConfig); - break; + if (item.routingMode != "0") + { + switch (item.routingMode) + { + case "1": + break; + case "2": + routingGeo("ip", "private", Global.directTag, ref v2rayConfig); + break; + case "3": + routingGeo("", "cn", Global.directTag, ref v2rayConfig); + break; + case "4": + routingGeo("ip", "private", Global.directTag, ref v2rayConfig); + routingGeo("", "cn", Global.directTag, ref v2rayConfig); + break; + } + } + else + { + routingUserRule(item.userRules, item.outboundTag, ref v2rayConfig); + } } - } } catch @@ -224,8 +231,19 @@ namespace v2rayN.Handler { try { - if (userRule != null - && userRule.Count > 0) + if (userRule == null) + { + } + else if (userRule.Count == 0) + { + v2rayConfig.routing.rules.Add(new RulesItem + { + type = "field", + outboundTag = tag, + port = "0-65535" + }); + } + else if (userRule.Count > 0) { //Domain RulesItem rulesDomain = new RulesItem @@ -470,7 +488,7 @@ namespace v2rayN.Handler usersItem.flow = string.Empty; usersItem.email = Global.userEMail; usersItem.encryption = config.security(); - + //Mux outbound.mux.enabled = config.muxEnabled; outbound.mux.concurrency = config.muxEnabled ? 8 : -1; @@ -490,7 +508,7 @@ namespace v2rayN.Handler { usersItem.flow = config.flow(); } - + outbound.mux.enabled = false; outbound.mux.concurrency = -1; } @@ -624,7 +642,7 @@ namespace v2rayN.Handler //ws case "ws": WsSettings wsSettings = new WsSettings - { + { }; string path = config.path(); @@ -744,21 +762,30 @@ namespace v2rayN.Handler { return 0; } - List servers = new List(); - string[] arrDNS = config.remoteDNS.Split(','); - foreach (string str in arrDNS) + var obj = Utils.ParseJson(config.remoteDNS); + if (obj != null && obj.ContainsKey("servers")) { - //if (Utils.IsIP(str)) - //{ - servers.Add(str); - //} + v2rayConfig.dns = obj; } - //servers.Add("localhost"); - v2rayConfig.dns = new Mode.Dns + else { - servers = servers - }; + List servers = new List(); + + string[] arrDNS = config.remoteDNS.Split(','); + foreach (string str in arrDNS) + { + //if (Utils.IsIP(str)) + //{ + servers.Add(str); + //} + } + //servers.Add("localhost"); + v2rayConfig.dns = new Mode.Dns + { + servers = servers + }; + } } catch { @@ -783,8 +810,8 @@ namespace v2rayN.Handler apiObj.services = services.ToList(); v2rayConfig.api = apiObj; - policySystemSetting.statsInboundDownlink = true; - policySystemSetting.statsInboundUplink = true; + policySystemSetting.statsOutboundDownlink = true; + policySystemSetting.statsOutboundUplink = true; policyObj.system = policySystemSetting; v2rayConfig.policy = policyObj; @@ -1450,7 +1477,7 @@ namespace v2rayN.Handler else { vmessItem.remarks = WebUtility.UrlDecode(remarks); - } + } } else { @@ -1743,7 +1770,7 @@ namespace v2rayN.Handler //routing(config, ref v2rayConfig); dns(configCopy, ref v2rayConfig); - v2rayConfig.inbounds.RemoveAt(0); // Remove "proxy" service for speedtest, avoiding port conflicts. + v2rayConfig.inbounds.Clear(); // Remove "proxy" service for speedtest, avoiding port conflicts. int httpPort = configCopy.GetLocalPort("speedtest"); foreach (int index in selecteds) diff --git a/v2rayN/v2rayN/HttpProxyHandler/HttpProxyHandle.cs b/v2rayN/v2rayN/HttpProxyHandler/HttpProxyHandle.cs index 0236c5a8..cab3c055 100644 --- a/v2rayN/v2rayN/HttpProxyHandler/HttpProxyHandle.cs +++ b/v2rayN/v2rayN/HttpProxyHandler/HttpProxyHandle.cs @@ -10,23 +10,20 @@ namespace v2rayN.HttpProxyHandler { noHttpProxy = 0, GlobalHttp = 1, - GlobalPac = 2, - HttpOpenAndClear = 3, - PacOpenAndClear = 4, - HttpOpenOnly = 5, - PacOpenOnly = 6 + HttpOpenAndClear = 2, + HttpOpenOnly = 3, } /// /// 系统代理(http)总处理 /// 启动privoxy提供http协议 - /// 设置IE系统代理或者PAC模式 + /// 设置IE系统代理 /// class HttpProxyHandle { private static bool Update(Config config, bool forceDisable) { - ListenerType type = config.listenerType; - + // ListenerType type = config.listenerType; + var type = ListenerType.noHttpProxy; if (forceDisable) { type = ListenerType.noHttpProxy; @@ -43,47 +40,21 @@ namespace v2rayN.HttpProxyHandler } if (type == ListenerType.GlobalHttp) { - //PACServerHandle.Stop(); //ProxySetting.SetProxy($"{Global.Loopback}:{port}", Global.IEProxyExceptions, 2); SysProxyHandle.SetIEProxy(true, true, $"{Global.Loopback}:{port}"); } - else if (type == ListenerType.GlobalPac) - { - string pacUrl = GetPacUrl(); - //ProxySetting.SetProxy(pacUrl, "", 4); - SysProxyHandle.SetIEProxy(true, false, pacUrl); - //PACServerHandle.Stop(); - PACServerHandle.Init(config); - } else if (type == ListenerType.HttpOpenAndClear) { - //PACServerHandle.Stop(); SysProxyHandle.ResetIEProxy(); } - else if (type == ListenerType.PacOpenAndClear) - { - string pacUrl = GetPacUrl(); - SysProxyHandle.ResetIEProxy(); - //PACServerHandle.Stop(); - PACServerHandle.Init(config); - } else if (type == ListenerType.HttpOpenOnly) { - //PACServerHandle.Stop(); //SysProxyHandle.ResetIEProxy(); } - else if (type == ListenerType.PacOpenOnly) - { - string pacUrl = GetPacUrl(); - //SysProxyHandle.ResetIEProxy(); - //PACServerHandle.Stop(); - PACServerHandle.Init(config); - } } else { SysProxyHandle.ResetIEProxy(); - //PACServerHandle.Stop(); } } catch (Exception ex) @@ -110,7 +81,6 @@ namespace v2rayN.HttpProxyHandler Global.sysAgent = true; Global.socksPort = localPort; Global.httpPort = PrivoxyHandler.Instance.RunningPort; - Global.pacPort = config.GetLocalPort("pac"); } } } @@ -127,10 +97,10 @@ namespace v2rayN.HttpProxyHandler { try { - if (config.listenerType != ListenerType.HttpOpenOnly && config.listenerType != ListenerType.PacOpenOnly) - { - Update(config, true); - } + //if (config.listenerType != ListenerType.HttpOpenOnly) + //{ + // Update(config, true); + //} PrivoxyHandler.Instance.Stop(); @@ -151,11 +121,11 @@ namespace v2rayN.HttpProxyHandler public static void RestartHttpAgent(Config config, bool forced) { bool isRestart = false; - if (config.listenerType == ListenerType.noHttpProxy) - { - // 关闭http proxy时,直接返回 - return; - } + //if (config.listenerType == ListenerType.noHttpProxy) + //{ + // // 关闭http proxy时,直接返回 + // return; + //} //强制重启或者socks端口变化 if (forced) { @@ -177,10 +147,40 @@ namespace v2rayN.HttpProxyHandler Update(config, false); } - public static string GetPacUrl() + public static bool UpdateSysProxy(Config config, bool forceDisable) { - string pacUrl = $"http://{Global.Loopback}:{Global.pacPort}/pac/?t={ DateTime.Now.ToString("HHmmss")}"; - return pacUrl; + var type = config.sysProxyType; + + if (forceDisable) + { + type = ESysProxyType.ForcedClear; + } + + try + { + Global.httpPort = config.GetLocalPort(Global.InboundHttp); + int port = Global.httpPort; + if (port <= 0) + { + return false; + } + if (type == ESysProxyType.ForcedChange) + { + SysProxyHandle.SetIEProxy(true, true, $"{Global.Loopback}:{port}"); + } + else if (type == ESysProxyType.ForcedClear) + { + SysProxyHandle.ResetIEProxy(); + } + else if (type == ESysProxyType.Unchanged) + { + } + } + catch (Exception ex) + { + Utils.SaveLog(ex.Message, ex); + } + return true; } } } diff --git a/v2rayN/v2rayN/HttpProxyHandler/PACServerHandle.cs b/v2rayN/v2rayN/HttpProxyHandler/PACServerHandle.cs deleted file mode 100644 index 23bf8087..00000000 --- a/v2rayN/v2rayN/HttpProxyHandler/PACServerHandle.cs +++ /dev/null @@ -1,209 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Text; -using v2rayN.Mode; -using v2rayN.Properties; -using v2rayN.Tool; -using v2rayN.Base; - -namespace v2rayN.HttpProxyHandler -{ - /// - /// 提供PAC功能支持 - /// - class PACServerHandle - { - private static int pacPort = 0; - private static HttpWebServer server; - private static HttpWebServerB serverB; - private static Config _config; - - public static bool IsRunning - { - get - { - return (pacPort > 0); - } - } - - public static void Init(Config config) - { - _config = config; - Global.pacPort = config.GetLocalPort("pac"); - - if (InitServer("*")) - { - pacPort = Global.pacPort; - } - //else if (InitServer(Global.Loopback)) - //{ - // pacPort = Global.pacPort; - //} - else if (InitServerB(Global.Loopback)) - { - pacPort = Global.pacPort; - } - else - { - Utils.SaveLog("Webserver init failed "); - pacPort = 0; - } - } - - private static bool InitServer(string address) - { - try - { - if (pacPort != Global.pacPort) - { - if (server != null) - { - server.Stop(); - server = null; - } - - if (server == null) - { - string prefixes = string.Format("http://{0}:{1}/pac/", address, Global.pacPort); - Utils.SaveLog("Webserver prefixes " + prefixes); - - server = new HttpWebServer(SendResponse, prefixes); - server.Run(); - - } - } - Utils.SaveLog("Webserver at " + address); - } - catch (Exception ex) - { - Utils.SaveLog("Webserver InitServer " + ex.Message); - return false; - } - return true; - } - - public static bool InitServerB(string address) - { - try - { - if (pacPort != Global.pacPort) - { - if (serverB != null) - { - serverB.Stop(); - serverB = null; - } - - if (serverB == null) - { - serverB = new HttpWebServerB(Global.pacPort, SendResponse); - } - } - Utils.SaveLog("WebserverB at " + address); - } - catch (Exception ex) - { - Utils.SaveLog("WebserverB InitServer " + ex.Message); - return false; - } - return true; - } - - public static string SendResponse(string address) - { - try - { - string pac = GetPacList(address); - return pac; - } - catch (Exception ex) - { - Utils.SaveLog("Webserver SendResponse " + ex.Message); - return ex.Message; - } - } - - public static void Stop() - { - try - { - if (server != null) - { - server.Stop(); - server = null; - } - if (serverB != null) - { - serverB.Stop(); - serverB = null; - } - } - catch (Exception ex) - { - Utils.SaveLog("Webserver Stop " + ex.Message); - } - - //try - //{ - // if (httpWebServer == null) - // { - // return; - // } - // foreach (var key in httpWebServer.Keys) - // { - // Utils.SaveLog("Webserver Stop " + key.ToString()); - // ((HttpWebServer)httpWebServer[key]).Stop(); - // } - // httpWebServer.Clear(); - //} - //catch (Exception ex) - //{ - // Utils.SaveLog("Webserver Stop " + ex.Message); - //} - } - - private static string GetPacList(string address) - { - int port = Global.httpPort; - if (port <= 0) - { - return "No port"; - } - try - { - List lstProxy = new List - { - string.Format("PROXY {0}:{1};", address, port) - }; - string proxy = string.Join("", lstProxy.ToArray()); - - string strPacfile = Utils.GetPath(Global.pacFILE); - if (!File.Exists(strPacfile)) - { - FileManager.UncompressFile(strPacfile, Resources.pac_txt); - } - string pac = File.ReadAllText(strPacfile, Encoding.UTF8); - pac = pac.Replace("__PROXY__", proxy); - - if (_config.userPacRule.Count > 0) - { - string keyWords = "var rules = ["; - if (pac.IndexOf(keyWords) >= 0) - { - string userPac = string.Join($"\",{Environment.NewLine}\"", _config.userPacRule.ToArray()); - userPac = string.Format("\"{0}\",", userPac); - pac = pac.Replace(keyWords, keyWords + userPac); - } - } - - return pac; - } - catch - { - } - return "No pac content"; - } - - } -} diff --git a/v2rayN/v2rayN/Mode/ComboItem.cs b/v2rayN/v2rayN/Mode/ComboItem.cs new file mode 100644 index 00000000..e69373ef --- /dev/null +++ b/v2rayN/v2rayN/Mode/ComboItem.cs @@ -0,0 +1,14 @@ +namespace v2rayN.Mode +{ + class ComboItem + { + public int ID + { + get; set; + } + public string Text + { + get; set; + } + } +} diff --git a/v2rayN/v2rayN/Mode/Config.cs b/v2rayN/v2rayN/Mode/Config.cs index fb737942..42c01f70 100644 --- a/v2rayN/v2rayN/Mode/Config.cs +++ b/v2rayN/v2rayN/Mode/Config.cs @@ -67,39 +67,6 @@ namespace v2rayN.Mode { get; set; } - - /// - /// 路由模式 - /// - public string routingMode - { - get; set; - } - - /// - /// 用户自定义需代理的网址或ip - /// - public List useragent - { - get; set; - } - - /// - /// 用户自定义直连的网址或ip - /// - public List userdirect - { - get; set; - } - - /// - /// 用户自定义阻止的网址或ip - /// - public List userblock - { - get; set; - } - /// /// KcpItem /// @@ -109,9 +76,9 @@ namespace v2rayN.Mode } /// - /// 监听状态 + /// /// - public ListenerType listenerType + public ESysProxyType sysProxyType { get; set; } @@ -129,14 +96,7 @@ namespace v2rayN.Mode public string speedPingTestUrl { get; set; - } - /// - /// 自定义GFWList url - /// - public string urlGFWList - { - get; set; - } + } /// /// 允许来自局域网的连接 @@ -201,8 +161,7 @@ namespace v2rayN.Mode { get; set; } - - public List userPacRule + public List routingItem { get; set; } @@ -317,10 +276,7 @@ namespace v2rayN.Mode { return GetLocalPort(Global.InboundSocks) + 1; } - else if (protocol == "pac") - { - return GetLocalPort(Global.InboundSocks) + 2; - } + else if (protocol == "speedtest") { return GetLocalPort(Global.InboundSocks) + 103; @@ -737,4 +693,40 @@ namespace v2rayN.Mode get; set; } } + + [Serializable] + public class RoutingItem + { + /// + /// + /// + public string remarks + { + get; set; + } + + /// + /// 路由模式 + /// + public string routingMode + { + get; set; + } + + /// + /// + /// + public string outboundTag + { + get; set; + } + + /// + /// + /// + public List userRules + { + get; set; + } + } } diff --git a/v2rayN/v2rayN/Mode/ERoutingSort.cs b/v2rayN/v2rayN/Mode/ERoutingSort.cs new file mode 100644 index 00000000..2df23d2d --- /dev/null +++ b/v2rayN/v2rayN/Mode/ERoutingSort.cs @@ -0,0 +1,11 @@ + +namespace v2rayN.Mode +{ + public enum ERoutingSort + { + UserProxy = 1, + UserDirect = 2, + UserBlock = 3, + UserPredefined = 4 + } +} diff --git a/v2rayN/v2rayN/Mode/ESysProxyType.cs b/v2rayN/v2rayN/Mode/ESysProxyType.cs new file mode 100644 index 00000000..13f63c7e --- /dev/null +++ b/v2rayN/v2rayN/Mode/ESysProxyType.cs @@ -0,0 +1,10 @@ + +namespace v2rayN.Mode +{ + public enum ESysProxyType + { + Unchanged = 0, + ForcedChange = 1, + ForcedClear = 2 + } +} diff --git a/v2rayN/v2rayN/Mode/V2rayConfig.cs b/v2rayN/v2rayN/Mode/V2rayConfig.cs index bc85c18f..9ec65af0 100644 --- a/v2rayN/v2rayN/Mode/V2rayConfig.cs +++ b/v2rayN/v2rayN/Mode/V2rayConfig.cs @@ -35,7 +35,7 @@ namespace v2rayN.Mode /// /// DNS 配置 /// - public Dns dns { get; set; } + public object dns { get; set; } /// /// 路由配置 /// @@ -57,8 +57,8 @@ namespace v2rayN.Mode public class SystemPolicy { - public bool statsInboundUplink; - public bool statsInboundDownlink; + public bool statsOutboundUplink; + public bool statsOutboundDownlink; } public class Log @@ -138,7 +138,9 @@ namespace v2rayN.Mode /// VLESS /// public string decryption { get; set; } - + + public bool allowTransparent { get; set; } + } public class UsersItem diff --git a/v2rayN/v2rayN/Properties/AssemblyInfo.cs b/v2rayN/v2rayN/Properties/AssemblyInfo.cs index 152885aa..79c9ddd1 100644 --- a/v2rayN/v2rayN/Properties/AssemblyInfo.cs +++ b/v2rayN/v2rayN/Properties/AssemblyInfo.cs @@ -32,4 +32,4 @@ using System.Runtime.InteropServices; // 方法是按如下所示使用“*”: //[assembly: AssemblyVersion("1.0.*")] //[assembly: AssemblyVersion("1.0.0")] -[assembly: AssemblyFileVersion("3.29")] +[assembly: AssemblyFileVersion("4.0")] diff --git a/v2rayN/v2rayN/Properties/Resources.Designer.cs b/v2rayN/v2rayN/Properties/Resources.Designer.cs index f21638d7..2088590e 100644 --- a/v2rayN/v2rayN/Properties/Resources.Designer.cs +++ b/v2rayN/v2rayN/Properties/Resources.Designer.cs @@ -19,7 +19,7 @@ namespace v2rayN.Properties { // 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。 // 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen // (以 /str 作为命令选项),或重新生成 VS 项目。 - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] internal class Resources { @@ -70,16 +70,6 @@ namespace v2rayN.Properties { } } - /// - /// 查找 System.Byte[] 类型的本地化资源。 - /// - internal static byte[] abp_js { - get { - object obj = ResourceManager.GetObject("abp_js", resourceCulture); - return ((byte[])(obj)); - } - } - /// /// 查找 System.Drawing.Bitmap 类型的本地化资源。 /// @@ -130,16 +120,6 @@ namespace v2rayN.Properties { } } - /// - /// 查找 System.Byte[] 类型的本地化资源。 - /// - internal static byte[] pac_txt { - get { - object obj = ResourceManager.GetObject("pac_txt", resourceCulture); - return ((byte[])(obj)); - } - } - /// /// 查找类似 listen-address __PRIVOXY_BIND_IP__:__PRIVOXY_BIND_PORT__ ///toggle 0 diff --git a/v2rayN/v2rayN/Properties/Resources.resx b/v2rayN/v2rayN/Properties/Resources.resx index 706454a0..2aa66967 100644 --- a/v2rayN/v2rayN/Properties/Resources.resx +++ b/v2rayN/v2rayN/Properties/Resources.resx @@ -157,15 +157,9 @@ ..\Resources\minimize.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\pac.txt.gz;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - ..\resources\help.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\abp.js.gz;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - ..\resources\share.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a diff --git a/v2rayN/v2rayN/Resources/abp.js.gz b/v2rayN/v2rayN/Resources/abp.js.gz deleted file mode 100644 index 0577c7f5c14d22f0a4f0c744f3284da191c04cf1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4467 zcmV-(5sdC1iwFqb9=%io0AXTqE^2cC?Hv76A~*E+&h&qX^xCq@0eV(jskNxwNvo$t zoc0DdW`!WzTX&h=vCGv`TG_WJuC%02_ zH<-9i810Pg9&tP}3TV#>DY^Ii^y7~Jco;>a@Ss$>bE4t+w%GIUOFh@0OdPL2EhUgY z{^;Y6-rE5X@IOq+A<1>SSB=Y`-gLXUiku6^E)8L>+il#O*RH!=K2zHK_@hnI96BKx zI4&jdKC**|_ybby-@1P99l3JHA^Dn#0+QHba0FvTKe#J>Q(*Wf{%9IFcf*L}Pb{)i zF7G|xDR1wR+LZd_)&1=m05Ld)Bx4y+NK{^ix{n^?szxfgzY;$7-WdecgOh0pMup!z_JI1u5r#h9Qno>p-2rSaj zfGZi+-lvi6xS?G58?Z|V(z$&ywBJ(#Zc3f^Ae&8kV0okNIbYlLy*s{4MUfy}eLy@v zDv*%UnV(H2lj5B>=04^MB4OzpCQymF?O^Qnm}y8apb$)_PA|$^AAj`g#~%^+$K9QV zV>beS|MjuLN8^!Vw+m4c`Q0wed1Kd|%|_$Ei-BP5QDJjOqsxhR6@YnzXnIP+Uf_%( zKgj#HKNrY5Iz{HrfUwcx&<+zQc?M$%h!`-z72sO{(1~SvR77GzY68&@5%v1{aD3Zy z?Jxx8je$@6xlad<=P)=`tjpVoAf{>zhNew6*aMvz~0fmGz6ZzMWX1%)ubc=a`ghEzuX_c8A z?>v9viO(RVk~tn@bDdfP6wH`@>GZ*v=+%_HlReEVDLD1UU2 zZ?z}w=bf#G_NJAG?`=5%pIgt~Zg!3i0XN^aa-B`yQ@rrA}ZHVtd6(ua|-h111`Uz24ZnQ&@<`qso+ja9S z7z!j72ZL3hki!^PL~6XBC@cy@z6;_pf(TB)vQ+VOO&Y~gcq6{bTjx}TxA#=hL*Ku* z9WPu-5d!Dh9|t|iOp=5m6LQK>M-m@17EVy8q;1$SlsV_l^8?xppuU2fcIrbGgpGw3 zbdvS(W&~Toi5&v1$@lVurLrX(|n`qVKF52&602xV0iL@u3*`GvvIbZK;~5>|}<>A(Zk_ zyjs;atPIH+ZqcRQT{L6~Y@2-cnHX%9J60mOZ9sDSEoWYeV5#kRa{*hq93&;-ayk?m zPIF}xMHNT?CsqSobjt+9ib?z zdp&pDr{MyXVC@G$Qn(j)MI5(t1VbT~|tsjyZ6O$0P7+ zR^Nz&(yYvNbCoWEo)N@5B!mUt@My|{8wq_Z%qjY&r0;o;*#{P^JUEa%5jhcsra-8c z51}YYEkTT4fA!f_t8pmnE<0vF>o+lyIf>Olgd+3vesJpMbK980dg*@ID3ZF#A^ z0y3c_xRH$Pt^ffOgTL{Q&c9qU^oW-GSWALdqG`9G%Q|6;~w8oYO z9<4=ZN^EHbUXoESYEDP+<=&2ZLuQ)U0ldJh5cIEXIA_lGAv~7j(LLjEjzkbK(b`FH zCL3aF)dPkbH3@l`lvu7CiOyCqhm@QLLbzI;3@+Lr8Ug}A{GwBo8Zgj{!Da=AMAHc- z%_u$Xn?th0d|R1QE88^ge{r{1IzBAlviWNV$hxJS8Q<))V%I z8hq}lT0?@mNe(8VzeM<=GKFzRi_+*CF=_6EBBw z%RF$C{=_d=K(Q{{H#p-5&RvWTXzAx>SharpZH{l_WnH^STq`{zq%61b9ZP>;hsH%W zlarVNv?={bf)+p84EhVsp%|`fkFprWPfF8L0idcSNW`pyDnpvgdd6C$A81dQhaAK_ z)VfpCu4FBX&DM5DJpjoVF61mt@d5?J8;xiBFUK{y5IXbx)OCG-RAFF!r zue0*zS-o-EW!F027}%-B^7^V?m*e`%KDj(UuU;)KMsK+yB_hB z(xqj>w;rQF@)Vt8g)pL)dLcE-ka#)vvUyf(U?1@Mq*1?WLcb*bUcacmsvVGBIo*5% zzvnos)d1wnLQLWKyV^+;NbE_Vo8#C|VDyEgghP9h+E2&l$oZ=N`W1fr>EisX*}Q7h zez>V!GkMCpD!(ppna%E&zuJ>*nx{zRqIO!ZGRa)w~UFTU9QLK3f?*DlWLr!^p1-hZ*byZzM*ECJ~ON&UGk8f ze7HF3(-VxBCw_i{F@q<46iR)P@?=bvyOOvO&O}izN~$X_Na@rjxWt@ugA^nBsrC04 zYYo+cE6Uc3u7eB42i7h`M*X|ghCxA`!(`v9A8^XY)9>kY;s<@DE&5K39Zv;&WscLI z-z=44q{wU6bX4dRLk(K#2ipC9g1=ytxe>>6#rR%%CM(nKHoqDBPOeNY*z3oOjrpeA z>Au^qd9d3ehN7ZYOt6z`>&CSpVr%7Kru>U}fDB?vU7uE;O0LOUrt7n8NpgjlduNS} zeJ0Xq91b&7{kYh-S_!9MGR4y=9}DQc|DG=CW*bX6+7o!1c|k}7FBdQCZu*_#uNPXo zPhA>O1MyYti*oa7JigN^OLNWCD6_MC!;X{W&Cwnecm-_EneJB`IyTEj0$ye|H){0b z5vqPkcR;Vk9A(O&+K(f1In}jfD>=a}x;r;{^&3stwL#SiBsph}jfo%myq>0*0te}8{x`-@DVa}kl)Hr8*} z7l;dQxR5xC;|uqA&0brZreuXo%jqb0u{Eq%e8hG5inKUBt{Lm|oHeH}$r#;hoy70LC~q?$;`qC=%@q={y1|LESOCNa>XhMwA=<-wb=h4wE%e^;@`@iF5^IjdDUd(*@O}OA#QftK zb5si^+K**4`vJ)8(Yi5sRH}3QTlbLoTEm)`8H`e?zHg2?-9_{(7*%ijm2E2(RXUJ3apZE=pSSIZ%|)S+?WQrH<7GyV$vf2IPLN2)e#~Oc zfS*@V3!bJz+FWO#p;mNk?5=7*O1@<$>N#zdTi5Qr6ZwkwZzY)0`KS}Om+wh_cu7};JAnlIRIT)2VjYXY8<(;8bgYS2UsW!E+F4JqsLuBKw6 zno$_G4%5p;#im$ri~G$(%aBiX1lFC>LVTWs z>xnP1%Ce$uW^D0lRgA^uAu${k|H|4EL3Kp|xE4Jc&8;n*)ng8i>`cFXIj!uMj=`OP_Lw<7Kdm?5_EF_?K9$i<6o30x=_g9nsXX~%EdBS~0GTIH%c|&qDADU* zvA?+s+we`}JU-vsar%=M(2CPc%lMvCRU0N^mpNirj>43 F007W`%bNfI diff --git a/v2rayN/v2rayN/Resources/pac.txt.gz b/v2rayN/v2rayN/Resources/pac.txt.gz deleted file mode 100644 index 7f621cb7468cd724fc93df9c7b4b386516c3973c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 44429 zcmV(zK<2+6iwFqO$mm@J0B~VrE_8Tw0F+(pj`KVb{*S~xAS4i{cDK9xe(Zt}XOIvQ z2#^4AQkuAlw>f=r(r&7X8{-F;#4YfQlV&{QlmmzDn`g$36dK%rM5Gvb>>S|lbJ7m0nA0;x9&R+54r7&VZTkA>LD$g z^V!zf_z)!i;upU7g;UZYgXUxW()Ygf<-h&y*T4DIAO85azkT_;H(EE8#)0;yFMi=m zU;6TuvPRCYpSHViZ@>M#ecnBM`CAj|n&h={`|Y7)GK?ON*;uXDC)5aWKgJiu7`(fLk7GR&$$Ew-e(wywxOuS5Lx?W?h*c3^6G@TPK+#8b%&b(~)Nx9wQ zgJlk7(^PxYR~?-(yoQ+Q>{NNJMJ4P8>FvZ8F2@)>i%yCvi- z##z|6Gc;ye*qZpL=#0Cx>9VA4iLwTxr9!x1zGZ~kD&JZ}?E`aHpPnCs^sY$o z;aOFTqW`S`6<&g@)N9V?^LC63cZcF@yrRfa+m-MIqz))1D%%TdC64TrYDht=( z6HMFm3T;l9%Oy6HLj>4rWz0I04)~~IaD8dI6^5CTCi9Sw$D-okcaHncW}Bo=%F$U_ zK-9)Jwszyvs+E&&iH|9pI`13f)~A@tU1s|0C0ToBuCN=6~R7>zRqy zh|->9m*~%1`?($Ea`c{@(8+Ht&rmMr96+VrcS$#j#P{H|HFa$iXe%dQGaQHaW|Nka zP!`~&MOSjNFCDS8SUdeioiJ|d42z!X{l|i)xhlEH$>4b0H*)SPjdkc{7}OHB2ZM!8 z%^7R0f2D5GpIp(L?{vay=<>2n%bHgx>DZNaQuYgStX|nKwgv{sg;U_Q&HfV6!Ci`vG)D|CnPSiI8 zcTuiQlZ_V*)g<#Z3U%Q^Rbdg|=FN$L;Uc8c>XdT_+E(M<$etD>H9A;RpKWIDG;zI8 z{Wzo{$Ei%Ssce^|rTkdbDb~Rci5hgMRsv%*yzH6#=)Gw>+Bz*Q!QF_{+6iF2g?YedQCIb7c#|XHvY`fdmLuM`)$u>9| z>8%2XlaXa^s@i@#oHv?UOO#mSJ0W}g;0L!l!oDKkE_6=PCUw?yVaMOjP}t$H2|HqI zbsS~dq9SSB^r2`uzmO($YWn{C!2Fn|cCRvv5rZi$#1!}W=QPn=c*X9fMCt`ylG$Su zRtRL8)b^v^AI%aRKiY8gvAl#W_aH@ahgUdkM>cXIgWSG#sE)142307(^g5H!H+_73 zJaATpJz`jkd|c^wiV~|(xXOgpBB5YDfrKEW_z^fA(UgF7@^h}dRergY-AT41{!#U6gW?inp|fx1)drS*mh%RsYAQDwR!(! zX;pbhi-&cBsZ+H317}#Zt~vB8IhoW|+mmlqX2(YQvN+JQa-W`O z^s~3^XLx?w?mm0u@2WSOm;CeHw|BRp!gzZ5{M(<}(`lEye@f?J%T)W+4X>X+eV#|@ z8jA@y6;S*7{+2vuZ|PgIrRUGz-pBn5^CWvi>M6H2uVOxY-eP{ZV7)r4f&aWo+Kp=l zj6LkvH&1u?UY>Wm$8CC8fVVu6?=n}XB`q8sil79Q7dKPk3*uVp}|!(XW$tm!@cI5=!(9sW2g zclTZmSUIP#b3PVQTbQCgu~P^q9a2ruDlLAxQ2m4&`_mpB^7SNj^+jHm}>Jw5iIW zGiC#IBx&>nSYV5G#Q#Mbc=7Fkl@r?jr{`y>A9_4Vt>{g=d}?fJW_f`L-H4vug>|2! zka;(&9T^=^8#Sus)XG7Cu5K$aT8e$6M2Uo6T#!(X-Xc>U^Q6p7t-&S+hs-syE86zp zww4FVJBbOtORMGi-M%X&0R|nuWok0UJ|t6PYtp1QnR;(Yz2j2Yv_Pd)MrK{oXWF?! z85to7+^UWV_)>+`=mu#fOJ=ti0fil^mEKsPM#J4A(rza0peJFJE49z^MLvBD7udK& zsO(YGj+zubf!P3s^nsk105IfhRYt0bGtHxk~W5)8`2N|GzlkkY!@njVkq;&givkvn2e92+~Dk+Xii94yQS?NR#$<4K42#qBf7tTF1N%W z(9XlJT-ybg1?Ddom{pc&UsF1(@i@{9ZwG{fkIT7e%u24$IuiPS-C;>H zw=p}Zn{dE0tDAOr)J;iKVn(VVl(;Sa9nk!V)PyAu{sB@EZE-byIx78dEd0uKbUH{- zFiz_Tp#~MTe8Sjo&*5XUBIqu-V4PYpW)y8cA^eK>3HTT zh_LNpn^u{iMEkuQJhx{it0U}H#Lf_>qMmJ>9EJ?9lodo?qqe(DF0)Vq590Bh9LEqq zKMhCaOZIt4eW}K*!B)Q(U@NjrQtZZ?Q4YfjGFTO2Hw9@u)TAGW2 zMf~_AA5E{=yG#JC>e~>Y9=j93h!4X_=-d+&4Ag&EjPg)oe5u$Nr#6-ZfL>r=1jk3h zPEftvK=~N7tD#R5^vfWYr$h2N?Bh-n>Uya>AjK@TrpEfT)ez?A<#h~+u65|!o#)|a zDuU@kkj(x%sNlpq^QPa>Sy(t0^6qt-4}59{sV9bzKahEOdFJ+GEX>ay&tkTM4Aeu* zT6``*Y;&nrB5hqupYYPt})K?fO5B*7|s+vlrLM0`vS!Br96hi|Uvr7#6OB{;N zlQg4EyYx&(WJ>g;rp}-Qj=pLhbPQZX_O(U-4H+Sql635K;>ip|U5r&j;I;qi6-JP-;%?o5FMO^N8~ub26d`nD5i$ zB>X5S%1mkeRla{eX56II^{Za$eZht ztr7kg=4_Wfe>;CaCr_XCN%CJa{O`=!bNc*Tq`5tt)AN7H?|#e940&19puUj+$7Ez*-V)$uvJqK+5ooF zSp>CW>{z!+Hj@>y%5#XGx%@1Ha^WB{d+ChaImGVtE&+0dH`QUkt?dn3<&(yw*VAYJ zg`M1@a@Nk?EIn>?`kpvZF+^CX;^o9;j5!lwbPO&_x7UxA37&4Jk&L+ghf0xT87fqP zP_*lpZP%-P9j)Z?xx)&k^~o@cA>;NK(g&da+&9|``%N;K_-uPS*DE)jA!in&%^r1& z@?p$mU>t*@TlQ<}k#%%uc8`yuu3tX;?B&z5RKM+0uRG#r7>LoaKg4|oGi=1wF$=0s zy)T(kC0Q~`+(!9TEo78;^wrn`*3CBZ|BVMtvd%+puUXevKQU;`oA1VOe~J#+lST1> zCUDwSX%!oAAPGmX=z(|iO!-v26PyPOP{`}_${O?bH#h<@?^Tzn+KX1Rb z{l?cHZiQSjD2@^I-fBqrdK&D%4>l!@Zr_nlZ_<%Xmo!T&x@KD46hx+PD=>K&c6M?l zj;S4aT(96Xc!re(u+0&r0fVm7wA&9;g)(9=6i@Js-hWaA>nsk(Q4#3EaYh)pf*<}u z$>xMpiv3U~o$~B7x7RXa+6unn3VfG`N7Kx$-%YM^4(qt$t(|6^R1h&dC@%_F!dNWb z)DDt&GOF7{ac{JbCT#?qvGS0JzL6i&PMlbop2moH&df4g9gqDaH$3g4IDL4X+VEV zf7C#wfkp$mPEWe%vl(QxD1L2T6|owA{TmZ6EsRMD0R`qF*W>^r5r`WIOMx&Hh&TbG za@dbw_lN5~hoQxF|9;&&*i9gS1FX35zaG;3H9cI@981qNwXg$)P4+dV^FsQ&Khxjz z=>K+CKgRsu(*LcmeuUBAqw#+|PwB3HMA6Dc|KBEu=_j9l?DW%3KZF0-XVXtH{nXP> zGyQba&&B_w&Ga)&KcoN2CeWnQPd@$h{^#&MEuqEqW2c{qRvi7$`&75mqUfcTGx@+5G zdjpfnYd2iGGwj@OG7ghSSS4QF5iWCASHrmQ>N*&)UHk0X=hyyt?MwJ=!Q2sM71zGM z4(@u&uc+43a6P-PV~}pY@t_ulq$OASdKGP|2yR#5uD|U7V&WuY$8fX8>_@sc-Gm|+6&-^Gptq%X%tPiLatM0R<##m3C3>9n6ALi+Hw*`cnsTK0C~=*6+x;xsMSebDGkZd;2odz#z&UIg#tdV_2~%iYe3u+dzk;5~7BVA? z#Y59Do{|;2^i?j%g#~ZrhFkobZHrDu+z-r-UTckuUN~SZU|L2tL4sGu?xd@j{#aV|Xl?;P z3Pfp5nCnN?8&<%r!?>zQ))^w#?zGh6?jsb_E6UlSMOx0|y+74w>5&m5KCZ&eQIipU z-a&d%WZxQQ-L@`m!<6&$QruAa7Cc}}V+?9XDgExDvR7=Wc&(B%Vr;t>t?fTxp{w9L z`z+7!43|+Pw;nl9PkbtyP*6!kq;QIUCFvBBaD?|siZY+~5}!1;8Z&JK9bzPlpdwCZ ztIFn`pOqq#cjk%U>fP=mtTBmAW0Xt9Sg9cjuNGAY+%O}kun`o0Q0>wP>i5SLtWH+I zKE_L@d+eWaRw+y{z%1lhLH*g0-l^0(L&i{m9@Rih60a1KA_#gd+J zEVVJ(w?NlP*ypXFaCknFANUI8yk7ywG+BYOeeIGJ_z+`cn4dQIvsq07%bj&X-mSbB zl30fIB#kKrX2CTWAs6t;n>89{jxI)z2+7&3z?CyAty02f5w?`YN=8-E;BaB>#Y!mngZRG$uT1O`Lf3_*c9*@UL`jpYIbezS{h4CX%7$Np-uN4n24?O^WH$-2fz68R4-=kr38BG#cCI$=^v1={Xm zf-xqAa3ku^64s*MDt$JOSkOhrWUsB5v>!&!h9cwTnM)S!L2+avLr1vELEDP5$K{?Z z%-2#?BNZ>A&qHX0Gly&3Z+)L+NyZ;;zHnA4fGRl6r0DRn`Z zg~LQJAPTpzNJNzN`86!Z%kCED$&Unti5fUDsPFIL8v)E3DuzCLeVqecF3`81mBwj7 znC088oje8@>UZC6WwO^f?s<%bNq4VU;zu-!bWz&9wok1DVDWaI>XEcA25;A zbf?6MV(J?=nixeb`gs$mU!FGbiJTf^fiOT0!{ii=&kNw!4~s~QY_4G<3Bm6*wG)t84E;$@HwlR8oaTLuu zsMIIK=XZKoJo&(XVb{f6)_h1ei|5^^QU=a=ewq_8@>!=mY@d@)NtkbfxGw!kaL`R0 zPtkyQo`NfN!vf$W0AIE|_Jf@3UiKxO)nIWKj*TxkL6JVcWX>B$Zn_6|b8#7oDr?eZ z)RX?`)8pBwA@*rU<>se%>F@PvS0bE)3gZ@n3**zbF?*%_`1Z!V`%_{odkjtCKiS8f zNNydDFzhGsZfu~V_BGiurchi237nlda4h5`F!Y3P&*iJUEr+9_o7WzSrH`8f* zsYH#}%TA0f`MiC5#7y`2xKf#KkFV2ckjH{=n2WoqFEey%osV+2>M!xHRM^+;t2gLN~+OtB{cFdV;zUV*|;KPCezZ-bm6bg|~F=ZqPSnTH<1 zHznpnfG>|}YW>v00GyQI;%_#Er66Z>5ILr5sgWUO$`Sm$(v73xD}dv>Oz5N5J%9E| zqV-uyjY&$8z>F_G=fntkIz6 z-yBuI(+C1^HXh(qZ6VU!0A}bCr@|ouqY1oOm1vg}P2!?U6*j`ionReDjv;13`>A*K zQlEy&+R*>PI=Eqx+1*`&pFZ9l1YXfmo?c$JI5|0DN|UnMJqjH7DYVp%DCCebbGY6| zk7mA8lWcbXmCHxihC2T=F;IXNK_$0@q}xPHIxhNu;@~ONd>X<|#bOZ2^Sd`$*sQ zv?&Y0Fw+Uk5OZntJ^W$N8>2hq+s%U5P~OZ#m>?`;wpf0wE0rT1z|V2?nW(N?`dK^d z5P)hZp4Y|@Q<#}#d|3B}Il6t)kts%&gj-0c@jl8q@&z+vW=(J`FY2c(pift2LU2Wj zWGo|K0fx4IP~UmP;Oi7t&R&*Yl;>Pa^8BjxxY0PX8ya+)m%;|}j)s{DtKfq#uTPl? zPK5m8G+lBUI>m2k=2Npd!SzASF^mOl@0d^EJm#j$3Uz|2Ia$@4sL=3ej-qFkZIM8- zi}IL42%C+Ml^M`(6pV$w@gwABYPc}K)_}T2q8AnjA|uM6V)y-bIOs(as+;Q$T7CQZ zQR)J*4DL&zv(^Yj3|OK=k&yF%-t~ZfI?07gx*H2chOJYjG-4(FoK@4c{@f)$1wj8PwQVOMkilf-SYisr$1+a9v28oMC1j zO+_JEYY8{jI`!@SeluGeFz4(TI@^N6R%t01sb}(Lt?pxr-`-Et=ff;mbGdQ&-E`z< zPUH}#ko^bk(R#r2h#n{A+_{jOkJrxvc7Gi#`SJPJ7WM&?AcckvlI7&d_#V!wKFmBM zhD-Q{tw)ixZHHlw7|;9;U9cbC|;3uyJw;m*B=4;kuI_&IX$!U^`w$=ZYuZ=;7*Dv zP^b{4&s$w;-|Rvs(6PRV%3FmTv>>JG8`!jBk&)Qs7ZA?C{r#Y+Yczbz zL2mzgY{8;n^7qiJnh;J*SBv88luuomR_kjiBM9;@z9mC{lj?YNj|U$8&V$Jtv!T1? z!Vfzo$whRc1>s~qO@CqlC!h+zwnUaB+lQfZmS-kU>6t9@J5c?&QGHG>U!h$!RuEc4 ztKma^U}GKXPG%MxFC-sBN5cW4vS5XrwNFNDHn_xu*-G3*iqpPI8f2SZ@XrT-k=Lih)flY|V=b zJxBHKdd&9vl5335Q=_j6Spl=;eW2S=K|0fYyRuMw3PVSOoRQ58E$`oZgG_!rUU*7p zw5Cg9LxCR(g-tK!ZXg+C^yxDm`hue82QNnK8*xGogu1uNp=uO>vwM*U@gBX)kzn&0 zU+><}PvpZCe(67;HeeTWE*&gK!Z7^=u2}UxvS$xAP1c7C@!j{X;BUM`dAw+QD!CQGRb)l zM8W$;eH2tDa;S{3wIWqj+^mOs+GjA}iZHlY9+f!PrNz=-21itr!FY@k($hjp`ii@_ ztvTO4JOt5KW_|3+NLgdyhu7V=xXW^V>U-yHi?yX zxv)r;`M=Q05ry&7HVt0RupT~mtR|KaQt<$LNSgs#g?{-;SVM}|$Dv}TttxIHvy@}Z z!r*cbQ;*{s`Ki6PxRR9`g9O#h>|M%fPdY*!W1RAWby70HT%#E?~RR3$5{aT1!+F!}-Eg_~I_7U4{OCErIWE#2! zh|qWZ1pAq`({sWdm?G!OoBpzr08wcXM2~7NWrUR;l0zd~4}`Oz0{mlS4zr+9R%Gue zN-)wHo@5)RQ<(mwV0X|L`|Z1}k${l_S1Qx|Cf81E*EkS*+WJbg8i+;hBwFn zyE5$V2d_kQH!TxW;Rs^g?cQ~M(W#+x9nk<1W!B3@TWGC-TYqD&;L?bHhFUXXVvzZ; z2)^xv@#hWpF%@Ka{u_xz+Hfp(*3JUdXP)5f%#0TQgX|KY~dys|>xnhgtf+Dx%lqx;qA0qc5 zH8grF$ zWOU44WtVmEdH;uyuq3YYkzJqx%Z076mLIun~(f!SuWFC^3 zy~HG3pXHy@_4LV#ic%#^j z8~k-hu!zBi;eV)q>i@(zRG1cF7_ouobi$I;a{jz*HazXWcgegc!+=r?|0o5r!YTQCXF z92u<7E7J($%-9c+!QFyN)`RhDmjsJ$HezN7VvU*nqrFf%6ViGi#RXd>5|rcMc=^C& zop3*iuc&w@MqCyHXR}-yp_ry<>Lidh4+}MVBs}xaMLCioaj|k-< z_i4<4crK9F3vpKN9Oc`M7iDXm(wP%BhFCG^Y5@5aF^!Wsav||!exJ_oXVNkkAQrT0 zr#s|y78BspAHE;X71*u=4_`hR9h1NvqX>_isE>dY_4E`@J|0@P+q{u<76)3-+hoMb zMuuW^%~p_GL1KY!*mXQa!*wdcIrHfdFXr!Mi;#;K@5`n~COTTLIQjz<`ncdJGGESM z7~n){)=QK71!0!LD1~bTZEt>C{7hO=F81_1b1-lyWuiWM)qlWzKj5SlED;n0No1c) z3jtk6ife2io*uvb`t9eZr4)lG{UH^vK&V$19d6e{i+W)w zWKx@ch6IyKR>~ezw)2*F@;P>s9R3;*+v@3)${e3h7g|b`qU&u&;SxZGC3$7>e|a^! z$BEznLw!t4;zaPhZtkM-*J>iaqeJ^8C-nsd%~V#D-=<`0lUDtjF60h*JM9hCCdh+3 zeYOryUhmr#wV9SHf|3a`Ct95S3EmuaCgbYoU&k#O> z#GmLLOo_f=Wo)eD9-X^%xCX~KXHKV2zW48qz%xsSRRb?^Ovo+i*=(gu@*--K)ZkVF znrq^Zk4c<}`jXN?{$~O-pnjJY=atKWJ7LJ>#>wD82J*gvagGf>GV1@{k;*TsQ7$o! zllfcsn_8t|LY#nug)?Yt(wMZUPkp(=Ozz3t5(|p@Xzys*ok?bmDQAC!8yUq#?}PQ& zqJ5l#Ej;)o1<96w_^_8@jvxN-tRFk~jd~lD7+yOzMsKSIB|)sA6LyK}i%Kyqi_FZ{ z_3JF0+V?5Ft%xWh33PB?!k;dP(Nk#5Arg1AO~BSuw+6+~@#AtblyidCq!_p`+ig+` zAk328QsDoIZDtx|c=a zt7OfrH>LpT3oms?tTi%foH%7oYyYK;KcwWv-FxW}JKi%CLhbkIUd!+O_;L5uivGo= z>aux7P_K$9+sRLFb{!!b^|*llfn_0)3y5s(yQGOQ;F8J@uXiR7;Rlzcfh4KXl?wYwrZw;!KvWP&y+lT%( zIFur2=Ct4BS|tKa6(m4-^JXTT=A|i=W);e;C2ZrHJuKu=fo9P&a`8P+(a{y_s*Pd- zXKKkJqUP&Nnc`#fgle=kv~~VC&8Kii+Tr=rg?FhkI_e$Kf-Ed>u|@?3x429blXncT z>Bg(;H*^&({VC~85#hebn`6lnS)e1(Il%yFy`%F0QHXM{7E8KWtRP)*Jv-$we6|kr zl0a>Zyf@QW=myReqsO{}TRw%qDgr-Pr70$(l-=WJZ{eg<*+uIW_xlQ2_?lg~TaoV?mwy34fnijub`$s97H+{HRNYBam)y_KM~3NU8DC9DWz3`%qYJx~1#pSpV>uK1a@*B*)a^x!O|sy%RXu0^3G{ z$DwR-ma;N?_sz7AGub#R<$^2;$JA8a%FVC3N5Ma7BB&tlvDSj7f0_h3Wpj5^J4ic> z>DnDK8ll^^WmEqTv>vCAq_|E8{jL^!mxAsiRD`-I647!nyoN>{6W7Joezy~lPPUOq zv!Bl6P)U3f@QJ=-#7XBsD20(Mr|rAw7W4Cx z)#q<-anKiu`Y2;+evYxN4=sWook{=#ze>4`@g@IkgFYk>zk^fz*cja2uv%9d3Bse2 z^I+39*&)V_x6o7q7?>2^b48XUCU636w0j2}QY+^cm&F=_JK&HOa#!f4lc<4(uwEZ5 zE(o(EQlgwA_lXbc;S!-veO0EhNL5>c#NZ=IAYbMHU2@dRqv%M?lE~RnHH{x zzaz+PoioK2gY@TGppfZo;Dn+y?RVjl0>g%NGE|s2^n7v;g-6%HDz)F>gkUp2Gr9L6 z4P_rbM>5EHy^80U1|v-6F(C)<^-xZ(xY~H;KT)s|=^z=3e0nU8VO#_2LoHsyW8(@} zdnyQ0ra-o^QX7urT3oo8l9t=-@e%oyQY?IZLH#f%B#Iq$Wt=!be5q)w;Sk1TZ@Y+=hw(xVn z()tn+BOk}>T@nb^2ZxZ#q*ZuJ=s*O`%P6zfNAuz(9Wj$>oY}ELiH3&wTT7PaLaH^2 z`XCs)BfR0&OQ^A&3p1SD>fpBFwZMO)N6s1BN<`-<^JZ9!0Tt1gSAQg-XPA6WYh*ko z%BGPpGWMCAs2cc-u6dtO6czsPeM%w%^+IMKdpTYpvlIt0q(709e|Gc!XQVjGvkC;0 zcBu_pE6Ja^t@r#(9MlcPNLXw=mzOm80Xw@nO3pkR4&6+K>u)y}bNp{k0odEM7@hebV%%%`;2@?gM8@O8y={G!*zTcz~U1k zoY_ZU6rp5wnS$FZs)P7YZtjZ&z|xl@42OM|P&%9FC#9n-SoaRq;Q*^mRpWh2laKhg zd!QTkDy^OZ8Db_R3bd6g&pGYd+G!Ua;ze_WY|)5{oFWyFuY_nMC2F+AQ9QO<99_Z`K@%YA zDS|#m$lM>c(TmAgC$R0tyry7x5Gtt4MNY|PvmCbGwgpVe8(9r&NMR^gkmye_$c)*3 zWszDXnhlNid5Yz1yzgOG&TfQL1T&^y=9p--H}aC*C3;oNvLwgNjiEp=KQClNmK~>4 zP!j>~Y$^fydM!HU{2baNj`< zWHf42*G~_L>|U5$28v_oL*5uzBwLQ;$f;}R00FsuN}2m-(y``#wjreps@Hk*dEYSyWwCHRL=v zi+HuhIs6(I6GEiQV?g+YOgZQ-sA9#&P)-p>b@s#5r^4X|mH667TX4<{hsnuFL7hRn z91&c_bi*;RqCD2^_X0RV0nl8^LB`Zrg%?Y3A6#1Um*kWhxK@(e_ZhugjFz%Z)OBeL zF%wz=lM`-U7BHPR&(8FR=HdC}@!PjjRcQ1w8FU?1bQ42(4a4uqXlgQgo|!0)7y<$r zFk^o;ImVXcIqCgy9cR^Iw;)S1l%0(TnB*j1btNYA_DVi^aSk%w8Xv~J4(9n5@GwK{mo1!D+m13 zuS&})3a3`)r)HYHCoo)byVfhJty*3PPI5W0b%wS4YP9}%qg)Me-#ac7P6pwfT zZnKvnMns8Ipc>{I=s4MbBr}ofEr`>8hall&xA5N~Fnp&>vIZHw#2I8J#tz*|Vr$mG zK2H7K##lGRn2X=scTve_rzZZ&|ALmI$^y|jWUikN7%wsmxq-WO(hcEa2MF|=^vK{y zmlaJg*Ai`S5gJd<3X>;+T>ltjw&SX+7vr3muErsAA~Wq~m;kknw;jD5wlZN-3t-Ay zCwM7elYB7bTL|w}A`)Muf{G~3nq4>(0#+=Xn0AfIfb7`d|D?EGsg-*Zq)q7{IczP3 zT6+D;+mF8T!x!<7AO7qsKm5s8e){PvKl;g6-aajP_enBG*=NY#UKsX`Nj(+qa}3ON z=L0*2n&VL}%Dq>q;e%#Fb_7WIw0qip_VC&699IIGLf(CVysj$ zIV>KI$*Gkq!h$N+CjP=0G!R)mbDQAjAu|*m#0w6SW6gtiF!)>QN8JN#X8uMQ@TdDf zkKf*X_P0y1o~1XW^|o;vQ07#qv&W~WrLZTQM8KA7rMHD7{*Di<`Ek_73C73C=#sRZ z&?x{c2KQnw6~kPX`6Vg(>iiN;2BD;yk7gNclOB2iqxPa7vKqJ5LnGTa*gf@$46lOFG2c|J@A)?@AeuE1Ujqcg1D(Ge?_J&k>&YbmlILp_; z#f1!3V(pnCG5Y}m;V36GkM{+(Ba?SO^B<35QG(p(aKzZjhk@?2vA z;qSJlot%hb;+de(gvTRfxx#FWZ8B+m&x8ZcJz!6Ahg#oD)=rAEnBWo|jMBUjee$Lr z*VB*<#A>OhtIng(&Y_<2=Oz)#QWQgMrN?hAI{iATb(LD1$9S;Cp?6C@f6=E*Yq)3- z+BO~J9g=hcYAPM%hR~7@?sRWoK4HdYq%ih4^)k-(a|;?@LUBXXRiRgb#~EA-*{2o0 zWZq_jcwS7`Im0u(g_OUns^emf$q{N9QCn8HZBy&lSkP1#5R&MF1o#nZSavcYwCX((9*-;;UVXt5P!{@({ z3EG}%O}xE{ap#H{>*ekf1tM+I_P}fmEj(j3$9FlK(7ff4J`ox``cKxFT<u@ivwvzKXb^Rxd{243I7#q-ci@%pwk3`>?k=1hkAUDhFx zPQ21s{LigvB7mb!Zs%2DF=on!f|DKSUJNxWn@Jhi8-z2^uk$06#+xiC<9FCapHVoo zpXTcg;*UA7Lh3;O!6j77BaUE>;&{mpiU!Q{|X2w!%Tr-NSZU7tuyZ7vT8ANcG_hdXep&x5`f6hW?l~Cc8lqp zusM|YbR9Y(qJ&Ajt44TWAA$>GndENX+S#RtqJ4_}R4dF#XXY66@N0#jy*7Z?Soq~- z4spYU&$uTDJ8G%f^J7EyJWQ=%iwF|{i&h%_qP`{y?J?vBL<=D#mLud%1vcTy7rMOe zNE5Uks_{_$o3m@%aho^7Pt#r$u$|p((#=It^oSN{d()z~1trlI*OI7+l)WbOc(L@!B6I9fk;(MVNAnnW+G9%S)mCWW0! z0{zV8~eG`8aS90{cOJ{aDRXzPrmede{cy$F-1M-_h z*N`$?Y=yB-aZ^6xnW)ykS5Dl+0g-k%0HPM!`ZjKL4#UhAuleK72c>o+w1qG!4_V*6 z>gDeP)-=7^53t{9O3^ZkGS2BtWc#*>KLFeL{JS^9f)ci)kUQe{5Llba>}dKhA>oS% zeao5g*TGbwS+Fxkt$+WZEMVF!QaDp4WDPTo&`w-y7j1zRn3&T)3LVy(2=g81pc`M- z!hC(;2dVKY3+YMRCR&H@-W{2CZM&K-||aU896S)BCJTW5Rb>95kmN>?UTfLBmTY ze`M7ShhM&a%jgtJo1F$3r>caMjt9aiR_v;gw>cg~!D|D<0t%t#6-3V_o;mv5B0*-H z8=jP%f;Zu5+n^S#NmuLEAFA@RQ)>C)#4*Pjzc{LXu!Wnw<;@U z?ktU@c`f8~Mz>f^M}DYw%Y5omvP~ldxca=jx|&kql@@)zj#+-b>ptSobGx*%DQj#f6UJLV1VdP)5*ABVcGr1S*LbueR=d~qBeu9k_|+7Qgi z${+eJE16unK@ta*5 z7WuYFKTf;vqqUvH;CEH}p%?X8209*8cKy z9;=m*!UQYFHKA|5*;3@Bt6QQEeXa;gh`M}#gxwh9!nZXe&3^fle5(z3*Vu^^w?UQb z-NtIjI5Q^q7j`X_uzJr>*={-P$+Nv8aaF&3-hX-Czdr4spL6D@5~C3q?QRhOG(oBK zW<-x3pehy+7^h+^3VDkUuoROIK&=vn0cuU|i9~?y^s)_fr6O`|%CW+voO=$UxgKIn z%GqyzRr@x`CVUK$k%FBRUu%Ms1FY;>0v1hT3Nu$lh3#xEo)Kh+ z+RsWrx-b89`1JYk?%wIf;^V9DQf!JH_6Si|3JN2RNhf=DXH1~2RMYZ87zB7 ztDcSIO6#Ov0%%!}8bJ%BKIRd4#4JivNz8xXB;SvNWy~;iJa(!ZmnHoa}1Nn0l z%*<~#2ER)9P4!0KskhGoOUeGu>ZXQC*yNv%#U;DxI2}Js>M?H^45m>PX=ssQvY@Pl zBzpudBoVNjLTE(28ri3?7(JFY!S)Cpqv$k89T`GO2(>lNHJuC6cb0X#6UFH+cudCY zp1?Vz;kMS3==a6<2`x20W-lSR|7r$%pI+cfj#bPGWLd}$ zJht*`Lh6bTsjOV`KYmH98~;Id9-@A{d~lfB(1OKOUGrm(AGPte*}#X>=M6NtGwr_? z84G^7MfO-5tl6MMOFn30c>eVAZHtV<+%y<)t%%ofx*7lYw=rG+0&`u^Z3i?EZ;h2E z_8J1yTX~Z{v>G`z9tznvSKl)RGn!7D_-zB-{;kT)mJ+`Eh)yO&_L&D$wUi;vXFMim zi6!UR<-$Z%_1}^EPQ9i)izbuL*^;*L_Y{iYFC2;B)D{%Sk85n}Ofw>myr_BoRy-r$*vZt zX4M9ZjIY>PYa+pT$xD;2NR>P_Hn_%0w71c%!WS{Dm?6u_;~~HlxyDK>>WAnxck`r_ z%dHXj+JL$$>bT`V``U&1`*88c=yxtoby`Y)H6%T$SWX1RA6Kzzw&-F-`EM97Tga$2 z$rI5JR*8k2nn5dLW{Nd3oI*lrXpr~$T9Bm%?LJxrvLpYB2io63kCCUI&3HqeSQNU+;!YY1Qg zBM{@#%NLIkrN?g0?5fB0rPZBsYsGvd_tc%~Tx(VSfW|Jqk~<2KDK7qOS^J}&nD{&) znUsj`rhWI^xSrMjWXYYPflY+upEE(p3?ZkH;?bx%$QYMy2XEx(+s3*; zYDrfbF(-$S{W(-yFO4h2@0v`5LFPL0V6uu51BK_SoX_$4%k!&zu3GtgqGY74u&1c? zwJP`?gtygr{nS0J3!73HL;v`}NY3IqRXd~1)Hub&C^M~Y0~uu|%xT4?U}8Iy3caKY zVgX8L9)eTOO+oE0Ct z$%*fZL*m_?MqiUzBEz+x3ovbXOe=nZX1m8US3Rb^^^a+-`3c(lV_Nu$aOV~+Ds?8j8JZXAX{HGQ7jset3{@Sy1MzT{#fBZl4f~w;z$MTGVKNlmHRNN+5|`} z#zikph6TuswRw|==xq#QTuOwPPgjdAFsatpziyL8Su|0qaqsgA9aQ_8zJaKtF6#g{ z9t*?ZU9~3A<(}#tpxD>?k7gzyzRQMefcxe0FnUqdm~7K#f%yPAAUTRb(#V)d#I1Yl zb^w~;(Bl`*0nfQ&jOZJ{%U=U%W% zn5(T_nk5>f6Rfo45h$~sgr^{$>z-^l`;kl|2X*B@W)tD zTNj?hV?W;J)0@TT>sLeQQiO`XJud_)7mJ~sEpM?Wm-7~R9+Z#8(_ZRHjrb#dc zrEpU*I|_gS|0f~?gEC$qsFe`?c-KpJRZ99jdpUvc&By{k^3O^fz5GVaF-nFehSf{g zApI6R^%h5;yaGURly69l(^mBY))QA`qdIU+V~~QSM!<5pTJ?LbWx4)6G+IO}Thb!> zO@VSv0y_x`q<>$Kx_hhN#1B*m%5>ezV5RnrSp(cIJWd~OF~Xvn2%&d_iy>`QLaz8p zVr2(=uF-8Yl$|h7Af&g$B4=)O1sKB2Q2Xl!gQv3=ncJY&G+#n#x{&_<{B#IoaiB=4 z{~{gCA@rvG*GJM^ye}7F_8-X#k5T~GgbBn?!G9~>TkUeq1l^~NIzov+nYFj~1kY3VpqL;wXO?P8BfkJldH@c8%qChn1(uALF6Zi@g&veTr6}tdW-m7YQRIff>LTT~H z*g~z$ihd9Xwsp{pdTmd;35_S?PP)!(^wi(z#%skcnb!$>ri|s+;NZ+etvvyi!Y) z4ioZ6zF%{fKs4iiQPve8d2S`407dD2#URx^vES5 zYE^HN;14(Z#_3Q2?o4Kd|wlm$U<%NOFi$Qh!!fdYW*O#n3u828Qu6QJ(vai<&SkCsMSb#_t(yB_Ng`Co`!If+K4=YDAGS;uN&(VB& z-n%Tj^L%ZZ%M>48RZp#55F=at*1Gl|$wzY#&Z*RgRRP9c zh%|s-b``xXl7Bgf`Zxvhd32ILY2NFzTnD#NlAuU`<2gm%D(s`{Jc(zzRoJ=mB?G+< z8DgW34ayH-7&8}dWR=vh&~49N)~?&EET%9@xp~0{wtRamC9HMG>9ZrcYRE!^I&Dd- zDq9q5OACTOlK3%}ZVc(TEI#so!$mRFR8q(lw5%XW?8{|Lc?9s7R(w3bAW>#KQyMUO(Ek)5z4A@(XWcc?1rQ({H%~X_kI(c zIsA?m8^M$Ui^w)=n3)~l$OyD=Mr=FmV8OI|fMG_BDO(j;{^alut+9>t%O34wBd2FS_~BeT(1yH@!i;sajt1xz^f{PwOd+>HRY|qOeW!?RKS|0o$fEF zu3^eKEU7J9`P+}*$IoAr#jV7CDU6ri$UVlXFH8!EB~QMn^QQj(Ll}d@aZB(+d%0zc_McLU8z(46KZ=#-}xN=xqs| z`mI?}t__(ltY84OsXV6av@upTiLju;7_FuJxdHBhoq}sK=mzZu!L@O$N+C9U3{{=R zfb{rsI_W0h!H-JhH6`$2ROVN2WK3Dsvh?j1YbOTk8~GT^p>!@Vv{ly#@a??LT>93+ z#WsroFxX%X9r@ncP<~v}&+g|7M+&->T+wr$g_xjmGr-82g137Eaa4xM0$2o}tykE$ zuP(W?zIlAVLag#jQo*twY;?*4ccJ+sYeVzz?x)r{=^#xY3Q++1yt8q@TKC*>_AY%3 zWY8&^G}0LJ_@iu2HGvDzb=QiyA;*}hRA^_$n~|k)qQY}ak>1$4EThg59Cy#3MEf68 zsEa{OuDt4(d9!5>t#Jx?xYZmAfgD!^k29bnPkS0JF>qS!3E{Ta-I=z zW``wkZLEr_|4SV5C)ebt2eGg*a#qI?jew=WL^Wree4yd)ylirc9+gf%8HOJ*>1e46 zX68`4qu#3?!_nnG7C>?nJdNCBiQ180MY(NMeS^WA7e$9N-G|CHQsOL@ix}FaXxy}i zs1I;8!HOyh@V<*0N}RQmdy-_d#V|?@AvT2BdP=PVvOLm7p`POEv zIC*rUiBKF=wfrP?n#KCWbtXHG^SDgkvmDt@4pI4xl@J`Qa(4&RVd)<><<4yy>*}}Y z`z6IwFwJEh5a%a|L|UbgBrpZ@U$^?KUJ85u&M8xXP5A7ZM)~oAa~teh{J1z!>{EW# z01<XR$SXCxjtuKlJgcZN$|J5ze!~mWI|e5w?>N~F}qcD`X=~hq=6A6ryn{w zwl|@{bS?QA4^F)ZLzLpquG@9;(4FqjLoB@>VL`+e#4~MWtLYeT(#(PG0MgBsC0~gJ z#Sq-PjAbyP4v-&}A{vC)CgT-`Q8xIMoi%JlPkhmRrjz*9)WRth?|Bc`J>|mYViEz% zhY!mzTh;gK8dZh&2cC~)%oZvA}=(7O=8eA(&rpuDD zTQ542#OyvuhYhCrYF&#&@pMvYt5*7tkL})u`!9@^q#GS#uVHm6m$lkiv$5tlY5n2`*jPJD ztLT1mDXUfqG9wmV z&F8OReRntft++LX3l$U`LfteaG^VUeYEw%VXG9;&Fr|BN`sA|=+<6e^n96Ug4g_-r zBGz^G10?4^%+D+~ zyZIb32D@|p3cch@w4d9QO!a?7f4E_W` zA@r!+Urp~4Az*6PMw2REhDT&{;Uf}V?L49Z9^d7tNl^5YjJ2PfhMI=H_SFW8v~OAr zF8G)3pd{+z$iEA6-Qdk2e{4@SzUtMuc&X$Pnuj16!!J<|uR=kiZ1M@GgnjE|Kt%C_ z^P~DgImI4ihh?z_{T5?!J-5hgTf!wb5SFG{{W=bjid(Ax?7F^Mxceu@v{sU z+%zdq=i&ZLcb(DmV-Zlr{DMZj6~beK<0_fJT>1BG!U;?fL~GUC5NT*jW0aUrg^D%= z$bHZ6*n%y|`U7}tm2t#F5}>Z~-93u9$?#Kc+`x00kfdP{H4{oPDVs?(&Yye1x+e(J z$z!T*t!zw{g<^m*>7Etku;g*TM5awY9Fh{(+761`WDvF^!8$8FhO`;*vZM%db79{- zuwZVW2>+x$s7W;(Z=$V(lb$;g07Iy>zupRJf>ySpn7qf8&qQ86pWtFxG1K8z851!o zS(A5Y+6D2ie|@aq83U}}N)x2a6FYr0(h!)&v;FcyphU#`$6o#JH4tiAp{4q+8Q;;W z9Jti#G_r+Uo<(z}V}0IObQKQ9TbsOJWo>J4DgTRoOFGjwi#y($a`1BN0u)!8gVt0# z+6n6%8C1-CK(QX%A}I9a%3WtgjP2Gyhv=(1?}&Cnb6mp~Wc0{kK1EmL6lP9(=e$O; zp024glC8hwZkJwb z>OIF_=AX=iMO%u_9pZ(fX##1ZhqgA0zlJx|c5;v%UwTfKD z$-v|Rkvi&MSIIZ zsJV=wNapn{UQ-B(yA7oV0Lri{`!D!-C4^)4fiD`;c_la{_{e%BTA$(xpkMS&r%?8S zbAZu@LF3&0(2>CU{1KDn*JWG%s3%A?mYrTfdC?Mo_1BZGC!I*2&;E%AIq;u?3uMUY((&>s`zcvH;45QiyU2`d70EA=Ro+ijsU21`SBq!EP0c14Y< z!JkGaq%&YxzNjIp->`dJ+&#BRZA(kHTp*-)i_8~|zQqMr=+l#iX26W{o$q!~V@E>( zdS9th@4AczZZ`}VInd5uK7INmkcO;jWWnaf*%T5_yDLwUr8P#p4m@os1QQyPQHfQ) z!1f~!!LzZl3PAP~AQsw?*GBE^^z9%kzoaPaQkC)$ zbt`}5xifF^Dtfa2T#NzdE3q^JoopV1q=i@*T@Wls^j}w6fjOEG0?`q+_wD!hYGcDy za62Sl7WpL@ld;J5ZRj)#NJ*?=4#F?LSh(7!t=4G#M;q&5Jmx=b#4a3gm==*SdoGQP9|>p{j5;s%awtf&+C;IIPid8Er`pSee*cMp zzS=~!tjGA8ofH~G$+^3YDqy+h%6ugSpC9Luc}QV?Z(K3O=ujIbz!c-!x=Q_&^mWzA z?8korkLRq8!CDRhlcPN;BcojrLcQue*VkyAYBhsuFt#$3H2~7848EPCv$)2F1AHvA zs<187)|?|WLuGs~f_pOWRFjGujJZSwrt^4Hss`d~ zpkHCFy(V0(RGVM|r5j3y76c+fx<8v#Ep2c?h)I|`lQu$UOtbac8du}YelyAoux|hd z^2fQ{!M+M>FnF@rn$Y}~iQH|jk`*(=Oe88B`B*NGqr(Yw066#xLJKoRF@WWBITd!8 zZIMARs}{uMnY?R!q&^o5d|GclI8N5j*_7sBvP7dysxOC6Uk^_&pT2(jyralrhK!7N z;XC=wa097|EGgXq(pw7Cmaa^BGb1{e$^Caa&QdB6MX*8a8eJ+yMcTK%^|IpKT<=VX*l|v;?bNW%+5ypKK+o zv}Ye0PadPM*Kc3b)h&S$!O)w%i&L+hm4U+c%Mv$JsV?8pz%?$XZFDn zZh*;V_tU3Oa(EJ$#1f#G$a2L7O%GlT5zwbkS{_o!_q;Gp04kEALYcL)k@hhouzFQC z8vI(nhNVZ)3=K-M0J_93(LF%hXukEYpv6~;mkZ{6m%3g6@#zT&7PK5gv-!1*u7cYW z>N^s@xdOuCMHfH5#iu@R|bV^NzF*a&H$oB+Bx-fWpdCG@9#`Q8X&EV8pO;@e!xK0U9XP=paYl^m0H+A!P zm{4ygg}gDer&yluunP0nxiPF~H(C>md>FosP6=`=sB1RdGpi+})!_p;c~6+MDL(l~ z*uA@xDF7jvZENRu((K3g=!7n3NqZ@M^xS%DiZX=5wf3s!o9W}$N$)~PC*I-XH2M>!C=`t&JA|w>(3N56Hg>U%&YeF?XPW`RH%K}3v*$n7xeFg) zeF_DH)tk)d6+HDv*|as%3&(X7>btm(#3WHL1tBb_)B!F|x|xILfbE76I@mvMm9gH-m2E^e%WH4Rw$*-Dux? zd4?FzZo@vcqrkvBPS_|&5obEFwvSk+CC{Y_Lj5=1@F3oMfz+Rb0Y>5+4nEX&^QKQS zh@#h6nynI(F}ZRyJqLF$HdSLT<4g^9PjX9NglR@ofFjZ@ul;4sH z%vEAoUyLyqv`LSJZAc*H*iZLElb|$xrnU7Yeazk|VZ)cvlWF>3FV5zQWtce?SnlQ~ zaf#XM9N*s+n-&P3v?F3|^CxnR%Ak0S!*hTY+loR+l%+KS9r*L!*JV8rc(C)mD6}z^ zqkzRG9?01oNPXnf0vgG78BRIo7Z|2f6l{Prza+v zX$j*eI(QrR=kr?2i>_;-uxOI{#_ap%Fehte-O8>s(ni`hV=E`_oK}j@kspQIlWUx8 zS=%`hNw+~RTF!UqXj=GylH?*GTKpwKh9R(8ks#hcNg=Z*TMcAps3L$8#SyEEckzFo zWTo=Tn9`L=vq|(_>pA)z1ESJcTMoLW>SP)h@O{uJu1H{#>Q6#U)4<$V zv2kz{@!8iD7RBs9TfghFT3n@z1JdQ1Rl<=ilrZhK_Xxw!(aDe#JS0I~csKpnB(xJ1 z7|aq6wYDug-qG)$sXMx{m%nBVyORODl|*ryN|$TtPO(x}WoQtcE(aBABf+&9$nV2- z>F-lgQHh3tDYU9KtOjbN4-PWYuJYpIaz;&)k~gsn`?gn1~0Q{5)^G8q(TDaHO}l9ePToc zix-}9?=a(YZIT!+*Z|d14|bq^BP^y;@C~rLG#-;|rN`E_*~qdRVQ#;|HW*tne~vyM zkyp;IpK~VKyQ?^$j-L$c?CJ4TFVW<$eYkfE3nfbP?yuZN;F6PzU%ZY*v&O*oewD>0 zKS>2kZ%R6^JE>&{>L6aQZ8zg*8$}MhRE4KMEz~!XxoXw*8HGoA9#rx|fWFe9GJ6Vz zV|mf%-Hu4D3#3jE)mYlS29k(XJ(bnoQvl!m(2qsq%2}JOimZ0yo-RH5bl_sP1;S4h z7#852u-_)Q(E-S|F~7r~44YjU8kav7IK^_!bc71FcC=)b8s7MTL!3&=(&AU}26NC! ztbQ=2*^>T@XEo4h3#U1wlcRP6q6Gk~v5r2?^WM8o45DH-(7&FF`p~ER7%5L3NgoH2 zQvVyiXu2~-=YPeT-D=GGu7&+xm<)nsFBPQ74g#wzj{USvhJE4X3`*s_8DqVMQ&{E` z8=x@d4e4`-Y1D6iw_$~d=9bl^Qu@Zeo=G6InSE*NO zD%aJqdk7x3j-w2V5s~Tvae0wNF@m%VZRQ* zH3jH4D6mnJpzg}5Q;?6osww^%HC*CHUyebskKadMlK#S#R?)D};n|g?82o@;WmL%a z_VkPWY$K`M(-v?J9-*r5cBS(82KH4l0gwzRa1?a?>{?yrdGM94)la)lW6=&|p{0WfZKxyM&NS7tg#O^?M3?I zr*P~LM^QoNpA^$J)?L>r4*W3HT*>q5hzR#E{S0>|Mjf8YaoBTb?y zWcXB?hE0$)!FLqSY!zKT4AgXIy zg7Vt@yVoxmOz$}ICYKi^U5LPK1(c?8Ax^0wQ4GzpS#<^zbOBa{N{ob^6@FQ%J{Z=_ zDcq<6Q>K+9<}_Ii;q0SXzc0j3Pa659+OZR)nO?u-1CS6?VTNfo?A=m&<9xOZT_M4# znFc5cIHEALEDMRwg5Amun}VC99D9wm`Me{Msvl6~NNT!D$XrB-V<&{Q5r#PsKuT z4ZP|ne6X$yWTqk3jWN_|WmVxvL5NXWbgmIvS_|7yh}89|Myh z1^y#twdM@I^mI?#%LdJsOl(Q5$^?fsn|?aaWp{L9*iaNS!W$b`OM!1)gg!|mydhjQ zjv=u+P;@Xo{WU=p=;bBV8cWEa9A*+Y_oOa9*)n?C->mAj+byp(q`BRhY$$AFDW_Ow z5V# zAJs}Ka9n+>7Y^F82oM&S6f`OoXE=;@mF82z%p3x{888|hO;TBHOd-IAyF10lm%Mg1 z9~&tfnP?~@YmK3%aSgShw}rVs7fJ|AWv-+Ez#I$hJ2p$TK4=I`r0tQf0-GZ}yqCf9 zzq=jfPRX~EO=yXCiEiSO6;KRU25fg8t=x(pfL9>RxB%bXJJsKee6vb-Jm1?}Rf%7< z$~OMpE8$%MX_f)I8Pd&F(7SafdfT1f9?$A-1a;6xF{*mgWxO2}IG8dE@K2^eot?eA zH_Un-kO_`s3&kMn7qbRoJYre)8MbF=#U{SZ7PMT3&bjHr?vEqM2uvO}1I;p?Gr}CJ z@dI~9`WeB!il$zCb(@5Va%+PN&-?F5&%fL#{B`<6_m4c`+V}UO5YrsZKIy(p*nv4J zI@R`OP}0_5Y?A?kPr}}ebdqjnZ-VTqHW6!=g4Ky`e?ahk+suWcW7jz@f$bM<;A444 z>B>RzpH8+aXw+zetMEJ24Brz>cXVsGEBv)@W-&OsSG@;qC6;RNJv8!%tk})N(Tu}W za`$i1h9x9p3I)Ru3u!rm{*uU}6sjPn#UYJcE;5bX(MsLh7K-A1femcq;GIs!CrWln zM7GyWc=B()iFO0kQqu!)C{Fz#+|+^DROLEHk|b&Nb+aXnUwS?9!8e1TT2SZ>;;K}! z45dR|*+NdvdyCgZ4spy5xv%^uTI;>8YT}UL;@2@v7J$ME%Z^CAlVBI8WZx)$2|_4}0;m zbwpWPk!muGg(+L&82lJ*rQQ%+<5X+FrS!i)fwi_0o^I3<3M4POJ4q=zq~8LgMHy;Na8(3bmQx%a_9 zXfGR#c1=2D&EU=>B-^Z1^yAs(_ep@L?h9AcTpQ_4uMn`bZ`B%j`ur>ow{*57vr`D8 z3>6-_4lAS10L5tUYzQu#?WAa=gWb8V+?edi{&?nC=H21x>5%?;a=&)fufDWn_+QJA z%C0>%Sqt90YEt*+(c0_a&~u8^sA21Ul}a-Z*s`2Kd;_@)1esP=J`;Jj6^2*g%ziSh zI+frE9r`-W?WfP+2ucACq_s+<+r+TLn8L~dAM5iv{2Qapw3&K(O#!o0JJ1h?m}x4p z4t5kdPtJ{zGKn7Z3;@3fzP10N&_Mr+{$D9T%)er7|COS+|BFmdNZa_xf#Puq${Up6LHF@b<18<7Hu>n-cbdL90)QhE5i<~*g zjMz;l&djfWn4qhI-}9sY`uUu4kY7}(^CSkCNEjx5lp=6}*0=$m|By6phdA|i_vtAk z7quG1We2#cLJ8cF12WpR@l*c;8xdQlhGl?gf5v{t4nu@p?Am*kP)w7MyqCplpD3=d z!q#B}Wav1opsra}Cr0iT%GfZjN+*?{u0oTz9_1nh=1J~pp=j;ehfShj`mlgLP>NF$ zZ%1=tvb4R_^RILkGGA*>>G-hdgjhtb z=f=8DGR97}Xyp~3cA!L8!=ye4>e^wv&7yED&Z#dFX zqMBp}9OuO41TtfE-4fh8!$xUFyMffEA|Ek1ND0MZf%9q1KsZn2m99Wf(ghjv=H>x{ z$Q5h&UPR&f_RJK~^8W(g4cnVCSdQj)50^&2-O04i2gfMmr?@mYjQ7>PkzAX=y@2Rpe?j~(TBQlw~LgQI?K3I?ySTP?6H}C) z82z3u>({VkrtorJb(F*PT!SU)>Y`L|fYLX%l*+y}NG_xdw^o$Kd8ZmleF~9B8MToT zCM*)&VU1Cgi~OdOU^#HoGJ_t|)i6a@#xe!ray?5oUel zdW|X+0Z=M?ctDE=0g62R11o37bHc7dep7z-zR8`wA5gg{dW09}4DXGK+)rRs%4mV{ z552>@zt6}RWCw4;0R4_bnG0?mPc%U;vuxd3C}3Zs372CC6Z91*^K61xeIVi0!71f9_l z9KJon!yd9)^a5;6AH-t!Hf-h7P%z5Ak+P`c=QEwyC|@NG#ZoLGqH9Svrod@Cu*DeY z-T-9!dWAg<5c9+Aq?cxG9b48UoYUo)oO@VSX2R8NpTmjT&t`2{o}0r@a@^|OpD-5k zc3YjW zVmSm!I|CBdor8_Kj`FP4am^UlN3qrn6whiEwKx%05n(Y-W(ozpDjPrMwNbV?9f%*? z^@rMJ4nnZSBdWyCy*U_2;*g!qSNk3>w$5JXV>kLu>}5hT{5`cA-dG_Cxk=Z zJ%2H;m;2l6LAc-J)h^Z)?&pxw0#a5$CQa{?oEM$xF%RVG3M|Sfj+;;=9mGIGn9@1OI_cJxwghK}hw$N!j@aUzf?MMbscr zZqyl_toR0UzTcVV__R5X-B^EW|lR&%xTo_jxsC*df2q<7*Ka( z0@ff45>9Qaerc_$qC3%<>P^M_(m1obGTkheIaGOw@WzJT4iuSKHl$}^MnIBlFiM+8 zZ3rs;0zUjMqGf8}z!P;VT})14=4MAOW%QyPEKTEzaaf0z{P7>DU8UFZeM0>aXFkjR zmkg?*@EGs?kuNOtk0XgAg^!($@qTg0R5quP^I*-KS2b&a#*|i4-J7IjTl&uD+Pv>U zacA}8dzd5?DwK5sG51OIS>abVD0!$a)N{&fQQ7jWadgBn|CoTVGsc{yOO_sd(9TJf z)o*sCwo?XH*+EC=WK^=Atpt2LHsiZ0${;h6XV%NeiyePeN#k0`BBk`Y@6wK?SZ6zc zT(l1N{3*=E7_*%k56vAgM0C;3Vxs03SBs(k_9QE%XmV|%s#7r7hPC(G1CRpewS5La zF3v-V&wv=F4C!`6T!raV3Cub@A@cQk`^UIfe>nJN5WPofwY(rf&_Lz`*EhY-! zDhX2*CAmKwO*3{2c?=F@dP}r2PCJm%`XdM8;yQ_aIJ!_D<az3t`46?S_(Pd^Un_^FN{1d?%^VGMv zz(`y%#g|H)X28d3eu4o%W0>ybXH8!y@%n&3u%o@Pne>lph@k2JI@VrqP%j+>SYKkB`%u6t5|O!B&gkv$(Su zPn2JxlQ*~$WmXTlPBV_J8^)(s1-lR$VXoP>YOn#q=+PsDK`z=oeS3P6MLY68)v@r_8;2L#RIX_tc@9dB=TEZHlq_Y-3`|pq`4ZITd37P} z#d(T&1v2C6JFG!K(88=4*XTY>Rc9yV{|9D;GkbHSQv=6;-~wG)7-`o$g~5ih6cHFW zT6%u0o!(!+riBhSSl*IJz|h)p=WTaxh@A#G6_lC*n?giTL@8c>MZRc7g=J zV9ag|TY;Bz3Nzn?^SlIv`ZGlu2-r4hXnA3s3{u)g-+HdNw5@zo>6f^G@_n}IrCBFf zkE-bDnp(}noFE;pPh-SY539OeZyo77ta7GWQ@98me+tKGl`)yr?)xMctSe*u3sSE(V-H!W{%m z<$*a$Go#&=cV;xqW7p%5eD-u}X1Aw%wDuZEDoN$)usy$SwOVhf)sjNzU)(3iMX#&_ z$g{Mygd-MTnR(J&mJ|=MG7|&6*&tJ}BRqHTaLa?c`w{}rE0yut6Ty->3?(B#lF6pB z0R3QM6rKqwXB{l<7AJg80`3BUP!3R45MoV{c$Q#9=&-`#h_7lp7_nullnsP~)NPgc zDw;|aSF#9GIkc3jq9T?Rqv|)~-V>A(0;V9eajYlYxWiClHN2}tBuqKWXz*BeNh{qm=i>7IFR4>LI0EXv0V&7?hh5)F?eSDPCx6xny1erwS@J4>;ATgjw`X zpksEMJP=@TN=z}8`~iGtvFJnrwqjX9SeMP21Olz7Nr^_^vaAjfj%ux%2eVgyxgE7p zN9bz949|IbeNQEi)HGU9-wB`Y(pIB$JOf{jX?Y5yiK_h(OpG<9NvAd(&eN`TeDR6M z)RxTg-9c5Md#?o{psaH*-BJGTRfgm{_4oo%&v!BLcA+w?WWMfCQyb zzO^P1h&48Ws1-I*MWFL^DsGztN;+}g1H3cTTcA5PpEjSNVq~V9MCgQ0Cj`qB ziL~Dp3&GMw2xBQ`Oae_BiKVpcdq<~pTX)|K;xK3CYky92J@*a_qT-gt#r9#aCfDx6AqKaVmSYu{YXPj+x)4i}{%af(ElNJyYrf0r$#@@|10wDr@z zJ7XrNXa)yWC=23fjOcgqCb$jnfa3T6{W zeG$khvoN%I){jk}xlIaRuKCFhrrW-|V3qb&ndm%`>mEiBz0g#VU;=e+aN}0Q;ApPf zBvLB_Ehu%{vpFR=^i zst-zS$Qy|%!*QvL-_E~=L5ie%zb`^_74th^WK5EU1;_3o>2GTNKG(30zPk#t@cS493AI_wm8^B5b zV0#xN#w0Sn6Jcr8qIjkh+mjKEe zJ%?peuQ=l@EOu}_Gh%&9k6?GW31zGiI(zu?A~C~66JO@5DI5m2RE=Z9J(W5bu}$*S zE<6zH=2CBzDUZ?a^tV?%U}-1PT>-+*YP)mi;C>&R%5^EAjnEx(KkL%Ml<(7*HnF%$ zX9KMeckE2j2mwf4tCR<{kqudDEW33Sfb7BEa8Xc*%*Aff4ua}aufnrc zk||gY^TV7!!?y;^I(;U5IVUT6ZIy6di@iu`GFpRS#|i;EDzV%~Ku#%9j2CX-^=3>bAP=9gLTrkEZC;&1@v^B!OXJT08eP$b(q$jB=Q0ZpSK5$`hj&|#Sy729zb zW=yVti5VJNWMG~)dh_(f5#hFi-b6YG3K-a0C;z-f00`v(lvmoVztm0=d3vOEbim_U z=M(3g#tl_?b3-#+K$DT;B$0yH6e>pUQ9)8E&|Gs%c@eTBv;gR&tm0YKtyRTGXx(fE zR8+iH0Fc6Pl2?%VQob+Auo@$eNB}l@j<}Q&y^J|(L zH1}`{Hv3>0#FZu{LOLvA$UoyM;2{uUEMrr$@9B(vnv{LIM;92vi-QCb030ktCjAHq z?S#s8#6r0ZHmV(XG?`}*_S`DrvE_jcjL(%>kcho^3XP$}T1@Lud8e3Onmf!^Vx_XB z;*#XZNr;qtuFR>4jE8n}=%Ye6108O^UllMmg+NxpJ``(rZo`wAp>-F~B>3tNa|Vm6 z65s9&w71u2j|SDT=1(+x-RBrs&c(S~=Sv6y19|4Sg+_S(tT_|trP@%%f*>{`5VB`9 zz2~|SX|z(&L}Fe(Pi#^0)6)RriA3a;+bZ*_wNn(lM8(Uvbny_8y4)#yEDsPRkMskS zWjdc}or!(93n^99Ia22No{O5;`npk$ItX=R-$15FFg+8YEGUyGkxIm3))O&|*h=*E z6K>Uhyg{veoQcC+G`^$3?vUazV-9_*mGu;Nz9*)K2NGP1#XKS%t!^adgrtrYJ}bwP z=Ip+LcRh@KtIQnv*bRXqV?57tT!`bfi?xicPL%2K#&gYY_ea)qPY*>ng&vogs50*6 z$4D6wy9pG3Arqk>=DR-({Wdl4^^v)`w6K7_Z@ML1x>K+-bP^dH?c`ykL5y1yy zg?tXndJqpM(WnzkqEe$o%vKd;Pw09$O^Q_NbtjU107<5z6gEUJI5v4vj?G+;Z5-Q0 z|2pZWcN~vthpRJ2#CR+*(Hxvq-dP}Bhr`sAS4J{Sw6c=AZ6^(cvYMizVh0KRj4Vru zIIaWsDsu~Bzab^8CAEaHaJy^aiHat|Q$SK=kXbL{^(gh~9MAFo@xGF!Nrt*0W{wi) zRC!buZ)dicI9o)hU_DnE*QYj0gv1_(EhrY{%-6^y4veYI%c(F%ELPWxtdKIt8$cKY zx^^u;i&}9nRe=D@*%>!m*P*q%5WG;PGeuE17Yv}!pQNy>2Z$&(8(@pmj@^qa1tZ32 zct97;VXPLtU@$*aNu~mE?89A=T9iOt$Xn-i66D>tY5DiCdMFO^a{w5EC`t>@@Js{> z8|b`uD@GOWoT^M*!0!QvMIMfUyII1H3I%<%ymQ9+RszrJA;(ciVifK@eE7hl>9k62 zLZGP$)x^3}wPS@21@)-L_e)0Y<{pWP@Wj*5P!hzG)N8(}>H-kVW{Ban>cls;?lKI) z>^ZtsO)QUL8sV(a9i$U^KFyisw1W9am3QC1lt}Xp6LMBcZX6(>nuTx*g?29y!Dp#j z{RxK%)=?mfa|H?O-u%xn;yUX#f+{g#bCt|L=-@L3US0Ua@~TClPp``sYoQ%s+-9&0 zA0@suIwwj=g(<1yt-xd+#x~L7KF}7=5J!((^d1$l2$qYeRBiA?+rrvNB?+%A7g44* zu4m3yk!OMF&J4pi$`QlYJ$Oo*S24)NO2TsA0Z4fT^H*m%>F}32YHnDev#LZqgSTje z+B2AXrf2~Z`hbFwWpzia_i_CIp%ku7dJiFRB1LD}8H&+#)#dzi}lp-KeD4+|l zE2k=G7GddKp{hIwGGs1BL3vOXQ3oeErMv#DBxML9Cf5|n@0`cDh754`KA)%UtbDCJdM_;A-O`{G*Tp0;UC-I~md$uWC2Q(eOjbXh=K!Ku!ZT2W0p(q@e() zBG8{sKMDq&Vu{C^qU^{eFFP45)2RnUUY|)*ka;LPzi+f}YPOCJc$Itk6Qy#Ku@*bO zlZ#oVK!8Q1a4n-i?mc`U5S_S(9tl8y_?^>Cuw~lvSA_v9WW~gam4-R-Mxf4TkHWA&y>z=I91?{O=v0}vjW7;K?SDK0XK^S z!$h&*&A8o9ex4WrZ3A(IqX!&1EYfA`|0^j8ly|oulprx$8M~Wuxm}Zm`>y!sMRkfn?h^r8Z<`v0{WX-8_k*8_M*2fM?jh++64y?r{05$Rn zK6vA%+$z^#R3T_UX&=b5YK!nK2TBb{*JJAhbo{6}a`D6yWZIp+d^Gq~xL*w>oJap>!sB@Xfu zb0)6p0uYU|c*#(Uz^entDJNv@xntwbvlXVfzKY52MvMRElfbtZm(du>lyzB^4zvpx67*BB@z3X z=w~GYEMmBW?p&>ATJUwC!~_3bjM!A@%$%P3Cy6o$FB^#yJA7rzy`3-QgkpEG2LXTw zyL$5QmLXrSKtvHFQjro-5k_o$TL%DnMz4hm+@tJbcwbh+Z%QOL`+3T3L-!tIHjb0MR7@QBSw7)Xp$buMNl5+zon<4E4b!3ZLN1X@2$iS~Dn z3FWNSj9-nh27<{m9x(B!G&fRvfFzTfBP~p%IWFf05&;&zRfv{ziOq9mbb)V&7rgQ0 zNh!+KmoL?3UY*x{f*FeT)HmBnGbg0+jnOW z22NF$3pJorGuI``Fg_Y$HlOKSR!ESfXNj8d&VQlDxEm1aw7}B^hHWMRkvE=&Hi3;b zzuFkUDZ7yn0BDO7SLe7mlK?Ih=z{>^%iPq;M55grK8u3H;?)~ajf7T-!O4~Ois;i8 zpsdCyS+ymUr6Yx|p?^@)xrreaRLra^{YfzDggUEqXv8r;0TXjwfvrhclnCa`MHwp2 z=!bL;Lv;*eo(w+YUc!z!vnDM&*6Lv^0s6&Bq&=q5g)XzIDC&t4>vtr??0z8N#V5A{ z(Gg1!`Oc@Nw!-fnP@D2GQ(UJBOaxIGOjX(J7V<7t;KZ&~iH}h70SjP_%tfq9lkxy2 zgKl3H1xKxLh>{3=_H$X zD@!+Y5zXycj&2;?zw!9DHy+-(adh{_gC{p0+{Hf*pWb-5d*kTf#^Z-K9z1q`9Nu_v zhYS~N`?4QhpDwB`AlT#3!BhtNStIQMb>#tLs@*Nd%la}ji+kaBWK~?4SnkCFH(o4} zOpRF3uZCt3=ca2S579PUb$5!Ry%!{6m^9tmEXQ_aN+YsqNlUr$AR z!JDK>@il~OYE#Y63nRrn`K!4IKTH>PAVV#KOltQcRY!ITAUlx+81y3rx_XGA(&Rb{ zYC6l=fis00Dg5$UD7|n>BVFX&#A>k>Rhd%v!`VsP1<6=M*u>;m1D=#}+}m7VR2q65u#WJEtFgj&loxC?0aTtS2TsV~Nd>%&@zk_sOW(1nVzHIO zaSA(3M#QLC1%o@v!Frrm zD`1k;e6Aspv#CmYI~x*oq70Ndn{pr$P8BZAC4371`j>Sx3Ne2)$_fECP-any=xsQK zg-UvwNj!ow=zdT2nYf@8QLO2SW>CUsz`n5Xbv~^Wj}icKI(5AffRH;DFH3OW#GCpa zHxMwgB@nqZzIkB)$&}cE%xT3HPeIL;+*Ww>btP{8cSc(D7vp-Nn^m`YnR6)a9W)5& zE{ugj)5P8 zT!d-rGu-pDn!@hg5gljuFG)Wyq?u+7P$A>gScYCk(9`9aZ4yZSAy-5zrTnm_Ia^Eka&v}0Oq&Y z!HBJ19yHu_4ds?^01)w(UdlK_WqeMUr{)jYu@7>v# zZ#@7?7nn0ldhh_cv&J!&k%%4Vt1!t@!WBkR`qD5zs(=TYh6|QD6A0G^L@drM1uCCl zl}K%3?0wm!1cD_KE(Xl^l`RSmWGAE>n;df%ffmG9nLB6{SCbBmq>wJaq4l5aI4HN;xAs1RHSzU&562RMkiDKEdv2 zcYm~ZFv1<5oe(DEfzFqb%V~G32rvIm44;G}c8;S_$v4h`5W~`3s8ppizaXp>T?>Sr zLo#{LIljIW>ze22B3sa)RV?h)hEo=^d%Tb#lOl?`Jm-`1@RZq1&Zqc*6*puO z#@Hr-jg4Rgv~=?-vVRaMW|vUAhA^#I{c+f-5r<+46`>au#4f6kOm`v9F=A`xDknnkaHv zI$A!&Pr`5q%ci^+F{zm4Nd#ErNCrsOoTX#vObG`+iJ&LH>q>#woO9M>(K*?3Zlj4x zI!7tbZDIq<+LKL{u5z348Tfj5f+mr4!N*L7vpQleJ&Q^hdfxEx_M9yq+?~Za;8QEY z=DF<&gm2UNY+rQgmS&L)4~=tZ9Wl)-`=5bPwj%)$@nnbxfstH~$1IvURVHC|v_20X zGM4jD<)vkv{=I`luO5z4&tC6_&%VF+qJDVyuYdZXc#+(Vqr;YnU2Ug0C)VOB>?V7l zI-A-6#xs?*2IrgXILyaK?W}b9ePjPAN8Br+fpZA_uzHc?!=2p^_<&N;G8G!VH*Xed ztQR_1$u4sU04jBaA9KhZH_vffvkTzUp&hqJ6`Pt(QxFW4i7J6Lk3Cr*dd|Sr85huc z*uG|fM_Id(MupDjCe&@V3ZYT#$7j=Zc(RtTyOy%ImU3q;Wq&Ot3j8GJ3g;(=QJ!~~3{s#Lk8v` z^L=V&+S}@6#<5`Je@WC)qOyWm91j+I%oj9Bf-1e`h^CaE{^b3)KmEy1e=@rH)1TZN z98XO#z&)Y?{LWNf4(xbv7&+Iv!K=6`2ES^Bs0Pdca|VH5-^TDyY*y#!k2=_TvONGF zfP45_-ofCg)^_l_BzOi)$j3xtl)2V}!j4OHfc|CxX&Qto9ppMPMVZ4iw*-yKfl8y1 z%?F8%%(wvdR)aWqkwtv zr{~AdUcNmZ9RBc^!JiIazdroo_%GiAb2+s@)pOm5GD#L2kPON|Gbn3FAxilE==GCl z5ajUj^B2#L|1yAl`R()LACBI<8T|I;>%rmR)#2;o=TF|gID9>L_4f6vmv4@SgTWiE zQ78zwD2K)_lOgSqE|rOkWy1dgmRP z-(2OOV*$hU;L+f3fB)8@Ei(M@An95-Fd z`l&_-vaGcEmJLpC4`#Zi$jx|w=y0lvPLM6+0Vd>V89T88|2ts7CW$D-O~gh?sgOP^ zbsB9IRS?FiC?NAHh^PHK(qoev#@G2P@sh%LKqUo zQ>EiV%XnRhl}YBLK-gt6x3>TG_uH5c6dAIK$UalSR4-P-wzeF*K5TC3tW?5Z4q1S8r&b()N58oXfsTk-__$4dXZw(#>+A5)v zQ3WceFyBB3q&kPqztzKCN7VccTC%=_m~^ZYyf^!`o*bQJz&84E>)nqhqm!E_pH6;r{o4DR z-);YF>*P1v-)(*O&DOh<#mUb5Tc1vDZg0W&$r6CS-~If@oA1AS1Yx&Mwy(dxx&7VA z_V&%~Pd@{3fBXCUTie?|A5pZqp6Iiz8|iO;10hDknKx8-Z=ImSQ;h`POI1?1~)cHaUjO?zC7@X`qTb1e=7X5Z08Vm-ijYp&pVtdgvW^ zWJ7%Z?6BP0-5xx8G`N24x;L7(2Y6x=bj0jd`3?H3CVZ2ZA~QTPyvYF(uBJkJMR9T% z0syKmYnIQ`xr$BHQ5E|}RW#i^iz!rbyakN`27^`|YOGBVh_(5nX{qga!lJl6SpIH= zw*i{Q38A*Rdi|W-L@kP&!ppd2Oo#5q5S9;-O_WKCO=4VSL=)zXbB>4XXhkrcC?-#K zbi-4RMFgEGchv`@nMrDMeVi*3L!b84LNACcVetO=CE6-7b;A9fYtV|O$yQf>uNZuhk*s1_ zR5Bcm^(6ZmV-gvlFfeV<*mz3I0-5^n(D7RRgQ6qg6mafQbnpG|7%kN zv9y0dujG!JZH-Qbw|+i?I!TpL=CohwRuIT^4eH_|!cP6te8X~_s^WPX##N*XZg5t%EMTMB&y!LP1TXz>Bq zN?$ErR}ikyWWc^=Vy^Iy&rq_BYE?Zp&taVNmigA+74sD?^ZJ3Up`4nVU`Wq)=ku^o?Rba_sxyk zAXwin*DuJmnn^V_DVU~XUPX3mu(!Q&EACXBzxNt#Twm01WqXyi7@KClkpSwizL!>d z*B<{%EBR{56>U_5NmZUaIaWYV*b2PX(E{MrgrS|7|EeJ~3<@IZ)nceURKO^e%h@3+ zL3^7wK39g9n)v)(CJ^P)noJsGVsMtJW=Om3rer!TkLwIR61;f^i)OU|zm27kN3T>~ z)~j)dmgQ{eE*Iw{gaUR2(l7&8_jK2 z#igxC+98y}SuFW%1=Liwd9c z?o5dKVyL!v_73hJJlMZ?aKELt5led~b(5^Bv#yU(Xyx+NETnB@{}K~vD|@YtRCe=g zqw7i%!N>{;orsuNGu{oBu3h#*jye5#u^f`Rg{`{<6x-%C5Rn&)ZM@-z^~pI`z+|19 zZ;)bhGik#^Fu8BGnze${&~-PA@Ah+-g!iVNB}rZm<9D|E8+KHN6sI`ttk3=RdeQgSlqMZKr^{u2t$htaP-2 zDl}|C_|HlC@w4ZzpMF5M&cAFB9SwP(pVeOw<7Z~}lb0`E9KPD9Xq$2SOKQ^RMfRB~ zd-MGG=nqGK`SNTKUJ%R7NdrPLbkK1|z z=>Ad?LHCx@{`~j_#r*2|55J?YKY#z?+41qK*GGSRd-MkN**)O#eSlb2)PvoJ_mx;difJzWo6L9xRo4`ReT}i1prsgZ;Y) zcbCGCUL1Y@?Du%iFA$atELMosUz8@1CsM%h%pN zp*BM+eNu|=q1-HQw{d%%Zafdt5isGn$jX)>yhyLx`7dI)Yn7 zD7b|^P(@KE{w5;tK-|)XtzWq}s>?>V^~TuQDrIeg)2K~s8?Q8{+c-K(VYHZaWvG&~iHH*Z<-;K!=7T(&8Y$)b+sITO!X9VkO)R9V!dv$=x74n;cSXsDZTx217zy?^!Q7Mlw*g`Al$H`MUu5zqRKtHZKZ zQy;ZS586E(3EO+3YPF{1PHdtgd5$a5%IVV9(8k=aKf=;}nL%AB%hTzwmeFR+_k*{#vLAJxwJ?#{y-H{ZW&|9bzo{o8-v zf|F)M+8#}09$ljdzPOa8s+g|nfWGzBv?sPoAunLkfB*jdJ9~G%OfT9NNoHf|Sq~W> z!!Jq*`PZYvy>zqh_dpbsi2?t5?u#u$wdzx7lQwzqo%{7}MR?z81RFlPo*u0c^edJt zV6AX4R49gng<>g|{B>AXUEV7?Zl-y^YZ67|bm?=+GLouYYX0ffF42iWJ~nNBgD$L< zv%&BzBAMv2t){=V`Nq+Gr8(!u{rXjgRdz<4Li1#Qa94h~>6KeLbkf|ab9?ZWHs3#E zdUD0XGoDu6MAAPjBg+q1mRsu^7+jguwe?%pkk+l?Go2YO*NWBstF$_*BGLupFs;A7 z7ls_tRu#-Ytg*4IKX`Q|U2c2rM*B{*syS%0;a{ukyy&04#~Kq`Dm8)#)y zk!&vea~2H$lAKs6@YVBS1Ib@&Me`N&gRAnd$(bv~LC5dj#CEZ9=B&(6Zt{O=Hh~R5 z%o4s4TKkMuI`5Y9W~Su9wKnM0vSHJ#UP`}OGo&@d^AtE!75{%N(K~ZNGqz`@Y&~56 z^Hv+H8vHfZ9V=n~b1M*;d$N;~xd)a!QT}bMyF6QYuueSxhK#*v&BYYEno*&D*ja9h zb=vpf7C4--6SNH?S~La%lAL;7+Mmh*Xq^&Ge0>G)cYK{x?y}r=%dV!#zrA#F`Dk#- zQt{tB_awn0qkvtup1#amw}{Hy9AC1#10H&;fY2tJ?q}l*cwlbXO|HWd*nau+`D^e# z`u3NO^e~JaqM4|m_~4B?5u`i`0eW#TU8F_Jhep$ p^2yy%#6cCO%TE&w;YH*`$@63wr|+`RHd7i!{|O2S$ghE^0ste5M3n#l diff --git a/v2rayN/v2rayN/Sample/BlankPac.txt b/v2rayN/v2rayN/Sample/BlankPac.txt deleted file mode 100644 index 906a14cb..00000000 --- a/v2rayN/v2rayN/Sample/BlankPac.txt +++ /dev/null @@ -1,5 +0,0 @@ -var proxy = "__PROXY__"; - -function FindProxyForURL(url, host) { - return proxy; -} \ No newline at end of file diff --git a/v2rayN/v2rayN/Sample/SampleClientConfig.txt b/v2rayN/v2rayN/Sample/SampleClientConfig.txt index a582c6ea..f2924c9a 100644 --- a/v2rayN/v2rayN/Sample/SampleClientConfig.txt +++ b/v2rayN/v2rayN/Sample/SampleClientConfig.txt @@ -1,17 +1,11 @@ -{ - "log": { - "access": "", - "error": "", - "loglevel": "error" - }, +{ "log": { "access": "Vaccess.log", "error": "Verror.log", "loglevel": "warning" }, - "inbounds": [ - { - "tag": "proxy", + "inbounds": [{ + "tag": "tag1", "port": 10808, "protocol": "socks", "listen": "127.0.0.1", @@ -26,6 +20,22 @@ "tls" ] } + }, + { + "tag": "tag2", + "port": 10809, + "protocol": "socks", + "listen": "127.0.0.1", + "settings": { + "allowTransparent": false + }, + "sniffing": { + "enabled": true, + "destOverride": [ + "http", + "tls" + ] + } } ], "outbounds": [{ diff --git a/v2rayN/v2rayN/Tool/Utils.cs b/v2rayN/v2rayN/Tool/Utils.cs index 22c37976..8fa10c63 100644 --- a/v2rayN/v2rayN/Tool/Utils.cs +++ b/v2rayN/v2rayN/Tool/Utils.cs @@ -19,6 +19,7 @@ using ZXing.Common; using ZXing.QrCode; using System.Security.Principal; using v2rayN.Base; +using Newtonsoft.Json.Linq; namespace v2rayN { @@ -146,6 +147,19 @@ namespace v2rayN } return result; } + + public static JObject ParseJson(string strJson) + { + try + { + JObject obj = JObject.Parse(strJson); + return obj; + } + catch + { + return null; + } + } #endregion #region 转换函数 diff --git a/v2rayN/v2rayN/v2rayN.csproj b/v2rayN/v2rayN/v2rayN.csproj index d1f912ba..51a06fb1 100644 --- a/v2rayN/v2rayN/v2rayN.csproj +++ b/v2rayN/v2rayN/v2rayN.csproj @@ -125,12 +125,25 @@ BaseServerForm.cs + Form MainForm.cs + + Form + + + RoutingSettingForm.cs + + + UserControl + + + RoutingSettingControl.cs + Form @@ -165,16 +178,16 @@ - - - Component + + + @@ -287,6 +300,13 @@ QRCodeControl.cs Designer + + RoutingSettingControl.cs + Designer + + + RoutingSettingControl.cs + SubSettingControl.cs Designer @@ -294,6 +314,13 @@ SubSettingControl.cs + + RoutingSettingForm.cs + Designer + + + RoutingSettingForm.cs + SubSettingForm.cs Designer @@ -347,8 +374,6 @@ - - @@ -411,7 +436,6 @@ - From c2c9c6a6dbf6da7563fd1ce4865a3c77343057a2 Mon Sep 17 00:00:00 2001 From: 2dust <31833384+2dust@users.noreply.github.com> Date: Fri, 25 Dec 2020 20:43:39 +0800 Subject: [PATCH 35/54] Create ECoreType.cs --- v2rayN/v2rayN/Mode/ECoreType.cs | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 v2rayN/v2rayN/Mode/ECoreType.cs diff --git a/v2rayN/v2rayN/Mode/ECoreType.cs b/v2rayN/v2rayN/Mode/ECoreType.cs new file mode 100644 index 00000000..4049db06 --- /dev/null +++ b/v2rayN/v2rayN/Mode/ECoreType.cs @@ -0,0 +1,9 @@ + +namespace v2rayN.Mode +{ + public enum ECoreType + { + v2fly_core = 1, + xray_core = 2 + } +} From 52f1bdf83480d204ecbb4cb2170051b39dc5f1cb Mon Sep 17 00:00:00 2001 From: RPRX <63339210+rprx@users.noreply.github.com> Date: Fri, 25 Dec 2020 20:21:21 +0000 Subject: [PATCH 36/54] Update UI --- v2rayN/v2rayN/Forms/MainForm.resx | 2 +- v2rayN/v2rayN/Forms/MainForm.zh-Hans.resx | 2 +- v2rayN/v2rayN/Handler/DownloadHandle.cs | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/v2rayN/v2rayN/Forms/MainForm.resx b/v2rayN/v2rayN/Forms/MainForm.resx index e1d6def6..ad43b0db 100644 --- a/v2rayN/v2rayN/Forms/MainForm.resx +++ b/v2rayN/v2rayN/Forms/MainForm.resx @@ -1358,7 +1358,7 @@ $this - Update xrayCore + Update XrayCore toolStripSeparator2 diff --git a/v2rayN/v2rayN/Forms/MainForm.zh-Hans.resx b/v2rayN/v2rayN/Forms/MainForm.zh-Hans.resx index ab434f47..31c2ed6a 100644 --- a/v2rayN/v2rayN/Forms/MainForm.zh-Hans.resx +++ b/v2rayN/v2rayN/Forms/MainForm.zh-Hans.resx @@ -456,7 +456,7 @@ 180, 22 - xray-Core + Xray-Core 85, 53 diff --git a/v2rayN/v2rayN/Handler/DownloadHandle.cs b/v2rayN/v2rayN/Handler/DownloadHandle.cs index 369fbc72..5dacf61f 100644 --- a/v2rayN/v2rayN/Handler/DownloadHandle.cs +++ b/v2rayN/v2rayN/Handler/DownloadHandle.cs @@ -56,8 +56,8 @@ namespace v2rayN.Handler private const string nUrl = "https://github.com/2dust/v2rayN/releases/download/{0}/v2rayN.zip"; private readonly string v2flyCoreLatestUrl = "https://github.com/v2fly/v2ray-core/releases/latest"; private const string v2flyCoreUrl = "https://github.com/v2fly/v2ray-core/releases/download/{0}/v2ray-windows-{1}.zip"; - private readonly string xrayCoreLatestUrl = "https://github.com/xtls/xray-core/releases/latest"; - private const string xrayCoreUrl = "https://github.com/xtls/xray-core/releases/download/{0}/xray-windows-{1}.zip"; + private readonly string xrayCoreLatestUrl = "https://github.com/XTLS/Xray-core/releases/latest"; + private const string xrayCoreUrl = "https://github.com/XTLS/Xray-core/releases/download/{0}/Xray-windows-{1}.zip"; public async void CheckUpdateAsync(string type) { From 03c4954c27c18325ce0e82e58a090eac2be62e77 Mon Sep 17 00:00:00 2001 From: 2dust <31833384+2dust@users.noreply.github.com> Date: Sun, 27 Dec 2020 19:43:28 +0800 Subject: [PATCH 37/54] up4.1 --- .../Forms/RoutingSettingControl.Designer.cs | 24 --- v2rayN/v2rayN/Forms/RoutingSettingControl.cs | 3 - .../v2rayN/Forms/RoutingSettingControl.resx | 174 ++++++------------ .../Forms/RoutingSettingControl.zh-Hans.resx | 25 +-- v2rayN/v2rayN/Forms/RoutingSettingForm.cs | 9 +- v2rayN/v2rayN/Handler/V2rayConfigHandler.cs | 63 +------ v2rayN/v2rayN/Mode/Config.cs | 10 +- v2rayN/v2rayN/Properties/AssemblyInfo.cs | 2 +- v2rayN/v2rayN/Sample/custom_routing_private | 3 + v2rayN/v2rayN/v2rayN.csproj | 1 + 10 files changed, 68 insertions(+), 246 deletions(-) create mode 100644 v2rayN/v2rayN/Sample/custom_routing_private diff --git a/v2rayN/v2rayN/Forms/RoutingSettingControl.Designer.cs b/v2rayN/v2rayN/Forms/RoutingSettingControl.Designer.cs index 56ae1ccf..912b2ab4 100644 --- a/v2rayN/v2rayN/Forms/RoutingSettingControl.Designer.cs +++ b/v2rayN/v2rayN/Forms/RoutingSettingControl.Designer.cs @@ -32,8 +32,6 @@ this.groupBox2 = new System.Windows.Forms.GroupBox(); this.btnExpand = new System.Windows.Forms.Button(); this.label4 = new System.Windows.Forms.Label(); - this.label1 = new System.Windows.Forms.Label(); - this.cmbroutingMode = new System.Windows.Forms.ComboBox(); this.cmbOutboundTag = new System.Windows.Forms.ComboBox(); this.btnRemove = new System.Windows.Forms.Button(); this.txtUserRule = new System.Windows.Forms.TextBox(); @@ -48,8 +46,6 @@ resources.ApplyResources(this.groupBox2, "groupBox2"); this.groupBox2.Controls.Add(this.btnExpand); this.groupBox2.Controls.Add(this.label4); - this.groupBox2.Controls.Add(this.label1); - this.groupBox2.Controls.Add(this.cmbroutingMode); this.groupBox2.Controls.Add(this.cmbOutboundTag); this.groupBox2.Controls.Add(this.btnRemove); this.groupBox2.Controls.Add(this.txtUserRule); @@ -71,24 +67,6 @@ resources.ApplyResources(this.label4, "label4"); this.label4.Name = "label4"; // - // label1 - // - resources.ApplyResources(this.label1, "label1"); - this.label1.Name = "label1"; - // - // cmbroutingMode - // - resources.ApplyResources(this.cmbroutingMode, "cmbroutingMode"); - this.cmbroutingMode.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.cmbroutingMode.FormattingEnabled = true; - this.cmbroutingMode.Items.AddRange(new object[] { - resources.GetString("cmbroutingMode.Items"), - resources.GetString("cmbroutingMode.Items1"), - resources.GetString("cmbroutingMode.Items2"), - resources.GetString("cmbroutingMode.Items3"), - resources.GetString("cmbroutingMode.Items4")}); - this.cmbroutingMode.Name = "cmbroutingMode"; - // // cmbOutboundTag // resources.ApplyResources(this.cmbOutboundTag, "cmbOutboundTag"); @@ -151,8 +129,6 @@ private System.Windows.Forms.Label label3; private System.Windows.Forms.Button btnRemove; private System.Windows.Forms.ComboBox cmbOutboundTag; - private System.Windows.Forms.Label label1; - private System.Windows.Forms.ComboBox cmbroutingMode; private System.Windows.Forms.Label label4; private System.Windows.Forms.Button btnExpand; } diff --git a/v2rayN/v2rayN/Forms/RoutingSettingControl.cs b/v2rayN/v2rayN/Forms/RoutingSettingControl.cs index 2637aacf..33f44027 100644 --- a/v2rayN/v2rayN/Forms/RoutingSettingControl.cs +++ b/v2rayN/v2rayN/Forms/RoutingSettingControl.cs @@ -31,8 +31,6 @@ namespace v2rayN.Forms { txtRemarks.Text = routingItem.remarks.ToString(); cmbOutboundTag.Text = routingItem.outboundTag; - int.TryParse(routingItem.routingMode, out int routingMode); - cmbroutingMode.SelectedIndex = routingMode; txtUserRule.Text = Utils.List2String(routingItem.userRules, true); } } @@ -42,7 +40,6 @@ namespace v2rayN.Forms { routingItem.remarks = txtRemarks.Text.TrimEx(); routingItem.outboundTag = cmbOutboundTag.Text; - routingItem.routingMode = cmbroutingMode.SelectedIndex.ToString(); routingItem.userRules = Utils.String2List(txtUserRule.Text); } } diff --git a/v2rayN/v2rayN/Forms/RoutingSettingControl.resx b/v2rayN/v2rayN/Forms/RoutingSettingControl.resx index 7c33a91b..656bfa7b 100644 --- a/v2rayN/v2rayN/Forms/RoutingSettingControl.resx +++ b/v2rayN/v2rayN/Forms/RoutingSettingControl.resx @@ -117,9 +117,6 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - Pre-defined - NoControl @@ -128,29 +125,23 @@ 733, 164 + + Rule + 119, 20 + + direct + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 groupBox2 - - 9 - - - 127, 53 - - - 75, 23 - - 127, 87 - - - Remove + 127, 50 txtRemarks @@ -162,14 +153,14 @@ 23 + + 4 + RoutingSettingControl - - 162, 21 - - - label1 + + Expand System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -181,7 +172,7 @@ 28 - 7 + 5 proxy @@ -189,11 +180,11 @@ 77, 12 - - 362, 21 + + 2 - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 544, 21 6, 12 @@ -213,41 +204,20 @@ btnExpand - - groupBox2 - 12, 87 - - 2 + + txtUserRule - - cmbroutingMode + + True - - 255, 20 + + 75, 23 - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Global - - - 71, 12 - - - Bypass mainland address - - - Bypassing the LAN address - - - 4 - - - 640, 21 + + groupBox2 Fill @@ -261,18 +231,18 @@ 25 - + groupBox2 + + 11 + NoControl 47, 12 - - True - btnRemove @@ -291,35 +261,23 @@ Out Tag - - 27 - block - - direct - - - 75, 23 - - - NoControl - - - 26 + + Remove - 5 + 3 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 groupBox2 - - 6 - - - Expand + + groupBox2 1 @@ -331,7 +289,7 @@ groupBox2 - 588, 68 + 588, 105 True @@ -342,12 +300,6 @@ groupBox2 - - True - - - Bypassing LAN and mainland address - NoControl @@ -360,35 +312,26 @@ System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - groupBox2 - 733, 164 - 8 + 6 Top, Bottom, Left, Right - - 12, 57 + + 362, 21 cmbOutboundTag - - 11 - Remarks - - groupBox2 - - - 3 + + 0 True @@ -396,8 +339,8 @@ 12, 25 - - groupBox2 + + 75, 23 301, 26 @@ -405,8 +348,8 @@ 47, 12 - - Rule + + 162, 21 10 @@ -414,32 +357,23 @@ Domain or IP + + $this + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - txtUserRule - - - 0 - System.Windows.Forms.UserControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 0 - - $this + + 640, 21 - - Use custom Domain or IP - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 640, 46 + + 7 System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 diff --git a/v2rayN/v2rayN/Forms/RoutingSettingControl.zh-Hans.resx b/v2rayN/v2rayN/Forms/RoutingSettingControl.zh-Hans.resx index d95c2560..94e70d37 100644 --- a/v2rayN/v2rayN/Forms/RoutingSettingControl.zh-Hans.resx +++ b/v2rayN/v2rayN/Forms/RoutingSettingControl.zh-Hans.resx @@ -119,7 +119,7 @@ - 619, 46 + 526, 20 扩大 @@ -130,27 +130,6 @@ 出口标签 - - 65, 12 - - - 预定义规则 - - - 使用自定义域名或IP - - - 全局 - - - 绕过局域网 - - - 绕过大陆地址 - - - 绕过局域网及大陆地址 - 619, 20 @@ -158,7 +137,7 @@ 移除 - 567, 64 + 567, 104 29, 12 diff --git a/v2rayN/v2rayN/Forms/RoutingSettingForm.cs b/v2rayN/v2rayN/Forms/RoutingSettingForm.cs index 0b145a04..35bd956f 100644 --- a/v2rayN/v2rayN/Forms/RoutingSettingForm.cs +++ b/v2rayN/v2rayN/Forms/RoutingSettingForm.cs @@ -65,6 +65,8 @@ namespace v2rayN.Forms private void btnOK_Click(object sender, EventArgs e) { + config.domainStrategy = cmbdomainStrategy.Text; + if (config.routingItem.Count <= 0) { AddSub("proxy", ""); @@ -93,12 +95,11 @@ namespace v2rayN.Forms } - private void AddSub(string outboundTag, string userRule, string routingMode = "0") + private void AddSub(string outboundTag, string userRule) { RoutingItem RoutingItem = new RoutingItem { remarks = outboundTag, - routingMode = routingMode, outboundTag = outboundTag, userRules = Utils.String2List(userRule) @@ -129,8 +130,8 @@ namespace v2rayN.Forms AddSub(lstTag[k], result); } - AddSub(Global.directTag, "", "4"); - AddSub(Global.agentTag, "", "0"); + AddSub(Global.directTag, Utils.GetEmbedText(Global.CustomRoutingFileName + "private")); + AddSub(Global.agentTag, ""); RefreshSubsView(); } diff --git a/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs b/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs index 654a7571..61175ba4 100644 --- a/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs +++ b/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs @@ -197,28 +197,7 @@ namespace v2rayN.Handler foreach (var item in config.routingItem) { - if (item.routingMode != "0") - { - switch (item.routingMode) - { - case "1": - break; - case "2": - routingGeo("ip", "private", Global.directTag, ref v2rayConfig); - break; - case "3": - routingGeo("", "cn", Global.directTag, ref v2rayConfig); - break; - case "4": - routingGeo("ip", "private", Global.directTag, ref v2rayConfig); - routingGeo("", "cn", Global.directTag, ref v2rayConfig); - break; - } - } - else - { - routingUserRule(item.userRules, item.outboundTag, ref v2rayConfig); - } + routingUserRule(item.userRules, item.outboundTag, ref v2rayConfig); } } } @@ -297,46 +276,6 @@ namespace v2rayN.Handler return 0; } - - private static int routingGeo(string ipOrDomain, string code, string tag, ref V2rayConfig v2rayConfig) - { - try - { - if (!Utils.IsNullOrEmpty(code)) - { - //IP - if (ipOrDomain == "ip" || ipOrDomain == "") - { - RulesItem rulesItem = new RulesItem - { - type = "field", - outboundTag = Global.directTag, - ip = new List() - }; - rulesItem.ip.Add($"geoip:{code}"); - - v2rayConfig.routing.rules.Add(rulesItem); - } - - if (ipOrDomain == "domain" || ipOrDomain == "") - { - RulesItem rulesItem = new RulesItem - { - type = "field", - outboundTag = Global.directTag, - domain = new List() - }; - rulesItem.domain.Add($"geosite:{code}"); - v2rayConfig.routing.rules.Add(rulesItem); - } - } - } - catch - { - } - return 0; - } - /// /// vmess协议服务器配置 /// diff --git a/v2rayN/v2rayN/Mode/Config.cs b/v2rayN/v2rayN/Mode/Config.cs index 42c01f70..245d9ed0 100644 --- a/v2rayN/v2rayN/Mode/Config.cs +++ b/v2rayN/v2rayN/Mode/Config.cs @@ -704,15 +704,7 @@ namespace v2rayN.Mode { get; set; } - - /// - /// 路由模式 - /// - public string routingMode - { - get; set; - } - + /// /// /// diff --git a/v2rayN/v2rayN/Properties/AssemblyInfo.cs b/v2rayN/v2rayN/Properties/AssemblyInfo.cs index 79c9ddd1..794c9c1a 100644 --- a/v2rayN/v2rayN/Properties/AssemblyInfo.cs +++ b/v2rayN/v2rayN/Properties/AssemblyInfo.cs @@ -32,4 +32,4 @@ using System.Runtime.InteropServices; // 方法是按如下所示使用“*”: //[assembly: AssemblyVersion("1.0.*")] //[assembly: AssemblyVersion("1.0.0")] -[assembly: AssemblyFileVersion("4.0")] +[assembly: AssemblyFileVersion("4.1")] diff --git a/v2rayN/v2rayN/Sample/custom_routing_private b/v2rayN/v2rayN/Sample/custom_routing_private new file mode 100644 index 00000000..8003b809 --- /dev/null +++ b/v2rayN/v2rayN/Sample/custom_routing_private @@ -0,0 +1,3 @@ +geoip:private, +geoip:cn, +geosite:cn \ No newline at end of file diff --git a/v2rayN/v2rayN/v2rayN.csproj b/v2rayN/v2rayN/v2rayN.csproj index 51a06fb1..d79b2067 100644 --- a/v2rayN/v2rayN/v2rayN.csproj +++ b/v2rayN/v2rayN/v2rayN.csproj @@ -373,6 +373,7 @@ + From 9dc8cba3f020b8c1e5d5c266999b06f145fcd8b4 Mon Sep 17 00:00:00 2001 From: 2dust <31833384+2dust@users.noreply.github.com> Date: Wed, 30 Dec 2020 15:55:37 +0800 Subject: [PATCH 38/54] up4.2 --- v2rayN/v2rayN/Base/ListViewFlickerFree.cs | 2 + v2rayN/v2rayN/Forms/AddServerForm.resx | 2 +- v2rayN/v2rayN/Forms/MainForm.Designer.cs | 24 +- v2rayN/v2rayN/Forms/MainForm.cs | 40 +- v2rayN/v2rayN/Forms/MainForm.resx | 16 +- v2rayN/v2rayN/Forms/MainForm.zh-Hans.resx | 18 +- .../Forms/OptionSettingForm.Designer.cs | 45 +- v2rayN/v2rayN/Forms/OptionSettingForm.cs | 2 + v2rayN/v2rayN/Forms/OptionSettingForm.resx | 2459 +++--- .../Forms/OptionSettingForm.zh-Hans.resx | 30 +- .../Forms/RoutingSettingControl.Designer.cs | 135 - v2rayN/v2rayN/Forms/RoutingSettingControl.cs | 73 - .../RoutingSettingDetailsForm.Designer.cs | 211 + .../v2rayN/Forms/RoutingSettingDetailsForm.cs | 86 + ...ol.resx => RoutingSettingDetailsForm.resx} | 602 +- ...=> RoutingSettingDetailsForm.zh-Hans.resx} | 42 +- .../Forms/RoutingSettingForm.Designer.cs | 229 +- v2rayN/v2rayN/Forms/RoutingSettingForm.cs | 345 +- v2rayN/v2rayN/Forms/RoutingSettingForm.resx | 419 +- .../Forms/RoutingSettingForm.zh-Hans.resx | 134 +- v2rayN/v2rayN/Global.cs | 5 +- v2rayN/v2rayN/Handler/ConfigHandler.cs | 140 +- v2rayN/v2rayN/Handler/DownloadHandle.cs | 14 +- v2rayN/v2rayN/Handler/V2rayConfigHandler.cs | 82 +- v2rayN/v2rayN/Handler/V2rayHandler.cs | 32 +- .../v2rayN/HttpProxyHandler/PrivoxyHandler.cs | 2 +- v2rayN/v2rayN/Mode/Config.cs | 39 +- v2rayN/v2rayN/Mode/ECoreType.cs | 4 +- v2rayN/v2rayN/Mode/ERoutingSort.cs | 11 - v2rayN/v2rayN/Mode/ESysProxyType.cs | 4 +- v2rayN/v2rayN/Mode/RulesItem.cs | 36 + v2rayN/v2rayN/Mode/V2rayConfig.cs | 28 - v2rayN/v2rayN/Properties/AssemblyInfo.cs | 2 +- .../v2rayN/Properties/Resources.Designer.cs | 17 - v2rayN/v2rayN/Properties/Resources.resx | 3 - v2rayN/v2rayN/Resources/pac.txt | 7614 ----------------- v2rayN/v2rayN/Resources/privoxy_conf.txt | 8 - v2rayN/v2rayN/Resx/ResUI.Designer.cs | 29 +- v2rayN/v2rayN/Resx/ResUI.resx | 9 + v2rayN/v2rayN/Resx/ResUI.zh-Hans.resx | 9 + v2rayN/v2rayN/Sample/custom_routing_rules | 28 + v2rayN/v2rayN/Tool/CDateTime.cs | 156 - v2rayN/v2rayN/Tool/Utils.cs | 7 +- v2rayN/v2rayN/v2rayN.csproj | 25 +- v2rayN/v2rayN/v2rayN.csproj.user | 2 +- 45 files changed, 3278 insertions(+), 9942 deletions(-) delete mode 100644 v2rayN/v2rayN/Forms/RoutingSettingControl.Designer.cs delete mode 100644 v2rayN/v2rayN/Forms/RoutingSettingControl.cs create mode 100644 v2rayN/v2rayN/Forms/RoutingSettingDetailsForm.Designer.cs create mode 100644 v2rayN/v2rayN/Forms/RoutingSettingDetailsForm.cs rename v2rayN/v2rayN/Forms/{RoutingSettingControl.resx => RoutingSettingDetailsForm.resx} (53%) rename v2rayN/v2rayN/Forms/{RoutingSettingControl.zh-Hans.resx => RoutingSettingDetailsForm.zh-Hans.resx} (85%) delete mode 100644 v2rayN/v2rayN/Mode/ERoutingSort.cs create mode 100644 v2rayN/v2rayN/Mode/RulesItem.cs delete mode 100644 v2rayN/v2rayN/Resources/pac.txt delete mode 100644 v2rayN/v2rayN/Resources/privoxy_conf.txt create mode 100644 v2rayN/v2rayN/Sample/custom_routing_rules delete mode 100644 v2rayN/v2rayN/Tool/CDateTime.cs diff --git a/v2rayN/v2rayN/Base/ListViewFlickerFree.cs b/v2rayN/v2rayN/Base/ListViewFlickerFree.cs index a113a7bc..c70ccfc6 100644 --- a/v2rayN/v2rayN/Base/ListViewFlickerFree.cs +++ b/v2rayN/v2rayN/Base/ListViewFlickerFree.cs @@ -46,5 +46,7 @@ namespace v2rayN.Base } catch { } } + + } } \ No newline at end of file diff --git a/v2rayN/v2rayN/Forms/AddServerForm.resx b/v2rayN/v2rayN/Forms/AddServerForm.resx index 6d3eec6c..156f1f49 100644 --- a/v2rayN/v2rayN/Forms/AddServerForm.resx +++ b/v2rayN/v2rayN/Forms/AddServerForm.resx @@ -1318,7 +1318,7 @@ True - 25 + 114 6, 12 diff --git a/v2rayN/v2rayN/Forms/MainForm.Designer.cs b/v2rayN/v2rayN/Forms/MainForm.Designer.cs index 1b546c7b..148b09d9 100644 --- a/v2rayN/v2rayN/Forms/MainForm.Designer.cs +++ b/v2rayN/v2rayN/Forms/MainForm.Designer.cs @@ -68,9 +68,9 @@ this.notifyMain = new System.Windows.Forms.NotifyIcon(this.components); this.cmsMain = new System.Windows.Forms.ContextMenuStrip(this.components); this.menuSysAgentMode = new System.Windows.Forms.ToolStripMenuItem(); - this.menuKeepNothing = new System.Windows.Forms.ToolStripMenuItem(); - this.menuGlobal = new System.Windows.Forms.ToolStripMenuItem(); this.menuKeepClear = new System.Windows.Forms.ToolStripMenuItem(); + this.menuGlobal = new System.Windows.Forms.ToolStripMenuItem(); + this.menuKeepNothing = new System.Windows.Forms.ToolStripMenuItem(); this.menuServers = new System.Windows.Forms.ToolStripMenuItem(); this.menuAddServers2 = new System.Windows.Forms.ToolStripMenuItem(); this.menuScanScreen2 = new System.Windows.Forms.ToolStripMenuItem(); @@ -421,16 +421,16 @@ // resources.ApplyResources(this.menuSysAgentMode, "menuSysAgentMode"); this.menuSysAgentMode.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.menuKeepNothing, + this.menuKeepClear, this.menuGlobal, - this.menuKeepClear}); + this.menuKeepNothing}); this.menuSysAgentMode.Name = "menuSysAgentMode"; // - // menuKeepNothing + // menuKeepClear // - resources.ApplyResources(this.menuKeepNothing, "menuKeepNothing"); - this.menuKeepNothing.Name = "menuKeepNothing"; - this.menuKeepNothing.Click += new System.EventHandler(this.menuKeepNothing_Click); + resources.ApplyResources(this.menuKeepClear, "menuKeepClear"); + this.menuKeepClear.Name = "menuKeepClear"; + this.menuKeepClear.Click += new System.EventHandler(this.menuKeepClear_Click); // // menuGlobal // @@ -438,11 +438,11 @@ this.menuGlobal.Name = "menuGlobal"; this.menuGlobal.Click += new System.EventHandler(this.menuGlobal_Click); // - // menuKeepClear + // menuKeepNothing // - resources.ApplyResources(this.menuKeepClear, "menuKeepClear"); - this.menuKeepClear.Name = "menuKeepClear"; - this.menuKeepClear.Click += new System.EventHandler(this.menuKeepClear_Click); + resources.ApplyResources(this.menuKeepNothing, "menuKeepNothing"); + this.menuKeepNothing.Name = "menuKeepNothing"; + this.menuKeepNothing.Click += new System.EventHandler(this.menuKeepNothing_Click); // // menuServers // diff --git a/v2rayN/v2rayN/Forms/MainForm.cs b/v2rayN/v2rayN/Forms/MainForm.cs index 0b7b2e55..96e6819e 100644 --- a/v2rayN/v2rayN/Forms/MainForm.cs +++ b/v2rayN/v2rayN/Forms/MainForm.cs @@ -223,11 +223,7 @@ namespace v2rayN.Forms } VmessItem item = config.vmess[k]; - - void _addSubItem(ListViewItem i, string name, string text) - { - i.SubItems.Add(new ListViewItem.ListViewSubItem() { Name = name, Text = text }); - } + bool stats = statistics != null && statistics.Enable; if (stats) { @@ -241,20 +237,20 @@ namespace v2rayN.Forms } } ListViewItem lvItem = new ListViewItem(def); - _addSubItem(lvItem, EServerColName.configType.ToString(), ((EConfigType)item.configType).ToString()); - _addSubItem(lvItem, EServerColName.remarks.ToString(), item.remarks); - _addSubItem(lvItem, EServerColName.address.ToString(), item.address); - _addSubItem(lvItem, EServerColName.port.ToString(), item.port.ToString()); - _addSubItem(lvItem, EServerColName.security.ToString(), item.security); - _addSubItem(lvItem, EServerColName.network.ToString(), item.network); - _addSubItem(lvItem, EServerColName.subRemarks.ToString(), item.getSubRemarks(config)); - _addSubItem(lvItem, EServerColName.testResult.ToString(), item.testResult); + Utils.AddSubItem(lvItem, EServerColName.configType.ToString(), ((EConfigType)item.configType).ToString()); + Utils.AddSubItem(lvItem, EServerColName.remarks.ToString(), item.remarks); + Utils.AddSubItem(lvItem, EServerColName.address.ToString(), item.address); + Utils.AddSubItem(lvItem, EServerColName.port.ToString(), item.port.ToString()); + Utils.AddSubItem(lvItem, EServerColName.security.ToString(), item.security); + Utils.AddSubItem(lvItem, EServerColName.network.ToString(), item.network); + Utils.AddSubItem(lvItem, EServerColName.subRemarks.ToString(), item.getSubRemarks(config)); + Utils.AddSubItem(lvItem, EServerColName.testResult.ToString(), item.testResult); if (stats) { - _addSubItem(lvItem, EServerColName.todayDown.ToString(), todayDown); - _addSubItem(lvItem, EServerColName.todayUp.ToString(), todayUp); - _addSubItem(lvItem, EServerColName.totalDown.ToString(), totalDown); - _addSubItem(lvItem, EServerColName.totalUp.ToString(), totalUp); + Utils.AddSubItem(lvItem, EServerColName.todayDown.ToString(), todayDown); + Utils.AddSubItem(lvItem, EServerColName.todayUp.ToString(), todayUp); + Utils.AddSubItem(lvItem, EServerColName.totalDown.ToString(), totalDown); + Utils.AddSubItem(lvItem, EServerColName.totalUp.ToString(), totalUp); } if (k % 2 == 1) // 隔行着色 @@ -1138,17 +1134,15 @@ namespace v2rayN.Forms #endregion #region 系统代理相关 - - + private void menuKeepClear_Click(object sender, EventArgs e) + { + SetListenerType(ESysProxyType.ForcedClear); + } private void menuGlobal_Click(object sender, EventArgs e) { SetListenerType(ESysProxyType.ForcedChange); } - private void menuKeepClear_Click(object sender, EventArgs e) - { - SetListenerType(ESysProxyType.ForcedClear); - } private void menuKeepNothing_Click(object sender, EventArgs e) { SetListenerType(ESysProxyType.Unchanged); diff --git a/v2rayN/v2rayN/Forms/MainForm.resx b/v2rayN/v2rayN/Forms/MainForm.resx index ad43b0db..b8501535 100644 --- a/v2rayN/v2rayN/Forms/MainForm.resx +++ b/v2rayN/v2rayN/Forms/MainForm.resx @@ -226,7 +226,7 @@ tsbCheckUpdateN - Only open Http proxy and do nothing + Do not change system proxy System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -585,7 +585,7 @@ 265, 142 - 411, 22 + 262, 22 $this @@ -1103,7 +1103,7 @@ Magenta - 411, 22 + 262, 22 355, 22 @@ -1148,7 +1148,7 @@ Vertical - 411, 22 + 262, 22 355, 22 @@ -1174,6 +1174,9 @@ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Clear system proxy + 355, 22 @@ -1217,7 +1220,7 @@ notifyMain - Open Http proxy and set the system proxy (global mode) + Set system proxy (global mode) System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -1415,9 +1418,6 @@ 228, 18 - - zh-Hans - True diff --git a/v2rayN/v2rayN/Forms/MainForm.zh-Hans.resx b/v2rayN/v2rayN/Forms/MainForm.zh-Hans.resx index 31c2ed6a..9af1841a 100644 --- a/v2rayN/v2rayN/Forms/MainForm.zh-Hans.resx +++ b/v2rayN/v2rayN/Forms/MainForm.zh-Hans.resx @@ -312,11 +312,11 @@ ZW0uRHJhd2luZy5HcmFwaGljc1VuaXQBAAAAB3ZhbHVlX18ACAMAAAADAAAACw== - + 228, 22 - - 不改变系统代理 + + 清除系统代理 228, 22 @@ -324,11 +324,11 @@ 自动配置系统代理(全局模式) - + 228, 22 - - 清除系统代理 + + 不改变系统代理 195, 22 @@ -441,19 +441,19 @@ 重启服务 - 180, 22 + 135, 22 v2rayN - 180, 22 + 135, 22 v2fly-Core - 180, 22 + 135, 22 Xray-Core diff --git a/v2rayN/v2rayN/Forms/OptionSettingForm.Designer.cs b/v2rayN/v2rayN/Forms/OptionSettingForm.Designer.cs index 27a61a74..13e23b02 100644 --- a/v2rayN/v2rayN/Forms/OptionSettingForm.Designer.cs +++ b/v2rayN/v2rayN/Forms/OptionSettingForm.Designer.cs @@ -69,6 +69,8 @@ this.txtKcpmtu = new System.Windows.Forms.TextBox(); this.label6 = new System.Windows.Forms.Label(); this.tabPage7 = new System.Windows.Forms.TabPage(); + this.cmbCoreType = new System.Windows.Forms.ComboBox(); + this.label4 = new System.Windows.Forms.Label(); this.chkKeepOlderDedupl = new System.Windows.Forms.CheckBox(); this.cbFreshrate = new System.Windows.Forms.ComboBox(); this.lbFreshrate = new System.Windows.Forms.Label(); @@ -89,31 +91,32 @@ // // btnClose // - this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel; resources.ApplyResources(this.btnClose, "btnClose"); + this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel; this.btnClose.Name = "btnClose"; this.btnClose.UseVisualStyleBackColor = true; this.btnClose.Click += new System.EventHandler(this.btnClose_Click); // // tabControl1 // + resources.ApplyResources(this.tabControl1, "tabControl1"); this.tabControl1.Controls.Add(this.tabPage1); this.tabControl1.Controls.Add(this.tabPage2); this.tabControl1.Controls.Add(this.tabPage6); this.tabControl1.Controls.Add(this.tabPage7); - resources.ApplyResources(this.tabControl1, "tabControl1"); this.tabControl1.Name = "tabControl1"; this.tabControl1.SelectedIndex = 0; // // tabPage1 // - this.tabPage1.Controls.Add(this.groupBox1); resources.ApplyResources(this.tabPage1, "tabPage1"); + this.tabPage1.Controls.Add(this.groupBox1); this.tabPage1.Name = "tabPage1"; this.tabPage1.UseVisualStyleBackColor = true; // // groupBox1 // + resources.ApplyResources(this.groupBox1, "groupBox1"); this.groupBox1.Controls.Add(this.chkdefAllowInsecure); this.groupBox1.Controls.Add(this.chksniffingEnabled2); this.groupBox1.Controls.Add(this.chksniffingEnabled); @@ -131,7 +134,6 @@ this.groupBox1.Controls.Add(this.label5); this.groupBox1.Controls.Add(this.txtlocalPort); this.groupBox1.Controls.Add(this.label2); - resources.ApplyResources(this.groupBox1, "groupBox1"); this.groupBox1.Name = "groupBox1"; this.groupBox1.TabStop = false; // @@ -174,12 +176,12 @@ // // cmbprotocol2 // + resources.ApplyResources(this.cmbprotocol2, "cmbprotocol2"); this.cmbprotocol2.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.cmbprotocol2.FormattingEnabled = true; this.cmbprotocol2.Items.AddRange(new object[] { resources.GetString("cmbprotocol2.Items"), resources.GetString("cmbprotocol2.Items1")}); - resources.ApplyResources(this.cmbprotocol2, "cmbprotocol2"); this.cmbprotocol2.Name = "cmbprotocol2"; // // label3 @@ -194,8 +196,8 @@ // // cmbprotocol // - this.cmbprotocol.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; resources.ApplyResources(this.cmbprotocol, "cmbprotocol"); + this.cmbprotocol.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.cmbprotocol.FormattingEnabled = true; this.cmbprotocol.Items.AddRange(new object[] { resources.GetString("cmbprotocol.Items"), @@ -221,6 +223,7 @@ // // cmbloglevel // + resources.ApplyResources(this.cmbloglevel, "cmbloglevel"); this.cmbloglevel.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.cmbloglevel.FormattingEnabled = true; this.cmbloglevel.Items.AddRange(new object[] { @@ -229,7 +232,6 @@ resources.GetString("cmbloglevel.Items2"), resources.GetString("cmbloglevel.Items3"), resources.GetString("cmbloglevel.Items4")}); - resources.ApplyResources(this.cmbloglevel, "cmbloglevel"); this.cmbloglevel.Name = "cmbloglevel"; // // label5 @@ -249,10 +251,10 @@ // // tabPage2 // + resources.ApplyResources(this.tabPage2, "tabPage2"); this.tabPage2.Controls.Add(this.linkDnsObjectDoc); this.tabPage2.Controls.Add(this.txtremoteDNS); this.tabPage2.Controls.Add(this.label14); - resources.ApplyResources(this.tabPage2, "tabPage2"); this.tabPage2.Name = "tabPage2"; this.tabPage2.UseVisualStyleBackColor = true; // @@ -274,6 +276,7 @@ // // tabPage6 // + resources.ApplyResources(this.tabPage6, "tabPage6"); this.tabPage6.Controls.Add(this.chkKcpcongestion); this.tabPage6.Controls.Add(this.txtKcpwriteBufferSize); this.tabPage6.Controls.Add(this.label10); @@ -287,7 +290,6 @@ this.tabPage6.Controls.Add(this.label7); this.tabPage6.Controls.Add(this.txtKcpmtu); this.tabPage6.Controls.Add(this.label6); - resources.ApplyResources(this.tabPage6, "tabPage6"); this.tabPage6.Name = "tabPage6"; this.tabPage6.UseVisualStyleBackColor = true; // @@ -359,16 +361,33 @@ // // tabPage7 // + resources.ApplyResources(this.tabPage7, "tabPage7"); + this.tabPage7.Controls.Add(this.cmbCoreType); + this.tabPage7.Controls.Add(this.label4); this.tabPage7.Controls.Add(this.chkKeepOlderDedupl); this.tabPage7.Controls.Add(this.cbFreshrate); this.tabPage7.Controls.Add(this.lbFreshrate); this.tabPage7.Controls.Add(this.chkEnableStatistics); this.tabPage7.Controls.Add(this.chkAllowLANConn); this.tabPage7.Controls.Add(this.chkAutoRun); - resources.ApplyResources(this.tabPage7, "tabPage7"); this.tabPage7.Name = "tabPage7"; this.tabPage7.UseVisualStyleBackColor = true; // + // cmbCoreType + // + resources.ApplyResources(this.cmbCoreType, "cmbCoreType"); + this.cmbCoreType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cmbCoreType.FormattingEnabled = true; + this.cmbCoreType.Items.AddRange(new object[] { + resources.GetString("cmbCoreType.Items"), + resources.GetString("cmbCoreType.Items1")}); + this.cmbCoreType.Name = "cmbCoreType"; + // + // label4 + // + resources.ApplyResources(this.label4, "label4"); + this.label4.Name = "label4"; + // // chkKeepOlderDedupl // resources.ApplyResources(this.chkKeepOlderDedupl, "chkKeepOlderDedupl"); @@ -377,9 +396,9 @@ // // cbFreshrate // + resources.ApplyResources(this.cbFreshrate, "cbFreshrate"); this.cbFreshrate.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.cbFreshrate.FormattingEnabled = true; - resources.ApplyResources(this.cbFreshrate, "cbFreshrate"); this.cbFreshrate.Name = "cbFreshrate"; // // lbFreshrate @@ -407,9 +426,9 @@ // // panel2 // + resources.ApplyResources(this.panel2, "panel2"); this.panel2.Controls.Add(this.btnClose); this.panel2.Controls.Add(this.btnOK); - resources.ApplyResources(this.panel2, "panel2"); this.panel2.Name = "panel2"; // // btnOK @@ -501,5 +520,7 @@ private System.Windows.Forms.LinkLabel linkDnsObjectDoc; private System.Windows.Forms.TextBox txtremoteDNS; private System.Windows.Forms.Label label14; + private System.Windows.Forms.ComboBox cmbCoreType; + private System.Windows.Forms.Label label4; } } \ No newline at end of file diff --git a/v2rayN/v2rayN/Forms/OptionSettingForm.cs b/v2rayN/v2rayN/Forms/OptionSettingForm.cs index d1262268..d26843a6 100644 --- a/v2rayN/v2rayN/Forms/OptionSettingForm.cs +++ b/v2rayN/v2rayN/Forms/OptionSettingForm.cs @@ -120,6 +120,7 @@ namespace v2rayN.Forms break; } + cmbCoreType.SelectedIndex = (int)config.coreType; } private void btnOK_Click(object sender, EventArgs e) { @@ -284,6 +285,7 @@ namespace v2rayN.Forms config.statisticsFreshRate = (int)cbFreshrate.SelectedValue; config.keepOlderDedupl = chkKeepOlderDedupl.Checked; + config.coreType = (ECoreType)cmbCoreType.SelectedIndex; return 0; } diff --git a/v2rayN/v2rayN/Forms/OptionSettingForm.resx b/v2rayN/v2rayN/Forms/OptionSettingForm.resx index f0757e7d..05feb4af 100644 --- a/v2rayN/v2rayN/Forms/OptionSettingForm.resx +++ b/v2rayN/v2rayN/Forms/OptionSettingForm.resx @@ -117,1310 +117,1385 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 355, 16 - - - 75, 23 - - - 7 - - - &Cancel - - - btnClose - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - panel2 - - - 0 - - - True - - - - NoControl - - - 15, 192 - - - 102, 16 - - - 35 - - - allowInsecure - - - chkdefAllowInsecure - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 0 - - - True - - - NoControl - - - 468, 60 - - - 120, 16 - - - 32 - - - Turn on Sniffing - - - False - - - chksniffingEnabled2 - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 1 - - - True - - - NoControl - - - 468, 27 - - - 120, 16 - - - 31 - - - Turn on Sniffing - - - chksniffingEnabled - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 2 - - - True - - - 15, 129 - - - 174, 16 - - - 20 - - - Turn on Mux Multiplexing - - - chkmuxEnabled - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 3 - True - - 15, 63 + + Xray_core - - 120, 16 + + 11 - - 19 + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - listening port 2 + + Keep older when deduplication - - False + + 1 - - chkAllowIn2 + + Record local logs - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 12 - + + + 4, 22 + + + txtKcpwriteBufferSize + + groupBox1 - + 4 - - True - - - 369, 62 - - - 84, 16 - - - 18 - - - Enable UDP - - - False - - - chkudpEnabled2 - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 5 - - - socks - - - http - - - 257, 60 - - - 97, 20 - - - 17 - - - False - - - cmbprotocol2 - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 6 - - - True - - - 206, 64 - - - 53, 12 - - - 16 - - - protocol - False - - label3 + + 14 - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabControl1 groupBox1 - - 7 + + 9 - - 124, 60 - - - 78, 21 - - - 14 - - - False - - - txtlocalPort2 - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + groupBox1 - - 8 + + 662, 523 - - False + + 35 - - socks + + 1 - - http + + 468, 60 - - 257, 25 + + + Top - - 97, 20 - - - 12 + + 102, 16 cmbprotocol - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 6 - + + 14 + + + 30, 87 + + + 111, 100 + + + True + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 84, 16 + + + 40 + + + True + + + 120, 16 + + + True + + + tti + + + tabPage6 + + + chkdefAllowInsecure + + + 7 + + + tabPage7 + + + 12 + + + http + + + 7 + + + label5 + + + 648, 421 + + + 206, 64 + + + 95, 12 + + + tabPage6 + + + 15, 63 + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 2 + + + Enable UDP + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 2 + + + &Cancel + + + label10 + + groupBox1 - - 9 + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 662, 10 + + + Settings + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + label4 + + + 236, 66 + + + txtKcpmtu + + + lbFreshrate + + + 12 + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + label11 + + + 29 + + + 8 + + + 0, 10 + + + 58, 20 + + + Support DnsObject + + + tabPage6 + + + False + + + groupBox1 + + + $this + + + 3 + + + 6 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + NoControl + + + tabPage7 + + + tabPage6 + + + Bottom + + + 576, 16 + + + 18 True - - 206, 29 + + 39 - - 53, 12 + + tabPage6 - - 11 + + congestion - - protocol + + NoControl - - label1 + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 89, 12 - + + NoControl + + + 0 + + + tabPage7 + + + v2rayN settings + + + 16 + + groupBox1 10 - + + 32 + + + 6, 12 + + + groupBox1 + + + 1 + + + True + + + 8 + + + 198, 16 + + + Automatically start at system startup + + + Fill + + + txtKcptti + + + 2 + + + Turn on Sniffing + + + 281, 12 + + + tabPage7 + + + 2 + + + 3, 3, 3, 3 + + + 3 + + + 662, 453 + + + 33, 29 + + + 1 + + + 124, 60 + + + 78, 21 + + + Log level + + + tabControl1 + + + 59, 12 + + + v2rayN.Forms.BaseForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + + + warning + + + tabPage2 + + + panel2 + + + 11 + + + Statistics freshrate + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + 120, 16 + + + 89, 12 + + + btnOK + + + 18, 66 + + + 20, 143 + + + 15 + + + True + + + 4, 4, 4, 4 + + + tabPage6 + + + 5 + + + Turn on Sniffing + + + groupBox1 + + + 18, 28 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 20 + + + 29 + + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 14 + + + 5 + + + Core Type + + + True + + + chksniffingEnabled + + + 2 + + + 174, 16 + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 18, 104 + + + tabPage2 + + + mtu + + + socks + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panel1 + + + 30 + + + 53, 12 + + + 13 + + + label8 + + + 468, 27 + + + 236, 28 + + + chkAutoRun + + + 94, 21 + + + 345, 62 + + + 11 + + + 15, 129 + + + chkudpEnabled + + + 0 + + + True + + + 8, 17 + + + tabPage1 + + + tabPage6 + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 1 + + + System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 84, 16 + + + 15 + + + True + + + False + + + label7 + + + txtlocalPort + + + info + + + 19 + + + readBufferSize + + + tabPage6 + + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + btnClose + + + 124, 25 + + + protocol + + + 23, 12 + + + 638, 356 + + + socks + + + 2 + + + 3, 3 + + + chkAllowLANConn + + + 84, 16 + + + tabControl1 + + + True + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + 1 + + + 10 + + + 369, 62 + + + 161, 84 + + + 9 + + + groupBox1 + + + 33, 141 + + + NoControl + + + chkEnableStatistics + + + 4 + + + 355, 16 + + + 53, 12 + + + 193, 162 + + True 369, 27 - - 84, 16 - - - 10 - - - Enable UDP - - - chkudpEnabled - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 11 - - - True - - - 15, 160 - - - 126, 16 - - - 9 - - - Record local logs - - - chklogEnabled - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 12 - - - debug - - - info - - - warning - - - error - - - none - - - 257, 158 - - - 97, 20 - - - 6 - - - cmbloglevel - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 13 - - - True - - - 193, 162 - - - 59, 12 - - - 8 - - - Log level - - - label5 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 14 - - - 124, 25 - - - 78, 21 - - - 3 - - - txtlocalPort - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 15 - - - True - - - 33, 29 - - - 89, 12 - - - 2 - - - Listening port - - - label2 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 16 - - - Fill - - - 3, 3 - - - 648, 421 - - - 6 - - - groupBox1 - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabPage1 - - - 0 - - - 4, 22 - - - 3, 3, 3, 3 - - - 654, 427 - - - 0 - - - Core: basic settings - - - tabPage1 - - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabControl1 - - - 0 - - - True - - - NoControl - - - 342, 17 - - - 0, 0, 0, 0 - - - 107, 12 - - - 40 - - - Support DnsObject - - - linkDnsObjectDoc - - - System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabPage2 - - - 0 - - - 8, 41 - - - True - - - 638, 356 - - - 39 - - - txtremoteDNS - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabPage2 - - - 1 - - - True - - - NoControl - - - 8, 17 - - - 281, 12 - - - 38 - - - Custom DNS (multiple, separated by commas (,)) - - - label14 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabPage2 - - - 2 - - - 4, 22 - - - 654, 427 - - - 4 - - - Core: DNS settings - - - tabPage2 - - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabControl1 - - - 1 - - - True - - - 20, 143 - - - 84, 16 - - - 20 - - - congestion - - - chkKcpcongestion - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabPage6 - - - 0 - - - 345, 100 - - - 94, 21 - - - 15 - - - txtKcpwriteBufferSize - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabPage6 - - - 1 - - - True - - - 236, 104 - - - 95, 12 - - - 14 - - - writeBufferSize - - - label10 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabPage6 - - - 2 - - - 111, 100 - - - 94, 21 - - - 13 - - - txtKcpreadBufferSize - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabPage6 - - - 3 - - - True - - - 18, 104 - - - 89, 12 - - - 12 - - - readBufferSize - - - label11 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabPage6 - - - 4 - - - 345, 62 - - - 94, 21 - - - 11 - - - txtKcpdownlinkCapacity - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabPage6 - - - 5 - - - True - - - 236, 66 - - - 101, 12 - - - 10 - - - downlinkCapacity - - - label8 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabPage6 - - - 6 - - - 111, 62 - - - 94, 21 - - - 9 - - - txtKcpuplinkCapacity - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - tabPage6 - - - 7 - - - True - - - 18, 66 - - - 89, 12 - - - 8 - - - uplinkCapacity - - - label9 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabPage6 - - - 8 - - - 345, 24 - - - 94, 21 - - - 7 - - - txtKcptti - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabPage6 - - - 9 - - - True - - - 236, 28 - - - 23, 12 - - - 6 - - - tti - - - label7 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabPage6 - - - 10 - - - 111, 24 - - - 94, 21 - - - 5 - - - txtKcpmtu - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - tabPage6 - - 11 + + label2 - - True - - - 18, 28 - - - 23, 12 - - - 4 - - - mtu - - - label6 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabPage6 - - - 12 - - - 4, 22 - - - 3, 3, 3, 3 - - + 654, 427 - - 2 - - - Core: KCP settings - - - tabPage6 - - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabControl1 - - - 2 - - - True - - - NoControl - - - 15, 110 - - - 198, 16 - - - 33 - - - Keep older when deduplication - - - chkKeepOlderDedupl - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabPage7 - - - 0 - - - 161, 84 - - - 58, 20 - - - 32 - - - cbFreshrate - - + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - tabPage7 + + 9 - - 1 + + 101, 12 - - True + + 5 - - NoControl + + 12 - - 30, 87 + + 20 - - 125, 12 - - - 30 - - - Statistics freshrate - - - lbFreshrate - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabPage7 - - - 2 - - - True - - - NoControl - - - 15, 62 - - - 576, 16 - - - 29 + + allowInsecure Enable Statistics (Realtime netspeed and traffic records. Require restart the v2rayN client) - - chkEnableStatistics + + $this - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabPage7 - - - 3 - - - True - - - 15, 38 - - - 204, 16 - - - 29 - - - Allow connections from the LAN - - - chkAllowLANConn - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabPage7 - - + 4 - - True + + Listening port - - 15, 16 + + Fill - - 246, 16 + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 23 + + False - - Automatically start at system startup + + 257, 60 - - chkAutoRun - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabPage7 - - - 5 - - - 4, 22 - - - 3, 3, 3, 3 - - - 654, 427 - - - 3 - - - v2rayN settings - - - tabPage7 - - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 0 tabControl1 - - 3 + + True - - Fill + + 34 - - 0, 10 + + cmbprotocol2 - - 662, 453 + + chkKeepOlderDedupl - - 10 + + True - - tabControl1 + + 16 - - System.Windows.Forms.TabControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + True - - $this + + True - + + True + + + chkKcpcongestion + + + Core: basic settings + + 0 - - 267, 16 + + 257, 25 - - 75, 23 + + tabPage2 - - 8 + + tabControl1 - - &OK + + listening port 2 - - btnOK + + 97, 20 - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + chkAllowIn2 - - panel2 + + 15, 38 - - 1 + + True - - Bottom + + 15, 160 - - 0, 463 + + 38 - - 662, 60 + + 33 - - 11 + + 4, 22 - - panel2 - - - System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 1 - - - Top - - - 0, 0 - - - 662, 10 + + v2fly_core 9 - - panel1 + + label1 + + + Core: KCP settings + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + error + + + 59, 12 + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 8 + + + 120, 16 + + + 75, 23 + + + txtlocalPort2 + + + True + + + 246, 16 + + + True + + + 654, 427 + + + 10 + + + False + + + 206, 29 + + + downlinkCapacity + + + chkudpEnabled2 + + + Allow connections from the LAN + + + tabPage1 + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage6 + + + 2 + + + panel2 + + + 3 + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + linkDnsObjectDoc + + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 125, 12 + + + txtKcpreadBufferSize + + + none + + + groupBox1 + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 6 + + + OptionSettingForm + + + 2 + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 15, 62 + + + 111, 62 + + + 7 + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 5 + + + 13 + + + 97, 20 + + + 0 + + + 8 + + + 78, 21 + + + tabPage7 + + + tabPage7 + + + True + + + System.Windows.Forms.TabControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 23, 12 + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 345, 100 + + + 94, 21 + + + NoControl + + + 654, 427 + + + 10 + + + 204, 16 + + + 17 + + + 23 + + + 94, 21 + + + 6 + + + 0, 463 + + + groupBox1 + + + 3 + + + http + + + 0 + + + 97, 20 + + + tabPage6 + + + tabPage6 + + + 7 + + + False + + + 257, 158 + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + &OK + + + 10 + + + 1 + + + 94, 21 + + + txtKcpuplinkCapacity + + + tabPage2 + + + chklogEnabled + + + chksniffingEnabled2 + + + tabPage7 + + + 4, 22 + + + $this + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 4, 22 + + + groupBox1 + + + NoControl + + + 6 + + + protocol + + + tabPage7 + + + 15, 16 + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + 0 + + + 8 + + + txtremoteDNS + + + True + + + True + + + writeBufferSize + + + 11 System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - $this + + 89, 12 - - 2 + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 31 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + Core: DNS settings + + + groupBox1 + + + 32 + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + 345, 24 + + + tabPage7 + + + cbFreshrate + + + 236, 104 + + + 4 + + + NoControl + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 94, 21 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 8, 41 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 0, 0, 0, 0 + + + uplinkCapacity + + + txtKcpdownlinkCapacity + + + 35 + + + 6 + + + 3 + + + 3, 3, 3, 3 + + + 107, 12 + + + 0 + + + 15, 192 + + + tabPage6 + + + debug + + + chkmuxEnabled + + + label3 + + + tabPage6 + + + False + + + 15, 110 + + + 105, 137 + + + 0, 0 + + + Enable UDP + + + cmbCoreType + + + 3, 3, 3, 3 + + + groupBox1 + + + 126, 16 + + + 267, 16 + + + 75, 23 + + + groupBox1 + + + NoControl + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 9 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 342, 17 + + + 94, 21 + + + 97, 20 + + + 3 + + + Custom DNS (multiple, separated by commas (,)) + + + 654, 427 + + + 11 + + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 0 + + + NoControl + + + panel2 + + + 7 + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Turn on Mux Multiplexing + + + cmbloglevel + + + label6 + + + 111, 24 + + + 4 + + + label9 + + + 662, 60 + + + label14 True @@ -1428,22 +1503,4 @@ zh-Hans - - 6, 12 - - - 662, 523 - - - 4, 4, 4, 4 - - - Settings - - - OptionSettingForm - - - v2rayN.Forms.BaseForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null - \ No newline at end of file diff --git a/v2rayN/v2rayN/Forms/OptionSettingForm.zh-Hans.resx b/v2rayN/v2rayN/Forms/OptionSettingForm.zh-Hans.resx index 0618fb5f..bfab7ce2 100644 --- a/v2rayN/v2rayN/Forms/OptionSettingForm.zh-Hans.resx +++ b/v2rayN/v2rayN/Forms/OptionSettingForm.zh-Hans.resx @@ -121,12 +121,6 @@ 取消(&C) - - 161, 12 - - - 支持填写DnsObject,JSON格式 - 336, 16 @@ -145,12 +139,6 @@ 开启流量探测 - - 191, 12 - - - 自定义DNS(可多个,用逗号(,)隔开) - 开启Mux多路复用(默认开启) @@ -211,6 +199,18 @@ Core:基础设置 + + 161, 12 + + + 支持填写DnsObject,JSON格式 + + + 191, 12 + + + 自定义DNS(可多个,用逗号(,)隔开) + 654, 443 @@ -223,6 +223,12 @@ Core:KCP设置 + + 53, 12 + + + Core类型 + 156, 16 diff --git a/v2rayN/v2rayN/Forms/RoutingSettingControl.Designer.cs b/v2rayN/v2rayN/Forms/RoutingSettingControl.Designer.cs deleted file mode 100644 index 912b2ab4..00000000 --- a/v2rayN/v2rayN/Forms/RoutingSettingControl.Designer.cs +++ /dev/null @@ -1,135 +0,0 @@ -namespace v2rayN.Forms -{ - partial class RoutingSettingControl - { - /// - /// 必需的设计器变量。 - /// - private System.ComponentModel.IContainer components = null; - - /// - /// 清理所有正在使用的资源。 - /// - /// 如果应释放托管资源,为 true;否则为 false。 - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region 组件设计器生成的代码 - - /// - /// 设计器支持所需的方法 - 不要修改 - /// 使用代码编辑器修改此方法的内容。 - /// - private void InitializeComponent() - { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(RoutingSettingControl)); - this.groupBox2 = new System.Windows.Forms.GroupBox(); - this.btnExpand = new System.Windows.Forms.Button(); - this.label4 = new System.Windows.Forms.Label(); - this.cmbOutboundTag = new System.Windows.Forms.ComboBox(); - this.btnRemove = new System.Windows.Forms.Button(); - this.txtUserRule = new System.Windows.Forms.TextBox(); - this.txtRemarks = new System.Windows.Forms.TextBox(); - this.label2 = new System.Windows.Forms.Label(); - this.label3 = new System.Windows.Forms.Label(); - this.groupBox2.SuspendLayout(); - this.SuspendLayout(); - // - // groupBox2 - // - resources.ApplyResources(this.groupBox2, "groupBox2"); - this.groupBox2.Controls.Add(this.btnExpand); - this.groupBox2.Controls.Add(this.label4); - this.groupBox2.Controls.Add(this.cmbOutboundTag); - this.groupBox2.Controls.Add(this.btnRemove); - this.groupBox2.Controls.Add(this.txtUserRule); - this.groupBox2.Controls.Add(this.txtRemarks); - this.groupBox2.Controls.Add(this.label2); - this.groupBox2.Controls.Add(this.label3); - this.groupBox2.Name = "groupBox2"; - this.groupBox2.TabStop = false; - // - // btnExpand - // - resources.ApplyResources(this.btnExpand, "btnExpand"); - this.btnExpand.Name = "btnExpand"; - this.btnExpand.UseVisualStyleBackColor = true; - this.btnExpand.Click += new System.EventHandler(this.btnExpand_Click); - // - // label4 - // - resources.ApplyResources(this.label4, "label4"); - this.label4.Name = "label4"; - // - // cmbOutboundTag - // - resources.ApplyResources(this.cmbOutboundTag, "cmbOutboundTag"); - this.cmbOutboundTag.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.cmbOutboundTag.FormattingEnabled = true; - this.cmbOutboundTag.Items.AddRange(new object[] { - resources.GetString("cmbOutboundTag.Items"), - resources.GetString("cmbOutboundTag.Items1"), - resources.GetString("cmbOutboundTag.Items2")}); - this.cmbOutboundTag.Name = "cmbOutboundTag"; - // - // btnRemove - // - resources.ApplyResources(this.btnRemove, "btnRemove"); - this.btnRemove.Name = "btnRemove"; - this.btnRemove.UseVisualStyleBackColor = true; - this.btnRemove.Click += new System.EventHandler(this.btnRemove_Click); - // - // txtUserRule - // - resources.ApplyResources(this.txtUserRule, "txtUserRule"); - this.txtUserRule.Name = "txtUserRule"; - this.txtUserRule.Leave += new System.EventHandler(this.txtRemarks_Leave); - // - // txtRemarks - // - resources.ApplyResources(this.txtRemarks, "txtRemarks"); - this.txtRemarks.Name = "txtRemarks"; - this.txtRemarks.Leave += new System.EventHandler(this.txtRemarks_Leave); - // - // label2 - // - resources.ApplyResources(this.label2, "label2"); - this.label2.Name = "label2"; - // - // label3 - // - resources.ApplyResources(this.label3, "label3"); - this.label3.Name = "label3"; - // - // RoutingSettingControl - // - resources.ApplyResources(this, "$this"); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.Controls.Add(this.groupBox2); - this.Name = "RoutingSettingControl"; - this.Load += new System.EventHandler(this.RoutingSettingControl_Load); - this.groupBox2.ResumeLayout(false); - this.groupBox2.PerformLayout(); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.GroupBox groupBox2; - private System.Windows.Forms.TextBox txtUserRule; - private System.Windows.Forms.TextBox txtRemarks; - private System.Windows.Forms.Label label2; - private System.Windows.Forms.Label label3; - private System.Windows.Forms.Button btnRemove; - private System.Windows.Forms.ComboBox cmbOutboundTag; - private System.Windows.Forms.Label label4; - private System.Windows.Forms.Button btnExpand; - } -} diff --git a/v2rayN/v2rayN/Forms/RoutingSettingControl.cs b/v2rayN/v2rayN/Forms/RoutingSettingControl.cs deleted file mode 100644 index 33f44027..00000000 --- a/v2rayN/v2rayN/Forms/RoutingSettingControl.cs +++ /dev/null @@ -1,73 +0,0 @@ -using System; -using System.Windows.Forms; -using v2rayN.Base; -using v2rayN.Mode; - -namespace v2rayN.Forms -{ - public partial class RoutingSettingControl : UserControl - { - public event ChangeEventHandler OnButtonClicked; - - - public RoutingItem routingItem - { - get; set; - } - - public RoutingSettingControl() - { - InitializeComponent(); - } - - private void RoutingSettingControl_Load(object sender, EventArgs e) - { - BindingSub(); - } - - private void BindingSub() - { - if (routingItem != null) - { - txtRemarks.Text = routingItem.remarks.ToString(); - cmbOutboundTag.Text = routingItem.outboundTag; - txtUserRule.Text = Utils.List2String(routingItem.userRules, true); - } - } - private void EndBindingSub() - { - if (routingItem != null) - { - routingItem.remarks = txtRemarks.Text.TrimEx(); - routingItem.outboundTag = cmbOutboundTag.Text; - routingItem.userRules = Utils.String2List(txtUserRule.Text); - } - } - private void txtRemarks_Leave(object sender, EventArgs e) - { - EndBindingSub(); - } - - private void btnRemove_Click(object sender, EventArgs e) - { - if (routingItem != null) - { - routingItem.remarks = string.Empty; - } - - OnButtonClicked?.Invoke(sender, e); - } - - private void btnExpand_Click(object sender, EventArgs e) - { - if (this.Height > 200) - { - this.Height = 160; - } - else - { - this.Height = 500; - } - } - } -} diff --git a/v2rayN/v2rayN/Forms/RoutingSettingDetailsForm.Designer.cs b/v2rayN/v2rayN/Forms/RoutingSettingDetailsForm.Designer.cs new file mode 100644 index 00000000..4cf4fe18 --- /dev/null +++ b/v2rayN/v2rayN/Forms/RoutingSettingDetailsForm.Designer.cs @@ -0,0 +1,211 @@ +namespace v2rayN.Forms +{ + partial class RoutingSettingDetailsForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(RoutingSettingDetailsForm)); + this.panel1 = new System.Windows.Forms.Panel(); + this.panel3 = new System.Windows.Forms.Panel(); + this.txtPort = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.labRoutingTips = new System.Windows.Forms.Label(); + this.label4 = new System.Windows.Forms.Label(); + this.cmbOutboundTag = new System.Windows.Forms.ComboBox(); + this.txtRemarks = new System.Windows.Forms.TextBox(); + this.label2 = new System.Windows.Forms.Label(); + this.panel4 = new System.Windows.Forms.Panel(); + this.btnClose = new System.Windows.Forms.Button(); + this.btnOK = new System.Windows.Forms.Button(); + this.panel2 = new System.Windows.Forms.Panel(); + this.groupBox2 = new System.Windows.Forms.GroupBox(); + this.txtIP = new System.Windows.Forms.TextBox(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.txtDomain = new System.Windows.Forms.TextBox(); + this.panel3.SuspendLayout(); + this.panel4.SuspendLayout(); + this.panel2.SuspendLayout(); + this.groupBox2.SuspendLayout(); + this.groupBox1.SuspendLayout(); + this.SuspendLayout(); + // + // panel1 + // + resources.ApplyResources(this.panel1, "panel1"); + this.panel1.Name = "panel1"; + // + // panel3 + // + resources.ApplyResources(this.panel3, "panel3"); + this.panel3.Controls.Add(this.txtPort); + this.panel3.Controls.Add(this.label1); + this.panel3.Controls.Add(this.labRoutingTips); + this.panel3.Controls.Add(this.label4); + this.panel3.Controls.Add(this.cmbOutboundTag); + this.panel3.Controls.Add(this.txtRemarks); + this.panel3.Controls.Add(this.label2); + this.panel3.Name = "panel3"; + // + // txtPort + // + resources.ApplyResources(this.txtPort, "txtPort"); + this.txtPort.Name = "txtPort"; + // + // label1 + // + resources.ApplyResources(this.label1, "label1"); + this.label1.Name = "label1"; + // + // labRoutingTips + // + resources.ApplyResources(this.labRoutingTips, "labRoutingTips"); + this.labRoutingTips.ForeColor = System.Drawing.Color.Brown; + this.labRoutingTips.Name = "labRoutingTips"; + // + // label4 + // + resources.ApplyResources(this.label4, "label4"); + this.label4.Name = "label4"; + // + // cmbOutboundTag + // + resources.ApplyResources(this.cmbOutboundTag, "cmbOutboundTag"); + this.cmbOutboundTag.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cmbOutboundTag.FormattingEnabled = true; + this.cmbOutboundTag.Items.AddRange(new object[] { + resources.GetString("cmbOutboundTag.Items"), + resources.GetString("cmbOutboundTag.Items1"), + resources.GetString("cmbOutboundTag.Items2")}); + this.cmbOutboundTag.Name = "cmbOutboundTag"; + // + // txtRemarks + // + resources.ApplyResources(this.txtRemarks, "txtRemarks"); + this.txtRemarks.Name = "txtRemarks"; + // + // label2 + // + resources.ApplyResources(this.label2, "label2"); + this.label2.Name = "label2"; + // + // panel4 + // + resources.ApplyResources(this.panel4, "panel4"); + this.panel4.Controls.Add(this.btnClose); + this.panel4.Controls.Add(this.btnOK); + this.panel4.Name = "panel4"; + // + // btnClose + // + resources.ApplyResources(this.btnClose, "btnClose"); + this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.btnClose.Name = "btnClose"; + this.btnClose.UseVisualStyleBackColor = true; + this.btnClose.Click += new System.EventHandler(this.btnClose_Click); + // + // btnOK + // + resources.ApplyResources(this.btnOK, "btnOK"); + this.btnOK.Name = "btnOK"; + this.btnOK.UseVisualStyleBackColor = true; + this.btnOK.Click += new System.EventHandler(this.btnOK_Click); + // + // panel2 + // + resources.ApplyResources(this.panel2, "panel2"); + this.panel2.Controls.Add(this.groupBox2); + this.panel2.Controls.Add(this.groupBox1); + this.panel2.Name = "panel2"; + // + // groupBox2 + // + resources.ApplyResources(this.groupBox2, "groupBox2"); + this.groupBox2.Controls.Add(this.txtIP); + this.groupBox2.Name = "groupBox2"; + this.groupBox2.TabStop = false; + // + // txtIP + // + resources.ApplyResources(this.txtIP, "txtIP"); + this.txtIP.Name = "txtIP"; + // + // groupBox1 + // + resources.ApplyResources(this.groupBox1, "groupBox1"); + this.groupBox1.Controls.Add(this.txtDomain); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.TabStop = false; + // + // txtDomain + // + resources.ApplyResources(this.txtDomain, "txtDomain"); + this.txtDomain.Name = "txtDomain"; + // + // RoutingSettingDetailsForm + // + resources.ApplyResources(this, "$this"); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.CancelButton = this.btnClose; + this.Controls.Add(this.panel2); + this.Controls.Add(this.panel4); + this.Controls.Add(this.panel3); + this.Controls.Add(this.panel1); + this.Name = "RoutingSettingDetailsForm"; + this.Load += new System.EventHandler(this.RoutingSettingDetailsForm_Load); + this.panel3.ResumeLayout(false); + this.panel3.PerformLayout(); + this.panel4.ResumeLayout(false); + this.panel2.ResumeLayout(false); + this.groupBox2.ResumeLayout(false); + this.groupBox2.PerformLayout(); + this.groupBox1.ResumeLayout(false); + this.groupBox1.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.Panel panel3; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.ComboBox cmbOutboundTag; + private System.Windows.Forms.TextBox txtRemarks; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Panel panel4; + private System.Windows.Forms.Button btnClose; + private System.Windows.Forms.Button btnOK; + private System.Windows.Forms.Panel panel2; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.TextBox txtDomain; + private System.Windows.Forms.GroupBox groupBox2; + private System.Windows.Forms.TextBox txtIP; + private System.Windows.Forms.Label labRoutingTips; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.TextBox txtPort; + } +} \ No newline at end of file diff --git a/v2rayN/v2rayN/Forms/RoutingSettingDetailsForm.cs b/v2rayN/v2rayN/Forms/RoutingSettingDetailsForm.cs new file mode 100644 index 00000000..09b5a39e --- /dev/null +++ b/v2rayN/v2rayN/Forms/RoutingSettingDetailsForm.cs @@ -0,0 +1,86 @@ +using System; +using System.Windows.Forms; +using v2rayN.Base; +using v2rayN.Handler; +using v2rayN.Mode; + +namespace v2rayN.Forms +{ + public partial class RoutingSettingDetailsForm : BaseForm + { + public int EditIndex + { + get; set; + } + protected RulesItem routingItem = null; + + public RoutingSettingDetailsForm() + { + InitializeComponent(); + } + + private void RoutingSettingDetailsForm_Load(object sender, EventArgs e) + { + if (EditIndex >= 0) + { + routingItem = config.rules[EditIndex]; + BindingData(); + } + else + { + routingItem = new RulesItem(); + ClearBind(); + } + } + + private void EndBindingData() + { + if (routingItem != null) + { + routingItem.remarks = txtRemarks.Text.TrimEx(); + routingItem.port = txtPort.Text.TrimEx(); + routingItem.outboundTag = cmbOutboundTag.Text; + routingItem.domain = Utils.String2List(txtDomain.Text); + routingItem.ip = Utils.String2List(txtIP.Text); + } + } + private void BindingData() + { + if (routingItem != null) + { + txtRemarks.Text = routingItem.remarks ?? string.Empty; + txtPort.Text = routingItem.port ?? string.Empty; + cmbOutboundTag.Text = routingItem.outboundTag; + txtDomain.Text = Utils.List2String(routingItem.domain, true); + txtIP.Text = Utils.List2String(routingItem.ip, true); + } + } + private void ClearBind() + { + txtRemarks.Text = string.Empty; + txtPort.Text = string.Empty; + cmbOutboundTag.Text = Global.agentTag; + txtDomain.Text = string.Empty; + txtIP.Text = string.Empty; + } + private void btnOK_Click(object sender, EventArgs e) + { + EndBindingData(); + if (ConfigHandler.AddRoutingRule(ref config, routingItem, EditIndex) == 0) + { + this.DialogResult = DialogResult.OK; + } + else + { + UI.ShowWarning(UIRes.I18N("OperationFailed")); + } + + this.DialogResult = DialogResult.OK; + } + + private void btnClose_Click(object sender, EventArgs e) + { + this.DialogResult = DialogResult.Cancel; + } + } +} diff --git a/v2rayN/v2rayN/Forms/RoutingSettingControl.resx b/v2rayN/v2rayN/Forms/RoutingSettingDetailsForm.resx similarity index 53% rename from v2rayN/v2rayN/Forms/RoutingSettingControl.resx rename to v2rayN/v2rayN/Forms/RoutingSettingDetailsForm.resx index 656bfa7b..8153fa31 100644 --- a/v2rayN/v2rayN/Forms/RoutingSettingControl.resx +++ b/v2rayN/v2rayN/Forms/RoutingSettingDetailsForm.resx @@ -117,274 +117,472 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - NoControl + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 733, 164 - - - Rule - - - 119, 20 - - - direct - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 127, 50 - - - txtRemarks + + panel2 - - 24 - - - 23 - - - 4 - - - RoutingSettingControl - - - Expand - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - 28 + 32 - - 5 + + 30 + + + 31 proxy - - 77, 12 - - - 2 - - - 544, 21 - - - 6, 12 - - - label3 - - - 127, 21 - - - True - - - 0 - - - btnExpand - - - 12, 87 - - - txtUserRule - - - True - - - 75, 23 - - - groupBox2 - - + + Fill - + + panel1 + + + 3 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 2 + + NoControl System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 25 + + True - - groupBox2 - - - 11 + + Left NoControl - - 47, 12 + + 0 - - btnRemove + + + 29, 12 - - 0, 0 + + panel2 - - 29 + + RoutingSettingDetailsForm - - label4 + + Fill - - NoControl - - - Out Tag - - - block - - - Remove - - - 3 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - groupBox2 - - + 1 - - groupBox2 + + Fill - - groupBox2 + + 411, 15 - - 588, 105 + + 119, 20 - - True + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Bottom - - groupBox2 + + Top - + + 0 + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 344, 417 + + + $this + + + 504, 15 + + + groupBox1 + + NoControl - - label2 - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 733, 164 - 6 - - Top, Bottom, Left, Right + + label1 - - 362, 21 + + 742, 437 - - cmbOutboundTag + + 0, 0 + + + 4 + + + panel3 + + + True + + + panel3 + + + 3 + + + panel4 + + + 5 + + + 19, 43 + + + 25 + + + 3, 17 + + + panel3 + + + 274, 20 + + + labRoutingTips + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 491, 20 + + + groupBox1 + + + 1 + + + RoutingSettingDetailsForm + + + 166, 21 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panel3 + + + 544, 16 + + + groupBox2 + + + 3 + + + 1 + + + 386, 417 + + + panel3 + + + 392, 0 + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panel2 + + + panel4 + + + NoControl + + + Top + + + 598, 16 + + + $this + + + groupBox2 + + + panel3 + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + txtPort + + + panel4 + + + 3, 17 + + + 1 + + + 742, 10 + + + 0, 0 + + + 24 + + + label4 + + + &OK + + + 75, 23 + + + btnClose + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 34 + + + 29 + + + block + + + direct + + + 0 + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + btnOK + + + 2 + + + 110, 21 + + + 4 + + + 7 + + + 0 + + + 11 + + + 0 + + + panel3 + + + 8 + + + v2rayN.Forms.BaseForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + + + 0, 10 Remarks - + + Fill + + + 742, 60 + + + 0, 79 + + + $this + + + 47, 12 + + + &Cancel + + + *Set the rules, separated by commas (,); support Domain (pure string / regular / subdomain) and IP + + + 742, 69 + + + True + + + 6, 12 + + + Port + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + txtIP + + 0 - + + label2 + + + cmbOutboundTag + + True - 12, 25 + 19, 20 - + + NoControl + + + 742, 576 + + + 10 + + + 392, 437 + + 75, 23 - - 301, 26 + + NoControl + + + True + + + 4 + + + 5 + + + txtDomain + + + 84, 16 + + + IP + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 0, 516 + + + 33 47, 12 - - 162, 21 + + 350, 437 - - 10 + + panel3 - - Domain or IP + + Domain - - $this + + txtRemarks - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 347, 16 - - System.Windows.Forms.UserControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Out Tag - - 0 + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 640, 21 - - - 7 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 10 + + 35 True - - zh-Hans - \ No newline at end of file diff --git a/v2rayN/v2rayN/Forms/RoutingSettingControl.zh-Hans.resx b/v2rayN/v2rayN/Forms/RoutingSettingDetailsForm.zh-Hans.resx similarity index 85% rename from v2rayN/v2rayN/Forms/RoutingSettingControl.zh-Hans.resx rename to v2rayN/v2rayN/Forms/RoutingSettingDetailsForm.zh-Hans.resx index 94e70d37..c080de59 100644 --- a/v2rayN/v2rayN/Forms/RoutingSettingControl.zh-Hans.resx +++ b/v2rayN/v2rayN/Forms/RoutingSettingDetailsForm.zh-Hans.resx @@ -117,47 +117,29 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + *设置的路由规则,用逗号(,)分隔 + - - 526, 20 - - - 扩大 - - 53, 12 + 71, 12 - 出口标签 - - - 619, 20 - - - 移除 - - - 567, 104 + OutboundTag 29, 12 - 备注 + 别名 - - 53, 12 + + 取消(&C) - - 域名或IP + + 确定(&O) - - 709, 160 - - - 规则 - - - 709, 160 + + 路由规则详情设置 \ No newline at end of file diff --git a/v2rayN/v2rayN/Forms/RoutingSettingForm.Designer.cs b/v2rayN/v2rayN/Forms/RoutingSettingForm.Designer.cs index 5a87e09a..8261890c 100644 --- a/v2rayN/v2rayN/Forms/RoutingSettingForm.Designer.cs +++ b/v2rayN/v2rayN/Forms/RoutingSettingForm.Designer.cs @@ -28,19 +28,39 @@ /// private void InitializeComponent() { + this.components = new System.ComponentModel.Container(); System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(RoutingSettingForm)); this.btnClose = new System.Windows.Forms.Button(); - this.panCon = new System.Windows.Forms.Panel(); this.panel2 = new System.Windows.Forms.Panel(); - this.btnAdd = new System.Windows.Forms.Button(); this.btnOK = new System.Windows.Forms.Button(); - this.btnSetDefRountingRule = new System.Windows.Forms.Button(); this.panel1 = new System.Windows.Forms.Panel(); - this.labRoutingTips = new System.Windows.Forms.Label(); this.linkLabelRoutingDoc = new System.Windows.Forms.LinkLabel(); this.cmbdomainStrategy = new System.Windows.Forms.ComboBox(); + this.lvRoutings = new v2rayN.Base.ListViewFlickerFree(); + this.cmsLv = new System.Windows.Forms.ContextMenuStrip(this.components); + this.menuAdd = new System.Windows.Forms.ToolStripMenuItem(); + this.menuRemove = new System.Windows.Forms.ToolStripMenuItem(); + this.menuSelectAll = new System.Windows.Forms.ToolStripMenuItem(); + this.menuExportSelectedRules = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator(); + this.menuMoveTop = new System.Windows.Forms.ToolStripMenuItem(); + this.menuMoveUp = new System.Windows.Forms.ToolStripMenuItem(); + this.menuMoveDown = new System.Windows.Forms.ToolStripMenuItem(); + this.menuMoveBottom = new System.Windows.Forms.ToolStripMenuItem(); + this.MenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + this.tabControl2 = new System.Windows.Forms.TabControl(); + this.tabPage2 = new System.Windows.Forms.TabPage(); + this.menuServer = new System.Windows.Forms.MenuStrip(); + this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + this.menuImportRulesFromPreset = new System.Windows.Forms.ToolStripMenuItem(); + this.menuImportRulesFromFile = new System.Windows.Forms.ToolStripMenuItem(); + this.menuImportRulesFromClipboard = new System.Windows.Forms.ToolStripMenuItem(); this.panel2.SuspendLayout(); this.panel1.SuspendLayout(); + this.cmsLv.SuspendLayout(); + this.tabControl2.SuspendLayout(); + this.tabPage2.SuspendLayout(); + this.menuServer.SuspendLayout(); this.SuspendLayout(); // // btnClose @@ -51,26 +71,13 @@ this.btnClose.UseVisualStyleBackColor = true; this.btnClose.Click += new System.EventHandler(this.btnClose_Click); // - // panCon - // - resources.ApplyResources(this.panCon, "panCon"); - this.panCon.Name = "panCon"; - // // panel2 // - this.panel2.Controls.Add(this.btnAdd); this.panel2.Controls.Add(this.btnClose); this.panel2.Controls.Add(this.btnOK); resources.ApplyResources(this.panel2, "panel2"); this.panel2.Name = "panel2"; // - // btnAdd - // - resources.ApplyResources(this.btnAdd, "btnAdd"); - this.btnAdd.Name = "btnAdd"; - this.btnAdd.UseVisualStyleBackColor = true; - this.btnAdd.Click += new System.EventHandler(this.btnAdd_Click); - // // btnOK // resources.ApplyResources(this.btnOK, "btnOK"); @@ -78,28 +85,13 @@ this.btnOK.UseVisualStyleBackColor = true; this.btnOK.Click += new System.EventHandler(this.btnOK_Click); // - // btnSetDefRountingRule - // - resources.ApplyResources(this.btnSetDefRountingRule, "btnSetDefRountingRule"); - this.btnSetDefRountingRule.Name = "btnSetDefRountingRule"; - this.btnSetDefRountingRule.UseVisualStyleBackColor = true; - this.btnSetDefRountingRule.Click += new System.EventHandler(this.btnSetDefRountingRule_Click); - // // panel1 // - this.panel1.Controls.Add(this.btnSetDefRountingRule); - this.panel1.Controls.Add(this.labRoutingTips); this.panel1.Controls.Add(this.linkLabelRoutingDoc); this.panel1.Controls.Add(this.cmbdomainStrategy); resources.ApplyResources(this.panel1, "panel1"); this.panel1.Name = "panel1"; // - // labRoutingTips - // - this.labRoutingTips.ForeColor = System.Drawing.Color.Brown; - resources.ApplyResources(this.labRoutingTips, "labRoutingTips"); - this.labRoutingTips.Name = "labRoutingTips"; - // // linkLabelRoutingDoc // resources.ApplyResources(this.linkLabelRoutingDoc, "linkLabelRoutingDoc"); @@ -118,21 +110,169 @@ resources.ApplyResources(this.cmbdomainStrategy, "cmbdomainStrategy"); this.cmbdomainStrategy.Name = "cmbdomainStrategy"; // + // lvRoutings + // + this.lvRoutings.ContextMenuStrip = this.cmsLv; + resources.ApplyResources(this.lvRoutings, "lvRoutings"); + this.lvRoutings.FullRowSelect = true; + this.lvRoutings.GridLines = true; + this.lvRoutings.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable; + this.lvRoutings.HideSelection = false; + this.lvRoutings.Items.AddRange(new System.Windows.Forms.ListViewItem[] { + ((System.Windows.Forms.ListViewItem)(resources.GetObject("lvRoutings.Items")))}); + this.lvRoutings.MultiSelect = false; + this.lvRoutings.Name = "lvRoutings"; + this.lvRoutings.UseCompatibleStateImageBehavior = false; + this.lvRoutings.View = System.Windows.Forms.View.Details; + this.lvRoutings.DoubleClick += new System.EventHandler(this.lvRoutings_DoubleClick); + this.lvRoutings.KeyDown += new System.Windows.Forms.KeyEventHandler(this.lvRoutings_KeyDown); + // + // cmsLv + // + this.cmsLv.ImageScalingSize = new System.Drawing.Size(20, 20); + this.cmsLv.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.menuAdd, + this.menuRemove, + this.menuSelectAll, + this.menuExportSelectedRules, + this.toolStripSeparator3, + this.menuMoveTop, + this.menuMoveUp, + this.menuMoveDown, + this.menuMoveBottom}); + this.cmsLv.Name = "cmsLv"; + resources.ApplyResources(this.cmsLv, "cmsLv"); + // + // menuAdd + // + this.menuAdd.Name = "menuAdd"; + resources.ApplyResources(this.menuAdd, "menuAdd"); + this.menuAdd.Click += new System.EventHandler(this.menuAdd_Click); + // + // menuRemove + // + this.menuRemove.Name = "menuRemove"; + resources.ApplyResources(this.menuRemove, "menuRemove"); + this.menuRemove.Click += new System.EventHandler(this.menuRemove_Click); + // + // menuSelectAll + // + this.menuSelectAll.Name = "menuSelectAll"; + resources.ApplyResources(this.menuSelectAll, "menuSelectAll"); + this.menuSelectAll.Click += new System.EventHandler(this.menuSelectAll_Click); + // + // menuExportSelectedRules + // + this.menuExportSelectedRules.Name = "menuExportSelectedRules"; + resources.ApplyResources(this.menuExportSelectedRules, "menuExportSelectedRules"); + this.menuExportSelectedRules.Click += new System.EventHandler(this.menuExportSelectedRules_Click); + // + // toolStripSeparator3 + // + this.toolStripSeparator3.Name = "toolStripSeparator3"; + resources.ApplyResources(this.toolStripSeparator3, "toolStripSeparator3"); + // + // menuMoveTop + // + this.menuMoveTop.Name = "menuMoveTop"; + resources.ApplyResources(this.menuMoveTop, "menuMoveTop"); + this.menuMoveTop.Click += new System.EventHandler(this.menuMoveTop_Click); + // + // menuMoveUp + // + this.menuMoveUp.Name = "menuMoveUp"; + resources.ApplyResources(this.menuMoveUp, "menuMoveUp"); + this.menuMoveUp.Click += new System.EventHandler(this.menuMoveUp_Click); + // + // menuMoveDown + // + this.menuMoveDown.Name = "menuMoveDown"; + resources.ApplyResources(this.menuMoveDown, "menuMoveDown"); + this.menuMoveDown.Click += new System.EventHandler(this.menuMoveDown_Click); + // + // menuMoveBottom + // + this.menuMoveBottom.Name = "menuMoveBottom"; + resources.ApplyResources(this.menuMoveBottom, "menuMoveBottom"); + this.menuMoveBottom.Click += new System.EventHandler(this.menuMoveBottom_Click); + // + // MenuItem1 + // + this.MenuItem1.DropDown = this.cmsLv; + this.MenuItem1.Name = "MenuItem1"; + resources.ApplyResources(this.MenuItem1, "MenuItem1"); + // + // tabControl2 + // + this.tabControl2.Controls.Add(this.tabPage2); + resources.ApplyResources(this.tabControl2, "tabControl2"); + this.tabControl2.Name = "tabControl2"; + this.tabControl2.SelectedIndex = 0; + // + // tabPage2 + // + this.tabPage2.Controls.Add(this.lvRoutings); + resources.ApplyResources(this.tabPage2, "tabPage2"); + this.tabPage2.Name = "tabPage2"; + this.tabPage2.UseVisualStyleBackColor = true; + // + // menuServer + // + this.menuServer.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.MenuItem1, + this.toolStripMenuItem1}); + resources.ApplyResources(this.menuServer, "menuServer"); + this.menuServer.Name = "menuServer"; + // + // toolStripMenuItem1 + // + this.toolStripMenuItem1.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.menuImportRulesFromPreset, + this.menuImportRulesFromFile, + this.menuImportRulesFromClipboard}); + this.toolStripMenuItem1.Name = "toolStripMenuItem1"; + resources.ApplyResources(this.toolStripMenuItem1, "toolStripMenuItem1"); + // + // menuImportRulesFromPreset + // + this.menuImportRulesFromPreset.Name = "menuImportRulesFromPreset"; + resources.ApplyResources(this.menuImportRulesFromPreset, "menuImportRulesFromPreset"); + this.menuImportRulesFromPreset.Click += new System.EventHandler(this.menuImportRulesFromPreset_Click); + // + // menuImportRulesFromFile + // + this.menuImportRulesFromFile.Name = "menuImportRulesFromFile"; + resources.ApplyResources(this.menuImportRulesFromFile, "menuImportRulesFromFile"); + this.menuImportRulesFromFile.Click += new System.EventHandler(this.menuImportRulesFromFile_Click); + // + // menuImportRulesFromClipboard + // + this.menuImportRulesFromClipboard.Name = "menuImportRulesFromClipboard"; + resources.ApplyResources(this.menuImportRulesFromClipboard, "menuImportRulesFromClipboard"); + this.menuImportRulesFromClipboard.Click += new System.EventHandler(this.menuImportRulesFromClipboard_Click); + // // RoutingSettingForm // resources.ApplyResources(this, "$this"); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.CancelButton = this.btnClose; - this.Controls.Add(this.panCon); + this.Controls.Add(this.tabControl2); this.Controls.Add(this.panel1); this.Controls.Add(this.panel2); + this.Controls.Add(this.menuServer); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; this.Name = "RoutingSettingForm"; this.Load += new System.EventHandler(this.RoutingSettingForm_Load); this.panel2.ResumeLayout(false); this.panel1.ResumeLayout(false); this.panel1.PerformLayout(); + this.cmsLv.ResumeLayout(false); + this.tabControl2.ResumeLayout(false); + this.tabPage2.ResumeLayout(false); + this.menuServer.ResumeLayout(false); + this.menuServer.PerformLayout(); this.ResumeLayout(false); + this.PerformLayout(); } @@ -140,12 +280,27 @@ private System.Windows.Forms.Button btnClose; private System.Windows.Forms.Button btnOK; private System.Windows.Forms.Panel panel2; - private System.Windows.Forms.Button btnAdd; - private System.Windows.Forms.Panel panCon; private System.Windows.Forms.Panel panel1; - private System.Windows.Forms.Label labRoutingTips; private System.Windows.Forms.LinkLabel linkLabelRoutingDoc; private System.Windows.Forms.ComboBox cmbdomainStrategy; - private System.Windows.Forms.Button btnSetDefRountingRule; + private Base.ListViewFlickerFree lvRoutings; + private System.Windows.Forms.TabControl tabControl2; + private System.Windows.Forms.TabPage tabPage2; + private System.Windows.Forms.ContextMenuStrip cmsLv; + private System.Windows.Forms.ToolStripMenuItem menuRemove; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator3; + private System.Windows.Forms.ToolStripMenuItem menuMoveTop; + private System.Windows.Forms.ToolStripMenuItem menuMoveUp; + private System.Windows.Forms.ToolStripMenuItem menuMoveDown; + private System.Windows.Forms.ToolStripMenuItem menuMoveBottom; + private System.Windows.Forms.ToolStripMenuItem menuSelectAll; + private System.Windows.Forms.ToolStripMenuItem menuAdd; + private System.Windows.Forms.MenuStrip menuServer; + private System.Windows.Forms.ToolStripMenuItem MenuItem1; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem1; + private System.Windows.Forms.ToolStripMenuItem menuImportRulesFromPreset; + private System.Windows.Forms.ToolStripMenuItem menuImportRulesFromFile; + private System.Windows.Forms.ToolStripMenuItem menuImportRulesFromClipboard; + private System.Windows.Forms.ToolStripMenuItem menuExportSelectedRules; } } \ No newline at end of file diff --git a/v2rayN/v2rayN/Forms/RoutingSettingForm.cs b/v2rayN/v2rayN/Forms/RoutingSettingForm.cs index 35bd956f..e63d4ed8 100644 --- a/v2rayN/v2rayN/Forms/RoutingSettingForm.cs +++ b/v2rayN/v2rayN/Forms/RoutingSettingForm.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Windows.Forms; +using v2rayN.Base; using v2rayN.Handler; using v2rayN.Mode; @@ -8,8 +9,7 @@ namespace v2rayN.Forms { public partial class RoutingSettingForm : BaseForm { - List lstControls = new List(); - + private List lvSelecteds = new List(); public RoutingSettingForm() { InitializeComponent(); @@ -19,59 +19,61 @@ namespace v2rayN.Forms { cmbdomainStrategy.Text = config.domainStrategy; - if (config.routingItem == null) + if (config.rules == null) { - config.routingItem = new List(); + config.rules = new List(); } - - RefreshSubsView(); + InitRoutingsView(); + RefreshRoutingsView(); } - /// - /// 刷新列表 - /// - private void RefreshSubsView() + private void InitRoutingsView() { - panCon.Controls.Clear(); - lstControls.Clear(); + lvRoutings.BeginUpdate(); + lvRoutings.Items.Clear(); - for (int k = config.routingItem.Count - 1; k >= 0; k--) - { - RoutingItem item = config.routingItem[k]; - if (Utils.IsNullOrEmpty(item.remarks)) - { - config.routingItem.RemoveAt(k); - } - } + lvRoutings.GridLines = true; + lvRoutings.FullRowSelect = true; + lvRoutings.View = View.Details; + lvRoutings.MultiSelect = true; + lvRoutings.HeaderStyle = ColumnHeaderStyle.Clickable; - foreach (RoutingItem item in config.routingItem) - { - RoutingSettingControl control = new RoutingSettingControl(); - control.OnButtonClicked += Control_OnButtonClicked; - control.routingItem = item; - control.Dock = DockStyle.Top; + lvRoutings.Columns.Add("", 30); + lvRoutings.Columns.Add(UIRes.I18N("LvAlias"), 100); + lvRoutings.Columns.Add("outboundTag", 80); + lvRoutings.Columns.Add("port", 80); + lvRoutings.Columns.Add("domain", 200); + lvRoutings.Columns.Add("ip", 200); - panCon.Controls.Add(control); - panCon.Controls.SetChildIndex(control, 0); - - lstControls.Add(control); - } + lvRoutings.EndUpdate(); } - private void Control_OnButtonClicked(object sender, EventArgs e) + private void RefreshRoutingsView() { - RefreshSubsView(); + lvRoutings.BeginUpdate(); + lvRoutings.Items.Clear(); + + for (int k = 0; k < config.rules.Count; k++) + { + var item = config.rules[k]; + + ListViewItem lvItem = new ListViewItem(""); + Utils.AddSubItem(lvItem, "remarks", item.remarks); + Utils.AddSubItem(lvItem, "outboundTag", item.outboundTag); + Utils.AddSubItem(lvItem, "port", item.port); + Utils.AddSubItem(lvItem, "domain", Utils.List2String(item.domain)); + Utils.AddSubItem(lvItem, "ip", Utils.List2String(item.ip)); + + if (lvItem != null) lvRoutings.Items.Add(lvItem); + } + lvRoutings.EndUpdate(); } private void btnOK_Click(object sender, EventArgs e) { config.domainStrategy = cmbdomainStrategy.Text; - if (config.routingItem.Count <= 0) - { - AddSub("proxy", ""); - } - if (ConfigHandler.SaveRoutingItem(ref config) == 0) + if (ConfigHandler.SaveRoutingRulesItem(ref config) == 0) { this.DialogResult = DialogResult.OK; } @@ -79,7 +81,6 @@ namespace v2rayN.Forms { UI.ShowWarning(UIRes.I18N("OperationFailed")); } - } private void btnClose_Click(object sender, EventArgs e) @@ -87,58 +88,226 @@ namespace v2rayN.Forms this.DialogResult = DialogResult.Cancel; } - private void btnAdd_Click(object sender, EventArgs e) - { - AddSub("proxy", ""); - - RefreshSubsView(); - } - - - private void AddSub(string outboundTag, string userRule) - { - RoutingItem RoutingItem = new RoutingItem - { - remarks = outboundTag, - outboundTag = outboundTag, - userRules = Utils.String2List(userRule) - - }; - config.routingItem.Add(RoutingItem); - } - - - private void btnSetDefRountingRule_Click(object sender, EventArgs e) - { - config.routingItem.Clear(); - - List lstTag = new List - { - Global.agentTag, - Global.directTag, - Global.blockTag - }; - for (int k = 0; k < lstTag.Count; k++) - { - DownloadHandle downloadHandle = new DownloadHandle(); - - string result = downloadHandle.WebDownloadStringSync(Global.CustomRoutingListUrl + lstTag[k]); - if (Utils.IsNullOrEmpty(result)) - { - result = Utils.GetEmbedText(Global.CustomRoutingFileName + lstTag[k]); - } - AddSub(lstTag[k], result); - } - - AddSub(Global.directTag, Utils.GetEmbedText(Global.CustomRoutingFileName + "private")); - AddSub(Global.agentTag, ""); - - RefreshSubsView(); - } - private void linkLabelRoutingDoc_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { System.Diagnostics.Process.Start("https://www.v2fly.org/config/routing.html"); } + + private void lvRoutings_DoubleClick(object sender, EventArgs e) + { + int index = GetLvSelectedIndex(); + if (index < 0) + { + return; + } + var fm = new RoutingSettingDetailsForm(); + fm.EditIndex = index; + if (fm.ShowDialog() == DialogResult.OK) + { + RefreshRoutingsView(); + } + } + + private int GetLvSelectedIndex() + { + int index = -1; + lvSelecteds.Clear(); + try + { + if (lvRoutings.SelectedIndices.Count <= 0) + { + UI.Show(UIRes.I18N("PleaseSelectRules")); + return index; + } + + index = lvRoutings.SelectedIndices[0]; + foreach (int i in lvRoutings.SelectedIndices) + { + lvSelecteds.Add(i); + } + return index; + } + catch + { + return index; + } + } + + #region Edit function + + private void menuMoveTop_Click(object sender, EventArgs e) + { + MoveRule(EMove.Top); + } + + private void menuMoveUp_Click(object sender, EventArgs e) + { + MoveRule(EMove.Up); + } + + private void menuMoveDown_Click(object sender, EventArgs e) + { + MoveRule(EMove.Down); + } + + private void menuMoveBottom_Click(object sender, EventArgs e) + { + MoveRule(EMove.Bottom); + } + + private void MoveRule(EMove eMove) + { + int index = GetLvSelectedIndex(); + if (index < 0) + { + UI.Show(UIRes.I18N("PleaseSelectRules")); + return; + } + if (ConfigHandler.MoveRoutingRule(ref config, index, eMove) == 0) + { + RefreshRoutingsView(); + } + } + private void menuSelectAll_Click(object sender, EventArgs e) + { + foreach (ListViewItem item in lvRoutings.Items) + { + item.Selected = true; + } + } + + private void menuAdd_Click(object sender, EventArgs e) + { + var fm = new RoutingSettingDetailsForm(); + fm.EditIndex = -1; + if (fm.ShowDialog() == DialogResult.OK) + { + RefreshRoutingsView(); + } + } + + private void menuRemove_Click(object sender, EventArgs e) + { + int index = GetLvSelectedIndex(); + if (index < 0) + { + return; + } + if (UI.ShowYesNo(UIRes.I18N("RemoveRules")) == DialogResult.No) + { + return; + } + for (int k = lvSelecteds.Count - 1; k >= 0; k--) + { + config.rules.RemoveAt(index); + } + RefreshRoutingsView(); + } + private void menuExportSelectedRules_Click(object sender, EventArgs e) + { + GetLvSelectedIndex(); + var lst = new List(); + foreach (int v in lvSelecteds) + { + lst.Add(config.rules[v]); + } + if (lst.Count > 0) + { + Utils.SetClipboardData(Utils.ToJson(lst)); + UI.Show(UIRes.I18N("OperationSuccess")); + } + + } + + private void lvRoutings_KeyDown(object sender, KeyEventArgs e) + { + if (e.Control) + { + switch (e.KeyCode) + { + case Keys.A: + menuSelectAll_Click(null, null); + break; + case Keys.C: + menuExportSelectedRules_Click(null, null); + break; + } + } + else + { + switch (e.KeyCode) + { + case Keys.Delete: + menuRemove_Click(null, null); + break; + case Keys.T: + menuMoveTop_Click(null, null); + break; + case Keys.B: + menuMoveBottom_Click(null, null); + break; + case Keys.U: + menuMoveUp_Click(null, null); + break; + case Keys.D: + menuMoveDown_Click(null, null); + break; + } + } + } + #endregion + + #region preset rules + private void menuImportRulesFromPreset_Click(object sender, EventArgs e) + { + var rules = Utils.GetEmbedText(Global.CustomRoutingFileName + "rules"); + if (ConfigHandler.AddBatchRoutingRules(ref config, rules) == 0) + { + RefreshRoutingsView(); + UI.Show(UIRes.I18N("OperationSuccess")); + } + } + + private void menuImportRulesFromFile_Click(object sender, EventArgs e) + { + OpenFileDialog fileDialog = new OpenFileDialog + { + Multiselect = false, + Filter = "Rules|*.json|All|*.*" + }; + if (fileDialog.ShowDialog() != DialogResult.OK) + { + return; + } + string fileName = fileDialog.FileName; + if (Utils.IsNullOrEmpty(fileName)) + { + return; + } + string result = Utils.LoadResource(fileName); + if (Utils.IsNullOrEmpty(result)) + { + return; + } + if (ConfigHandler.AddBatchRoutingRules(ref config, result) == 0) + { + RefreshRoutingsView(); + UI.Show(UIRes.I18N("OperationSuccess")); + } + } + + private void menuImportRulesFromClipboard_Click(object sender, EventArgs e) + { + string clipboardData = Utils.GetClipboardData(); + if (ConfigHandler.AddBatchRoutingRules(ref config, clipboardData) == 0) + { + RefreshRoutingsView(); + UI.Show(UIRes.I18N("OperationSuccess")); + } + } + + #endregion + + } } diff --git a/v2rayN/v2rayN/Forms/RoutingSettingForm.resx b/v2rayN/v2rayN/Forms/RoutingSettingForm.resx index 9c08b219..ae3fa1eb 100644 --- a/v2rayN/v2rayN/Forms/RoutingSettingForm.resx +++ b/v2rayN/v2rayN/Forms/RoutingSettingForm.resx @@ -145,60 +145,6 @@ panel2 - 1 - - - True - - - Fill - - - 0, 68 - - - 765, 545 - - - 10 - - - panCon - - - System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 0 - - - NoControl - - - 47, 17 - - - 75, 23 - - - 6 - - - &Add - - - btnAdd - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - panel2 - - 0 @@ -226,7 +172,7 @@ panel2 - 2 + 1 Bottom @@ -250,67 +196,7 @@ $this - 2 - - - Top, Right - - - True - - - NoControl - - - 319, 17 - - - 229, 23 - - - 19 - - - Set default custom routing rules - - - btnSetDefRountingRule - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - panel1 - - - 0 - - - NoControl - - - 10, 42 - - - 598, 16 - - - 13 - - - *Set the rules, separated by commas (,); support Domain (pure string / regular / subdomain) and IP - - - labRoutingTips - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - panel1 - - - 1 + 3 True @@ -343,7 +229,7 @@ panel1 - 2 + 0 AsIs @@ -373,16 +259,16 @@ panel1 - 3 + 1 Top - 0, 0 + 0, 25 - 765, 68 + 765, 51 11 @@ -397,8 +283,217 @@ $this + 2 + + + 17, 17 + + + 202, 22 + + + Add + + + 202, 22 + + + Remove selected + + + 202, 22 + + + Select All (Ctrl+A) + + + 202, 22 + + + Export Selected Rules + + + 199, 6 + + + 202, 22 + + + Move to top (T) + + + 202, 22 + + + Up (U) + + + 202, 22 + + + Down (D) + + + 202, 22 + + + Move to bottom (B) + + + 203, 186 + + + cmsLv + + + System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Fill + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w + LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkMAwAAAFFTeXN0 + ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2Vu + PWIwM2Y1ZjdmMTFkNTBhM2EFAQAAACFTeXN0ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0l0ZW0HAAAA + BFRleHQKSW1hZ2VJbmRleAlCYWNrQ29sb3IHQ2hlY2tlZARGb250CUZvcmVDb2xvchdVc2VJdGVtU3R5 + bGVGb3JTdWJJdGVtcwEABAAEBAAIFFN5c3RlbS5EcmF3aW5nLkNvbG9yAwAAAAETU3lzdGVtLkRyYXdp + bmcuRm9udAMAAAAUU3lzdGVtLkRyYXdpbmcuQ29sb3IDAAAAAQIAAAAGBAAAAAD/////Bfv///8UU3lz + dGVtLkRyYXdpbmcuQ29sb3IEAAAABG5hbWUFdmFsdWUKa25vd25Db2xvcgVzdGF0ZQEAAAAJBwcDAAAA + CgAAAAAAAAAAGAABAAAJBgAAAAH5////+////woAAAAAAAAAABoAAQABBQYAAAATU3lzdGVtLkRyYXdp + bmcuRm9udAQAAAAETmFtZQRTaXplBVN0eWxlBFVuaXQBAAQECxhTeXN0ZW0uRHJhd2luZy5Gb250U3R5 + bGUDAAAAG1N5c3RlbS5EcmF3aW5nLkdyYXBoaWNzVW5pdAMAAAADAAAABggAAAAG5a6L5L2TAAAQQQX3 + ////GFN5c3RlbS5EcmF3aW5nLkZvbnRTdHlsZQEAAAAHdmFsdWVfXwAIAwAAAAAAAAAF9v///xtTeXN0 + ZW0uRHJhd2luZy5HcmFwaGljc1VuaXQBAAAAB3ZhbHVlX18ACAMAAAADAAAACw== + + + + 3, 3 + + + 751, 505 + + + 12 + + + lvRoutings + + + v2rayN.Base.ListViewFlickerFree, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + + + tabPage2 + + + 0 + + + 120, 21 + + + Edit and Function + + + 4, 22 + + + 3, 3, 3, 3 + + + 757, 511 + + + 0 + + + RuleList + + + tabPage2 + + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabControl2 + + + 0 + + + Fill + + + 0, 76 + + + 765, 537 + + + 14 + + + tabControl2 + + + System.Windows.Forms.TabControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + 1 + + 139, 17 + + + 247, 22 + + + Import Rules From Preset + + + 247, 22 + + + Import Rules From File + + + 247, 22 + + + Import Rules From Clipboard + + + 95, 21 + + + Import Rules + + + 0, 0 + + + 765, 25 + + + 15 + + + menuServer + + + System.Windows.Forms.MenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 4 + True @@ -411,6 +506,90 @@ Routing Settings + + menuAdd + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuRemove + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuSelectAll + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuExportSelectedRules + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolStripSeparator3 + + + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuMoveTop + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuMoveUp + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuMoveDown + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuMoveBottom + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + MenuItem1 + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolStripMenuItem1 + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuImportRulesFromPreset + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuImportRulesFromFile + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuImportRulesFromClipboard + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + RoutingSettingForm diff --git a/v2rayN/v2rayN/Forms/RoutingSettingForm.zh-Hans.resx b/v2rayN/v2rayN/Forms/RoutingSettingForm.zh-Hans.resx index dc3bb7b1..c4e5f695 100644 --- a/v2rayN/v2rayN/Forms/RoutingSettingForm.zh-Hans.resx +++ b/v2rayN/v2rayN/Forms/RoutingSettingForm.zh-Hans.resx @@ -120,25 +120,141 @@ 取消(&C) - - 添加(&A) - 确定(&O) - - 一键设置默认自定义路由规则 - - - *设置的规则,用逗号(,)隔开;支持Domain(纯字符串/正则/子域名)和IP - + + 785, 60 + 77, 12 域名解析策略 + + 785, 51 + + + 196, 22 + + + 添加规则 + + + 196, 22 + + + 移除所选规则 + + + 196, 22 + + + 全选 + + + 196, 22 + + + 导出所选规则至剪贴板 + + + 193, 6 + + + 196, 22 + + + 上移至顶 (T) + + + 196, 22 + + + 上移 (U) + + + 196, 22 + + + 下移 (D) + + + 196, 22 + + + 下移至底 (B) + + + 92, 21 + + + 路由规则功能 + + + 197, 186 + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w + LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkMAwAAAFFTeXN0 + ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2Vu + PWIwM2Y1ZjdmMTFkNTBhM2EFAQAAACFTeXN0ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0l0ZW0HAAAA + BFRleHQKSW1hZ2VJbmRleAlCYWNrQ29sb3IHQ2hlY2tlZARGb250CUZvcmVDb2xvchdVc2VJdGVtU3R5 + bGVGb3JTdWJJdGVtcwEABAAEBAAIFFN5c3RlbS5EcmF3aW5nLkNvbG9yAwAAAAETU3lzdGVtLkRyYXdp + bmcuRm9udAMAAAAUU3lzdGVtLkRyYXdpbmcuQ29sb3IDAAAAAQIAAAAGBAAAAAD/////Bfv///8UU3lz + dGVtLkRyYXdpbmcuQ29sb3IEAAAABG5hbWUFdmFsdWUKa25vd25Db2xvcgVzdGF0ZQEAAAAJBwcDAAAA + CgAAAAAAAAAAGAABAAAJBgAAAAH5////+////woAAAAAAAAAABoAAQABBQYAAAATU3lzdGVtLkRyYXdp + bmcuRm9udAQAAAAETmFtZQRTaXplBVN0eWxlBFVuaXQBAAQECxhTeXN0ZW0uRHJhd2luZy5Gb250U3R5 + bGUDAAAAG1N5c3RlbS5EcmF3aW5nLkdyYXBoaWNzVW5pdAMAAAADAAAABggAAAAG5a6L5L2TAAAQQQX3 + ////GFN5c3RlbS5EcmF3aW5nLkZvbnRTdHlsZQEAAAAHdmFsdWVfXwAIAwAAAAAAAAAF9v///xtTeXN0 + ZW0uRHJhd2luZy5HcmFwaGljc1VuaXQBAAAAB3ZhbHVlX18ACAMAAAADAAAACw== + + + + 771, 505 + + + 777, 511 + + + 路由规则列表 + + + 785, 537 + + + 184, 22 + + + 从预设中导入规则 + + + 184, 22 + + + 从文件中导入规则 + + + 184, 22 + + + 从剪贴板中导入规则 + + + 92, 21 + + + 导入路由规则 + + + 785, 25 + + + 785, 673 + 路由设置 diff --git a/v2rayN/v2rayN/Global.cs b/v2rayN/v2rayN/Global.cs index 7c96ee51..478fbbd0 100644 --- a/v2rayN/v2rayN/Global.cs +++ b/v2rayN/v2rayN/Global.cs @@ -9,6 +9,9 @@ namespace v2rayN public const string v2rayWebsiteUrl = @"https://www.v2fly.org/"; public const string AboutUrl = @"https://github.com/2dust/v2rayN"; public const string UpdateUrl = AboutUrl + @"/releases"; + public const string v2flyCoreUrl = "https://github.com/v2fly/v2ray-core/releases"; + public const string xrayCoreUrl = "https://github.com/XTLS/Xray-core/releases"; + public const string NUrl = @"https://github.com/2dust/v2rayN/releases"; /// @@ -17,7 +20,7 @@ namespace v2rayN public const string SpeedTestUrl = @"http://cachefly.cachefly.net/10mb.test"; public const string SpeedPingTestUrl = @"https://www.google.com/generate_204"; public const string AvailabilityTestUrl = @"https://www.google.com/generate_204"; - + /// /// CustomRoutingListUrl /// diff --git a/v2rayN/v2rayN/Handler/ConfigHandler.cs b/v2rayN/v2rayN/Handler/ConfigHandler.cs index ddce8665..cfdd2281 100644 --- a/v2rayN/v2rayN/Handler/ConfigHandler.cs +++ b/v2rayN/v2rayN/Handler/ConfigHandler.cs @@ -86,10 +86,10 @@ namespace v2rayN.Handler if (Utils.IsNullOrEmpty(config.domainStrategy)) { config.domainStrategy = "IPIfNonMatch"; - } - if (config.routingItem == null) + } + if (config.rules == null) { - config.routingItem = new List(); + config.rules = new List(); } //kcp if (config.kcpItem == null) @@ -1067,14 +1067,14 @@ namespace v2rayN.Handler /// /// /// - public static int SaveRoutingItem(ref Config config) + public static int SaveRoutingRulesItem(ref Config config) { - if (config.routingItem == null || config.routingItem.Count <= 0) + if (config.rules == null) { return -1; } - foreach (RoutingItem sub in config.routingItem) + foreach (RulesItem sub in config.rules) { } @@ -1083,6 +1083,134 @@ namespace v2rayN.Handler ToJsonFile(config); return 0; } + /// + /// AddRoutingRulesItem + /// + /// + /// + /// + /// + public static int AddRoutingRule(ref Config config, RulesItem item, int index) + { + if (index >= 0) + { + config.rules[index] = item; + } + else + { + config.rules.Add(item); + } + Global.reloadV2ray = true; + ToJsonFile(config); + + return 0; + } + + /// + /// AddBatchRoutingRules + /// + /// + /// + /// + public static int AddBatchRoutingRules(ref Config config, string clipboardData) + { + if (Utils.IsNullOrEmpty(clipboardData)) + { + return -1; + } + + var lstRules = Utils.FromJson>(clipboardData); + if (lstRules == null) + { + return -1; + } + + config.rules.Clear(); + foreach (var item in lstRules) + { + config.rules.Add(item); + } + + Global.reloadV2ray = true; + + ToJsonFile(config); + + return 0; + } + + /// + /// MoveRoutingRule + /// + /// + /// + /// + /// + public static int MoveRoutingRule(ref Config config, int index, EMove eMove) + { + int count = config.rules.Count; + if (index < 0 || index > config.rules.Count - 1) + { + return -1; + } + switch (eMove) + { + case EMove.Top: + { + if (index == 0) + { + return 0; + } + var item = Utils.DeepCopy(config.rules[index]); + config.rules.RemoveAt(index); + config.rules.Insert(0, item); + + break; + } + case EMove.Up: + { + if (index == 0) + { + return 0; + } + var item = Utils.DeepCopy(config.rules[index]); + config.rules.RemoveAt(index); + config.rules.Insert(index - 1, item); + + break; + } + + case EMove.Down: + { + if (index == count - 1) + { + return 0; + } + var item = Utils.DeepCopy(config.rules[index]); + config.rules.RemoveAt(index); + config.rules.Insert(index + 1, item); + + break; + } + case EMove.Bottom: + { + if (index == count - 1) + { + return 0; + } + var item = Utils.DeepCopy(config.rules[index]); + config.rules.RemoveAt(index); + config.rules.Add(item); + + break; + } + + } + Global.reloadV2ray = true; + + ToJsonFile(config); + + return 0; + } } } diff --git a/v2rayN/v2rayN/Handler/DownloadHandle.cs b/v2rayN/v2rayN/Handler/DownloadHandle.cs index 5dacf61f..dd1d057a 100644 --- a/v2rayN/v2rayN/Handler/DownloadHandle.cs +++ b/v2rayN/v2rayN/Handler/DownloadHandle.cs @@ -52,12 +52,12 @@ namespace v2rayN.Handler #region Check for updates - private readonly string nLatestUrl = "https://github.com/2dust/v2rayN/releases/latest"; - private const string nUrl = "https://github.com/2dust/v2rayN/releases/download/{0}/v2rayN.zip"; - private readonly string v2flyCoreLatestUrl = "https://github.com/v2fly/v2ray-core/releases/latest"; - private const string v2flyCoreUrl = "https://github.com/v2fly/v2ray-core/releases/download/{0}/v2ray-windows-{1}.zip"; - private readonly string xrayCoreLatestUrl = "https://github.com/XTLS/Xray-core/releases/latest"; - private const string xrayCoreUrl = "https://github.com/XTLS/Xray-core/releases/download/{0}/Xray-windows-{1}.zip"; + private readonly string nLatestUrl = Global.NUrl + "/latest"; + private const string nUrl = Global.NUrl + "/download/{0}/v2rayN.zip"; + private readonly string v2flyCoreLatestUrl = Global.v2flyCoreUrl + "/latest"; + private const string v2flyCoreUrl = Global.v2flyCoreUrl + "/download/{0}/v2ray-windows-{1}.zip"; + private readonly string xrayCoreLatestUrl = Global.xrayCoreUrl + "/latest"; + private const string xrayCoreUrl = Global.xrayCoreUrl + "/download/{0}/Xray-windows-{1}.zip"; public async void CheckUpdateAsync(string type) { @@ -119,7 +119,7 @@ namespace v2rayN.Handler string filePath = Utils.GetPath(core); if (!File.Exists(filePath)) { - string msg = string.Format(UIRes.I18N("NotFoundCore"), @"https://github.com/v2fly/v2ray-core/releases"); + string msg = string.Format(UIRes.I18N("NotFoundCore"), @""); //ShowMsg(true, msg); return ""; } diff --git a/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs b/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs index 61175ba4..3242cbb1 100644 --- a/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs +++ b/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs @@ -195,9 +195,9 @@ namespace v2rayN.Handler { v2rayConfig.routing.domainStrategy = config.domainStrategy; - foreach (var item in config.routingItem) + foreach (var item in config.rules) { - routingUserRule(item.userRules, item.outboundTag, ref v2rayConfig); + routingUserRule(item, ref v2rayConfig); } } } @@ -206,68 +206,38 @@ namespace v2rayN.Handler } return 0; } - private static int routingUserRule(List userRule, string tag, ref V2rayConfig v2rayConfig) + private static int routingUserRule(RulesItem rules, ref V2rayConfig v2rayConfig) { try { - if (userRule == null) + if (rules == null) { + return 0; } - else if (userRule.Count == 0) + var hasDomainIp = false; + if (rules.domain != null && rules.domain.Count > 0) { - v2rayConfig.routing.rules.Add(new RulesItem - { - type = "field", - outboundTag = tag, - port = "0-65535" - }); + var it = Utils.DeepCopy(rules); + it.ip = null; + it.type = "field"; + v2rayConfig.routing.rules.Add(it); + hasDomainIp = true; } - else if (userRule.Count > 0) + if (rules.ip != null && rules.ip.Count > 0) { - //Domain - RulesItem rulesDomain = new RulesItem - { - type = "field", - outboundTag = tag, - domain = new List() - }; - - //IP - RulesItem rulesIP = new RulesItem - { - type = "field", - outboundTag = tag, - ip = new List() - }; - - foreach (string u in userRule) - { - string url = u.TrimEx(); - if (Utils.IsNullOrEmpty(url)) - { - continue; - } - if (Utils.IsIP(url) || url.StartsWith("geoip:")) - { - rulesIP.ip.Add(url); - } - else if (Utils.IsDomain(url) - || url.StartsWith("geosite:") - || url.StartsWith("regexp:") - || url.StartsWith("domain:") - || url.StartsWith("full:")) - { - rulesDomain.domain.Add(url); - } - } - if (rulesDomain.domain.Count > 0) - { - v2rayConfig.routing.rules.Add(rulesDomain); - } - if (rulesIP.ip.Count > 0) - { - v2rayConfig.routing.rules.Add(rulesIP); - } + var it = Utils.DeepCopy(rules); + it.domain = null; + it.type = "field"; + v2rayConfig.routing.rules.Add(it); + hasDomainIp = true; + } + if (!hasDomainIp && !Utils.IsNullOrEmpty(rules.port)) + { + var it = Utils.DeepCopy(rules); + it.domain = null; + it.ip = null; + it.type = "field"; + v2rayConfig.routing.rules.Add(it); } } catch diff --git a/v2rayN/v2rayN/Handler/V2rayHandler.cs b/v2rayN/v2rayN/Handler/V2rayHandler.cs index e4d13371..95951b5e 100644 --- a/v2rayN/v2rayN/Handler/V2rayHandler.cs +++ b/v2rayN/v2rayN/Handler/V2rayHandler.cs @@ -22,18 +22,13 @@ namespace v2rayN.Handler { private static string v2rayConfigRes = Global.v2rayConfigFileName; private List lstV2ray; + private string coreUrl; public event ProcessDelegate ProcessEvent; //private int processId = 0; private Process _process; public V2rayHandler() { - lstV2ray = new List - { - "xray", - "wv2ray", - "v2ray" - }; } /// @@ -41,6 +36,24 @@ namespace v2rayN.Handler /// public void LoadV2ray(Config config) { + if (config.coreType == ECoreType.v2fly_core) + { + lstV2ray = new List + { + "wv2ray", + "v2ray" + }; + coreUrl = Global.v2flyCoreUrl; + } + else + { + lstV2ray = new List + { + "xray" + }; + coreUrl = Global.xrayCoreUrl; + } + if (Global.reloadV2ray) { string fileName = Utils.GetPath(v2rayConfigRes); @@ -159,7 +172,8 @@ namespace v2rayN.Handler } } - private string V2rayFindexe() { + private string V2rayFindexe() + { //查找v2ray文件是否存在 string fileName = string.Empty; //lstV2ray.Reverse(); @@ -175,7 +189,7 @@ namespace v2rayN.Handler } if (Utils.IsNullOrEmpty(fileName)) { - string msg = string.Format(UIRes.I18N("NotFoundCore"), @"https://github.com/v2fly/v2ray-core/releases"); + string msg = string.Format(UIRes.I18N("NotFoundCore"), coreUrl); ShowMsg(false, msg); } return fileName; @@ -318,6 +332,6 @@ namespace v2rayN.Handler { Utils.SaveLog(ex.Message, ex); } - } + } } } diff --git a/v2rayN/v2rayN/HttpProxyHandler/PrivoxyHandler.cs b/v2rayN/v2rayN/HttpProxyHandler/PrivoxyHandler.cs index f738a318..a49e2d04 100644 --- a/v2rayN/v2rayN/HttpProxyHandler/PrivoxyHandler.cs +++ b/v2rayN/v2rayN/HttpProxyHandler/PrivoxyHandler.cs @@ -74,7 +74,7 @@ namespace v2rayN.HttpProxyHandler if (_process == null) { - string privoxyConfig = Resources.privoxy_conf; + string privoxyConfig = "";//Resources.privoxy_conf; RunningPort = config.GetLocalPort(Global.InboundHttp); privoxyConfig = privoxyConfig.Replace("__SOCKS_PORT__", localPort.ToString()); privoxyConfig = privoxyConfig.Replace("__PRIVOXY_BIND_PORT__", RunningPort.ToString()); diff --git a/v2rayN/v2rayN/Mode/Config.cs b/v2rayN/v2rayN/Mode/Config.cs index 245d9ed0..2680a577 100644 --- a/v2rayN/v2rayN/Mode/Config.cs +++ b/v2rayN/v2rayN/Mode/Config.cs @@ -96,7 +96,7 @@ namespace v2rayN.Mode public string speedPingTestUrl { get; set; - } + } /// /// 允许来自局域网的连接 @@ -161,7 +161,12 @@ namespace v2rayN.Mode { get; set; } - public List routingItem + public List rules + { + get; set; + } + + public ECoreType coreType { get; set; } @@ -276,7 +281,7 @@ namespace v2rayN.Mode { return GetLocalPort(Global.InboundSocks) + 1; } - + else if (protocol == "speedtest") { return GetLocalPort(Global.InboundSocks) + 103; @@ -693,32 +698,4 @@ namespace v2rayN.Mode get; set; } } - - [Serializable] - public class RoutingItem - { - /// - /// - /// - public string remarks - { - get; set; - } - - /// - /// - /// - public string outboundTag - { - get; set; - } - - /// - /// - /// - public List userRules - { - get; set; - } - } } diff --git a/v2rayN/v2rayN/Mode/ECoreType.cs b/v2rayN/v2rayN/Mode/ECoreType.cs index 4049db06..3076b8b7 100644 --- a/v2rayN/v2rayN/Mode/ECoreType.cs +++ b/v2rayN/v2rayN/Mode/ECoreType.cs @@ -3,7 +3,7 @@ namespace v2rayN.Mode { public enum ECoreType { - v2fly_core = 1, - xray_core = 2 + v2fly_core = 0, + Xray_core = 1 } } diff --git a/v2rayN/v2rayN/Mode/ERoutingSort.cs b/v2rayN/v2rayN/Mode/ERoutingSort.cs deleted file mode 100644 index 2df23d2d..00000000 --- a/v2rayN/v2rayN/Mode/ERoutingSort.cs +++ /dev/null @@ -1,11 +0,0 @@ - -namespace v2rayN.Mode -{ - public enum ERoutingSort - { - UserProxy = 1, - UserDirect = 2, - UserBlock = 3, - UserPredefined = 4 - } -} diff --git a/v2rayN/v2rayN/Mode/ESysProxyType.cs b/v2rayN/v2rayN/Mode/ESysProxyType.cs index 13f63c7e..7e33357e 100644 --- a/v2rayN/v2rayN/Mode/ESysProxyType.cs +++ b/v2rayN/v2rayN/Mode/ESysProxyType.cs @@ -3,8 +3,8 @@ namespace v2rayN.Mode { public enum ESysProxyType { - Unchanged = 0, + ForcedClear = 0, ForcedChange = 1, - ForcedClear = 2 + Unchanged = 2 } } diff --git a/v2rayN/v2rayN/Mode/RulesItem.cs b/v2rayN/v2rayN/Mode/RulesItem.cs new file mode 100644 index 00000000..a4ae121e --- /dev/null +++ b/v2rayN/v2rayN/Mode/RulesItem.cs @@ -0,0 +1,36 @@ +using System; +using System.Collections.Generic; + +namespace v2rayN.Mode +{ + [Serializable] + public class RulesItem + { + public string remarks { get; set; } + /// + /// + /// + public string type { get; set; } + /// + /// + /// + public string port { get; set; } + + public List inboundTag { get; set; } + /// + /// + /// + public string outboundTag { get; set; } + + /// + /// + /// + public List ip { get; set; } + + /// + /// + /// + public List domain { get; set; } + } + +} diff --git a/v2rayN/v2rayN/Mode/V2rayConfig.cs b/v2rayN/v2rayN/Mode/V2rayConfig.cs index 9ec65af0..94a33f8c 100644 --- a/v2rayN/v2rayN/Mode/V2rayConfig.cs +++ b/v2rayN/v2rayN/Mode/V2rayConfig.cs @@ -323,34 +323,6 @@ namespace v2rayN.Mode public List servers { get; set; } } - public class RulesItem - { - /// - /// - /// - public string type { get; set; } - /// - /// - /// - public string port { get; set; } - - public List inboundTag { get; set; } - /// - /// - /// - public string outboundTag { get; set; } - - /// - /// - /// - public List ip { get; set; } - - /// - /// - /// - public List domain { get; set; } - } - public class Routing { /// diff --git a/v2rayN/v2rayN/Properties/AssemblyInfo.cs b/v2rayN/v2rayN/Properties/AssemblyInfo.cs index 794c9c1a..82cf7900 100644 --- a/v2rayN/v2rayN/Properties/AssemblyInfo.cs +++ b/v2rayN/v2rayN/Properties/AssemblyInfo.cs @@ -32,4 +32,4 @@ using System.Runtime.InteropServices; // 方法是按如下所示使用“*”: //[assembly: AssemblyVersion("1.0.*")] //[assembly: AssemblyVersion("1.0.0")] -[assembly: AssemblyFileVersion("4.1")] +[assembly: AssemblyFileVersion("4.2")] diff --git a/v2rayN/v2rayN/Properties/Resources.Designer.cs b/v2rayN/v2rayN/Properties/Resources.Designer.cs index 2088590e..672c250f 100644 --- a/v2rayN/v2rayN/Properties/Resources.Designer.cs +++ b/v2rayN/v2rayN/Properties/Resources.Designer.cs @@ -120,23 +120,6 @@ namespace v2rayN.Properties { } } - /// - /// 查找类似 listen-address __PRIVOXY_BIND_IP__:__PRIVOXY_BIND_PORT__ - ///toggle 0 - ///logfile v2ray_privoxy.log - ///show-on-task-bar 0 - ///activity-animation 0 - ///forward-socks5 / 127.0.0.1:__SOCKS_PORT__ . - ///max-client-connections 2048 - ///hide-console - /// 的本地化字符串。 - /// - internal static string privoxy_conf { - get { - return ResourceManager.GetString("privoxy_conf", resourceCulture); - } - } - /// /// 查找 System.Byte[] 类型的本地化资源。 /// diff --git a/v2rayN/v2rayN/Properties/Resources.resx b/v2rayN/v2rayN/Properties/Resources.resx index 2aa66967..2ffcd3a9 100644 --- a/v2rayN/v2rayN/Properties/Resources.resx +++ b/v2rayN/v2rayN/Properties/Resources.resx @@ -151,9 +151,6 @@ ..\resources\sysproxy64.exe.gz;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - ..\resources\privoxy_conf.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;gb2312 - ..\Resources\minimize.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a diff --git a/v2rayN/v2rayN/Resources/pac.txt b/v2rayN/v2rayN/Resources/pac.txt deleted file mode 100644 index 6695b760..00000000 --- a/v2rayN/v2rayN/Resources/pac.txt +++ /dev/null @@ -1,7614 +0,0 @@ -// Generated by gfwlist2pac in precise mode -// https://github.com/clowwindy/gfwlist2pac - -var proxy = "__PROXY__"; - -var rules = [ - "|http://85.17.73.31/", - "||agnesb.fr", - "||akiba-web.com", - "||altrec.com", - "||angela-merkel.de", - "||angola.org", - "||apartmentratings.com", - "||apartments.com", - "||arena.taipei", - "||asianspiss.com", - "||assimp.org", - "||athenaeizou.com", - "||azubu.tv", - "||bankmobilevibe.com", - "||banorte.com", - "||bash-hackers.org", - "||beeg.com", - "||global.bing.com", - "||bloombergview.com", - "||booktopia.com.au", - "||boysmaster.com", - "||bynet.co.il", - "||carfax.com", - ".casinobellini.com", - "||casinobellini.com", - "||centauro.com.br", - "||chobit.cc", - "||clearsurance.com", - "||images.comico.tw", - "||static.comico.tw", - "||counter.social", - "||costco.com", - "||crossfire.co.kr", - "||d2pass.com", - "||darpa.mil", - "||dawangidc.com", - "||deezer.com", - "||desipro.de", - "||dingchin.com.tw", - "||discordapp.com", - "||discordapp.net", - "||dish.com", - "|http://img.dlsite.jp/", - "||dm530.net", - "share.dmhy.org", - "||dmhy.org", - "||dmm.co.jp", - "|http://www.dmm.com/netgame", - "||dnvod.tv", - "||dvdpac.com", - "||eesti.ee", - "||esurance.com", - ".expekt.com", - "||expekt.com", - ".extmatrix.com", - "||extmatrix.com", - "||fakku.net", - "||fastpic.ru", - "||filesor.com", - "||financetwitter.com", - "||flipboard.com", - "||flitto.com", - "||fnac.be", - "||fnac.com", - "||funkyimg.com", - "||fxnetworks.com", - "||g-area.org", - "||gettyimages.com", - "||getuploader.com", - "|https://raw.githubusercontent.com/programthink/zhao", - "||glass8.eu", - "||glype.com", - "||go141.com", - "||guo.media", - "||hautelook.com", - "||hautelookcdn.com", - "||wego.here.com", - "||gamer-cds.cdn.hinet.net", - "||gamer2-cds.cdn.hinet.net", - "||hmvdigital.ca", - "||hmvdigital.com", - "||homedepot.com", - "||hoovers.com", - "||hulu.com", - "||huluim.com", - "|http://secure.hustler.com", - "|http://hustlercash.com", - "|http://www.hustlercash.com", - "||hybrid-analysis.com", - "||cdn*.i-scmp.com", - "||ilovelongtoes.com", - "|http://imgmega.com/*.gif.html", - "|http://imgmega.com/*.jpg.html", - "|http://imgmega.com/*.jpeg.html", - "|http://imgmega.com/*.png.html", - "||imlive.com", - "||tw.iqiyi.com", - "||javhub.net", - "||javhuge.com", - ".javlibrary.com", - "||javlibrary.com", - "||jcpenney.com", - "||jims.net", - "||jukujo-club.com", - "||juliepost.com", - "||kawaiikawaii.jp", - "||kendatire.com", - "||khatrimaza.org", - "||kkbox.com", - "||leisurepro.com", - "||lifemiles.com", - "||longtoes.com", - "||lovetvshow.com", - "|http://www.m-sport.co.uk", - "||macgamestore.com", - "||madonna-av.com", - "||mangafox.com", - "||mangafox.me", - "||manta.com", - "||matome-plus.com", - "||matome-plus.net", - "||mattwilcox.net", - "||metarthunter.com", - "||mfxmedia.com", - "||mojim.com", - "||kb.monitorware.com", - "||monster.com", - "||moodyz.com", - "||moonbingo.com", - "||mos.ru", - "||msha.gov", - "||muzu.tv", - "||mvg.jp", - ".mybet.com", - "||mybet.com", - "||nationwide.com", - "|http://www.nbc.com/live", - "||neo-miracle.com", - "||netflix.com", - "||nflximg.com", - "||nflximg.net", - "||nflxext.com", - "||nflxso.net", - "||nflxvideo.net", - "||nic.gov", - "|http://mo.nightlife141.com", - "||nordstrom.com", - "||nordstromimage.com", - "||nordstromrack.com", - "||nottinghampost.com", - "||npsboost.com", - "||ntdtv.cz", - "||s1.nudezz.com", - "||nusatrip.com", - "||nuuvem.com", - "||omni7.jp", - "||onapp.com", - "||ontrac.com", - "@@|http://blog.ontrac.com", - "||pandora.com", - ".pandora.tv", - "||parkansky.com", - "||phmsociety.org", - "|http://*.pimg.tw/", - "||pure18.com", - "||pytorch.org", - "||qq.co.za", - "||r18.com", - "|http://radiko.jp", - "||ramcity.com.au", - "||rd.com", - "||rdio.com", - "|https://riseup.net", - "||sadistic-v.com", - "||isc.sans.edu", - "|http://cdn*.search.xxx/", - "||shiksha.com", - "||slacker.com", - "||sm-miracle.com", - "||soylentnews.org", - "||spotify.com", - "||spreadshirt.es", - "||springboardplatform.com", - "||sprite.org", - "@@|http://store.sprite.org", - "||superokayama.com", - "||superpages.com", - "||swagbucks.com", - "||switch1.jp", - "||tapanwap.com", - "||gsp.target.com", - "||login.target.com", - "||rcam.target.com", - "||thinkgeek.com", - "||thebodyshop-usa.com", - "||tma.co.jp", - "||tracfone.com", - "||tryheart.jp", - "||turntable.fm", - "||twerkingbutt.com", - "||ulop.net", - "||uukanshu.com", - "||vegasred.com", - "||vevo.com", - "||vip-enterprise.com", - "|http://viu.tv/ch/", - "|http://viu.tv/encore/", - "||vmpsoft.com", - "|http://ecsm.vs.com/", - "||wanz-factory.com", - "||ssl.webpack.de", - "||wheretowatch.com", - "||wingamestore.com", - "||wizcrafts.net", - "||vod.wwe.com", - "||xfinity.com", - "||youwin.com", - "||ytn.co.kr", - "||zattoo.com", - "||zim.vn", - "||zozotown.com", - "14.102.250.18", - "14.102.250.19", - "50.7.31.230:8898", - "174.142.105.153", - "69.65.19.160", - "||xn--4gq171p.com", - "||xn--czq75pvv1aj5c.org", - "||xn--i2ru8q2qg.com", - "||xn--oiq.cc", - "||xn--p8j9a0d9c9a.xn--q9jyb4c", - "||abebooks.com", - "|https://*.s3.amazonaws.com", - "||s3-ap-southeast-2.amazonaws.com", - "||43110.cf", - "||9gag.com", - "||agro.hk", - "||share.america.gov", - "||apkmirror.com", - "||arte.tv", - "||artstation.com", - "||bangdream.space", - "||behance.net", - "||bird.so", - "||zh.bitterwinter.org", - "||bnn.co", - "||businessinsider.com", - "||boomssr.com", - "||bwgyhw.com", - "||castbox.fm", - "||chinatimes.com", - "||clyp.it", - "||cmcn.org", - "||cmx.im", - "||dailyview.tw", - "||daum.net", - "||depositphotos.com", - "||disconnect.me", - "||documentingreality.com", - "||doubibackup.com", - "||doubmirror.cf", - "||encyclopedia.com", - "||fangeqiang.com", - "||fanqiangdang.com", - "||cloud.feedly.com", - "||feedx.net", - "||flyzy2005.com", - "||foreignpolicy.com", - "||free-ss.site", - "||freehongkong.org", - "||blog.fuckgfw233.org", - "||g0v.social", - "||globalvoices.org", - "||glorystar.me", - "||goregrish.com", - "||guangnianvpn.com", - "||hanime.tv", - "||hbo.com", - "||spaces.hightail.com", - "||hkgalden.com", - "||hkgolden.com", - "||hudson.org", - "||ipfs.io", - "||japantimes.co.jp", - "||jiji.com", - "||jintian.net", - "||jinx.com", - "||joinmastodon.org", - "||liangzhichuanmei.com", - "||lighti.me", - "||lightyearvpn.com", - "||lihkg.com", - "||line-scdn.net", - "||i.lithium.com", - "||cloud.mail.ru", - "||cdn-images.mailchimp.com", - "||mastodon.cloud", - "||mastodon.host", - "||mastodon.social", - "||matters.news", - "||me.me", - "||metart.com", - "||mohu.club", - "||mohu.ml", - "||motiyun.com", - "||msa-it.org", - "||dictionary.goo.ne.jp", - "||go.nesnode.com", - "||international-news.newsmagazine.asia", - "||nikkei.com", - "||niu.moe", - "||nofile.io", - "||now.com", - "||sukebei.nyaa.si", - "||openvpn.org", - "||onejav.com", - "||paste.ee", - "||my.pcloud.com", - "||picacomic.com", - "||pincong.rocks", - "||pixiv.net", - "||potato.im", - "||premproxy.com", - "||prism-break.org", - "||protonvpn.com", - "||api.pureapk.com", - "||quora.com", - "||quoracdn.net", - "||qz.com", - "||cdn.seatguru.com", - "||secure.raxcdn.com", - "||redd.it", - "||reddit.com", - ".redditlist.com", - "|http://redditlist.com", - "||redditmedia.com", - "||redditstatic.com", - "||rixcloud.com", - "||rixcloud.us", - "||rsdlmonitor.com", - "||shadowsocks.be", - "||shadowsocks9.com", - "||tn1.shemalez.com", - "||tn2.shemalez.com", - "||tn3.shemalez.com", - "||static.shemalez.com", - "||six-degrees.io", - "||softfamous.com", - "||softsmirror.cf", - "||sosreader.com", - "||sspanel.net", - "||sulian.me", - "||supchina.com", - "||teddysun.com", - "||textnow.me", - "||tineye.com", - "||top10vpn.com", - "||tubepornclassic.com", - "||uku.im", - "||unseen.is", - "||cn.uptodown.com", - "||uraban.me", - "||vrsmash.com", - "||vultryhw.com", - "||scache.vzw.com", - "||scache1.vzw.com", - "||scache2.vzw.com", - "||ss7.vzw.com", - "||ssr.tools", - "||steemit.com", - "||taiwanjustice.net", - "||tinc-vpn.org", - "||u15.info", - "||washingtonpost.com", - "||wenzhao.ca", - "||whatsonweibo.com", - "||wire.com", - "||blog.workflow.is", - "||xm.com", - "||xuehua.us", - "||yes-news.com", - "||yigeni.com", - "||you-get.org", - "||zzcloud.me", - "||aex.com", - "||allcoin.com", - "||adcex.com", - "||bcex.ca", - "||bibox.com", - "||big.one", - "||binance.com", - "||bit-z.com", - "||bitcoinworld.com", - "||bitfinex.com", - "||bithumb.com", - "||bitinka.com.ar", - "||bitmex.com", - "||btc98.com", - "||btcbank.bank", - "||btctrade.im", - "||c2cx.com", - "||chaoex.com", - "||cobinhood.com", - "||coin2co.in", - "||coinbene.com", - ".coinegg.com", - "||coinegg.com", - "||coinex.com", - "||coingi.com", - "||coinrail.co.kr", - "||cointiger.com", - "||cointobe.com", - "||coinut.com", - "||discoins.com", - "||dragonex.io", - "||ebtcbank.com", - "||etherdelta.com", - "||exmo.com", - "||exrates.me", - "||exx.com", - "||fatbtc.com", - "||gate.io", - "||gatecoin.com", - "||hbg.com", - "||hitbtc.com", - "||huobi.com", - "||huobi.pro", - "||huobipro.com", - "||bx.in.th", - "||jex.com", - "||kex.com", - "||kspcoin.com", - "||kucoin.com", - "||lbank.info", - "||livecoin.net", - "||localbitcoins.com", - "||mercatox.com", - "||oex.com", - "||okex.com", - "||otcbtc.com", - "||rightbtc.com", - "||topbtc.com", - "||xbtce.com", - "||yobit.net", - "||zb.com", - "||read01.com", - "||kknews.cc", - "china-mmm.jp.net", - ".lsxszzg.com", - ".china-mmm.net", - "||china-mmm.net", - "china-mmm.sa.com", - ".allowed.org", - ".now.im", - "||amazon.co.jp", - ".amazon.com/Dalai-Lama", - "amazon.com/Prisoner-State-Secret-Journal-Premier", - "s3-ap-northeast-1.amazonaws.com", - "||aolchannels.aol.com", - "video.aol.ca/video-detail", - "video.aol.co.uk/video-detail", - "video.aol.com", - "||video.aol.com", - "||search.aol.com", - "www.aolnews.com", - ".avmo.pw", - ".avmoo.com", - "|http://avmoo.com", - ".avmoo.net", - "|http://avmoo.net", - "||avmoo.pw", - ".javmoo.xyz", - "|http://javmoo.xyz", - ".javtag.com", - "|http://javtag.com", - ".javzoo.com", - "|http://javzoo.com", - ".tellme.pw", - ".bbc.com", - "||bbc.com", - ".bbc.co.uk", - "||bbc.co.uk", - "||bbci.co.uk", - ".bbcchinese.com", - "||bbcchinese.com", - "|http://bbc.in", - ".1dumb.com", - ".25u.com", - ".2waky.com", - ".3-a.net", - ".4dq.com", - ".4mydomain.com", - ".4pu.com", - ".acmetoy.com", - ".almostmy.com", - ".americanunfinished.com", - ".authorizeddns.net", - ".authorizeddns.org", - ".authorizeddns.us", - ".bigmoney.biz", - ".changeip.name", - ".changeip.net", - ".changeip.org", - ".cleansite.biz", - ".cleansite.info", - ".cleansite.us", - ".compress.to", - ".ddns.info", - ".ddns.me.uk", - ".ddns.mobi", - ".ddns.ms", - ".ddns.name", - ".ddns.us", - ".dhcp.biz", - ".dns-dns.com", - ".dns-stuff.com", - ".dns04.com", - ".dns05.com", - ".dns1.us", - ".dns2.us", - ".dnset.com", - ".dnsrd.com", - ".dsmtp.com", - ".dumb1.com", - ".dynamic-dns.net", - ".dynamicdns.biz", - ".dynamicdns.co.uk", - ".dynamicdns.me.uk", - ".dynamicdns.org.uk", - ".dyndns.pro", - ".dynssl.com", - ".edns.biz", - ".epac.to", - ".esmtp.biz", - ".ezua.com", - ".faqserv.com", - ".fartit.com", - ".freeddns.com", - ".freetcp.com", - ".freewww.biz", - ".freewww.info", - ".ftp1.biz", - ".ftpserver.biz", - ".gettrials.com", - ".got-game.org", - ".gr8domain.biz", - ".gr8name.biz", - ".https443.net", - ".https443.org", - ".ikwb.com", - ".instanthq.com", - ".iownyour.biz", - ".iownyour.org", - ".isasecret.com", - ".itemdb.com", - ".itsaol.com", - ".jetos.com", - ".jkub.com", - ".jungleheart.com", - ".justdied.com", - ".lflink.com", - ".lflinkup.com", - ".lflinkup.net", - ".lflinkup.org", - ".longmusic.com", - ".mefound.com", - ".moneyhome.biz", - ".mrbasic.com", - ".mrbonus.com", - ".mrface.com", - ".mrslove.com", - ".my03.com", - ".mydad.info", - ".myddns.com", - ".myftp.info", - ".myftp.name", - ".mylftv.com", - ".mymom.info", - ".mynetav.net", - ".mynetav.org", - ".mynumber.org", - ".mypicture.info", - ".mypop3.net", - ".mypop3.org", - ".mysecondarydns.com", - ".mywww.biz", - ".myz.info", - ".ninth.biz", - ".ns01.biz", - ".ns01.info", - ".ns01.us", - ".ns02.biz", - ".ns02.info", - ".ns02.us", - ".ns1.name", - ".ns2.name", - ".ns3.name", - ".ocry.com", - ".onedumb.com", - ".onmypc.biz", - ".onmypc.info", - ".onmypc.net", - ".onmypc.org", - ".onmypc.us", - ".organiccrap.com", - ".otzo.com", - ".ourhobby.com", - ".pcanywhere.net", - ".port25.biz", - ".proxydns.com", - ".qhigh.com", - ".qpoe.com", - ".rebatesrule.net", - ".sellclassics.com", - ".sendsmtp.com", - ".serveuser.com", - ".serveusers.com", - ".sexidude.com", - ".sexxxy.biz", - ".sixth.biz", - ".squirly.info", - ".ssl443.org", - ".toh.info", - ".toythieves.com", - ".trickip.net", - ".trickip.org", - ".vizvaz.com", - ".wha.la", - ".wikaba.com", - ".www1.biz", - ".wwwhost.biz", - "@@|http://xx.wwwhost.biz", - ".x24hr.com", - ".xxuz.com", - ".xxxy.biz", - ".xxxy.info", - ".ygto.com", - ".youdontcare.com", - ".yourtrap.com", - ".zyns.com", - ".zzux.com", - "d1b183sg0nvnuh.cloudfront.net", - "|https://d1b183sg0nvnuh.cloudfront.net", - "d1c37gjwa26taa.cloudfront.net", - "|https://d1c37gjwa26taa.cloudfront.net", - "d3c33hcgiwev3.cloudfront.net", - "|https://d3c33hcgiwev3.cloudfront.net", - "||d3rhr7kgmtrq1v.cloudfront.net", - ".3d-game.com", - ".4irc.com", - ".b0ne.com", - ".chatnook.com", - ".darktech.org", - ".deaftone.com", - ".dtdns.net", - ".effers.com", - ".etowns.net", - ".etowns.org", - ".flnet.org", - ".gotgeeks.com", - ".scieron.com", - ".slyip.com", - ".slyip.net", - ".suroot.com", - ".blogdns.org", - ".dyndns.org", - ".dyndns-ip.com", - ".dyndns-pics.com", - ".from-sd.com", - ".from-pr.com", - ".is-a-hunter.com", - ".dynu.com", - ".dynu.net", - ".freeddns.org", - "cdninstagram.com", - "||cdninstagram.com", - "||facebook.br", - ".facebook.com", - "||facebook.com", - "@@||v6.facebook.com", - "||facebook.design", - "||connect.facebook.net", - "||facebook.hu", - "||facebook.in", - "||facebook.nl", - "||facebook.se", - "||facebookmail.com", - "||fb.com", - "||fb.me", - "||fbcdn.net", - "||fbsbx.com", - "||fbaddins.com", - "||fbworkmail.com", - ".instagram.com", - "||instagram.com", - "||m.me", - "||messenger.com", - "||oculus.com", - "||oculuscdn.com", - "||rocksdb.org", - "@@||ip6.static.sl-reverse.com", - "||thefacebook.com", - "||whatsapp.com", - "||whatsapp.net", - ".ftchinese.com", - "||ftchinese.com", - "||1e100.net", - "||466453.com", - "||abc.xyz", - "||about.google", - "||admob.com", - "||adsense.com", - "||agoogleaday.com", - "||ai.google", - "||ampproject.org", - "@@|https://www.ampproject.org", - "@@|https://cdn.ampproject.org", - "||android.com", - "||androidify.com", - "||androidtv.com", - "||api.ai", - ".appspot.com", - "||appspot.com", - "||autodraw.com", - "||blog.google", - "||blogblog.com", - "blogspot.com", - "/^https?:\\/\\/[^\\/]+blogspot\\.(.*)/", - ".blogspot.hk", - ".blogspot.jp", - ".blogspot.tw", - "||certificate-transparency.org", - "||chrome.com", - "||chromecast.com", - "||chromeexperiments.com", - "||chromercise.com", - "||chromestatus.com", - "||chromium.org", - "||com.google", - "||crbug.com", - "||creativelab5.com", - "||crisisresponse.google", - "||crrev.com", - "||data-vocabulary.org", - "||debug.com", - "||deepmind.com", - "||deja.com", - "||design.google", - "||digisfera.com", - "||dns.google", - "||domains.google", - "||duck.com", - "||environment.google", - "||feedburner.com", - "||firebaseio.com", - "||g.co", - "||gcr.io", - "||get.app", - "||get.dev", - "||get.how", - "||get.page", - "||getmdl.io", - "||getoutline.org", - "||ggpht.com", - "||gmail.com", - "||gmodules.com", - "||godoc.org", - "||golang.org", - "||goo.gl", - ".google.ae", - ".google.as", - ".google.am", - ".google.at", - ".google.az", - ".google.ba", - ".google.be", - ".google.bg", - ".google.ca", - ".google.cd", - ".google.ci", - ".google.co.id", - ".google.co.jp", - ".google.co.kr", - ".google.co.ma", - ".google.co.uk", - ".google.com", - ".google.de", - "||google.dev", - ".google.dj", - ".google.dk", - ".google.es", - ".google.fi", - ".google.fm", - ".google.fr", - ".google.gg", - ".google.gl", - ".google.gr", - ".google.ie", - ".google.is", - ".google.it", - ".google.jo", - ".google.kz", - ".google.lv", - ".google.mn", - ".google.ms", - ".google.nl", - ".google.nu", - ".google.no", - ".google.ro", - ".google.ru", - ".google.rw", - ".google.sc", - ".google.sh", - ".google.sk", - ".google.sm", - ".google.sn", - ".google.tk", - ".google.tm", - ".google.to", - ".google.tt", - ".google.vu", - ".google.ws", - "/^https?:\\/\\/([^\\/]+\\.)*google\\.(ac|ad|ae|af|al|am|as|at|az|ba|be|bf|bg|bi|bj|bs|bt|by|ca|cat|cd|cf|cg|ch|ci|cl|cm|co.ao|co.bw|co.ck|co.cr|co.id|co.il|co.in|co.jp|co.ke|co.kr|co.ls|co.ma|com|com.af|com.ag|com.ai|com.ar|com.au|com.bd|com.bh|com.bn|com.bo|com.br|com.bz|com.co|com.cu|com.cy|com.do|com.ec|com.eg|com.et|com.fj|com.gh|com.gi|com.gt|com.hk|com.jm|com.kh|com.kw|com.lb|com.ly|com.mm|com.mt|com.mx|com.my|com.na|com.nf|com.ng|com.ni|com.np|com.om|com.pa|com.pe|com.pg|com.ph|com.pk|com.pr|com.py|com.qa|com.sa|com.sb|com.sg|com.sl|com.sv|com.tj|com.tr|com.tw|com.ua|com.uy|com.vc|com.vn|co.mz|co.nz|co.th|co.tz|co.ug|co.uk|co.uz|co.ve|co.vi|co.za|co.zm|co.zw|cv|cz|de|dj|dk|dm|dz|ee|es|eu|fi|fm|fr|ga|ge|gg|gl|gm|gp|gr|gy|hk|hn|hr|ht|hu|ie|im|iq|is|it|it.ao|je|jo|kg|ki|kz|la|li|lk|lt|lu|lv|md|me|mg|mk|ml|mn|ms|mu|mv|mw|mx|ne|nl|no|nr|nu|org|pl|pn|ps|pt|ro|rs|ru|rw|sc|se|sh|si|sk|sm|sn|so|sr|st|td|tg|tk|tl|tm|tn|to|tt|us|vg|vn|vu|ws)\\/.*/", - "||googleapis.cn", - "||googleapis.com", - "||googleapps.com", - "||googleartproject.com", - "||googleblog.com", - "||googlebot.com", - "||googlechinawebmaster.com", - "||googlecode.com", - "||googlecommerce.com", - "||googledomains.com", - "||googlearth.com", - "||googleearth.com", - "||googledrive.com", - "||googlegroups.com", - "||googlehosted.com", - "||googleideas.com", - "||googleinsidesearch.com", - "||googlelabs.com", - "||googlemail.com", - "||googlemashups.com", - "||googlepagecreator.com", - "||googleplay.com", - "||googleplus.com", - "||googlescholar.com", - "||googlesource.com", - "||googleusercontent.com", - ".googlevideo.com", - "||googlevideo.com", - "||googleweblight.com", - "||googlezip.net", - "||groups.google.cn", - "||grow.google", - "||gstatic.com", - "||gvt0.com", - "||gvt1.com", - "@@||redirector.gvt1.com", - "||gvt3.com", - "||gwtproject.org", - "||html5rocks.com", - "||iam.soy", - "||igoogle.com", - "||itasoftware.com", - "||lers.google", - "||like.com", - "||madewithcode.com", - "||material.io", - "||nic.google", - "||on2.com", - "||panoramio.com", - "||picasaweb.com", - "||pki.goog", - "||plus.codes", - "||polymer-project.org", - "||pride.google", - "||questvisual.com", - "||admin.recaptcha.net", - "||api.recaptcha.net", - "||api-secure.recaptcha.net", - "||api-verify.recaptcha.net", - "||redhotlabs.com", - "||registry.google", - "||safety.google", - "||savethedate.foo", - "||schema.org", - "||shattered.io", - "|http://sipml5.org/", - "||stories.google", - "||sustainability.google", - "||synergyse.com", - "||teachparentstech.org", - "||tensorflow.org", - "||tfhub.dev", - "||thinkwithgoogle.com", - "||tiltbrush.com", - "||urchin.com", - "||waveprotocol.org", - "||waymo.com", - "||web.dev", - "||webmproject.org", - "||webrtc.org", - "||whatbrowser.org", - "||widevine.com", - "||withgoogle.com", - "||withyoutube.com", - "||x.company", - "||xn--ngstr-lra8j.com", - "||youtu.be", - ".youtube.com", - "||youtube.com", - "||youtube-nocookie.com", - "||youtubeeducation.com", - "||youtubegaming.com", - "||yt.be", - "||ytimg.com", - "||zynamics.com", - "||naughtyamerica.com", - "static01.nyt.com", - "||nyt.com", - "nytchina.com", - "nytcn.me", - "||nytcn.me", - "||nytco.com", - "|http://nyti.ms/", - ".nytimes.com", - "||nytimes.com", - "||nytimg.com", - "userapi.nytlog.com", - "cn.nytstyle.com", - "||nytstyle.com", - ".steamcommunity.com", - "||steamcommunity.com", - "|http://store.steampowered.com/app/333600", - "||t.me", - "||updates.tdesktop.com", - "||telegram.dog", - "||telegram.me", - "||telegram.org", - ".telegramdownload.com", - "||telesco.pe", - "||jtvnw.net", - "||ttvnw.net", - "||twitch.tv", - "||twitchcdn.net", - "||periscope.tv", - ".pscp.tv", - "||pscp.tv", - ".t.co", - "||t.co", - ".tweetdeck.com", - "||tweetdeck.com", - "||twimg.com", - ".twitpic.com", - "||twitpic.com", - ".twitter.com", - "||twitter.com", - "||twitter.jp", - "||vine.co", - "||gov.taipei", - ".gov.tw", - "|https://aiss.anws.gov.tw", - "||archives.gov.tw", - "||tacc.cwb.gov.tw", - "||data.gov.tw", - "||epa.gov.tw", - "||fa.gov.tw", - "||fda.gov.tw", - "||hpa.gov.tw", - "||immigration.gov.tw", - "||itaiwan.gov.tw", - "||mjib.gov.tw", - "||moeaic.gov.tw", - "||mofa.gov.tw", - "||mol.gov.tw", - "||mvdis.gov.tw", - "||nat.gov.tw", - "||nhi.gov.tw", - "||npa.gov.tw", - "||nsc.gov.tw", - "||ntbk.gov.tw", - "||ntbna.gov.tw", - "||ntbt.gov.tw", - "||ntsna.gov.tw", - "||pcc.gov.tw", - "||stat.gov.tw", - "||taipei.gov.tw", - "||taiwanjobs.gov.tw", - "||thb.gov.tw", - "||tipo.gov.tw", - "||wda.gov.tw", - "||teco-hk.org", - "||teco-mo.org", - "@@||aftygh.gov.tw", - "@@||aide.gov.tw", - "@@||tpde.aide.gov.tw", - "@@||arte.gov.tw", - "@@||chukuang.gov.tw", - "@@||cwb.gov.tw", - "@@||cycab.gov.tw", - "@@||dbnsa.gov.tw", - "@@||df.gov.tw", - "@@||eastcoast-nsa.gov.tw", - "@@||erv-nsa.gov.tw", - "@@||grb.gov.tw", - "@@||gysd.nyc.gov.tw", - "@@||hchcc.gov.tw", - "@@||hsinchu-cc.gov.tw", - "@@||iner.gov.tw", - "@@||klsio.gov.tw", - "@@||kmseh.gov.tw", - "@@||lungtanhr.gov.tw", - "@@||maolin-nsa.gov.tw", - "@@||matsu-news.gov.tw", - "@@||matsu-nsa.gov.tw", - "@@||matsucc.gov.tw", - "@@||moe.gov.tw", - "@@||mvdis.gov.tw", - "@@||nankan.gov.tw", - "@@||ncree.gov.tw", - "@@||necoast-nsa.gov.tw", - "@@||siraya-nsa.gov.tw", - "@@||cromotc.nat.gov.tw", - "@@||tax.nat.gov.tw", - "@@||necoast-nsa.gov.tw", - "@@||ner.gov.tw", - "@@||nmmba.gov.tw", - "@@||nmp.gov.tw", - "@@||nmvttc.gov.tw", - "@@||northguan-nsa.gov.tw", - "@@||npm.gov.tw", - "@@||nstm.gov.tw", - "@@||ntdmh.gov.tw", - "@@||ntl.gov.tw", - "@@||ntsec.gov.tw", - "@@||ntuh.gov.tw", - "@@||nvri.gov.tw", - "@@||penghu-nsa.gov.tw", - "@@||post.gov.tw", - "@@||siraya-nsa.gov.tw", - "@@||stdtime.gov.tw", - "@@||sunmoonlake.gov.tw", - "@@||taitung-house.gov.tw", - "@@||taoyuan.gov.tw", - "@@||tphcc.gov.tw", - "@@||trimt-nsa.gov.tw", - "@@||vghtpe.gov.tw", - "@@||vghks.gov.tw", - "@@||vghtc.gov.tw", - "@@||wanfang.gov.tw", - "@@||yatsen.gov.tw", - "@@||yda.gov.tw", - "||kinmen.org.tw", - ".v2ex.com", - "@@|http://v2ex.com", - "@@|http://cdn.v2ex.com", - "@@|http://cn.v2ex.com", - "@@|http://hk.v2ex.com", - "@@|http://i.v2ex.com", - "@@|http://lax.v2ex.com", - "@@|http://neue.v2ex.com", - "@@|http://pagespeed.v2ex.com", - "@@|http://static.v2ex.com", - "@@|http://workspace.v2ex.com", - "@@|http://www.v2ex.com", - "||data.flurry.com", - "page.bid.yahoo.com", - "tw.bid.yahoo.com", - "|https://tw.bid.yahoo.com", - "blogs.yahoo.co.jp", - "||search.yahoo.co.jp", - "buy.yahoo.com.tw/gdsale", - "hk.yahoo.com", - "hk.knowledge.yahoo.com", - "tw.money.yahoo.com", - "hk.myblog.yahoo.com", - "news.yahoo.com/china-blocks-bbc", - "||hk.news.yahoo.com", - "hk.rd.yahoo.com", - "hk.search.yahoo.com/search", - "hk.video.news.yahoo.com/video", - "meme.yahoo.com", - "tw.answers.yahoo.com", - "|https://tw.answers.yahoo.com", - "||tw.knowledge.yahoo.com", - "||tw.mall.yahoo.com", - "tw.yahoo.com", - "||tw.mobi.yahoo.com", - "tw.myblog.yahoo.com", - "||tw.news.yahoo.com", - "pulse.yahoo.com", - "||search.yahoo.com", - "upcoming.yahoo.com", - "video.yahoo.com", - "||yahoo.com.hk", - "||duckduckgo-owned-server.yahoo.net", - ".030buy.com", - ".0rz.tw", - "|http://0rz.tw", - "1-apple.com.tw", - "||1-apple.com.tw", - ".10.tt", - ".100ke.org", - ".1000giri.net", - "||1000giri.net", - ".10conditionsoflove.com", - "||10musume.com", - "123rf.com", - ".12bet.com", - "||12bet.com", - ".12vpn.com", - ".12vpn.net", - "||12vpn.com", - "||12vpn.net", - ".138.com", - "141hongkong.com/forum", - "||141jj.com", - ".141tube.com", - ".1688.com.au", - ".173ng.com", - "||173ng.com", - ".177pic.info", - ".17t17p.com", - "||18board.com", - "||18board.info", - "18onlygirls.com", - ".18p2p.com", - ".18virginsex.com", - ".1949er.org", - "zhao.1984.city", - "||zhao.1984.city", - "1984bbs.com", - "||1984bbs.com", - ".1984bbs.org", - "||1984bbs.org", - ".1991way.com", - "||1991way.com", - ".1998cdp.org", - ".1bao.org", - "|http://1bao.org", - ".1eew.com", - ".1mobile.com", - "|http://*.1mobile.tw", - "||1pondo.tv", - ".2-hand.info", - ".2000fun.com/bbs", - ".2008xianzhang.info", - "||2008xianzhang.info", - "||2017.hk", - "21andy.com/blog", - ".21join.com", - ".21pron.com", - "21sextury.com", - ".228.net.tw", - "||233abc.com", - "||24hrs.ca", - "24smile.org", - "2lipstube.com", - ".2shared.com", - "30boxes.com", - ".315lz.com", - "||32red.com", - "||36rain.com", - ".3a5a.com", - "3arabtv.com", - ".3boys2girls.com", - ".3proxy.ru", - ".3ren.ca", - ".3tui.net", - "||4bluestones.biz", - ".4chan.com", - ".4everproxy.com", - "||4everproxy.com", - "||4rbtv.com", - "||4shared.com", - "taiwannation.50webs.com", - "||51.ca", - "||51jav.org", - ".51luoben.com", - "||51luoben.com", - ".5278.cc", - ".5299.tv", - "5aimiku.com", - "5i01.com", - ".5isotoi5.org", - ".5maodang.com", - "||63i.com", - ".64museum.org", - "64tianwang.com", - "64wiki.com", - ".66.ca", - "666kb.com", - ".6park.com", - "||6park.com", - "||6parker.com", - "||6parknews.com", - "||7capture.com", - ".7cow.com", - ".8-d.com", - "|http://8-d.com", - "85cc.net", - ".85cc.us", - "|http://85cc.us", - "|http://85st.com", - ".881903.com/page/zh-tw/", - "||881903.com", - ".888.com", - ".888poker.com", - "89.64.charter.constitutionalism.solutions", - "89-64.org", - "||89-64.org", - ".8news.com.tw", - ".8z1.net", - "||8z1.net", - ".9001700.com", - "|http://908taiwan.org/", - "||91porn.com", - "||91vps.club", - ".92ccav.com", - ".991.com", - "|http://991.com", - ".99btgc01.com", - "||99btgc01.com", - ".99cn.info", - "|http://99cn.info", - "||9bis.com", - "||9bis.net", - ".tibet.a.se", - "|http://tibet.a.se", - "||a-normal-day.com", - "a5.com.ru", - "|http://aamacau.com", - ".abc.com", - ".abc.net.au", - "||abc.net.au", - ".abchinese.com", - "abclite.net", - "|https://www.abclite.net", - ".ablwang.com", - ".aboluowang.com", - "||aboluowang.com", - ".aboutgfw.com", - ".abs.edu", - ".accim.org", - ".aceros-de-hispania.com", - ".acevpn.com", - "||acevpn.com", - ".acg18.me", - "|http://acg18.me", - "||acgkj.com", - ".acmedia365.com", - ".acnw.com.au", - "actfortibet.org", - "actimes.com.au", - "activpn.com", - "||activpn.com", - "||aculo.us", - "||addictedtocoffee.de", - ".adelaidebbs.com/bbs", - ".adpl.org.hk", - "|http://adpl.org.hk", - ".adult-sex-games.com", - "||adult-sex-games.com", - "adultfriendfinder.com", - "adultkeep.net/peepshow/members/main.htm", - "||advanscene.com", - "||advertfan.com", - ".ae.org", - "||aenhancers.com", - "||af.mil", - ".afantibbs.com", - "|http://afantibbs.com", - ".ai-kan.net", - "||ai-kan.net", - "ai-wen.net", - ".aiph.net", - "||aiph.net", - ".airasia.com", - "||airconsole.com", - "|http://download.aircrack-ng.org", - ".airvpn.org", - "||airvpn.org", - ".aisex.com", - "||ait.org.tw", - "aiweiwei.com", - ".aiweiweiblog.com", - "||aiweiweiblog.com", - "||www.ajsands.com", - "a248.e.akamai.net", - "||a248.e.akamai.net", - "rfalive1.akacast.akamaistream.net", - "voa-11.akacast.akamaistream.net", - "||abematv.akamaized.net", - "||linear-abematv.akamaized.net", - "||vod-abematv.akamaized.net", - "|https://fbcdn*.akamaihd.net/", - "rthklive2-lh.akamaihd.net", - ".akademiye.org/ug", - "|http://akademiye.org/ug", - "||akiba-online.com", - "||akow.org", - ".al-islam.com", - "||al-qimmah.net", - "||alabout.com", - ".alanhou.com", - "|http://alanhou.com", - ".alarab.qa", - "||alasbarricadas.org", - "alexlur.org", - "||alforattv.net", - ".alhayat.com", - ".alicejapan.co.jp", - "aliengu.com", - "||alkasir.com", - "||allconnected.co", - ".alldrawnsex.com", - "||alldrawnsex.com", - ".allervpn.com", - "||allfinegirls.com", - ".allgirlmassage.com", - "allgirlsallowed.org", - ".allgravure.com", - "alliance.org.hk", - ".allinfa.com", - "||allinfa.com", - ".alljackpotscasino.com", - "||allmovie.com", - "||almasdarnews.com", - ".alphaporno.com", - "||alternate-tools.com", - "alternativeto.net/software", - "alvinalexander.com", - "alwaysdata.com", - "||alwaysdata.com", - "||alwaysdata.net", - ".alwaysvpn.com", - "||alwaysvpn.com", - "||am730.com.hk", - "ameblo.jp", - "||ameblo.jp", - "www1.american.edu/ted/ice/tibet", - "||americangreencard.com", - "|http://www.americorps.gov", - "||amiblockedornot.com", - ".amigobbs.net", - ".amitabhafoundation.us", - "|http://amitabhafoundation.us", - ".amnesty.org", - "||amnesty.org", - "||amnesty.org.hk", - ".amnesty.tw", - ".amnestyusa.org", - "||amnestyusa.org", - ".amnyemachen.org", - ".amoiist.com", - ".amtb-taipei.org", - "androidplus.co/apk", - ".andygod.com", - "|http://andygod.com", - "annatam.com/chinese", - "||anchorfree.com", - "||ancsconf.org", - "||andfaraway.net", - "||android-x86.org", - "angelfire.com/hi/hayashi", - "||angularjs.org", - "animecrazy.net", - ".animeshippuuden.com", - "aniscartujo.com", - "||aniscartujo.com", - "||anobii.com", - "anonymise.us", - ".anonymitynetwork.com", - ".anonymizer.com", - ".anonymouse.org", - "||anonymouse.org", - "anontext.com", - ".anpopo.com", - ".answering-islam.org", - "|http://www.antd.org", - "||anthonycalzadilla.com", - ".anti1984.com", - "antichristendom.com", - ".antiwave.net", - "|http://antiwave.net", - ".anyporn.com", - ".anysex.com", - "|http://anysex.com", - "||aobo.com.au", - ".aofriend.com", - "|http://aofriend.com", - ".aofriend.com.au", - ".aojiao.org", - "||aomiwang.com", - "video.ap.org", - ".apetube.com", - "||apiary.io", - ".apigee.com", - "||apigee.com", - "apk-dl.com", - "apkdler.com/apk/view", - ".apkmonk.com/app", - "||apkplz.com", - "apkpure.com", - "||apkpure.com", - ".aplusvpn.com", - ".appdownloader.net/Android", - ".appledaily.com", - "||appledaily.com", - "appledaily.com.hk", - "||appledaily.com.hk", - "appledaily.com.tw", - "||appledaily.com.tw", - ".appshopper.com", - "|http://appshopper.com", - "||appsocks.net", - "||appsto.re", - ".aptoide.com", - "||aptoide.com", - "||archives.gov", - ".archive.fo", - "||archive.fo", - ".archive.is", - "||archive.is", - ".archive.li", - "||archive.li", - "||archive.org", - "archive.today", - "|https://archive.today", - ".arctosia.com", - "|http://arctosia.com", - "||areca-backup.org", - ".arethusa.su", - "||arethusa.su", - "||arlingtoncemetery.mil", - "||army.mil", - ".art4tibet1998.org", - "artofpeacefoundation.org", - "artsy.net", - "||asacp.org", - "asdfg.jp/dabr", - "asg.to", - ".asia-gaming.com", - ".asiaharvest.org", - "||asiaharvest.org", - "asianews.it", - "|http://japanfirst.asianfreeforum.com/", - "||asiansexdiary.com", - "||asianwomensfilm.de", - ".asiatgp.com", - ".asiatoday.us", - "||askstudent.com", - ".askynz.net", - "||askynz.net", - "||assembla.com", - "||astrill.com", - "||atc.org.au", - ".atchinese.com", - "|http://atchinese.com", - "atgfw.org", - ".atlaspost.com", - "||atlaspost.com", - "||atdmt.com", - ".atlanta168.com/forum", - ".atnext.com", - "||atnext.com", - "ice.audionow.com", - ".av.com", - "||av.movie", - ".av-e-body.com", - "avaaz.org", - "||avaaz.org", - ".avbody.tv", - ".avcity.tv", - ".avcool.com", - ".avdb.in", - "||avdb.in", - ".avdb.tv", - "||avdb.tv", - ".avfantasy.com", - "||avg.com", - ".avgle.com", - "||avgle.com", - "||avidemux.org", - "||avoision.com", - ".avyahoo.com", - "||axureformac.com", - ".azerbaycan.tv", - "azerimix.com", - "boxun*.azurewebsites.net", - "||boxun*.azurewebsites.net", - "forum.baby-kingdom.com", - "babynet.com.hk", - "backchina.com", - "||backchina.com", - ".backpackers.com.tw/forum", - "backtotiananmen.com", - ".badiucao.com", - "||badiucao.com", - ".badjojo.com", - "badoo.com", - "|http://*2.bahamut.com.tw", - "||baidu.jp", - ".baijie.org", - "|http://baijie.org", - "||bailandaily.com", - "||baixing.me", - "||bakgeekhome.tk", - ".banana-vpn.com", - "||banana-vpn.com", - ".band.us", - ".bandwagonhost.com", - "||bandwagonhost.com", - ".bangbrosnetwork.com", - ".bangchen.net", - "|http://bangchen.net", - "||bangyoulater.com", - "bannedbook.org", - "||bannedbook.org", - ".bannednews.org", - ".baramangaonline.com", - "|http://baramangaonline.com", - ".barenakedislam.com", - "||barnabu.co.uk", - "||barton.de", - "bartvpn.com", - ".bastillepost.com", - "bayvoice.net", - "||bayvoice.net", - "dajusha.baywords.com", - "||bbchat.tv", - "||bb-chat.tv", - ".bbg.gov", - ".bbkz.com/forum", - ".bbnradio.org", - "bbs-tw.com", - ".bbsdigest.com/thread", - "||bbsfeed.com", - "bbsland.com", - ".bbsmo.com", - ".bbsone.com", - "bbtoystore.com", - ".bcast.co.nz", - ".bcc.com.tw/board", - ".bcchinese.net", - ".bcmorning.com", - "bdsmvideos.net", - ".beaconevents.com", - ".bebo.com", - "||bebo.com", - ".beevpn.com", - "||beevpn.com", - ".behindkink.com", - "||beijing1989.com", - "beijingspring.com", - "||beijingspring.com", - ".beijingzx.org", - "|http://beijingzx.org", - ".belamionline.com", - ".bell.wiki", - "|http://bell.wiki", - "bemywife.cc", - "beric.me", - ".berlintwitterwall.com", - "||berlintwitterwall.com", - ".berm.co.nz", - ".bestforchina.org", - "||bestforchina.org", - ".bestgore.com", - ".bestpornstardb.com", - "||bestvpn.com", - ".bestvpnanalysis.com", - ".bestvpnserver.com", - ".bestvpnservice.com", - ".bestvpnusa.com", - "||bet365.com", - ".betfair.com", - "||betternet.co", - ".bettervpn.com", - "||bettervpn.com", - ".bettween.com", - "||bettween.com", - "||betvictor.com", - ".bewww.net", - ".beyondfirewall.com", - "||bfnn.org", - "||bfsh.hk", - ".bgvpn.com", - "||bgvpn.com", - ".bianlei.com", - "@@||bianlei.com", - "biantailajiao.com", - "biantailajiao.in", - ".biblesforamerica.org", - "|http://biblesforamerica.org", - ".bic2011.org", - "bigfools.com", - "||bigjapanesesex.com", - ".bignews.org", - "||bignews.org", - ".bigsound.org", - ".biliworld.com", - "|http://biliworld.com", - "|http://billypan.com/wiki", - ".binux.me", - "ai.binwang.me/couplet", - "bipic.net", - ".bit.do", - "|http://bit.do", - ".bit.ly", - "|http://bit.ly", - "||bitcointalk.org", - ".bitshare.com", - "||bitshare.com", - "bitsnoop.com", - ".bitvise.com", - "||bitvise.com", - "bizhat.com", - "||bl-doujinsouko.com", - ".bjnewlife.org", - ".bjs.org", - "bjzc.org", - "||bjzc.org", - ".blacklogic.com", - ".blackvpn.com", - "||blackvpn.com", - "blewpass.com", - "tor.blingblingsquad.net", - ".blinkx.com", - "||blinkx.com", - "blinw.com", - ".blip.tv", - "||blip.tv/", - ".blockcn.com", - "||blockcn.com", - "||blockless.com", - "||blog.de", - ".blog.jp", - "|http://blog.jp", - "@@||jpush.cn", - ".blogcatalog.com", - "||blogcatalog.com", - "||blogcity.me", - ".blogger.com", - "||blogger.com", - "blogimg.jp", - "||blog.kangye.org", - ".bloglines.com", - "||bloglines.com", - "||bloglovin.com", - "rconversation.blogs.com", - "blogtd.net", - ".blogtd.org", - "|http://blogtd.org", - "||bloodshed.net", - ".bloomberg.cn", - "||bloomberg.cn", - ".bloomberg.com", - "||bloomberg.com", - "bloomberg.de", - "||bloomberg.de", - "||assets.bwbx.io", - "||bloomfortune.com", - "blueangellive.com", - ".bmfinn.com", - ".bnews.co", - "||bnews.co", - "||bnrmetal.com", - "boardreader.com/thread", - "||boardreader.com", - ".bod.asia", - "|http://bod.asia", - ".bodog88.com", - ".bolehvpn.net", - "||bolehvpn.net", - "bonbonme.com", - ".bonbonsex.com", - ".bonfoundation.org", - ".bongacams.com", - "||boobstagram.com", - "||book.com.tw", - "bookepub.com", - "||books.com.tw", - "||botanwang.com", - ".bot.nu", - ".bowenpress.com", - "||bowenpress.com", - "||app.box.com", - "dl.box.net", - "||dl.box.net", - ".boxpn.com", - "||boxpn.com", - "boxun.com", - "||boxun.com", - ".boxun.tv", - "||boxun.tv", - "boxunblog.com", - "||boxunblog.com", - ".boxunclub.com", - "boyangu.com", - ".boyfriendtv.com", - ".boysfood.com", - "||br.st", - ".brainyquote.com/quotes/authors/d/dalai_lama", - "||brandonhutchinson.com", - "||braumeister.org", - ".bravotube.net", - "||bravotube.net", - ".brazzers.com", - "||brazzers.com", - ".break.com", - "||break.com", - "breakgfw.com", - "||breakgfw.com", - "breaking911.com", - ".breakingtweets.com", - "||breakingtweets.com", - "||breakwall.net", - "briian.com/6511/freegate", - ".briefdream.com/%E7%B4%A0%E6%A3%BA", - "brizzly.com", - "||brizzly.com", - "||brkmd.com", - "broadbook.com", - ".broadpressinc.com", - "||broadpressinc.com", - "bbs.brockbbs.com", - "brucewang.net", - ".brutaltgp.com", - "||brutaltgp.com", - ".bt2mag.com", - "||bt95.com", - ".btaia.com", - ".btbtav.com", - "|http://btdigg.org", - ".btku.me", - "||btku.me", - "||btku.org", - ".btspread.com", - ".btsynckeys.com", - ".budaedu.org", - "||budaedu.org", - ".buddhanet.com.tw/zfrop/tibet", - ".buddhistchannel.tv", - ".buffered.com", - "|http://buffered.com", - ".bullog.org", - "||bullog.org", - ".bullogger.com", - "||bullogger.com", - "bunbunhk.com", - ".busayari.com", - "|http://busayari.com", - ".businessinsider.com/bing-could-be-censoring-search-results-2014", - ".businessinsider.com/china-banks-preparing-for-debt-implosion-2014", - ".businessinsider.com/hong-kong-activists-defy-police-tear-gas-as-protests-continue-overnight-2014", - ".businessinsider.com/internet-outages-reported-in-north-korea-2014", - ".businessinsider.com/iphone-6-is-approved-for-sale-in-china-2014", - ".businessinsider.com/nfl-announcers-surface-tablets-2014", - ".businessinsider.com/panama-papers", - ".businessinsider.com/umbrella-man-hong-kong-2014", - "|http://www.businessinsider.com.au/*", - ".businesstoday.com.tw", - "||businesstoday.com.tw", - ".businessweek.com", - ".busu.org/news", - "|http://busu.org/news", - "busytrade.com", - ".buugaa.com", - ".buzzhand.com", - ".buzzhand.net", - ".buzzorange.com", - "||buzzorange.com", - "||bvpn.com", - "||bwh1.net", - "bwsj.hk", - "||bx.tl", - ".c-spanvideo.org", - "||c-spanvideo.org", - "||c-est-simple.com", - ".c100tibet.org", - "||cablegatesearch.net", - ".cachinese.com", - ".cacnw.com", - "|http://cacnw.com", - ".cactusvpn.com", - "||cactusvpn.com", - ".cafepress.com", - ".cahr.org.tw", - ".calameo.com/books", - "cn.calameo.com", - "|http://cn.calameo.com", - ".calgarychinese.ca", - ".calgarychinese.com", - ".calgarychinese.net", - "|http://blog.calibre-ebook.com", - "|http://google.calstate.edu", - "falun.caltech.edu", - ".its.caltech.edu/~falun/", - ".cam4.com", - ".cam4.jp", - ".cam4.sg", - ".camfrog.com", - "||camfrog.com", - "||cams.com", - ".cams.org.sg", - "canadameet.com", - ".canalporno.com", - "|http://bbs.cantonese.asia/", - ".canyu.org", - "||canyu.org", - ".cao.im", - ".caobian.info", - "||caobian.info", - "caochangqing.com", - "||caochangqing.com", - ".cap.org.hk", - "||cap.org.hk", - ".carabinasypistolas.com", - "cardinalkungfoundation.org", - "carmotorshow.com", - "ss.carryzhou.com", - ".cartoonmovement.com", - "||cartoonmovement.com", - ".casadeltibetbcn.org", - ".casatibet.org.mx", - "|http://casatibet.org.mx", - "cari.com.my", - "||caribbeancom.com", - ".casinoking.com", - ".casinoriva.com", - "||catch22.net", - ".catchgod.com", - "|http://catchgod.com", - "||catfightpayperview.xxx", - ".catholic.org.hk", - "||catholic.org.hk", - "catholic.org.tw", - "||catholic.org.tw", - ".cathvoice.org.tw", - "||cattt.com", - ".cbc.ca", - "||cbc.ca", - ".cbsnews.com/video", - ".cbtc.org.hk", - "||cccat.cc", - "||cccat.co", - ".ccdtr.org", - "||ccdtr.org", - ".cchere.com", - "||cchere.com", - ".ccim.org", - ".cclife.ca", - "cclife.org", - "cclifefl.org", - ".ccthere.com", - "||ccthere.com", - "||ccthere.net", - ".cctmweb.net", - ".cctongbao.com/article/2078732", - "ccue.ca", - "ccue.com", - ".ccvoice.ca", - ".ccw.org.tw", - ".cgdepot.org", - "|http://cgdepot.org", - "||cdbook.org", - ".cdcparty.com", - ".cdef.org", - "||cdef.org", - "||cdig.info", - "cdjp.org", - "||cdjp.org", - ".cdn-apple.com", - "||cdn-apple.com", - ".cdnews.com.tw", - "cdp1989.org", - "cdp1998.org", - "||cdp1998.org", - "cdp2006.org", - "||cdp2006.org", - ".cdpa.url.tw", - "cdpeu.org", - "cdpusa.org", - "cdpweb.org", - "||cdpweb.org", - "cdpwu.org", - "||cdpwu.org", - "||cdw.com", - ".cecc.gov", - "||cecc.gov", - "||cellulo.info", - "||cenews.eu", - "||centerforhumanreprod.com", - "||centralnation.com", - ".centurys.net", - "|http://centurys.net", - ".cfhks.org.hk", - ".cfos.de", - ".cftfc.com", - ".cgst.edu", - ".change.org", - "||change.org", - ".changp.com", - "||changp.com", - ".changsa.net", - "|http://changsa.net", - ".channel8news.sg/news8", - ".chapm25.com", - ".chaturbate.com", - ".chuang-yen.org", - "chengmingmag.com", - ".chenguangcheng.com", - "||chenguangcheng.com", - ".chenpokong.com", - ".chenpokong.net", - "|http://chenpokong.net", - "||cherrysave.com", - ".chhongbi.org", - "chicagoncmtv.com", - "|http://chicagoncmtv.com", - ".china-week.com", - "china101.com", - "||china101.com", - "||china18.org", - "||china21.com", - "china21.org", - "||china21.org", - ".china5000.us", - "chinaaffairs.org", - "||chinaaffairs.org", - "||chinaaid.me", - "chinaaid.us", - "chinaaid.org", - "chinaaid.net", - "chinacomments.org", - "||chinacomments.org", - ".chinachange.org", - "||chinachange.org", - "chinachannel.hk", - "||chinachannel.hk", - ".chinacitynews.be", - ".chinadialogue.net", - ".chinadigitaltimes.net", - "||chinadigitaltimes.net", - ".chinaelections.org", - "||chinaelections.org", - ".chinaeweekly.com", - "||chinaeweekly.com", - "||chinafreepress.org", - ".chinagate.com", - "chinageeks.org", - "chinagfw.org", - "||chinagfw.org", - ".chinagonet.com", - ".chinagreenparty.org", - "||chinagreenparty.org", - ".chinahorizon.org", - "||chinahorizon.org", - ".chinahush.com", - ".chinainperspective.com", - "||chinainterimgov.org", - "chinalaborwatch.org", - "chinalawtranslate.com", - ".chinapost.com.tw/taiwan/national/national-news", - "chinaxchina.com/howto", - "chinalawandpolicy.com", - ".chinamule.com", - "||chinamule.com", - "chinamz.org", - ".chinanewscenter.com", - "|https://chinanewscenter.com", - ".chinapress.com.my", - "||chinapress.com.my", - ".china-review.com.ua", - "|http://china-review.com.ua", - ".chinarightsia.org", - "chinasmile.net/forums", - "chinasocialdemocraticparty.com", - "||chinasocialdemocraticparty.com", - "chinasoul.org", - "||chinasoul.org", - ".chinasucks.net", - "||chinatopsex.com", - ".chinatown.com.au", - "chinatweeps.com", - "chinaway.org", - ".chinaworker.info", - "||chinaworker.info", - "chinayouth.org.hk", - "chinayuanmin.org", - "||chinayuanmin.org", - ".chinese-hermit.net", - "chinese-leaders.org", - "chinese-memorial.org", - ".chinesedaily.com", - "||chinesedailynews.com", - ".chinesedemocracy.com", - "||chinesedemocracy.com", - "||chinesegay.org", - ".chinesen.de", - "||chinesen.de", - ".chinesenews.net.au/", - ".chinesepen.org", - ".chinesetalks.net/ch", - "||chineseupress.com", - ".chingcheong.com", - "||chingcheong.com", - ".chinman.net", - "|http://chinman.net", - "chithu.org", - "|http://chn.chosun.com", - "cnnews.chosun.com/client/news/viw.asp?cate=C01&mcate", - ".chrdnet.com", - "|http://chrdnet.com", - ".christianfreedom.org", - "|http://christianfreedom.org", - "christianstudy.com", - "||christianstudy.com", - "christusrex.org/www1/sdc", - ".chubold.com", - "chubun.com", - "chuizi.net", - "christiantimes.org.hk", - ".chrlawyers.hk", - "|http://chrlawyers.hk", - ".churchinhongkong.org/b5/index.php", - "|http://churchinhongkong.org/b5/index.php", - ".chushigangdrug.ch", - ".cienen.com", - ".cineastentreff.de", - ".cipfg.org", - "||circlethebayfortibet.org", - "||cirosantilli.com", - ".citizencn.com", - "||citizencn.com", - "|http://citizenlab.org", - "|http://www.citizenlab.org", - "||citizenscommission.hk", - ".citizenlab.org", - "citizensradio.org", - ".city365.ca", - "|http://city365.ca", - "city9x.com", - "||citypopulation.de", - ".citytalk.tw/event", - ".civicparty.hk", - "||civicparty.hk", - ".civildisobediencemovement.org", - "civilhrfront.org", - "||civilhrfront.org", - ".civiliangunner.com", - ".civilmedia.tw", - "||civilmedia.tw", - "psiphon.civisec.org", - "||vpn.cjb.net", - ".ck101.com", - "||ck101.com", - ".clarionproject.org/news/islamic-state-isis-isil-propaganda", - "||classicalguitarblog.net", - ".clb.org.hk", - "clearharmony.net", - "clearwisdom.net", - "clinica-tibet.ru", - ".clipfish.de", - "cloakpoint.com", - "||club1069.com", - "cmi.org.tw", - "|http://www.cmoinc.org", - "cmp.hku.hk", - "hkupop.hku.hk", - "||cmule.com", - "||cmule.org", - "||cms.gov", - "|http://vpn.cmu.edu", - "|http://vpn.sv.cmu.edu", - ".cn6.eu", - ".cna.com.tw", - "||cna.com.tw", - ".cnabc.com", - ".cnd.org", - "||cnd.org", - "download.cnet.com", - ".cnex.org.cn", - ".cnineu.com", - "wiki.cnitter.com", - ".cnn.com/video", - ".cnpolitics.org", - "||cnpolitics.org", - ".cn-proxy.com", - "|http://cn-proxy.com", - ".cnproxy.com", - "blog.cnyes.com", - "news.cnyes.com", - "||coat.co.jp", - ".cochina.co", - "||cochina.co", - "||cochina.org", - ".code1984.com/64", - "|http://goagent.codeplex.com", - "||codeshare.io", - "||codeskulptor.org", - "|http://tosh.comedycentral.com", - "comefromchina.com", - "||comefromchina.com", - ".comic-mega.me", - "commandarms.com", - "||commentshk.com", - ".communistcrimes.org", - "||communistcrimes.org", - "||communitychoicecu.com", - "||compileheart.com", - "||conoha.jp", - ".contactmagazine.net", - ".convio.net", - ".coobay.com", - "|http://www.cool18.com/bbs*/", - ".coolaler.com", - "||coolaler.com", - "coolder.com", - "||coolder.com", - "||coolloud.org.tw", - ".coolncute.com", - "||coolstuffinc.com", - "corumcollege.com", - ".cos-moe.com", - "|http://cos-moe.com", - ".cosplayjav.pl", - "|http://cosplayjav.pl", - ".cotweet.com", - "||cotweet.com", - ".coursehero.com", - "||coursehero.com", - "cpj.org", - "||cpj.org", - ".cq99.us", - "|http://cq99.us", - "crackle.com", - "||crackle.com", - ".crazys.cc", - ".crazyshit.com", - "||crchina.org", - "crd-net.org", - "creaders.net", - "||creaders.net", - ".creadersnet.com", - "||cristyli.com", - ".crocotube.com", - "|http://crocotube.com", - ".crossthewall.net", - "||crossthewall.net", - ".crossvpn.net", - "||crossvpn.net", - "||crucial.com", - "csdparty.com", - "||csdparty.com", - "||csuchen.de", - ".csw.org.uk", - ".ct.org.tw", - "||ct.org.tw", - ".ctao.org", - ".ctfriend.net", - ".ctitv.com.tw", - "cts.com.tw", - "|http://library.usc.cuhk.edu.hk/", - "|http://mjlsh.usc.cuhk.edu.hk/", - ".cuhkacs.org/~benng", - ".cuihua.org", - "||cuihua.org", - ".cuiweiping.net", - "||cuiweiping.net", - "||culture.tw", - ".cumlouder.com", - "||cumlouder.com", - "||curvefish.com", - ".cusu.hk", - "||cusu.hk", - ".cutscenes.net", - ".cw.com.tw", - "||cw.com.tw", - "|http://forum.cyberctm.com", - "cyberghostvpn.com", - "||cyberghostvpn.com", - "||cynscribe.com", - "cytode.us", - "||ifan.cz.cc", - "||mike.cz.cc", - "||nic.cz.cc", - ".d-fukyu.com", - "|http://d-fukyu.com", - "cl.d0z.net", - ".d100.net", - "||d100.net", - ".d2bay.com", - "|http://d2bay.com", - ".dabr.co.uk", - "||dabr.co.uk", - "dabr.eu", - "dabr.mobi", - "||dabr.mobi", - "||dabr.me", - "dadazim.com", - "||dadazim.com", - ".dadi360.com", - ".dafabet.com", - "dafagood.com", - "dafahao.com", - ".dafoh.org", - ".daftporn.com", - ".dagelijksestandaard.nl", - ".daidostup.ru", - "|http://daidostup.ru", - ".dailidaili.com", - "||dailidaili.com", - ".dailymotion.com", - "||dailymotion.com", - "daiphapinfo.net", - ".dajiyuan.com", - "||dajiyuan.de", - "dajiyuan.eu", - "dalailama.com", - ".dalailama.mn", - "|http://dalailama.mn", - ".dalailama.ru", - "||dalailama.ru", - "dalailama80.org", - ".dalailama-archives.org", - ".dalailamacenter.org", - "|http://dalailamacenter.org", - "dalailamafellows.org", - ".dalailamafilm.com", - ".dalailamafoundation.org", - ".dalailamahindi.com", - ".dalailamainaustralia.org", - ".dalailamajapanese.com", - ".dalailamaprotesters.info", - ".dalailamaquotes.org", - ".dalailamatrust.org", - ".dalailamavisit.org.nz", - ".dalailamaworld.com", - "||dalailamaworld.com", - "dalianmeng.org", - "||dalianmeng.org", - ".daliulian.org", - "||daliulian.org", - ".danke4china.net", - "||danke4china.net", - ".danwei.org", - "daolan.net", - ".daozhongxing.org", - "darktoy.net", - "||dastrassi.org", - "blog.daum.net/_blog", - ".david-kilgour.com", - "|http://david-kilgour.com", - "daxa.cn", - "||daxa.cn", - "cn.dayabook.com", - ".daylife.com/topic/dalai_lama", - "||db.tt", - ".dbc.hk/main", - "||dcard.tw", - "dcmilitary.com", - ".ddc.com.tw", - ".ddhw.info", - "||de-sci.org", - ".de-sci.org", - "packages.debian.org/zh-cn/lenny/gpass", - "||decodet.co", - ".definebabe.com", - "||delcamp.net", - "delicious.com/GFWbookmark", - ".democrats.org", - "||democrats.org", - ".demosisto.hk", - "||demosisto.hk", - "||desc.se", - "||dessci.com", - ".destroy-china.jp", - "||deutsche-welle.de", - "||devio.us", - "||devpn.com", - "||dfas.mil", - "dfn.org", - "dharmakara.net", - ".dharamsalanet.com", - ".diaoyuislands.org", - "||diaoyuislands.org", - ".difangwenge.org", - "|http://digiland.tw/", - "||digitalnomadsproject.org", - ".diigo.com", - "||diigo.com", - "||dilber.se", - "||furl.net", - ".dipity.com", - "||directcreative.com", - ".discuss.com.hk", - "||discuss.com.hk", - ".discuss4u.com", - "disp.cc", - ".disqus.com", - "||disqus.com", - ".dit-inc.us", - "||dit-inc.us", - ".dizhidizhi.com", - "||dizhuzhishang.com", - "djangosnippets.org", - ".djorz.com", - "||djorz.com", - "||dl-laby.jp", - "||dlsite.com", - "||dlyoutube.com", - "||dmcdn.net", - ".dnscrypt.org", - "||dnscrypt.org", - "||dns2go.com", - "||dnssec.net", - "doctorvoice.org", - ".dogfartnetwork.com/tour", - "gloryhole.com", - ".dojin.com", - ".dok-forum.net", - "||dolc.de", - "||dolf.org.hk", - "||dollf.com", - ".domain.club.tw", - ".domaintoday.com.au", - "chinese.donga.com", - "dongtaiwang.com", - "||dongtaiwang.com", - ".dongtaiwang.net", - "||dongtaiwang.net", - ".dongyangjing.com", - "|http://danbooru.donmai.us", - ".dontfilter.us", - "||dontmovetochina.com", - ".dorjeshugden.com", - ".dotplane.com", - "||dotplane.com", - "||dotsub.com", - ".dotvpn.com", - "||dotvpn.com", - ".doub.io", - "||doub.io", - "||dougscripts.com", - "||douhokanko.net", - "||doujincafe.com", - "dowei.org", - "dphk.org", - "dpp.org.tw", - "||dpp.org.tw", - "||dpr.info", - "||dragonsprings.org", - ".dreamamateurs.com", - ".drepung.org", - "||drgan.net", - ".drmingxia.org", - "|http://drmingxia.org", - "||dropbooks.tv", - "||dropbox.com", - "||api.dropboxapi.com", - "||notify.dropboxapi.com", - "||dropboxusercontent.com", - "drsunacademy.com", - ".drtuber.com", - ".dscn.info", - "|http://dscn.info", - ".dstk.dk", - "|http://dstk.dk", - "||dtiblog.com", - "||dtic.mil", - ".dtwang.org", - ".duanzhihu.com", - ".duckdns.org", - "|http://duckdns.org", - ".duckduckgo.com", - "||duckduckgo.com", - ".duckload.com/download", - "||duckmylife.com", - ".duga.jp", - "|http://duga.jp", - ".duihua.org", - "||duihua.org", - "||duihuahrjournal.org", - ".dunyabulteni.net", - ".duoweitimes.com", - "||duoweitimes.com", - "duping.net", - "||duplicati.com", - "dupola.com", - "dupola.net", - ".dushi.ca", - "||dvorak.org", - ".dw.com", - "||dw.com", - "||dw.de", - ".dw-world.com", - "||dw-world.com", - ".dw-world.de", - "|http://dw-world.de", - "www.dwheeler.com", - "dwnews.com", - "||dwnews.com", - "dwnews.net", - "||dwnews.net", - "xys.dxiong.com", - "||dynawebinc.com", - "||dysfz.cc", - ".dzze.com", - "||e-classical.com.tw", - "||e-gold.com", - ".e-gold.com", - ".e-hentai.org", - "||e-hentai.org", - ".e-hentaidb.com", - "|http://e-hentaidb.com", - "e-info.org.tw", - ".e-traderland.net/board", - ".e-zone.com.hk/discuz", - "|http://e-zone.com.hk/discuz", - ".e123.hk", - "||e123.hk", - ".earlytibet.com", - "|http://earlytibet.com", - ".earthcam.com", - ".earthvpn.com", - "||earthvpn.com", - "eastern-ark.com", - ".easternlightning.org", - ".eastturkestan.com", - "|http://www.eastturkistan.net/", - ".eastturkistan-gov.org", - ".eastturkistancc.org", - ".eastturkistangovernmentinexile.us", - "||eastturkistangovernmentinexile.us", - ".easyca.ca", - ".easypic.com", - ".ebony-beauty.com", - "ebookbrowse.com", - "ebookee.com", - "||ecfa.org.tw", - "ushuarencity.echainhost.com", - "||ecimg.tw", - "ecministry.net", - ".economist.com", - "bbs.ecstart.com", - "edgecastcdn.net", - "||edgecastcdn.net", - "/twimg\\.edgesuite\\.net\\/\\/?appledaily/", - "edicypages.com", - ".edmontonchina.cn", - ".edmontonservice.com", - "edoors.com", - ".edubridge.com", - "||edubridge.com", - ".edupro.org", - "||eevpn.com", - "efcc.org.hk", - ".efukt.com", - "|http://efukt.com", - "||eic-av.com", - "||eireinikotaerukai.com", - ".eisbb.com", - ".eksisozluk.com", - "||eksisozluk.com", - "electionsmeter.com", - "||elgoog.im", - ".ellawine.org", - ".elpais.com", - "||elpais.com", - ".eltondisney.com", - ".emaga.com/info/3407", - "emilylau.org.hk", - ".emanna.com/chineseTraditional", - "bitc.bme.emory.edu/~lzhou/blogs", - ".empfil.com", - ".emule-ed2k.com", - "|http://emule-ed2k.com", - ".emulefans.com", - "|http://emulefans.com", - ".emuparadise.me", - ".enanyang.my", - "||enewstree.com", - ".enfal.de", - "chinese.engadget.com", - "||engagedaily.org", - "englishforeveryone.org", - "||englishfromengland.co.uk", - "englishpen.org", - ".enlighten.org.tw", - "||entermap.com", - ".entnt.com", - "|http://entnt.com", - ".episcopalchurch.org", - ".epochhk.com", - "|http://epochhk.com", - "epochtimes-bg.com", - "||epochtimes-bg.com", - "epochtimes-romania.com", - "||epochtimes-romania.com", - "epochtimes.co.il", - "||epochtimes.co.il", - "epochtimes.co.kr", - "||epochtimes.co.kr", - "epochtimes.com", - "||epochtimes.com", - ".epochtimes.cz", - "epochtimes.de", - "epochtimes.fr", - ".epochtimes.ie", - ".epochtimes.it", - "epochtimes.jp", - "epochtimes.ru", - "epochtimes.se", - "epochtimestr.com", - ".epochweek.com", - "||epochweek.com", - "||epochweekly.com", - ".eporner.com", - ".equinenow.com", - "erabaru.net", - ".eracom.com.tw", - ".eraysoft.com.tr", - ".erepublik.com", - ".erights.net", - "||erights.net", - ".erktv.com", - "|http://erktv.com", - "||ernestmandel.org", - "||erodaizensyu.com", - "||erodoujinlog.com", - "||erodoujinworld.com", - "||eromanga-kingdom.com", - "||eromangadouzin.com", - ".eromon.net", - "|http://eromon.net", - ".eroprofile.com", - ".eroticsaloon.net", - ".eslite.com", - "||eslite.com", - "wiki.esu.im/%E8%9B%A4%E8%9B%A4%E8%AF%AD%E5%BD%95", - ".etaa.org.au", - ".etadult.com", - "etaiwannews.com", - "||etizer.org", - "||etokki.com", - ".ettoday.net/news/20151216/614081", - "etvonline.hk", - ".eu.org", - "||eu.org", - ".eucasino.com", - ".eulam.com", - ".eurekavpt.com", - "||eurekavpt.com", - ".euronews.com", - "||euronews.com", - "eeas.europa.eu/delegations/china/press_corner/all_news/news/2015/20150716_zh", - "eeas.europa.eu/statements-eeas/2015/151022", - ".evschool.net", - "|http://evschool.net", - "||exblog.jp", - "||blog.exblog.co.jp", - "@@||www.exblog.jp", - ".exchristian.hk", - "||exchristian.hk", - "|http://blog.excite.co.jp", - "||exmormon.org", - "||expatshield.com", - ".expecthim.com", - "||expecthim.com", - "experts-univers.com", - "||exploader.net", - ".expressvpn.com", - "||expressvpn.com", - ".extremetube.com", - "eyevio.jp", - "||eyevio.jp", - ".eyny.com", - "||eyny.com", - ".ezpc.tk/category/soft", - ".ezpeer.com", - "||facebookquotes4u.com", - ".faceless.me", - "||faceless.me", - "|http://facesoftibetanselfimmolators.info", - "||facesofnyfw.com", - ".faith100.org", - "|http://faith100.org", - ".faithfuleye.com", - "||faiththedog.info", - ".fakku.net", - ".falsefire.com", - "||falsefire.com", - "falun-co.org", - "falunart.org", - "||falunasia.info", - "|http://falunau.org", - ".falunaz.net", - "falundafa.org", - "falundafa-dc.org", - "||falundafa-florida.org", - "||falundafa-nc.org", - "||falundafa-pa.net", - "||falundafa-sacramento.org", - "falun-ny.net", - "||falundafaindia.org", - "falundafamuseum.org", - ".falungong.club", - ".falungong.de", - "falungong.org.uk", - "||falunhr.org", - "faluninfo.de", - "faluninfo.net", - ".falunpilipinas.net", - "||falunworld.net", - "familyfed.org", - ".fangeming.com", - "||fanglizhi.info", - "||fangong.org", - "fangongheike.com", - ".fanqiang.tk", - "fanqianghou.com", - "||fanqianghou.com", - ".fanqiangzhe.com", - "||fanqiangzhe.com", - "fapdu.com", - "faproxy.com", - ".fawanghuihui.org", - "fanqiangyakexi.net", - "fail.hk", - "||famunion.com", - ".fan-qiang.com", - ".fangbinxing.com", - "||fangbinxing.com", - "fangeming.com", - ".fangmincn.org", - "||fangmincn.org", - ".fanhaodang.com", - "||fanswong.com", - ".fanyue.info", - ".farwestchina.com", - "en.favotter.net", - "nytimes.map.fastly.net", - "||nytimes.map.fastly.net", - "||fast.wistia.com", - "||fastssh.com", - "||faststone.org", - "favstar.fm", - "||favstar.fm", - "faydao.com/weblog", - ".fc2.com", - ".fc2china.com", - ".fc2cn.com", - "||fc2cn.com", - "fc2blog.net", - "|http://uygur.fc2web.com/", - "video.fdbox.com", - ".fdc64.de", - ".fdc64.org", - ".fdc89.jp", - "||fourface.nodesnoop.com", - "||feelssh.com", - "feer.com", - ".feifeiss.com", - "|http://feitianacademy.org", - ".feitian-california.org", - "||feministteacher.com", - ".fengzhenghu.com", - "||fengzhenghu.com", - ".fengzhenghu.net", - "||fengzhenghu.net", - ".fevernet.com", - "|http://ff.im", - "fffff.at", - "fflick.com", - ".ffvpn.com", - "fgmtv.net", - ".fgmtv.org", - ".fhreports.net", - "|http://fhreports.net", - ".figprayer.com", - "||figprayer.com", - ".fileflyer.com", - "||fileflyer.com", - "|http://feeds.fileforum.com", - ".files2me.com", - ".fileserve.com/file", - "fillthesquare.org", - "filmingfortibet.org", - ".filthdump.com", - ".finchvpn.com", - "||finchvpn.com", - "findmespot.com", - "||findyoutube.com", - "||findyoutube.net", - ".fingerdaily.com", - "finler.net", - ".firearmsworld.net", - "|http://firearmsworld.net", - ".fireofliberty.org", - "||fireofliberty.org", - ".firetweet.io", - "||firetweet.io", - ".flagsonline.it", - "fleshbot.com", - ".fleursdeslettres.com", - "|http://fleursdeslettres.com", - "||flgg.us", - "||flgjustice.org", - "||flickr.com", - "||staticflickr.com", - "flickrhivemind.net", - ".flickriver.com", - ".fling.com", - "||flipkart.com", - "||flog.tw", - ".flyvpn.com", - "||flyvpn.com", - "|http://cn.fmnnow.com", - "fofldfradio.org", - "blog.foolsmountain.com", - ".forum4hk.com", - "fangong.forums-free.com", - "pioneer-worker.forums-free.com", - "|https://ss*.4sqi.net", - "video.foxbusiness.com", - "|http://foxgay.com", - "||fringenetwork.com", - "||flecheinthepeche.fr", - ".fochk.org", - "|http://fochk.org", - "||focustaiwan.tw", - ".focusvpn.com", - "||fofg.org", - ".fofg-europe.net", - ".fooooo.com", - "||fooooo.com", - "footwiball.com", - ".fotile.me", - "||fourthinternational.org", - "||foxdie.us", - "||foxsub.com", - "foxtang.com", - ".fpmt.org", - "|http://fpmt.org", - ".fpmt.tw", - ".fpmt-osel.org", - "||fpmtmexico.org", - "fqok.org", - "||fqrouter.com", - "||franklc.com", - ".freakshare.com", - "|http://freakshare.com", - "||free4u.com.ar", - "free-gate.org", - ".free-hada-now.org", - "free-proxy.cz", - ".free.fr/adsl", - "kineox.free.fr", - "tibetlibre.free.fr", - "||freealim.com", - "whitebear.freebearblog.org", - "||freebrowser.org", - ".freechal.com", - ".freedomchina.info", - "||freedomchina.info", - ".freedomhouse.org", - "||freedomhouse.org", - ".freedomsherald.org", - "||freedomsherald.org", - ".freefq.com", - ".freefuckvids.com", - ".freegao.com", - "||freegao.com", - "freeilhamtohti.org", - ".freekwonpyong.org", - "||saveliuxiaobo.com", - ".freelotto.com", - "||freelotto.com", - "freeman2.com", - ".freeopenvpn.com", - "freemoren.com", - "freemorenews.com", - "freemuse.org/archives/789", - "freenet-china.org", - "freenewscn.com", - "cn.freeones.com", - ".freeoz.org/bbs", - "||freeoz.org", - "||freessh.us", - "free4u.com.ar", - ".free-ssh.com", - "||free-ssh.com", - ".freechina.news/", - "||freechinaforum.org", - "||freechinaweibo.com", - ".freedomcollection.org/interviews/rebiya_kadeer", - ".freeforums.org", - "||freenetproject.org", - ".freeoz.org", - ".freetibet.net", - "||freetibet.org", - ".freetibetanheroes.org", - "|http://freetibetanheroes.org", - ".freeviewmovies.com", - ".freevpn.me", - "|http://freevpn.me", - "||freewallpaper4.me", - ".freewebs.com", - ".freewechat.com", - "||freewechat.com", - "freeweibo.com", - "||freeweibo.com", - ".freexinwen.com", - ".freeyoutubeproxy.net", - "||freeyoutubeproxy.net", - "friendfeed.com", - "friendfeed-media.com/e99a4ebe2fb4c1985c2a58775eb4422961aa5a2e", - "friends-of-tibet.org", - ".friendsoftibet.org", - "freechina.net", - "|http://www.zensur.freerk.com/", - "freevpn.nl", - "freeyellow.com", - "hk.frienddy.com/hk", - "|http://adult.friendfinder.com/", - ".fring.com", - "||fring.com", - ".fromchinatousa.net", - "||frommel.net", - ".frontlinedefenders.org", - ".frootvpn.com", - "||frootvpn.com", - "||fscked.org", - ".fsurf.com", - ".ftv.com.tw", - "fucd.com", - ".fuckcnnic.net", - "||fuckcnnic.net", - "fuckgfw.org", - ".fulione.com", - "|https://fulione.com", - "||fullerconsideration.com", - "fulue.com", - ".funf.tw", - "funp.com", - ".fuq.com", - ".furhhdl.org", - "||furinkan.com", - ".futurechinaforum.org", - "||futuremessage.org", - ".fux.com", - ".fuyin.net", - ".fuyindiantai.org", - ".fuyu.org.tw", - "||fw.cm", - ".fxcm-chinese.com", - "||fxcm-chinese.com", - "fzh999.com", - "fzh999.net", - "fzlm.com", - ".g6hentai.com", - "|http://g6hentai.com", - "||g-queen.com", - "||gabocorp.com", - ".gaeproxy.com", - ".gaforum.org", - ".galaxymacau.com", - "||galenwu.com", - ".galstars.net", - "||game735.com", - "gamebase.com.tw", - "gamejolt.com", - "|http://wiki.gamerp.jp", - "||gamer.com.tw", - ".gamer.com.tw", - ".gamez.com.tw", - "||gamez.com.tw", - ".gamousa.com", - ".gaoming.net", - "||gaoming.net", - "ganges.com", - ".gaopi.net", - "|http://gaopi.net", - ".gaozhisheng.org", - ".gaozhisheng.net", - "gardennetworks.com", - "||gardennetworks.org", - "72.52.81.22", - "||gartlive.com", - "||gate-project.com", - "||gather.com", - ".gatherproxy.com", - "gati.org.tw", - ".gaybubble.com", - ".gaycn.net", - ".gayhub.com", - "||gaymap.cc", - ".gaymenring.com", - ".gaytube.com", - "||images-gaytube.com", - ".gaywatch.com", - "|http://gaywatch.com", - ".gazotube.com", - "||gazotube.com", - "||gcc.org.hk", - "||gclooney.com", - "||gcmasia.com", - ".gcpnews.com", - "|http://gcpnews.com", - ".gdbt.net/forum", - "gdzf.org", - "||geek-art.net", - "geekerhome.com/2010/03/xixiang-project-cross-gfw", - "||geekheart.info", - ".gekikame.com", - "|http://gekikame.com", - ".gelbooru.com", - "|http://gelbooru.com", - ".geocities.co.jp", - ".geocities.com/SiliconValley/Circuit/5683/download.html", - "hk.geocities.com", - "geocities.jp", - ".gerefoundation.org", - "||getastrill.com", - ".getchu.com", - ".getcloak.com", - "||getcloak.com", - "||getfoxyproxy.org", - ".getfreedur.com", - "||getgom.com", - ".geti2p.net", - "||geti2p.net", - ".getlantern.org", - "||getlantern.org", - ".getjetso.com/forum", - "getiton.com", - ".getsocialscope.com", - "||getsync.com", - "gfbv.de", - ".gfgold.com.hk", - ".gfsale.com", - "||gfsale.com", - "gfw.org.ua", - ".gfw.press", - "||gfw.press", - ".ggssl.com", - "||ggssl.com", - ".ghostpath.com", - "||ghostpath.com", - "||ghut.org", - ".giantessnight.com", - "|http://giantessnight.com", - ".gifree.com", - "||giga-web.jp", - "tw.gigacircle.com", - "|http://cn.giganews.com/", - "gigporno.ru", - "||girlbanker.com", - ".git.io", - "||git.io", - "|http://softwaredownload.gitbooks.io", - "github.com/getlantern", - "|https://gist.github.com", - "http://cthlo.github.io/hktv", - "hahaxixi.github.io", - "|https://hahaxixi.github.io", - "||haoel.github.io", - "||rg3.github.io", - "||sikaozhe1997.github.io", - "||sodatea.github.io", - "||terminus2049.github.io", - "||toutyrater.github.io", - "wsgzao.github.io", - "|https://wsgzao.github.io", - "||raw.githubusercontent.com", - ".gizlen.net", - "||gizlen.net", - ".gjczz.com", - "||gjczz.com", - "globaljihad.net", - "globalmediaoutreach.com", - "globalmuseumoncommunism.org", - "||globalrescue.net", - ".globaltm.org", - ".globalvoicesonline.org", - "||globalvoicesonline.org", - "||globalvpn.net", - ".glock.com", - "gluckman.com/DalaiLama", - "gmbd.cn", - "||gmhz.org", - "|http://www.gmiddle.com", - "|http://www.gmiddle.net", - ".gmll.org", - "||gnci.org.hk", - "go-pki.com", - "||goagent.biz", - "||goagentplus.com", - "gobet.cc", - "godfootsteps.org", - "||godfootsteps.org", - "godns.work", - "godsdirectcontact.co.uk", - ".godsdirectcontact.org", - "godsdirectcontact.org.tw", - ".godsimmediatecontact.com", - ".gogotunnel.com", - "||gohappy.com.tw", - ".gokbayrak.com", - ".goldbet.com", - "||goldbetsports.com", - "||goldeneyevault.com", - ".goldenfrog.com", - "||goldenfrog.com", - ".goldjizz.com", - "|http://goldjizz.com", - ".goldstep.net", - "||goldwave.com", - "gongmeng.info", - "gongm.in", - "gongminliliang.com", - ".gongwt.com", - "|http://gongwt.com", - "blog.goo.ne.jp/duck-tail_2009", - ".gooday.xyz", - "|http://gooday.xyz", - ".goodreads.com", - "||goodreads.com", - ".goodreaders.com", - "||goodreaders.com", - ".goodtv.com.tw", - ".goodtv.tv", - "||goofind.com", - ".googlesile.com", - ".gopetition.com", - "||gopetition.com", - ".goproxing.net", - ".gotrusted.com", - "||gotrusted.com", - "||gotw.ca", - "||grammaly.com", - "grandtrial.org", - ".graphis.ne.jp", - "||graphis.ne.jp", - "||graphql.org", - "greatfirewall.biz", - "||greatfirewallofchina.net", - ".greatfirewallofchina.org", - "||greatfirewallofchina.org", - "||greenfieldbookstore.com.hk", - ".greenparty.org.tw", - "||greenpeace.org", - ".greenreadings.com/forum", - "great-firewall.com", - "great-roc.org", - "greatroc.org", - "greatzhonghua.org", - ".greenpeace.com.tw", - ".greenvpn.net", - "||greenvpn.net", - ".greenvpn.org", - "||grotty-monday.com", - "gs-discuss.com", - "||gtricks.com", - "guancha.org", - "guaneryu.com", - ".guardster.com", - ".gun-world.net", - "gunsandammo.com", - "||gutteruncensored.com", - "||gvm.com.tw", - ".gzm.tv", - "||gzone-anime.info", - "||clementine-player.org", - "echofon.com", - "||greasespot.net", - "||www.klip.me", - "@@||site.locql.com", - "||stephaniered.com", - "@@||download.syniumsoftware.com", - "|http://ub0.cc", - "wozy.in", - "gospelherald.com", - "||gospelherald.com", - "|http://hk.gradconnection.com/", - "||grangorz.org", - "greatfire.org", - "||greatfire.org", - "greatfirewallofchina.org", - "||greatroc.tw", - ".gts-vpn.com", - "|http://gts-vpn.com", - ".gu-chu-sum.org", - "|http://gu-chu-sum.org", - ".guaguass.com", - "|http://guaguass.com", - ".guaguass.org", - "|http://guaguass.org", - ".guangming.com.my", - "guishan.org", - "||guishan.org", - ".gumroad.com", - "||gumroad.com", - "||gunsamerica.com", - "guruonline.hk", - "|http://gvlib.com", - ".gyalwarinpoche.com", - ".gyatsostudio.com", - ".h528.com", - ".h5dm.com", - ".h5galgame.me", - "||h-china.org", - ".h-moe.com", - "|http://h-moe.com", - "h1n1china.org", - ".hacg.club", - "||hacg.club", - ".hacg.in", - "|http://hacg.in", - ".hacg.li", - "|http://hacg.li", - ".hacg.me", - "|http://hacg.me", - ".hacg.red", - "|http://hacg.red", - ".hacken.cc/bbs", - ".hacker.org", - "||hackthatphone.net", - "hahlo.com", - "||hakkatv.org.tw", - ".handcraftedsoftware.org", - "|http://bbs.hanminzu.org/", - ".hanunyi.com", - ".hao.news/news", - "|http://ae.hao123.com", - "|http://ar.hao123.com", - "|http://br.hao123.com", - "|http://en.hao123.com", - "|http://id.hao123.com", - "|http://jp.hao123.com", - "|http://ma.hao123.com", - "|http://mx.hao123.com", - "|http://sa.hao123.com", - "|http://th.hao123.com", - "|http://tw.hao123.com", - "|http://vn.hao123.com", - "|http://hk.hao123img.com", - "|http://ld.hao123img.com", - "||happy-vpn.com", - ".haproxy.org", - "||hardsextube.com", - ".harunyahya.com", - "|http://harunyahya.com", - "bbs.hasi.wang", - "have8.com", - "@@||haygo.com", - ".hclips.com", - "||hdlt.me", - "||hdtvb.net", - ".hdzog.com", - "|http://hdzog.com", - "||heartyit.com", - ".heavy-r.com", - ".hec.su", - "|http://hec.su", - ".hecaitou.net", - "||hecaitou.net", - ".hechaji.com", - "||hechaji.com", - "||heeact.edu.tw", - ".hegre-art.com", - "|http://hegre-art.com", - "||cdn.helixstudios.net", - "||helplinfen.com", - "||helloandroid.com", - "||helloqueer.com", - ".helloss.pw", - "hellotxt.com", - "||hellotxt.com", - ".hentai.to", - ".hellouk.org/forum/lofiversion", - ".helpeachpeople.com", - "||helpeachpeople.com", - "||helpster.de", - ".helpzhuling.org", - "hentaitube.tv", - ".hentaivideoworld.com", - "||id.heroku.com", - "heqinglian.net", - "||heungkongdiscuss.com", - ".hexieshe.com", - "||hexieshe.com", - "||hexieshe.xyz", - "||hexxeh.net", - "app.heywire.com", - ".heyzo.com", - ".hgseav.com", - ".hhdcb3office.org", - ".hhthesakyatrizin.org", - "hi-on.org.tw", - "hidden-advent.org", - "||hidden-advent.org", - "hidecloud.com/blog/2008/07/29/fuck-beijing-olympics.html", - "||hide.me", - ".hidein.net", - ".hideipvpn.com", - "||hideipvpn.com", - ".hideman.net", - "||hideman.net", - "hideme.nl", - "||hidemy.name", - ".hidemyass.com", - "||hidemyass.com", - "hidemycomp.com", - "||hidemycomp.com", - ".hihiforum.com", - ".hihistory.net", - "||hihistory.net", - ".higfw.com", - "highpeakspureearth.com", - "||highrockmedia.com", - "||hiitch.com", - "||hikinggfw.org", - ".hilive.tv", - ".himalayan-foundation.org", - "himalayanglacier.com", - ".himemix.com", - "||himemix.com", - ".himemix.net", - "times.hinet.net", - ".hitomi.la", - "|http://hitomi.la", - ".hiwifi.com", - "@@||hiwifi.com", - "hizbuttahrir.org", - "hizb-ut-tahrir.info", - "hizb-ut-tahrir.org", - ".hjclub.info", - ".hk-pub.com/forum", - "|http://hk-pub.com", - ".hk01.com", - "||hk01.com", - ".hk32168.com", - "||hk32168.com", - "||hkacg.com", - "||hkacg.net", - ".hkatvnews.com", - "hkbc.net", - ".hkbf.org", - ".hkbookcity.com", - "||hkbookcity.com", - ".hkchurch.org", - "hkci.org.hk", - ".hkcmi.edu", - "||hkcnews.com", - "||hkcoc.com", - "hkday.net", - ".hkdailynews.com.hk/china.php", - "hkdf.org", - ".hkej.com", - ".hkepc.com/forum/viewthread.php?tid=1153322", - "china.hket.com", - "||hkfaa.com", - "hkfreezone.com", - "hkfront.org", - "m.hkgalden.com", - "|https://m.hkgalden.com", - ".hkgreenradio.org/home", - ".hkheadline.com*blog", - ".hkheadline.com/instantnews", - "hkhkhk.com", - "hkhrc.org.hk", - "hkhrm.org.hk", - "||hkip.org.uk", - "1989report.hkja.org.hk", - "hkjc.com", - ".hkjp.org", - ".hklft.com", - ".hklts.org.hk", - "||hklts.org.hk", - "news.hkpeanut.com", - "hkptu.org", - ".hkreporter.com", - "||hkreporter.com", - "|http://hkupop.hku.hk/", - ".hkusu.net", - "||hkusu.net", - ".hkvwet.com", - ".hkwcc.org.hk", - "||hkzone.org", - ".hmonghot.com", - "|http://hmonghot.com", - ".hmv.co.jp/", - "hnjhj.com", - "||hnjhj.com", - ".hnntube.com", - "||hola.com", - "||hola.org", - "holymountaincn.com", - "holyspiritspeaks.org", - "||holyspiritspeaks.org", - "||derekhsu.homeip.net", - ".homeperversion.com", - "|http://homeservershow.com", - "|http://old.honeynet.org/scans/scan31/sub/doug_eric/spam_translation.html", - ".hongkongfp.com", - "||hongkongfp.com", - "hongmeimei.com", - "||hongzhi.li", - ".hootsuite.com", - "||hootsuite.com", - ".hopedialogue.org", - "|http://hopedialogue.org", - ".hopto.org", - ".hornygamer.com", - ".hornytrip.com", - "|http://hornytrip.com", - ".hotav.tv", - ".hotels.cn", - "hotfrog.com.tw", - "hotgoo.com", - ".hotpornshow.com", - "hotpot.hk", - ".hotshame.com", - "||hotspotshield.com", - ".hotvpn.com", - "||hotvpn.com", - "||hougaige.com", - "||howtoforge.com", - "||hoxx.com", - ".hqcdp.org", - "||hqcdp.org", - "||hqjapanesesex.com", - "hqmovies.com", - ".hrcir.com", - ".hrcchina.org", - ".hrea.org", - ".hrichina.org", - "||hrichina.org", - ".hrtsea.com", - ".hrw.org", - "||hrw.org", - "hrweb.org", - "||hsjp.net", - "||hsselite.com", - "|http://hst.net.tw", - ".hstern.net", - ".hstt.net", - ".htkou.net", - "||htkou.net", - ".hua-yue.net", - ".huaglad.com", - "||huaglad.com", - ".huanghuagang.org", - "||huanghuagang.org", - ".huangyiyu.com", - ".huaren.us", - "||huaren.us", - ".huaren4us.com", - ".huashangnews.com", - "|http://huashangnews.com", - "bbs.huasing.org", - "huaxia-news.com", - "huaxiabao.org", - "huaxin.ph", - "||huayuworld.org", - ".huffingtonpost.com/rebiya-kadeer", - "||hugoroy.eu", - "||huhaitai.com", - "||huhamhire.com", - "huiyi.in", - ".hulkshare.com", - "humanrightsbriefing.org", - "||hung-ya.com", - "||hungerstrikeforaids.org", - "||huping.net", - "hurgokbayrak.com", - ".hurriyet.com.tr", - ".hut2.ru", - "||hutianyi.net", - "hutong9.net", - "huyandex.com", - ".hwadzan.tw", - "||hwayue.org.tw", - "||hwinfo.com", - "||hxwk.org", - "hxwq.org", - "||hyperrate.com", - "ebook.hyread.com.tw", - "||ebook.hyread.com.tw", - "||i1.hk", - "||i2p2.de", - "||i2runner.com", - "||i818hk.com", - ".i-cable.com", - ".i-part.com.tw", - ".iamtopone.com", - "iask.ca", - "||iask.ca", - "iask.bz", - "||iask.bz", - ".iav19.com", - "ibiblio.org/pub/packages/ccic", - ".iblist.com", - "||iblogserv-f.net", - "ibros.org", - "|http://cn.ibtimes.com", - ".ibvpn.com", - "||ibvpn.com", - "icams.com", - "blogs.icerocket.com/tag", - ".icij.org", - "||icij.org", - "||icl-fi.org", - ".icoco.com", - "||icoco.com", - "||furbo.org", - "||warbler.iconfactory.net", - "||iconpaper.org", - "||icu-project.org", - "w.idaiwan.com/forum", - "||iddddg.com", - "idemocracy.asia", - ".identi.ca", - "||identi.ca", - "||idiomconnection.com", - "|http://www.idlcoyote.com", - ".idouga.com", - ".idreamx.com", - "forum.idsam.com", - ".idv.tw", - ".ieasy5.com", - "|http://ieasy5.com", - ".ied2k.net", - ".ienergy1.com", - "|http://if.ttt/", - "ifanqiang.com", - ".ifcss.org", - "||ifcss.org", - "ifjc.org", - ".ift.tt", - "|http://ift.tt", - "||ifreewares.com", - "||igcd.net", - ".igfw.net", - "||igfw.net", - ".igfw.tech", - "||igfw.tech", - ".igmg.de", - "||ignitedetroit.net", - ".igotmail.com.tw", - "||igvita.com", - "||ihakka.net", - ".ihao.org/dz5", - "||iicns.com", - ".ikstar.com", - "||illusionfactory.com", - "||ilove80.be", - "||im.tv", - "@@||myvlog.im.tv", - "||im88.tw", - ".imgchili.net", - "|http://imgchili.net", - ".imageab.com", - ".imagefap.com", - "||imagefap.com", - "||imageflea.com", - "imageshack.us", - "||imagevenue.com", - "||imagezilla.net", - ".imb.org", - "|http://imb.org", - "|http://www.imdb.com/name/nm0482730", - ".imdb.com/title/tt0819354", - ".imdb.com/title/tt1540068", - ".imdb.com/title/tt4908644", - ".img.ly", - "||img.ly", - ".imgur.com", - "||imgur.com", - ".imkev.com", - "||imkev.com", - ".imlive.com", - ".immoral.jp", - "impact.org.au", - "impp.mn", - "|http://tech2.in.com/video/", - "in99.org", - "in-disguise.com", - ".incapdns.net", - ".incloak.com", - "||incloak.com", - "||incredibox.fr", - "||indiandefensenews.in", - "timesofindia.indiatimes.com/dalai", - "timesofindia.indiatimes.com/defaultinterstitial.cms", - ".indiemerch.com", - "||indiemerch.com", - "info-graf.fr", - "website.informer.com", - ".initiativesforchina.org", - ".inkui.com", - ".inmediahk.net", - "||inmediahk.net", - "||innermongolia.org", - "|http://blog.inoreader.com", - ".inote.tw", - ".insecam.org", - "|http://insecam.org", - "||insidevoa.com", - ".institut-tibetain.org", - "|http://internet.org/", - "internetdefenseleague.org", - "internetfreedom.org", - "||internetpopculture.com", - ".inthenameofconfuciusmovie.com", - "||inthenameofconfuciusmovie.com", - "inxian.com", - "||inxian.com", - "ipalter.com", - ".ipfire.org", - "||iphone4hongkong.com", - "||iphonehacks.com", - "||iphonetaiwan.org", - "||iphonix.fr", - "||ipicture.ru", - ".ipjetable.net", - "||ipjetable.net", - ".ipobar.com/read.php?", - "ipoock.com/img", - ".iportal.me", - "|http://iportal.me", - "||ippotv.com", - ".ipredator.se", - "||ipredator.se", - ".iptv.com.tw", - "||iptvbin.com", - "||ipvanish.com", - "iredmail.org", - "chinese.irib.ir", - "||ironbigfools.compython.net", - "||ironpython.net", - ".ironsocket.com", - "||ironsocket.com", - ".is.gd", - ".islahhaber.net", - ".islam.org.hk", - "|http://islam.org.hk", - ".islamawareness.net/Asia/China", - ".islamhouse.com", - "||islamhouse.com", - ".islamicity.com", - ".islamicpluralism.org", - ".islamtoday.net", - ".isaacmao.com", - "||isaacmao.com", - "||isgreat.org", - "||ismaelan.com", - ".ismalltits.com", - "||ismprofessional.net", - "isohunt.com", - "||israbox.com", - ".issuu.com", - "||issuu.com", - ".istars.co.nz", - "oversea.istarshine.com", - "||oversea.istarshine.com", - "blog.istef.info/2007/10/21/myentunnel", - ".istiqlalhewer.com", - ".istockphoto.com", - "isunaffairs.com", - "isuntv.com", - "itaboo.info", - "||itaboo.info", - ".italiatibet.org", - "download.ithome.com.tw", - "ithelp.ithome.com.tw", - "||itshidden.com", - ".itsky.it", - ".itweet.net", - "|http://itweet.net", - ".iu45.com", - ".iuhrdf.org", - "||iuhrdf.org", - ".iuksky.com", - ".ivacy.com", - "||ivacy.com", - ".iverycd.com", - ".ivpn.net", - "||ixquick.com", - ".ixxx.com", - "iyouport.com", - "||iyouport.com", - ".izaobao.us", - "||gmozomg.izihost.org", - ".izles.net", - ".izlesem.org", - "||j.mp", - "blog.jackjia.com", - "jamaat.org", - ".jamyangnorbu.com", - "|http://jamyangnorbu.com", - ".jandyx.com", - "||janwongphoto.com", - "||japan-whores.com", - ".jav.com", - ".jav101.com", - ".jav2be.com", - "||jav2be.com", - ".jav68.tv", - ".javakiba.org", - "|http://javakiba.org", - ".javbus.com", - "||javbus.com", - "||javfor.me", - ".javhd.com", - ".javhip.com", - ".javmobile.net", - "|http://javmobile.net", - ".javmoo.com", - ".javseen.com", - "|http://javseen.com", - "jbtalks.cc", - "jbtalks.com", - "jbtalks.my", - ".jdwsy.com", - "jeanyim.com", - "||jfqu36.club", - "||jfqu37.xyz", - "||jgoodies.com", - ".jiangweiping.com", - "||jiangweiping.com", - "||jiaoyou8.com", - ".jiehua.cz", - "||hk.jiepang.com", - "||tw.jiepang.com", - "jieshibaobao.com", - ".jigglegifs.com", - "56cun04.jigsy.com", - "jigong1024.com", - "daodu14.jigsy.com", - "specxinzl.jigsy.com", - "wlcnew.jigsy.com", - ".jihadology.net", - "|http://jihadology.net", - "jinbushe.org", - "||jinbushe.org", - ".jingsim.org", - "zhao.jinhai.de", - "jingpin.org", - "||jingpin.org", - "jinpianwang.com", - ".jinroukong.com", - "ac.jiruan.net", - "||jitouch.com", - ".jizzthis.com", - "jjgirls.com", - ".jkb.cc", - "|http://jkb.cc", - "jkforum.net", - "||jma.go.jp", - "research.jmsc.hku.hk/social", - "weiboscope.jmsc.hku.hk", - ".jmscult.com", - "|http://jmscult.com", - "||joachims.org", - "||jobso.tv", - ".sunwinism.joinbbs.net", - ".journalchretien.net", - "||journalofdemocracy.org", - ".joymiihub.com", - ".joyourself.com", - "jpopforum.net", - "||fiddle.jshell.net", - ".jubushoushen.com", - "||jubushoushen.com", - ".juhuaren.com", - "||juliereyc.com", - "||junauza.com", - ".june4commemoration.org", - ".junefourth-20.net", - "||junefourth-20.net", - "||bbs.junglobal.net", - ".juoaa.com", - "|http://juoaa.com", - "justfreevpn.com", - ".justicefortenzin.org", - "justpaste.it", - "justtristan.com", - "juyuange.org", - "juziyue.com", - "||juziyue.com", - "||jwmusic.org", - "@@||music.jwmusic.org", - ".jyxf.net", - "||k-doujin.net", - "||ka-wai.com", - ".kagyu.org", - "||kagyu.org.za", - ".kagyumonlam.org", - ".kagyunews.com.hk", - ".kagyuoffice.org", - "||kagyuoffice.org", - "||kagyuoffice.org.tw", - ".kaiyuan.de", - ".kakao.com", - "||kakao.com", - ".kalachakralugano.org", - ".kankan.today", - ".kannewyork.com", - "||kannewyork.com", - ".kanshifang.com", - "||kanshifang.com", - "||kantie.org", - "kanzhongguo.com", - "kanzhongguo.eu", - ".kaotic.com", - "||karayou.com", - "karkhung.com", - ".karmapa.org", - ".karmapa-teachings.org", - "||kawase.com", - ".kba-tx.org", - ".kcoolonline.com", - ".kebrum.com", - "||kebrum.com", - ".kechara.com", - ".keepandshare.com/visit/visit_page.php?i=688154", - ".keezmovies.com", - ".kendincos.net", - ".kenengba.com", - "||kenengba.com", - "||keontech.net", - ".kepard.com", - "||kepard.com", - "wiki.keso.cn/Home", - "||keycdn.com", - ".khabdha.org", - ".khmusic.com.tw", - "||kichiku-doujinko.com", - ".kik.com", - "||kik.com", - "bbs.kimy.com.tw", - ".kindleren.com", - "|http://kindleren.com", - "|http://www.kindleren.com", - ".kingdomsalvation.org", - "||kingdomsalvation.org", - "kinghost.com", - "||kingstone.com.tw", - ".kink.com", - ".kinokuniya.com", - "||kinokuniya.com", - "killwall.com", - "||killwall.com", - "||kinmen.travel", - ".kir.jp", - ".kissbbao.cn", - "|http://kiwi.kz", - "||kk-whys.co.jp", - ".kmuh.org.tw", - ".knowledgerush.com/kr/encyclopedia", - ".kobo.com", - "||kobo.com", - ".kobobooks.com", - "||kobobooks.com", - "||kodingen.com", - "@@||www.kodingen.com", - "||kompozer.net", - ".konachan.com", - "|http://konachan.com", - ".kone.com", - "||koolsolutions.com", - ".koornk.com", - "||koornk.com", - "||koranmandarin.com", - ".korenan2.com", - "|http://gojet.krtco.com.tw", - ".ksdl.org", - ".ksnews.com.tw", - "||ktzhk.com", - ".kui.name/event", - "kun.im", - ".kurashsultan.com", - "||kurtmunger.com", - "kusocity.com", - "||kwcg.ca", - "kwongwah.com.my", - ".kxsw.life", - "||kxsw.life", - ".kyofun.com", - "kyohk.net", - "||kyoyue.com", - ".kyzyhello.com", - "||kyzyhello.com", - ".kzeng.info", - "||kzeng.info", - "la-forum.org", - "ladbrokes.com", - "||labiennale.org", - ".lagranepoca.com", - "||lagranepoca.com", - ".lalulalu.com", - ".lama.com.tw", - "||lama.com.tw", - ".lamayeshe.com", - "|http://lamayeshe.com", - "|http://www.lamenhu.com", - ".lamnia.co.uk", - "||lamnia.co.uk", - "lamrim.com", - ".lanterncn.cn", - "|http://lanterncn.cn", - ".lantosfoundation.org", - ".laod.cn", - "|http://laod.cn", - "laogai.org", - "||laogai.org", - "laomiu.com", - ".laoyang.info", - "|http://laoyang.info", - "||laptoplockdown.com", - ".laqingdan.net", - "||laqingdan.net", - "||larsgeorge.com", - ".lastcombat.com", - "|http://lastcombat.com", - "||lastfm.es", - "latelinenews.com", - ".latibet.org", - "||le-vpn.com", - ".leafyvpn.net", - "||leafyvpn.net", - "leeao.com.cn/bbs/forum.php", - "lefora.com", - "||left21.hk", - ".legalporno.com", - ".legsjapan.com", - "|http://leirentv.ca", - "leisurecafe.ca", - "||lematin.ch", - ".lemonde.fr", - "||lenwhite.com", - "lerosua.org", - "||lerosua.org", - "blog.lester850.info", - "||lesoir.be", - ".letou.com", - "letscorp.net", - "||letscorp.net", - "||ss.levyhsu.com", - "||cdn.assets.lfpcontent.com", - ".lhakar.org", - "|http://lhakar.org", - ".lhasocialwork.org", - ".liangyou.net", - "||liangyou.net", - ".lianyue.net", - "||liaowangxizang.net", - ".liaowangxizang.net", - "||liberal.org.hk", - ".libertytimes.com.tw", - "blogs.libraryinformationtechnology.com/jxyz", - ".lidecheng.com/blog/fucking-gfw", - ".lighten.org.tw", - ".lightnovel.cn", - "@@|https://www.lightnovel.cn", - "limiao.net", - "linkuswell.com", - "abitno.linpie.com/use-ipv6-to-fuck-gfw", - "||line.me", - "||line-apps.com", - ".linglingfa.com", - "||lingvodics.com", - ".link-o-rama.com", - "|http://link-o-rama.com", - ".linkideo.com", - "||api.linksalpha.com", - "||apidocs.linksalpha.com", - "||www.linksalpha.com", - "||help.linksalpha.com", - "||linux.org.hk", - "linuxtoy.org/archives/installing-west-chamber-on-ubuntu", - ".lionsroar.com", - ".lipuman.com", - "||liquidvpn.com", - "||greatfire.us7.list-manage.com", - "||listentoyoutube.com", - "listorious.com", - ".liu-xiaobo.org", - "||liudejun.com", - ".liuhanyu.com", - ".liujianshu.com", - "||liujianshu.com", - ".liuxiaobo.net", - "|http://liuxiaobo.net", - "liuxiaotong.com", - "||liuxiaotong.com", - ".livedoor.jp", - ".liveleak.com", - "||liveleak.com", - ".livestation.com", - "livestream.com", - "||livestream.com", - "||livingonline.us", - "||livingstream.com", - "||livevideo.com", - ".livevideo.com", - ".liwangyang.com", - "lizhizhuangbi.com", - "lkcn.net", - ".llss.me/", - ".load.to", - ".lobsangwangyal.com", - ".localdomain.ws", - "||localdomain.ws", - "localpresshk.com", - "||lockestek.com", - "logbot.net", - "||logiqx.com", - "secure.logmein.com", - "||secure.logmein.com", - ".londonchinese.ca", - ".longhair.hk", - "longmusic.com", - "||longtermly.net", - "||lookpic.com", - ".looktoronto.com", - "|http://looktoronto.com", - ".lotsawahouse.org/tibetan-masters/fourteenth-dalai-lama", - ".lotuslight.org.hk", - ".lotuslight.org.tw", - "hkreporter.loved.hk", - "||lpsg.com", - "||lrfz.com", - ".lrip.org", - "||lrip.org", - ".lsd.org.hk", - "||lsd.org.hk", - "lsforum.net", - ".lsm.org", - "||lsm.org", - ".lsmchinese.org", - "||lsmchinese.org", - ".lsmkorean.org", - "||lsmkorean.org", - ".lsmradio.com/rad_archives", - ".lsmwebcast.com", - ".ltn.com.tw", - "||ltn.com.tw", - ".luke54.com", - ".luke54.org", - ".lupm.org", - "||lupm.org", - "||lushstories.com", - "luxebc.com", - "lvhai.org", - "||lvhai.org", - "||lvv2.com", - ".lyfhk.net", - "|http://lyfhk.net", - ".lzmtnews.org", - "||lzmtnews.org", - "http://*.m-team.cc", - ".macrovpn.com", - "macts.com.tw", - "||mad-ar.ch", - "||madrau.com", - "||madthumbs.com", - "||magic-net.info", - "mahabodhi.org", - "my.mail.ru", - ".maiplus.com", - "|http://maiplus.com", - ".maizhong.org", - "makkahnewspaper.com", - ".mamingzhe.com", - "manicur4ik.ru", - ".maplew.com", - "|http://maplew.com", - "||marc.info", - "marguerite.su", - "||martincartoons.com", - "maskedip.com", - ".maiio.net", - ".mail-archive.com", - ".malaysiakini.com", - "||makemymood.com", - ".manchukuo.net", - ".maniash.com", - "|http://maniash.com", - ".mansion.com", - ".mansionpoker.com", - "||martau.com", - "|http://blog.martinoei.com", - ".martsangkagyuofficial.org", - "|http://martsangkagyuofficial.org", - "maruta.be/forget", - ".marxist.com", - "||marxist.net", - ".marxists.org/chinese", - "||matainja.com", - "||mathable.io", - "||mathiew-badimon.com", - "||matsushimakaede.com", - "|http://maturejp.com", - "mayimayi.com", - ".maxing.jp", - ".mcaf.ee", - "|http://mcaf.ee", - "||mcadforums.com", - "mcfog.com", - "mcreasite.com", - ".md-t.org", - "||md-t.org", - "||meansys.com", - ".media.org.hk", - ".mediachinese.com", - "||mediachinese.com", - ".mediafire.com/?", - ".mediafire.com/download", - ".mediafreakcity.com", - "||mediafreakcity.com", - ".medium.com", - "||medium.com", - ".meetav.com", - "||meetup.com", - "mefeedia.com", - "jihadintel.meforum.org", - "||mega.nz", - "||megaproxy.com", - "||megarotic.com", - "megavideo.com", - "||megurineluka.com", - "meirixiaochao.com", - ".meltoday.com", - ".memehk.com", - "||memehk.com", - "memorybbs.com", - ".memri.org", - ".memrijttm.org", - ".mercyprophet.org", - "|http://mercyprophet.org", - "||mergersandinquisitions.org", - ".meridian-trust.org", - "|http://meridian-trust.org", - ".meripet.biz", - "|http://meripet.biz", - ".meripet.com", - "|http://meripet.com", - "merit-times.com.tw", - "meshrep.com", - ".mesotw.com/bbs", - "metacafe.com/watch", - "||meteorshowersonline.com", - "|http://www.metro.taipei/", - ".metrohk.com.hk/?cmd=detail&categoryID=2", - "||metrolife.ca", - ".metroradio.com.hk", - "|http://metroradio.com.hk", - "meyou.jp", - ".meyul.com", - "||mgoon.com", - "||mgstage.com", - "||mh4u.org", - "mhradio.org", - "|http://michaelanti.com", - "||michaelmarketl.com", - "|http://bbs.mikocon.com", - ".microvpn.com", - "|http://microvpn.com", - "middle-way.net", - ".mihk.hk/forum", - ".mihr.com", - "mihua.org", - "||mikesoltys.com", - ".milph.net", - "|http://milph.net", - ".milsurps.com", - "mimiai.net", - ".mimivip.com", - ".mimivv.com", - ".mindrolling.org", - "|http://mindrolling.org", - ".minghui.or.kr", - "|http://minghui.or.kr", - "minghui.org", - "||minghui.org", - "minghui-a.org", - "minghui-b.org", - "minghui-school.org", - ".mingjinglishi.com", - "||mingjinglishi.com", - "mingjingnews.com", - "||mingjingtimes.com", - ".mingpao.com", - "||mingpao.com", - ".mingpaocanada.com", - ".mingpaomonthly.com", - "|http://mingpaomonthly.com", - "mingpaonews.com", - ".mingpaony.com", - ".mingpaosf.com", - ".mingpaotor.com", - ".mingpaovan.com", - ".mingshengbao.com", - ".minhhue.net", - ".miniforum.org", - ".ministrybooks.org", - ".minzhuhua.net", - "||minzhuhua.net", - "minzhuzhanxian.com", - "minzhuzhongguo.org", - "||miroguide.com", - "mirrorbooks.com", - ".mist.vip", - "thecenter.mit.edu", - ".mitao.com.tw", - ".mitbbs.com", - "||mitbbs.com", - "mitbbsau.com", - ".mixero.com", - "||mixero.com", - "mixpod.com", - ".mixx.com", - "||mixx.com", - "||mizzmona.com", - ".mk5000.com", - ".mlcool.com", - "||mlzs.work", - ".mm-cg.com", - "||mmaaxx.com", - ".mmmca.com", - "mnewstv.com", - "||mobatek.net", - ".mobile01.com", - "||mobile01.com", - "||mobileways.de", - ".mobypicture.com", - "|http://moby.to", - "||moeerolibrary.com", - "wiki.moegirl.org", - ".mofaxiehui.com", - ".mofos.com", - "||mog.com", - "molihua.org", - "||mondex.org", - ".money-link.com.tw", - "|http://money-link.com.tw", - "|http://www.monlamit.org", - ".moonbbs.com", - "||moonbbs.com", - "c1522.mooo.com", - "||monitorchina.org", - "bbs.morbell.com", - "||morningsun.org", - "||moroneta.com", - ".motherless.com", - "|http://motherless.com", - "motor4ik.ru", - ".mousebreaker.com", - ".movements.org", - "||movements.org", - "||moviefap.com", - "||www.moztw.org", - ".mp3buscador.com", - "mp3ye.eu", - "||mpettis.com", - "mpfinance.com", - "mpinews.com", - "mponline.hk", - ".mqxd.org", - "|http://mqxd.org", - "mrtweet.com", - "||mrtweet.com", - "news.hk.msn.com", - "news.msn.com.tw", - "msguancha.com", - ".mswe1.org", - "|http://mswe1.org", - "||mthruf.com", - "muchosucko.com", - "||multiply.com", - "multiproxy.org", - "multiupload.com", - ".mullvad.net", - "||mullvad.net", - ".mummysgold.com", - ".murmur.tw", - "|http://murmur.tw", - ".musicade.net", - ".muslimvideo.com", - "||muzi.com", - "||muzi.net", - "||mx981.com", - ".my-formosa.com", - ".my-proxy.com", - ".my-private-network.co.uk", - "||my-private-network.co.uk", - "forum.my903.com", - ".myactimes.com/actimes", - "||myanniu.com", - ".myaudiocast.com", - "||myaudiocast.com", - ".myav.com.tw/bbs", - ".mybbs.us", - ".myca168.com", - ".mycanadanow.com", - "||bbs.mychat.to", - "||mychinamyhome.com", - ".mychinamyhome.com", - ".mychinanet.com", - ".mychinanews.com", - "||mychinanews.com", - ".mychinese.news", - "||mycnnews.com", - "||mykomica.org", - "mycould.com/discuz", - ".myeasytv.com", - "||myeclipseide.com", - ".myforum.com.hk", - "||myforum.com.hk", - "||myforum.com.uk", - ".myfreecams.com", - ".myfreepaysite.com", - ".myfreshnet.com", - ".myiphide.com", - "||myiphide.com", - "forum.mymaji.com", - "mymediarom.com/files/box", - "||mymoe.moe", - "||mymusic.net.tw", - "||myparagliding.com", - "||mypopescu.com", - "myradio.hk/podcast", - ".myreadingmanga.info", - "mysinablog.com", - ".myspace.com", - "||myspacecdn.com", - ".mytalkbox.com", - ".mytizi.com", - "||naacoalition.org", - "old.nabble.com", - "||naitik.net", - ".nakuz.com/bbs", - "||nalandabodhi.org", - "||nalandawest.org", - ".namgyal.org", - "namgyalmonastery.org", - "||namsisi.com", - ".nanyang.com", - "||nanyang.com", - ".nanyangpost.com", - "||nanyangpost.com", - ".nanzao.com", - "||jpl.nasa.gov", - "||pds.nasa.gov", - "||solarsystem.nasa.gov", - ".nakido.com", - "||nakido.com", - ".naol.ca", - ".naol.cc", - "uighur.narod.ru", - ".nat.moe", - "||nat.moe", - "cyberghost.natado.com", - "||national-lottery.co.uk", - "news.nationalgeographic.com/news/2014/06/140603-tiananmen-square", - ".nationsonline.org/oneworld/tibet", - "||line.naver.jp", - "||navyfamily.navy.mil", - "||navyreserve.navy.mil", - "||nko.navy.mil", - "||usno.navy.mil", - "naweeklytimes.com", - ".nbtvpn.com", - "|http://nbtvpn.com", - "nccwatch.org.tw", - ".nch.com.tw", - ".ncn.org", - "||ncn.org", - "||etools.ncol.com", - ".nde.de", - ".ndr.de", - ".ned.org", - "||nekoslovakia.net", - "||nepusoku.com", - "||net-fits.pro", - "bbs.netbig.com", - ".netbirds.com", - "netcolony.com", - "bolin.netfirms.com", - "||netme.cc", - "netsneak.com", - ".network54.com", - "networkedblogs.com", - ".networktunnel.net", - "neverforget8964.org", - "new-3lunch.net", - ".new-akiba.com", - ".new96.ca", - ".newcenturymc.com", - "|http://newcenturymc.com", - "newcenturynews.com", - "||newchen.com", - ".newchen.com", - ".newgrounds.com", - "newipnow.com", - ".newlandmagazine.com.au", - ".newnews.ca", - "news100.com.tw", - "newschinacomment.org", - ".newscn.org", - "||newscn.org", - "newspeak.cc/story", - ".newsancai.com", - "||newsancai.com", - ".newsdetox.ca", - ".newsdh.com", - "||newstamago.com", - "||newstapa.org", - "newstarnet.com", - ".newtaiwan.com.tw", - "newtalk.tw", - "||newtalk.tw", - "newyorktimes.com", - "||nexon.com", - ".next11.co.jp", - ".nextmag.com.tw", - ".nextmedia.com", - "||nexton-net.jp", - "nexttv.com.tw", - ".nfjtyd.com", - "||co.ng.mil", - "||nga.mil", - "ngensis.com", - ".nhentai.net", - "|http://nhentai.net", - ".nhk-ondemand.jp", - ".nicovideo.jp/watch", - "||nicovideo.jp", - "||nighost.org", - "av.nightlife141.com", - "ninecommentaries.com", - ".ninjacloak.com", - "||ninjaproxy.ninja", - "nintendium.com", - "taiwanyes.ning.com", - "usmgtcg.ning.com/forum", - "||niusnews.com", - "||njactb.org", - "njuice.com", - "||njuice.com", - "nlfreevpn.com", - ".ddns.net/", - ".gooddns.info", - "||gotdns.ch", - ".maildns.xyz", - ".no-ip.org", - ".opendn.xyz", - ".servehttp.com", - "sytes.net", - ".whodns.xyz", - ".zapto.org", - "|http://dynupdate.no-ip.com/", - "||nobel.se", - "nobelprize.org/nobel_prizes/peace/laureates/1989", - "nobelprize.org/nobel_prizes/peace/laureates/2010", - "nobodycanstop.us", - "||nobodycanstop.us", - "||nokogiri.org", - "||nokola.com", - "noodlevpn.com", - ".norbulingka.org", - "nordvpn.com", - "||nordvpn.com", - "||novelasia.com", - ".news.now.com", - "|http://news.now.com", - "news.now.com%2Fhome", - "||nownews.com", - ".nowtorrents.com", - ".noypf.com", - "||noypf.com", - "||npa.go.jp", - ".npnt.me", - "|http://npnt.me", - ".nps.gov", - ".nradio.me", - "|http://nradio.me", - ".nrk.no", - "||nrk.no", - ".ntd.tv", - "||ntd.tv", - ".ntdtv.com", - "||ntdtv.com", - ".ntdtv.co.kr", - "ntdtv.ca", - "ntdtv.org", - "ntdtv.ru", - "ntdtvla.com", - ".ntrfun.com", - "||cbs.ntu.edu.tw", - "||media.nu.nl", - ".nubiles.net", - "||nuexpo.com", - ".nukistream.com", - "||nurgo-software.com", - "||nutaku.net", - ".nuvid.com", - "||nvdst.com", - "nuzcom.com", - ".nvquan.org", - ".nvtongzhisheng.org", - "|http://nvtongzhisheng.org", - ".nwtca.org", - "|http://nyaa.eu", - "||nyaa.si", - ".nydus.ca", - "nylon-angel.com", - "nylonstockingsonline.com", - ".nzchinese.com", - "||nzchinese.net.nz", - "observechina.net", - ".obutu.com", - "ocaspro.com", - "occupytiananmen.com", - "oclp.hk", - ".ocreampies.com", - "||october-review.org", - "offbeatchina.com", - "officeoftibet.com", - "|http://ofile.org", - "||ogaoga.org", - "twtr2src.ogaoga.org", - ".ogate.org", - "||ogate.org", - "www2.ohchr.org/english/bodies/cat/docs/ngos/II_China_41.pdf", - ".oikos.com.tw/v4", - ".oiktv.com", - "oizoblog.com", - ".ok.ru", - "||ok.ru", - ".okayfreedom.com", - "||okayfreedom.com", - "okk.tw", - "|http://filmy.olabloga.pl/player", - "old-cat.net", - "||olumpo.com", - ".olympicwatch.org", - "omgili.com", - "||omnitalk.com", - "||omnitalk.org", - "cling.omy.sg", - "forum.omy.sg", - "news.omy.sg", - "showbiz.omy.sg", - "||on.cc", - "||onedrive.live.com", - "||onion.city", - ".onlinecha.com", - "||onlineyoutube.com", - ".onlytweets.com", - "|http://onlytweets.com", - "onmoon.net", - "onmoon.com", - ".onthehunt.com", - "|http://onthehunt.com", - ".oopsforum.com", - "open.com.hk", - "openallweb.com", - "opendemocracy.net", - "||opendemocracy.net", - ".openervpn.in", - "openid.net", - "||openid.net", - ".openleaks.org", - "||openleaks.org", - "openvpn.net", - "||openvpn.net", - "||openwebster.com", - ".openwrt.org.cn", - "@@||openwrt.org.cn", - "my.opera.com/dahema", - "||demo.opera-mini.net", - ".opus-gaming.com", - "|http://opus-gaming.com", - "www.orchidbbs.com", - ".organcare.org.tw", - "organharvestinvestigation.net", - ".orgasm.com", - ".orgfree.com", - "||orient-doll.com", - "orientaldaily.com.my", - "||orientaldaily.com.my", - "||orn.jp", - "t.orzdream.com", - "||t.orzdream.com", - "tui.orzdream.com", - "||orzistic.org", - "||osfoora.com", - ".otnd.org", - "||otnd.org", - "||otto.de", - "||ourdearamy.com", - "oursogo.com", - ".oursteps.com.au", - "||oursteps.com.au", - ".oursweb.net", - "||ourtv.hk", - "xinqimeng.over-blog.com", - "||overplay.net", - "share.ovi.com/media", - "|http://owl.li", - "|http://ht.ly", - "|http://htl.li", - "|http://mash.to", - "www.owind.com", - "|http://www.oxid.it", - "oyax.com", - "oyghan.com/wps", - ".ozchinese.com/bbs", - "||ow.ly", - "bbs.ozchinese.com", - ".ozvoice.org", - "||ozvoice.org", - ".ozxw.com", - ".ozyoyo.com", - "||pachosting.com", - ".pacificpoker.com", - ".packetix.net", - "||pacopacomama.com", - ".padmanet.com", - "page2rss.com", - "||pagodabox.com", - ".palacemoon.com", - "forum.palmislife.com", - "||eriversoft.com", - ".paldengyal.com", - "paljorpublications.com", - ".paltalk.com", - "||pandapow.co", - ".pandapow.net", - ".pandavpn-jp.com", - ".panluan.net", - "||panluan.net", - "||pao-pao.net", - "paper.li", - "paperb.us", - ".paradisehill.cc", - ".paradisepoker.com", - ".partycasino.com", - ".partypoker.com", - ".passion.com", - "||passion.com", - ".passiontimes.hk", - "pastebin.com", - ".pastie.org", - "||pastie.org", - "||blog.pathtosharepoint.com", - "pbs.org/wgbh/pages/frontline/gate", - "pbs.org/wgbh/pages/frontline/tankman", - "pbs.org/wgbh/pages/frontline/tibet", - "video.pbs.org", - "pbwiki.com", - "||pbworks.com", - "||developers.box.net", - "||wiki.oauth.net", - "||wiki.phonegap.com", - "||wiki.jqueryui.com", - "||pbxes.com", - "||pbxes.org", - "pcdvd.com.tw", - ".pchome.com.tw", - "|http://pcij.org", - ".pcstore.com.tw", - "||pct.org.tw", - "pdetails.com", - "||pdproxy.com", - "||peace.ca", - "peacefire.org", - "peacehall.com", - "||peacehall.com", - "|http://pearlher.org", - ".peeasian.com", - ".pekingduck.org", - "||pekingduck.org", - ".pemulihan.or.id", - "|http://pemulihan.or.id", - "||pen.io", - "penchinese.com", - "||penchinese.net", - ".penchinese.net", - "pengyulong.com", - "penisbot.com", - "||blog.pentalogic.net", - ".penthouse.com", - ".pentoy.hk/%E4%B8%AD%E5%9C%8B", - ".pentoy.hk/%E6%99%82%E4%BA%8B", - ".peoplebookcafe.com", - ".peoplenews.tw", - "||peoplenews.tw", - ".peopo.org", - "||peopo.org", - ".percy.in", - ".perfectgirls.net", - "perfectvpn.net", - ".persecutionblog.com", - ".persiankitty.com", - "pfd.org.hk", - "phapluan.org", - "phayul.com", - "philborges.com", - "philly.com", - "||phncdn.com", - "||photodharma.net", - "||photofocus.com", - "||phuquocservices.com", - "||picacomiccn.com", - ".picidae.net", - "||img*.picturedip.com", - "picturesocial.com", - "||pin-cong.com", - ".pin6.com", - "||pin6.com", - ".ping.fm", - "||ping.fm", - "||pinimg.com", - ".pinkrod.com", - "||pinoy-n.com", - "||pinterest.at", - "||pinterest.ca", - "||pinterest.co.kr", - "||pinterest.co.uk", - ".pinterest.com", - "||pinterest.com", - "||pinterest.de", - "||pinterest.dk", - "||pinterest.fr", - "||pinterest.jp", - "||pinterest.nl", - "||pinterest.se", - ".pipii.tv", - ".piposay.com", - "piraattilahti.org", - ".piring.com", - "||pixelqi.com", - "||css.pixnet.in", - "||pixnet.net", - ".pixnet.net", - ".pk.com", - "||placemix.com", - "|http://pictures.playboy.com", - "||playboy.com", - ".playboyplus.com", - "||playboyplus.com", - "||player.fm", - ".playno1.com", - "||playno1.com", - "||playpcesor.com", - "plays.com.tw", - "||m.plixi.com", - "plm.org.hk", - "plunder.com", - ".plurk.com", - "||plurk.com", - ".plus28.com", - ".plusbb.com", - ".pmatehunter.com", - "|http://pmatehunter.com", - ".pmates.com", - "||po2b.com", - "pobieramy.top", - "||podictionary.com", - ".pokerstars.com", - "||pokerstars.com", - ".pokerstars.net", - "zh.pokerstrategy.com", - "politicalchina.org", - "politicalconsultation.org", - ".politiscales.net", - "||poloniex.com", - ".polymerhk.com", - "|http://polymerhk.com", - ".popo.tw", - "||popvote.hk", - ".popyard.com", - "||popyard.org", - ".porn.com", - ".porn2.com", - ".porn5.com", - ".pornbase.org", - ".pornerbros.com", - "||pornhd.com", - ".pornhost.com", - ".pornhub.com", - "||pornhub.com", - ".pornhubdeutsch.net", - "|http://pornhubdeutsch.net", - "||pornmm.net", - ".pornoxo.com", - ".pornrapidshare.com", - "||pornrapidshare.com", - ".pornsharing.com", - "|http://pornsharing.com", - ".pornsocket.com", - ".pornstarclub.com", - "||pornstarclub.com", - ".porntube.com", - ".porntubenews.com", - ".porntvblog.com", - "||porntvblog.com", - ".pornvisit.com", - ".portablevpn.nl", - "||poskotanews.com", - ".post01.com", - ".post76.com", - "||post76.com", - ".post852.com", - "postadult.com", - ".postimg.org", - "||potvpn.com", - "||powercx.com", - ".powerphoto.org", - "||www.powerpointninja.com", - "||presidentlee.tw", - "||cdn.printfriendly.com", - ".pritunl.com", - "provpnaccounts.com", - "||provpnaccounts.com", - ".proxfree.com", - "||proxfree.com", - "proxyanonimo.es", - ".proxynetwork.org.uk", - "||proxynetwork.org.uk", - "||pts.org.tw", - ".pttvan.org", - "pubu.com.tw", - "puffinbrowser.com", - "pureinsight.org", - ".pushchinawall.com", - ".putty.org", - "||putty.org", - "||calebelston.com", - "||blog.fizzik.com", - "||nf.id.au", - "||sogrady.me", - "||vatn.org", - "||ventureswell.com", - "||whereiswerner.com", - ".power.com", - "||power.com", - "powerapple.com", - "||powerapple.com", - "||abc.pp.ru", - "heix.pp.ru", - "||prayforchina.net", - "||premeforwindows7.com", - "||presentationzen.com", - "||prestige-av.com", - "prisoner-state-secret-journal-premier", - ".prisoneralert.com", - "||pritunl.com", - "||privacybox.de", - ".private.com/home", - "||privateinternetaccess.com", - "privatepaste.com", - "||privatepaste.com", - "privatetunnel.com", - "||privatetunnel.com", - "||privatevpn.com", - "||procopytips.com", - "provideocoalition.com", - "||prosiben.de", - "proxifier.com", - "api.proxlet.com", - "||proxomitron.info", - ".proxpn.com", - "||proxpn.com", - ".proxylist.org.uk", - "||proxylist.org.uk", - ".proxypy.net", - "||proxypy.net", - "proxyroad.com", - ".proxytunnel.net", - "||proyectoclubes.com", - "prozz.net", - "psblog.name", - "||psblog.name", - "||psiphon.ca", - ".psiphon3.com", - "||psiphon3.com", - ".psiphontoday.com", - ".ptt.cc", - "||ptt.cc", - ".puffstore.com", - ".puuko.com", - "||pullfolio.com", - ".punyu.com/puny", - "||pureconcepts.net", - "||pureinsight.org", - "||purepdf.com", - "||purevpn.com", - ".purplelotus.org", - ".pursuestar.com", - "||pursuestar.com", - ".pussyspace.com", - ".putihome.org", - ".putlocker.com/file", - "pwned.com", - "python.com", - ".python.com.tw", - "|http://python.com.tw", - "pythonhackers.com/p", - "ss.pythonic.life/", - ".qanote.com", - "||qanote.com", - ".qgirl.com.tw", - "||qiandao.today", - ".qi-gong.me", - "||qi-gong.me", - "||qiangyou.org", - ".qidian.ca", - ".qienkuen.org", - "||qienkuen.org", - "||qiwen.lu", - "qixianglu.cn", - "bbs.qmzdd.com", - ".qkshare.com", - "qoos.com", - "||qoos.com", - "blog.qooza.hk/dafengqixi", - "||efksoft.com", - "||qstatus.com", - "||qtweeter.com", - "||qtrac.eu", - ".quannengshen.org", - "|http://quannengshen.org", - "quantumbooter.net", - "||quitccp.net", - ".quitccp.net", - "||quitccp.org", - ".quitccp.org", - ".quora.com/Chinas-Future", - ".quran.com", - "|http://quran.com", - ".quranexplorer.com", - "qusi8.net", - ".qvodzy.org", - "nemesis2.qx.net/pages/MyEnTunnel", - "qxbbs.org", - ".ra.gg", - "|http://ra.gg/", - ".radicalparty.org", - "||rael.org", - "radicalparty.org", - "radioaustralia.net.au", - ".radiohilight.net", - "||radiohilight.net", - "opml.radiotime.com", - "||radiovaticana.org", - "||radiovncr.com", - "||raggedbanner.com", - "||raidcall.com.tw", - ".raidtalk.com.tw", - ".rainbowplan.org/bbs", - "|https://raindrop.io/", - ".raizoji.or.jp", - "|http://raizoji.or.jp", - "rangwang.biz", - "rangzen.com", - "rangzen.net", - "rangzen.org", - "|http://blog.ranxiang.com/", - "ranyunfei.com", - "||ranyunfei.com", - ".rapbull.net", - "|http://rapidgator.net/", - "||rapidmoviez.com", - "rapidvpn.com", - "||rapidvpn.com", - "||rarbgprx.org", - ".raremovie.cc", - "|http://raremovie.cc", - ".raremovie.net", - "|http://raremovie.net", - "||rawgit.com", - "||rawgithub.com", - "||razyboard.com", - "rcinet.ca", - ".read100.com", - ".readingtimes.com.tw", - "||readingtimes.com.tw", - "||readmoo.com", - ".readydown.com", - "|http://readydown.com", - ".realcourage.org", - ".realitykings.com", - "||realitykings.com", - ".realraptalk.com", - ".realsexpass.com", - ".recordhistory.org", - ".recovery.org.tw", - "|http://online.recoveryversion.org", - "||recoveryversion.com.tw", - "||red-lang.org", - "redballoonsolidarity.org", - ".redchinacn.net", - "|http://redchinacn.net", - "redchinacn.org", - "redtube.com", - "referer.us", - "||referer.us", - "||reflectivecode.com", - "relaxbbs.com", - ".relay.com.tw", - ".releaseinternational.org", - "religioustolerance.org", - "renminbao.com", - "||renminbao.com", - ".renyurenquan.org", - "||renyurenquan.org", - "|http://certificate.revocationcheck.com", - "subacme.rerouted.org", - "||resilio.com", - ".reuters.com", - "||reuters.com", - "||reutersmedia.net", - ".revleft.com", - "retweetist.com", - "||retweetrank.com", - "revver.com", - ".rfa.org", - "||rfa.org", - ".rfachina.com", - ".rfamobile.org", - "rfaweb.org", - "||rferl.org", - ".rfi.fr", - "||rfi.fr", - "|http://rfi.my/", - "|http://vds.rightster.com/", - ".rigpa.org", - ".rileyguide.com", - "riku.me/", - ".ritouki.jp", - "||ritter.vg", - ".rlwlw.com", - "||rlwlw.com", - ".rmjdw.com", - ".rmjdw132.info", - ".roadshow.hk", - ".roboforex.com", - "||robustnessiskey.com", - "||rocket-inc.net", - "|http://www2.rocketbbs.com/11/bbs.cgi?id=5mus", - "|http://www2.rocketbbs.com/11/bbs.cgi?id=freemgl", - "||rojo.com", - "||ronjoneswriter.com", - "||rolia.net", - ".roodo.com", - ".rosechina.net", - ".rotten.com", - ".rsf.org", - "||rsf.org", - ".rsf-chinese.org", - "||rsf-chinese.org", - ".rsgamen.org", - "||phosphation13.rssing.com", - ".rssmeme.com", - "||rssmeme.com", - "||rtalabel.org", - ".rthk.hk", - "|http://rthk.hk", - ".rthk.org.hk", - "|http://rthk.org.hk", - ".rti.org.tw", - "||rti.org.tw", - ".rtycminnesota.org", - ".ruanyifeng.com/blog*some_ways_to_break_the_great_firewall", - "rukor.org", - ".runbtx.com", - ".rushbee.com", - ".ruten.com.tw", - "rutube.ru", - ".ruyiseek.com", - ".rxhj.net", - "|http://rxhj.net", - ".s1s1s1.com", - "||s-cute.com", - ".s-dragon.org", - "||s1heng.com", - "|http://www.s4miniarchive.com", - "||s8forum.com", - "cdn1.lp.saboom.com", - "||sacks.com", - "sacom.hk", - "||sacom.hk", - "||sadpanda.us", - ".safervpn.com", - "||safervpn.com", - ".saintyculture.com", - "|http://saintyculture.com", - ".saiq.me", - "||saiq.me", - "||sakuralive.com", - ".sakya.org", - ".salvation.org.hk", - "||salvation.org.hk", - ".samair.ru/proxy/type-01", - ".sambhota.org", - ".cn.sandscotaicentral.com", - "|http://cn.sandscotaicentral.com", - ".sanmin.com.tw", - "sapikachu.net", - "savemedia.com", - "||savethesounds.info", - ".savetibet.de", - "||savetibet.de", - "savetibet.fr", - "savetibet.nl", - ".savetibet.org", - "||savetibet.org", - "savetibet.ru", - ".savetibetstore.org", - "||savetibetstore.org", - "savevid.com", - "||say2.info", - ".sbme.me", - "|http://sbme.me", - ".sbs.com.au/yourlanguage", - ".scasino.com", - "|http://www.sciencemag.org/content/344/6187/953", - ".sciencenets.com", - ".scmp.com", - "||scmp.com", - ".scmpchinese.com", - "||scramble.io", - ".scribd.com", - "||scribd.com", - "||scriptspot.com", - "seapuff.com", - "domainhelp.search.com", - ".searchtruth.com", - "secretchina.com", - "||secretchina.com", - "||secretgarden.no", - ".secretsline.biz", - "||secretsline.biz", - "||securetunnel.com", - "securityinabox.org", - "|https://securityinabox.org", - ".securitykiss.com", - "||securitykiss.com", - "||seed4.me", - "news.seehua.com", - "seesmic.com", - "||seevpn.com", - "||seezone.net", - "sejie.com", - ".sendspace.com", - "|http://tweets.seraph.me/", - "sesawe.net", - "||sesawe.net", - ".sesawe.org", - "||sethwklein.net", - ".setn.com", - ".settv.com.tw", - "forum.setty.com.tw", - ".sevenload.com", - "||sevenload.com", - ".sex.com", - ".sex-11.com", - "||sex3.com", - "||sex8.cc", - ".sexandsubmission.com", - ".sexbot.com", - ".sexhu.com", - ".sexhuang.com", - "sexinsex.net", - "||sexinsex.net", - ".sextvx.com", - "67.220.91.15", - "67.220.91.18", - "67.220.91.23", - "|http://*.sf.net", - ".sfileydy.com", - "||sfshibao.com", - ".sftindia.org", - ".sftuk.org", - "||sftuk.org", - "||shadeyouvpn.com", - "shadow.ma", - ".shadowsky.xyz", - ".shadowsocks.asia", - "||www.shadowsocks.com", - ".shadowsocks.com", - "||shadowsocks.com.hk", - ".shadowsocks.org", - "||shadowsocks.org", - "||shadowsocks-r.com", - "|http://cn.shafaqna.com", - ".shambalapost.com", - ".shambhalasun.com", - ".shangfang.org", - "||shangfang.org", - "shapeservices.com", - ".sharebee.com", - "||sharecool.org", - "sharpdaily.com.hk", - "||sharpdaily.com.hk", - ".sharpdaily.hk", - ".sharpdaily.tw", - ".shat-tibet.com", - "sheikyermami.com", - ".shellfire.de", - "||shellfire.de", - ".shenshou.org", - "shenyun.com", - "shenyunperformingarts.org", - "||shenyunperformingarts.org", - "shenzhoufilm.com", - "||shenzhoufilm.com", - "||sherabgyaltsen.com", - ".shiatv.net", - ".shicheng.org", - "shinychan.com", - "shipcamouflage.com", - ".shireyishunjian.com", - ".shitaotv.org", - "||shixiao.org", - "||shizhao.org", - "shizhao.org", - "shkspr.mobi/dabr", - "||shodanhq.com", - "||shooshtime.com", - ".shop2000.com.tw", - ".shopping.com", - ".showhaotu.com", - ".showtime.jp", - ".shutterstock.com", - "||shutterstock.com", - "ch.shvoong.com", - ".shwchurch.org", - "||www.shwchurch.org", - ".shwchurch3.com", - "|http://shwchurch3.com", - ".siddharthasintent.org", - "||sidelinesnews.com", - ".sidelinessportseatery.com", - ".sijihuisuo.club", - ".sijihuisuo.com", - ".silkbook.com", - "||simbolostwitter.com", - "simplecd.org", - "||simplecd.org", - "@@||simplecd.me", - "simpleproductivityblog.com", - "bbs.sina.com/", - "bbs.sina.com%2F", - "blog.sina.com.tw", - "dailynews.sina.com/", - "dailynews.sina.com%2F", - "forum.sina.com.hk", - "home.sina.com", - "||magazines.sina.com.tw", - "news.sina.com.hk", - "news.sina.com.tw", - "news.sinchew.com.my", - ".sinchew.com.my/node/", - ".sinchew.com.my/taxonomy/term", - ".singaporepools.com.sg", - "||singaporepools.com.sg", - ".singfortibet.com", - ".singpao.com.hk", - "singtao.com", - "||singtao.com", - "news.singtao.ca", - ".singtaousa.com", - "||singtaousa.com", - "sino-monthly.com", - "||sinocast.com", - "sinocism.com", - "sinomontreal.ca", - ".sinonet.ca", - ".sinopitt.info", - ".sinoants.com", - "||sinoants.com", - ".sinoquebec.com", - ".sierrafriendsoftibet.org", - "sis.xxx", - "||sis001.com", - "sis001.us", - ".site2unblock.com", - "||site90.net", - ".sitebro.tw", - "||sitekreator.com", - "||siteks.uk.to", - "||sitemaps.org", - ".sjrt.org", - "|http://sjrt.org", - "||sjum.cn", - "||sketchappsources.com", - "||skimtube.com", - "||skybet.com", - "|http://users.skynet.be/reves/tibethome.html", - ".skyking.com.tw", - "bbs.skykiwi.com", - "|http://www.skype.com/intl/", - "|http://www.skype.com/zh-Hant", - "||skyvegas.com", - ".xskywalker.com", - "||xskywalker.com", - "||skyxvpn.com", - "m.slandr.net", - ".slaytizle.com", - ".sleazydream.com", - "||slheng.com", - "||slideshare.net", - "forum.slime.com.tw", - ".slinkset.com", - "||slickvpn.com", - ".slutload.com", - "||smartdnsproxy.com", - ".smarthide.com", - "||app.smartmailcloud.com", - "smchbooks.com", - ".smh.com.au/world/death-of-chinese-playboy-leaves-fresh-scratches-in-party-paintwork-20120903-25a8v", - "smhric.org", - ".smith.edu/dalailama", - ".smyxy.org", - "||snapchat.com", - ".snaptu.com", - "||snaptu.com", - "||sndcdn.com", - "sneakme.net", - "snowlionpub.com", - "home.so-net.net.tw/yisa_tsai", - "||soc.mil", - ".socks-proxy.net", - "||socks-proxy.net", - ".sockscap64.com", - "||sockslist.net", - ".socrec.org", - "|http://socrec.org", - ".sod.co.jp", - ".softether.org", - "||softether.org", - ".softether-download.com", - "||softether-download.com", - "||cdn.softlayer.net", - "||sogclub.com", - "sohcradio.com", - "||sohcradio.com", - ".sokmil.com", - "||sorting-algorithms.com", - ".sostibet.org", - ".soumo.info", - "||soup.io", - "@@||static.soup.io", - ".sobees.com", - "||sobees.com", - "socialwhale.com", - ".softether.co.jp", - "||softwarebychuck.com", - "blog.sogoo.org", - "soh.tw", - "||soh.tw", - "sohfrance.org", - "||sohfrance.org", - "chinese.soifind.com", - "sokamonline.com", - ".solidaritetibet.org", - ".solidfiles.com", - "||somee.com", - ".songjianjun.com", - "||songjianjun.com", - ".sonicbbs.cc", - ".sonidodelaesperanza.org", - ".sopcast.com", - ".sopcast.org", - ".sorazone.net", - "||sos.org", - "bbs.sou-tong.org", - ".soubory.com", - "|http://soubory.com", - ".soul-plus.net", - ".soulcaliburhentai.net", - "||soulcaliburhentai.net", - "||soundcloud.com", - ".soundofhope.kr", - "soundofhope.org", - "||soundofhope.org", - "||soupofmedia.com", - "|http://sourceforge.net/p*/shadowsocksgui/", - ".sourcewadio.com", - "southnews.com.tw", - "sowers.org.hk", - "||wlx.sowiki.net", - "||spankbang.com", - ".spankingtube.com", - ".spankwire.com", - "||spb.com", - "||speakerdeck.com", - "||speedify.com", - "spem.at", - "||spencertipping.com", - "||spendee.com", - "||spicevpn.com", - ".spideroak.com", - "||spideroak.com", - ".spike.com", - ".spotflux.com", - "||spotflux.com", - ".spring4u.info", - "|http://spring4u.info", - "||sproutcore.com", - "||sproxy.info", - "||srocket.us", - ".ss-link.com", - "||ss-link.com", - ".ssglobal.co/wp", - "|http://ssglobal.co", - ".ssglobal.me", - "||ssh91.com", - ".sspro.ml", - "|http://sspro.ml", - ".ssrshare.com", - "||ssrshare.com", - "||sss.camp", - "||sstmlt.moe", - "sstmlt.net", - "||sstmlt.net", - "|http://stackoverflow.com/users/895245", - ".stage64.hk", - "||stage64.hk", - "||standupfortibet.org", - "stanford.edu/group/falun", - "usinfo.state.gov", - "||statueofdemocracy.org", - ".starfishfx.com", - ".starp2p.com", - "||starp2p.com", - ".startpage.com", - "||startpage.com", - ".startuplivingchina.com", - "|http://startuplivingchina.com", - "||static-economist.com", - "||stc.com.sa", - "||steel-storm.com", - ".steganos.com", - "||steganos.com", - ".steganos.net", - ".stepchina.com", - "ny.stgloballink.com", - "hd.stheadline.com/news/realtime", - "sthoo.com", - "||sthoo.com", - ".stickam.com", - "stickeraction.com/sesawe", - ".stileproject.com", - ".sto.cc", - ".stoporganharvesting.org", - "||storagenewsletter.com", - ".storm.mg", - "||storm.mg", - ".stoptibetcrisis.net", - "||stoptibetcrisis.net", - "||storify.com", - ".stormmediagroup.com", - "||stoweboyd.com", - "stranabg.com", - "||straplessdildo.com", - "||streamingthe.net", - "streema.com/tv/NTDTV_Chinese", - "cn.streetvoice.com/article", - "cn.streetvoice.com/diary", - "cn2.streetvoice.com", - "tw.streetvoice.com", - ".strikingly.com", - "||strongvpn.com", - ".strongwindpress.com", - ".student.tw/db", - "||studentsforafreetibet.org", - "||stumbleupon.com", - "stupidvideos.com", - ".successfn.com", - "panamapapers.sueddeutsche.de", - ".sugarsync.com", - "||sugarsync.com", - ".sugobbs.com", - "||sugumiru18.com", - "||suissl.com", - "summify.com", - ".sumrando.com", - "||sumrando.com", - "sun1911.com", - ".sunporno.com", - "||sunmedia.ca", - "||sunporno.com", - ".sunskyforum.com", - ".sunta.com.tw", - ".sunvpn.net", - ".suoluo.org", - ".superfreevpn.com", - ".supervpn.net", - "||supervpn.net", - ".superzooi.com", - "|http://superzooi.com", - ".suppig.net", - ".suprememastertv.com", - "|http://suprememastertv.com", - ".surfeasy.com", - "||surfeasy.com", - ".surfeasy.com.au", - "|http://surfeasy.com.au", - "||surrenderat20.net", - ".suyangg.com", - "|http://suyangg.com", - ".svsfx.com", - ".swissinfo.ch", - "||swissinfo.ch", - ".swissvpn.net", - "||swissvpn.net", - "switchvpn.net", - "||switchvpn.net", - ".sydneytoday.com", - "||sydneytoday.com", - ".sylfoundation.org", - "||syncback.com", - "sysresccd.org", - ".sytes.net", - "blog.syx86.com/2009/09/puff", - "blog.syx86.cn/2009/09/puff", - ".szbbs.net", - ".szetowah.org.hk", - "||t-g.com", - ".t35.com", - ".t66y.com", - "||t66y.com", - ".taa-usa.org", - "|http://taa-usa.org", - ".taaze.tw", - "||taaze.tw", - "|http://www.tablesgenerator.com/", - "tabtter.jp", - ".tacem.org", - ".taconet.com.tw", - "||taedp.org.tw", - ".tafm.org", - ".tagwa.org.au", - "tagwalk.com", - "||tagwalk.com", - "tahr.org.tw", - ".taipeisociety.org", - "||taipeisociety.org", - ".taiwanbible.com", - ".taiwancon.com", - ".taiwandaily.net", - "||taiwandaily.net", - ".taiwandc.org", - ".taiwanjustice.com", - "taiwankiss.com", - "taiwannation.com", - "taiwannation.com.tw", - "||taiwanncf.org.tw", - "||taiwannews.com.tw", - "|http://www.taiwanonline.cc/", - "taiwantp.net", - "||taiwantt.org.tw", - "taiwanus.net", - "taiwanyes.com", - "taiwan-sex.com", - ".talk853.com", - ".talkboxapp.com", - "||talkboxapp.com", - ".talkcc.com", - "||talkcc.com", - ".talkonly.net", - "||talkonly.net", - "||tamiaode.tk", - "||tanc.org", - "tangben.com", - ".tangren.us", - ".taoism.net", - "|http://taoism.net", - ".taolun.info", - "||taolun.info", - ".tapatalk.com", - "||tapatalk.com", - "blog.taragana.com", - ".tascn.com.au", - "||taup.net", - "|http://www.taup.org.tw", - ".taweet.com", - "||taweet.com", - ".tbcollege.org", - "||tbcollege.org", - ".tbi.org.hk", - ".tbicn.org", - ".tbjyt.org", - "||tbpic.info", - ".tbrc.org", - "tbs-rainbow.org", - ".tbsec.org", - "||tbsec.org", - "tbskkinabalu.page.tl", - ".tbsmalaysia.org", - ".tbsn.org", - "||tbsn.org", - ".tbsseattle.org", - ".tbssqh.org", - "|http://tbssqh.org", - "tbswd.org", - ".tbtemple.org.uk", - ".tbthouston.org", - ".tccwonline.org", - ".tcewf.org", - "tchrd.org", - "tcnynj.org", - "||tcpspeed.co", - ".tcpspeed.com", - "||tcpspeed.com", - ".tcsofbc.org", - ".tcsovi.org", - ".tdm.com.mo", - "teamamericany.com", - "||techviz.net", - "||teck.in", - ".teeniefuck.net", - "teensinasia.com", - ".telecomspace.com", - "||telegraph.co.uk", - ".tenacy.com", - "||tenzinpalmo.com", - ".tew.org", - ".thaicn.com", - "||theatrum-belli.com", - "theblemish.com", - "||thebcomplex.com", - ".thebobs.com", - "||thebobs.com", - ".thechinabeat.org", - "|http://www.thechinastory.org/yearbooks/yearbook-2012/", - ".thedalailamamovie.com", - "|http://thedalailamamovie.com", - "||thedw.us", - "thefrontier.hk/tf", - "cn.thegay.com", - "|http://thegioitinhoc.vn/", - ".thegly.com", - ".thehots.info", - "thehousenews.com", - "||thehun.net", - ".theinitium.com", - "||theinitium.com", - ".thenewslens.com", - "||thenewslens.com", - ".thepiratebay.org", - "||thepiratebay.org", - ".theporndude.com", - "||theporndude.com", - "||theportalwiki.com", - "thereallove.kr", - "therock.net.nz", - "thespeeder.com", - "||thestandnews.com", - "thetibetcenter.org", - "thetibetconnection.org", - ".thetibetmuseum.org", - ".thetibetpost.com", - "||thetibetpost.com", - "||thetinhat.com", - "thetrotskymovie.com", - "thevivekspot.com", - "||thewgo.org", - ".theync.com", - "|http://theync.com", - ".thinkingtaiwan.com", - ".thisav.com", - "|http://thisav.com", - ".thlib.org", - "||thomasbernhard.org", - ".thongdreams.com", - "threatchaos.com", - "||throughnightsfire.com", - ".thumbzilla.com", - "||thywords.com", - ".thywords.com.tw", - "tiananmenmother.org", - ".tiananmenduizhi.com", - "||tiananmenduizhi.com", - "||tiananmenuniv.com", - "||tiananmenuniv.net", - "||tiandixing.org", - ".tianhuayuan.com", - ".tianlawoffice.com", - "||tianti.io", - "tiantibooks.org", - "||tiantibooks.org", - "tianyantong.org.cn", - ".tianzhu.org", - ".tibet.at", - "tibet.ca", - ".tibet.com", - "||tibet.com", - "tibet.fr", - ".tibet.net", - "||tibet.net", - "tibet.nu", - ".tibet.org", - "||tibet.org", - ".tibet.sk", - "tibet.org.tw", - ".tibet.to", - ".tibet-envoy.eu", - "||tibet-envoy.eu", - ".tibet-foundation.org", - ".tibet-house-trust.co.uk", - "tibet-info.net", - "tibet-initiative.de", - "||tibet-initiative.de", - ".tibet-munich.de", - ".tibet3rdpole.org", - "|http://tibet3rdpole.org", - "tibetaction.net", - "||tibetaction.net", - ".tibetaid.org", - "tibetalk.com", - ".tibetan.fr", - "tibetan-alliance.org", - ".tibetanarts.org", - ".tibetanbuddhistinstitute.org", - "|http://tibetanbuddhistinstitute.org", - "tibetancommunity.org", - ".tibetanjournal.com", - ".tibetanlanguage.org", - ".tibetanliberation.org", - "||tibetanliberation.org", - ".tibetcollection.com", - ".tibetanaidproject.org", - ".tibetancommunityuk.net", - "|http://tibetancommunityuk.net", - "tibetanculture.org", - "tibetanfeministcollective.org", - ".tibetanpaintings.com", - ".tibetanphotoproject.com", - ".tibetanpoliticalreview.org", - ".tibetanreview.net", - "|http://tibetansports.org", - ".tibetanwomen.org", - "|http://tibetanwomen.org", - ".tibetanyouth.org", - ".tibetanyouthcongress.org", - "||tibetanyouthcongress.org", - ".tibetcharity.dk", - "tibetcharity.in", - ".tibetchild.org", - ".tibetcity.com", - ".tibetcorps.org", - ".tibetexpress.net", - "|http://tibetexpress.net", - "tibetfocus.com", - "tibetfund.org", - ".tibetgermany.com", - "||tibetgermany.de", - ".tibethaus.com", - ".tibetheritagefund.org", - "tibethouse.jp", - "tibethouse.org", - "||tibethouse.us", - ".tibetinfonet.net", - ".tibetjustice.org", - ".tibetkomite.dk", - "|http://tibetmuseum.org", - "tibetnetwork.org", - "||tibetnetwork.org", - ".tibetoffice.ch", - "|http://tibetoffice.ch", - "tibetoffice.eu", - "tibetoffice.org", - "tibetonline.com", - "||tibetonline.com", - ".tibetoffice.com.au", - "|http://tibetoffice.com.au", - "||tibetonline.tv", - ".tibetonline.tv", - ".tibetoralhistory.org", - "|http://tibetoralhistory.org", - ".tibetpolicy.eu", - ".tibetrelieffund.co.uk", - "tibetsites.com", - ".tibetsociety.com", - "||tibetsociety.com", - ".tibetsun.com", - ".tibetsupportgroup.org", - "|http://tibetsupportgroup.org", - ".tibetswiss.ch", - ".tibettelegraph.com", - "tibettimes.net", - "||tibetwrites.org", - ".ticket.com.tw", - ".tigervpn.com", - "||tigervpn.com", - ".timdir.com", - "|http://timdir.com", - ".time.com", - "|http://time.com", - ".timsah.com", - "||blog.tiney.com", - "tintuc101.com", - ".tiny.cc", - "|http://tiny.cc", - "tinychat.com", - "||tinypaste.com", - ".tistory.com", - "||tkcs-collins.com", - ".tmagazine.com", - "||tmagazine.com", - ".tmdfish.com", - "|http://tmi.me", - ".tmpp.org", - "|http://tmpp.org", - ".tnaflix.com", - "||tnaflix.com", - ".tngrnow.com", - ".tngrnow.net", - ".tnp.org", - "|http://tnp.org", - ".to-porno.com", - "||to-porno.com", - "togetter.com", - ".tokyo-247.com", - ".tokyo-hot.com", - "||tokyo-porn-tube.com", - "||tokyocn.com", - "tw.tomonews.net", - ".tongil.or.kr", - ".tono-oka.jp", - "tonyyan.net", - ".toodoc.com", - "toonel.net", - "top81.ws", - ".topnews.in", - ".toppornsites.com", - "|http://toppornsites.com", - ".torguard.net", - "||torguard.net", - "||top.tv", - ".topshareware.com", - ".topsy.com", - "||topsy.com", - "||toptip.ca", - "tora.to", - ".torcn.com", - ".torproject.org", - "||torproject.org", - "torrentprivacy.com", - "||torrentprivacy.com", - "|http://torrentproject.se", - "||torrenty.org", - "||torrentz.eu", - "||torvpn.com", - "||totalvpn.com", - ".toutiaoabc.com", - "towngain.com", - "toypark.in", - "toytractorshow.com", - ".tparents.org", - ".tpi.org.tw", - "||tpi.org.tw", - "traffichaus.com", - "||transparency.org", - "||treemall.com.tw", - "trendsmap.com", - "||trendsmap.com", - ".trialofccp.org", - "||trialofccp.org", - ".trimondi.de/SDLE", - ".trouw.nl", - "|http://trouw.nl", - ".trt.net.tr", - "trtc.com.tw", - ".truebuddha-md.org", - "|http://truebuddha-md.org", - "trulyergonomic.com", - ".truth101.co.tv", - "|http://truth101.co.tv", - ".truthontour.org", - "|http://truthontour.org", - ".truveo.com", - ".tsctv.net", - ".tsemtulku.com", - "tsquare.tv", - ".tsu.org.tw", - "tsunagarumon.com", - ".tsctv.net", - "||tt1069.com", - ".tttan.com", - "||tttan.com", - "bb.ttv.com.tw/bb", - "tu8964.com", - ".tubaholic.com", - ".tube.com", - "tube8.com", - "||tube8.com", - ".tube911.com", - "||tube911.com", - ".tubecup.com", - ".tubegals.com", - ".tubeislam.com", - "|http://tubeislam.com", - ".tubestack.com", - "||tubewolf.com", - ".tuibeitu.net", - "tuidang.net", - ".tuidang.org", - "||tuidang.org", - ".tuidang.se", - "bbs.tuitui.info", - ".tumutanzi.com", - "|http://tumutanzi.com", - "||tumview.com", - ".tunein.com", - "|http://tunein.com", - "||tunnelbear.com", - ".tunnelr.com", - "||tunnelr.com", - ".tuo8.blue", - "||tuo8.blue", - ".tuo8.cc", - ".tuo8.club", - "||tuo8.club", - ".tuo8.fit", - ".tuo8.hk", - ".tuo8.in", - ".tuo8.ninja", - ".tuo8.org", - "||tuo8.fit", - "||tuo8.org", - ".tuo8.pw", - "|http://tuo8.pw", - "||tuo8.red", - ".tuo8.space", - "tuitwit.com", - ".turansam.org", - ".turbobit.net", - "|http://turbobit.net", - ".turbohide.com", - "||turbohide.com", - ".tushycash.com", - "|http://tushycash.com", - "||app.tutanota.com", - ".tuvpn.com", - "||tuvpn.com", - "|http://tuzaijidi.com", - "|http://*.tuzaijidi.com", - ".tw01.org", - "|http://tw01.org", - ".tumblr.com", - "||tumblr.com", - "||lecloud.net", - "|http://cosmic.monar.ch", - "||slutmoonbeam.com", - "|http://blog.soylent.com", - ".tv.com", - "|http://tv.com", - "tvants.com", - "forum.tvb.com", - "news.tvb.com/list/world", - "news.tvb.com/local", - "news.tvbs.com.tw", - ".tvboxnow.com", - "|http://tvboxnow.com/", - "tvider.com", - ".tvmost.com.hk", - ".tvplayvideos.com", - "||tvunetworks.com", - ".tw-blog.com", - "|https://tw-blog.com", - ".tw-npo.org", - ".twaitter.com", - "twapperkeeper.com", - "||twapperkeeper.com", - "||twaud.io", - ".twaud.io", - ".twavi.com", - ".twbbs.net.tw", - "twbbs.org", - "twbbs.tw", - "||twblogger.com", - "tweepmag.com", - ".tweepml.org", - "||tweepml.org", - ".tweetbackup.com", - "||tweetbackup.com", - "tweetboard.com", - "||tweetboard.com", - ".tweetboner.biz", - "||tweetboner.biz", - ".tweetcs.com", - "|http://tweetcs.com", - "|http://deck.ly", - "||mtw.tl", - "||tweetedtimes.com", - "||tweetmylast.fm", - "tweetphoto.com", - "||tweetphoto.com", - "||tweetrans.com", - "tweetree.com", - "||tweetree.com", - ".tweettunnel.com", - "||tweettunnel.com", - "||tweetwally.com", - "tweetymail.com", - "||twelve.today", - ".tweez.net", - "|http://tweez.net", - "||twftp.org", - "||twgreatdaily.com", - "twibase.com", - ".twibble.de", - "||twibble.de", - "twibbon.com", - "||twibs.com", - ".twicountry.org", - "|http://twicountry.org", - "twicsy.com", - ".twiends.com", - "|http://twiends.com", - ".twifan.com", - "|http://twifan.com", - "twiffo.com", - "||twiffo.com", - ".twilightsex.com", - "twilog.org", - "twimbow.com", - "||twindexx.com", - "twipple.jp", - "||twipple.jp", - "||twip.me", - "twishort.com", - "||twishort.com", - "twistar.cc", - "||twister.net.co", - "||twisterio.com", - "twisternow.com", - "twistory.net", - "twitbrowser.net", - "||twitcause.com", - "||twitgether.com", - "||twiggit.org", - "twitgoo.com", - "twitiq.com", - "||twitiq.com", - ".twitlonger.com", - "||twitlonger.com", - "|http://tl.gd/", - "twitmania.com", - "twitoaster.com", - "||twitoaster.com", - "||twitonmsn.com", - ".twit2d.com", - "||twit2d.com", - ".twitstat.com", - "||twitstat.com", - "||firstfivefollowers.com", - "||retweeteffect.com", - "||tweeplike.me", - "||tweepguide.com", - "||turbotwitter.com", - ".twitvid.com", - "||twitvid.com", - "|http://twt.tl", - "twittbot.net", - "||ads-twitter.com", - "||twttr.com", - "||twitter4j.org", - ".twittercounter.com", - "||twittercounter.com", - "twitterfeed.com", - ".twittergadget.com", - "||twittergadget.com", - ".twitterkr.com", - "||twitterkr.com", - "||twittermail.com", - "||twitterrific.com", - "twittertim.es", - "||twittertim.es", - "twitthat.com", - "||twitturk.com", - ".twitturly.com", - "||twitturly.com", - ".twitzap.com", - "twiyia.com", - "||twstar.net", - ".twtkr.com", - "|http://twtkr.com", - ".twnorth.org.tw", - "twskype.com", - "twtrland.com", - "twurl.nl", - ".twyac.org", - "||twyac.org", - ".txxx.com", - ".tycool.com", - "||tycool.com", - "||typepad.com", - "@@||www.typepad.com", - "@@||static.typepad.com", - "||blog.expofutures.com", - "||legaltech.law.com", - "||blogs.tampabay.com", - "||contests.twilio.com", - ".embr.in", - "||embr.in", - ".u9un.com", - "||u9un.com", - ".ubddns.org", - "|http://ubddns.org", - "||uberproxy.net", - ".uc-japan.org", - "||uc-japan.org", - ".srcf.ucam.org/salon/", - "|http://china.ucanews.com/", - "||ucdc1998.org", - "|http://hum*.uchicago.edu/faculty/ywang/history", - "||uderzo.it", - ".udn.com", - "||udn.com", - "||udn.com.tw", - "udnbkk.com/bbs", - "||uforadio.com.tw", - "ufreevpn.com", - ".ugo.com", - "||uhdwallpapers.org", - "||uhrp.org", - ".uighur.nl", - "||uighur.nl", - "uighurbiz.net", - ".ulike.net", - "ukcdp.co.uk", - "ukliferadio.co.uk", - "||ukliferadio.co.uk", - "ultravpn.fr", - "||ultravpn.fr", - "ultraxs.com", - "umich.edu/~falun", - "||unblock.cn.com", - ".unblocker.yt", - "unblock-us.com", - "||unblock-us.com", - ".unblockdmm.com", - "|http://unblockdmm.com", - "||unblocksit.es", - "uncyclomedia.org", - ".uncyclopedia.hk/wiki", - "|http://uncyclopedia.hk", - "|http://uncyclopedia.tw", - "underwoodammo.com", - "||underwoodammo.com", - "||unholyknight.com", - ".uni.cc", - "||cldr.unicode.org", - ".unification.net", - ".unification.org.tw", - "||unirule.cloud", - ".unitedsocialpress.com", - ".unix100.com", - "||unknownspace.org", - ".unodedos.com", - "unpo.org", - ".untraceable.us", - "|http://untraceable.us", - "||uocn.org", - "tor.updatestar.com", - ".upholdjustice.org", - ".upload4u.info", - "uploaded.net/file", - "|http://uploaded.net/file", - "|http://uploaded.to/file", - ".uploadstation.com/file", - ".upmedia.mg", - "||upmedia.mg", - ".upornia.com", - "|http://upornia.com", - "||uproxy.org", - "|http://tor.cn.uptodown.com/", - ".upwill.org", - "ur7s.com", - "||urbansurvival.com", - "myshare.url.com.tw/", - "||urlborg.com", - "||urlparser.com", - "us.to", - "||usacn.com", - ".usaip.eu", - "||usaip.eu", - "dalailama.usc.edu", - "iipdigital.usembassy.gov", - "||usfk.mil", - "||usma.edu", - "||usmc.mil", - ".usocctn.com", - "|http://tarr.uspto.gov/", - "||tsdr.uspto.gov", - ".ustream.tv", - "||ustream.tv", - ".usunitednews.com", - "|http://usunitednews.com", - "usus.cc", - ".utopianpal.com", - "||utopianpal.com", - ".uu-gg.com", - ".uvwxyz.xyz", - "||uvwxyz.xyz", - ".uwants.com", - ".uwants.net", - "uyghur.co.uk", - "|http://uyghur-j.org", - "||uyghuramerican.org", - ".uyghurcanadiansociety.org", - ".uyghurensemble.co.uk", - "||uyghurcongress.org", - ".uyghurpen.org", - ".uyghurpress.com", - "|https://uyghurpress.com", - ".uyghurstudies.org", - "|http://uyghurstudies.org", - "uygur.org", - "|http://uymaarip.com/", - ".v2ray.com", - "||v2ray.com", - ".van001.com", - ".van698.com", - ".vanemu.cn", - ".vanilla-jp.com", - ".vanpeople.com", - "vansky.com", - "||vaticannews.va", - "||vcf-online.org", - "||vcfbuilder.org", - ".vegasred.com", - ".velkaepocha.sk", - ".venbbs.com", - ".venchina.com", - ".venetianmacao.com", - "||venetianmacao.com", - "veoh.com", - "mysite.verizon.net", - "vermonttibet.org", - ".versavpn.com", - "||versavpn.com", - "||verybs.com", - ".vft.com.tw", - ".viber.com", - "||viber.com", - ".vica.info", - ".victimsofcommunism.org", - "|http://victimsofcommunism.org", - "||vid.me", - "||vidble.com", - "videobam.com", - "||videobam.com", - ".videodetective.com", - ".videomega.tv", - "||videomega.tv", - ".videomo.com", - "videopediaworld.com", - ".videopress.com", - ".vidinfo.org/video", - "vietdaikynguyen.com", - ".vijayatemple.org", - "vimeo.com", - "||vimeo.com", - "||vimperator.org", - "||vincnd.com", - "||vinniev.com", - "|http://www.lib.virginia.edu/area-studies/Tibet/tibet.html", - ".virtualrealporn.com", - "||virtualrealporn.com", - "visibletweets.com", - "|http://ny.visiontimes.com", - ".vital247.org", - "||viu.com", - ".vivahentai4u.net", - ".vivatube.com", - ".vivthomas.com", - "||vivthomas.com", - ".vjav.com", - "||vjav.com", - ".vjmedia.com.hk", - ".vllcs.org", - "|http://vllcs.org", - "||vmixcore.com", - "||vnet.link", - "cn.voa.mobi", - "tw.voa.mobi", - ".voachineseblog.com", - "||voachineseblog.com", - "voagd.com", - ".voacantonese.com", - "||voacantonese.com", - "voachinese.com", - "||voachinese.com", - ".voanews.com", - "||voanews.com", - "voatibetan.com", - "||voatibetan.com", - ".voatibetanenglish.com", - "||voatibetanenglish.com", - ".vocativ.com", - "vocn.tv", - ".vot.org", - "||vot.org", - ".vovo2000.com", - "|http://vovo2000.com", - ".voxer.com", - "||voxer.com", - ".voy.com", - "||vpn.ac", - ".vpn4all.com", - "||vpn4all.com", - ".vpnaccount.org", - "|http://vpnaccount.org", - ".vpnaccounts.com", - "||vpnaccounts.com", - ".vpncomparison.org", - ".vpncup.com", - "||vpncup.com", - "vpnbook.com", - ".vpncoupons.com", - "|http://vpncoupons.com", - ".vpndada.com", - "||vpndada.com", - ".vpnfan.com", - "vpnfire.com", - ".vpnfires.biz", - ".vpnforgame.net", - "||vpnforgame.net", - "||vpngate.jp", - ".vpngate.net", - "||vpngate.net", - ".vpngratis.net", - "vpnhq.com", - ".vpnmaster.com", - "||vpnmaster.com", - ".vpnmentor.com", - "||vpnmentor.com", - ".vpninja.net", - "||vpninja.net", - ".vpnintouch.com", - "||vpnintouch.net", - "vpnjack.com", - "||vpnjack.com", - ".vpnpick.com", - "||vpnpick.com", - "||vpnpop.com", - "||vpnpronet.com", - ".vpnreactor.com", - "||vpnreactor.com", - "||vpnreviewz.com", - ".vpnsecure.me", - "||vpnsecure.me", - ".vpnshazam.com", - "||vpnshazam.com", - ".vpnshieldapp.com", - "||vpnshieldapp.com", - ".vpnsp.com", - ".vpntraffic.com", - ".vpntunnel.com", - "||vpntunnel.com", - ".vpnuk.info", - "||vpnuk.info", - "||vpnunlimitedapp.com", - ".vpnvip.com", - "||vpnvip.com", - ".vpnworldwide.com", - ".vporn.com", - "||vporn.com", - ".vpser.net", - "@@||vpser.net", - "vraiesagesse.net", - ".vrmtr.com", - "||vtunnel.com", - "||vuku.cc", - "lists.w3.org/archives/public", - "||w3schools.com", - "||waffle1999.com", - ".wahas.com", - ".waigaobu.com", - "waikeung.org/php_wind", - ".wailaike.net", - ".waiwaier.com", - "|http://waiwaier.com", - "||wallmama.com", - "wallornot.org", - "||wallpapercasa.com", - ".wallproxy.com", - "@@||wallproxy.com.cn", - "||waltermartin.com", - "||waltermartin.org", - "||www.wan-press.org", - "||wanderinghorse.net", - "||wangafu.net", - "||wangjinbo.org", - ".wangjinbo.org", - "wanglixiong.com", - ".wango.org", - "||wango.org", - "wangruoshui.net", - "www.wangruowang.org", - "want-daily.com", - "wapedia.mobi/zhsimp", - "||waselpro.com", - ".watchinese.com", - ".wattpad.com", - "||wattpad.com", - ".makzhou.warehouse333.com", - "washeng.net", - ".watch8x.com", - "||watchmygf.net", - "||wav.tv", - ".wdf5.com", - ".wearehairy.com", - ".wearn.com", - "||wearn.com", - "|http://hkcoc.weather.com.hk", - "||hudatoriq.web.id", - "||web2project.net", - "webbang.net", - ".webevader.org", - ".webfreer.com", - "weblagu.com", - ".webjb.org", - ".webrush.net", - "webs-tv.net", - ".websitepulse.com/help/testtools.china-test", - "|http://www.websnapr.com", - ".webwarper.net", - "|http://webwarper.net", - "webworkerdaily.com", - ".weekmag.info", - "||wefightcensorship.org", - ".wefong.com", - "weiboleak.com", - ".weihuo.org", - "weijingsheng.org", - ".weiming.info", - "||weiming.info", - "weiquanwang.org", - "|http://weisuo.ws", - ".welovecock.com", - ".wemigrate.org", - "|http://wemigrate.org", - "wengewang.com", - "||wengewang.org", - ".wenhui.ch", - "|http://trans.wenweipo.com/gb/", - ".wenxuecity.com", - "||wenxuecity.com", - ".wenyunchao.com", - "||wenyunchao.com", - ".westca.com", - "||westca.com", - "||westernwolves.com", - ".westkit.net", - "||westpoint.edu", - ".westernshugdensociety.org", - "wetpussygames.com", - ".wetplace.com", - "wexiaobo.org", - "||wexiaobo.org", - "wezhiyong.org", - "||wezone.net", - ".wforum.com", - "||wforum.com/", - ".whatblocked.com", - "||whatblocked.com", - ".wheatseeds.org", - "||wheelockslatin.com", - ".whippedass.com", - ".whoer.net", - "||whoer.net", - "whotalking.com", - "whylover.com", - "||whyx.org", - "|http://zh.ecdm.wikia.com", - "|http://evchk.wikia.com", - "fq.wikia.com", - "zh.pttpedia.wikia.com/wiki/%E7%BF%92%E5%8C%85%E5%AD%90%E4%B9%8B%E4%BA%82", - "cn.uncyclopedia.wikia.com", - "zh.uncyclopedia.wikia.com", - "||wikileaks.ch", - "||wikileaks.com", - "||wikileaks.de", - "||wikileaks.eu", - "||wikileaks.lu", - ".wikileaks.org", - "||wikileaks.org", - "||wikileaks.pl", - ".wikileaks-forum.com", - "wildammo.com", - ".williamhill.com", - "||collateralmurder.com", - "||collateralmurder.org", - "wikilivres.info/wiki/%E9%9B%B6%E5%85%AB%E5%AE%AA%E7%AB%A0", - "||wikimapia.org", - "|http://zh.wikisource.org", - "||zh.wikinews.org", - "||ja.wikipedia.org", - "||wikipedia.org", - "||wikiwiki.jp", - "||casino.williamhill.com", - "||sports.williamhill.com", - "||vegas.williamhill.com", - "||willw.net", - "||windowsphoneme.com", - ".windscribe.com", - "||windscribe.com", - "||community.windy.com", - "||wingy.site", - ".winning11.com", - "winwhispers.info", - "||wiredbytes.com", - "||wiredpen.com", - ".wisdompubs.org", - ".wisevid.com", - "||wisevid.com", - ".witnessleeteaching.com", - ".witopia.net", - ".wjbk.org", - "||wjbk.org", - "|http://wn.com", - ".wnacg.com", - ".wnacg.org", - ".wo.tc", - "||woeser.com", - "|http://woesermiddle-way.net/", - ".wokar.org", - "|http://wokar.org", - "wolfax.com", - "||wolfax.com", - "||woolyss.com", - "woopie.jp", - "||woopie.jp", - "woopie.tv", - "||woopie.tv", - "||workatruna.com", - ".workerdemo.org.hk", - ".workerempowerment.org", - "||workersthebig.net", - ".worldcat.org", - "worldjournal.com", - ".worldvpn.net", - "||worldvpn.net", - "||videopress.com", - ".wordpress.com", - "|http://*.wordpress.com", - "||chenshan20042005.wordpress.com", - "||chinaview.wordpress.com", - "||cnbbnews.wordpress.com", - "||freedominfonetweb.wordpress.com", - "||hka8964.wordpress.com", - "||hkanews.wordpress.com", - "||hqsbnet.wordpress.com", - "||hqsbonline.wordpress.com", - "||investigating.wordpress.com", - "||jobnewera.wordpress.com", - "||minghuiyw.wordpress.com", - "||wo3ttt.wordpress.com", - "||sujiatun.wordpress.com", - "||xijie.wordpress.com", - "||wp.com", - ".wow.com", - ".wow-life.net", - "||wowlegacy.ml", - "||wowporn.com", - "||wowgirls.com", - ".wowrk.com", - "woxinghuiguo.com", - ".woyaolian.org", - "|http://woyaolian.org", - ".wpoforum.com", - "||wpoforum.com", - ".wqyd.org", - "||wqyd.org", - "wrchina.org", - "wretch.cc", - ".wsj.com", - "||wsj.com", - ".wsj.net", - "||wsj.net", - ".wsjhk.com", - ".wtbn.org", - ".wtfpeople.com", - "wuerkaixi.com", - "||wufafangwen.com", - "wufi.org.tw", - "||wuguoguang.com", - "wujie.net", - "wujieliulan.com", - "||wujieliulan.com", - "wukangrui.net", - "||wuw.red", - "||wuyanblog.com", - ".wwitv.com", - "||wwitv.com", - "wzyboy.im/post/160", - ".x-berry.com", - "||x-berry.com", - "||x-art.com", - "||x-wall.org", - "x1949x.com", - "x365x.com", - "xanga.com", - "||xbabe.com", - ".xbookcn.com", - "||xbookcn.com", - "||xcafe.in", - "||xcity.jp", - ".xcritic.com", - "|http://cdn*.xda-developers.com", - ".xerotica.com", - "destiny.xfiles.to/ubbthreads", - ".xfm.pp.ru", - ".xgmyd.com", - "||xgmyd.com", - "xhamster.com", - "||xhamster.com", - ".xianba.net", - ".xianchawang.net", - ".xianjian.tw", - "|http://xianjian.tw", - ".xianqiao.net", - ".xiaobaiwu.com", - ".xiaochuncnjp.com", - ".xiaod.in", - ".xiaohexie.com", - "||xiaolan.me", - "||xiaoma.org", - "||xiaohexie.com", - "xiezhua.com", - ".xihua.es", - "forum.xinbao.de/forum", - ".xing.com", - "|http://xing.com", - ".xinmiao.com.hk", - "||xinmiao.com.hk", - "xinsheng.net", - "xinshijue.com", - "xinhuanet.org", - "|http://xinyubbs.net", - ".xiongpian.com", - ".xiuren.org", - "xizang-zhiye.org", - "xjp.cc", - "||xjp.cc", - "||xjtravelguide.com", - "xlfmtalk.com", - "||xlfmwz.info", - "||xml-training-guide.com", - "xmovies.com", - "||xnxx.com", - "xpdo.net", - "||xpud.org", - ".xrentdvd.com", - ".xskywalker.net", - "||xtube.com", - "blog.xuite.net", - "vlog.xuite.net", - "xuzhiyong.net", - "||xuchao.org", - "xuchao.net", - "||xuchao.net", - "xvideo.cc", - ".xvideos.com", - "||xvideos.com", - "||xvideos.es", - ".xkiwi.tk/", - ".xxbbx.com", - ".xxlmovies.com", - "||xxx.com", - ".xxx.xxx", - "|http://xxx.xxx", - ".xxxfuckmom.com", - "||xxxx.com.au", - ".xxxymovies.com", - "|http://xxxymovies.com", - "xys.org", - "xysblogs.org", - "xyy69.com", - "xyy69.info", - "||yakbutterblues.com", - "||yam.com", - "||yam.org.tw", - ".yanghengjun.com", - "yangjianli.com", - ".yasni.co.uk", - "||yasni.co.uk", - ".yayabay.com/forum", - ".ydy.com", - ".yeahteentube.com", - "||yeahteentube.com", - "||yecl.net", - "||yeelou.com", - "yeeyi.com", - "yegle.net", - "||yegle.net", - ".yes.xxx", - "||yes123.com.tw", - "||yesasia.com", - "||yesasia.com.hk", - ".yes-news.com", - "|http://yes-news.com", - ".yespornplease.com", - "||yespornplease.com", - "|http://yeyeclub.com", - "||yhcw.net", - ".yibada.com", - ".yibaochina.com", - ".yidio.com", - "||yidio.com", - "yilubbs.com", - "xa.yimg.com", - ".yingsuoss.com", - ".yipub.com", - "||yipub.com", - "yinlei.org/mt", - ".yizhihongxing.com", - ".yobt.com", - ".yobt.tv", - "||yobt.tv", - ".yogichen.org", - "||yogichen.org", - ".yolasite.com", - ".yomiuri.co.jp", - "yong.hu", - ".yorkbbs.ca", - "||youxu.info", - ".youjizz.com", - "||youjizz.com", - ".youmaker.com", - "||youmaker.com", - ".youngpornvideos.com", - "youngspiration.hk", - ".youpai.org", - "||youpai.org", - ".your-freedom.net", - "||yourepeat.com", - ".yourprivatevpn.com", - "||yourprivatevpn.com", - ".yousendit.com", - "||yousendit.com", - ".youthnetradio.org/tmit/forum", - "blog.youthwant.com.tw", - "me.youthwant.com.tw", - "share.youthwant.com.tw", - "topic.youthwant.com.tw", - ".youporn.com", - "||youporn.com", - ".youporngay.com", - "||youporngay.com", - ".yourlisten.com", - "|http://yourlisten.com", - ".yourlust.com", - "|http://yourlust.com", - "youshun12.com", - ".youtubecn.com", - "youversion.com", - "||youversion.com", - "blog.youxu.info/2010/03/14/west-chamber", - "ytht.net", - "yuanming.net", - ".yuanzhengtang.org", - ".yulghun.com", - "||yunchao.net", - "||yuntipub.com", - ".yuvutu.com", - "||yvesgeleyn.com", - ".ywpw.com/forums/history/post/A0/p0/html/227", - "yx51.net", - ".yyii.org", - "||yyii.org", - ".yzzk.com", - "|http://yzzk.com", - "zacebook.com", - ".zalmos.com", - "||zalmos.com", - "||zannel.com", - ".zaobao.com", - "||zaobao.com", - "|http://zaobao.com.sg", - "||zaobao.com.sg", - ".zaozon.com", - "||zdnet.com.tw", - ".zello.com", - "||zello.com", - ".zengjinyan.org", - ".zenmate.com", - "||zenmate.com", - "||zenmate.com.ru", - "||zeronet.io", - "||zeutch.com", - ".zfreet.com", - ".zgsddh.com", - "zgzcjj.net", - ".zhanbin.net", - "||zhanbin.net", - ".zhangboli.net", - "||zhangtianliang.com", - "||zhanlve.org", - "zhenghui.org", - ".zhengjian.org", - "||zhengjian.org", - "zhengwunet.org", - "zhenlibu.info", - "||zhenlibu.info", - ".zhenlibu1984.com", - "||zhenlibu1984.com", - "|http://zhenxiang.biz", - ".zhinengluyou.com", - "zhongguo.ca", - "|http://zhongguorenquan.org", - "zhongguotese.net", - "||zhongguotese.net", - "||zhongmeng.org", - ".zhoushuguang.com", - "||zhreader.com", - ".zhuangbi.me", - "||zhuangbi.me", - ".zhuanxing.cn", - "||zhuatieba.com", - "zhuichaguoji.org", - "||zhuichaguoji.org", - "|http://book.zi5.me", - ".ziddu.com/download", - "||zillionk.com", - ".zinio.com", - "||zinio.com", - ".ziporn.com", - ".zippyshare.com", - ".zkaip.com", - "||zkaip.com", - "realforum.zkiz.com", - "||zmw.cn", - ".zodgame.us", - "zomobo.net", - ".zonaeuropa.com", - "||zonaeuropa.com", - "||zonghexinwen.com", - ".zonghexinwen.net", - "||zoogvpn.com", - "||zootool.com", - ".zoozle.net", - "writer.zoho.com", - "||zorrovpn.com", - "||zpn.im", - "||zspeeder.me", - ".zsrhao.com", - ".zuo.la", - "||zuo.la", - "||zuobiao.me", - ".zuola.com", - "||zuola.com", - "||zvereff.com", - ".zynaima.com", - "zyzc9.com", - ".zzcartoon.com", - "64memo", - "aHR0cHM6Ly95ZWNsLm5ldA", - "freenet", - ".google.*/falun", - "phobos.apple.com*/video", - "q=freedom", - "q%3Dfreedom", - "remembering_tiananmen_20_years", - "search*safeweb", - "q=triangle", - "q%3DTriangle", - "ultrareach", - "ultrasurf", - "@@||aliyun.com", - "@@||baidu.com", - "@@||chinaso.com", - "@@||chinaz.com", - "@@|http://nrch.culture.tw/", - "@@||adservice.google.com", - "@@||dl.google.com", - "@@||kh.google.com", - "@@||khm.google.com", - "@@||khm0.google.com", - "@@||khm1.google.com", - "@@||khm2.google.com", - "@@||khm3.google.com", - "@@||khmdb.google.com", - "@@||tools.google.com", - "@@||clientservices.googleapis.com", - "@@||fonts.googleapis.com", - "@@||khm.googleapis.com", - "@@||khm0.googleapis.com", - "@@||khm1.googleapis.com", - "@@||khm2.googleapis.com", - "@@||khm3.googleapis.com", - "@@||khmdb.googleapis.com", - "@@||storage.googleapis.com", - "@@||translate.googleapis.com", - "@@||update.googleapis.com", - "@@||safebrowsing.googleapis.com", - "@@||cn.gravatar.com", - "@@||connectivitycheck.gstatic.com", - "@@||csi.gstatic.com", - "@@||fonts.gstatic.com", - "@@||ssl.gstatic.com", - "@@||haosou.com", - "@@||ip.cn", - "@@||jike.com", - "@@|http://translate.google.cn", - "@@|http://www.google.cn/maps", - "@@||http2.golang.org", - "@@||gov.cn", - "@@||qq.com", - "@@||sina.cn", - "@@||sina.com.cn", - "@@||sogou.com", - "@@||so.com", - "@@||soso.com", - "@@||uluai.com.cn", - "@@||weibo.com", - "@@||yahoo.cn", - "@@||youdao.com", - "@@||zhongsou.com", - "@@|http://ime.baidu.jp" -]; - -/* -* This file is part of Adblock Plus , -* Copyright (C) 2006-2014 Eyeo GmbH -* -* Adblock Plus is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License version 3 as -* published by the Free Software Foundation. -* -* Adblock Plus is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with Adblock Plus. If not, see . -*/ - -function createDict() -{ - var result = {}; - result.__proto__ = null; - return result; -} - -function getOwnPropertyDescriptor(obj, key) -{ - if (obj.hasOwnProperty(key)) - { - return obj[key]; - } - return null; -} - -function extend(subclass, superclass, definition) -{ - if (Object.__proto__) - { - definition.__proto__ = superclass.prototype; - subclass.prototype = definition; - } - else - { - var tmpclass = function(){}, ret; - tmpclass.prototype = superclass.prototype; - subclass.prototype = new tmpclass(); - subclass.prototype.constructor = superclass; - for (var i in definition) - { - if (definition.hasOwnProperty(i)) - { - subclass.prototype[i] = definition[i]; - } - } - } -} - -function Filter(text) -{ - this.text = text; - this.subscriptions = []; -} -Filter.prototype = { - text: null, - subscriptions: null, - toString: function() - { - return this.text; - } -}; -Filter.knownFilters = createDict(); -Filter.elemhideRegExp = /^([^\/\*\|\@"!]*?)#(\@)?(?:([\w\-]+|\*)((?:\([\w\-]+(?:[$^*]?=[^\(\)"]*)?\))*)|#([^{}]+))$/; -Filter.regexpRegExp = /^(@@)?\/.*\/(?:\$~?[\w\-]+(?:=[^,\s]+)?(?:,~?[\w\-]+(?:=[^,\s]+)?)*)?$/; -Filter.optionsRegExp = /\$(~?[\w\-]+(?:=[^,\s]+)?(?:,~?[\w\-]+(?:=[^,\s]+)?)*)$/; -Filter.fromText = function(text) -{ - if (text in Filter.knownFilters) - { - return Filter.knownFilters[text]; - } - var ret; - if (text.charAt(0) == "!") - { - ret = new CommentFilter(text); - } - else - { - ret = RegExpFilter.fromText(text); - } - Filter.knownFilters[ret.text] = ret; - return ret; -}; - -function InvalidFilter(text, reason) -{ - Filter.call(this, text); - this.reason = reason; -} -extend(InvalidFilter, Filter, { - reason: null -}); - -function CommentFilter(text) -{ - Filter.call(this, text); -} -extend(CommentFilter, Filter, { -}); - -function ActiveFilter(text, domains) -{ - Filter.call(this, text); - this.domainSource = domains; -} -extend(ActiveFilter, Filter, { - domainSource: null, - domainSeparator: null, - ignoreTrailingDot: true, - domainSourceIsUpperCase: false, - getDomains: function() - { - var prop = getOwnPropertyDescriptor(this, "domains"); - if (prop) - { - return prop; - } - var domains = null; - if (this.domainSource) - { - var source = this.domainSource; - if (!this.domainSourceIsUpperCase) - { - source = source.toUpperCase(); - } - var list = source.split(this.domainSeparator); - if (list.length == 1 && (list[0]).charAt(0) != "~") - { - domains = createDict(); - domains[""] = false; - if (this.ignoreTrailingDot) - { - list[0] = list[0].replace(/\.+$/, ""); - } - domains[list[0]] = true; - } - else - { - var hasIncludes = false; - for (var i = 0; i < list.length; i++) - { - var domain = list[i]; - if (this.ignoreTrailingDot) - { - domain = domain.replace(/\.+$/, ""); - } - if (domain == "") - { - continue; - } - var include; - if (domain.charAt(0) == "~") - { - include = false; - domain = domain.substr(1); - } - else - { - include = true; - hasIncludes = true; - } - if (!domains) - { - domains = createDict(); - } - domains[domain] = include; - } - domains[""] = !hasIncludes; - } - this.domainSource = null; - } - return this.domains; - }, - sitekeys: null, - isActiveOnDomain: function(docDomain, sitekey) - { - if (this.getSitekeys() && (!sitekey || this.getSitekeys().indexOf(sitekey.toUpperCase()) < 0)) - { - return false; - } - if (!this.getDomains()) - { - return true; - } - if (!docDomain) - { - return this.getDomains()[""]; - } - if (this.ignoreTrailingDot) - { - docDomain = docDomain.replace(/\.+$/, ""); - } - docDomain = docDomain.toUpperCase(); - while (true) - { - if (docDomain in this.getDomains()) - { - return this.domains[docDomain]; - } - var nextDot = docDomain.indexOf("."); - if (nextDot < 0) - { - break; - } - docDomain = docDomain.substr(nextDot + 1); - } - return this.domains[""]; - }, - isActiveOnlyOnDomain: function(docDomain) - { - if (!docDomain || !this.getDomains() || this.getDomains()[""]) - { - return false; - } - if (this.ignoreTrailingDot) - { - docDomain = docDomain.replace(/\.+$/, ""); - } - docDomain = docDomain.toUpperCase(); - for (var domain in this.getDomains()) - { - if (this.domains[domain] && domain != docDomain && (domain.length <= docDomain.length || domain.indexOf("." + docDomain) != domain.length - docDomain.length - 1)) - { - return false; - } - } - return true; - } -}); - -function RegExpFilter(text, regexpSource, contentType, matchCase, domains, thirdParty, sitekeys) -{ - ActiveFilter.call(this, text, domains, sitekeys); - if (contentType != null) - { - this.contentType = contentType; - } - if (matchCase) - { - this.matchCase = matchCase; - } - if (thirdParty != null) - { - this.thirdParty = thirdParty; - } - if (sitekeys != null) - { - this.sitekeySource = sitekeys; - } - if (regexpSource.length >= 2 && regexpSource.charAt(0) == "/" && regexpSource.charAt(regexpSource.length - 1) == "/") - { - var regexp = new RegExp(regexpSource.substr(1, regexpSource.length - 2), this.matchCase ? "" : "i"); - this.regexp = regexp; - } - else - { - this.regexpSource = regexpSource; - } -} -extend(RegExpFilter, ActiveFilter, { - domainSourceIsUpperCase: true, - length: 1, - domainSeparator: "|", - regexpSource: null, - getRegexp: function() - { - var prop = getOwnPropertyDescriptor(this, "regexp"); - if (prop) - { - return prop; - } - var source = this.regexpSource.replace(/\*+/g, "*").replace(/\^\|$/, "^").replace(/\W/g, "\\$&").replace(/\\\*/g, ".*").replace(/\\\^/g, "(?:[\\x00-\\x24\\x26-\\x2C\\x2F\\x3A-\\x40\\x5B-\\x5E\\x60\\x7B-\\x7F]|$)").replace(/^\\\|\\\|/, "^[\\w\\-]+:\\/+(?!\\/)(?:[^\\/]+\\.)?").replace(/^\\\|/, "^").replace(/\\\|$/, "$").replace(/^(\.\*)/, "").replace(/(\.\*)$/, ""); - var regexp = new RegExp(source, this.matchCase ? "" : "i"); - this.regexp = regexp; - return regexp; - }, - contentType: 2147483647, - matchCase: false, - thirdParty: null, - sitekeySource: null, - getSitekeys: function() - { - var prop = getOwnPropertyDescriptor(this, "sitekeys"); - if (prop) - { - return prop; - } - var sitekeys = null; - if (this.sitekeySource) - { - sitekeys = this.sitekeySource.split("|"); - this.sitekeySource = null; - } - this.sitekeys = sitekeys; - return this.sitekeys; - }, - matches: function(location, contentType, docDomain, thirdParty, sitekey) - { - if (this.getRegexp().test(location) && this.isActiveOnDomain(docDomain, sitekey)) - { - return true; - } - return false; - } -}); -RegExpFilter.prototype["0"] = "#this"; -RegExpFilter.fromText = function(text) -{ - var blocking = true; - var origText = text; - if (text.indexOf("@@") == 0) - { - blocking = false; - text = text.substr(2); - } - var contentType = null; - var matchCase = null; - var domains = null; - var sitekeys = null; - var thirdParty = null; - var collapse = null; - var options; - var match = text.indexOf("$") >= 0 ? Filter.optionsRegExp.exec(text) : null; - if (match) - { - options = match[1].toUpperCase().split(","); - text = match.input.substr(0, match.index); - for (var _loopIndex6 = 0; _loopIndex6 < options.length; ++_loopIndex6) - { - var option = options[_loopIndex6]; - var value = null; - var separatorIndex = option.indexOf("="); - if (separatorIndex >= 0) - { - value = option.substr(separatorIndex + 1); - option = option.substr(0, separatorIndex); - } - option = option.replace(/-/, "_"); - if (option in RegExpFilter.typeMap) - { - if (contentType == null) - { - contentType = 0; - } - contentType |= RegExpFilter.typeMap[option]; - } - else if (option.charAt(0) == "~" && option.substr(1) in RegExpFilter.typeMap) - { - if (contentType == null) - { - contentType = RegExpFilter.prototype.contentType; - } - contentType &= ~RegExpFilter.typeMap[option.substr(1)]; - } - else if (option == "MATCH_CASE") - { - matchCase = true; - } - else if (option == "~MATCH_CASE") - { - matchCase = false; - } - else if (option == "DOMAIN" && typeof value != "undefined") - { - domains = value; - } - else if (option == "THIRD_PARTY") - { - thirdParty = true; - } - else if (option == "~THIRD_PARTY") - { - thirdParty = false; - } - else if (option == "COLLAPSE") - { - collapse = true; - } - else if (option == "~COLLAPSE") - { - collapse = false; - } - else if (option == "SITEKEY" && typeof value != "undefined") - { - sitekeys = value; - } - else - { - return new InvalidFilter(origText, "Unknown option " + option.toLowerCase()); - } - } - } - if (!blocking && (contentType == null || contentType & RegExpFilter.typeMap.DOCUMENT) && (!options || options.indexOf("DOCUMENT") < 0) && !/^\|?[\w\-]+:/.test(text)) - { - if (contentType == null) - { - contentType = RegExpFilter.prototype.contentType; - } - contentType &= ~RegExpFilter.typeMap.DOCUMENT; - } - try - { - if (blocking) - { - return new BlockingFilter(origText, text, contentType, matchCase, domains, thirdParty, sitekeys, collapse); - } - else - { - return new WhitelistFilter(origText, text, contentType, matchCase, domains, thirdParty, sitekeys); - } - } - catch (e) - { - return new InvalidFilter(origText, e); - } -}; -RegExpFilter.typeMap = { - OTHER: 1, - SCRIPT: 2, - IMAGE: 4, - STYLESHEET: 8, - OBJECT: 16, - SUBDOCUMENT: 32, - DOCUMENT: 64, - XBL: 1, - PING: 1, - XMLHTTPREQUEST: 2048, - OBJECT_SUBREQUEST: 4096, - DTD: 1, - MEDIA: 16384, - FONT: 32768, - BACKGROUND: 4, - POPUP: 268435456, - ELEMHIDE: 1073741824 -}; -RegExpFilter.prototype.contentType &= ~ (RegExpFilter.typeMap.ELEMHIDE | RegExpFilter.typeMap.POPUP); - -function BlockingFilter(text, regexpSource, contentType, matchCase, domains, thirdParty, sitekeys, collapse) -{ - RegExpFilter.call(this, text, regexpSource, contentType, matchCase, domains, thirdParty, sitekeys); - this.collapse = collapse; -} -extend(BlockingFilter, RegExpFilter, { - collapse: null -}); - -function WhitelistFilter(text, regexpSource, contentType, matchCase, domains, thirdParty, sitekeys) -{ - RegExpFilter.call(this, text, regexpSource, contentType, matchCase, domains, thirdParty, sitekeys); -} -extend(WhitelistFilter, RegExpFilter, { -}); - -function Matcher() -{ - this.clear(); -} -Matcher.prototype = { - filterByKeyword: null, - keywordByFilter: null, - clear: function() - { - this.filterByKeyword = createDict(); - this.keywordByFilter = createDict(); - }, - add: function(filter) - { - if (filter.text in this.keywordByFilter) - { - return; - } - var keyword = this.findKeyword(filter); - var oldEntry = this.filterByKeyword[keyword]; - if (typeof oldEntry == "undefined") - { - this.filterByKeyword[keyword] = filter; - } - else if (oldEntry.length == 1) - { - this.filterByKeyword[keyword] = [oldEntry, filter]; - } - else - { - oldEntry.push(filter); - } - this.keywordByFilter[filter.text] = keyword; - }, - remove: function(filter) - { - if (!(filter.text in this.keywordByFilter)) - { - return; - } - var keyword = this.keywordByFilter[filter.text]; - var list = this.filterByKeyword[keyword]; - if (list.length <= 1) - { - delete this.filterByKeyword[keyword]; - } - else - { - var index = list.indexOf(filter); - if (index >= 0) - { - list.splice(index, 1); - if (list.length == 1) - { - this.filterByKeyword[keyword] = list[0]; - } - } - } - delete this.keywordByFilter[filter.text]; - }, - findKeyword: function(filter) - { - var result = ""; - var text = filter.text; - if (Filter.regexpRegExp.test(text)) - { - return result; - } - var match = Filter.optionsRegExp.exec(text); - if (match) - { - text = match.input.substr(0, match.index); - } - if (text.substr(0, 2) == "@@") - { - text = text.substr(2); - } - var candidates = text.toLowerCase().match(/[^a-z0-9%*][a-z0-9%]{3,}(?=[^a-z0-9%*])/g); - if (!candidates) - { - return result; - } - var hash = this.filterByKeyword; - var resultCount = 16777215; - var resultLength = 0; - for (var i = 0, l = candidates.length; i < l; i++) - { - var candidate = candidates[i].substr(1); - var count = candidate in hash ? hash[candidate].length : 0; - if (count < resultCount || count == resultCount && candidate.length > resultLength) - { - result = candidate; - resultCount = count; - resultLength = candidate.length; - } - } - return result; - }, - hasFilter: function(filter) - { - return filter.text in this.keywordByFilter; - }, - getKeywordForFilter: function(filter) - { - if (filter.text in this.keywordByFilter) - { - return this.keywordByFilter[filter.text]; - } - else - { - return null; - } - }, - _checkEntryMatch: function(keyword, location, contentType, docDomain, thirdParty, sitekey) - { - var list = this.filterByKeyword[keyword]; - for (var i = 0; i < list.length; i++) - { - var filter = list[i]; - if (filter == "#this") - { - filter = list; - } - if (filter.matches(location, contentType, docDomain, thirdParty, sitekey)) - { - return filter; - } - } - return null; - }, - matchesAny: function(location, contentType, docDomain, thirdParty, sitekey) - { - var candidates = location.toLowerCase().match(/[a-z0-9%]{3,}/g); - if (candidates === null) - { - candidates = []; - } - candidates.push(""); - for (var i = 0, l = candidates.length; i < l; i++) - { - var substr = candidates[i]; - if (substr in this.filterByKeyword) - { - var result = this._checkEntryMatch(substr, location, contentType, docDomain, thirdParty, sitekey); - if (result) - { - return result; - } - } - } - return null; - } -}; - -function CombinedMatcher() -{ - this.blacklist = new Matcher(); - this.whitelist = new Matcher(); - this.resultCache = createDict(); -} -CombinedMatcher.maxCacheEntries = 1000; -CombinedMatcher.prototype = { - blacklist: null, - whitelist: null, - resultCache: null, - cacheEntries: 0, - clear: function() - { - this.blacklist.clear(); - this.whitelist.clear(); - this.resultCache = createDict(); - this.cacheEntries = 0; - }, - add: function(filter) - { - if (filter instanceof WhitelistFilter) - { - this.whitelist.add(filter); - } - else - { - this.blacklist.add(filter); - } - if (this.cacheEntries > 0) - { - this.resultCache = createDict(); - this.cacheEntries = 0; - } - }, - remove: function(filter) - { - if (filter instanceof WhitelistFilter) - { - this.whitelist.remove(filter); - } - else - { - this.blacklist.remove(filter); - } - if (this.cacheEntries > 0) - { - this.resultCache = createDict(); - this.cacheEntries = 0; - } - }, - findKeyword: function(filter) - { - if (filter instanceof WhitelistFilter) - { - return this.whitelist.findKeyword(filter); - } - else - { - return this.blacklist.findKeyword(filter); - } - }, - hasFilter: function(filter) - { - if (filter instanceof WhitelistFilter) - { - return this.whitelist.hasFilter(filter); - } - else - { - return this.blacklist.hasFilter(filter); - } - }, - getKeywordForFilter: function(filter) - { - if (filter instanceof WhitelistFilter) - { - return this.whitelist.getKeywordForFilter(filter); - } - else - { - return this.blacklist.getKeywordForFilter(filter); - } - }, - isSlowFilter: function(filter) - { - var matcher = filter instanceof WhitelistFilter ? this.whitelist : this.blacklist; - if (matcher.hasFilter(filter)) - { - return !matcher.getKeywordForFilter(filter); - } - else - { - return !matcher.findKeyword(filter); - } - }, - matchesAnyInternal: function(location, contentType, docDomain, thirdParty, sitekey) - { - var candidates = location.toLowerCase().match(/[a-z0-9%]{3,}/g); - if (candidates === null) - { - candidates = []; - } - candidates.push(""); - var blacklistHit = null; - for (var i = 0, l = candidates.length; i < l; i++) - { - var substr = candidates[i]; - if (substr in this.whitelist.filterByKeyword) - { - var result = this.whitelist._checkEntryMatch(substr, location, contentType, docDomain, thirdParty, sitekey); - if (result) - { - return result; - } - } - if (substr in this.blacklist.filterByKeyword && blacklistHit === null) - { - blacklistHit = this.blacklist._checkEntryMatch(substr, location, contentType, docDomain, thirdParty, sitekey); - } - } - return blacklistHit; - }, - matchesAny: function(location, docDomain) - { - var key = location + " " + docDomain + " "; - if (key in this.resultCache) - { - return this.resultCache[key]; - } - var result = this.matchesAnyInternal(location, 0, docDomain, null, null); - if (this.cacheEntries >= CombinedMatcher.maxCacheEntries) - { - this.resultCache = createDict(); - this.cacheEntries = 0; - } - this.resultCache[key] = result; - this.cacheEntries++; - return result; - } -}; -var defaultMatcher = new CombinedMatcher(); - -var direct = 'DIRECT;'; - -for (var i = 0; i < rules.length; i++) { - defaultMatcher.add(Filter.fromText(rules[i])); -} - -function FindProxyForURL(url, host) { - if (defaultMatcher.matchesAny(url, host) instanceof BlockingFilter) { - return proxy; - } - return direct; -} diff --git a/v2rayN/v2rayN/Resources/privoxy_conf.txt b/v2rayN/v2rayN/Resources/privoxy_conf.txt deleted file mode 100644 index 6a265b25..00000000 --- a/v2rayN/v2rayN/Resources/privoxy_conf.txt +++ /dev/null @@ -1,8 +0,0 @@ -listen-address __PRIVOXY_BIND_IP__:__PRIVOXY_BIND_PORT__ -toggle 0 -logfile v2ray_privoxy.log -show-on-task-bar 0 -activity-animation 0 -forward-socks5 / 127.0.0.1:__SOCKS_PORT__ . -max-client-connections 2048 -hide-console diff --git a/v2rayN/v2rayN/Resx/ResUI.Designer.cs b/v2rayN/v2rayN/Resx/ResUI.Designer.cs index b5b956d6..91bf3499 100644 --- a/v2rayN/v2rayN/Resx/ResUI.Designer.cs +++ b/v2rayN/v2rayN/Resx/ResUI.Designer.cs @@ -19,7 +19,7 @@ namespace v2rayN.Resx { // 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。 // 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen // (以 /str 作为命令选项),或重新生成 VS 项目。 - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] internal class ResUI { @@ -627,6 +627,15 @@ namespace v2rayN.Resx { } } + /// + /// 查找类似 Operation success 的本地化字符串。 + /// + internal static string OperationSuccess { + get { + return ResourceManager.GetString("OperationSuccess", resourceCulture); + } + } + /// /// 查找类似 Please Fill Remarks 的本地化字符串。 /// @@ -654,6 +663,15 @@ namespace v2rayN.Resx { } } + /// + /// 查找类似 Please select rules 的本地化字符串。 + /// + internal static string PleaseSelectRules { + get { + return ResourceManager.GetString("PleaseSelectRules", resourceCulture); + } + } + /// /// 查找类似 Please select the server first 的本地化字符串。 /// @@ -681,6 +699,15 @@ namespace v2rayN.Resx { } } + /// + /// 查找类似 Are you sure to remove the rules? 的本地化字符串。 + /// + internal static string RemoveRules { + get { + return ResourceManager.GetString("RemoveRules", resourceCulture); + } + } + /// /// 查找类似 Are you sure to remove the server? 的本地化字符串。 /// diff --git a/v2rayN/v2rayN/Resx/ResUI.resx b/v2rayN/v2rayN/Resx/ResUI.resx index 50d37abe..d934df5b 100644 --- a/v2rayN/v2rayN/Resx/ResUI.resx +++ b/v2rayN/v2rayN/Resx/ResUI.resx @@ -361,4 +361,13 @@ The ping of current service: {0} + + Operation success + + + Please select rules + + + Are you sure to remove the rules? + \ No newline at end of file diff --git a/v2rayN/v2rayN/Resx/ResUI.zh-Hans.resx b/v2rayN/v2rayN/Resx/ResUI.zh-Hans.resx index 4b312497..3346ab6a 100644 --- a/v2rayN/v2rayN/Resx/ResUI.zh-Hans.resx +++ b/v2rayN/v2rayN/Resx/ResUI.zh-Hans.resx @@ -361,4 +361,13 @@ 当前服务的真连接延迟: {0} + + 操作成功 + + + 请先选择规则 + + + 是否确定移除规则? + \ No newline at end of file diff --git a/v2rayN/v2rayN/Sample/custom_routing_rules b/v2rayN/v2rayN/Sample/custom_routing_rules new file mode 100644 index 00000000..94b28108 --- /dev/null +++ b/v2rayN/v2rayN/Sample/custom_routing_rules @@ -0,0 +1,28 @@ +[{ + "remarks": "block", + "outboundTag": "block", + "domain": [ + "geosite:category-ads-all" + ] + }, + { + "remarks": "direct", + "outboundTag": "direct", + "domain": [ + "geosite:cn" + ] + }, + { + "remarks": "direct", + "outboundTag": "direct", + "ip": [ + "geoip:private", + "geoip:cn" + ] + }, + { + "remarks": "proxy", + "port": "0-65535", + "outboundTag": "proxy" + } +] \ No newline at end of file diff --git a/v2rayN/v2rayN/Tool/CDateTime.cs b/v2rayN/v2rayN/Tool/CDateTime.cs deleted file mode 100644 index fb7a2e25..00000000 --- a/v2rayN/v2rayN/Tool/CDateTime.cs +++ /dev/null @@ -1,156 +0,0 @@ -using System; -using System.Net; -using System.Runtime.InteropServices; -using System.Text; - -namespace v2rayN -{ - class CDateTime - { - /// - /// 设置本地系统时间 - /// - public static void SetLocalTime() - { - using (WebClient wc = new WebClient()) - { - string url = ""; - string result = string.Empty; - - try - { - wc.Encoding = Encoding.UTF8; - wc.DownloadStringCompleted += wc_DownloadStringCompleted; - wc.DownloadStringAsync(new Uri(url)); - } - catch - { - } - } - } - - static void wc_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e) - { - try - { - string result = e.Result; - if (Utils.IsNullOrEmpty(result)) - { - return; - } - EWebTime webTime = Utils.FromJson(result); - if (webTime != null - && webTime.result != null - && webTime.result.stime != null - && !Utils.IsNullOrEmpty(webTime.result.stime)) - { - DateTime dtWeb = GetTimeFromLinux(webTime.result.stime); - - SYSTEMTIME st = new SYSTEMTIME(); - st.FromDateTime(dtWeb); - - //调用Win32 API设置系统时间 - Win32API.SetLocalTime(ref st); - } - } - catch - { - } - } - - /// - /// 时间戳转为C#格式时间 - /// - /// - /// - private static DateTime GetTimeFromLinux(string timeStamp) - { - DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1)); - long lTime = long.Parse(timeStamp + "0000000"); - TimeSpan toNow = new TimeSpan(lTime); return dtStart.Add(toNow); - } - } - - /// - /// - /// - public struct SYSTEMTIME - { - public ushort wYear; - public ushort wMonth; - public ushort wDayOfWeek; - public ushort wDay; - public ushort wHour; - public ushort wMinute; - public ushort wSecond; - public ushort wMilliseconds; - - /// - /// 从System.DateTime转换。 - /// - /// System.DateTime类型的时间。 - public void FromDateTime(DateTime time) - { - wYear = (ushort)time.Year; - wMonth = (ushort)time.Month; - wDayOfWeek = (ushort)time.DayOfWeek; - wDay = (ushort)time.Day; - wHour = (ushort)time.Hour; - wMinute = (ushort)time.Minute; - wSecond = (ushort)time.Second; - wMilliseconds = (ushort)time.Millisecond; - } - - /// - /// 转换为System.DateTime类型。 - /// - /// - public DateTime ToDateTime() - { - return new DateTime(wYear, wMonth, wDay, wHour, wMinute, wSecond, wMilliseconds); - } - - /// - /// 静态方法。转换为System.DateTime类型。 - /// - /// SYSTEMTIME类型的时间。 - /// - public static DateTime ToDateTime(SYSTEMTIME time) - { - return time.ToDateTime(); - } - } - - public class Win32API - { - [DllImport("Kernel32.dll")] - public static extern bool SetLocalTime(ref SYSTEMTIME Time); - [DllImport("Kernel32.dll")] - public static extern void GetLocalTime(ref SYSTEMTIME Time); - } - - public class WTResult - { - /// - /// - /// - public string stime { get; set; } - } - - public class EWebTime - { - /// - /// - /// - public WTResult result { get; set; } - /// - /// - /// - public int error_code { get; set; } - /// - /// - /// - public string reason { get; set; } - } -} - diff --git a/v2rayN/v2rayN/Tool/Utils.cs b/v2rayN/v2rayN/Tool/Utils.cs index 8fa10c63..f6ac4c67 100644 --- a/v2rayN/v2rayN/Tool/Utils.cs +++ b/v2rayN/v2rayN/Tool/Utils.cs @@ -24,8 +24,7 @@ using Newtonsoft.Json.Linq; namespace v2rayN { class Utils - { - + { #region 资源Json操作 @@ -802,6 +801,10 @@ namespace v2rayN } } + public static void AddSubItem(ListViewItem i, string name, string text) + { + i.SubItems.Add(new ListViewItem.ListViewSubItem() { Name = name, Text = text }); + } #endregion #region TempPath diff --git a/v2rayN/v2rayN/v2rayN.csproj b/v2rayN/v2rayN/v2rayN.csproj index d79b2067..3211d957 100644 --- a/v2rayN/v2rayN/v2rayN.csproj +++ b/v2rayN/v2rayN/v2rayN.csproj @@ -125,6 +125,12 @@ BaseServerForm.cs + + Form + + + RoutingSettingDetailsForm.cs + Form @@ -138,12 +144,6 @@ RoutingSettingForm.cs - - UserControl - - - RoutingSettingControl.cs - Form @@ -187,9 +187,9 @@ - + @@ -300,12 +300,11 @@ QRCodeControl.cs Designer - - RoutingSettingControl.cs - Designer + + RoutingSettingDetailsForm.cs - - RoutingSettingControl.cs + + RoutingSettingDetailsForm.cs SubSettingControl.cs @@ -374,6 +373,7 @@ + @@ -442,7 +442,6 @@ - diff --git a/v2rayN/v2rayN/v2rayN.csproj.user b/v2rayN/v2rayN/v2rayN.csproj.user index 778969a8..a36e9eb4 100644 --- a/v2rayN/v2rayN/v2rayN.csproj.user +++ b/v2rayN/v2rayN/v2rayN.csproj.user @@ -9,7 +9,7 @@ zh-CN false - ProjectFiles + ShowAllFiles false From 656451f60454010e67d51feb807a63b314035ba5 Mon Sep 17 00:00:00 2001 From: 2dust <31833384+2dust@users.noreply.github.com> Date: Thu, 31 Dec 2020 13:45:00 +0800 Subject: [PATCH 39/54] Update V2rayConfigHandler.cs --- v2rayN/v2rayN/Handler/V2rayConfigHandler.cs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs b/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs index 3242cbb1..596a95b3 100644 --- a/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs +++ b/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs @@ -220,6 +220,10 @@ namespace v2rayN.Handler var it = Utils.DeepCopy(rules); it.ip = null; it.type = "field"; + if (Utils.IsNullOrEmpty(rules.port)) + { + it.port = null; + } v2rayConfig.routing.rules.Add(it); hasDomainIp = true; } @@ -228,6 +232,10 @@ namespace v2rayN.Handler var it = Utils.DeepCopy(rules); it.domain = null; it.type = "field"; + if (Utils.IsNullOrEmpty(rules.port)) + { + it.port = null; + } v2rayConfig.routing.rules.Add(it); hasDomainIp = true; } From d8ee3c3bbacdcbeb10db1af85ec77c2e4ada5a3b Mon Sep 17 00:00:00 2001 From: 2dust <31833384+2dust@users.noreply.github.com> Date: Thu, 31 Dec 2020 20:15:01 +0800 Subject: [PATCH 40/54] up --- .../RoutingSettingDetailsForm.Designer.cs | 39 +- .../v2rayN/Forms/RoutingSettingDetailsForm.cs | 22 + .../Forms/RoutingSettingDetailsForm.resx | 1003 ++++++++++------- v2rayN/v2rayN/Forms/RoutingSettingForm.cs | 6 +- v2rayN/v2rayN/Forms/RoutingSettingForm.resx | 256 +++-- v2rayN/v2rayN/Handler/V2rayConfigHandler.cs | 72 +- v2rayN/v2rayN/Mode/RulesItem.cs | 27 +- v2rayN/v2rayN/Resx/Resx.zip | Bin 7367 -> 0 bytes v2rayN/v2rayN/Sample/custom_routing_block | 1 - v2rayN/v2rayN/Sample/custom_routing_direct | 132 --- v2rayN/v2rayN/Sample/custom_routing_private | 3 - v2rayN/v2rayN/Sample/custom_routing_proxy | 33 - v2rayN/v2rayN/v2rayN.csproj | 4 - 13 files changed, 845 insertions(+), 753 deletions(-) delete mode 100644 v2rayN/v2rayN/Resx/Resx.zip delete mode 100644 v2rayN/v2rayN/Sample/custom_routing_block delete mode 100644 v2rayN/v2rayN/Sample/custom_routing_direct delete mode 100644 v2rayN/v2rayN/Sample/custom_routing_private delete mode 100644 v2rayN/v2rayN/Sample/custom_routing_proxy diff --git a/v2rayN/v2rayN/Forms/RoutingSettingDetailsForm.Designer.cs b/v2rayN/v2rayN/Forms/RoutingSettingDetailsForm.Designer.cs index 4cf4fe18..ee40a2d0 100644 --- a/v2rayN/v2rayN/Forms/RoutingSettingDetailsForm.Designer.cs +++ b/v2rayN/v2rayN/Forms/RoutingSettingDetailsForm.Designer.cs @@ -46,6 +46,8 @@ this.txtIP = new System.Windows.Forms.TextBox(); this.groupBox1 = new System.Windows.Forms.GroupBox(); this.txtDomain = new System.Windows.Forms.TextBox(); + this.label3 = new System.Windows.Forms.Label(); + this.clbProtocol = new System.Windows.Forms.CheckedListBox(); this.panel3.SuspendLayout(); this.panel4.SuspendLayout(); this.panel2.SuspendLayout(); @@ -60,7 +62,8 @@ // // panel3 // - resources.ApplyResources(this.panel3, "panel3"); + this.panel3.Controls.Add(this.clbProtocol); + this.panel3.Controls.Add(this.label3); this.panel3.Controls.Add(this.txtPort); this.panel3.Controls.Add(this.label1); this.panel3.Controls.Add(this.labRoutingTips); @@ -68,6 +71,7 @@ this.panel3.Controls.Add(this.cmbOutboundTag); this.panel3.Controls.Add(this.txtRemarks); this.panel3.Controls.Add(this.label2); + resources.ApplyResources(this.panel3, "panel3"); this.panel3.Name = "panel3"; // // txtPort @@ -82,8 +86,8 @@ // // labRoutingTips // - resources.ApplyResources(this.labRoutingTips, "labRoutingTips"); this.labRoutingTips.ForeColor = System.Drawing.Color.Brown; + resources.ApplyResources(this.labRoutingTips, "labRoutingTips"); this.labRoutingTips.Name = "labRoutingTips"; // // label4 @@ -93,13 +97,13 @@ // // cmbOutboundTag // - resources.ApplyResources(this.cmbOutboundTag, "cmbOutboundTag"); this.cmbOutboundTag.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.cmbOutboundTag.FormattingEnabled = true; this.cmbOutboundTag.Items.AddRange(new object[] { resources.GetString("cmbOutboundTag.Items"), resources.GetString("cmbOutboundTag.Items1"), resources.GetString("cmbOutboundTag.Items2")}); + resources.ApplyResources(this.cmbOutboundTag, "cmbOutboundTag"); this.cmbOutboundTag.Name = "cmbOutboundTag"; // // txtRemarks @@ -114,15 +118,15 @@ // // panel4 // - resources.ApplyResources(this.panel4, "panel4"); this.panel4.Controls.Add(this.btnClose); this.panel4.Controls.Add(this.btnOK); + resources.ApplyResources(this.panel4, "panel4"); this.panel4.Name = "panel4"; // // btnClose // - resources.ApplyResources(this.btnClose, "btnClose"); this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel; + resources.ApplyResources(this.btnClose, "btnClose"); this.btnClose.Name = "btnClose"; this.btnClose.UseVisualStyleBackColor = true; this.btnClose.Click += new System.EventHandler(this.btnClose_Click); @@ -136,15 +140,15 @@ // // panel2 // - resources.ApplyResources(this.panel2, "panel2"); this.panel2.Controls.Add(this.groupBox2); this.panel2.Controls.Add(this.groupBox1); + resources.ApplyResources(this.panel2, "panel2"); this.panel2.Name = "panel2"; // // groupBox2 // - resources.ApplyResources(this.groupBox2, "groupBox2"); this.groupBox2.Controls.Add(this.txtIP); + resources.ApplyResources(this.groupBox2, "groupBox2"); this.groupBox2.Name = "groupBox2"; this.groupBox2.TabStop = false; // @@ -155,8 +159,8 @@ // // groupBox1 // - resources.ApplyResources(this.groupBox1, "groupBox1"); this.groupBox1.Controls.Add(this.txtDomain); + resources.ApplyResources(this.groupBox1, "groupBox1"); this.groupBox1.Name = "groupBox1"; this.groupBox1.TabStop = false; // @@ -165,6 +169,23 @@ resources.ApplyResources(this.txtDomain, "txtDomain"); this.txtDomain.Name = "txtDomain"; // + // label3 + // + resources.ApplyResources(this.label3, "label3"); + this.label3.Name = "label3"; + // + // clbProtocol + // + this.clbProtocol.CheckOnClick = true; + resources.ApplyResources(this.clbProtocol, "clbProtocol"); + this.clbProtocol.FormattingEnabled = true; + this.clbProtocol.Items.AddRange(new object[] { + resources.GetString("clbProtocol.Items"), + resources.GetString("clbProtocol.Items1"), + resources.GetString("clbProtocol.Items2")}); + this.clbProtocol.MultiColumn = true; + this.clbProtocol.Name = "clbProtocol"; + // // RoutingSettingDetailsForm // resources.ApplyResources(this, "$this"); @@ -207,5 +228,7 @@ private System.Windows.Forms.Label labRoutingTips; private System.Windows.Forms.Label label1; private System.Windows.Forms.TextBox txtPort; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.CheckedListBox clbProtocol; } } \ No newline at end of file diff --git a/v2rayN/v2rayN/Forms/RoutingSettingDetailsForm.cs b/v2rayN/v2rayN/Forms/RoutingSettingDetailsForm.cs index 09b5a39e..a0511439 100644 --- a/v2rayN/v2rayN/Forms/RoutingSettingDetailsForm.cs +++ b/v2rayN/v2rayN/Forms/RoutingSettingDetailsForm.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.Windows.Forms; using v2rayN.Base; using v2rayN.Handler; @@ -42,6 +43,16 @@ namespace v2rayN.Forms routingItem.outboundTag = cmbOutboundTag.Text; routingItem.domain = Utils.String2List(txtDomain.Text); routingItem.ip = Utils.String2List(txtIP.Text); + + var protocol = new List(); + for (int i = 0; i < clbProtocol.Items.Count; i++) + { + if (clbProtocol.GetItemChecked(i)) + { + protocol.Add(clbProtocol.Items[i].ToString()); + } + } + routingItem.protocol = protocol; } } private void BindingData() @@ -53,6 +64,17 @@ namespace v2rayN.Forms cmbOutboundTag.Text = routingItem.outboundTag; txtDomain.Text = Utils.List2String(routingItem.domain, true); txtIP.Text = Utils.List2String(routingItem.ip, true); + + if (routingItem.protocol != null) + { + for (int i = 0; i < clbProtocol.Items.Count; i++) + { + if (routingItem.protocol.Contains(clbProtocol.Items[i].ToString())) + { + clbProtocol.SetItemChecked(i, true); + } + } + } } } private void ClearBind() diff --git a/v2rayN/v2rayN/Forms/RoutingSettingDetailsForm.resx b/v2rayN/v2rayN/Forms/RoutingSettingDetailsForm.resx index 8153fa31..0481d1dd 100644 --- a/v2rayN/v2rayN/Forms/RoutingSettingDetailsForm.resx +++ b/v2rayN/v2rayN/Forms/RoutingSettingDetailsForm.resx @@ -117,472 +117,607 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - panel2 - - - - 32 - - - 30 - - - 31 - - - proxy - - - Fill - - - panel1 - - - 3 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 2 - - - NoControl - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - True - - - Left - - - NoControl - - - 0 - - - - 29, 12 - - - panel2 - - - RoutingSettingDetailsForm - - - Fill - - - 1 - - - Fill - - - 411, 15 - - - 119, 20 - - - System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Bottom - Top - - 0 - - - System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 344, 417 - - - $this - - - 504, 15 - - - groupBox1 - - - NoControl - - - 6 - - - label1 - - - 742, 437 - + 0, 0 - - 4 - - - panel3 - - - True - - - panel3 - - - 3 - - - panel4 - - - 5 - - - 19, 43 - - - 25 - - - 3, 17 - - - panel3 - - - 274, 20 - - - labRoutingTips - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 491, 20 - - - groupBox1 - - - 1 - - - RoutingSettingDetailsForm - - - 166, 21 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - panel3 - - - 544, 16 - - - groupBox2 - - - 3 - - - 1 - - - 386, 417 - - - panel3 - - - 392, 0 - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - panel2 - - - panel4 - - - NoControl - - - Top - - - 598, 16 - - - $this - - - groupBox2 - - - panel3 - - - System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - txtPort - - - panel4 - - - 3, 17 - - - 1 - 742, 10 - - 0, 0 - - - 24 - - - label4 - - - &OK - - - 75, 23 - - - btnClose - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 34 - - - 29 - - - block - - - direct - - - 0 - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - btnOK - - - 2 - - - 110, 21 - - - 4 - + 7 - - 0 + + panel1 - - 11 - - - 0 - - - panel3 - - - 8 - - - v2rayN.Forms.BaseForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null - - - 0, 10 - - - Remarks - - - Fill - - - 742, 60 - - - 0, 79 - - - $this - - - 47, 12 - - - &Cancel - - - *Set the rules, separated by commas (,); support Domain (pure string / regular / subdomain) and IP - - - 742, 69 - - - True - - - 6, 12 - - - Port - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - txtIP - - - 0 - - - label2 - - - cmbOutboundTag - - - True - - - 19, 20 - - - NoControl - - - 742, 576 - - - 10 - - - 392, 437 - - - 75, 23 - - - NoControl - - - True - - - 4 - - - 5 - - - txtDomain - - - 84, 16 - - - IP - - + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + $this - - 0, 516 + + 3 - - 33 + + 80 - - 47, 12 + + http - - 350, 437 + + tls - + + bittorrent + + + 347, 43 + + + 245, 20 + + + 39 + + + clbProtocol + + + System.Windows.Forms.CheckedListBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + panel3 - - Domain + + 0 - - txtRemarks + + True - - 347, 16 + + NoControl - - Out Tag + + 274, 47 - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 53, 12 + + + 36 + + + protocol + + + label3 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panel3 + + + 1 + + + 84, 43 + + + 166, 21 35 + + txtPort + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panel3 + + + 2 + + + True + + + NoControl + + + 19, 47 + + + 29, 12 + + + 34 + + + Port + + + label1 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panel3 + + + 3 + + + NoControl + + + 19, 82 + + + 598, 16 + + + 33 + + + *Set the rules, separated by commas (,); support Domain (pure string / regular / subdomain) and IP + + + labRoutingTips + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panel3 + + + 4 + + + True + + + NoControl + + + 274, 20 + + + 47, 12 + + + 32 + + + Out Tag + + + label4 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panel3 + + + 5 + + + proxy + + + direct + + + block + + + 347, 16 + + + 119, 20 + + + 31 + + + cmbOutboundTag + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panel3 + + + 6 + + + 84, 16 + + + 166, 21 + + + 30 + + + txtRemarks + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panel3 + + + 7 + + + True + + + NoControl + + + 19, 20 + + + 47, 12 + + + 29 + + + Remarks + + + label2 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panel3 + + + 8 + + + Top + + + 0, 10 + + + 742, 111 + + + 8 + + + panel3 + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 2 + + + btnClose + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panel4 + + + 0 + + + btnOK + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panel4 + + + 1 + + + Bottom + + + 0, 516 + + + 742, 60 + + + 10 + + + panel4 + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 1 + + + NoControl + + + 504, 15 + + + 75, 23 + + + 4 + + + &Cancel + + + btnClose + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panel4 + + + 0 + + + NoControl + + + 411, 15 + + + 75, 23 + + + 5 + + + &OK + + + btnOK + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panel4 + + + 1 + + + groupBox2 + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panel2 + + + 0 + + + groupBox1 + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panel2 + + + 1 + + + Fill + + + 0, 121 + + + 742, 395 + + + 11 + + + panel2 + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 0 + + + txtIP + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 0 + + + Fill + + + 392, 0 + + + 350, 395 + + + 4 + + + IP + + + groupBox2 + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panel2 + + + 0 + + + Fill + + + 3, 17 + + + True + + + 344, 375 + + + 25 + + + txtIP + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 0 + + + txtDomain + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 0 + + + Left + + + 0, 0 + + + 392, 395 + + + 3 + + + Domain + + + groupBox1 + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panel2 + + + 1 + + + Fill + + + 3, 17 + + + True + + + 386, 375 + + + 24 + + + txtDomain + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 0 + True + + 6, 12 + + + 742, 576 + + + RoutingSettingDetailsForm + + + RoutingSettingDetailsForm + + + v2rayN.Forms.BaseForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/v2rayN/v2rayN/Forms/RoutingSettingForm.cs b/v2rayN/v2rayN/Forms/RoutingSettingForm.cs index e63d4ed8..b51d56d6 100644 --- a/v2rayN/v2rayN/Forms/RoutingSettingForm.cs +++ b/v2rayN/v2rayN/Forms/RoutingSettingForm.cs @@ -42,8 +42,9 @@ namespace v2rayN.Forms lvRoutings.Columns.Add(UIRes.I18N("LvAlias"), 100); lvRoutings.Columns.Add("outboundTag", 80); lvRoutings.Columns.Add("port", 80); - lvRoutings.Columns.Add("domain", 200); - lvRoutings.Columns.Add("ip", 200); + lvRoutings.Columns.Add("protocol", 100); + lvRoutings.Columns.Add("domain", 160); + lvRoutings.Columns.Add("ip", 160); lvRoutings.EndUpdate(); } @@ -61,6 +62,7 @@ namespace v2rayN.Forms Utils.AddSubItem(lvItem, "remarks", item.remarks); Utils.AddSubItem(lvItem, "outboundTag", item.outboundTag); Utils.AddSubItem(lvItem, "port", item.port); + Utils.AddSubItem(lvItem, "protocol", Utils.List2String(item.protocol)); Utils.AddSubItem(lvItem, "domain", Utils.List2String(item.domain)); Utils.AddSubItem(lvItem, "ip", Utils.List2String(item.ip)); diff --git a/v2rayN/v2rayN/Forms/RoutingSettingForm.resx b/v2rayN/v2rayN/Forms/RoutingSettingForm.resx index ae3fa1eb..b773ce33 100644 --- a/v2rayN/v2rayN/Forms/RoutingSettingForm.resx +++ b/v2rayN/v2rayN/Forms/RoutingSettingForm.resx @@ -147,21 +147,6 @@ 0 - - NoControl - - - 475, 17 - - - 75, 23 - - - 5 - - - &OK - btnOK @@ -198,6 +183,81 @@ 3 + + NoControl + + + 475, 17 + + + 75, 23 + + + 5 + + + &OK + + + btnOK + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panel2 + + + 1 + + + linkLabelRoutingDoc + + + System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panel1 + + + 0 + + + cmbdomainStrategy + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panel1 + + + 1 + + + Top + + + 0, 25 + + + 765, 51 + + + 11 + + + panel1 + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 2 + True @@ -261,33 +321,59 @@ 1 - - Top - - - 0, 25 - - - 765, 51 - - - 11 - - - panel1 - - - System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 2 - 17, 17 + + 203, 186 + + + cmsLv + + + System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Fill + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w + LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkMAwAAAFFTeXN0 + ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2Vu + PWIwM2Y1ZjdmMTFkNTBhM2EFAQAAACFTeXN0ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0l0ZW0HAAAA + BFRleHQKSW1hZ2VJbmRleAlCYWNrQ29sb3IHQ2hlY2tlZARGb250CUZvcmVDb2xvchdVc2VJdGVtU3R5 + bGVGb3JTdWJJdGVtcwEABAAEBAAIFFN5c3RlbS5EcmF3aW5nLkNvbG9yAwAAAAETU3lzdGVtLkRyYXdp + bmcuRm9udAMAAAAUU3lzdGVtLkRyYXdpbmcuQ29sb3IDAAAAAQIAAAAGBAAAAAD/////Bfv///8UU3lz + dGVtLkRyYXdpbmcuQ29sb3IEAAAABG5hbWUFdmFsdWUKa25vd25Db2xvcgVzdGF0ZQEAAAAJBwcDAAAA + CgAAAAAAAAAAGAABAAAJBgAAAAH5////+////woAAAAAAAAAABoAAQABBQYAAAATU3lzdGVtLkRyYXdp + bmcuRm9udAQAAAAETmFtZQRTaXplBVN0eWxlBFVuaXQBAAQECxhTeXN0ZW0uRHJhd2luZy5Gb250U3R5 + bGUDAAAAG1N5c3RlbS5EcmF3aW5nLkdyYXBoaWNzVW5pdAMAAAADAAAABggAAAAG5a6L5L2TAAAQQQX3 + ////GFN5c3RlbS5EcmF3aW5nLkZvbnRTdHlsZQEAAAAHdmFsdWVfXwAIAwAAAAAAAAAF9v///xtTeXN0 + ZW0uRHJhd2luZy5HcmFwaGljc1VuaXQBAAAAB3ZhbHVlX18ACAMAAAADAAAACw== + + + + 3, 3 + + + 751, 505 + + + 12 + + + lvRoutings + + + v2rayN.Base.ListViewFlickerFree, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + + + tabPage2 + + + 0 + 202, 22 @@ -339,77 +425,12 @@ Move to bottom (B) - - 203, 186 - - - cmsLv - - - System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Fill - - - - AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w - LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkMAwAAAFFTeXN0 - ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2Vu - PWIwM2Y1ZjdmMTFkNTBhM2EFAQAAACFTeXN0ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0l0ZW0HAAAA - BFRleHQKSW1hZ2VJbmRleAlCYWNrQ29sb3IHQ2hlY2tlZARGb250CUZvcmVDb2xvchdVc2VJdGVtU3R5 - bGVGb3JTdWJJdGVtcwEABAAEBAAIFFN5c3RlbS5EcmF3aW5nLkNvbG9yAwAAAAETU3lzdGVtLkRyYXdp - bmcuRm9udAMAAAAUU3lzdGVtLkRyYXdpbmcuQ29sb3IDAAAAAQIAAAAGBAAAAAD/////Bfv///8UU3lz - dGVtLkRyYXdpbmcuQ29sb3IEAAAABG5hbWUFdmFsdWUKa25vd25Db2xvcgVzdGF0ZQEAAAAJBwcDAAAA - CgAAAAAAAAAAGAABAAAJBgAAAAH5////+////woAAAAAAAAAABoAAQABBQYAAAATU3lzdGVtLkRyYXdp - bmcuRm9udAQAAAAETmFtZQRTaXplBVN0eWxlBFVuaXQBAAQECxhTeXN0ZW0uRHJhd2luZy5Gb250U3R5 - bGUDAAAAG1N5c3RlbS5EcmF3aW5nLkdyYXBoaWNzVW5pdAMAAAADAAAABggAAAAG5a6L5L2TAAAQQQX3 - ////GFN5c3RlbS5EcmF3aW5nLkZvbnRTdHlsZQEAAAAHdmFsdWVfXwAIAwAAAAAAAAAF9v///xtTeXN0 - ZW0uRHJhd2luZy5HcmFwaGljc1VuaXQBAAAAB3ZhbHVlX18ACAMAAAADAAAACw== - - - - 3, 3 - - - 751, 505 - - - 12 - - - lvRoutings - - - v2rayN.Base.ListViewFlickerFree, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null - - - tabPage2 - - - 0 - 120, 21 Edit and Function - - 4, 22 - - - 3, 3, 3, 3 - - - 757, 511 - - - 0 - - - RuleList - tabPage2 @@ -446,6 +467,33 @@ 1 + + 4, 22 + + + 3, 3, 3, 3 + + + 757, 511 + + + 0 + + + RuleList + + + tabPage2 + + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabControl2 + + + 0 + 139, 17 diff --git a/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs b/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs index 596a95b3..473400c3 100644 --- a/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs +++ b/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs @@ -214,16 +214,37 @@ namespace v2rayN.Handler { return 0; } + if (Utils.IsNullOrEmpty(rules.port)) + { + rules.port = null; + } + if (rules.domain != null && rules.domain.Count == 0) + { + rules.domain = null; + } + if (rules.ip != null && rules.ip.Count == 0) + { + rules.ip = null; + } + if (rules.protocol != null && rules.protocol.Count == 0) + { + rules.protocol = null; + } + var hasDomainIp = false; if (rules.domain != null && rules.domain.Count > 0) { var it = Utils.DeepCopy(rules); it.ip = null; it.type = "field"; - if (Utils.IsNullOrEmpty(rules.port)) - { - it.port = null; - } + //if (Utils.IsNullOrEmpty(it.port)) + //{ + // it.port = null; + //} + //if (it.protocol != null && it.protocol.Count == 0) + //{ + // it.protocol = null; + //} v2rayConfig.routing.rules.Add(it); hasDomainIp = true; } @@ -232,20 +253,43 @@ namespace v2rayN.Handler var it = Utils.DeepCopy(rules); it.domain = null; it.type = "field"; - if (Utils.IsNullOrEmpty(rules.port)) - { - it.port = null; - } + //if (Utils.IsNullOrEmpty(it.port)) + //{ + // it.port = null; + //} + //if (it.protocol != null && it.protocol.Count == 0) + //{ + // it.protocol = null; + //} v2rayConfig.routing.rules.Add(it); hasDomainIp = true; } - if (!hasDomainIp && !Utils.IsNullOrEmpty(rules.port)) + if (!hasDomainIp) { - var it = Utils.DeepCopy(rules); - it.domain = null; - it.ip = null; - it.type = "field"; - v2rayConfig.routing.rules.Add(it); + if (!Utils.IsNullOrEmpty(rules.port)) + { + var it = Utils.DeepCopy(rules); + //it.domain = null; + //it.ip = null; + //if (it.protocol != null && it.protocol.Count == 0) + //{ + // it.protocol = null; + //} + it.type = "field"; + v2rayConfig.routing.rules.Add(it); + } + else if (rules.protocol != null && rules.protocol.Count > 0) + { + var it = Utils.DeepCopy(rules); + //it.domain = null; + //it.ip = null; + //if (Utils.IsNullOrEmpty(it.port)) + //{ + // it.port = null; + //} + it.type = "field"; + v2rayConfig.routing.rules.Add(it); + } } } catch diff --git a/v2rayN/v2rayN/Mode/RulesItem.cs b/v2rayN/v2rayN/Mode/RulesItem.cs index a4ae121e..bb3a85e4 100644 --- a/v2rayN/v2rayN/Mode/RulesItem.cs +++ b/v2rayN/v2rayN/Mode/RulesItem.cs @@ -6,31 +6,22 @@ namespace v2rayN.Mode [Serializable] public class RulesItem { - public string remarks { get; set; } - /// - /// - /// + public string remarks { get; set; } + public string type { get; set; } - /// - /// - /// + public string port { get; set; } public List inboundTag { get; set; } - /// - /// - /// + public string outboundTag { get; set; } - - /// - /// - /// + public List ip { get; set; } - - /// - /// - /// + public List domain { get; set; } + + public List protocol { get; set; } + } } diff --git a/v2rayN/v2rayN/Resx/Resx.zip b/v2rayN/v2rayN/Resx/Resx.zip deleted file mode 100644 index 0cb38db96976257ee5c256c7f490c4a730acd46c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7367 zcmZ{pbyQuwn#OV0;;x5MC~|OjDMbngcXxLvE(dpaw}ZR8yB2rXVufObPQUxjojY@9 zCVTB9du2awvXVdYThFT~3k!z=^;eNsmzDoV=RYf=KP|}ASyhJls|C|1Lpx_?2~%fF zb30QfW@Bf?KQi1uKOjM|tI5j$&MDR}LxzHqp@o8a_rGLLrp_LVTIw|mthm0?d%|f# zy{O!#u@x{zK`S~XSeSNJ7L?(U*|Ye;gCP^`7hMk@DSy5JIV?T*SR8ELTYi{e>IlPl zdGt1a;*Z(guW(OC28>9ZBk$w8jueLwi-W>i>83O<&m2E&YcF!raTnAm$>O zBDlCxJ;K!Rri{^-RtPl4U7MDTOyVF`w4L~bgQ7x+#4|z(4v`sHC;BR*)Rb+UCDf@{ z>>V2;*bu#tx;=3X*GnXWv0JhN-^QPlaxDVc?mc5*?#Zu*M*2!tQ6H$h*ojWg1ykj0f}l2M2UPDj$IOHg%-4lF{Nyl`M(%N5+U-dvq|(w zk9eB=;9Y7cLL;`@d|(E#FtTC~#3A93w-t)G@NNK$8P{ea=`e@c72rxaKAyMAId~UU zdDvggUZ0kzL<17Dy^El(6`T509D$ry#A}G(T!ntUn8xploiW@SNNs8zKi|$4p;&a8 zNjJj*d8xt*Yg_1WvKU@=0GLR(#I2rE)hY>kN2B(wjY?2!9;=GbL9a})S9n?jF zg~b7!bfSebhCmgW#I-WE)+owW)Adf7AE_$gw~h2LNi^`g91lee2$^I<}({!=xg8KGc&Yhzy;o%{pk$S`daF zYORm`DVpbYYI3i&KDoO>U_HZ++Y5~gl1WnEy}!o|H13)hDK22y1Yodx&M>-^E({sX z(PMDaYiE;lnT#qr?x;vVXsqlOkoDf=w#6H5A(;?x)Y!$HgFxjYQfeA8l$xtN9?+Qw zjBzkbf-V;;z*7kZ@ch*0F!?-Q2Btc0lnO7pTo?+$L6X$lv@f`B^|M6p`Dy&J&^!wRw2raKqEY*5HLPRZ;fc_ePcLSxK77rCq|XE9z~7E z&0SWIv*3qmwNR!l?Vj`^r2@Xf60^G+dX*k*vB6gSgbYd(^-omT>sVWG7|~I9B3kn< z0&LbYY#7GwcX70rCX!mbZc|yS_LZd^n?)WS?ZTCkb}eZOi`O82Zcm-(?eYiil%*PE z?x^>I_#r)|XR-jJBFDgh0E!LAAuE&M9^c(X58U6sE|1sM^>eN99t>i}~;7f8lokL-l0 zW;WVOk=D&WD+#_h_)R1xNDM4z9pvy`E$6Wmp~qX`4on0uW^cQ++5;~x zCOw`Pb2((UtIF<9*w1|R#>CAw37H=-4`{iG$c@VuXt2^_$od1xmd`ru5R(@c3A!lU zE^4|U!R8N$Ud-^Nb_nVeOBDJGKp66y_mM9Y3z-(;Lz9!I{>xXwsLY$lZaFAdx)9y+ zU;=%_ninA*Ap#viA?MFtW#ju#SV1uXI5pPpmxw;<95?3a;HR{{FE@=9;Z=&s@C|e` zn9t22Bjgr)QzdlG=8@}I1RmW!p)*_P(?Vt0ytt&D>nXWEb_LKL^1dH(w)Ql*IY!b2 ze%>9_!ALrj0`<|R!!8FpXL8=)v*hp=Go`J~W$s>@YbEoh#%-W^Q0Le!d~7~u*P1s5 zd#M{PEVpz)x&_t!oOCRZ+&0k2?W()mLHw=GwXCKimtPN=Y(T0KSKRiCz|eMC(y($Q zV51$GvQQR3OKRDQuXh(q9g~0~P@q{G)fHLb=K=mlTmsUC9V(p)kNz!wLw$Y4RYWu% z9sw`@6Mhx`Yf6E2)V#&i7pofb^W<-xVs}>o36%GFu@^PnycM4?1@QUr$B(Z2n=m_m zE?-eB^k&)PwDw{THDSf@*w}iRlIm>Y3AIDe7sPESyCKzM;i8vVKwp+WoEG%-|R5${q(y)mN+s!(U9o;JR`2za1-bC%SLdy!t0{cb3+L|O^Sv` zy)9ln?)jYk{bIlYVg4kj6rIP=B9|c}sCJaW0*?*XzO~EVK^D#6J#6R)G1QhV+=dzQ zB?Wu+hT5s}nFrKiuOAB6)>mdLrx822>rj30=Jw4ejo-5M?wk zZhAsEYhLKY(_Qg=W_iEawzDPUQ0}!KC!c{|CgEZbP~Mx{ln3>_GEwXC@%au@Yt8?9 zOm9a`@}aK}HVFRo=OucMZiVm)KDpNh0|n_8fspT?ZPMIsXllL(>%F{OE}a4E^k_}> zK`)T(Yz{EKZsy*GQ~xoDDKGIMC}_E2=3!~OGu{7=4eonL^?O@~ltHY}+40l0Xmtt& zUHLMre)U~8%ctLgLeT${>!zZp)zy%opcGl5ps@do>;4-CZfa@9F0f+#g>{5E_{i-# zm>XqD)LI(lQNWF~O@0vxkS@(<}OvB8`2 zq{o>z-23Tun=|4R&o3i@XCmH$9*U{nn7sYZgVboK1v4nbha-L-6J+h0JiJ%J7TSMv*>9? zhY_FG%D3w{lYBs7k8T(TkN?v#MNprT9;;RIA*MS$SwcNTsJ)% zZyqRu%WGB(|GaY;BdXs!nvH8a7+la}bLbHwM2C{mun%1W4@rl4z!E$w(zeakh6z8; z1F~)er27u>T;`2HyDi9%`Sw`-#n2h9tz5B$*``lz38cTaQn$wT$7zzJL#!lveJ*Eh zzs)P{~H#18O}s4oFV>-8awbf z;X)NQz%Mj+DS0Z2!GMyPwJaiouQBnRE>jrr(#b`+}>7$s2%E#{{IOZPGrF+?Rg^Q%YXY5wp|%PcFJEZlU))2YuWpJ<;F`h!DZOEnlLDJqNmGU{s3Y*~!}IoCDFh-) zbQS7=#OD@^XIl#E4)wccAprHBe0(eQSs^%D0tZTiHp*Y<2bXx>z7MdJEb`+B#|V9< ztFN!FjE7ZW`Y5%w?^Aa7TwP-#au%Y_7m>XDq3#_wIl2j62=3%s+UfQZ3m0x2b8?uw z4X@#`7i(4J^y&K7V|#CnC#FY-B!qolti5(Wi&DR*I4hO0S~8ga&X(VS50{PZCmOHc zL!Y~7=3ksKV8tU;VGVUewiX!QraOKIy!Z*@hAj7-{LDAx-#^AA4fMk)CxiV}5g{K+ zdrCk4vz$THxpsCu%%Koeqbkzq4x03cyfUKzx?E zkv~O#9V*&anv_Ox5*G`Ji$#7Fl=bF34SE(ofK~D-^b=h=srzn5xBz&YAe8I28rma| z$4po_B9*v{I4j1rqE;G)vBV%~4CJuFi%u8_JjMK)hOmni7zLfm2`A5~h&IQhrv1g{ z^i%2VasiBOz75WrQ5aj`SIKEBXz?SW#(Fe(4J0D?_=zp6-rt zHj$VUKCcSiv-z&)*%)YmN^y}5OU8xU>Q1}u$B?`{5`G_v+ zMJ72=8}6!m`CL4Zi(<7ZB2nMKAG2}3`W-460=QSLKscfs&w{(4Gpwx*1cTxYK9sas z6h^dx#a4F7F>L}Ds+#IXF&@#~w9)3qg+zGvslmzfATbw6$eI>093Vkk%H7D_^%ZSG z*LveDBI~P8c4+UgJ9G-xR42QhYa8eHr!#Yq}R4x1Ccq%McFakkE5bt+AF9I& z?%Co^iOkPSJ7`5Y#f`K)y%;}+79tp(85+W*CE)6LpI;I0Yk~_O6`DE9YHFaX!Xk`8bzOSm%3bKcR~>(#k@vi8|fHh+ZVtSFzAnQGaUHYO9e%( z!LTm9KS1AqJ@ZF*O-yt2wL@u#xw<1BNU$#g_3WNkO<9P6=cr_79bHn2QTN4H{5_sL zqK@rO7Kpl!X;mL*S^n)%Nc`j~;Z<)Qy_}ZtryuocY`^fYfZzI1{}V#wBX-0d{y<0y z01E0ar|NG{>Tgp?rv49oY$^|tN#NH~Vf=_gQM@LKOlQR(605^Ass+%D(FW|9eB^nj zzSBg@|F#SJIZZr1S7WnA+O_4-`|Z)v#ZU?VqH2~-{Z{A7!l`H^SWY!%BK7!dQ})l9 zJLatI9{Zx?`p1ct6Oo>oYv`JF&+=p?GW;-s8_Lqto$jYr+U6TIF<9B zWA_PNDxIuy^6A-!A@a%0ZKjVVc>9w1M^WsFsj5^f3+pZY?V-@2@0pV8h7zXE5@bu@ zXC8~N!V_;npYq!PWUZ4LLrnpudRa)U_HEOuwi?4s=5CtE1FiTUl|lZWE1nN0m4pZ9 zV-g%v@G^?wxe*)Q~D6M}E#0H774!-lY&U@qFPuVY3=T0Sf@tXmq7ud-y)9YNA+bvrYFW&*f3t3#;dXkNMmhY8qWAcO_#PZeIQ&l~H$UgKHY#%`vs}|7JNLVGx zFxQAi$#>Q}xVi?mIUiDWl;`*9oGwomb|aCaIBcst zNtGY8=!jUKldpVhF2>Wb?ymD>9xo%sV}lnhV#&fLc6O*f3(mkkg!(S{8M(gkBdMwxMw@i1S=|!7D*Kcd5mC@Hsa{C=&aY zows6i)XP+M=kXEa+ALDt@i3Rmozj^|#JbN~(rbN4f6BNdJt;SzUHPV3?4rD&3-5gU zNvuq6`@?`vX~PCJTvLcdY~B9nhR{+rUkgC6TlJ4ahT?4SFvBKfle`QFF0-v)>Q##r zsYFkU2av7A5e<7{nc;y?DgAUAR^_I~MAOSgEsV)rM{Sm9m9z#j6WX&?q9=BMRPvW! z$;ZicezEy6npEV$-ZC>;?NTyG*vG``T_a zuq-)uXYQCbNe~7pT-u`fkV-zH>u_3ALPiyWcbzzDfQhX-gVI~Awf#U0wdP_?Zf!={ zi;r*|iyRl4u~AO;`CQSKG2wYJ?=mVy2x?GrdefolfW>s zJl?NK!^AAs9s@eVxplS2U)7fTC+vunC7J9+-_TJjiqprHlZ3llGYf)=SLoiCr(9p7 z9FP!G)_GV%yj~T}LVLrwIro~iUaLQ*22J@NtW;q*$JuZQ!}$3yS=TaOSSxM7*nqUL zgXg?3$3E*J7{?&Ark;qB5(D4h_-%Kps2bA(3qOWfKQ-P?FW0R#wWAEi)(6l^^(Vr6LVmI=G?3akd+S^liS_RM=LHJkqDd&|uxMd2jh z$6N>Z=fWE0jg`JgT%&XC3mVjS1KPoTNGVqJ%zw)Y9Xm$c<%!D#Th zhf}_kuk$X`L-n+Cdgc&L&k=CFySTyG8%=K@vHUV(lWFC62FYNqJXCwnP*Ehm32g}V%+c6?@66l<#;#8h< zoMOp0o_Vv)T#TTTazQ5yGpO;K4m9nfZVtwUm^K%hNToeJs@A?u;WS5*BLx@`<~%8X7(83lW@~3U$`<;A!BWj! ze@8%kE;U|Ty4pkQuzEZH7AQQE|3PChkb`gN5W&C>l0?vQA|hF!`YV_n1;$7+s4<-6 z(y(*5?yPxC5&q{VOQ8#b1~iyv*RM#N50vqN6oT!Jp0b{tCwsRqF<7gv8@~FC-+~Dq z8nq-;$^E|Z;E@6{j~b{6JOqxxIHX>u*BX-kp_-Bm&#*%q)lL|E*2am1oXOrg{jRuZ zlbA{jp8+p1$WCO-hGrdF`^L~QFxfO}VJyU@iIwMzBrRvs(gfK7(IXvy7Dvz0Nc_d;FtR1^kx^EKS7u!BPa z+Hy-?)phi7Wa=j6snvaUlrubPso;V`b9z^Hy#2#!ZyWdukg5$c8PzdMQ{EhBNr5YP z*nMr2TAg#)7D8CJscF3KwmoFv3H3CV)03*FS2)7EePb-Ib86qZTEwi^(PvSv+V*Pk z?S6WoGhz+#E^Sb7du4%9ez&MJ{IRtNrG4;X@|#X`QpGmF1f}s#A~feiJG=h#4Xmo_ zS3=8Qh1~lkwkDJ!o3KMIE5GiP5xH{1XQNe~*Axd_;aaD}^P3}5`X!~8_Cl__wBufI z=F^CUj_l!Kkhqbuz$-QXwH(GngcFZvC) z)6)ulb?C!z>+G^sdcr$ls}YY$3!8PcYwNU(g}1|1MmP_9{8V4k6MIJ&|87^x;i4;B z6OLheX&l|MkBvdxoAs%6@hC$L=KUK=z}uWjIMTdLnx$SZDz;z?=d-FXmK=hnyeW*t zYv|j?{i~!~R4)`V^o`ic?mu`04TJj+6#BoDc7GV@Poexr{ZCx_KT~*rh57%Jcz^5v z3d8;9{hPY}8Rjqg`gSettings.settings True - - - - From 77c5f6c583f4c77317992bdd507cc7ae488cba44 Mon Sep 17 00:00:00 2001 From: 2dust <31833384+2dust@users.noreply.github.com> Date: Mon, 4 Jan 2021 20:30:24 +0800 Subject: [PATCH 41/54] up4.3 --- v2rayN/v2rayN/Forms/AddServer3Form.cs | 2 +- v2rayN/v2rayN/Forms/AddServer4Form.cs | 2 +- v2rayN/v2rayN/Forms/AddServer5Form.cs | 2 +- v2rayN/v2rayN/Forms/AddServerForm.cs | 2 +- v2rayN/v2rayN/Forms/MainForm.cs | 4 +- v2rayN/v2rayN/Forms/QRCodeControl.cs | 2 +- .../RoutingSettingDetailsForm.Designer.cs | 38 +- .../v2rayN/Forms/RoutingSettingDetailsForm.cs | 23 + .../Forms/RoutingSettingDetailsForm.resx | 174 ++--- v2rayN/v2rayN/Handler/ConfigHandler.cs | 103 +-- v2rayN/v2rayN/Handler/ShareHandler.cs | 683 ++++++++++++++++++ v2rayN/v2rayN/Handler/V2rayConfigHandler.cs | 391 +--------- v2rayN/v2rayN/Properties/AssemblyInfo.cs | 2 +- v2rayN/v2rayN/Resx/ResUI.Designer.cs | 11 +- v2rayN/v2rayN/Resx/ResUI.resx | 3 + v2rayN/v2rayN/Resx/ResUI.zh-Hans.resx | 3 + v2rayN/v2rayN/v2rayN.csproj | 1 + 17 files changed, 810 insertions(+), 636 deletions(-) create mode 100644 v2rayN/v2rayN/Handler/ShareHandler.cs diff --git a/v2rayN/v2rayN/Forms/AddServer3Form.cs b/v2rayN/v2rayN/Forms/AddServer3Form.cs index 8113a784..d1a4a858 100644 --- a/v2rayN/v2rayN/Forms/AddServer3Form.cs +++ b/v2rayN/v2rayN/Forms/AddServer3Form.cs @@ -119,7 +119,7 @@ namespace v2rayN.Forms { ClearServer(); - VmessItem vmessItem = V2rayConfigHandler.ImportFromClipboardConfig(Utils.GetClipboardData(), out string msg); + VmessItem vmessItem = ShareHandler.ImportFromClipboardConfig(Utils.GetClipboardData(), out string msg); if (vmessItem == null) { UI.ShowWarning(msg); diff --git a/v2rayN/v2rayN/Forms/AddServer4Form.cs b/v2rayN/v2rayN/Forms/AddServer4Form.cs index 23ec6aaa..29102347 100644 --- a/v2rayN/v2rayN/Forms/AddServer4Form.cs +++ b/v2rayN/v2rayN/Forms/AddServer4Form.cs @@ -108,7 +108,7 @@ namespace v2rayN.Forms { ClearServer(); - VmessItem vmessItem = V2rayConfigHandler.ImportFromClipboardConfig(Utils.GetClipboardData(), out string msg); + VmessItem vmessItem = ShareHandler.ImportFromClipboardConfig(Utils.GetClipboardData(), out string msg); if (vmessItem == null) { UI.ShowWarning(msg); diff --git a/v2rayN/v2rayN/Forms/AddServer5Form.cs b/v2rayN/v2rayN/Forms/AddServer5Form.cs index d426e5c6..32c7e48c 100644 --- a/v2rayN/v2rayN/Forms/AddServer5Form.cs +++ b/v2rayN/v2rayN/Forms/AddServer5Form.cs @@ -263,7 +263,7 @@ namespace v2rayN.Forms { ClearServer(); - VmessItem vmessItem = V2rayConfigHandler.ImportFromClipboardConfig(Utils.GetClipboardData(), out string msg); + VmessItem vmessItem = ShareHandler.ImportFromClipboardConfig(Utils.GetClipboardData(), out string msg); if (vmessItem == null) { UI.ShowWarning(msg); diff --git a/v2rayN/v2rayN/Forms/AddServerForm.cs b/v2rayN/v2rayN/Forms/AddServerForm.cs index bd80867b..ab54fd9b 100644 --- a/v2rayN/v2rayN/Forms/AddServerForm.cs +++ b/v2rayN/v2rayN/Forms/AddServerForm.cs @@ -268,7 +268,7 @@ namespace v2rayN.Forms { ClearServer(); - VmessItem vmessItem = V2rayConfigHandler.ImportFromClipboardConfig(Utils.GetClipboardData(), out string msg); + VmessItem vmessItem = ShareHandler.ImportFromClipboardConfig(Utils.GetClipboardData(), out string msg); if (vmessItem == null) { UI.ShowWarning(msg); diff --git a/v2rayN/v2rayN/Forms/MainForm.cs b/v2rayN/v2rayN/Forms/MainForm.cs index 96e6819e..67b78ee5 100644 --- a/v2rayN/v2rayN/Forms/MainForm.cs +++ b/v2rayN/v2rayN/Forms/MainForm.cs @@ -685,7 +685,7 @@ namespace v2rayN.Forms StringBuilder sb = new StringBuilder(); foreach (int v in lvSelecteds) { - string url = ConfigHandler.GetVmessQRCode(config, v); + string url = ShareHandler.GetShareUrl(config, v); if (Utils.IsNullOrEmpty(url)) { continue; @@ -708,7 +708,7 @@ namespace v2rayN.Forms StringBuilder sb = new StringBuilder(); foreach (int v in lvSelecteds) { - string url = ConfigHandler.GetVmessQRCode(config, v); + string url = ShareHandler.GetShareUrl(config, v); if (Utils.IsNullOrEmpty(url)) { continue; diff --git a/v2rayN/v2rayN/Forms/QRCodeControl.cs b/v2rayN/v2rayN/Forms/QRCodeControl.cs index 02d59b48..855db30d 100644 --- a/v2rayN/v2rayN/Forms/QRCodeControl.cs +++ b/v2rayN/v2rayN/Forms/QRCodeControl.cs @@ -24,7 +24,7 @@ namespace v2rayN.Forms { if (Index >= 0) { - string url = ConfigHandler.GetVmessQRCode(config, Index); + string url = ShareHandler.GetShareUrl(config, Index); if (Utils.IsNullOrEmpty(url)) { picQRCode.Image = null; diff --git a/v2rayN/v2rayN/Forms/RoutingSettingDetailsForm.Designer.cs b/v2rayN/v2rayN/Forms/RoutingSettingDetailsForm.Designer.cs index ee40a2d0..43d2de45 100644 --- a/v2rayN/v2rayN/Forms/RoutingSettingDetailsForm.Designer.cs +++ b/v2rayN/v2rayN/Forms/RoutingSettingDetailsForm.Designer.cs @@ -31,6 +31,8 @@ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(RoutingSettingDetailsForm)); this.panel1 = new System.Windows.Forms.Panel(); this.panel3 = new System.Windows.Forms.Panel(); + this.clbProtocol = new System.Windows.Forms.CheckedListBox(); + this.label3 = new System.Windows.Forms.Label(); this.txtPort = new System.Windows.Forms.TextBox(); this.label1 = new System.Windows.Forms.Label(); this.labRoutingTips = new System.Windows.Forms.Label(); @@ -46,8 +48,6 @@ this.txtIP = new System.Windows.Forms.TextBox(); this.groupBox1 = new System.Windows.Forms.GroupBox(); this.txtDomain = new System.Windows.Forms.TextBox(); - this.label3 = new System.Windows.Forms.Label(); - this.clbProtocol = new System.Windows.Forms.CheckedListBox(); this.panel3.SuspendLayout(); this.panel4.SuspendLayout(); this.panel2.SuspendLayout(); @@ -74,6 +74,23 @@ resources.ApplyResources(this.panel3, "panel3"); this.panel3.Name = "panel3"; // + // clbProtocol + // + this.clbProtocol.CheckOnClick = true; + resources.ApplyResources(this.clbProtocol, "clbProtocol"); + this.clbProtocol.FormattingEnabled = true; + this.clbProtocol.Items.AddRange(new object[] { + resources.GetString("clbProtocol.Items"), + resources.GetString("clbProtocol.Items1"), + resources.GetString("clbProtocol.Items2")}); + this.clbProtocol.MultiColumn = true; + this.clbProtocol.Name = "clbProtocol"; + // + // label3 + // + resources.ApplyResources(this.label3, "label3"); + this.label3.Name = "label3"; + // // txtPort // resources.ApplyResources(this.txtPort, "txtPort"); @@ -169,23 +186,6 @@ resources.ApplyResources(this.txtDomain, "txtDomain"); this.txtDomain.Name = "txtDomain"; // - // label3 - // - resources.ApplyResources(this.label3, "label3"); - this.label3.Name = "label3"; - // - // clbProtocol - // - this.clbProtocol.CheckOnClick = true; - resources.ApplyResources(this.clbProtocol, "clbProtocol"); - this.clbProtocol.FormattingEnabled = true; - this.clbProtocol.Items.AddRange(new object[] { - resources.GetString("clbProtocol.Items"), - resources.GetString("clbProtocol.Items1"), - resources.GetString("clbProtocol.Items2")}); - this.clbProtocol.MultiColumn = true; - this.clbProtocol.Name = "clbProtocol"; - // // RoutingSettingDetailsForm // resources.ApplyResources(this, "$this"); diff --git a/v2rayN/v2rayN/Forms/RoutingSettingDetailsForm.cs b/v2rayN/v2rayN/Forms/RoutingSettingDetailsForm.cs index a0511439..65fe6a8f 100644 --- a/v2rayN/v2rayN/Forms/RoutingSettingDetailsForm.cs +++ b/v2rayN/v2rayN/Forms/RoutingSettingDetailsForm.cs @@ -88,6 +88,29 @@ namespace v2rayN.Forms private void btnOK_Click(object sender, EventArgs e) { EndBindingData(); + var hasRule = false; + if (routingItem.domain != null && routingItem.domain.Count > 0) + { + hasRule = true; + } + if (routingItem.ip != null && routingItem.ip.Count > 0) + { + hasRule = true; + } + if (routingItem.protocol != null && routingItem.protocol.Count > 0) + { + hasRule = true; + } + if (!Utils.IsNullOrEmpty(routingItem.port)) + { + hasRule = true; + } + if (!hasRule) + { + UI.ShowWarning(string.Format(UIRes.I18N("RoutingRuleDetailRequiredTips"), "Port/Protocol/Domain/IP")); + return; + } + if (ConfigHandler.AddRoutingRule(ref config, routingItem, EditIndex) == 0) { this.DialogResult = DialogResult.OK; diff --git a/v2rayN/v2rayN/Forms/RoutingSettingDetailsForm.resx b/v2rayN/v2rayN/Forms/RoutingSettingDetailsForm.resx index 0481d1dd..855817b0 100644 --- a/v2rayN/v2rayN/Forms/RoutingSettingDetailsForm.resx +++ b/v2rayN/v2rayN/Forms/RoutingSettingDetailsForm.resx @@ -193,7 +193,7 @@ 36 - protocol + Protocol label3 @@ -420,54 +420,6 @@ 2 - - btnClose - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - panel4 - - - 0 - - - btnOK - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - panel4 - - - 1 - - - Bottom - - - 0, 516 - - - 742, 60 - - - 10 - - - panel4 - - - System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 1 - NoControl @@ -522,53 +474,44 @@ 1 - - groupBox2 + + Bottom - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 0, 516 - - panel2 + + 742, 60 - - 0 + + 10 - - groupBox1 + + panel4 - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - panel2 - - - 1 - - - Fill - - - 0, 121 - - - 742, 395 - - - 11 - - - panel2 - - + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + $this - - 0 + + 1 + + + Fill + + + 3, 17 + + + True + + + 344, 375 + + + 25 txtIP @@ -609,32 +552,20 @@ 0 - + Fill - + 3, 17 - + True - - 344, 375 + + 386, 375 - - 25 - - - txtIP - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 0 + + 24 txtDomain @@ -675,31 +606,28 @@ 1 - + Fill - - 3, 17 + + 0, 121 - - True + + 742, 395 - - 386, 375 + + 11 - - 24 + + panel2 - - txtDomain + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + $this - - groupBox1 - - + 0 diff --git a/v2rayN/v2rayN/Handler/ConfigHandler.cs b/v2rayN/v2rayN/Handler/ConfigHandler.cs index cfdd2281..abdd02f5 100644 --- a/v2rayN/v2rayN/Handler/ConfigHandler.cs +++ b/v2rayN/v2rayN/Handler/ConfigHandler.cs @@ -339,100 +339,6 @@ namespace v2rayN.Handler Utils.ToJsonFile(config, Utils.GetPath(configRes)); } - /// - /// 取得服务器QRCode配置 - /// - /// - /// - /// - public static string GetVmessQRCode(Config config, int index) - { - try - { - string url = string.Empty; - - VmessItem vmessItem = config.vmess[index]; - if (vmessItem.configType == (int)EConfigType.Vmess) - { - VmessQRCode vmessQRCode = new VmessQRCode - { - v = vmessItem.configVersion.ToString(), - ps = vmessItem.remarks.TrimEx(), //备注也许很长 ; - add = vmessItem.address, - port = vmessItem.port.ToString(), - id = vmessItem.id, - aid = vmessItem.alterId.ToString(), - net = vmessItem.network, - type = vmessItem.headerType, - host = vmessItem.requestHost, - path = vmessItem.path, - tls = vmessItem.streamSecurity - }; - - url = Utils.ToJson(vmessQRCode); - url = Utils.Base64Encode(url); - url = string.Format("{0}{1}", Global.vmessProtocol, url); - - } - else if (vmessItem.configType == (int)EConfigType.Shadowsocks) - { - string remark = string.Empty; - if (!Utils.IsNullOrEmpty(vmessItem.remarks)) - { - remark = "#" + WebUtility.UrlEncode(vmessItem.remarks); - } - url = string.Format("{0}:{1}@{2}:{3}", - vmessItem.security, - vmessItem.id, - vmessItem.address, - vmessItem.port); - url = Utils.Base64Encode(url); - url = string.Format("{0}{1}{2}", Global.ssProtocol, url, remark); - } - else if (vmessItem.configType == (int)EConfigType.Socks) - { - string remark = string.Empty; - if (!Utils.IsNullOrEmpty(vmessItem.remarks)) - { - remark = "#" + WebUtility.UrlEncode(vmessItem.remarks); - } - url = string.Format("{0}:{1}@{2}:{3}", - vmessItem.security, - vmessItem.id, - vmessItem.address, - vmessItem.port); - url = Utils.Base64Encode(url); - url = string.Format("{0}{1}{2}", Global.socksProtocol, url, remark); - } - else if (vmessItem.configType == (int)EConfigType.Trojan) - { - string remark = string.Empty; - if (!Utils.IsNullOrEmpty(vmessItem.remarks)) - { - remark = "#" + WebUtility.UrlEncode(vmessItem.remarks); - } - string query = string.Empty; - if (!Utils.IsNullOrEmpty(vmessItem.requestHost)) - { - query = string.Format("?sni={0}", vmessItem.requestHost); - } - url = string.Format("{0}@{1}:{2}", - vmessItem.id, - vmessItem.address, - vmessItem.port); - url = string.Format("{0}{1}{2}{3}", Global.trojanProtocol, url, query, remark); - } - else - { - } - return url; - } - catch - { - return ""; - } - } - /// /// 移动服务器 /// @@ -824,7 +730,7 @@ namespace v2rayN.Handler } continue; } - VmessItem vmessItem = V2rayConfigHandler.ImportFromClipboardConfig(str, out string msg); + VmessItem vmessItem = ShareHandler.ImportFromClipboardConfig(str, out string msg); if (vmessItem == null) { continue; @@ -858,6 +764,13 @@ namespace v2rayN.Handler countServers++; } } + else if (vmessItem.configType == (int)EConfigType.VLESS) + { + if (AddVlessServer(ref config, vmessItem, -1) == 0) + { + countServers++; + } + } } return countServers; } diff --git a/v2rayN/v2rayN/Handler/ShareHandler.cs b/v2rayN/v2rayN/Handler/ShareHandler.cs new file mode 100644 index 00000000..766f16e0 --- /dev/null +++ b/v2rayN/v2rayN/Handler/ShareHandler.cs @@ -0,0 +1,683 @@ +using System; +using System.Collections.Generic; +using System.Collections.Specialized; +using System.Linq; +using System.Net; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading.Tasks; +using System.Web; +using v2rayN.Base; +using v2rayN.Mode; + +namespace v2rayN.Handler +{ + class ShareHandler + { + + #region GetShareUrl + + /// + /// GetShareUrl + /// + /// + /// + /// + public static string GetShareUrl(Config config, int index) + { + try + { + string url = string.Empty; + + VmessItem item = config.vmess[index]; + if (item.configType == (int)EConfigType.Vmess) + { + VmessQRCode vmessQRCode = new VmessQRCode + { + v = item.configVersion.ToString(), + ps = item.remarks.TrimEx(), //备注也许很长 ; + add = item.address, + port = item.port.ToString(), + id = item.id, + aid = item.alterId.ToString(), + net = item.network, + type = item.headerType, + host = item.requestHost, + path = item.path, + tls = item.streamSecurity + }; + + url = Utils.ToJson(vmessQRCode); + url = Utils.Base64Encode(url); + url = string.Format("{0}{1}", Global.vmessProtocol, url); + + } + else if (item.configType == (int)EConfigType.Shadowsocks) + { + string remark = string.Empty; + if (!Utils.IsNullOrEmpty(item.remarks)) + { + remark = "#" + WebUtility.UrlEncode(item.remarks); + } + url = string.Format("{0}:{1}@{2}:{3}", + item.security, + item.id, + item.address, + item.port); + url = Utils.Base64Encode(url); + url = string.Format("{0}{1}{2}", Global.ssProtocol, url, remark); + } + else if (item.configType == (int)EConfigType.Socks) + { + string remark = string.Empty; + if (!Utils.IsNullOrEmpty(item.remarks)) + { + remark = "#" + WebUtility.UrlEncode(item.remarks); + } + url = string.Format("{0}:{1}@{2}:{3}", + item.security, + item.id, + item.address, + item.port); + url = Utils.Base64Encode(url); + url = string.Format("{0}{1}{2}", Global.socksProtocol, url, remark); + } + else if (item.configType == (int)EConfigType.Trojan) + { + string remark = string.Empty; + if (!Utils.IsNullOrEmpty(item.remarks)) + { + remark = "#" + WebUtility.UrlEncode(item.remarks); + } + string query = string.Empty; + if (!Utils.IsNullOrEmpty(item.requestHost)) + { + query = string.Format("?sni={0}", item.requestHost); + } + url = string.Format("{0}@{1}:{2}", + item.id, + item.address, + item.port); + url = string.Format("{0}{1}{2}{3}", Global.trojanProtocol, url, query, remark); + } + else if (item.configType == (int)EConfigType.VLESS) + { + string remark = string.Empty; + if (!Utils.IsNullOrEmpty(item.remarks)) + { + remark = "#" + WebUtility.UrlEncode(item.remarks); + } + var dicQuery = new Dictionary(); + if (!Utils.IsNullOrEmpty(item.flow)) + { + dicQuery.Add("flow", item.flow); + } + if (!Utils.IsNullOrEmpty(item.security)) + { + dicQuery.Add("encryption", item.security); + } + else + { + dicQuery.Add("encryption", "none"); + } + if (!Utils.IsNullOrEmpty(item.streamSecurity)) + { + dicQuery.Add("security", item.streamSecurity); + } + else + { + dicQuery.Add("security", "none"); + } + if (!Utils.IsNullOrEmpty(item.network)) + { + dicQuery.Add("type", item.network); + } + else + { + dicQuery.Add("type", "tcp"); + } + + switch (item.network) + { + case "tcp": + if (!Utils.IsNullOrEmpty(item.headerType)) + { + dicQuery.Add("headerType", item.headerType); + } + else + { + dicQuery.Add("headerType", "none"); + } + if (!Utils.IsNullOrEmpty(item.requestHost)) + { + dicQuery.Add("host", item.requestHost); + } + break; + case "kcp": + if (!Utils.IsNullOrEmpty(item.headerType)) + { + dicQuery.Add("headerType", item.headerType); + } + else + { + dicQuery.Add("headerType", "none"); + } + if (!Utils.IsNullOrEmpty(item.path)) + { + dicQuery.Add("seed", item.path); + } + break; + + case "ws": + if (!Utils.IsNullOrEmpty(item.requestHost)) + { + dicQuery.Add("host", item.requestHost); + } + if (!Utils.IsNullOrEmpty(item.path)) + { + dicQuery.Add("path", item.path); + } + break; + + case "http": + case "h2": + dicQuery["type"] = "http"; + if (!Utils.IsNullOrEmpty(item.requestHost)) + { + dicQuery.Add("host", item.requestHost); + } + if (!Utils.IsNullOrEmpty(item.path)) + { + dicQuery.Add("path", item.path); + } + break; + + case "quic": + if (!Utils.IsNullOrEmpty(item.headerType)) + { + dicQuery.Add("headerType", item.headerType); + } + else + { + dicQuery.Add("headerType", "none"); + } + dicQuery.Add("quicSecurity", item.requestHost); + dicQuery.Add("key", item.path); + break; + } + string query = "?" + string.Join("&", dicQuery.Select(x => x.Key + "=" + x.Value).ToArray()); + + url = string.Format("{0}@{1}:{2}", + item.id, + item.address, + item.port); + url = string.Format("{0}{1}{2}{3}", Global.vlessProtocol, url, query, remark); + } + else + { + } + return url; + } + catch + { + return ""; + } + } + + #endregion + + #region ImportShareUrl + + + /// + /// 从剪贴板导入URL + /// + /// + /// + /// + public static VmessItem ImportFromClipboardConfig(string clipboardData, out string msg) + { + msg = string.Empty; + VmessItem vmessItem = new VmessItem(); + + try + { + //载入配置文件 + string result = clipboardData.TrimEx();// Utils.GetClipboardData(); + if (Utils.IsNullOrEmpty(result)) + { + msg = UIRes.I18N("FailedReadConfiguration"); + return null; + } + + if (result.StartsWith(Global.vmessProtocol)) + { + int indexSplit = result.IndexOf("?"); + if (indexSplit > 0) + { + vmessItem = ResolveStdVmess(result) ?? ResolveVmess4Kitsunebi(result); + } + else + { + vmessItem.configType = (int)EConfigType.Vmess; + result = result.Substring(Global.vmessProtocol.Length); + result = Utils.Base64Decode(result); + + //转成Json + VmessQRCode vmessQRCode = Utils.FromJson(result); + if (vmessQRCode == null) + { + msg = UIRes.I18N("FailedConversionConfiguration"); + return null; + } + vmessItem.security = Global.DefaultSecurity; + vmessItem.network = Global.DefaultNetwork; + vmessItem.headerType = Global.None; + + + vmessItem.configVersion = Utils.ToInt(vmessQRCode.v); + vmessItem.remarks = Utils.ToString(vmessQRCode.ps); + vmessItem.address = Utils.ToString(vmessQRCode.add); + vmessItem.port = Utils.ToInt(vmessQRCode.port); + vmessItem.id = Utils.ToString(vmessQRCode.id); + vmessItem.alterId = Utils.ToInt(vmessQRCode.aid); + + if (!Utils.IsNullOrEmpty(vmessQRCode.net)) + { + vmessItem.network = vmessQRCode.net; + } + if (!Utils.IsNullOrEmpty(vmessQRCode.type)) + { + vmessItem.headerType = vmessQRCode.type; + } + + vmessItem.requestHost = Utils.ToString(vmessQRCode.host); + vmessItem.path = Utils.ToString(vmessQRCode.path); + vmessItem.streamSecurity = Utils.ToString(vmessQRCode.tls); + } + + ConfigHandler.UpgradeServerVersion(ref vmessItem); + } + else if (result.StartsWith(Global.ssProtocol)) + { + msg = UIRes.I18N("ConfigurationFormatIncorrect"); + + vmessItem = ResolveSSLegacy(result); + if (vmessItem == null) + { + vmessItem = ResolveSip002(result); + } + if (vmessItem == null) + { + return null; + } + if (vmessItem.address.Length == 0 || vmessItem.port == 0 || vmessItem.security.Length == 0 || vmessItem.id.Length == 0) + { + return null; + } + + vmessItem.configType = (int)EConfigType.Shadowsocks; + } + else if (result.StartsWith(Global.socksProtocol)) + { + msg = UIRes.I18N("ConfigurationFormatIncorrect"); + + vmessItem.configType = (int)EConfigType.Socks; + result = result.Substring(Global.socksProtocol.Length); + //remark + int indexRemark = result.IndexOf("#"); + if (indexRemark > 0) + { + try + { + vmessItem.remarks = WebUtility.UrlDecode(result.Substring(indexRemark + 1, result.Length - indexRemark - 1)); + } + catch { } + result = result.Substring(0, indexRemark); + } + //part decode + int indexS = result.IndexOf("@"); + if (indexS > 0) + { + } + else + { + result = Utils.Base64Decode(result); + } + + string[] arr1 = result.Split('@'); + if (arr1.Length != 2) + { + return null; + } + string[] arr21 = arr1[0].Split(':'); + //string[] arr22 = arr1[1].Split(':'); + int indexPort = arr1[1].LastIndexOf(":"); + if (arr21.Length != 2 || indexPort < 0) + { + return null; + } + vmessItem.address = arr1[1].Substring(0, indexPort); + vmessItem.port = Utils.ToInt(arr1[1].Substring(indexPort + 1, arr1[1].Length - (indexPort + 1))); + vmessItem.security = arr21[0]; + vmessItem.id = arr21[1]; + } + else if (result.StartsWith(Global.trojanProtocol)) + { + msg = UIRes.I18N("ConfigurationFormatIncorrect"); + + vmessItem.configType = (int)EConfigType.Trojan; + + Uri uri = new Uri(result); + vmessItem.address = uri.IdnHost; + vmessItem.port = uri.Port; + vmessItem.id = uri.UserInfo; + + var qurery = HttpUtility.ParseQueryString(uri.Query); + vmessItem.requestHost = qurery["sni"] ?? ""; + + var remarks = uri.Fragment.Replace("#", ""); + if (Utils.IsNullOrEmpty(remarks)) + { + vmessItem.remarks = "NONE"; + } + else + { + vmessItem.remarks = WebUtility.UrlDecode(remarks); + } + } + else if (result.StartsWith(Global.vlessProtocol)) + { + vmessItem = ResolveStdVLESS(result); + + ConfigHandler.UpgradeServerVersion(ref vmessItem); + } + else + { + msg = UIRes.I18N("NonvmessOrssProtocol"); + return null; + } + } + catch + { + msg = UIRes.I18N("Incorrectconfiguration"); + return null; + } + + return vmessItem; + } + + + private static VmessItem ResolveVmess4Kitsunebi(string result) + { + VmessItem vmessItem = new VmessItem + { + configType = (int)EConfigType.Vmess + }; + result = result.Substring(Global.vmessProtocol.Length); + int indexSplit = result.IndexOf("?"); + if (indexSplit > 0) + { + result = result.Substring(0, indexSplit); + } + result = Utils.Base64Decode(result); + + string[] arr1 = result.Split('@'); + if (arr1.Length != 2) + { + return null; + } + string[] arr21 = arr1[0].Split(':'); + string[] arr22 = arr1[1].Split(':'); + if (arr21.Length != 2 || arr21.Length != 2) + { + return null; + } + + vmessItem.address = arr22[0]; + vmessItem.port = Utils.ToInt(arr22[1]); + vmessItem.security = arr21[0]; + vmessItem.id = arr21[1]; + + vmessItem.network = Global.DefaultNetwork; + vmessItem.headerType = Global.None; + vmessItem.remarks = "Alien"; + vmessItem.alterId = 0; + + return vmessItem; + } + + private static VmessItem ResolveSip002(string result) + { + Uri parsedUrl; + try + { + parsedUrl = new Uri(result); + } + catch (UriFormatException) + { + return null; + } + VmessItem server = new VmessItem + { + remarks = parsedUrl.GetComponents(UriComponents.Fragment, UriFormat.Unescaped), + address = parsedUrl.IdnHost, + port = parsedUrl.Port, + }; + + // parse base64 UserInfo + string rawUserInfo = parsedUrl.GetComponents(UriComponents.UserInfo, UriFormat.Unescaped); + string base64 = rawUserInfo.Replace('-', '+').Replace('_', '/'); // Web-safe base64 to normal base64 + string userInfo; + try + { + userInfo = Encoding.UTF8.GetString(Convert.FromBase64String( + base64.PadRight(base64.Length + (4 - base64.Length % 4) % 4, '='))); + } + catch (FormatException) + { + return null; + } + string[] userInfoParts = userInfo.Split(new char[] { ':' }, 2); + if (userInfoParts.Length != 2) + { + return null; + } + server.security = userInfoParts[0]; + server.id = userInfoParts[1]; + + NameValueCollection queryParameters = HttpUtility.ParseQueryString(parsedUrl.Query); + if (queryParameters["plugin"] != null) + { + return null; + } + + return server; + } + + private static readonly Regex UrlFinder = new Regex(@"ss://(?[A-Za-z0-9+-/=_]+)(?:#(?\S+))?", RegexOptions.IgnoreCase); + private static readonly Regex DetailsParser = new Regex(@"^((?.+?):(?.*)@(?.+?):(?\d+?))$", RegexOptions.IgnoreCase); + + private static VmessItem ResolveSSLegacy(string result) + { + var match = UrlFinder.Match(result); + if (!match.Success) + return null; + + VmessItem server = new VmessItem(); + var base64 = match.Groups["base64"].Value.TrimEnd('/'); + var tag = match.Groups["tag"].Value; + if (!Utils.IsNullOrEmpty(tag)) + { + server.remarks = HttpUtility.UrlDecode(tag, Encoding.UTF8); + } + Match details; + try + { + details = DetailsParser.Match(Encoding.UTF8.GetString(Convert.FromBase64String( + base64.PadRight(base64.Length + (4 - base64.Length % 4) % 4, '=')))); + } + catch (FormatException) + { + return null; + } + if (!details.Success) + return null; + server.security = details.Groups["method"].Value; + server.id = details.Groups["password"].Value; + server.address = details.Groups["hostname"].Value; + server.port = int.Parse(details.Groups["port"].Value); + return server; + } + + + private static readonly Regex StdVmessUserInfo = new Regex( + @"^(?[a-z]+)(\+(?[a-z]+))?:(?[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})-(?[0-9]+)$"); + + private static VmessItem ResolveStdVmess(string result) + { + VmessItem i = new VmessItem + { + configType = (int)EConfigType.Vmess, + security = "auto" + }; + + Uri u = new Uri(result); + + i.address = u.IdnHost; + i.port = u.Port; + i.remarks = u.GetComponents(UriComponents.Fragment, UriFormat.Unescaped); + var q = HttpUtility.ParseQueryString(u.Query); + + var m = StdVmessUserInfo.Match(u.UserInfo); + if (!m.Success) return null; + + i.id = m.Groups["id"].Value; + if (!int.TryParse(m.Groups["alterId"].Value, out int aid)) + { + return null; + } + i.alterId = aid; + + if (m.Groups["streamSecurity"].Success) + { + i.streamSecurity = m.Groups["streamSecurity"].Value; + } + switch (i.streamSecurity) + { + case "tls": + // TODO tls config + break; + default: + if (!string.IsNullOrWhiteSpace(i.streamSecurity)) + return null; + break; + } + + i.network = m.Groups["network"].Value; + switch (i.network) + { + case "tcp": + string t1 = q["type"] ?? "none"; + i.headerType = t1; + // TODO http option + + break; + case "kcp": + i.headerType = q["type"] ?? "none"; + // TODO kcp seed + break; + + case "ws": + string p1 = q["path"] ?? "/"; + string h1 = q["host"] ?? ""; + i.requestHost = h1; + i.path = p1; + break; + + case "http": + case "h2": + i.network = "h2"; + string p2 = q["path"] ?? "/"; + string h2 = q["host"] ?? ""; + i.requestHost = h2; + i.path = p2; + break; + + case "quic": + string s = q["security"] ?? "none"; + string k = q["key"] ?? ""; + string t3 = q["type"] ?? "none"; + i.headerType = t3; + i.requestHost = s; + i.path = k; + break; + + default: + return null; + } + + return i; + } + + private static VmessItem ResolveStdVLESS(string result) + { + VmessItem item = new VmessItem + { + configType = (int)EConfigType.VLESS, + security = "none" + }; + + Uri url = new Uri(result); + + item.address = url.IdnHost; + item.port = url.Port; + item.remarks = url.GetComponents(UriComponents.Fragment, UriFormat.Unescaped); + item.id = url.UserInfo; + + var query = HttpUtility.ParseQueryString(url.Query); + + item.flow = query["flow"] ?? ""; + item.security = query["encryption"] ?? "none"; + item.streamSecurity = query["security"] ?? ""; + item.network = query["type"] ?? "tcp"; + switch (item.network) + { + case "tcp": + item.headerType = query["headerType"] ?? "none"; + item.requestHost = query["host"] ?? ""; + + break; + case "kcp": + item.headerType = query["headerType"] ?? "none"; + item.path = query["seed"] ?? ""; + break; + + case "ws": + item.requestHost = query["host"] ?? ""; + item.path = query["path"] ?? "/"; + break; + + case "http": + case "h2": + item.network = "h2"; + item.requestHost = query["host"] ?? ""; + item.path = query["path"] ?? "/"; + break; + + case "quic": + item.headerType = query["headerType"] ?? "none"; + item.requestHost = query["quicSecurity"] ?? "none"; + item.path = query["key"] ?? ""; + break; + + default: + return null; + } + + return item; + } + + #endregion + } +} diff --git a/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs b/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs index 473400c3..6fa3ecb6 100644 --- a/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs +++ b/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs @@ -1,13 +1,7 @@ using System; using System.Collections.Generic; -using System.Collections.Specialized; using System.IO; using System.Linq; -using System.Net; -using System.Text; -using System.Text.RegularExpressions; -using System.Web; -using v2rayN.Base; using v2rayN.Mode; namespace v2rayN.Handler @@ -467,7 +461,7 @@ namespace v2rayN.Handler } else { - usersItem.flow = config.flow(); + usersItem.flow = config.flow().Replace("splice", "direct"); } outbound.mux.enabled = false; @@ -1283,179 +1277,6 @@ namespace v2rayN.Handler return vmessItem; } - /// - /// 从剪贴板导入URL - /// - /// - /// - /// - public static VmessItem ImportFromClipboardConfig(string clipboardData, out string msg) - { - msg = string.Empty; - VmessItem vmessItem = new VmessItem(); - - try - { - //载入配置文件 - string result = clipboardData.TrimEx();// Utils.GetClipboardData(); - if (Utils.IsNullOrEmpty(result)) - { - msg = UIRes.I18N("FailedReadConfiguration"); - return null; - } - - if (result.StartsWith(Global.vmessProtocol)) - { - int indexSplit = result.IndexOf("?"); - if (indexSplit > 0) - { - vmessItem = ResolveStdVmess(result) ?? ResolveVmess4Kitsunebi(result); - } - else - { - vmessItem.configType = (int)EConfigType.Vmess; - result = result.Substring(Global.vmessProtocol.Length); - result = Utils.Base64Decode(result); - - //转成Json - VmessQRCode vmessQRCode = Utils.FromJson(result); - if (vmessQRCode == null) - { - msg = UIRes.I18N("FailedConversionConfiguration"); - return null; - } - vmessItem.security = Global.DefaultSecurity; - vmessItem.network = Global.DefaultNetwork; - vmessItem.headerType = Global.None; - - - vmessItem.configVersion = Utils.ToInt(vmessQRCode.v); - vmessItem.remarks = Utils.ToString(vmessQRCode.ps); - vmessItem.address = Utils.ToString(vmessQRCode.add); - vmessItem.port = Utils.ToInt(vmessQRCode.port); - vmessItem.id = Utils.ToString(vmessQRCode.id); - vmessItem.alterId = Utils.ToInt(vmessQRCode.aid); - - if (!Utils.IsNullOrEmpty(vmessQRCode.net)) - { - vmessItem.network = vmessQRCode.net; - } - if (!Utils.IsNullOrEmpty(vmessQRCode.type)) - { - vmessItem.headerType = vmessQRCode.type; - } - - vmessItem.requestHost = Utils.ToString(vmessQRCode.host); - vmessItem.path = Utils.ToString(vmessQRCode.path); - vmessItem.streamSecurity = Utils.ToString(vmessQRCode.tls); - } - - ConfigHandler.UpgradeServerVersion(ref vmessItem); - } - else if (result.StartsWith(Global.ssProtocol)) - { - msg = UIRes.I18N("ConfigurationFormatIncorrect"); - - vmessItem = ResolveSSLegacy(result); - if (vmessItem == null) - { - vmessItem = ResolveSip002(result); - } - if (vmessItem == null) - { - return null; - } - if (vmessItem.address.Length == 0 || vmessItem.port == 0 || vmessItem.security.Length == 0 || vmessItem.id.Length == 0) - { - return null; - } - - vmessItem.configType = (int)EConfigType.Shadowsocks; - } - else if (result.StartsWith(Global.socksProtocol)) - { - msg = UIRes.I18N("ConfigurationFormatIncorrect"); - - vmessItem.configType = (int)EConfigType.Socks; - result = result.Substring(Global.socksProtocol.Length); - //remark - int indexRemark = result.IndexOf("#"); - if (indexRemark > 0) - { - try - { - vmessItem.remarks = WebUtility.UrlDecode(result.Substring(indexRemark + 1, result.Length - indexRemark - 1)); - } - catch { } - result = result.Substring(0, indexRemark); - } - //part decode - int indexS = result.IndexOf("@"); - if (indexS > 0) - { - } - else - { - result = Utils.Base64Decode(result); - } - - string[] arr1 = result.Split('@'); - if (arr1.Length != 2) - { - return null; - } - string[] arr21 = arr1[0].Split(':'); - //string[] arr22 = arr1[1].Split(':'); - int indexPort = arr1[1].LastIndexOf(":"); - if (arr21.Length != 2 || indexPort < 0) - { - return null; - } - vmessItem.address = arr1[1].Substring(0, indexPort); - vmessItem.port = Utils.ToInt(arr1[1].Substring(indexPort + 1, arr1[1].Length - (indexPort + 1))); - vmessItem.security = arr21[0]; - vmessItem.id = arr21[1]; - } - else if (result.StartsWith(Global.trojanProtocol)) - { - msg = UIRes.I18N("ConfigurationFormatIncorrect"); - - vmessItem.configType = (int)EConfigType.Trojan; - - Uri uri = new Uri(result); - vmessItem.address = uri.IdnHost; - vmessItem.port = uri.Port; - vmessItem.id = uri.UserInfo; - - var qurery = HttpUtility.ParseQueryString(uri.Query); - vmessItem.requestHost = qurery["sni"] ?? ""; - - var remarks = uri.Fragment.Replace("#", ""); - if (Utils.IsNullOrEmpty(remarks)) - { - vmessItem.remarks = "NONE"; - } - else - { - vmessItem.remarks = WebUtility.UrlDecode(remarks); - } - } - else - { - msg = UIRes.I18N("NonvmessOrssProtocol"); - return null; - } - } - catch - { - msg = UIRes.I18N("Incorrectconfiguration"); - return null; - } - - return vmessItem; - } - - /// /// 导出为客户端配置 /// @@ -1480,216 +1301,6 @@ namespace v2rayN.Handler return GenerateServerConfig(config, fileName, out msg); } - private static VmessItem ResolveVmess4Kitsunebi(string result) - { - VmessItem vmessItem = new VmessItem - { - configType = (int)EConfigType.Vmess - }; - result = result.Substring(Global.vmessProtocol.Length); - int indexSplit = result.IndexOf("?"); - if (indexSplit > 0) - { - result = result.Substring(0, indexSplit); - } - result = Utils.Base64Decode(result); - - string[] arr1 = result.Split('@'); - if (arr1.Length != 2) - { - return null; - } - string[] arr21 = arr1[0].Split(':'); - string[] arr22 = arr1[1].Split(':'); - if (arr21.Length != 2 || arr21.Length != 2) - { - return null; - } - - vmessItem.address = arr22[0]; - vmessItem.port = Utils.ToInt(arr22[1]); - vmessItem.security = arr21[0]; - vmessItem.id = arr21[1]; - - vmessItem.network = Global.DefaultNetwork; - vmessItem.headerType = Global.None; - vmessItem.remarks = "Alien"; - vmessItem.alterId = 0; - - return vmessItem; - } - - private static VmessItem ResolveSip002(string result) - { - Uri parsedUrl; - try - { - parsedUrl = new Uri(result); - } - catch (UriFormatException) - { - return null; - } - VmessItem server = new VmessItem - { - remarks = parsedUrl.GetComponents(UriComponents.Fragment, UriFormat.Unescaped), - address = parsedUrl.IdnHost, - port = parsedUrl.Port, - }; - - // parse base64 UserInfo - string rawUserInfo = parsedUrl.GetComponents(UriComponents.UserInfo, UriFormat.Unescaped); - string base64 = rawUserInfo.Replace('-', '+').Replace('_', '/'); // Web-safe base64 to normal base64 - string userInfo; - try - { - userInfo = Encoding.UTF8.GetString(Convert.FromBase64String( - base64.PadRight(base64.Length + (4 - base64.Length % 4) % 4, '='))); - } - catch (FormatException) - { - return null; - } - string[] userInfoParts = userInfo.Split(new char[] { ':' }, 2); - if (userInfoParts.Length != 2) - { - return null; - } - server.security = userInfoParts[0]; - server.id = userInfoParts[1]; - - NameValueCollection queryParameters = HttpUtility.ParseQueryString(parsedUrl.Query); - if (queryParameters["plugin"] != null) - { - return null; - } - - return server; - } - - private static readonly Regex UrlFinder = new Regex(@"ss://(?[A-Za-z0-9+-/=_]+)(?:#(?\S+))?", RegexOptions.IgnoreCase); - private static readonly Regex DetailsParser = new Regex(@"^((?.+?):(?.*)@(?.+?):(?\d+?))$", RegexOptions.IgnoreCase); - - private static VmessItem ResolveSSLegacy(string result) - { - var match = UrlFinder.Match(result); - if (!match.Success) - return null; - - VmessItem server = new VmessItem(); - var base64 = match.Groups["base64"].Value.TrimEnd('/'); - var tag = match.Groups["tag"].Value; - if (!tag.IsNullOrEmpty()) - { - server.remarks = HttpUtility.UrlDecode(tag, Encoding.UTF8); - } - Match details; - try - { - details = DetailsParser.Match(Encoding.UTF8.GetString(Convert.FromBase64String( - base64.PadRight(base64.Length + (4 - base64.Length % 4) % 4, '=')))); - } - catch (FormatException) - { - return null; - } - if (!details.Success) - return null; - server.security = details.Groups["method"].Value; - server.id = details.Groups["password"].Value; - server.address = details.Groups["hostname"].Value; - server.port = int.Parse(details.Groups["port"].Value); - return server; - } - - - private static readonly Regex StdVmessUserInfo = new Regex( - @"^(?[a-z]+)(\+(?[a-z]+))?:(?[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})-(?[0-9]+)$"); - - private static VmessItem ResolveStdVmess(string result) - { - VmessItem i = new VmessItem - { - configType = (int)EConfigType.Vmess, - security = "auto" - }; - - Uri u = new Uri(result); - - i.address = u.IdnHost; - i.port = u.Port; - i.remarks = u.GetComponents(UriComponents.Fragment, UriFormat.Unescaped); - var q = HttpUtility.ParseQueryString(u.Query); - - var m = StdVmessUserInfo.Match(u.UserInfo); - if (!m.Success) return null; - - i.id = m.Groups["id"].Value; - if (!int.TryParse(m.Groups["alterId"].Value, out int aid)) - { - return null; - } - i.alterId = aid; - - if (m.Groups["streamSecurity"].Success) - { - i.streamSecurity = m.Groups["streamSecurity"].Value; - } - switch (i.streamSecurity) - { - case "tls": - // TODO tls config - break; - default: - if (!string.IsNullOrWhiteSpace(i.streamSecurity)) - return null; - break; - } - - i.network = m.Groups["network"].Value; - switch (i.network) - { - case "tcp": - string t1 = q["type"] ?? "none"; - i.headerType = t1; - // TODO http option - - break; - case "kcp": - i.headerType = q["type"] ?? "none"; - // TODO kcp seed - break; - - case "ws": - string p1 = q["path"] ?? "/"; - string h1 = q["host"] ?? ""; - i.requestHost = h1; - i.path = p1; - break; - - case "http": - i.network = "h2"; - string p2 = q["path"] ?? "/"; - string h2 = q["host"] ?? ""; - i.requestHost = h2; - i.path = p2; - break; - - case "quic": - string s = q["security"] ?? "none"; - string k = q["key"] ?? ""; - string t3 = q["type"] ?? "none"; - i.headerType = t3; - i.requestHost = s; - i.path = k; - break; - - default: - return null; - } - - return i; - } #endregion #region Gen speedtest config diff --git a/v2rayN/v2rayN/Properties/AssemblyInfo.cs b/v2rayN/v2rayN/Properties/AssemblyInfo.cs index 82cf7900..66a0322b 100644 --- a/v2rayN/v2rayN/Properties/AssemblyInfo.cs +++ b/v2rayN/v2rayN/Properties/AssemblyInfo.cs @@ -32,4 +32,4 @@ using System.Runtime.InteropServices; // 方法是按如下所示使用“*”: //[assembly: AssemblyVersion("1.0.*")] //[assembly: AssemblyVersion("1.0.0")] -[assembly: AssemblyFileVersion("4.2")] +[assembly: AssemblyFileVersion("4.3")] diff --git a/v2rayN/v2rayN/Resx/ResUI.Designer.cs b/v2rayN/v2rayN/Resx/ResUI.Designer.cs index 91bf3499..a92b8267 100644 --- a/v2rayN/v2rayN/Resx/ResUI.Designer.cs +++ b/v2rayN/v2rayN/Resx/ResUI.Designer.cs @@ -19,7 +19,7 @@ namespace v2rayN.Resx { // 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。 // 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen // (以 /str 作为命令选项),或重新生成 VS 项目。 - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] internal class ResUI { @@ -717,6 +717,15 @@ namespace v2rayN.Resx { } } + /// + /// 查找类似 {0},One of the required. 的本地化字符串。 + /// + internal static string RoutingRuleDetailRequiredTips { + get { + return ResourceManager.GetString("RoutingRuleDetailRequiredTips", resourceCulture); + } + } + /// /// 查找类似 The client configuration file is saved at: {0} 的本地化字符串。 /// diff --git a/v2rayN/v2rayN/Resx/ResUI.resx b/v2rayN/v2rayN/Resx/ResUI.resx index d934df5b..21747ecc 100644 --- a/v2rayN/v2rayN/Resx/ResUI.resx +++ b/v2rayN/v2rayN/Resx/ResUI.resx @@ -370,4 +370,7 @@ Are you sure to remove the rules? + + {0},One of the required. + \ No newline at end of file diff --git a/v2rayN/v2rayN/Resx/ResUI.zh-Hans.resx b/v2rayN/v2rayN/Resx/ResUI.zh-Hans.resx index 3346ab6a..59b4f18b 100644 --- a/v2rayN/v2rayN/Resx/ResUI.zh-Hans.resx +++ b/v2rayN/v2rayN/Resx/ResUI.zh-Hans.resx @@ -370,4 +370,7 @@ 是否确定移除规则? + + {0},必填其中一项. + \ No newline at end of file diff --git a/v2rayN/v2rayN/v2rayN.csproj b/v2rayN/v2rayN/v2rayN.csproj index f6d76a16..ea9c4b89 100644 --- a/v2rayN/v2rayN/v2rayN.csproj +++ b/v2rayN/v2rayN/v2rayN.csproj @@ -131,6 +131,7 @@ RoutingSettingDetailsForm.cs + Form From e578c75545a614d23f0d5b88e18ae7898074bf05 Mon Sep 17 00:00:00 2001 From: 2dust <31833384+2dust@users.noreply.github.com> Date: Mon, 4 Jan 2021 21:43:31 +0800 Subject: [PATCH 42/54] up4.4 --- v2rayN/v2rayN/Properties/AssemblyInfo.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/v2rayN/v2rayN/Properties/AssemblyInfo.cs b/v2rayN/v2rayN/Properties/AssemblyInfo.cs index 66a0322b..bc7f263c 100644 --- a/v2rayN/v2rayN/Properties/AssemblyInfo.cs +++ b/v2rayN/v2rayN/Properties/AssemblyInfo.cs @@ -32,4 +32,4 @@ using System.Runtime.InteropServices; // 方法是按如下所示使用“*”: //[assembly: AssemblyVersion("1.0.*")] //[assembly: AssemblyVersion("1.0.0")] -[assembly: AssemblyFileVersion("4.3")] +[assembly: AssemblyFileVersion("4.4")] From 57d5e02d6a473a4c7ab8ec3d18ba2841267c176e Mon Sep 17 00:00:00 2001 From: 2dust <31833384+2dust@users.noreply.github.com> Date: Wed, 6 Jan 2021 19:54:15 +0800 Subject: [PATCH 43/54] up4.5 --- v2rayN/v2rayN/Forms/MainForm.cs | 4 +- .../Forms/OptionSettingForm.Designer.cs | 36 +- v2rayN/v2rayN/Forms/OptionSettingForm.cs | 2 + v2rayN/v2rayN/Forms/OptionSettingForm.resx | 3051 ++++++++++------- .../Forms/OptionSettingForm.zh-Hans.resx | 6 + v2rayN/v2rayN/Handler/ShareHandler.cs | 52 +- v2rayN/v2rayN/Mode/Config.cs | 4 + v2rayN/v2rayN/Properties/AssemblyInfo.cs | 2 +- v2rayN/v2rayN/Tool/FileManager.cs | 6 +- v2rayN/v2rayN/Tool/Utils.cs | 11 +- 10 files changed, 1828 insertions(+), 1346 deletions(-) diff --git a/v2rayN/v2rayN/Forms/MainForm.cs b/v2rayN/v2rayN/Forms/MainForm.cs index 67b78ee5..3eb68a7b 100644 --- a/v2rayN/v2rayN/Forms/MainForm.cs +++ b/v2rayN/v2rayN/Forms/MainForm.cs @@ -223,7 +223,7 @@ namespace v2rayN.Forms } VmessItem item = config.vmess[k]; - + bool stats = statistics != null && statistics.Enable; if (stats) { @@ -1310,7 +1310,7 @@ namespace v2rayN.Forms string fileName = downloadHandle.DownloadFileName; fileName = Utils.GetPath(fileName); - FileManager.ZipExtractToFile(fileName); + FileManager.ZipExtractToFile(fileName, config.ignoreGeoUpdateCore ? "geo" : ""); AppendText(false, UIRes.I18N("MsgUpdateV2rayCoreSuccessfullyMore")); diff --git a/v2rayN/v2rayN/Forms/OptionSettingForm.Designer.cs b/v2rayN/v2rayN/Forms/OptionSettingForm.Designer.cs index 13e23b02..ddbc4857 100644 --- a/v2rayN/v2rayN/Forms/OptionSettingForm.Designer.cs +++ b/v2rayN/v2rayN/Forms/OptionSettingForm.Designer.cs @@ -69,6 +69,7 @@ this.txtKcpmtu = new System.Windows.Forms.TextBox(); this.label6 = new System.Windows.Forms.Label(); this.tabPage7 = new System.Windows.Forms.TabPage(); + this.chkIgnoreGeoUpdateCore = new System.Windows.Forms.CheckBox(); this.cmbCoreType = new System.Windows.Forms.ComboBox(); this.label4 = new System.Windows.Forms.Label(); this.chkKeepOlderDedupl = new System.Windows.Forms.CheckBox(); @@ -91,32 +92,31 @@ // // btnClose // - resources.ApplyResources(this.btnClose, "btnClose"); this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel; + resources.ApplyResources(this.btnClose, "btnClose"); this.btnClose.Name = "btnClose"; this.btnClose.UseVisualStyleBackColor = true; this.btnClose.Click += new System.EventHandler(this.btnClose_Click); // // tabControl1 // - resources.ApplyResources(this.tabControl1, "tabControl1"); this.tabControl1.Controls.Add(this.tabPage1); this.tabControl1.Controls.Add(this.tabPage2); this.tabControl1.Controls.Add(this.tabPage6); this.tabControl1.Controls.Add(this.tabPage7); + resources.ApplyResources(this.tabControl1, "tabControl1"); this.tabControl1.Name = "tabControl1"; this.tabControl1.SelectedIndex = 0; // // tabPage1 // - resources.ApplyResources(this.tabPage1, "tabPage1"); this.tabPage1.Controls.Add(this.groupBox1); + resources.ApplyResources(this.tabPage1, "tabPage1"); this.tabPage1.Name = "tabPage1"; this.tabPage1.UseVisualStyleBackColor = true; // // groupBox1 // - resources.ApplyResources(this.groupBox1, "groupBox1"); this.groupBox1.Controls.Add(this.chkdefAllowInsecure); this.groupBox1.Controls.Add(this.chksniffingEnabled2); this.groupBox1.Controls.Add(this.chksniffingEnabled); @@ -134,6 +134,7 @@ this.groupBox1.Controls.Add(this.label5); this.groupBox1.Controls.Add(this.txtlocalPort); this.groupBox1.Controls.Add(this.label2); + resources.ApplyResources(this.groupBox1, "groupBox1"); this.groupBox1.Name = "groupBox1"; this.groupBox1.TabStop = false; // @@ -176,12 +177,12 @@ // // cmbprotocol2 // - resources.ApplyResources(this.cmbprotocol2, "cmbprotocol2"); this.cmbprotocol2.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.cmbprotocol2.FormattingEnabled = true; this.cmbprotocol2.Items.AddRange(new object[] { resources.GetString("cmbprotocol2.Items"), resources.GetString("cmbprotocol2.Items1")}); + resources.ApplyResources(this.cmbprotocol2, "cmbprotocol2"); this.cmbprotocol2.Name = "cmbprotocol2"; // // label3 @@ -196,8 +197,8 @@ // // cmbprotocol // - resources.ApplyResources(this.cmbprotocol, "cmbprotocol"); this.cmbprotocol.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + resources.ApplyResources(this.cmbprotocol, "cmbprotocol"); this.cmbprotocol.FormattingEnabled = true; this.cmbprotocol.Items.AddRange(new object[] { resources.GetString("cmbprotocol.Items"), @@ -223,7 +224,6 @@ // // cmbloglevel // - resources.ApplyResources(this.cmbloglevel, "cmbloglevel"); this.cmbloglevel.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.cmbloglevel.FormattingEnabled = true; this.cmbloglevel.Items.AddRange(new object[] { @@ -232,6 +232,7 @@ resources.GetString("cmbloglevel.Items2"), resources.GetString("cmbloglevel.Items3"), resources.GetString("cmbloglevel.Items4")}); + resources.ApplyResources(this.cmbloglevel, "cmbloglevel"); this.cmbloglevel.Name = "cmbloglevel"; // // label5 @@ -251,10 +252,10 @@ // // tabPage2 // - resources.ApplyResources(this.tabPage2, "tabPage2"); this.tabPage2.Controls.Add(this.linkDnsObjectDoc); this.tabPage2.Controls.Add(this.txtremoteDNS); this.tabPage2.Controls.Add(this.label14); + resources.ApplyResources(this.tabPage2, "tabPage2"); this.tabPage2.Name = "tabPage2"; this.tabPage2.UseVisualStyleBackColor = true; // @@ -263,6 +264,7 @@ resources.ApplyResources(this.linkDnsObjectDoc, "linkDnsObjectDoc"); this.linkDnsObjectDoc.Name = "linkDnsObjectDoc"; this.linkDnsObjectDoc.TabStop = true; + this.linkDnsObjectDoc.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkDnsObjectDoc_LinkClicked); // // txtremoteDNS // @@ -276,7 +278,6 @@ // // tabPage6 // - resources.ApplyResources(this.tabPage6, "tabPage6"); this.tabPage6.Controls.Add(this.chkKcpcongestion); this.tabPage6.Controls.Add(this.txtKcpwriteBufferSize); this.tabPage6.Controls.Add(this.label10); @@ -290,6 +291,7 @@ this.tabPage6.Controls.Add(this.label7); this.tabPage6.Controls.Add(this.txtKcpmtu); this.tabPage6.Controls.Add(this.label6); + resources.ApplyResources(this.tabPage6, "tabPage6"); this.tabPage6.Name = "tabPage6"; this.tabPage6.UseVisualStyleBackColor = true; // @@ -361,7 +363,7 @@ // // tabPage7 // - resources.ApplyResources(this.tabPage7, "tabPage7"); + this.tabPage7.Controls.Add(this.chkIgnoreGeoUpdateCore); this.tabPage7.Controls.Add(this.cmbCoreType); this.tabPage7.Controls.Add(this.label4); this.tabPage7.Controls.Add(this.chkKeepOlderDedupl); @@ -370,17 +372,24 @@ this.tabPage7.Controls.Add(this.chkEnableStatistics); this.tabPage7.Controls.Add(this.chkAllowLANConn); this.tabPage7.Controls.Add(this.chkAutoRun); + resources.ApplyResources(this.tabPage7, "tabPage7"); this.tabPage7.Name = "tabPage7"; this.tabPage7.UseVisualStyleBackColor = true; // + // chkIgnoreGeoUpdateCore + // + resources.ApplyResources(this.chkIgnoreGeoUpdateCore, "chkIgnoreGeoUpdateCore"); + this.chkIgnoreGeoUpdateCore.Name = "chkIgnoreGeoUpdateCore"; + this.chkIgnoreGeoUpdateCore.UseVisualStyleBackColor = true; + // // cmbCoreType // - resources.ApplyResources(this.cmbCoreType, "cmbCoreType"); this.cmbCoreType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.cmbCoreType.FormattingEnabled = true; this.cmbCoreType.Items.AddRange(new object[] { resources.GetString("cmbCoreType.Items"), resources.GetString("cmbCoreType.Items1")}); + resources.ApplyResources(this.cmbCoreType, "cmbCoreType"); this.cmbCoreType.Name = "cmbCoreType"; // // label4 @@ -396,9 +405,9 @@ // // cbFreshrate // - resources.ApplyResources(this.cbFreshrate, "cbFreshrate"); this.cbFreshrate.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.cbFreshrate.FormattingEnabled = true; + resources.ApplyResources(this.cbFreshrate, "cbFreshrate"); this.cbFreshrate.Name = "cbFreshrate"; // // lbFreshrate @@ -426,9 +435,9 @@ // // panel2 // - resources.ApplyResources(this.panel2, "panel2"); this.panel2.Controls.Add(this.btnClose); this.panel2.Controls.Add(this.btnOK); + resources.ApplyResources(this.panel2, "panel2"); this.panel2.Name = "panel2"; // // btnOK @@ -522,5 +531,6 @@ private System.Windows.Forms.Label label14; private System.Windows.Forms.ComboBox cmbCoreType; private System.Windows.Forms.Label label4; + private System.Windows.Forms.CheckBox chkIgnoreGeoUpdateCore; } } \ No newline at end of file diff --git a/v2rayN/v2rayN/Forms/OptionSettingForm.cs b/v2rayN/v2rayN/Forms/OptionSettingForm.cs index d26843a6..95dbb622 100644 --- a/v2rayN/v2rayN/Forms/OptionSettingForm.cs +++ b/v2rayN/v2rayN/Forms/OptionSettingForm.cs @@ -120,6 +120,7 @@ namespace v2rayN.Forms break; } + chkIgnoreGeoUpdateCore.Checked = config.ignoreGeoUpdateCore; cmbCoreType.SelectedIndex = (int)config.coreType; } private void btnOK_Click(object sender, EventArgs e) @@ -285,6 +286,7 @@ namespace v2rayN.Forms config.statisticsFreshRate = (int)cbFreshrate.SelectedValue; config.keepOlderDedupl = chkKeepOlderDedupl.Checked; + config.ignoreGeoUpdateCore = chkIgnoreGeoUpdateCore.Checked; config.coreType = (ECoreType)cmbCoreType.SelectedIndex; return 0; diff --git a/v2rayN/v2rayN/Forms/OptionSettingForm.resx b/v2rayN/v2rayN/Forms/OptionSettingForm.resx index 05feb4af..a0268ac7 100644 --- a/v2rayN/v2rayN/Forms/OptionSettingForm.resx +++ b/v2rayN/v2rayN/Forms/OptionSettingForm.resx @@ -117,1390 +117,1837 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - True - - - Xray_core - - - 11 - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Keep older when deduplication - - - 1 - - - Record local logs - - - 12 - - - 4, 22 + + 355, 16 - - txtKcpwriteBufferSize + + 75, 23 - - groupBox1 - - - 4 - - - False - - - 14 - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabControl1 - - - groupBox1 - - - 9 - - - groupBox1 - - - 662, 523 - - - 35 - - - 1 - - - 468, 60 - - - - Top - - - 102, 16 - - - cmbprotocol - - - 6 - - - 14 - - - 30, 87 - - - 111, 100 - - - True - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 84, 16 - - - 40 - - - True - - - 120, 16 - - - True - - - tti - - - tabPage6 - - - chkdefAllowInsecure - - + + 7 - - tabPage7 - - - 12 - - - http - - - 7 - - - label5 - - - 648, 421 - - - 206, 64 - - - 95, 12 - - - tabPage6 - - - 15, 63 - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 2 - - - Enable UDP - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 2 - &Cancel - - label10 - - - groupBox1 - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 662, 10 - - - Settings - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - label4 - - - 236, 66 - - - txtKcpmtu - - - lbFreshrate - - - 12 - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - label11 - - - 29 - - - 8 - - - 0, 10 - - - 58, 20 - - - Support DnsObject - - - tabPage6 - - - False - - - groupBox1 - - - $this - - - 3 - - - 6 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - NoControl - - - tabPage7 - - - tabPage6 - - - Bottom - - - 576, 16 - - - 18 - - - True - - - 39 - - - tabPage6 - - - congestion - - - NoControl + + btnClose System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 89, 12 - - - NoControl - - - 0 - - - tabPage7 - - - v2rayN settings - - - 16 - - - groupBox1 - - - 10 - - - 32 - - - 6, 12 - - - groupBox1 - - - 1 - - - True - - - 8 - - - 198, 16 - - - Automatically start at system startup - - - Fill - - - txtKcptti - - - 2 - - - Turn on Sniffing - - - 281, 12 - - - tabPage7 - - - 2 - - - 3, 3, 3, 3 - - - 3 - - - 662, 453 - - - 33, 29 - - - 1 - - - 124, 60 - - - 78, 21 - - - Log level - - - tabControl1 - - - 59, 12 - - - v2rayN.Forms.BaseForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null - - - warning - - - tabPage2 - - + panel2 - - 11 - - - Statistics freshrate - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - True - - - 120, 16 - - - 89, 12 - - - btnOK - - - 18, 66 - - - 20, 143 - - - 15 - - - True - - - 4, 4, 4, 4 - - - tabPage6 - - - 5 - - - Turn on Sniffing + + 0 groupBox1 - - 18, 28 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 20 - - - 29 - - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 14 - - - 5 - - - Core Type - - - True - - - chksniffingEnabled - - - 2 - - - 174, 16 - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 18, 104 - - - tabPage2 - - - mtu - - - socks - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - panel1 - - - 30 - - - 53, 12 - - - 13 - - - label8 - - - 468, 27 - - - 236, 28 - - - chkAutoRun - - - 94, 21 - - - 345, 62 - - - 11 - - - 15, 129 - - - chkudpEnabled - - - 0 - - - True - - - 8, 17 - tabPage1 - - tabPage6 - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 1 - - - System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 84, 16 - - - 15 - - - True - - - False - - - label7 - - - txtlocalPort - - - info - - - 19 - - - readBufferSize - - - tabPage6 - - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - btnClose - - - 124, 25 - - - protocol - - - 23, 12 - - - 638, 356 - - - socks - - - 2 - - - 3, 3 - - - chkAllowLANConn - - - 84, 16 - - - tabControl1 - - - True - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - True - - - 1 - - - 10 - - - 369, 62 - - - 161, 84 - - - 9 - - - groupBox1 - - - 33, 141 - - - NoControl - - - chkEnableStatistics - - - 4 - - - 355, 16 - - - 53, 12 - - - 193, 162 - - - True - - - 369, 27 - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabPage6 - - - label2 - - - 654, 427 - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 9 - - - 101, 12 - - - 5 - - - 12 - - - 20 - - - allowInsecure - - - Enable Statistics (Realtime netspeed and traffic records. Require restart the v2rayN client) - - - $this - - - 4 - - - Listening port - - - Fill - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - False - - - 257, 60 - - + 0 - - tabControl1 - - - True - - - 34 - - - cmbprotocol2 - - - chkKeepOlderDedupl - - - True - - - 16 - - - True - - - True - - - True - - - chkKcpcongestion - - - Core: basic settings - - - 0 - - - 257, 25 - - - tabPage2 - - - tabControl1 - - - listening port 2 - - - 97, 20 - - - chkAllowIn2 - - - 15, 38 - - - True - - - 15, 160 - - - 38 - - - 33 - 4, 22 - - v2fly_core + + + 3, 3, 3, 3 - - 9 - - - label1 - - - Core: KCP settings - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - error - - - 59, 12 - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 8 - - - 120, 16 - - - 75, 23 - - - txtlocalPort2 - - - True - - - 246, 16 - - - True - - + 654, 427 - - 10 + + 0 - - False - - - 206, 29 - - - downlinkCapacity - - - chkudpEnabled2 - - - Allow connections from the LAN + + Core: basic settings tabPage1 - + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabControl1 + + + 0 + + + linkDnsObjectDoc + + + System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage2 + + + 0 + + + txtremoteDNS + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage2 + + + 1 + + + label14 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage2 + + + 2 + + + 4, 22 + + + 654, 427 + + + 4 + + + Core: DNS settings + + + tabPage2 + + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabControl1 + + + 1 + + + chkKcpcongestion + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tabPage6 - - 2 - - - panel2 - - - 3 - - - System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - linkDnsObjectDoc - - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 125, 12 - - - txtKcpreadBufferSize - - - none - - - groupBox1 - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 6 - - - OptionSettingForm - - - 2 - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 15, 62 - - - 111, 62 - - - 7 - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 5 - - - 13 - - - 97, 20 - - + 0 - - 8 + + txtKcpwriteBufferSize - - 78, 21 - - - tabPage7 - - - tabPage7 - - - True - - - System.Windows.Forms.TabControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - True - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 23, 12 - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 345, 100 - - - 94, 21 - - - NoControl - - - 654, 427 - - - 10 - - - 204, 16 - - - 17 - - - 23 - - - 94, 21 - - - 6 - - - 0, 463 - - - groupBox1 - - - 3 - - - http - - - 0 - - - 97, 20 - - - tabPage6 - - - tabPage6 - - - 7 - - - False - - - 257, 158 - - + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - &OK + + tabPage6 - - 10 - - + 1 - - 94, 21 - - - txtKcpuplinkCapacity - - - tabPage2 - - - chklogEnabled - - - chksniffingEnabled2 - - - tabPage7 - - - 4, 22 - - - $this - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 4, 22 - - - groupBox1 - - - NoControl - - - 6 - - - protocol - - - tabPage7 - - - 15, 16 - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - True - - - 0 - - - 8 - - - txtremoteDNS - - - True - - - True - - - writeBufferSize - - - 11 - - - System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 89, 12 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 31 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - Core: DNS settings - - - groupBox1 - - - 32 - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - True - - - 345, 24 - - - tabPage7 - - - cbFreshrate - - - 236, 104 - - - 4 - - - NoControl - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 94, 21 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 8, 41 + + label10 System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 0, 0, 0, 0 + + tabPage6 - - uplinkCapacity + + 2 + + + txtKcpreadBufferSize + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage6 + + + 3 + + + label11 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage6 + + + 4 txtKcpdownlinkCapacity - - 35 + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 6 + + tabPage6 - - 3 + + 5 - - 3, 3, 3, 3 + + label8 - - 107, 12 - - - 0 - - - 15, 192 + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tabPage6 - - debug + + 6 - - chkmuxEnabled + + txtKcpuplinkCapacity - - label3 - - - tabPage6 - - - False - - - 15, 110 - - - 105, 137 - - - 0, 0 - - - Enable UDP - - - cmbCoreType - - - 3, 3, 3, 3 - - - groupBox1 - - - 126, 16 - - - 267, 16 - - - 75, 23 - - - groupBox1 - - - NoControl - - + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 9 + + tabPage6 - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 342, 17 - - - 94, 21 - - - 97, 20 - - - 3 - - - Custom DNS (multiple, separated by commas (,)) - - - 654, 427 - - - 11 - - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 0 - - - NoControl - - - panel2 - - + 7 - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Turn on Mux Multiplexing - - - cmbloglevel - - - label6 - - - 111, 24 - - - 4 - label9 - - 662, 60 + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage6 + + + 8 + + + txtKcptti + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage6 + + + 9 + + + label7 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage6 + + + 10 + + + txtKcpmtu + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage6 + + + 11 + + + label6 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage6 + + + 12 + + + 4, 22 + + + 3, 3, 3, 3 + + + 654, 427 + + + 2 + + + Core: KCP settings + + + tabPage6 + + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabControl1 + + + 2 + + + True + + + NoControl + + + 15, 132 + + + 234, 16 + + + 36 + + + Ignore Geo files when updating core + + + chkIgnoreGeoUpdateCore + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage7 + + + 0 + + + v2fly_core + + + Xray_core + + + 325, 130 + + + 97, 20 + + + 34 + + + cmbCoreType + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage7 + + + 1 + + + True + + + NoControl + + + 253, 134 + + + 59, 12 + + + 35 + + + Core Type + + + label4 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage7 + + + 2 + + + True + + + NoControl + + + 15, 108 + + + 198, 16 + + + 33 + + + Keep older when deduplication + + + chkKeepOlderDedupl + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage7 + + + 3 + + + 161, 84 + + + 58, 20 + + + 32 + + + cbFreshrate + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage7 + + + 4 + + + True + + + NoControl + + + 30, 88 + + + 125, 12 + + + 30 + + + Statistics freshrate + + + lbFreshrate + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage7 + + + 5 + + + True + + + NoControl + + + 15, 64 + + + 576, 16 + + + 29 + + + Enable Statistics (Realtime netspeed and traffic records. Require restart the v2rayN client) + + + chkEnableStatistics + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage7 + + + 6 + + + True + + + 15, 40 + + + 204, 16 + + + 29 + + + Allow connections from the LAN + + + chkAllowLANConn + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage7 + + + 7 + + + True + + + 15, 16 + + + 246, 16 + + + 23 + + + Automatically start at system startup + + + chkAutoRun + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage7 + + + 8 + + + 4, 22 + + + 3, 3, 3, 3 + + + 654, 427 + + + 3 + + + v2rayN settings + + + tabPage7 + + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabControl1 + + + 3 + + + Fill + + + 0, 10 + + + 662, 453 + + + 10 + + + tabControl1 + + + System.Windows.Forms.TabControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 0 + + + chkdefAllowInsecure + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 0 + + + chksniffingEnabled2 + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 1 + + + chksniffingEnabled + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 2 + + + chkmuxEnabled + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 3 + + + chkAllowIn2 + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 4 + + + chkudpEnabled2 + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 5 + + + cmbprotocol2 + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 6 + + + label3 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 7 + + + txtlocalPort2 + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 8 + + + cmbprotocol + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 9 + + + label1 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 10 + + + chkudpEnabled + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 11 + + + chklogEnabled + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 12 + + + cmbloglevel + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 13 + + + label5 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 14 + + + txtlocalPort + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 15 + + + label2 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 16 + + + Fill + + + 3, 3 + + + 648, 421 + + + 6 + + + groupBox1 + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage1 + + + 0 + + + True + + + NoControl + + + 15, 192 + + + 102, 16 + + + 35 + + + allowInsecure + + + chkdefAllowInsecure + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 0 + + + True + + + NoControl + + + 468, 60 + + + 120, 16 + + + 32 + + + Turn on Sniffing + + + False + + + chksniffingEnabled2 + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 1 + + + True + + + NoControl + + + 468, 27 + + + 120, 16 + + + 31 + + + Turn on Sniffing + + + chksniffingEnabled + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 2 + + + True + + + 15, 129 + + + 174, 16 + + + 20 + + + Turn on Mux Multiplexing + + + chkmuxEnabled + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 3 + + + True + + + 15, 63 + + + 120, 16 + + + 19 + + + listening port 2 + + + False + + + chkAllowIn2 + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 4 + + + True + + + 369, 62 + + + 84, 16 + + + 18 + + + Enable UDP + + + False + + + chkudpEnabled2 + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 5 + + + socks + + + http + + + 257, 60 + + + 97, 20 + + + 17 + + + False + + + cmbprotocol2 + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 6 + + + True + + + 206, 64 + + + 53, 12 + + + 16 + + + protocol + + + False + + + label3 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 7 + + + 124, 60 + + + 78, 21 + + + 14 + + + False + + + txtlocalPort2 + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 8 + + + False + + + socks + + + http + + + 257, 25 + + + 97, 20 + + + 12 + + + cmbprotocol + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 9 + + + True + + + 206, 29 + + + 53, 12 + + + 11 + + + protocol + + + label1 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 10 + + + True + + + 369, 27 + + + 84, 16 + + + 10 + + + Enable UDP + + + chkudpEnabled + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 11 + + + True + + + 15, 160 + + + 126, 16 + + + 9 + + + Record local logs + + + chklogEnabled + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 12 + + + debug + + + info + + + warning + + + error + + + none + + + 257, 158 + + + 97, 20 + + + 6 + + + cmbloglevel + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 13 + + + True + + + 193, 162 + + + 59, 12 + + + 8 + + + Log level + + + label5 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 14 + + + 124, 25 + + + 78, 21 + + + 3 + + + txtlocalPort + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 15 + + + True + + + 33, 29 + + + 89, 12 + + + 2 + + + Listening port + + + label2 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 16 + + + True + + + NoControl + + + 342, 17 + + + 0, 0, 0, 0 + + + 107, 12 + + + 40 + + + Support DnsObject + + + linkDnsObjectDoc + + + System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage2 + + + 0 + + + 8, 41 + + + True + + + 638, 356 + + + 39 + + + txtremoteDNS + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage2 + + + 1 + + + True + + + NoControl + + + 8, 17 + + + 281, 12 + + + 38 + + + Custom DNS (multiple, separated by commas (,)) label14 + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage2 + + + 2 + + + True + + + 20, 143 + + + 84, 16 + + + 20 + + + congestion + + + chkKcpcongestion + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage6 + + + 0 + + + 345, 100 + + + 94, 21 + + + 15 + + + txtKcpwriteBufferSize + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage6 + + + 1 + + + True + + + 236, 104 + + + 95, 12 + + + 14 + + + writeBufferSize + + + label10 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage6 + + + 2 + + + 111, 100 + + + 94, 21 + + + 13 + + + txtKcpreadBufferSize + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage6 + + + 3 + + + True + + + 18, 104 + + + 89, 12 + + + 12 + + + readBufferSize + + + label11 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage6 + + + 4 + + + 345, 62 + + + 94, 21 + + + 11 + + + txtKcpdownlinkCapacity + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage6 + + + 5 + + + True + + + 236, 66 + + + 101, 12 + + + 10 + + + downlinkCapacity + + + label8 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage6 + + + 6 + + + 111, 62 + + + 94, 21 + + + 9 + + + txtKcpuplinkCapacity + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage6 + + + 7 + + + True + + + 18, 66 + + + 89, 12 + + + 8 + + + uplinkCapacity + + + label9 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage6 + + + 8 + + + 345, 24 + + + 94, 21 + + + 7 + + + txtKcptti + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage6 + + + 9 + + + True + + + 236, 28 + + + 23, 12 + + + 6 + + + tti + + + label7 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage6 + + + 10 + + + 111, 24 + + + 94, 21 + + + 5 + + + txtKcpmtu + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage6 + + + 11 + + + True + + + 18, 28 + + + 23, 12 + + + 4 + + + mtu + + + label6 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage6 + + + 12 + + + btnOK + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panel2 + + + 1 + + + Bottom + + + 0, 463 + + + 662, 60 + + + 11 + + + panel2 + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 1 + + + 267, 16 + + + 75, 23 + + + 8 + + + &OK + + + btnOK + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panel2 + + + 1 + + + Top + + + 0, 0 + + + 662, 10 + + + 9 + + + panel1 + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 2 + True - - zh-Hans - + + 6, 12 + + + 662, 523 + + + 4, 4, 4, 4 + + + Settings + + + OptionSettingForm + + + v2rayN.Forms.BaseForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/v2rayN/v2rayN/Forms/OptionSettingForm.zh-Hans.resx b/v2rayN/v2rayN/Forms/OptionSettingForm.zh-Hans.resx index bfab7ce2..eccd6e2c 100644 --- a/v2rayN/v2rayN/Forms/OptionSettingForm.zh-Hans.resx +++ b/v2rayN/v2rayN/Forms/OptionSettingForm.zh-Hans.resx @@ -223,6 +223,12 @@ Core:KCP设置 + + 150, 16 + + + 更新Core时忽略Geo文件 + 53, 12 diff --git a/v2rayN/v2rayN/Handler/ShareHandler.cs b/v2rayN/v2rayN/Handler/ShareHandler.cs index 766f16e0..157988c8 100644 --- a/v2rayN/v2rayN/Handler/ShareHandler.cs +++ b/v2rayN/v2rayN/Handler/ShareHandler.cs @@ -57,7 +57,7 @@ namespace v2rayN.Handler string remark = string.Empty; if (!Utils.IsNullOrEmpty(item.remarks)) { - remark = "#" + WebUtility.UrlEncode(item.remarks); + remark = "#" + Utils.UrlEncode(item.remarks); } url = string.Format("{0}:{1}@{2}:{3}", item.security, @@ -72,7 +72,7 @@ namespace v2rayN.Handler string remark = string.Empty; if (!Utils.IsNullOrEmpty(item.remarks)) { - remark = "#" + WebUtility.UrlEncode(item.remarks); + remark = "#" + Utils.UrlEncode(item.remarks); } url = string.Format("{0}:{1}@{2}:{3}", item.security, @@ -87,12 +87,12 @@ namespace v2rayN.Handler string remark = string.Empty; if (!Utils.IsNullOrEmpty(item.remarks)) { - remark = "#" + WebUtility.UrlEncode(item.remarks); + remark = "#" + Utils.UrlEncode(item.remarks); } string query = string.Empty; if (!Utils.IsNullOrEmpty(item.requestHost)) { - query = string.Format("?sni={0}", item.requestHost); + query = string.Format("?sni={0}", Utils.UrlEncode(item.requestHost)); } url = string.Format("{0}@{1}:{2}", item.id, @@ -105,7 +105,7 @@ namespace v2rayN.Handler string remark = string.Empty; if (!Utils.IsNullOrEmpty(item.remarks)) { - remark = "#" + WebUtility.UrlEncode(item.remarks); + remark = "#" + Utils.UrlEncode(item.remarks); } var dicQuery = new Dictionary(); if (!Utils.IsNullOrEmpty(item.flow)) @@ -150,7 +150,7 @@ namespace v2rayN.Handler } if (!Utils.IsNullOrEmpty(item.requestHost)) { - dicQuery.Add("host", item.requestHost); + dicQuery.Add("host", Utils.UrlEncode(item.requestHost)); } break; case "kcp": @@ -164,18 +164,18 @@ namespace v2rayN.Handler } if (!Utils.IsNullOrEmpty(item.path)) { - dicQuery.Add("seed", item.path); + dicQuery.Add("seed", Utils.UrlEncode(item.path)); } break; case "ws": if (!Utils.IsNullOrEmpty(item.requestHost)) { - dicQuery.Add("host", item.requestHost); + dicQuery.Add("host", Utils.UrlEncode(item.requestHost)); } if (!Utils.IsNullOrEmpty(item.path)) { - dicQuery.Add("path", item.path); + dicQuery.Add("path", Utils.UrlEncode(item.path)); } break; @@ -184,11 +184,11 @@ namespace v2rayN.Handler dicQuery["type"] = "http"; if (!Utils.IsNullOrEmpty(item.requestHost)) { - dicQuery.Add("host", item.requestHost); + dicQuery.Add("host", Utils.UrlEncode(item.requestHost)); } if (!Utils.IsNullOrEmpty(item.path)) { - dicQuery.Add("path", item.path); + dicQuery.Add("path", Utils.UrlEncode(item.path)); } break; @@ -201,8 +201,8 @@ namespace v2rayN.Handler { dicQuery.Add("headerType", "none"); } - dicQuery.Add("quicSecurity", item.requestHost); - dicQuery.Add("key", item.path); + dicQuery.Add("quicSecurity", Utils.UrlEncode(item.requestHost)); + dicQuery.Add("key", Utils.UrlEncode(item.path)); break; } string query = "?" + string.Join("&", dicQuery.Select(x => x.Key + "=" + x.Value).ToArray()); @@ -330,7 +330,7 @@ namespace v2rayN.Handler { try { - vmessItem.remarks = WebUtility.UrlDecode(result.Substring(indexRemark + 1, result.Length - indexRemark - 1)); + vmessItem.remarks = Utils.UrlDecode(result.Substring(indexRemark + 1, result.Length - indexRemark - 1)); } catch { } result = result.Substring(0, indexRemark); @@ -383,7 +383,7 @@ namespace v2rayN.Handler } else { - vmessItem.remarks = WebUtility.UrlDecode(remarks); + vmessItem.remarks = Utils.UrlDecode(remarks); } } else if (result.StartsWith(Global.vlessProtocol)) @@ -509,7 +509,7 @@ namespace v2rayN.Handler var tag = match.Groups["tag"].Value; if (!Utils.IsNullOrEmpty(tag)) { - server.remarks = HttpUtility.UrlDecode(tag, Encoding.UTF8); + server.remarks = Utils.UrlDecode(tag); } Match details; try @@ -591,7 +591,7 @@ namespace v2rayN.Handler case "ws": string p1 = q["path"] ?? "/"; string h1 = q["host"] ?? ""; - i.requestHost = h1; + i.requestHost = Utils.UrlDecode(h1); i.path = p1; break; @@ -600,7 +600,7 @@ namespace v2rayN.Handler i.network = "h2"; string p2 = q["path"] ?? "/"; string h2 = q["host"] ?? ""; - i.requestHost = h2; + i.requestHost = Utils.UrlDecode(h2); i.path = p2; break; @@ -609,7 +609,7 @@ namespace v2rayN.Handler string k = q["key"] ?? ""; string t3 = q["type"] ?? "none"; i.headerType = t3; - i.requestHost = s; + i.requestHost = Utils.UrlDecode(s); i.path = k; break; @@ -645,30 +645,30 @@ namespace v2rayN.Handler { case "tcp": item.headerType = query["headerType"] ?? "none"; - item.requestHost = query["host"] ?? ""; + item.requestHost = Utils.UrlDecode(query["host"] ?? ""); break; case "kcp": item.headerType = query["headerType"] ?? "none"; - item.path = query["seed"] ?? ""; + item.path = Utils.UrlDecode(query["seed"] ?? ""); break; case "ws": - item.requestHost = query["host"] ?? ""; - item.path = query["path"] ?? "/"; + item.requestHost = Utils.UrlDecode(query["host"] ?? ""); + item.path = Utils.UrlDecode(query["path"] ?? "/"); break; case "http": case "h2": item.network = "h2"; - item.requestHost = query["host"] ?? ""; - item.path = query["path"] ?? "/"; + item.requestHost = Utils.UrlDecode(query["host"] ?? ""); + item.path = Utils.UrlDecode(query["path"] ?? "/"); break; case "quic": item.headerType = query["headerType"] ?? "none"; item.requestHost = query["quicSecurity"] ?? "none"; - item.path = query["key"] ?? ""; + item.path = Utils.UrlDecode(query["key"] ?? ""); break; default: diff --git a/v2rayN/v2rayN/Mode/Config.cs b/v2rayN/v2rayN/Mode/Config.cs index 2680a577..b1b63fe5 100644 --- a/v2rayN/v2rayN/Mode/Config.cs +++ b/v2rayN/v2rayN/Mode/Config.cs @@ -170,6 +170,10 @@ namespace v2rayN.Mode { get; set; } + public bool ignoreGeoUpdateCore + { + get; set; + } #region 函数 diff --git a/v2rayN/v2rayN/Properties/AssemblyInfo.cs b/v2rayN/v2rayN/Properties/AssemblyInfo.cs index bc7f263c..c8e96058 100644 --- a/v2rayN/v2rayN/Properties/AssemblyInfo.cs +++ b/v2rayN/v2rayN/Properties/AssemblyInfo.cs @@ -32,4 +32,4 @@ using System.Runtime.InteropServices; // 方法是按如下所示使用“*”: //[assembly: AssemblyVersion("1.0.*")] //[assembly: AssemblyVersion("1.0.0")] -[assembly: AssemblyFileVersion("4.4")] +[assembly: AssemblyFileVersion("4.5")] diff --git a/v2rayN/v2rayN/Tool/FileManager.cs b/v2rayN/v2rayN/Tool/FileManager.cs index bd5ebf93..d668b599 100644 --- a/v2rayN/v2rayN/Tool/FileManager.cs +++ b/v2rayN/v2rayN/Tool/FileManager.cs @@ -68,7 +68,7 @@ namespace v2rayN.Tool throw ex; } } - public static bool ZipExtractToFile(string fileName) + public static bool ZipExtractToFile(string fileName, string ignoredName) { try { @@ -82,6 +82,10 @@ namespace v2rayN.Tool } try { + if (!Utils.IsNullOrEmpty(ignoredName) && entry.Name.Contains(ignoredName)) + { + continue; + } entry.ExtractToFile(Utils.GetPath(entry.Name), true); } catch (IOException ex) diff --git a/v2rayN/v2rayN/Tool/Utils.cs b/v2rayN/v2rayN/Tool/Utils.cs index f6ac4c67..1e1e9444 100644 --- a/v2rayN/v2rayN/Tool/Utils.cs +++ b/v2rayN/v2rayN/Tool/Utils.cs @@ -20,11 +20,12 @@ using ZXing.QrCode; using System.Security.Principal; using v2rayN.Base; using Newtonsoft.Json.Linq; +using System.Web; namespace v2rayN { class Utils - { + { #region 资源Json操作 @@ -369,6 +370,14 @@ namespace v2rayN result = list; } + public static string UrlEncode(string url) + { + return HttpUtility.UrlEncode(url); + } + public static string UrlDecode(string url) + { + return HttpUtility.UrlDecode(url); + } #endregion From e6fc9e47837f742963ffe7f3ed39069fd11191e3 Mon Sep 17 00:00:00 2001 From: Li Date: Thu, 14 Jan 2021 16:34:34 +0800 Subject: [PATCH 44/54] Add menu to clear all service statistics MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 增加按钮,清除所有服务统计 --- v2rayN/v2rayN/Forms/MainForm.Designer.cs | 166 +- v2rayN/v2rayN/Forms/MainForm.cs | 10 +- v2rayN/v2rayN/Forms/MainForm.resx | 2451 ++++++++++---------- v2rayN/v2rayN/Forms/MainForm.zh-Hans.resx | 6 + v2rayN/v2rayN/Handler/StatisticsHandler.cs | 21 + 5 files changed, 1356 insertions(+), 1298 deletions(-) diff --git a/v2rayN/v2rayN/Forms/MainForm.Designer.cs b/v2rayN/v2rayN/Forms/MainForm.Designer.cs index 148b09d9..a208b5dd 100644 --- a/v2rayN/v2rayN/Forms/MainForm.Designer.cs +++ b/v2rayN/v2rayN/Forms/MainForm.Designer.cs @@ -58,6 +58,7 @@ this.menuRealPingServer = new System.Windows.Forms.ToolStripMenuItem(); this.menuSpeedServer = new System.Windows.Forms.ToolStripMenuItem(); this.tsbTestMe = new System.Windows.Forms.ToolStripMenuItem(); + this.menuClearServerStatistics = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripSeparator6 = new System.Windows.Forms.ToolStripSeparator(); this.menuExport2ClientConfig = new System.Windows.Forms.ToolStripMenuItem(); this.menuExport2ServerConfig = new System.Windows.Forms.ToolStripMenuItem(); @@ -139,19 +140,17 @@ // // scMain.Panel1 // - resources.ApplyResources(this.scMain.Panel1, "scMain.Panel1"); this.scMain.Panel1.Controls.Add(this.lvServers); // // scMain.Panel2 // - resources.ApplyResources(this.scMain.Panel2, "scMain.Panel2"); this.scMain.Panel2.Controls.Add(this.qrCodeControl); this.scMain.TabStop = false; // // lvServers // - resources.ApplyResources(this.lvServers, "lvServers"); this.lvServers.ContextMenuStrip = this.cmsLv; + resources.ApplyResources(this.lvServers, "lvServers"); this.lvServers.FullRowSelect = true; this.lvServers.GridLines = true; this.lvServers.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable; @@ -170,7 +169,6 @@ // // cmsLv // - resources.ApplyResources(this.cmsLv, "cmsLv"); this.cmsLv.ImageScalingSize = new System.Drawing.Size(20, 20); this.cmsLv.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.menuAddVmessServer, @@ -198,6 +196,7 @@ this.menuRealPingServer, this.menuSpeedServer, this.tsbTestMe, + this.menuClearServerStatistics, this.toolStripSeparator6, this.menuExport2ClientConfig, this.menuExport2ServerConfig, @@ -205,188 +204,195 @@ this.menuExport2SubContent}); this.cmsLv.Name = "cmsLv"; this.cmsLv.OwnerItem = this.tsbServer; + resources.ApplyResources(this.cmsLv, "cmsLv"); // // menuAddVmessServer // - resources.ApplyResources(this.menuAddVmessServer, "menuAddVmessServer"); this.menuAddVmessServer.Name = "menuAddVmessServer"; + resources.ApplyResources(this.menuAddVmessServer, "menuAddVmessServer"); this.menuAddVmessServer.Click += new System.EventHandler(this.menuAddVmessServer_Click); // // menuAddVlessServer // - resources.ApplyResources(this.menuAddVlessServer, "menuAddVlessServer"); this.menuAddVlessServer.Name = "menuAddVlessServer"; + resources.ApplyResources(this.menuAddVlessServer, "menuAddVlessServer"); this.menuAddVlessServer.Click += new System.EventHandler(this.menuAddVlessServer_Click); // // menuAddShadowsocksServer // - resources.ApplyResources(this.menuAddShadowsocksServer, "menuAddShadowsocksServer"); this.menuAddShadowsocksServer.Name = "menuAddShadowsocksServer"; + resources.ApplyResources(this.menuAddShadowsocksServer, "menuAddShadowsocksServer"); this.menuAddShadowsocksServer.Click += new System.EventHandler(this.menuAddShadowsocksServer_Click); // // menuAddSocksServer // - resources.ApplyResources(this.menuAddSocksServer, "menuAddSocksServer"); this.menuAddSocksServer.Name = "menuAddSocksServer"; + resources.ApplyResources(this.menuAddSocksServer, "menuAddSocksServer"); this.menuAddSocksServer.Click += new System.EventHandler(this.menuAddSocksServer_Click); // // menuAddTrojanServer // - resources.ApplyResources(this.menuAddTrojanServer, "menuAddTrojanServer"); this.menuAddTrojanServer.Name = "menuAddTrojanServer"; + resources.ApplyResources(this.menuAddTrojanServer, "menuAddTrojanServer"); this.menuAddTrojanServer.Click += new System.EventHandler(this.menuAddTrojanServer_Click); // // menuAddCustomServer // - resources.ApplyResources(this.menuAddCustomServer, "menuAddCustomServer"); this.menuAddCustomServer.Name = "menuAddCustomServer"; + resources.ApplyResources(this.menuAddCustomServer, "menuAddCustomServer"); this.menuAddCustomServer.Click += new System.EventHandler(this.menuAddCustomServer_Click); // // menuAddServers // - resources.ApplyResources(this.menuAddServers, "menuAddServers"); this.menuAddServers.Name = "menuAddServers"; + resources.ApplyResources(this.menuAddServers, "menuAddServers"); this.menuAddServers.Click += new System.EventHandler(this.menuAddServers_Click); // // menuScanScreen // - resources.ApplyResources(this.menuScanScreen, "menuScanScreen"); this.menuScanScreen.Name = "menuScanScreen"; + resources.ApplyResources(this.menuScanScreen, "menuScanScreen"); this.menuScanScreen.Click += new System.EventHandler(this.menuScanScreen_Click); // // toolStripSeparator1 // - resources.ApplyResources(this.toolStripSeparator1, "toolStripSeparator1"); this.toolStripSeparator1.Name = "toolStripSeparator1"; + resources.ApplyResources(this.toolStripSeparator1, "toolStripSeparator1"); // // menuRemoveServer // - resources.ApplyResources(this.menuRemoveServer, "menuRemoveServer"); this.menuRemoveServer.Name = "menuRemoveServer"; + resources.ApplyResources(this.menuRemoveServer, "menuRemoveServer"); this.menuRemoveServer.Click += new System.EventHandler(this.menuRemoveServer_Click); // // menuRemoveDuplicateServer // - resources.ApplyResources(this.menuRemoveDuplicateServer, "menuRemoveDuplicateServer"); this.menuRemoveDuplicateServer.Name = "menuRemoveDuplicateServer"; + resources.ApplyResources(this.menuRemoveDuplicateServer, "menuRemoveDuplicateServer"); this.menuRemoveDuplicateServer.Click += new System.EventHandler(this.menuRemoveDuplicateServer_Click); // // menuCopyServer // - resources.ApplyResources(this.menuCopyServer, "menuCopyServer"); this.menuCopyServer.Name = "menuCopyServer"; + resources.ApplyResources(this.menuCopyServer, "menuCopyServer"); this.menuCopyServer.Click += new System.EventHandler(this.menuCopyServer_Click); // // menuSetDefaultServer // - resources.ApplyResources(this.menuSetDefaultServer, "menuSetDefaultServer"); this.menuSetDefaultServer.Name = "menuSetDefaultServer"; + resources.ApplyResources(this.menuSetDefaultServer, "menuSetDefaultServer"); this.menuSetDefaultServer.Click += new System.EventHandler(this.menuSetDefaultServer_Click); // // toolStripSeparator3 // - resources.ApplyResources(this.toolStripSeparator3, "toolStripSeparator3"); this.toolStripSeparator3.Name = "toolStripSeparator3"; + resources.ApplyResources(this.toolStripSeparator3, "toolStripSeparator3"); // // menuMoveTop // - resources.ApplyResources(this.menuMoveTop, "menuMoveTop"); this.menuMoveTop.Name = "menuMoveTop"; + resources.ApplyResources(this.menuMoveTop, "menuMoveTop"); this.menuMoveTop.Click += new System.EventHandler(this.menuMoveTop_Click); // // menuMoveUp // - resources.ApplyResources(this.menuMoveUp, "menuMoveUp"); this.menuMoveUp.Name = "menuMoveUp"; + resources.ApplyResources(this.menuMoveUp, "menuMoveUp"); this.menuMoveUp.Click += new System.EventHandler(this.menuMoveUp_Click); // // menuMoveDown // - resources.ApplyResources(this.menuMoveDown, "menuMoveDown"); this.menuMoveDown.Name = "menuMoveDown"; + resources.ApplyResources(this.menuMoveDown, "menuMoveDown"); this.menuMoveDown.Click += new System.EventHandler(this.menuMoveDown_Click); // // menuMoveBottom // - resources.ApplyResources(this.menuMoveBottom, "menuMoveBottom"); this.menuMoveBottom.Name = "menuMoveBottom"; + resources.ApplyResources(this.menuMoveBottom, "menuMoveBottom"); this.menuMoveBottom.Click += new System.EventHandler(this.menuMoveBottom_Click); // // menuSelectAll // - resources.ApplyResources(this.menuSelectAll, "menuSelectAll"); this.menuSelectAll.Name = "menuSelectAll"; + resources.ApplyResources(this.menuSelectAll, "menuSelectAll"); this.menuSelectAll.Click += new System.EventHandler(this.menuSelectAll_Click); // // toolStripSeparator9 // - resources.ApplyResources(this.toolStripSeparator9, "toolStripSeparator9"); this.toolStripSeparator9.Name = "toolStripSeparator9"; + resources.ApplyResources(this.toolStripSeparator9, "toolStripSeparator9"); // // menuPingServer // - resources.ApplyResources(this.menuPingServer, "menuPingServer"); this.menuPingServer.Name = "menuPingServer"; + resources.ApplyResources(this.menuPingServer, "menuPingServer"); this.menuPingServer.Click += new System.EventHandler(this.menuPingServer_Click); // // menuTcpingServer // - resources.ApplyResources(this.menuTcpingServer, "menuTcpingServer"); this.menuTcpingServer.Name = "menuTcpingServer"; + resources.ApplyResources(this.menuTcpingServer, "menuTcpingServer"); this.menuTcpingServer.Click += new System.EventHandler(this.menuTcpingServer_Click); // // menuRealPingServer // - resources.ApplyResources(this.menuRealPingServer, "menuRealPingServer"); this.menuRealPingServer.Name = "menuRealPingServer"; + resources.ApplyResources(this.menuRealPingServer, "menuRealPingServer"); this.menuRealPingServer.Click += new System.EventHandler(this.menuRealPingServer_Click); // // menuSpeedServer // - resources.ApplyResources(this.menuSpeedServer, "menuSpeedServer"); this.menuSpeedServer.Name = "menuSpeedServer"; + resources.ApplyResources(this.menuSpeedServer, "menuSpeedServer"); this.menuSpeedServer.Click += new System.EventHandler(this.menuSpeedServer_Click); // // tsbTestMe // - resources.ApplyResources(this.tsbTestMe, "tsbTestMe"); this.tsbTestMe.Name = "tsbTestMe"; + resources.ApplyResources(this.tsbTestMe, "tsbTestMe"); this.tsbTestMe.Click += new System.EventHandler(this.tsbTestMe_Click); // + // menuClearServerStatistics + // + this.menuClearServerStatistics.Name = "menuClearServerStatistics"; + resources.ApplyResources(this.menuClearServerStatistics, "menuClearServerStatistics"); + this.menuClearServerStatistics.Click += new System.EventHandler(this.menuClearStatistic_Click); + // // toolStripSeparator6 // - resources.ApplyResources(this.toolStripSeparator6, "toolStripSeparator6"); this.toolStripSeparator6.Name = "toolStripSeparator6"; + resources.ApplyResources(this.toolStripSeparator6, "toolStripSeparator6"); // // menuExport2ClientConfig // - resources.ApplyResources(this.menuExport2ClientConfig, "menuExport2ClientConfig"); this.menuExport2ClientConfig.Name = "menuExport2ClientConfig"; + resources.ApplyResources(this.menuExport2ClientConfig, "menuExport2ClientConfig"); this.menuExport2ClientConfig.Click += new System.EventHandler(this.menuExport2ClientConfig_Click); // // menuExport2ServerConfig // - resources.ApplyResources(this.menuExport2ServerConfig, "menuExport2ServerConfig"); this.menuExport2ServerConfig.Name = "menuExport2ServerConfig"; + resources.ApplyResources(this.menuExport2ServerConfig, "menuExport2ServerConfig"); this.menuExport2ServerConfig.Click += new System.EventHandler(this.menuExport2ServerConfig_Click); // // menuExport2ShareUrl // - resources.ApplyResources(this.menuExport2ShareUrl, "menuExport2ShareUrl"); this.menuExport2ShareUrl.Name = "menuExport2ShareUrl"; + resources.ApplyResources(this.menuExport2ShareUrl, "menuExport2ShareUrl"); this.menuExport2ShareUrl.Click += new System.EventHandler(this.menuExport2ShareUrl_Click); // // menuExport2SubContent // - resources.ApplyResources(this.menuExport2SubContent, "menuExport2SubContent"); this.menuExport2SubContent.Name = "menuExport2SubContent"; + resources.ApplyResources(this.menuExport2SubContent, "menuExport2SubContent"); this.menuExport2SubContent.Click += new System.EventHandler(this.menuExport2SubContent_Click); // // tsbServer // - resources.ApplyResources(this.tsbServer, "tsbServer"); this.tsbServer.DropDown = this.cmsLv; this.tsbServer.Image = global::v2rayN.Properties.Resources.server; + resources.ApplyResources(this.tsbServer, "tsbServer"); this.tsbServer.Name = "tsbServer"; // // qrCodeControl @@ -396,14 +402,14 @@ // // notifyMain // - resources.ApplyResources(this.notifyMain, "notifyMain"); this.notifyMain.ContextMenuStrip = this.cmsMain; + resources.ApplyResources(this.notifyMain, "notifyMain"); this.notifyMain.MouseClick += new System.Windows.Forms.MouseEventHandler(this.notifyMain_MouseClick); // // cmsMain // - resources.ApplyResources(this.cmsMain, "cmsMain"); this.cmsMain.ImageScalingSize = new System.Drawing.Size(20, 20); + resources.ApplyResources(this.cmsMain, "cmsMain"); this.cmsMain.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.menuSysAgentMode, this.menuServers, @@ -419,63 +425,63 @@ // // menuSysAgentMode // - resources.ApplyResources(this.menuSysAgentMode, "menuSysAgentMode"); this.menuSysAgentMode.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.menuKeepClear, this.menuGlobal, this.menuKeepNothing}); this.menuSysAgentMode.Name = "menuSysAgentMode"; + resources.ApplyResources(this.menuSysAgentMode, "menuSysAgentMode"); // // menuKeepClear // - resources.ApplyResources(this.menuKeepClear, "menuKeepClear"); this.menuKeepClear.Name = "menuKeepClear"; + resources.ApplyResources(this.menuKeepClear, "menuKeepClear"); this.menuKeepClear.Click += new System.EventHandler(this.menuKeepClear_Click); // // menuGlobal // - resources.ApplyResources(this.menuGlobal, "menuGlobal"); this.menuGlobal.Name = "menuGlobal"; + resources.ApplyResources(this.menuGlobal, "menuGlobal"); this.menuGlobal.Click += new System.EventHandler(this.menuGlobal_Click); // // menuKeepNothing // - resources.ApplyResources(this.menuKeepNothing, "menuKeepNothing"); this.menuKeepNothing.Name = "menuKeepNothing"; + resources.ApplyResources(this.menuKeepNothing, "menuKeepNothing"); this.menuKeepNothing.Click += new System.EventHandler(this.menuKeepNothing_Click); // // menuServers // - resources.ApplyResources(this.menuServers, "menuServers"); this.menuServers.Name = "menuServers"; + resources.ApplyResources(this.menuServers, "menuServers"); // // menuAddServers2 // - resources.ApplyResources(this.menuAddServers2, "menuAddServers2"); this.menuAddServers2.Name = "menuAddServers2"; + resources.ApplyResources(this.menuAddServers2, "menuAddServers2"); this.menuAddServers2.Click += new System.EventHandler(this.menuAddServers_Click); // // menuScanScreen2 // - resources.ApplyResources(this.menuScanScreen2, "menuScanScreen2"); this.menuScanScreen2.Name = "menuScanScreen2"; + resources.ApplyResources(this.menuScanScreen2, "menuScanScreen2"); this.menuScanScreen2.Click += new System.EventHandler(this.menuScanScreen_Click); // // menuUpdateSubscriptions // - resources.ApplyResources(this.menuUpdateSubscriptions, "menuUpdateSubscriptions"); this.menuUpdateSubscriptions.Name = "menuUpdateSubscriptions"; + resources.ApplyResources(this.menuUpdateSubscriptions, "menuUpdateSubscriptions"); this.menuUpdateSubscriptions.Click += new System.EventHandler(this.menuUpdateSubscriptions_Click); // // toolStripSeparator2 // - resources.ApplyResources(this.toolStripSeparator2, "toolStripSeparator2"); this.toolStripSeparator2.Name = "toolStripSeparator2"; + resources.ApplyResources(this.toolStripSeparator2, "toolStripSeparator2"); // // menuExit // - resources.ApplyResources(this.menuExit, "menuExit"); this.menuExit.Name = "menuExit"; + resources.ApplyResources(this.menuExit, "menuExit"); this.menuExit.Click += new System.EventHandler(this.menuExit_Click); // // bgwScan @@ -486,31 +492,31 @@ // // groupBox1 // - resources.ApplyResources(this.groupBox1, "groupBox1"); this.groupBox1.Controls.Add(this.scMain); + resources.ApplyResources(this.groupBox1, "groupBox1"); this.groupBox1.Name = "groupBox1"; this.groupBox1.TabStop = false; // // groupBox2 // - resources.ApplyResources(this.groupBox2, "groupBox2"); this.groupBox2.Controls.Add(this.txtMsgBox); this.groupBox2.Controls.Add(this.ssMain); + resources.ApplyResources(this.groupBox2, "groupBox2"); this.groupBox2.Name = "groupBox2"; this.groupBox2.TabStop = false; // // txtMsgBox // - resources.ApplyResources(this.txtMsgBox, "txtMsgBox"); this.txtMsgBox.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(41)))), ((int)(((byte)(49)))), ((int)(((byte)(52))))); this.txtMsgBox.BorderStyle = System.Windows.Forms.BorderStyle.None; + resources.ApplyResources(this.txtMsgBox, "txtMsgBox"); this.txtMsgBox.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(226)))), ((int)(((byte)(228))))); this.txtMsgBox.Name = "txtMsgBox"; this.txtMsgBox.ReadOnly = true; // // ssMain // - resources.ApplyResources(this.ssMain, "ssMain"); + this.ssMain.ImageScalingSize = new System.Drawing.Size(20, 20); this.ssMain.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.toolSslSocksPortLab, this.toolSslSocksPort, @@ -521,6 +527,7 @@ this.toolSslBlank3, this.toolSslServerSpeed, this.toolSslBlank4}); + resources.ApplyResources(this.ssMain, "ssMain"); this.ssMain.Name = "ssMain"; this.ssMain.ItemClicked += new System.Windows.Forms.ToolStripItemClickedEventHandler(this.ssMain_ItemClicked); // @@ -531,8 +538,8 @@ // // toolSslSocksPort // - resources.ApplyResources(this.toolSslSocksPort, "toolSslSocksPort"); this.toolSslSocksPort.Name = "toolSslSocksPort"; + resources.ApplyResources(this.toolSslSocksPort, "toolSslSocksPort"); // // toolSslBlank1 // @@ -547,8 +554,8 @@ // // toolSslHttpPort // - resources.ApplyResources(this.toolSslHttpPort, "toolSslHttpPort"); this.toolSslHttpPort.Name = "toolSslHttpPort"; + resources.ApplyResources(this.toolSslHttpPort, "toolSslHttpPort"); // // toolSslBlank2 // @@ -570,8 +577,8 @@ // // toolSslBlank4 // - resources.ApplyResources(this.toolSslBlank4, "toolSslBlank4"); this.toolSslBlank4.Name = "toolSslBlank4"; + resources.ApplyResources(this.toolSslBlank4, "toolSslBlank4"); // // panel1 // @@ -580,7 +587,6 @@ // // tsMain // - resources.ApplyResources(this.tsMain, "tsMain"); this.tsMain.ImageScalingSize = new System.Drawing.Size(32, 32); this.tsMain.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.tsbServer, @@ -598,74 +604,75 @@ this.tsbPromotion, this.toolStripSeparator11, this.tsbClose}); + resources.ApplyResources(this.tsMain, "tsMain"); this.tsMain.Name = "tsMain"; this.tsMain.TabStop = true; // // toolStripSeparator4 // - resources.ApplyResources(this.toolStripSeparator4, "toolStripSeparator4"); this.toolStripSeparator4.Name = "toolStripSeparator4"; + resources.ApplyResources(this.toolStripSeparator4, "toolStripSeparator4"); // // tsbSub // - resources.ApplyResources(this.tsbSub, "tsbSub"); this.tsbSub.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.tsbSubSetting, this.tsbSubUpdate}); this.tsbSub.Image = global::v2rayN.Properties.Resources.sub; + resources.ApplyResources(this.tsbSub, "tsbSub"); this.tsbSub.Name = "tsbSub"; // // tsbSubSetting // - resources.ApplyResources(this.tsbSubSetting, "tsbSubSetting"); this.tsbSubSetting.Name = "tsbSubSetting"; + resources.ApplyResources(this.tsbSubSetting, "tsbSubSetting"); this.tsbSubSetting.Click += new System.EventHandler(this.tsbSubSetting_Click); // // tsbSubUpdate // - resources.ApplyResources(this.tsbSubUpdate, "tsbSubUpdate"); this.tsbSubUpdate.Name = "tsbSubUpdate"; + resources.ApplyResources(this.tsbSubUpdate, "tsbSubUpdate"); this.tsbSubUpdate.Click += new System.EventHandler(this.tsbSubUpdate_Click); // // tsbQRCodeSwitch // - resources.ApplyResources(this.tsbQRCodeSwitch, "tsbQRCodeSwitch"); this.tsbQRCodeSwitch.CheckOnClick = true; this.tsbQRCodeSwitch.ForeColor = System.Drawing.Color.Black; this.tsbQRCodeSwitch.Image = global::v2rayN.Properties.Resources.share; + resources.ApplyResources(this.tsbQRCodeSwitch, "tsbQRCodeSwitch"); this.tsbQRCodeSwitch.Name = "tsbQRCodeSwitch"; this.tsbQRCodeSwitch.CheckedChanged += new System.EventHandler(this.tsbQRCodeSwitch_CheckedChanged); // // toolStripSeparator8 // - resources.ApplyResources(this.toolStripSeparator8, "toolStripSeparator8"); this.toolStripSeparator8.Name = "toolStripSeparator8"; + resources.ApplyResources(this.toolStripSeparator8, "toolStripSeparator8"); // // tsbSetting // - resources.ApplyResources(this.tsbSetting, "tsbSetting"); this.tsbSetting.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.tsbOptionSetting, this.tsbRoutingSetting}); this.tsbSetting.Image = global::v2rayN.Properties.Resources.option; + resources.ApplyResources(this.tsbSetting, "tsbSetting"); this.tsbSetting.Name = "tsbSetting"; // // tsbOptionSetting // - resources.ApplyResources(this.tsbOptionSetting, "tsbOptionSetting"); this.tsbOptionSetting.Name = "tsbOptionSetting"; + resources.ApplyResources(this.tsbOptionSetting, "tsbOptionSetting"); this.tsbOptionSetting.Click += new System.EventHandler(this.tsbOptionSetting_Click); // // tsbRoutingSetting // - resources.ApplyResources(this.tsbRoutingSetting, "tsbRoutingSetting"); this.tsbRoutingSetting.Name = "tsbRoutingSetting"; + resources.ApplyResources(this.tsbRoutingSetting, "tsbRoutingSetting"); this.tsbRoutingSetting.Click += new System.EventHandler(this.tsbRoutingSetting_Click); // // toolStripSeparator5 // - resources.ApplyResources(this.toolStripSeparator5, "toolStripSeparator5"); this.toolStripSeparator5.Name = "toolStripSeparator5"; + resources.ApplyResources(this.toolStripSeparator5, "toolStripSeparator5"); // // tsbReload // @@ -675,45 +682,44 @@ // // toolStripSeparator7 // - resources.ApplyResources(this.toolStripSeparator7, "toolStripSeparator7"); this.toolStripSeparator7.Name = "toolStripSeparator7"; + resources.ApplyResources(this.toolStripSeparator7, "toolStripSeparator7"); // // tsbCheckUpdate // - resources.ApplyResources(this.tsbCheckUpdate, "tsbCheckUpdate"); this.tsbCheckUpdate.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.tsbCheckUpdateN, this.tsbCheckUpdateCore, this.tsbCheckUpdateXrayCore}); this.tsbCheckUpdate.Image = global::v2rayN.Properties.Resources.checkupdate; + resources.ApplyResources(this.tsbCheckUpdate, "tsbCheckUpdate"); this.tsbCheckUpdate.Name = "tsbCheckUpdate"; // // tsbCheckUpdateN // - resources.ApplyResources(this.tsbCheckUpdateN, "tsbCheckUpdateN"); this.tsbCheckUpdateN.Name = "tsbCheckUpdateN"; + resources.ApplyResources(this.tsbCheckUpdateN, "tsbCheckUpdateN"); this.tsbCheckUpdateN.Click += new System.EventHandler(this.tsbCheckUpdateN_Click); // // tsbCheckUpdateCore // - resources.ApplyResources(this.tsbCheckUpdateCore, "tsbCheckUpdateCore"); this.tsbCheckUpdateCore.Name = "tsbCheckUpdateCore"; + resources.ApplyResources(this.tsbCheckUpdateCore, "tsbCheckUpdateCore"); this.tsbCheckUpdateCore.Click += new System.EventHandler(this.tsbCheckUpdateCore_Click); // // tsbCheckUpdateXrayCore // - resources.ApplyResources(this.tsbCheckUpdateXrayCore, "tsbCheckUpdateXrayCore"); this.tsbCheckUpdateXrayCore.Name = "tsbCheckUpdateXrayCore"; + resources.ApplyResources(this.tsbCheckUpdateXrayCore, "tsbCheckUpdateXrayCore"); this.tsbCheckUpdateXrayCore.Click += new System.EventHandler(this.tsbCheckUpdateXrayCore_Click); // // toolStripSeparator10 // - resources.ApplyResources(this.toolStripSeparator10, "toolStripSeparator10"); this.toolStripSeparator10.Name = "toolStripSeparator10"; + resources.ApplyResources(this.toolStripSeparator10, "toolStripSeparator10"); // // tsbHelp // - resources.ApplyResources(this.tsbHelp, "tsbHelp"); this.tsbHelp.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.tsbAbout, this.tsbV2rayWebsite, @@ -721,49 +727,50 @@ this.tsbLanguageDef, this.tsbLanguageZhHans}); this.tsbHelp.Image = global::v2rayN.Properties.Resources.help; + resources.ApplyResources(this.tsbHelp, "tsbHelp"); this.tsbHelp.Name = "tsbHelp"; // // tsbAbout // - resources.ApplyResources(this.tsbAbout, "tsbAbout"); this.tsbAbout.Name = "tsbAbout"; + resources.ApplyResources(this.tsbAbout, "tsbAbout"); this.tsbAbout.Click += new System.EventHandler(this.tsbAbout_Click); // // tsbV2rayWebsite // - resources.ApplyResources(this.tsbV2rayWebsite, "tsbV2rayWebsite"); this.tsbV2rayWebsite.Name = "tsbV2rayWebsite"; + resources.ApplyResources(this.tsbV2rayWebsite, "tsbV2rayWebsite"); this.tsbV2rayWebsite.Click += new System.EventHandler(this.tsbV2rayWebsite_Click); // // toolStripSeparator12 // - resources.ApplyResources(this.toolStripSeparator12, "toolStripSeparator12"); this.toolStripSeparator12.Name = "toolStripSeparator12"; + resources.ApplyResources(this.toolStripSeparator12, "toolStripSeparator12"); // // tsbLanguageDef // - resources.ApplyResources(this.tsbLanguageDef, "tsbLanguageDef"); this.tsbLanguageDef.Name = "tsbLanguageDef"; + resources.ApplyResources(this.tsbLanguageDef, "tsbLanguageDef"); this.tsbLanguageDef.Click += new System.EventHandler(this.tsbLanguageDef_Click); // // tsbLanguageZhHans // - resources.ApplyResources(this.tsbLanguageZhHans, "tsbLanguageZhHans"); this.tsbLanguageZhHans.Name = "tsbLanguageZhHans"; + resources.ApplyResources(this.tsbLanguageZhHans, "tsbLanguageZhHans"); this.tsbLanguageZhHans.Click += new System.EventHandler(this.tsbLanguageZhHans_Click); // // tsbPromotion // - resources.ApplyResources(this.tsbPromotion, "tsbPromotion"); this.tsbPromotion.ForeColor = System.Drawing.Color.Black; this.tsbPromotion.Image = global::v2rayN.Properties.Resources.promotion; + resources.ApplyResources(this.tsbPromotion, "tsbPromotion"); this.tsbPromotion.Name = "tsbPromotion"; this.tsbPromotion.Click += new System.EventHandler(this.tsbPromotion_Click); // // toolStripSeparator11 // - resources.ApplyResources(this.toolStripSeparator11, "toolStripSeparator11"); this.toolStripSeparator11.Name = "toolStripSeparator11"; + resources.ApplyResources(this.toolStripSeparator11, "toolStripSeparator11"); // // tsbClose // @@ -896,6 +903,7 @@ private System.Windows.Forms.ToolStripMenuItem tsbOptionSetting; private System.Windows.Forms.ToolStripMenuItem tsbRoutingSetting; private System.Windows.Forms.ToolStripMenuItem tsbCheckUpdateXrayCore; + private System.Windows.Forms.ToolStripMenuItem menuClearServerStatistics; } } diff --git a/v2rayN/v2rayN/Forms/MainForm.cs b/v2rayN/v2rayN/Forms/MainForm.cs index 3eb68a7b..3068b337 100644 --- a/v2rayN/v2rayN/Forms/MainForm.cs +++ b/v2rayN/v2rayN/Forms/MainForm.cs @@ -660,6 +660,15 @@ namespace v2rayN.Forms string result = httpProxyTest() + "ms"; AppendText(false, string.Format(UIRes.I18N("TestMeOutput"), result)); } + + private void menuClearStatistic_Click(object sender, EventArgs e) + { + if (statistics != null && statistics.Enable) + { + statistics.ClearStatistic = true; + } + } + private int httpProxyTest() { SpeedtestHandler statistics = new SpeedtestHandler(ref config, ref v2rayHandler, lvSelecteds, "", UpdateSpeedtestHandler); @@ -1500,6 +1509,5 @@ namespace v2rayN.Forms #endregion - } } diff --git a/v2rayN/v2rayN/Forms/MainForm.resx b/v2rayN/v2rayN/Forms/MainForm.resx index b8501535..55fb406d 100644 --- a/v2rayN/v2rayN/Forms/MainForm.resx +++ b/v2rayN/v2rayN/Forms/MainForm.resx @@ -117,694 +117,214 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - Remove duplicate servers + + + Fill - - 355, 22 - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 355, 22 - - - 97, 53 - - - 355, 22 - - - Add [VLESS] server - - - 2 - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Restart service - - - menuCopyServer - - - 264, 22 - - - groupBox2 - - - menuMoveUp - - - Add [Socks] server - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - ImageAboveText - - - System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 语言-[中文简体] - - - NoControl - - - Settings - - - tsbHelp - - - - 0 - - - False - - - toolStripSeparator6 - - - 355, 22 - - - 99, 53 - - - Update subscriptions - - - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 187, 22 - - - tsbSetting - - - toolSslBlank2 - - - 355, 22 - - - 355, 22 - - - tsbCheckUpdateN - - - Do not change system proxy - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuExport2SubContent - - - toolStripSeparator7 - - - Update v2flyCore - - - Magenta - - - menuKeepNothing - - - 355, 22 - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Fill - - - 52, 17 - - - Share - - - Subscriptions - - - 952, 351 - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 355, 22 - - - Export selected server for client configuration - - - tsbRoutingSetting - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Export selected server for server configuration - - - 0, 17 - - - 952, 56 - - - System.Windows.Forms.SplitContainer, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 0 - - - Test servers real delay (Ctrl+R) - - - menuTcpingServer - - - ImageAboveText - - - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 356, 600 - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - v2rayN - - - 355, 22 - - - toolStripSeparator1 - - - 3 - - - System.Windows.Forms.ToolStripDropDownButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 203, 22 - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 187, 22 - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuPingServer - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tsbLanguageDef - - - - iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsIAAA7CARUoSoAAAAE3SURBVFhH7ZaBDQIhDEVvBEdwBDfQDXQER3AD3cARdAPd - QDfSDbQvuSb1AicFjJrwkxcN0FIolOuamv5VE2E+gLaPayWchEcE+hhTXVPhIoQmDcFYbKpoJtwEdX4X - jgIrXfTwnzb6dBw22BaJVdjJmWQs1/SdBRtE0U5cBXW2oSFRO0HtSEeW2FZ1wsq9sjuRdTDVAXnNuWLY - 6JnAl0sYa/Q5q1dhq35ci+Bkq2HJvbZpxGeybAAuw4Fq+cnW1wPITgHFYxvBUw+qHEIL1yq1vDKhVlH3 - NQwF4JkcFRWiUAB7IVW2FFPO3YqlgPd+LJf02e8Fdi3rMdIAcLDuf9UpeT0IS0G/hvhPm305vSl7EQFY - B6zCvozvYGzRM8zEoeg5TPZwDaGvpHQni1yzSxbXPW9q+hF13ROHuJnQcjbhtQAAAABJRU5ErkJggg== - - - - Servers - - - 3 - - - 3, 17 - - - 355, 22 - - - System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Fill - - - 6, 56 - - - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 220, 17 - - - menuAddCustomServer - - - menuMoveDown - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Import bulk URL from clipboard - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Move to bottom (B) - - - System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 6, 12 - - - 48, 53 - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 355, 22 - - - System.ComponentModel.BackgroundWorker, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - panel1 - - - 206, 17 - - - 0 - - - 686, 331 - - - toolStripSeparator4 - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuKeepClear - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Bottom - - - Export share URLs to clipboard (Ctrl+C) - - - scMain.Panel2 - - - System.Windows.Forms.ToolStripDropDownButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 39, 17 - - - menuAddServers2 - - - Fill - - - tsbServer + + 3, 21 + + + 327, 17 + + + 423, 24 Add [VMess] server - - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 423, 24 - - System.Windows.Forms.SplitterPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Add [VLESS] server - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 423, 24 - - v2rayN.Forms.BaseForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + + Add [Shadowsocks] server - - tsbAbout + + 423, 24 - - 206, 17 + + Add [Socks] server - - toolStripSeparator5 - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - True - - - 352, 6 - - - tsbPromotion - - - 256, 331 - - - 4, 4, 4, 4 - - - Test servers with tcping (Ctrl+O) - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 352, 6 - - - groupBox1 - - - 206, 17 - - - 2 - - - 125, 22 - - - scMain.Panel2 - - - 161, 22 - - - 355, 22 - - - 187, 22 - - - 6, 56 - - - Test servers download speed (Ctrl+T) - - - ssMain - - - 686 - - - tsbTestMe - - - 265, 142 - - - 262, 22 - - - $this - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - scMain - - - Check for updates - - - tsbCheckUpdateXrayCore - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 0, 17 - - - toolSslServerSpeed - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 4 - - - 125, 22 - - - scMain - - - 203, 22 - - - HTTP: - - - Remove selected servers (Delete) - - - 0 - - - Help - - - menuSelectAll - - - Move to top (T) - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Scan QR code on the screen (Ctrl+S) - - - ImageAboveText - - - 1 - - - Promotion - - - menuAddServers - - - 355, 22 - - - menuAddVmessServer - - - tsbLanguageZhHans - - - menuRemoveDuplicateServer - - - BottomCenter - - - menuExport2ShareUrl - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tsMain - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - SOCKS5: - - - v2rayN (this software) - - - Magenta - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 0, 66 - - - 5 - - - tsbV2rayWebsite - - - Server - - - v2rayN.Base.ListViewFlickerFree, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null - - - menuAddShadowsocksServer - - - txtMsgBox - - - toolSslBlank4 - - - menuAddTrojanServer - - - 261, 6 - - - v2rayN - - - Language-[English] - - - tsbSubSetting - - - 264, 22 - - - 0 - - - Fill - - - toolSslBlank3 - - - 128, 53 + + 423, 24 Add [Trojan] server - - 161, 22 + + 423, 24 - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Add a custom configuration server - + + 423, 24 + + + Import bulk URL from clipboard (Ctrl+V) + + + 423, 24 + + + Scan QR code on the screen (Ctrl+S) + + + 420, 6 + + + 423, 24 + + + Remove selected servers (Delete) + + + 423, 24 + + + Remove duplicate servers + + + 423, 24 + + + Clone selected server + + + 423, 24 + + + Set as active server (Enter) + + + 420, 6 + + + 423, 24 + + + Move to top (T) + + + 423, 24 + + + Up (U) + + + 423, 24 + + + Down (D) + + + 423, 24 + + + Move to bottom (B) + + + 423, 24 + + + Select All (Ctrl+A) + + + 420, 6 + + + 423, 24 + + + Test servers ping (Ctrl+P) + + + 423, 24 + + + Test servers with tcping (Ctrl+O) + + + 423, 24 + + + Test servers real delay (Ctrl+R) + + + 423, 24 + + + Test servers download speed (Ctrl+T) + + + 423, 24 + + + Test current service status + + + 423, 24 + + + Clear all service statistics + + + 420, 6 + + + 423, 24 + + + Export selected server for client configuration + + + 423, 24 + + + Export selected server for server configuration + + + 423, 24 + + + Export share URLs to clipboard (Ctrl+C) + + + 423, 24 + + + Export subscription (base64) share to clipboard + + + Magenta + + + 77, 56 + + + Servers + + ImageAboveText + + 424, 708 + + + cmsLv + System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 0, 417 - - - 352, 6 - - - System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - V2Ray Website - - - No - - - 1 - - - System.Windows.Forms.SplitterPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - OptionSetting - - - menuMoveTop - - - tsbCheckUpdateCore + + Fill @@ -823,620 +343,1115 @@ ZW0uRHJhd2luZy5HcmFwaGljc1VuaXQBAAAAB3ZhbHVlX18ACAMAAAADAAAACw== - - menuScanScreen + + 0, 0 - - ImageAboveText + + 1003, 472 - - cmsLv - - - toolStripSeparator12 - - - 6, 56 - - - toolSslBlank1 - - - scMain.Panel1 - - - tsbReload - - - tsbSubUpdate - - - 微软雅黑, 8pt - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - SPEED Disabled - - - 67, 53 - - - menuSysAgentMode - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - ImageAboveText - - - Export subscription (base64) share to clipboard - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuScanScreen2 - - - cmsMain - - - 264, 22 - - - menuServers - - - menuUpdateSubscriptions - - - $this - - - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tsbClose - - - RoutingSetting - - - System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tsbQRCodeSwitch - - - 3, 151 - - - True - - - 355, 22 - - - 6, 56 - - - 952, 10 - - - Updates - - - 264, 22 - - + + 0 - - toolStripSeparator8 - - - 89, 53 - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - BottomCenter - - - Test servers ping (Ctrl+P) - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 355, 22 - - - 264, 22 - - - System.Windows.Forms.ToolStripDropDownButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Windows.Forms.ToolStripDropDownButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Top - - - menuSetDefaultServer - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Settings - - - 45, 53 - - - System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Http proxy - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 355, 22 - - - groupBox1 - - - MainForm - - - toolStripSeparator9 - - - menuExit - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Servers list - - - System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - lvServers - - menuRealPingServer + + v2rayN.Base.ListViewFlickerFree, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null - - Magenta + + scMain.Panel1 - - System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuGlobal - - - 100 - - - 2 - - - toolStripSeparator11 - - - Magenta - - - 355, 22 - - - v2rayN Project - - + 0 - - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Select All (Ctrl+A) - - - Informations - - - 3 - - - System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuSpeedServer - - - 355, 22 - - - menuRemoveServer - - - Test current service status - - - 355, 22 - - - 946, 134 - - - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Windows.Forms.NotifyIcon, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - scMain - - - Down (D) - - - 352, 6 - - - Magenta - - - 262, 22 - - - 355, 22 - - - tsbSub - - - Magenta - - - ImageAboveText - - - Clone selected server - - - 0, 0 - - - 355, 22 - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - tsbCheckUpdate - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 微软雅黑, 8pt - - - Vertical - - - 262, 22 - - - 355, 22 - - - v2rayN.Forms.QRCodeControl, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null - - - 微软雅黑, 8pt - - - System.Windows.Forms.ToolStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 0, 0 - - - qrCodeControl - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Clear system proxy - - - 355, 22 - - - 0 - - - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 微软雅黑, 8pt - - - groupBox2 - - - ImageAboveText - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 203, 22 - - - 184, 6 - - - 0, 0 - - - Up (U) - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - notifyMain - - - Set system proxy (global mode) - - - System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - MiddleRight - - - tsbOptionSetting - - - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuAddSocksServer - scMain.Panel1 - - 微软雅黑, 8pt + + System.Windows.Forms.SplitterPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 64, 53 + + scMain - - Magenta + + 0 - - 946, 22 + + Fill - - 355, 22 + + 0, 0 - - Set as active server (Enter) + + 4, 4, 4, 4 - - menuAddVlessServer + + 256, 472 + + + 2 + + + qrCodeControl + + + v2rayN.Forms.QRCodeControl, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + + + scMain.Panel2 + + + 0 + + + scMain.Panel2 + + + System.Windows.Forms.SplitterPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + scMain + + + 1 + + + 100 - 946, 331 + 1263, 472 - - 6, 56 + + 1003 - - Add [Shadowsocks] server + + 0 - - 微软雅黑, 8pt + + scMain - - 952, 593 + + System.Windows.Forms.SplitContainer, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 0 + + + 17, 17 + + + 137, 17 + + + NoControl + + + 324, 26 + + + Clear system proxy + + + 324, 26 + + + Set system proxy (global mode) + + + 324, 26 + + + Do not change system proxy + + + 309, 24 + + + Http proxy + + + 309, 24 + + + Server + + + 309, 24 + + + Import bulk URL from clipboard + + + 309, 24 Scan QR code on the screen - - toolSslSocksPort + + 309, 24 - - toolStripSeparator10 + + Update subscriptions - - toolSslHttpPortLab + + 306, 6 - - menuMoveBottom + + 309, 24 - - 1 + + Exit - - Magenta + + 310, 154 - - menuExport2ClientConfig + + cmsMain - - 187, 22 + + System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - menuExport2ServerConfig + + v2rayN + + + True + + + 498, 17 + + + Fill + + + 0, 69 + + + 1269, 496 + + + 0 + + + Servers list + + + groupBox1 + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 2 + + + Fill + + + 3, 21 0 + + True + + + Vertical + + + 1263, 126 + + + 3 + + + txtMsgBox + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 0 + + + 228, 18 + + + 微软雅黑, 8pt + + + 65, 20 + + + SOCKS5: + + + 0, 20 + + + 微软雅黑, 8pt + + + 305, 20 + + + 微软雅黑, 8pt + + + 48, 20 + + + HTTP: + + + 0, 20 + + + 微软雅黑, 8pt + + + 305, 20 + + + 微软雅黑, 8pt + + + 305, 20 + + + False + + + 微软雅黑, 8pt + + + No + + + 220, 20 + + + SPEED Disabled + + + MiddleRight + + + 0, 20 + + + 3, 147 + + + 1263, 26 + + + 0 + + + statusStrip1 + + + ssMain + + + System.Windows.Forms.StatusStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 1 + + + Bottom + + + 0, 565 + + + 1269, 176 + + + 3 + + + Informations + + + groupBox2 + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 3 + + + Top + + + 0, 59 + + + 1269, 10 + + + 2 + + + panel1 + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 4 + + + 409, 17 + + + 6, 59 + + + 153, 26 + + + Settings + + + 153, 26 + + + Updates + + + Magenta + + + 122, 56 + + + Subscriptions + + + ImageAboveText + + + Magenta + + + 54, 56 + + + Share + + + BottomCenter + + + ImageAboveText + + + 6, 59 + + + 203, 26 + + + OptionSetting + + + 203, 26 + + + RoutingSetting + + + Magenta + + + 83, 56 + + + Settings + + + ImageAboveText + + + 6, 59 + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAAEnQAABJ0Ad5mH3gAAAE3SURBVFhH7ZaBDQIhDEVvBEdwBDfQDXQER3AD3cARdAPd + QDfSDbQvuSb1AicFjJrwkxcN0FIolOuamv5VE2E+gLaPayWchEcE+hhTXVPhIoQmDcFYbKpoJtwEdX4X + jgIrXfTwnzb6dBw22BaJVdjJmWQs1/SdBRtE0U5cBXW2oSFRO0HtSEeW2FZ1wsq9sjuRdTDVAXnNuWLY + 6JnAl0sYa/Q5q1dhq35ci+Bkq2HJvbZpxGeybAAuw4Fq+cnW1wPITgHFYxvBUw+qHEIL1yq1vDKhVlH3 + NQwF4JkcFRWiUAB7IVW2FFPO3YqlgPd+LJf02e8Fdi3rMdIAcLDuf9UpeT0IS0G/hvhPm305vSl7EQFY + B6zCvozvYGzRM8zEoeg5TPZwDaGvpHQni1yzSxbXPW9q+hF13ROHuJnQcjbhtQAAAABJRU5ErkJggg== + + + + BottomCenter + + + Magenta + + + 120, 56 + + + Restart service + + + ImageAboveText + + + 6, 59 + + + 250, 26 + + + v2rayN (this software) + + + 250, 26 + + + Update v2flyCore + + + 250, 26 + + + Update XrayCore + + + Magenta + + + 155, 56 + + + Check for updates + + + ImageAboveText + + + 6, 59 + + + 230, 26 + + + v2rayN Project + + + 230, 26 + + + V2Ray Website + + + 227, 6 + + + 230, 26 + + + Language-[English] + + + 230, 26 + + + 语言-[中文简体] + + + Magenta + + + 58, 56 + + + Help + + + ImageAboveText + + + Magenta + + + 107, 56 + + + Promotion + ImageAboveText - 6, 56 - - - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Magenta - - - 52, 53 - - - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Exit - - - bgwScan - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 0, 56 - - - Close - - - 264, 22 - - - 0, 17 - - - 0 - - - Import bulk URL from clipboard (Ctrl+V) - - - $this - - - Update XrayCore - - - toolStripSeparator2 - - - toolSslSocksPortLab - - - Add a custom configuration server - - - toolSslHttpPort - - - System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 952, 176 - - - statusStrip1 - - - System.Windows.Forms.ToolStripDropDownButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Fill - - - 3, 17 - - - toolStripSeparator3 + 6, 59 iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsIAAA7CARUoSoAAAAAySURBVFhH7c6xDQAgCEVBRnVTHU2ZABuMxV3yOvJDAAA/ + YQUAAAAJcEhZcwAAEnQAABJ0Ad5mH3gAAAAySURBVFhH7c6xDQAgCEVBRnVTHU2ZABuMxV3yOvJDAAA/ GqfZVG6X8mg1dfUAAPBQxAZd0SJruVXHWwAAAABJRU5ErkJggg== - - 355, 22 + + Magenta - - 355, 22 + + 61, 56 - - System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Close - - System.Windows.Forms.StatusStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + ImageAboveText + + + 0, 0 + + + 1269, 59 + + + 1 + + + tsMain + + + System.Windows.Forms.ToolStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 5 - - 228, 18 - True 65 - - 137, 17 - - - 498, 17 - - - 17, 17 - - - 409, 17 - - - 327, 17 - + + 8, 15 + + + 1269, 741 + + + 5, 5, 5, 5 + + + v2rayN + + + menuAddVmessServer + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuAddVlessServer + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuAddShadowsocksServer + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuAddSocksServer + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuAddTrojanServer + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuAddCustomServer + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuAddServers + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuScanScreen + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolStripSeparator1 + + + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuRemoveServer + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuRemoveDuplicateServer + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuCopyServer + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuSetDefaultServer + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolStripSeparator3 + + + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuMoveTop + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuMoveUp + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuMoveDown + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuMoveBottom + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuSelectAll + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolStripSeparator9 + + + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuPingServer + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuTcpingServer + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuRealPingServer + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuSpeedServer + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tsbTestMe + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuClearServerStatistics + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolStripSeparator6 + + + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuExport2ClientConfig + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuExport2ServerConfig + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuExport2ShareUrl + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuExport2SubContent + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tsbServer + + + System.Windows.Forms.ToolStripDropDownButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + notifyMain + + + System.Windows.Forms.NotifyIcon, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuSysAgentMode + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuKeepClear + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuGlobal + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuKeepNothing + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuServers + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuAddServers2 + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuScanScreen2 + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuUpdateSubscriptions + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolStripSeparator2 + + + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuExit + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + bgwScan + + + System.ComponentModel.BackgroundWorker, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolSslSocksPortLab + + + System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolSslSocksPort + + + System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolSslBlank1 + + + System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolSslHttpPortLab + + + System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolSslHttpPort + + + System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolSslBlank2 + + + System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolSslBlank3 + + + System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolSslServerSpeed + + + System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolSslBlank4 + + + System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolStripSeparator4 + + + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tsbSub + + + System.Windows.Forms.ToolStripDropDownButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tsbSubSetting + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tsbSubUpdate + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tsbQRCodeSwitch + + + System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolStripSeparator8 + + + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tsbSetting + + + System.Windows.Forms.ToolStripDropDownButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tsbOptionSetting + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tsbRoutingSetting + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolStripSeparator5 + + + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tsbReload + + + System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolStripSeparator7 + + + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tsbCheckUpdate + + + System.Windows.Forms.ToolStripDropDownButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tsbCheckUpdateN + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tsbCheckUpdateCore + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tsbCheckUpdateXrayCore + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolStripSeparator10 + + + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tsbHelp + + + System.Windows.Forms.ToolStripDropDownButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tsbAbout + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tsbV2rayWebsite + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolStripSeparator12 + + + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tsbLanguageDef + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tsbLanguageZhHans + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tsbPromotion + + + System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolStripSeparator11 + + + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tsbClose + + + System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + MainForm + + + v2rayN.Forms.BaseForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/v2rayN/v2rayN/Forms/MainForm.zh-Hans.resx b/v2rayN/v2rayN/Forms/MainForm.zh-Hans.resx index 9af1841a..f75d3073 100644 --- a/v2rayN/v2rayN/Forms/MainForm.zh-Hans.resx +++ b/v2rayN/v2rayN/Forms/MainForm.zh-Hans.resx @@ -259,6 +259,12 @@ 测试当前服务状态 + + 300, 22 + + + 清除所有服务统计数据 + 297, 6 diff --git a/v2rayN/v2rayN/Handler/StatisticsHandler.cs b/v2rayN/v2rayN/Handler/StatisticsHandler.cs index ab4d4a6a..6fb71b94 100644 --- a/v2rayN/v2rayN/Handler/StatisticsHandler.cs +++ b/v2rayN/v2rayN/Handler/StatisticsHandler.cs @@ -30,6 +30,11 @@ namespace v2rayN.Handler get; set; } + public bool ClearStatistic + { + get; set; + } + public List Statistic { get @@ -60,6 +65,7 @@ namespace v2rayN.Handler config_ = config; Enable = config.enableStatistics; UpdateUI = false; + ClearStatistic = false; updateFunc_ = update; exitFlag_ = false; @@ -126,6 +132,21 @@ namespace v2rayN.Handler serverStatItem.totalUp += up; serverStatItem.totalDown += down; + if (ClearStatistic) + { + foreach (ServerStatItem item in serverStatistics_.server) + { + item.todayUp = 0; + item.todayDown = 0; + item.totalUp = 0; + item.totalDown = 0; + updateFunc_(up, down, new List { item }); + } + + ClearStatistic = false; + + } + if (UpdateUI) { updateFunc_(up, down, new List { serverStatItem }); From 63411c5978204583b5656e5371d47de0f8a49e5d Mon Sep 17 00:00:00 2001 From: Li Date: Fri, 15 Jan 2021 13:38:06 +0800 Subject: [PATCH 45/54] Replace 'clear all server statistic' function from Flag to Method MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 将清除统计数据提取成方法 --- v2rayN/v2rayN/Forms/MainForm.cs | 4 +-- v2rayN/v2rayN/Handler/StatisticsHandler.cs | 39 +++++++++++----------- 2 files changed, 21 insertions(+), 22 deletions(-) diff --git a/v2rayN/v2rayN/Forms/MainForm.cs b/v2rayN/v2rayN/Forms/MainForm.cs index 3068b337..54dfd491 100644 --- a/v2rayN/v2rayN/Forms/MainForm.cs +++ b/v2rayN/v2rayN/Forms/MainForm.cs @@ -663,9 +663,9 @@ namespace v2rayN.Forms private void menuClearStatistic_Click(object sender, EventArgs e) { - if (statistics != null && statistics.Enable) + if (statistics != null) { - statistics.ClearStatistic = true; + statistics.ClearAllServerStatistics(); } } diff --git a/v2rayN/v2rayN/Handler/StatisticsHandler.cs b/v2rayN/v2rayN/Handler/StatisticsHandler.cs index 6fb71b94..de013922 100644 --- a/v2rayN/v2rayN/Handler/StatisticsHandler.cs +++ b/v2rayN/v2rayN/Handler/StatisticsHandler.cs @@ -30,10 +30,6 @@ namespace v2rayN.Handler get; set; } - public bool ClearStatistic - { - get; set; - } public List Statistic { @@ -65,7 +61,6 @@ namespace v2rayN.Handler config_ = config; Enable = config.enableStatistics; UpdateUI = false; - ClearStatistic = false; updateFunc_ = update; exitFlag_ = false; @@ -132,21 +127,6 @@ namespace v2rayN.Handler serverStatItem.totalUp += up; serverStatItem.totalDown += down; - if (ClearStatistic) - { - foreach (ServerStatItem item in serverStatistics_.server) - { - item.todayUp = 0; - item.todayDown = 0; - item.totalUp = 0; - item.totalDown = 0; - updateFunc_(up, down, new List { item }); - } - - ClearStatistic = false; - - } - if (UpdateUI) { updateFunc_(up, down, new List { serverStatItem }); @@ -212,6 +192,25 @@ namespace v2rayN.Handler } } + public void ClearAllServerStatistics() + { + if (serverStatistics_ != null) + { + foreach (var item in serverStatistics_.server) + { + item.todayUp = 0; + item.todayDown = 0; + item.totalUp = 0; + item.totalDown = 0; + // update ui display to zero + updateFunc_(0, 0, new List { item }); + } + + // update statistic json file + SaveToFile(); + } + } + private ServerStatItem GetServerStatItem(string itemId) { long ticks = DateTime.Now.Date.Ticks; From 597531b92bedd4ef4e5685e9fdc801ca3641f39a Mon Sep 17 00:00:00 2001 From: 2dust <31833384+2dust@users.noreply.github.com> Date: Wed, 20 Jan 2021 15:33:03 +0800 Subject: [PATCH 46/54] up4.6 --- .../v2rayN/Forms/AddServer3Form.Designer.cs | 18 +- v2rayN/v2rayN/Forms/AddServer3Form.resx | 760 ++++++++------- v2rayN/v2rayN/Forms/MainForm.resx | 200 ++-- .../Forms/RoutingSettingDetailsForm.resx | 164 +++- .../RoutingSettingDetailsForm.zh-Hans.resx | 2 +- .../Forms/RoutingSettingForm.Designer.cs | 58 +- v2rayN/v2rayN/Forms/RoutingSettingForm.cs | 20 +- v2rayN/v2rayN/Forms/RoutingSettingForm.resx | 890 +++++++++--------- .../Forms/RoutingSettingForm.zh-Hans.resx | 6 + .../Forms/RoutingSubSettingForm.Designer.cs | 106 +++ v2rayN/v2rayN/Forms/RoutingSubSettingForm.cs | 61 ++ .../v2rayN/Forms/RoutingSubSettingForm.resx | 300 ++++++ .../Forms/RoutingSubSettingForm.zh-Hans.resx | 133 +++ v2rayN/v2rayN/Global.cs | 5 +- v2rayN/v2rayN/Handler/ConfigHandler.cs | 34 + v2rayN/v2rayN/Handler/DownloadHandle.cs | 8 +- v2rayN/v2rayN/Handler/SpeedtestHandler.cs | 2 +- v2rayN/v2rayN/Handler/V2rayConfigHandler.cs | 9 +- v2rayN/v2rayN/Mode/Config.cs | 4 + v2rayN/v2rayN/Properties/AssemblyInfo.cs | 2 +- v2rayN/v2rayN/v2rayN.csproj | 14 + v2rayN/v2rayN/v2rayN.csproj.user | 2 +- 22 files changed, 1758 insertions(+), 1040 deletions(-) create mode 100644 v2rayN/v2rayN/Forms/RoutingSubSettingForm.Designer.cs create mode 100644 v2rayN/v2rayN/Forms/RoutingSubSettingForm.cs create mode 100644 v2rayN/v2rayN/Forms/RoutingSubSettingForm.resx create mode 100644 v2rayN/v2rayN/Forms/RoutingSubSettingForm.zh-Hans.resx diff --git a/v2rayN/v2rayN/Forms/AddServer3Form.Designer.cs b/v2rayN/v2rayN/Forms/AddServer3Form.Designer.cs index 06312421..27b7c91c 100644 --- a/v2rayN/v2rayN/Forms/AddServer3Form.Designer.cs +++ b/v2rayN/v2rayN/Forms/AddServer3Form.Designer.cs @@ -55,15 +55,14 @@ // // btnClose // - resources.ApplyResources(this.btnClose, "btnClose"); this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel; + resources.ApplyResources(this.btnClose, "btnClose"); this.btnClose.Name = "btnClose"; this.btnClose.UseVisualStyleBackColor = true; this.btnClose.Click += new System.EventHandler(this.btnClose_Click); // // groupBox1 // - resources.ApplyResources(this.groupBox1, "groupBox1"); this.groupBox1.Controls.Add(this.label13); this.groupBox1.Controls.Add(this.cmbSecurity); this.groupBox1.Controls.Add(this.txtRemarks); @@ -75,6 +74,7 @@ this.groupBox1.Controls.Add(this.label2); this.groupBox1.Controls.Add(this.txtAddress); this.groupBox1.Controls.Add(this.label1); + resources.ApplyResources(this.groupBox1, "groupBox1"); this.groupBox1.Name = "groupBox1"; this.groupBox1.TabStop = false; // @@ -85,7 +85,6 @@ // // cmbSecurity // - resources.ApplyResources(this.cmbSecurity, "cmbSecurity"); this.cmbSecurity.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.cmbSecurity.FormattingEnabled = true; this.cmbSecurity.Items.AddRange(new object[] { @@ -94,9 +93,8 @@ resources.GetString("cmbSecurity.Items2"), resources.GetString("cmbSecurity.Items3"), resources.GetString("cmbSecurity.Items4"), - resources.GetString("cmbSecurity.Items5"), - resources.GetString("cmbSecurity.Items6"), - resources.GetString("cmbSecurity.Items7")}); + resources.GetString("cmbSecurity.Items5")}); + resources.ApplyResources(this.cmbSecurity, "cmbSecurity"); this.cmbSecurity.Name = "cmbSecurity"; // // txtRemarks @@ -146,9 +144,9 @@ // // panel2 // - resources.ApplyResources(this.panel2, "panel2"); this.panel2.Controls.Add(this.btnClose); this.panel2.Controls.Add(this.btnOK); + resources.ApplyResources(this.panel2, "panel2"); this.panel2.Name = "panel2"; // // btnOK @@ -165,22 +163,22 @@ // // menuServer // - resources.ApplyResources(this.menuServer, "menuServer"); this.menuServer.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.MenuItem1}); + resources.ApplyResources(this.menuServer, "menuServer"); this.menuServer.Name = "menuServer"; // // MenuItem1 // - resources.ApplyResources(this.MenuItem1, "MenuItem1"); this.MenuItem1.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.menuItemImportClipboard}); this.MenuItem1.Name = "MenuItem1"; + resources.ApplyResources(this.MenuItem1, "MenuItem1"); // // menuItemImportClipboard // - resources.ApplyResources(this.menuItemImportClipboard, "menuItemImportClipboard"); this.menuItemImportClipboard.Name = "menuItemImportClipboard"; + resources.ApplyResources(this.menuItemImportClipboard, "menuItemImportClipboard"); this.menuItemImportClipboard.Click += new System.EventHandler(this.menuItemImportClipboard_Click); // // AddServer3Form diff --git a/v2rayN/v2rayN/Forms/AddServer3Form.resx b/v2rayN/v2rayN/Forms/AddServer3Form.resx index 272c310f..f17e4d82 100644 --- a/v2rayN/v2rayN/Forms/AddServer3Form.resx +++ b/v2rayN/v2rayN/Forms/AddServer3Form.resx @@ -118,489 +118,483 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 396, 17 + + + 75, 23 + + + + 4 + + + &Cancel + + + btnClose + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panel2 + + + 0 + + + True + + + 337, 158 + 113, 12 - - 53, 12 + + 22 - - label6 + + * Fill in manually - - groupBox1 + + label13 - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 547, 25 - - - - 11 - - - $this - groupBox1 - - 8 - - - - Bottom - - - Import configuration file - - - groupBox1 - - - panel1 - - - 3 - - - Password - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuItemImportClipboard - - - Fill - - - groupBox1 - - - 8 - - - 89, 12 - - - 127, 27 - - - System.Windows.Forms.MenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - 0 - aes-256-cfb + aes-256-gcm - - 6 + + aes-128-gcm - - 5 + + chacha20-poly1305 - - 303, 17 + + chacha20-ietf-poly1305 - - System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + none - - 4 - - - MenuItem1 - - - 0 - - - 359, 21 - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 396, 17 - - - 8 - - - 0, 0 - - - label1 - - - 547, 60 - - - 0, 25 - - - Encryption - - - groupBox1 - - - True - - - 22 - - - 162, 21 + + plain 127, 123 - - 127, 91 + + 194, 20 - + + 6 + + + cmbSecurity + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + groupBox1 - - panel2 + + 1 - - 5 + + 127, 154 - + + 194, 21 + + + 11 + + + txtRemarks + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + 2 + + True + + + 12, 155 + + + 95, 12 + + + 10 + Alias (remarks) - + + label6 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + groupBox1 - + + 3 + + True + + 12, 124 + + + 65, 12 + + + 8 + + + Encryption + label5 + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 4 + + + 127, 91 + + + * + + + 278, 21 + + + 5 + txtId System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 12, 31 - - + groupBox1 - - 1 - - - AddServer3Form - - - 194, 21 - - - groupBox1 - - - 127, 59 - - - 0 - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 71, 12 - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 12, 124 - - - 2 - - - 10 - - - txtPort - - - aes-128-cfb - - - 547, 10 - - - 0, 35 - 5 - - 235, 22 - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Edit or add a [Shadowsocks] server - - - &OK - - - chacha20 - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - btnClose - - - panel2 - - - 0 - - - 3 + + True 12, 93 - - 194, 20 + + 53, 12 - - 10 + + 4 - - chacha20-ietf + + Password - - True + + label3 - - panel2 - - + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + groupBox1 + + + 6 + + + 127, 59 + 194, 21 + + 3 + + + txtPort + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 7 + + + True + + + 12, 62 + + + 71, 12 + + + 2 + + + Server port + + + label2 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 8 + + + 127, 27 + + + 359, 21 + 1 - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + txtAddress - - 6 + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 1 + + groupBox1 - - 7 + + 9 - - label13 + + True - - aes-256-gcm + + 12, 31 - + + 89, 12 + + + 0 + + + Server address + + + label1 + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 groupBox1 - - v2rayN.Forms.BaseForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + + 10 - - label3 + + + Fill - - Server port - - - System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 0, 231 - - - 9 - - - aes-128-gcm - - - 4 - - - &Cancel - - - True - - - 6, 12 - - - True - - - Server address - - - menuServer - - - txtAddress - - - 127, 154 - - - chacha20-poly1305 - - - 95, 12 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - * Fill in manually - - - 7 - - - label2 - - - 12, 62 - - - 547, 291 - - - chacha20-ietf-poly1305 - - - btnOK - - - cmbSecurity - - - $this + + 0, 35 547, 196 - + 3 - - 75, 23 - - - 6 - - - 337, 158 - - - 65, 12 - - - 4 - - - 2 - - - 1 - - - * - - - 75, 23 - - - Import URL from clipboard - - - groupBox1 - Server - - txtRemarks + + groupBox1 - - 12, 155 + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - True + + $this - - 278, 21 + + 0 + + + 303, 17 + + + 75, 23 + + + 5 + + + &OK + + + btnOK + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panel2 + + + 1 + + + Bottom + + + 0, 231 + + + 547, 60 + + + 7 + + + panel2 + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 1 Top - + + 0, 25 + + + 547, 10 + + + 6 + + + panel1 + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 2 + + + 17, 17 + + + 235, 22 + + + Import URL from clipboard + + + 162, 21 + + + Import configuration file + + + 0, 0 + + + 547, 25 + + + 8 + + + menuServer + + + System.Windows.Forms.MenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + 3 True - - 17, 17 - + + 6, 12 + + + 547, 291 + + + Edit or add a [Shadowsocks] server + + + MenuItem1 + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuItemImportClipboard + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + AddServer3Form + + + v2rayN.Forms.BaseServerForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/v2rayN/v2rayN/Forms/MainForm.resx b/v2rayN/v2rayN/Forms/MainForm.resx index 55fb406d..08f3f3fc 100644 --- a/v2rayN/v2rayN/Forms/MainForm.resx +++ b/v2rayN/v2rayN/Forms/MainForm.resx @@ -123,181 +123,181 @@ - 3, 21 + 3, 17 327, 17 - 423, 24 + 355, 22 Add [VMess] server - 423, 24 + 355, 22 Add [VLESS] server - 423, 24 + 355, 22 Add [Shadowsocks] server - 423, 24 + 355, 22 Add [Socks] server - 423, 24 + 355, 22 Add [Trojan] server - 423, 24 + 355, 22 Add a custom configuration server - 423, 24 + 355, 22 Import bulk URL from clipboard (Ctrl+V) - 423, 24 + 355, 22 Scan QR code on the screen (Ctrl+S) - 420, 6 + 352, 6 - 423, 24 + 355, 22 Remove selected servers (Delete) - 423, 24 + 355, 22 Remove duplicate servers - 423, 24 + 355, 22 Clone selected server - 423, 24 + 355, 22 Set as active server (Enter) - 420, 6 + 352, 6 - 423, 24 + 355, 22 Move to top (T) - 423, 24 + 355, 22 Up (U) - 423, 24 + 355, 22 Down (D) - 423, 24 + 355, 22 Move to bottom (B) - 423, 24 + 355, 22 Select All (Ctrl+A) - 420, 6 + 352, 6 - 423, 24 + 355, 22 Test servers ping (Ctrl+P) - 423, 24 + 355, 22 Test servers with tcping (Ctrl+O) - 423, 24 + 355, 22 Test servers real delay (Ctrl+R) - 423, 24 + 355, 22 Test servers download speed (Ctrl+T) - 423, 24 + 355, 22 Test current service status - 423, 24 + 355, 22 Clear all service statistics - 420, 6 + 352, 6 - 423, 24 + 355, 22 Export selected server for client configuration - 423, 24 + 355, 22 Export selected server for server configuration - 423, 24 + 355, 22 Export share URLs to clipboard (Ctrl+C) - 423, 24 + 355, 22 Export subscription (base64) share to clipboard @@ -306,7 +306,7 @@ Magenta - 77, 56 + 64, 53 Servers @@ -315,7 +315,7 @@ ImageAboveText - 424, 708 + 356, 622 cmsLv @@ -347,7 +347,7 @@ 0, 0 - 1003, 472 + 686, 307 @@ -387,7 +387,7 @@ 4, 4, 4, 4 - 256, 472 + 256, 307 2 @@ -420,10 +420,10 @@ 100 - 1263, 472 + 946, 307 - 1003 + 686 0 @@ -450,64 +450,64 @@ NoControl - 324, 26 + 262, 22 Clear system proxy - 324, 26 + 262, 22 Set system proxy (global mode) - 324, 26 + 262, 22 Do not change system proxy - 309, 24 + 264, 22 Http proxy - 309, 24 + 264, 22 Server - 309, 24 + 264, 22 Import bulk URL from clipboard - 309, 24 + 264, 22 Scan QR code on the screen - 309, 24 + 264, 22 Update subscriptions - 306, 6 + 261, 6 - 309, 24 + 264, 22 Exit - 310, 154 + 265, 142 cmsMain @@ -528,10 +528,10 @@ Fill - 0, 69 + 0, 66 - 1269, 496 + 952, 327 0 @@ -555,7 +555,7 @@ Fill - 3, 21 + 3, 17 0 @@ -567,7 +567,7 @@ Vertical - 1263, 126 + 946, 154 3 @@ -591,43 +591,43 @@ 微软雅黑, 8pt - 65, 20 + 52, 21 SOCKS5: - 0, 20 + 0, 21 微软雅黑, 8pt - 305, 20 + 206, 21 微软雅黑, 8pt - 48, 20 + 39, 21 HTTP: - 0, 20 + 0, 21 微软雅黑, 8pt - 305, 20 + 206, 21 微软雅黑, 8pt - 305, 20 + 206, 21 False @@ -639,7 +639,7 @@ No - 220, 20 + 220, 21 SPEED Disabled @@ -648,13 +648,13 @@ MiddleRight - 0, 20 + 0, 21 - 3, 147 + 3, 171 - 1263, 26 + 946, 26 0 @@ -678,10 +678,10 @@ Bottom - 0, 565 + 0, 393 - 1269, 176 + 952, 200 3 @@ -705,10 +705,10 @@ Top - 0, 59 + 0, 56 - 1269, 10 + 952, 10 2 @@ -729,16 +729,16 @@ 409, 17 - 6, 59 + 6, 56 - 153, 26 + 125, 22 Settings - 153, 26 + 125, 22 Updates @@ -747,7 +747,7 @@ Magenta - 122, 56 + 99, 53 Subscriptions @@ -759,7 +759,7 @@ Magenta - 54, 56 + 45, 53 Share @@ -771,16 +771,16 @@ ImageAboveText - 6, 59 + 6, 56 - 203, 26 + 161, 22 OptionSetting - 203, 26 + 161, 22 RoutingSetting @@ -789,7 +789,7 @@ Magenta - 83, 56 + 67, 53 Settings @@ -798,12 +798,12 @@ ImageAboveText - 6, 59 + 6, 56 iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAAEnQAABJ0Ad5mH3gAAAE3SURBVFhH7ZaBDQIhDEVvBEdwBDfQDXQER3AD3cARdAPd + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAE3SURBVFhH7ZaBDQIhDEVvBEdwBDfQDXQER3AD3cARdAPd QDfSDbQvuSb1AicFjJrwkxcN0FIolOuamv5VE2E+gLaPayWchEcE+hhTXVPhIoQmDcFYbKpoJtwEdX4X jgIrXfTwnzb6dBw22BaJVdjJmWQs1/SdBRtE0U5cBXW2oSFRO0HtSEeW2FZ1wsq9sjuRdTDVAXnNuWLY 6JnAl0sYa/Q5q1dhq35ci+Bkq2HJvbZpxGeybAAuw4Fq+cnW1wPITgHFYxvBUw+qHEIL1yq1vDKhVlH3 @@ -818,7 +818,7 @@ Magenta - 120, 56 + 97, 53 Restart service @@ -827,22 +827,22 @@ ImageAboveText - 6, 59 + 6, 56 - 250, 26 + 203, 22 v2rayN (this software) - 250, 26 + 203, 22 Update v2flyCore - 250, 26 + 203, 22 Update XrayCore @@ -851,7 +851,7 @@ Magenta - 155, 56 + 128, 53 Check for updates @@ -860,31 +860,31 @@ ImageAboveText - 6, 59 + 6, 56 - 230, 26 + 187, 22 v2rayN Project - 230, 26 + 187, 22 V2Ray Website - 227, 6 + 184, 6 - 230, 26 + 187, 22 Language-[English] - 230, 26 + 187, 22 语言-[中文简体] @@ -893,7 +893,7 @@ Magenta - 58, 56 + 48, 53 Help @@ -905,7 +905,7 @@ Magenta - 107, 56 + 89, 53 Promotion @@ -914,12 +914,12 @@ ImageAboveText - 6, 59 + 6, 56 iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAAEnQAABJ0Ad5mH3gAAAAySURBVFhH7c6xDQAgCEVBRnVTHU2ZABuMxV3yOvJDAAA/ + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAySURBVFhH7c6xDQAgCEVBRnVTHU2ZABuMxV3yOvJDAAA/ GqfZVG6X8mg1dfUAAPBQxAZd0SJruVXHWwAAAABJRU5ErkJggg== @@ -927,7 +927,7 @@ Magenta - 61, 56 + 52, 53 Close @@ -939,7 +939,7 @@ 0, 0 - 1269, 59 + 952, 56 1 @@ -963,13 +963,13 @@ 65 - 8, 15 + 6, 12 - 1269, 741 + 952, 593 - 5, 5, 5, 5 + 4, 4, 4, 4 v2rayN diff --git a/v2rayN/v2rayN/Forms/RoutingSettingDetailsForm.resx b/v2rayN/v2rayN/Forms/RoutingSettingDetailsForm.resx index 855817b0..d9472064 100644 --- a/v2rayN/v2rayN/Forms/RoutingSettingDetailsForm.resx +++ b/v2rayN/v2rayN/Forms/RoutingSettingDetailsForm.resx @@ -271,7 +271,7 @@ 33 - *Set the rules, separated by commas (,); support Domain (pure string / regular / subdomain) and IP + *Set the rules, separated by commas (,); The comma in the regular is replaced by <COMMA> labRoutingTips @@ -420,6 +420,54 @@ 2 + + btnClose + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panel4 + + + 0 + + + btnOK + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panel4 + + + 1 + + + Bottom + + + 0, 516 + + + 742, 60 + + + 10 + + + panel4 + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 1 + NoControl @@ -474,44 +522,53 @@ 1 - - Bottom + + groupBox2 - - 0, 516 + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 742, 60 + + panel2 - - 10 + + 0 - - panel4 + + groupBox1 - - System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - $this + + panel2 - + 1 - + Fill - - 3, 17 + + 0, 121 - - True + + 742, 395 - - 344, 375 + + 11 - - 25 + + panel2 + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 0 txtIP @@ -552,20 +609,32 @@ 0 - + Fill - + 3, 17 - + True - - 386, 375 + + 344, 375 - - 24 + + 25 + + + txtIP + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 0 txtDomain @@ -606,28 +675,31 @@ 1 - + Fill - - 0, 121 + + 3, 17 - - 742, 395 + + True - - 11 + + 386, 375 - - panel2 + + 24 - - System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + txtDomain - - $this + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + + groupBox1 + + 0 diff --git a/v2rayN/v2rayN/Forms/RoutingSettingDetailsForm.zh-Hans.resx b/v2rayN/v2rayN/Forms/RoutingSettingDetailsForm.zh-Hans.resx index c080de59..bac9081a 100644 --- a/v2rayN/v2rayN/Forms/RoutingSettingDetailsForm.zh-Hans.resx +++ b/v2rayN/v2rayN/Forms/RoutingSettingDetailsForm.zh-Hans.resx @@ -118,7 +118,7 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - *设置的路由规则,用逗号(,)分隔 + *设置的路由规则,用逗号(,)分隔;正则中的逗号用<COMMA>替代 diff --git a/v2rayN/v2rayN/Forms/RoutingSettingForm.Designer.cs b/v2rayN/v2rayN/Forms/RoutingSettingForm.Designer.cs index 8261890c..0edd1e88 100644 --- a/v2rayN/v2rayN/Forms/RoutingSettingForm.Designer.cs +++ b/v2rayN/v2rayN/Forms/RoutingSettingForm.Designer.cs @@ -55,6 +55,7 @@ this.menuImportRulesFromPreset = new System.Windows.Forms.ToolStripMenuItem(); this.menuImportRulesFromFile = new System.Windows.Forms.ToolStripMenuItem(); this.menuImportRulesFromClipboard = new System.Windows.Forms.ToolStripMenuItem(); + this.menuImportRulesFromUrl = new System.Windows.Forms.ToolStripMenuItem(); this.panel2.SuspendLayout(); this.panel1.SuspendLayout(); this.cmsLv.SuspendLayout(); @@ -65,17 +66,17 @@ // // btnClose // - this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel; resources.ApplyResources(this.btnClose, "btnClose"); + this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel; this.btnClose.Name = "btnClose"; this.btnClose.UseVisualStyleBackColor = true; this.btnClose.Click += new System.EventHandler(this.btnClose_Click); // // panel2 // + resources.ApplyResources(this.panel2, "panel2"); this.panel2.Controls.Add(this.btnClose); this.panel2.Controls.Add(this.btnOK); - resources.ApplyResources(this.panel2, "panel2"); this.panel2.Name = "panel2"; // // btnOK @@ -87,9 +88,9 @@ // // panel1 // + resources.ApplyResources(this.panel1, "panel1"); this.panel1.Controls.Add(this.linkLabelRoutingDoc); this.panel1.Controls.Add(this.cmbdomainStrategy); - resources.ApplyResources(this.panel1, "panel1"); this.panel1.Name = "panel1"; // // linkLabelRoutingDoc @@ -101,19 +102,19 @@ // // cmbdomainStrategy // + resources.ApplyResources(this.cmbdomainStrategy, "cmbdomainStrategy"); this.cmbdomainStrategy.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.cmbdomainStrategy.FormattingEnabled = true; this.cmbdomainStrategy.Items.AddRange(new object[] { resources.GetString("cmbdomainStrategy.Items"), resources.GetString("cmbdomainStrategy.Items1"), resources.GetString("cmbdomainStrategy.Items2")}); - resources.ApplyResources(this.cmbdomainStrategy, "cmbdomainStrategy"); this.cmbdomainStrategy.Name = "cmbdomainStrategy"; // // lvRoutings // - this.lvRoutings.ContextMenuStrip = this.cmsLv; resources.ApplyResources(this.lvRoutings, "lvRoutings"); + this.lvRoutings.ContextMenuStrip = this.cmsLv; this.lvRoutings.FullRowSelect = true; this.lvRoutings.GridLines = true; this.lvRoutings.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable; @@ -129,6 +130,7 @@ // // cmsLv // + resources.ApplyResources(this.cmsLv, "cmsLv"); this.cmsLv.ImageScalingSize = new System.Drawing.Size(20, 20); this.cmsLv.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.menuAdd, @@ -141,116 +143,123 @@ this.menuMoveDown, this.menuMoveBottom}); this.cmsLv.Name = "cmsLv"; - resources.ApplyResources(this.cmsLv, "cmsLv"); + this.cmsLv.OwnerItem = this.MenuItem1; // // menuAdd // - this.menuAdd.Name = "menuAdd"; resources.ApplyResources(this.menuAdd, "menuAdd"); + this.menuAdd.Name = "menuAdd"; this.menuAdd.Click += new System.EventHandler(this.menuAdd_Click); // // menuRemove // - this.menuRemove.Name = "menuRemove"; resources.ApplyResources(this.menuRemove, "menuRemove"); + this.menuRemove.Name = "menuRemove"; this.menuRemove.Click += new System.EventHandler(this.menuRemove_Click); // // menuSelectAll // - this.menuSelectAll.Name = "menuSelectAll"; resources.ApplyResources(this.menuSelectAll, "menuSelectAll"); + this.menuSelectAll.Name = "menuSelectAll"; this.menuSelectAll.Click += new System.EventHandler(this.menuSelectAll_Click); // // menuExportSelectedRules // - this.menuExportSelectedRules.Name = "menuExportSelectedRules"; resources.ApplyResources(this.menuExportSelectedRules, "menuExportSelectedRules"); + this.menuExportSelectedRules.Name = "menuExportSelectedRules"; this.menuExportSelectedRules.Click += new System.EventHandler(this.menuExportSelectedRules_Click); // // toolStripSeparator3 // - this.toolStripSeparator3.Name = "toolStripSeparator3"; resources.ApplyResources(this.toolStripSeparator3, "toolStripSeparator3"); + this.toolStripSeparator3.Name = "toolStripSeparator3"; // // menuMoveTop // - this.menuMoveTop.Name = "menuMoveTop"; resources.ApplyResources(this.menuMoveTop, "menuMoveTop"); + this.menuMoveTop.Name = "menuMoveTop"; this.menuMoveTop.Click += new System.EventHandler(this.menuMoveTop_Click); // // menuMoveUp // - this.menuMoveUp.Name = "menuMoveUp"; resources.ApplyResources(this.menuMoveUp, "menuMoveUp"); + this.menuMoveUp.Name = "menuMoveUp"; this.menuMoveUp.Click += new System.EventHandler(this.menuMoveUp_Click); // // menuMoveDown // - this.menuMoveDown.Name = "menuMoveDown"; resources.ApplyResources(this.menuMoveDown, "menuMoveDown"); + this.menuMoveDown.Name = "menuMoveDown"; this.menuMoveDown.Click += new System.EventHandler(this.menuMoveDown_Click); // // menuMoveBottom // - this.menuMoveBottom.Name = "menuMoveBottom"; resources.ApplyResources(this.menuMoveBottom, "menuMoveBottom"); + this.menuMoveBottom.Name = "menuMoveBottom"; this.menuMoveBottom.Click += new System.EventHandler(this.menuMoveBottom_Click); // // MenuItem1 // + resources.ApplyResources(this.MenuItem1, "MenuItem1"); this.MenuItem1.DropDown = this.cmsLv; this.MenuItem1.Name = "MenuItem1"; - resources.ApplyResources(this.MenuItem1, "MenuItem1"); // // tabControl2 // - this.tabControl2.Controls.Add(this.tabPage2); resources.ApplyResources(this.tabControl2, "tabControl2"); + this.tabControl2.Controls.Add(this.tabPage2); this.tabControl2.Name = "tabControl2"; this.tabControl2.SelectedIndex = 0; // // tabPage2 // - this.tabPage2.Controls.Add(this.lvRoutings); resources.ApplyResources(this.tabPage2, "tabPage2"); + this.tabPage2.Controls.Add(this.lvRoutings); this.tabPage2.Name = "tabPage2"; this.tabPage2.UseVisualStyleBackColor = true; // // menuServer // + resources.ApplyResources(this.menuServer, "menuServer"); this.menuServer.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.MenuItem1, this.toolStripMenuItem1}); - resources.ApplyResources(this.menuServer, "menuServer"); this.menuServer.Name = "menuServer"; // // toolStripMenuItem1 // + resources.ApplyResources(this.toolStripMenuItem1, "toolStripMenuItem1"); this.toolStripMenuItem1.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.menuImportRulesFromPreset, this.menuImportRulesFromFile, - this.menuImportRulesFromClipboard}); + this.menuImportRulesFromClipboard, + this.menuImportRulesFromUrl}); this.toolStripMenuItem1.Name = "toolStripMenuItem1"; - resources.ApplyResources(this.toolStripMenuItem1, "toolStripMenuItem1"); // // menuImportRulesFromPreset // - this.menuImportRulesFromPreset.Name = "menuImportRulesFromPreset"; resources.ApplyResources(this.menuImportRulesFromPreset, "menuImportRulesFromPreset"); + this.menuImportRulesFromPreset.Name = "menuImportRulesFromPreset"; this.menuImportRulesFromPreset.Click += new System.EventHandler(this.menuImportRulesFromPreset_Click); // // menuImportRulesFromFile // - this.menuImportRulesFromFile.Name = "menuImportRulesFromFile"; resources.ApplyResources(this.menuImportRulesFromFile, "menuImportRulesFromFile"); + this.menuImportRulesFromFile.Name = "menuImportRulesFromFile"; this.menuImportRulesFromFile.Click += new System.EventHandler(this.menuImportRulesFromFile_Click); // // menuImportRulesFromClipboard // - this.menuImportRulesFromClipboard.Name = "menuImportRulesFromClipboard"; resources.ApplyResources(this.menuImportRulesFromClipboard, "menuImportRulesFromClipboard"); + this.menuImportRulesFromClipboard.Name = "menuImportRulesFromClipboard"; this.menuImportRulesFromClipboard.Click += new System.EventHandler(this.menuImportRulesFromClipboard_Click); // + // menuImportRulesFromUrl + // + resources.ApplyResources(this.menuImportRulesFromUrl, "menuImportRulesFromUrl"); + this.menuImportRulesFromUrl.Name = "menuImportRulesFromUrl"; + this.menuImportRulesFromUrl.Click += new System.EventHandler(this.menuImportRulesFromUrl_Click); + // // RoutingSettingForm // resources.ApplyResources(this, "$this"); @@ -302,5 +311,6 @@ private System.Windows.Forms.ToolStripMenuItem menuImportRulesFromFile; private System.Windows.Forms.ToolStripMenuItem menuImportRulesFromClipboard; private System.Windows.Forms.ToolStripMenuItem menuExportSelectedRules; + private System.Windows.Forms.ToolStripMenuItem menuImportRulesFromUrl; } } \ No newline at end of file diff --git a/v2rayN/v2rayN/Forms/RoutingSettingForm.cs b/v2rayN/v2rayN/Forms/RoutingSettingForm.cs index b51d56d6..a086d132 100644 --- a/v2rayN/v2rayN/Forms/RoutingSettingForm.cs +++ b/v2rayN/v2rayN/Forms/RoutingSettingForm.cs @@ -24,7 +24,7 @@ namespace v2rayN.Forms config.rules = new List(); } InitRoutingsView(); - RefreshRoutingsView(); + RefreshRoutingsView(); } private void InitRoutingsView() @@ -220,7 +220,7 @@ namespace v2rayN.Forms } } - + private void lvRoutings_KeyDown(object sender, KeyEventArgs e) { if (e.Control) @@ -307,6 +307,22 @@ namespace v2rayN.Forms UI.Show(UIRes.I18N("OperationSuccess")); } } + private void menuImportRulesFromUrl_Click(object sender, EventArgs e) + { + var fm = new RoutingSubSettingForm(); + if (fm.ShowDialog() != DialogResult.OK) + { + return; + } + var url = fm.Url; + DownloadHandle downloadHandle = new DownloadHandle(); + string clipboardData = downloadHandle.WebDownloadStringSync(url); + if (ConfigHandler.AddBatchRoutingRules(ref config, clipboardData) == 0) + { + RefreshRoutingsView(); + UI.Show(UIRes.I18N("OperationSuccess")); + } + } #endregion diff --git a/v2rayN/v2rayN/Forms/RoutingSettingForm.resx b/v2rayN/v2rayN/Forms/RoutingSettingForm.resx index b773ce33..5e7a353e 100644 --- a/v2rayN/v2rayN/Forms/RoutingSettingForm.resx +++ b/v2rayN/v2rayN/Forms/RoutingSettingForm.resx @@ -117,224 +117,317 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - NoControl - - - - 568, 17 - - - 75, 23 - - - - 4 - - - &Cancel - - - btnClose - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - panel2 - - - 0 - - - btnOK - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - panel2 - - - 1 - - - Bottom - - - 0, 613 - - - 765, 60 - - - 7 - - - panel2 - - - System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this + + System.Windows.Forms.TabControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 3 - - NoControl - - - 475, 17 - - - 75, 23 - - - 5 - - - &OK - - - btnOK - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - panel2 - - - 1 - - - linkLabelRoutingDoc - - - System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - panel1 - - - 0 - cmbdomainStrategy - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Fill + + + Down (D) + + + + 765, 25 + + + Bottom + + + Edit and Function panel1 - - 1 - - - Top - - - 0, 25 - - - 765, 51 - - - 11 - panel1 - - System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + $this - - 2 + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - True + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - NoControl + + 4 - - 6, 21 - - - 0, 0, 0, 0 - - - 95, 12 - - - 19 - - - Domain strategy - - - linkLabelRoutingDoc - - - System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - panel1 - - - 0 - - - AsIs - - - IPIfNonMatch - - - IPOnDemand - - - 116, 17 - - - 165, 20 - - - 16 - - - cmbdomainStrategy + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - panel1 + + + 15 - + + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 4, 22 + + + 6, 21 + + + $this + + + NoControl + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Routing Settings + + + Remove selected + + + tabPage2 + + + menuExportSelectedRules + + + 202, 22 + + + 475, 17 + + + Domain strategy + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + MenuItem1 + + + 0 + + + 757, 511 + + 1 - - 17, 17 - - - 203, 186 + + 6, 12 + + + IPOnDemand + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Fill + + + Export Selected Rules + + + 0, 0 + + + 765, 60 + + + 0, 25 + + + 95, 21 + + + menuServer + + + Import Rules + + + 120, 21 + + + 19 + + + Import Rules From Url + + + System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 2 + + + menuSelectAll + + + menuMoveTop + + + 202, 22 cmsLv - - System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 5 - - Fill + + menuMoveDown + + + 165, 20 + + + menuImportRulesFromFile + + + Add + + + 247, 22 + + + toolStripSeparator3 + + + True + + + tabPage2 + + + toolStripMenuItem1 + + + menuMoveBottom + + + menuImportRulesFromUrl + + + 95, 12 + + + Import Rules From File + + + 202, 22 + + + 765, 537 + + + 1 + + + RoutingSettingForm + + + panel2 + + + Import Rules From Preset + + + 202, 22 + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.MenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + btnClose + + + Up (U) + + + 12 + + + 203, 186 + + + btnOK + + + 116, 17 + + + 14 + + + NoControl + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 3, 3 + + + menuImportRulesFromClipboard + + + Import Rules From Clipboard + + + menuAdd + + + 0, 76 + + + IPIfNonMatch + + + 247, 22 + + + panel2 + + + Move to top (T) + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 765, 51 + + + 751, 505 + + + 202, 22 @@ -353,295 +446,166 @@ ZW0uRHJhd2luZy5HcmFwaGljc1VuaXQBAAAAB3ZhbHVlX18ACAMAAAADAAAACw== - - 3, 3 + + menuImportRulesFromPreset - - 751, 505 + + &OK - - 12 + + 0, 0, 0, 0 - - lvRoutings + + 247, 22 + + + $this v2rayN.Base.ListViewFlickerFree, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null - - tabPage2 - - - 0 - - - 202, 22 - - - Add - - - 202, 22 - - - Remove selected - - - 202, 22 - - - Select All (Ctrl+A) - - - 202, 22 - - - Export Selected Rules - - - 199, 6 - - - 202, 22 - - - Move to top (T) - - - 202, 22 - - - Up (U) - - - 202, 22 - - - Down (D) - - - 202, 22 - - - Move to bottom (B) - - - 120, 21 - - - Edit and Function - - - tabPage2 - - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabControl2 - - - 0 - - - Fill - - - 0, 76 - - - 765, 537 - - - 14 - - - tabControl2 - - - System.Windows.Forms.TabControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 1 - - - 4, 22 - - - 3, 3, 3, 3 - - - 757, 511 - - - 0 - - - RuleList - - - tabPage2 - - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabControl2 - - - 0 - - - 139, 17 - - - 247, 22 - - - Import Rules From Preset - - - 247, 22 - - - Import Rules From File - - - 247, 22 - - - Import Rules From Clipboard - - - 95, 21 - - - Import Rules - - - 0, 0 - - - 765, 25 - - - 15 - - - menuServer - - - System.Windows.Forms.MenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 4 - - - True - - - 6, 12 - - - 765, 673 - - - Routing Settings - - - menuAdd - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuRemove - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuSelectAll - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuExportSelectedRules - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - toolStripSeparator3 - - - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuMoveTop - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuMoveUp - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuMoveDown - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuMoveBottom - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - MenuItem1 - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - toolStripMenuItem1 - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuImportRulesFromPreset - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuImportRulesFromFile - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuImportRulesFromClipboard + + 16 System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - RoutingSettingForm + + AsIs + + + 202, 22 + + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Move to bottom (B) + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 11 + + + panel2 + + + 7 + + + 0 v2rayN.Forms.BaseForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + + tabControl2 + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 3, 3, 3, 3 + + + 0, 613 + + + menuMoveUp + + + RuleList + + + Select All (Ctrl+A) + + + &Cancel + + + 199, 6 + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 4 + + + panel1 + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 247, 22 + + + 202, 22 + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + lvRoutings + + + linkLabelRoutingDoc + + + 202, 22 + + + menuRemove + + + NoControl + + + 765, 673 + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 75, 23 + + + 1 + + + 0 + + + 75, 23 + + + tabControl2 + + + 0 + + + System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 568, 17 + + + 0 + + + Top + + + True + + + 17, 17 + + + 139, 17 + \ No newline at end of file diff --git a/v2rayN/v2rayN/Forms/RoutingSettingForm.zh-Hans.resx b/v2rayN/v2rayN/Forms/RoutingSettingForm.zh-Hans.resx index c4e5f695..7e6ffcf9 100644 --- a/v2rayN/v2rayN/Forms/RoutingSettingForm.zh-Hans.resx +++ b/v2rayN/v2rayN/Forms/RoutingSettingForm.zh-Hans.resx @@ -243,6 +243,12 @@ 从剪贴板中导入规则 + + 184, 22 + + + 从Url中导入规则 + 92, 21 diff --git a/v2rayN/v2rayN/Forms/RoutingSubSettingForm.Designer.cs b/v2rayN/v2rayN/Forms/RoutingSubSettingForm.Designer.cs new file mode 100644 index 00000000..e085f27f --- /dev/null +++ b/v2rayN/v2rayN/Forms/RoutingSubSettingForm.Designer.cs @@ -0,0 +1,106 @@ +namespace v2rayN.Forms +{ + partial class RoutingSubSettingForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(RoutingSubSettingForm)); + this.panel2 = new System.Windows.Forms.Panel(); + this.btnClose = new System.Windows.Forms.Button(); + this.btnOK = new System.Windows.Forms.Button(); + this.panCon = new System.Windows.Forms.Panel(); + this.txtUrl = new System.Windows.Forms.TextBox(); + this.label3 = new System.Windows.Forms.Label(); + this.panel2.SuspendLayout(); + this.panCon.SuspendLayout(); + this.SuspendLayout(); + // + // panel2 + // + this.panel2.Controls.Add(this.btnClose); + this.panel2.Controls.Add(this.btnOK); + resources.ApplyResources(this.panel2, "panel2"); + this.panel2.Name = "panel2"; + // + // btnClose + // + this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel; + resources.ApplyResources(this.btnClose, "btnClose"); + this.btnClose.Name = "btnClose"; + this.btnClose.UseVisualStyleBackColor = true; + this.btnClose.Click += new System.EventHandler(this.btnClose_Click); + // + // btnOK + // + resources.ApplyResources(this.btnOK, "btnOK"); + this.btnOK.Name = "btnOK"; + this.btnOK.UseVisualStyleBackColor = true; + this.btnOK.Click += new System.EventHandler(this.btnOK_Click); + // + // panCon + // + resources.ApplyResources(this.panCon, "panCon"); + this.panCon.Controls.Add(this.txtUrl); + this.panCon.Controls.Add(this.label3); + this.panCon.Name = "panCon"; + // + // txtUrl + // + resources.ApplyResources(this.txtUrl, "txtUrl"); + this.txtUrl.Name = "txtUrl"; + // + // label3 + // + resources.ApplyResources(this.label3, "label3"); + this.label3.Name = "label3"; + // + // RoutingSubSettingForm + // + resources.ApplyResources(this, "$this"); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.CancelButton = this.btnClose; + this.Controls.Add(this.panCon); + this.Controls.Add(this.panel2); + this.Name = "RoutingSubSettingForm"; + this.Load += new System.EventHandler(this.RoutingSubSettingForm_Load); + this.panel2.ResumeLayout(false); + this.panCon.ResumeLayout(false); + this.panCon.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel panel2; + private System.Windows.Forms.Button btnClose; + private System.Windows.Forms.Button btnOK; + private System.Windows.Forms.Panel panCon; + private System.Windows.Forms.TextBox txtUrl; + private System.Windows.Forms.Label label3; + } +} \ No newline at end of file diff --git a/v2rayN/v2rayN/Forms/RoutingSubSettingForm.cs b/v2rayN/v2rayN/Forms/RoutingSubSettingForm.cs new file mode 100644 index 00000000..7ccb683d --- /dev/null +++ b/v2rayN/v2rayN/Forms/RoutingSubSettingForm.cs @@ -0,0 +1,61 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using v2rayN.Handler; +using v2rayN.Mode; + +namespace v2rayN.Forms +{ + public partial class RoutingSubSettingForm : BaseForm + { + public string Url; + public RoutingSubSettingForm() + { + InitializeComponent(); + } + + private void RoutingSubSettingForm_Load(object sender, EventArgs e) + { + if (config.ruleSubItem == null) + { + config.ruleSubItem = new List(); + } + if (config.ruleSubItem.Count <= 0) + { + config.ruleSubItem.Add(new SubItem + { + remarks = "def", + url = Global.CustomRoutingListUrl + "custom_routing_rules" + }); + } + txtUrl.Text = config.ruleSubItem[0].url; + } + + private void btnOK_Click(object sender, EventArgs e) + { + var url = txtUrl.Text.Trim(); + + if (Utils.IsNullOrEmpty(url)) + { + return; + } + Url = url; + config.ruleSubItem[0].url = url; + ConfigHandler.SaveRuleSubItem(ref config); + + this.DialogResult = DialogResult.OK; + } + + private void btnClose_Click(object sender, EventArgs e) + { + this.DialogResult = DialogResult.Cancel; + } + + } +} diff --git a/v2rayN/v2rayN/Forms/RoutingSubSettingForm.resx b/v2rayN/v2rayN/Forms/RoutingSubSettingForm.resx new file mode 100644 index 00000000..144946ab --- /dev/null +++ b/v2rayN/v2rayN/Forms/RoutingSubSettingForm.resx @@ -0,0 +1,300 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + NoControl + + + + 448, 17 + + + 75, 23 + + + + 4 + + + &Cancel + + + btnClose + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panel2 + + + 0 + + + NoControl + + + 355, 17 + + + 75, 23 + + + 5 + + + &OK + + + btnOK + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panel2 + + + 1 + + + Bottom + + + 0, 166 + + + 545, 60 + + + 8 + + + panel2 + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 1 + + + True + + + 83, 19 + + + True + + + 450, 113 + + + 25 + + + txtUrl + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panCon + + + 0 + + + True + + + NoControl + + + 12, 19 + + + 23, 12 + + + 24 + + + Url + + + label3 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panCon + + + 1 + + + Fill + + + 0, 0 + + + 545, 166 + + + 11 + + + panCon + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 0 + + + True + + + 6, 12 + + + 545, 226 + + + RoutingSubSetting + + + RoutingSubSettingForm + + + v2rayN.Forms.BaseForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + + \ No newline at end of file diff --git a/v2rayN/v2rayN/Forms/RoutingSubSettingForm.zh-Hans.resx b/v2rayN/v2rayN/Forms/RoutingSubSettingForm.zh-Hans.resx new file mode 100644 index 00000000..614f26d1 --- /dev/null +++ b/v2rayN/v2rayN/Forms/RoutingSubSettingForm.zh-Hans.resx @@ -0,0 +1,133 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 取消(&C) + + + 确定(&O) + + + + 65, 12 + + + 地址 (url) + + \ No newline at end of file diff --git a/v2rayN/v2rayN/Global.cs b/v2rayN/v2rayN/Global.cs index 478fbbd0..0eaf0665 100644 --- a/v2rayN/v2rayN/Global.cs +++ b/v2rayN/v2rayN/Global.cs @@ -20,7 +20,7 @@ namespace v2rayN public const string SpeedTestUrl = @"http://cachefly.cachefly.net/10mb.test"; public const string SpeedPingTestUrl = @"https://www.google.com/generate_204"; public const string AvailabilityTestUrl = @"https://www.google.com/generate_204"; - + /// /// CustomRoutingListUrl /// @@ -96,7 +96,7 @@ namespace v2rayN /// /// 阻止 tag值 /// - public const string blockTag = "block"; + public const string blockTag = "block"; /// /// @@ -189,6 +189,7 @@ namespace v2rayN public const string IEProxyExceptions = "localhost;127.*;10.*;172.16.*;172.17.*;172.18.*;172.19.*;172.20.*;172.21.*;172.22.*;172.23.*;172.24.*;172.25.*;172.26.*;172.27.*;172.28.*;172.29.*;172.30.*;172.31.*;192.168.*"; + public const string RoutingRuleComma = ""; #endregion #region 全局变量 diff --git a/v2rayN/v2rayN/Handler/ConfigHandler.cs b/v2rayN/v2rayN/Handler/ConfigHandler.cs index abdd02f5..5f905f84 100644 --- a/v2rayN/v2rayN/Handler/ConfigHandler.cs +++ b/v2rayN/v2rayN/Handler/ConfigHandler.cs @@ -136,6 +136,10 @@ namespace v2rayN.Handler { config.subItem = new List(); } + if (config.ruleSubItem == null) + { + config.ruleSubItem = new List(); + } if (config == null || config.index < 0 @@ -525,6 +529,12 @@ namespace v2rayN.Handler vmessItem.id = vmessItem.id.TrimEx(); vmessItem.security = vmessItem.security.TrimEx(); + var securitys = new HashSet() { "aes-256-gcm", "aes-128-gcm", "chacha20-poly1305", "chacha20-ietf-poly1305", "none", "plain" }; + if (!securitys.Contains(vmessItem.security)) + { + return -1; + } + if (index >= 0) { //修改 @@ -1125,5 +1135,29 @@ namespace v2rayN.Handler return 0; } + + /// + /// SaveRuleSubItem + /// + /// + /// + public static int SaveRuleSubItem(ref Config config) + { + if (config.ruleSubItem == null || config.ruleSubItem.Count <= 0) + { + return -1; + } + + foreach (SubItem sub in config.ruleSubItem) + { + if (Utils.IsNullOrEmpty(sub.id)) + { + sub.id = Utils.GetGUID(); + } + } + + ToJsonFile(config); + return 0; + } } } diff --git a/v2rayN/v2rayN/Handler/DownloadHandle.cs b/v2rayN/v2rayN/Handler/DownloadHandle.cs index dd1d057a..66612ac8 100644 --- a/v2rayN/v2rayN/Handler/DownloadHandle.cs +++ b/v2rayN/v2rayN/Handler/DownloadHandle.cs @@ -266,8 +266,8 @@ namespace v2rayN.Handler { ((WebClientEx)sender).Dispose(); TimeSpan ts = (DateTime.Now - totalDatetime); - string speed = string.Format("{0} M/s", (totalBytesToReceive / ts.TotalMilliseconds / 1000).ToString("#0.##")); - UpdateCompleted(this, new ResultEventArgs(true, speed)); + string speed = string.Format("{0} M/s", (totalBytesToReceive / ts.TotalMilliseconds / 1000).ToString("#0.0")); + UpdateCompleted(this, new ResultEventArgs(true, speed.PadLeft(8, ' '))); return; } @@ -276,8 +276,8 @@ namespace v2rayN.Handler { TimeSpan ts = (DateTime.Now - totalDatetime); - string speed = string.Format("{0} M/s", (totalBytesToReceive / ts.TotalMilliseconds / 1000).ToString("#0.##")); - UpdateCompleted(this, new ResultEventArgs(true, speed)); + string speed = string.Format("{0} M/s", (totalBytesToReceive / ts.TotalMilliseconds / 1000).ToString("#0.0")); + UpdateCompleted(this, new ResultEventArgs(true, speed.PadLeft(8, ' '))); } else { diff --git a/v2rayN/v2rayN/Handler/SpeedtestHandler.cs b/v2rayN/v2rayN/Handler/SpeedtestHandler.cs index 91523091..fb0bd5dd 100644 --- a/v2rayN/v2rayN/Handler/SpeedtestHandler.cs +++ b/v2rayN/v2rayN/Handler/SpeedtestHandler.cs @@ -289,7 +289,7 @@ namespace v2rayN.Handler { return "Timeout"; } - return string.Format("{0}{1}", time, unit).PadLeft(6, ' '); + return string.Format("{0}{1}", time, unit).PadLeft(8, ' '); } } } diff --git a/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs b/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs index 6fa3ecb6..43ef1752 100644 --- a/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs +++ b/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs @@ -146,7 +146,7 @@ namespace v2rayN.Handler try { Inbounds inbound = v2rayConfig.inbounds[0]; - //端口 + inbound.tag = Global.InboundSocks; inbound.port = config.inbound[0].localPort; inbound.protocol = config.inbound[0].protocol; if (config.allowLANConn) @@ -157,12 +157,13 @@ namespace v2rayN.Handler { inbound.listen = Global.Loopback; } - //开启udp + //udp inbound.settings.udp = config.inbound[0].udpEnabled; inbound.sniffing.enabled = config.inbound[0].sniffingEnabled; //http Inbounds inbound2 = v2rayConfig.inbounds[1]; + inbound2.tag = Global.InboundHttp; inbound2.port = config.GetLocalPort(Global.InboundHttp); inbound2.protocol = Global.InboundHttp; inbound2.listen = inbound.listen; @@ -231,6 +232,10 @@ namespace v2rayN.Handler var it = Utils.DeepCopy(rules); it.ip = null; it.type = "field"; + for (int k = 0; k < it.domain.Count; k++) + { + it.domain[k] = it.domain[k].Replace(Global.RoutingRuleComma, ","); + } //if (Utils.IsNullOrEmpty(it.port)) //{ // it.port = null; diff --git a/v2rayN/v2rayN/Mode/Config.cs b/v2rayN/v2rayN/Mode/Config.cs index b1b63fe5..da2983bd 100644 --- a/v2rayN/v2rayN/Mode/Config.cs +++ b/v2rayN/v2rayN/Mode/Config.cs @@ -165,6 +165,10 @@ namespace v2rayN.Mode { get; set; } + public List ruleSubItem + { + get; set; + } public ECoreType coreType { diff --git a/v2rayN/v2rayN/Properties/AssemblyInfo.cs b/v2rayN/v2rayN/Properties/AssemblyInfo.cs index c8e96058..1b7c1162 100644 --- a/v2rayN/v2rayN/Properties/AssemblyInfo.cs +++ b/v2rayN/v2rayN/Properties/AssemblyInfo.cs @@ -32,4 +32,4 @@ using System.Runtime.InteropServices; // 方法是按如下所示使用“*”: //[assembly: AssemblyVersion("1.0.*")] //[assembly: AssemblyVersion("1.0.0")] -[assembly: AssemblyFileVersion("4.5")] +[assembly: AssemblyFileVersion("4.6")] diff --git a/v2rayN/v2rayN/v2rayN.csproj b/v2rayN/v2rayN/v2rayN.csproj index ea9c4b89..5776ed1f 100644 --- a/v2rayN/v2rayN/v2rayN.csproj +++ b/v2rayN/v2rayN/v2rayN.csproj @@ -131,6 +131,12 @@ RoutingSettingDetailsForm.cs + + Form + + + RoutingSubSettingForm.cs + @@ -303,9 +309,17 @@ RoutingSettingDetailsForm.cs + Designer RoutingSettingDetailsForm.cs + Designer + + + RoutingSubSettingForm.cs + + + RoutingSubSettingForm.cs SubSettingControl.cs diff --git a/v2rayN/v2rayN/v2rayN.csproj.user b/v2rayN/v2rayN/v2rayN.csproj.user index a36e9eb4..778969a8 100644 --- a/v2rayN/v2rayN/v2rayN.csproj.user +++ b/v2rayN/v2rayN/v2rayN.csproj.user @@ -9,7 +9,7 @@ zh-CN false - ShowAllFiles + ProjectFiles false From 9c96feb4b508007bfad96a665da4176932f9c07e Mon Sep 17 00:00:00 2001 From: 2dust <31833384+2dust@users.noreply.github.com> Date: Sat, 23 Jan 2021 11:34:07 +0800 Subject: [PATCH 47/54] up4.7 --- v2rayN/v2rayN/Forms/MainForm.Designer.cs | 175 +- v2rayN/v2rayN/Forms/MainForm.cs | 94 +- v2rayN/v2rayN/Forms/MainForm.resx | 2426 +++++++++-------- v2rayN/v2rayN/Forms/MainForm.zh-Hans.resx | 37 +- .../RoutingRuleSettingDetailsForm.Designer.cs | 218 ++ .../Forms/RoutingRuleSettingDetailsForm.cs | 115 + .../Forms/RoutingRuleSettingDetailsForm.resx | 600 ++++ ...RoutingRuleSettingDetailsForm.zh-Hans.resx | 145 + .../Forms/RoutingRuleSettingForm.Designer.cs | 322 +++ v2rayN/v2rayN/Forms/RoutingRuleSettingForm.cs | 334 +++ .../v2rayN/Forms/RoutingRuleSettingForm.resx | 674 +++++ .../Forms/RoutingRuleSettingForm.zh-Hans.resx | 285 ++ .../Forms/RoutingSettingForm.Designer.cs | 132 +- v2rayN/v2rayN/Forms/RoutingSettingForm.cs | 195 +- v2rayN/v2rayN/Forms/RoutingSettingForm.resx | 731 +++-- .../Forms/RoutingSettingForm.zh-Hans.resx | 98 +- v2rayN/v2rayN/Forms/SubSettingControl.resx | 41 +- v2rayN/v2rayN/Handler/ConfigHandler.cs | 218 +- v2rayN/v2rayN/Handler/MainFormHandler.cs | 17 + v2rayN/v2rayN/Handler/V2rayConfigHandler.cs | 7 +- v2rayN/v2rayN/Mode/Config.cs | 20 +- v2rayN/v2rayN/Mode/RoutingItem.cs | 26 + v2rayN/v2rayN/Mode/RulesItem.cs | 2 - v2rayN/v2rayN/Properties/AssemblyInfo.cs | 2 +- v2rayN/v2rayN/Resx/ResUI.Designer.cs | 38 +- v2rayN/v2rayN/Resx/ResUI.resx | 12 + v2rayN/v2rayN/Resx/ResUI.zh-Hans.resx | 12 + v2rayN/v2rayN/Sample/custom_routing_global | 6 + v2rayN/v2rayN/Sample/custom_routing_white | 24 + v2rayN/v2rayN/v2rayN.csproj | 33 +- 30 files changed, 4790 insertions(+), 2249 deletions(-) create mode 100644 v2rayN/v2rayN/Forms/RoutingRuleSettingDetailsForm.Designer.cs create mode 100644 v2rayN/v2rayN/Forms/RoutingRuleSettingDetailsForm.cs create mode 100644 v2rayN/v2rayN/Forms/RoutingRuleSettingDetailsForm.resx create mode 100644 v2rayN/v2rayN/Forms/RoutingRuleSettingDetailsForm.zh-Hans.resx create mode 100644 v2rayN/v2rayN/Forms/RoutingRuleSettingForm.Designer.cs create mode 100644 v2rayN/v2rayN/Forms/RoutingRuleSettingForm.cs create mode 100644 v2rayN/v2rayN/Forms/RoutingRuleSettingForm.resx create mode 100644 v2rayN/v2rayN/Forms/RoutingRuleSettingForm.zh-Hans.resx create mode 100644 v2rayN/v2rayN/Mode/RoutingItem.cs create mode 100644 v2rayN/v2rayN/Sample/custom_routing_global create mode 100644 v2rayN/v2rayN/Sample/custom_routing_white diff --git a/v2rayN/v2rayN/Forms/MainForm.Designer.cs b/v2rayN/v2rayN/Forms/MainForm.Designer.cs index a208b5dd..93b3aedb 100644 --- a/v2rayN/v2rayN/Forms/MainForm.Designer.cs +++ b/v2rayN/v2rayN/Forms/MainForm.Designer.cs @@ -72,7 +72,9 @@ this.menuKeepClear = new System.Windows.Forms.ToolStripMenuItem(); this.menuGlobal = new System.Windows.Forms.ToolStripMenuItem(); this.menuKeepNothing = new System.Windows.Forms.ToolStripMenuItem(); + this.menuRoutings = new System.Windows.Forms.ToolStripMenuItem(); this.menuServers = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator13 = new System.Windows.Forms.ToolStripSeparator(); this.menuAddServers2 = new System.Windows.Forms.ToolStripMenuItem(); this.menuScanScreen2 = new System.Windows.Forms.ToolStripMenuItem(); this.menuUpdateSubscriptions = new System.Windows.Forms.ToolStripMenuItem(); @@ -140,17 +142,19 @@ // // scMain.Panel1 // + resources.ApplyResources(this.scMain.Panel1, "scMain.Panel1"); this.scMain.Panel1.Controls.Add(this.lvServers); // // scMain.Panel2 // + resources.ApplyResources(this.scMain.Panel2, "scMain.Panel2"); this.scMain.Panel2.Controls.Add(this.qrCodeControl); this.scMain.TabStop = false; // // lvServers // - this.lvServers.ContextMenuStrip = this.cmsLv; resources.ApplyResources(this.lvServers, "lvServers"); + this.lvServers.ContextMenuStrip = this.cmsLv; this.lvServers.FullRowSelect = true; this.lvServers.GridLines = true; this.lvServers.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable; @@ -169,6 +173,7 @@ // // cmsLv // + resources.ApplyResources(this.cmsLv, "cmsLv"); this.cmsLv.ImageScalingSize = new System.Drawing.Size(20, 20); this.cmsLv.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.menuAddVmessServer, @@ -203,196 +208,194 @@ this.menuExport2ShareUrl, this.menuExport2SubContent}); this.cmsLv.Name = "cmsLv"; - this.cmsLv.OwnerItem = this.tsbServer; - resources.ApplyResources(this.cmsLv, "cmsLv"); // // menuAddVmessServer // - this.menuAddVmessServer.Name = "menuAddVmessServer"; resources.ApplyResources(this.menuAddVmessServer, "menuAddVmessServer"); + this.menuAddVmessServer.Name = "menuAddVmessServer"; this.menuAddVmessServer.Click += new System.EventHandler(this.menuAddVmessServer_Click); // // menuAddVlessServer // - this.menuAddVlessServer.Name = "menuAddVlessServer"; resources.ApplyResources(this.menuAddVlessServer, "menuAddVlessServer"); + this.menuAddVlessServer.Name = "menuAddVlessServer"; this.menuAddVlessServer.Click += new System.EventHandler(this.menuAddVlessServer_Click); // // menuAddShadowsocksServer // - this.menuAddShadowsocksServer.Name = "menuAddShadowsocksServer"; resources.ApplyResources(this.menuAddShadowsocksServer, "menuAddShadowsocksServer"); + this.menuAddShadowsocksServer.Name = "menuAddShadowsocksServer"; this.menuAddShadowsocksServer.Click += new System.EventHandler(this.menuAddShadowsocksServer_Click); // // menuAddSocksServer // - this.menuAddSocksServer.Name = "menuAddSocksServer"; resources.ApplyResources(this.menuAddSocksServer, "menuAddSocksServer"); + this.menuAddSocksServer.Name = "menuAddSocksServer"; this.menuAddSocksServer.Click += new System.EventHandler(this.menuAddSocksServer_Click); // // menuAddTrojanServer // - this.menuAddTrojanServer.Name = "menuAddTrojanServer"; resources.ApplyResources(this.menuAddTrojanServer, "menuAddTrojanServer"); + this.menuAddTrojanServer.Name = "menuAddTrojanServer"; this.menuAddTrojanServer.Click += new System.EventHandler(this.menuAddTrojanServer_Click); // // menuAddCustomServer // - this.menuAddCustomServer.Name = "menuAddCustomServer"; resources.ApplyResources(this.menuAddCustomServer, "menuAddCustomServer"); + this.menuAddCustomServer.Name = "menuAddCustomServer"; this.menuAddCustomServer.Click += new System.EventHandler(this.menuAddCustomServer_Click); // // menuAddServers // - this.menuAddServers.Name = "menuAddServers"; resources.ApplyResources(this.menuAddServers, "menuAddServers"); + this.menuAddServers.Name = "menuAddServers"; this.menuAddServers.Click += new System.EventHandler(this.menuAddServers_Click); // // menuScanScreen // - this.menuScanScreen.Name = "menuScanScreen"; resources.ApplyResources(this.menuScanScreen, "menuScanScreen"); + this.menuScanScreen.Name = "menuScanScreen"; this.menuScanScreen.Click += new System.EventHandler(this.menuScanScreen_Click); // // toolStripSeparator1 // - this.toolStripSeparator1.Name = "toolStripSeparator1"; resources.ApplyResources(this.toolStripSeparator1, "toolStripSeparator1"); + this.toolStripSeparator1.Name = "toolStripSeparator1"; // // menuRemoveServer // - this.menuRemoveServer.Name = "menuRemoveServer"; resources.ApplyResources(this.menuRemoveServer, "menuRemoveServer"); + this.menuRemoveServer.Name = "menuRemoveServer"; this.menuRemoveServer.Click += new System.EventHandler(this.menuRemoveServer_Click); // // menuRemoveDuplicateServer // - this.menuRemoveDuplicateServer.Name = "menuRemoveDuplicateServer"; resources.ApplyResources(this.menuRemoveDuplicateServer, "menuRemoveDuplicateServer"); + this.menuRemoveDuplicateServer.Name = "menuRemoveDuplicateServer"; this.menuRemoveDuplicateServer.Click += new System.EventHandler(this.menuRemoveDuplicateServer_Click); // // menuCopyServer // - this.menuCopyServer.Name = "menuCopyServer"; resources.ApplyResources(this.menuCopyServer, "menuCopyServer"); + this.menuCopyServer.Name = "menuCopyServer"; this.menuCopyServer.Click += new System.EventHandler(this.menuCopyServer_Click); // // menuSetDefaultServer // - this.menuSetDefaultServer.Name = "menuSetDefaultServer"; resources.ApplyResources(this.menuSetDefaultServer, "menuSetDefaultServer"); + this.menuSetDefaultServer.Name = "menuSetDefaultServer"; this.menuSetDefaultServer.Click += new System.EventHandler(this.menuSetDefaultServer_Click); // // toolStripSeparator3 // - this.toolStripSeparator3.Name = "toolStripSeparator3"; resources.ApplyResources(this.toolStripSeparator3, "toolStripSeparator3"); + this.toolStripSeparator3.Name = "toolStripSeparator3"; // // menuMoveTop // - this.menuMoveTop.Name = "menuMoveTop"; resources.ApplyResources(this.menuMoveTop, "menuMoveTop"); + this.menuMoveTop.Name = "menuMoveTop"; this.menuMoveTop.Click += new System.EventHandler(this.menuMoveTop_Click); // // menuMoveUp // - this.menuMoveUp.Name = "menuMoveUp"; resources.ApplyResources(this.menuMoveUp, "menuMoveUp"); + this.menuMoveUp.Name = "menuMoveUp"; this.menuMoveUp.Click += new System.EventHandler(this.menuMoveUp_Click); // // menuMoveDown // - this.menuMoveDown.Name = "menuMoveDown"; resources.ApplyResources(this.menuMoveDown, "menuMoveDown"); + this.menuMoveDown.Name = "menuMoveDown"; this.menuMoveDown.Click += new System.EventHandler(this.menuMoveDown_Click); // // menuMoveBottom // - this.menuMoveBottom.Name = "menuMoveBottom"; resources.ApplyResources(this.menuMoveBottom, "menuMoveBottom"); + this.menuMoveBottom.Name = "menuMoveBottom"; this.menuMoveBottom.Click += new System.EventHandler(this.menuMoveBottom_Click); // // menuSelectAll // - this.menuSelectAll.Name = "menuSelectAll"; resources.ApplyResources(this.menuSelectAll, "menuSelectAll"); + this.menuSelectAll.Name = "menuSelectAll"; this.menuSelectAll.Click += new System.EventHandler(this.menuSelectAll_Click); // // toolStripSeparator9 // - this.toolStripSeparator9.Name = "toolStripSeparator9"; resources.ApplyResources(this.toolStripSeparator9, "toolStripSeparator9"); + this.toolStripSeparator9.Name = "toolStripSeparator9"; // // menuPingServer // - this.menuPingServer.Name = "menuPingServer"; resources.ApplyResources(this.menuPingServer, "menuPingServer"); + this.menuPingServer.Name = "menuPingServer"; this.menuPingServer.Click += new System.EventHandler(this.menuPingServer_Click); // // menuTcpingServer // - this.menuTcpingServer.Name = "menuTcpingServer"; resources.ApplyResources(this.menuTcpingServer, "menuTcpingServer"); + this.menuTcpingServer.Name = "menuTcpingServer"; this.menuTcpingServer.Click += new System.EventHandler(this.menuTcpingServer_Click); // // menuRealPingServer // - this.menuRealPingServer.Name = "menuRealPingServer"; resources.ApplyResources(this.menuRealPingServer, "menuRealPingServer"); + this.menuRealPingServer.Name = "menuRealPingServer"; this.menuRealPingServer.Click += new System.EventHandler(this.menuRealPingServer_Click); // // menuSpeedServer // - this.menuSpeedServer.Name = "menuSpeedServer"; resources.ApplyResources(this.menuSpeedServer, "menuSpeedServer"); + this.menuSpeedServer.Name = "menuSpeedServer"; this.menuSpeedServer.Click += new System.EventHandler(this.menuSpeedServer_Click); // // tsbTestMe // - this.tsbTestMe.Name = "tsbTestMe"; resources.ApplyResources(this.tsbTestMe, "tsbTestMe"); + this.tsbTestMe.Name = "tsbTestMe"; this.tsbTestMe.Click += new System.EventHandler(this.tsbTestMe_Click); // // menuClearServerStatistics // - this.menuClearServerStatistics.Name = "menuClearServerStatistics"; resources.ApplyResources(this.menuClearServerStatistics, "menuClearServerStatistics"); + this.menuClearServerStatistics.Name = "menuClearServerStatistics"; this.menuClearServerStatistics.Click += new System.EventHandler(this.menuClearStatistic_Click); // // toolStripSeparator6 // - this.toolStripSeparator6.Name = "toolStripSeparator6"; resources.ApplyResources(this.toolStripSeparator6, "toolStripSeparator6"); + this.toolStripSeparator6.Name = "toolStripSeparator6"; // // menuExport2ClientConfig // - this.menuExport2ClientConfig.Name = "menuExport2ClientConfig"; resources.ApplyResources(this.menuExport2ClientConfig, "menuExport2ClientConfig"); + this.menuExport2ClientConfig.Name = "menuExport2ClientConfig"; this.menuExport2ClientConfig.Click += new System.EventHandler(this.menuExport2ClientConfig_Click); // // menuExport2ServerConfig // - this.menuExport2ServerConfig.Name = "menuExport2ServerConfig"; resources.ApplyResources(this.menuExport2ServerConfig, "menuExport2ServerConfig"); + this.menuExport2ServerConfig.Name = "menuExport2ServerConfig"; this.menuExport2ServerConfig.Click += new System.EventHandler(this.menuExport2ServerConfig_Click); // // menuExport2ShareUrl // - this.menuExport2ShareUrl.Name = "menuExport2ShareUrl"; resources.ApplyResources(this.menuExport2ShareUrl, "menuExport2ShareUrl"); + this.menuExport2ShareUrl.Name = "menuExport2ShareUrl"; this.menuExport2ShareUrl.Click += new System.EventHandler(this.menuExport2ShareUrl_Click); // // menuExport2SubContent // - this.menuExport2SubContent.Name = "menuExport2SubContent"; resources.ApplyResources(this.menuExport2SubContent, "menuExport2SubContent"); + this.menuExport2SubContent.Name = "menuExport2SubContent"; this.menuExport2SubContent.Click += new System.EventHandler(this.menuExport2SubContent_Click); // // tsbServer // + resources.ApplyResources(this.tsbServer, "tsbServer"); this.tsbServer.DropDown = this.cmsLv; this.tsbServer.Image = global::v2rayN.Properties.Resources.server; - resources.ApplyResources(this.tsbServer, "tsbServer"); this.tsbServer.Name = "tsbServer"; // // qrCodeControl @@ -402,17 +405,19 @@ // // notifyMain // - this.notifyMain.ContextMenuStrip = this.cmsMain; resources.ApplyResources(this.notifyMain, "notifyMain"); + this.notifyMain.ContextMenuStrip = this.cmsMain; this.notifyMain.MouseClick += new System.Windows.Forms.MouseEventHandler(this.notifyMain_MouseClick); // // cmsMain // - this.cmsMain.ImageScalingSize = new System.Drawing.Size(20, 20); resources.ApplyResources(this.cmsMain, "cmsMain"); + this.cmsMain.ImageScalingSize = new System.Drawing.Size(20, 20); this.cmsMain.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.menuSysAgentMode, + this.menuRoutings, this.menuServers, + this.toolStripSeparator13, this.menuAddServers2, this.menuScanScreen2, this.menuUpdateSubscriptions, @@ -425,63 +430,73 @@ // // menuSysAgentMode // + resources.ApplyResources(this.menuSysAgentMode, "menuSysAgentMode"); this.menuSysAgentMode.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.menuKeepClear, this.menuGlobal, this.menuKeepNothing}); this.menuSysAgentMode.Name = "menuSysAgentMode"; - resources.ApplyResources(this.menuSysAgentMode, "menuSysAgentMode"); // // menuKeepClear // - this.menuKeepClear.Name = "menuKeepClear"; resources.ApplyResources(this.menuKeepClear, "menuKeepClear"); + this.menuKeepClear.Name = "menuKeepClear"; this.menuKeepClear.Click += new System.EventHandler(this.menuKeepClear_Click); // // menuGlobal // - this.menuGlobal.Name = "menuGlobal"; resources.ApplyResources(this.menuGlobal, "menuGlobal"); + this.menuGlobal.Name = "menuGlobal"; this.menuGlobal.Click += new System.EventHandler(this.menuGlobal_Click); // // menuKeepNothing // - this.menuKeepNothing.Name = "menuKeepNothing"; resources.ApplyResources(this.menuKeepNothing, "menuKeepNothing"); + this.menuKeepNothing.Name = "menuKeepNothing"; this.menuKeepNothing.Click += new System.EventHandler(this.menuKeepNothing_Click); // + // menuRoutings + // + resources.ApplyResources(this.menuRoutings, "menuRoutings"); + this.menuRoutings.Name = "menuRoutings"; + // // menuServers // - this.menuServers.Name = "menuServers"; resources.ApplyResources(this.menuServers, "menuServers"); + this.menuServers.Name = "menuServers"; + // + // toolStripSeparator13 + // + resources.ApplyResources(this.toolStripSeparator13, "toolStripSeparator13"); + this.toolStripSeparator13.Name = "toolStripSeparator13"; // // menuAddServers2 // - this.menuAddServers2.Name = "menuAddServers2"; resources.ApplyResources(this.menuAddServers2, "menuAddServers2"); + this.menuAddServers2.Name = "menuAddServers2"; this.menuAddServers2.Click += new System.EventHandler(this.menuAddServers_Click); // // menuScanScreen2 // - this.menuScanScreen2.Name = "menuScanScreen2"; resources.ApplyResources(this.menuScanScreen2, "menuScanScreen2"); + this.menuScanScreen2.Name = "menuScanScreen2"; this.menuScanScreen2.Click += new System.EventHandler(this.menuScanScreen_Click); // // menuUpdateSubscriptions // - this.menuUpdateSubscriptions.Name = "menuUpdateSubscriptions"; resources.ApplyResources(this.menuUpdateSubscriptions, "menuUpdateSubscriptions"); + this.menuUpdateSubscriptions.Name = "menuUpdateSubscriptions"; this.menuUpdateSubscriptions.Click += new System.EventHandler(this.menuUpdateSubscriptions_Click); // // toolStripSeparator2 // - this.toolStripSeparator2.Name = "toolStripSeparator2"; resources.ApplyResources(this.toolStripSeparator2, "toolStripSeparator2"); + this.toolStripSeparator2.Name = "toolStripSeparator2"; // // menuExit // - this.menuExit.Name = "menuExit"; resources.ApplyResources(this.menuExit, "menuExit"); + this.menuExit.Name = "menuExit"; this.menuExit.Click += new System.EventHandler(this.menuExit_Click); // // bgwScan @@ -492,30 +507,31 @@ // // groupBox1 // - this.groupBox1.Controls.Add(this.scMain); resources.ApplyResources(this.groupBox1, "groupBox1"); + this.groupBox1.Controls.Add(this.scMain); this.groupBox1.Name = "groupBox1"; this.groupBox1.TabStop = false; // // groupBox2 // + resources.ApplyResources(this.groupBox2, "groupBox2"); this.groupBox2.Controls.Add(this.txtMsgBox); this.groupBox2.Controls.Add(this.ssMain); - resources.ApplyResources(this.groupBox2, "groupBox2"); this.groupBox2.Name = "groupBox2"; this.groupBox2.TabStop = false; // // txtMsgBox // + resources.ApplyResources(this.txtMsgBox, "txtMsgBox"); this.txtMsgBox.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(41)))), ((int)(((byte)(49)))), ((int)(((byte)(52))))); this.txtMsgBox.BorderStyle = System.Windows.Forms.BorderStyle.None; - resources.ApplyResources(this.txtMsgBox, "txtMsgBox"); this.txtMsgBox.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(226)))), ((int)(((byte)(228))))); this.txtMsgBox.Name = "txtMsgBox"; this.txtMsgBox.ReadOnly = true; // // ssMain // + resources.ApplyResources(this.ssMain, "ssMain"); this.ssMain.ImageScalingSize = new System.Drawing.Size(20, 20); this.ssMain.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.toolSslSocksPortLab, @@ -527,7 +543,6 @@ this.toolSslBlank3, this.toolSslServerSpeed, this.toolSslBlank4}); - resources.ApplyResources(this.ssMain, "ssMain"); this.ssMain.Name = "ssMain"; this.ssMain.ItemClicked += new System.Windows.Forms.ToolStripItemClickedEventHandler(this.ssMain_ItemClicked); // @@ -538,8 +553,8 @@ // // toolSslSocksPort // - this.toolSslSocksPort.Name = "toolSslSocksPort"; resources.ApplyResources(this.toolSslSocksPort, "toolSslSocksPort"); + this.toolSslSocksPort.Name = "toolSslSocksPort"; // // toolSslBlank1 // @@ -554,8 +569,8 @@ // // toolSslHttpPort // - this.toolSslHttpPort.Name = "toolSslHttpPort"; resources.ApplyResources(this.toolSslHttpPort, "toolSslHttpPort"); + this.toolSslHttpPort.Name = "toolSslHttpPort"; // // toolSslBlank2 // @@ -577,8 +592,8 @@ // // toolSslBlank4 // - this.toolSslBlank4.Name = "toolSslBlank4"; resources.ApplyResources(this.toolSslBlank4, "toolSslBlank4"); + this.toolSslBlank4.Name = "toolSslBlank4"; // // panel1 // @@ -587,6 +602,7 @@ // // tsMain // + resources.ApplyResources(this.tsMain, "tsMain"); this.tsMain.ImageScalingSize = new System.Drawing.Size(32, 32); this.tsMain.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.tsbServer, @@ -604,75 +620,74 @@ this.tsbPromotion, this.toolStripSeparator11, this.tsbClose}); - resources.ApplyResources(this.tsMain, "tsMain"); this.tsMain.Name = "tsMain"; this.tsMain.TabStop = true; // // toolStripSeparator4 // - this.toolStripSeparator4.Name = "toolStripSeparator4"; resources.ApplyResources(this.toolStripSeparator4, "toolStripSeparator4"); + this.toolStripSeparator4.Name = "toolStripSeparator4"; // // tsbSub // + resources.ApplyResources(this.tsbSub, "tsbSub"); this.tsbSub.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.tsbSubSetting, this.tsbSubUpdate}); this.tsbSub.Image = global::v2rayN.Properties.Resources.sub; - resources.ApplyResources(this.tsbSub, "tsbSub"); this.tsbSub.Name = "tsbSub"; // // tsbSubSetting // - this.tsbSubSetting.Name = "tsbSubSetting"; resources.ApplyResources(this.tsbSubSetting, "tsbSubSetting"); + this.tsbSubSetting.Name = "tsbSubSetting"; this.tsbSubSetting.Click += new System.EventHandler(this.tsbSubSetting_Click); // // tsbSubUpdate // - this.tsbSubUpdate.Name = "tsbSubUpdate"; resources.ApplyResources(this.tsbSubUpdate, "tsbSubUpdate"); + this.tsbSubUpdate.Name = "tsbSubUpdate"; this.tsbSubUpdate.Click += new System.EventHandler(this.tsbSubUpdate_Click); // // tsbQRCodeSwitch // + resources.ApplyResources(this.tsbQRCodeSwitch, "tsbQRCodeSwitch"); this.tsbQRCodeSwitch.CheckOnClick = true; this.tsbQRCodeSwitch.ForeColor = System.Drawing.Color.Black; this.tsbQRCodeSwitch.Image = global::v2rayN.Properties.Resources.share; - resources.ApplyResources(this.tsbQRCodeSwitch, "tsbQRCodeSwitch"); this.tsbQRCodeSwitch.Name = "tsbQRCodeSwitch"; this.tsbQRCodeSwitch.CheckedChanged += new System.EventHandler(this.tsbQRCodeSwitch_CheckedChanged); // // toolStripSeparator8 // - this.toolStripSeparator8.Name = "toolStripSeparator8"; resources.ApplyResources(this.toolStripSeparator8, "toolStripSeparator8"); + this.toolStripSeparator8.Name = "toolStripSeparator8"; // // tsbSetting // + resources.ApplyResources(this.tsbSetting, "tsbSetting"); this.tsbSetting.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.tsbOptionSetting, this.tsbRoutingSetting}); this.tsbSetting.Image = global::v2rayN.Properties.Resources.option; - resources.ApplyResources(this.tsbSetting, "tsbSetting"); this.tsbSetting.Name = "tsbSetting"; // // tsbOptionSetting // - this.tsbOptionSetting.Name = "tsbOptionSetting"; resources.ApplyResources(this.tsbOptionSetting, "tsbOptionSetting"); + this.tsbOptionSetting.Name = "tsbOptionSetting"; this.tsbOptionSetting.Click += new System.EventHandler(this.tsbOptionSetting_Click); // // tsbRoutingSetting // - this.tsbRoutingSetting.Name = "tsbRoutingSetting"; resources.ApplyResources(this.tsbRoutingSetting, "tsbRoutingSetting"); + this.tsbRoutingSetting.Name = "tsbRoutingSetting"; this.tsbRoutingSetting.Click += new System.EventHandler(this.tsbRoutingSetting_Click); // // toolStripSeparator5 // - this.toolStripSeparator5.Name = "toolStripSeparator5"; resources.ApplyResources(this.toolStripSeparator5, "toolStripSeparator5"); + this.toolStripSeparator5.Name = "toolStripSeparator5"; // // tsbReload // @@ -682,44 +697,45 @@ // // toolStripSeparator7 // - this.toolStripSeparator7.Name = "toolStripSeparator7"; resources.ApplyResources(this.toolStripSeparator7, "toolStripSeparator7"); + this.toolStripSeparator7.Name = "toolStripSeparator7"; // // tsbCheckUpdate // + resources.ApplyResources(this.tsbCheckUpdate, "tsbCheckUpdate"); this.tsbCheckUpdate.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.tsbCheckUpdateN, this.tsbCheckUpdateCore, this.tsbCheckUpdateXrayCore}); this.tsbCheckUpdate.Image = global::v2rayN.Properties.Resources.checkupdate; - resources.ApplyResources(this.tsbCheckUpdate, "tsbCheckUpdate"); this.tsbCheckUpdate.Name = "tsbCheckUpdate"; // // tsbCheckUpdateN // - this.tsbCheckUpdateN.Name = "tsbCheckUpdateN"; resources.ApplyResources(this.tsbCheckUpdateN, "tsbCheckUpdateN"); + this.tsbCheckUpdateN.Name = "tsbCheckUpdateN"; this.tsbCheckUpdateN.Click += new System.EventHandler(this.tsbCheckUpdateN_Click); // // tsbCheckUpdateCore // - this.tsbCheckUpdateCore.Name = "tsbCheckUpdateCore"; resources.ApplyResources(this.tsbCheckUpdateCore, "tsbCheckUpdateCore"); + this.tsbCheckUpdateCore.Name = "tsbCheckUpdateCore"; this.tsbCheckUpdateCore.Click += new System.EventHandler(this.tsbCheckUpdateCore_Click); // // tsbCheckUpdateXrayCore // - this.tsbCheckUpdateXrayCore.Name = "tsbCheckUpdateXrayCore"; resources.ApplyResources(this.tsbCheckUpdateXrayCore, "tsbCheckUpdateXrayCore"); + this.tsbCheckUpdateXrayCore.Name = "tsbCheckUpdateXrayCore"; this.tsbCheckUpdateXrayCore.Click += new System.EventHandler(this.tsbCheckUpdateXrayCore_Click); // // toolStripSeparator10 // - this.toolStripSeparator10.Name = "toolStripSeparator10"; resources.ApplyResources(this.toolStripSeparator10, "toolStripSeparator10"); + this.toolStripSeparator10.Name = "toolStripSeparator10"; // // tsbHelp // + resources.ApplyResources(this.tsbHelp, "tsbHelp"); this.tsbHelp.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.tsbAbout, this.tsbV2rayWebsite, @@ -727,50 +743,49 @@ this.tsbLanguageDef, this.tsbLanguageZhHans}); this.tsbHelp.Image = global::v2rayN.Properties.Resources.help; - resources.ApplyResources(this.tsbHelp, "tsbHelp"); this.tsbHelp.Name = "tsbHelp"; // // tsbAbout // - this.tsbAbout.Name = "tsbAbout"; resources.ApplyResources(this.tsbAbout, "tsbAbout"); + this.tsbAbout.Name = "tsbAbout"; this.tsbAbout.Click += new System.EventHandler(this.tsbAbout_Click); // // tsbV2rayWebsite // - this.tsbV2rayWebsite.Name = "tsbV2rayWebsite"; resources.ApplyResources(this.tsbV2rayWebsite, "tsbV2rayWebsite"); + this.tsbV2rayWebsite.Name = "tsbV2rayWebsite"; this.tsbV2rayWebsite.Click += new System.EventHandler(this.tsbV2rayWebsite_Click); // // toolStripSeparator12 // - this.toolStripSeparator12.Name = "toolStripSeparator12"; resources.ApplyResources(this.toolStripSeparator12, "toolStripSeparator12"); + this.toolStripSeparator12.Name = "toolStripSeparator12"; // // tsbLanguageDef // - this.tsbLanguageDef.Name = "tsbLanguageDef"; resources.ApplyResources(this.tsbLanguageDef, "tsbLanguageDef"); + this.tsbLanguageDef.Name = "tsbLanguageDef"; this.tsbLanguageDef.Click += new System.EventHandler(this.tsbLanguageDef_Click); // // tsbLanguageZhHans // - this.tsbLanguageZhHans.Name = "tsbLanguageZhHans"; resources.ApplyResources(this.tsbLanguageZhHans, "tsbLanguageZhHans"); + this.tsbLanguageZhHans.Name = "tsbLanguageZhHans"; this.tsbLanguageZhHans.Click += new System.EventHandler(this.tsbLanguageZhHans_Click); // // tsbPromotion // + resources.ApplyResources(this.tsbPromotion, "tsbPromotion"); this.tsbPromotion.ForeColor = System.Drawing.Color.Black; this.tsbPromotion.Image = global::v2rayN.Properties.Resources.promotion; - resources.ApplyResources(this.tsbPromotion, "tsbPromotion"); this.tsbPromotion.Name = "tsbPromotion"; this.tsbPromotion.Click += new System.EventHandler(this.tsbPromotion_Click); // // toolStripSeparator11 // - this.toolStripSeparator11.Name = "toolStripSeparator11"; resources.ApplyResources(this.toolStripSeparator11, "toolStripSeparator11"); + this.toolStripSeparator11.Name = "toolStripSeparator11"; // // tsbClose // @@ -904,6 +919,8 @@ private System.Windows.Forms.ToolStripMenuItem tsbRoutingSetting; private System.Windows.Forms.ToolStripMenuItem tsbCheckUpdateXrayCore; private System.Windows.Forms.ToolStripMenuItem menuClearServerStatistics; + private System.Windows.Forms.ToolStripMenuItem menuRoutings; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator13; } } diff --git a/v2rayN/v2rayN/Forms/MainForm.cs b/v2rayN/v2rayN/Forms/MainForm.cs index 54dfd491..a0525134 100644 --- a/v2rayN/v2rayN/Forms/MainForm.cs +++ b/v2rayN/v2rayN/Forms/MainForm.cs @@ -47,6 +47,7 @@ namespace v2rayN.Forms private void MainForm_Load(object sender, EventArgs e) { ConfigHandler.LoadConfig(ref config); + ConfigHandler.InitBuiltinRouting(ref config); v2rayHandler = new V2rayHandler(); v2rayHandler.ProcessEvent += v2rayHandler_ProcessEvent; @@ -73,6 +74,7 @@ namespace v2rayN.Forms { InitServersView(); RefreshServers(); + RefreshRoutingsMenu(); RestoreUI(); LoadV2ray(); @@ -477,7 +479,6 @@ namespace v2rayN.Forms fm.EditIndex = index; if (fm.ShowDialog() == DialogResult.OK) { - //刷新 RefreshServers(); LoadV2ray(); } @@ -568,7 +569,6 @@ namespace v2rayN.Forms { ConfigHandler.RemoveServer(ref config, lvSelecteds[k]); } - //刷新 RefreshServers(); LoadV2ray(); @@ -583,7 +583,6 @@ namespace v2rayN.Forms { config.vmess = servers; } - //刷新 RefreshServers(); LoadV2ray(); UI.Show(string.Format(UIRes.I18N("RemoveDuplicateServerResult"), oldCount, newCount)); @@ -598,7 +597,6 @@ namespace v2rayN.Forms } if (ConfigHandler.CopyServer(ref config, index) == 0) { - //刷新 RefreshServers(); } } @@ -737,7 +735,6 @@ namespace v2rayN.Forms OptionSettingForm fm = new OptionSettingForm(); if (fm.ShowDialog() == DialogResult.OK) { - //刷新 RefreshServers(); LoadV2ray(); } @@ -745,10 +742,10 @@ namespace v2rayN.Forms private void tsbRoutingSetting_Click(object sender, EventArgs e) { - RoutingSettingForm fm = new RoutingSettingForm(); + var fm = new RoutingSettingForm(); if (fm.ShowDialog() == DialogResult.OK) { - //刷新 + RefreshRoutingsMenu(); RefreshServers(); LoadV2ray(); } @@ -780,7 +777,6 @@ namespace v2rayN.Forms } if (ConfigHandler.SetDefaultServer(ref config, index) == 0) { - //刷新 RefreshServers(); LoadV2ray(); } @@ -837,7 +833,6 @@ namespace v2rayN.Forms if (ConfigHandler.AddCustomServer(ref config, fileName) == 0) { - //刷新 RefreshServers(); //LoadV2ray(); UI.Show(UIRes.I18N("SuccessfullyImportedCustomServer")); @@ -869,10 +864,11 @@ namespace v2rayN.Forms private void menuAddServers_Click(object sender, EventArgs e) { string clipboardData = Utils.GetClipboardData(); - int result = AddBatchServers(clipboardData); - if (result > 0) + int ret = MainFormHandler.Instance.AddBatchServers(config, clipboardData); + if (ret > 0) { - UI.Show(string.Format(UIRes.I18N("SuccessfullyImportedServerViaClipboard"), result)); + RefreshServers(); + UI.Show(string.Format(UIRes.I18N("SuccessfullyImportedServerViaClipboard"), ret)); } } @@ -882,23 +878,6 @@ namespace v2rayN.Forms bgwScan.RunWorkerAsync(); } - private int AddBatchServers(string clipboardData, string subid = "") - { - int counter; - int _Add() - { - return ConfigHandler.AddBatchServers(ref config, clipboardData, subid); - } - counter = _Add(); - if (counter < 1) - { - clipboardData = Utils.Base64Decode(clipboardData); - counter = _Add(); - } - RefreshServers(); - return counter; - } - private void menuUpdateSubscriptions_Click(object sender, EventArgs e) { UpdateSubscriptionProcess(); @@ -1388,8 +1367,10 @@ namespace v2rayN.Forms } else { - if (AddBatchServers(result) > 0) + int ret = MainFormHandler.Instance.AddBatchServers(config, result); + if (ret > 0) { + RefreshServers(); UI.Show(UIRes.I18N("SuccessfullyImportedServerViaScan")); } } @@ -1456,7 +1437,8 @@ namespace v2rayN.Forms ConfigHandler.RemoveServerViaSubid(ref config, id); AppendText(false, $"{hashCode}{UIRes.I18N("MsgClearSubscription")}"); RefreshServers(); - if (AddBatchServers(result, id) > 0) + int ret = MainFormHandler.Instance.AddBatchServers(config, result, id); + if (ret > 0) { } else @@ -1509,5 +1491,55 @@ namespace v2rayN.Forms #endregion + + + #region RoutingsMenu + + /// + /// + /// + private void RefreshRoutingsMenu() + { + menuRoutings.DropDownItems.Clear(); + + List lst = new List(); + for (int k = 0; k < config.routings.Count; k++) + { + var item = config.routings[k]; + string name = item.remarks; + + ToolStripMenuItem ts = new ToolStripMenuItem(name) + { + Tag = k + }; + if (config.routingIndex.Equals(k)) + { + ts.Checked = true; + } + ts.Click += new EventHandler(ts_Routing_Click); + lst.Add(ts); + } + menuRoutings.DropDownItems.AddRange(lst.ToArray()); + } + + private void ts_Routing_Click(object sender, EventArgs e) + { + try + { + ToolStripItem ts = (ToolStripItem)sender; + int index = Utils.ToInt(ts.Tag); + + if (ConfigHandler.SetDefaultRouting(ref config, index) == 0) + { + RefreshRoutingsMenu(); + LoadV2ray(); + } + } + catch + { + } + } + #endregion + } } diff --git a/v2rayN/v2rayN/Forms/MainForm.resx b/v2rayN/v2rayN/Forms/MainForm.resx index 08f3f3fc..46211fac 100644 --- a/v2rayN/v2rayN/Forms/MainForm.resx +++ b/v2rayN/v2rayN/Forms/MainForm.resx @@ -117,214 +117,712 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Fill + + Remove duplicate servers - - 3, 17 - - - 327, 17 - - + 355, 22 - - Add [VMess] server + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + + 355, 22 + + + 97, 53 + + 355, 22 Add [VLESS] server - - 355, 22 + + 2 - - Add [Shadowsocks] server + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 355, 22 + + Restart service + + + menuCopyServer + + + 264, 22 + + + groupBox2 + + + menuMoveUp Add [Socks] server + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ImageAboveText + + + System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 语言-[中文简体] + + + NoControl + + + Settings + + + tsbHelp + + + + 0 + + + False + + + toolStripSeparator6 + 355, 22 - - Add [Trojan] server + + 99, 53 - - 355, 22 + + Update subscriptions - - Add a custom configuration server + + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 355, 22 + + 187, 22 - - Import bulk URL from clipboard (Ctrl+V) + + tsbSetting - - 355, 22 - - - Scan QR code on the screen (Ctrl+S) - - - 352, 6 + + toolSslBlank2 355, 22 - - Remove selected servers (Delete) - - + 355, 22 - - Remove duplicate servers + + tsbCheckUpdateN + + + Do not change system proxy + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuExport2SubContent + + + toolStripSeparator7 + + + Update v2flyCore + + + Magenta + + + menuKeepNothing 355, 22 - - Clone selected server + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 355, 22 + + Fill - - Set as active server (Enter) + + 52, 21 - - 352, 6 + + Share + + + Subscriptions + + + 952, 327 + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 355, 22 - - Move to top (T) - - - 355, 22 - - - Up (U) - - - 355, 22 - - - Down (D) - - - 355, 22 - - - Move to bottom (B) - - - 355, 22 - - - Select All (Ctrl+A) - - - 352, 6 - - - 355, 22 - - - Test servers ping (Ctrl+P) - - - 355, 22 - - - Test servers with tcping (Ctrl+O) - - - 355, 22 - - - Test servers real delay (Ctrl+R) - - - 355, 22 - - - Test servers download speed (Ctrl+T) - - - 355, 22 - - - Test current service status - - - 355, 22 - - - Clear all service statistics - - - 352, 6 - - - 355, 22 - Export selected server for client configuration - - 355, 22 + + tsbRoutingSetting + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Export selected server for server configuration - - 355, 22 + + 0, 21 - - Export share URLs to clipboard (Ctrl+C) + + toolStripSeparator11 - - 355, 22 + + 952, 56 - - Export subscription (base64) share to clipboard + + System.Windows.Forms.SplitContainer, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - Magenta + + 0 - - 64, 53 + + Test servers real delay (Ctrl+R) - - Servers + + menuTcpingServer - + ImageAboveText + + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + 356, 622 - - cmsLv + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + v2rayN + + + 355, 22 + + + toolStripSeparator1 + + + 3 + + + System.Windows.Forms.ToolStripDropDownButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 203, 22 + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tsbClose + + + 125, 22 + + + 256, 307 + + + 187, 22 + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuPingServer + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tsbLanguageDef + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsIAAA7CARUoSoAAAAE3SURBVFhH7ZaBDQIhDEVvBEdwBDfQDXQER3AD3cARdAPd + QDfSDbQvuSb1AicFjJrwkxcN0FIolOuamv5VE2E+gLaPayWchEcE+hhTXVPhIoQmDcFYbKpoJtwEdX4X + jgIrXfTwnzb6dBw22BaJVdjJmWQs1/SdBRtE0U5cBXW2oSFRO0HtSEeW2FZ1wsq9sjuRdTDVAXnNuWLY + 6JnAl0sYa/Q5q1dhq35ci+Bkq2HJvbZpxGeybAAuw4Fq+cnW1wPITgHFYxvBUw+qHEIL1yq1vDKhVlH3 + NQwF4JkcFRWiUAB7IVW2FFPO3YqlgPd+LJf02e8Fdi3rMdIAcLDuf9UpeT0IS0G/hvhPm305vSl7EQFY + B6zCvozvYGzRM8zEoeg5TPZwDaGvpHQni1yzSxbXPW9q+hF13ROHuJnQcjbhtQAAAABJRU5ErkJggg== + + + + Servers + + + 3 + + + 3, 17 + + + 355, 22 + + + System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Fill + + + 6, 56 + + + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 220, 21 + + + menuAddCustomServer + + + menuMoveDown + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Import bulk URL from clipboard + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Move to bottom (B) + + + toolSslBlank3 + + + System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 6, 12 + + + 48, 53 + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 355, 22 + + + System.ComponentModel.BackgroundWorker, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panel1 + + + 206, 21 + + + 0 + + + 686, 307 + + + toolStripSeparator4 + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuKeepClear + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Bottom + + + Export share URLs to clipboard (Ctrl+C) + + + scMain.Panel2 + + + System.Windows.Forms.ToolStripDropDownButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 39, 21 + + + menuAddServers2 + + + Fill + + + 3 + + + Add [VMess] server + + + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + v2rayN.Forms.BaseForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + + + tsbAbout + + + 206, 21 + + + toolStripSeparator5 + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + 352, 6 + + + tsbPromotion + + + 128, 53 + + + 4, 4, 4, 4 + + + Test servers with tcping (Ctrl+O) + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 352, 6 + + + groupBox1 + + + 206, 21 + + + 2 + + + 125, 22 + + + Clear all service statistics + + + scMain.Panel2 + + + menuRoutings + + + 161, 22 + + + 355, 22 + + + 187, 22 + + + 6, 56 + + + Test servers download speed (Ctrl+T) + + + ssMain + + + 686 + + + tsbTestMe + + + 265, 170 + + + 243, 22 + + + $this + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + scMain + + + Check for updates + + + tsbCheckUpdateXrayCore + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 0, 21 + + + toolSslServerSpeed + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 4 + + + System.Windows.Forms.SplitterPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + scMain + + + 203, 22 + + + HTTP: + + + Remove selected servers (Delete) + + + 0 + + + Help + + + menuSelectAll + + + Move to top (T) + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Scan QR code on the screen (Ctrl+S) + + + ImageAboveText + + + 1 + + + Promotion + + + menuAddServers + + + 355, 22 + + + menuAddVmessServer + + + tsbLanguageZhHans + + + menuRemoveDuplicateServer + + + BottomCenter + + + menuExport2ShareUrl + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tsMain + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + SOCKS5: + + + v2rayN (this software) + + + Magenta + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 0, 66 + + + 5 + + + tsbV2rayWebsite + + + Server + + + v2rayN.Base.ListViewFlickerFree, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + + + menuAddShadowsocksServer + + + txtMsgBox + + + toolSslBlank4 + + + menuAddTrojanServer + + + 261, 6 + + + v2rayN + + + Language-[English] + + + tsbSubSetting + + + 264, 22 + + + 0 + + + Fill + + + Routing + + + Add [Trojan] server + + + 161, 22 + + + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + ImageAboveText System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - Fill + + 0, 393 + + + 352, 6 + + + System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + V2Ray Website + + + No + + + 1 + + + System.Windows.Forms.SplitterPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + OptionSetting + + + menuMoveTop + + + tsbCheckUpdateCore @@ -343,1115 +841,641 @@ ZW0uRHJhd2luZy5HcmFwaGljc1VuaXQBAAAAB3ZhbHVlX18ACAMAAAADAAAACw== - - 0, 0 - - - 686, 307 - - - - 0 - - - lvServers - - - v2rayN.Base.ListViewFlickerFree, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null - - - scMain.Panel1 - - - 0 - - - scMain.Panel1 - - - System.Windows.Forms.SplitterPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - scMain - - - 0 - - - Fill - - - 0, 0 - - - 4, 4, 4, 4 - - - 256, 307 - - - 2 - - - qrCodeControl - - - v2rayN.Forms.QRCodeControl, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null - - - scMain.Panel2 - - - 0 - - - scMain.Panel2 - - - System.Windows.Forms.SplitterPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - scMain - - - 1 - - - 100 - - - 946, 307 - - - 686 - - - 0 - - - scMain - - - System.Windows.Forms.SplitContainer, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 0 - - - 17, 17 - - - 137, 17 - - - NoControl - - - 262, 22 - - - Clear system proxy - - - 262, 22 - - - Set system proxy (global mode) - - - 262, 22 - - - Do not change system proxy - - - 264, 22 - - - Http proxy - - - 264, 22 - - - Server - - - 264, 22 - - - Import bulk URL from clipboard - - - 264, 22 - - - Scan QR code on the screen - - - 264, 22 - - - Update subscriptions - - - 261, 6 - - - 264, 22 - - - Exit - - - 265, 142 - - - cmsMain - - - System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - v2rayN - - - True - - - 498, 17 - - - Fill - - - 0, 66 - - - 952, 327 - - - 0 - - - Servers list - - - groupBox1 - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 2 - - - Fill - - - 3, 17 - - - 0 - - - True - - - Vertical - - - 946, 154 - - - 3 - - - txtMsgBox - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 0 - - - 228, 18 - - - 微软雅黑, 8pt - - - 52, 21 - - - SOCKS5: - - - 0, 21 - - - 微软雅黑, 8pt - - - 206, 21 - - - 微软雅黑, 8pt - - - 39, 21 - - - HTTP: - - - 0, 21 - - - 微软雅黑, 8pt - - - 206, 21 - - - 微软雅黑, 8pt - - - 206, 21 - - - False - - - 微软雅黑, 8pt - - - No - - - 220, 21 - - - SPEED Disabled - - - MiddleRight - - - 0, 21 - - - 3, 171 - - - 946, 26 - - - 0 - - - statusStrip1 - - - ssMain - - - System.Windows.Forms.StatusStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 1 - - - Bottom - - - 0, 393 - - - 952, 200 - - - 3 - - - Informations - - - groupBox2 - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 3 - - - Top - - - 0, 56 - - - 952, 10 - - - 2 - - - panel1 - - - System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 4 - - - 409, 17 - - - 6, 56 - - - 125, 22 - - - Settings - - - 125, 22 - - - Updates - - - Magenta - - - 99, 53 - - - Subscriptions - - - ImageAboveText - - - Magenta - - - 45, 53 - - - Share - - - BottomCenter - - - ImageAboveText - - - 6, 56 - - - 161, 22 - - - OptionSetting - - - 161, 22 - - - RoutingSetting - - - Magenta - - - 67, 53 - - - Settings + + menuScanScreen ImageAboveText + + cmsLv + + + toolStripSeparator12 + 6, 56 - - - iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAE3SURBVFhH7ZaBDQIhDEVvBEdwBDfQDXQER3AD3cARdAPd - QDfSDbQvuSb1AicFjJrwkxcN0FIolOuamv5VE2E+gLaPayWchEcE+hhTXVPhIoQmDcFYbKpoJtwEdX4X - jgIrXfTwnzb6dBw22BaJVdjJmWQs1/SdBRtE0U5cBXW2oSFRO0HtSEeW2FZ1wsq9sjuRdTDVAXnNuWLY - 6JnAl0sYa/Q5q1dhq35ci+Bkq2HJvbZpxGeybAAuw4Fq+cnW1wPITgHFYxvBUw+qHEIL1yq1vDKhVlH3 - NQwF4JkcFRWiUAB7IVW2FFPO3YqlgPd+LJf02e8Fdi3rMdIAcLDuf9UpeT0IS0G/hvhPm305vSl7EQFY - B6zCvozvYGzRM8zEoeg5TPZwDaGvpHQni1yzSxbXPW9q+hF13ROHuJnQcjbhtQAAAABJRU5ErkJggg== - + + toolSslBlank1 - - BottomCenter + + scMain.Panel1 - - Magenta + + tsbReload - - 97, 53 + + tsbSubUpdate - - Restart service + + 微软雅黑, 8pt - + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + SPEED Disabled + + + 355, 22 + + + 67, 53 + + + menuSysAgentMode + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + ImageAboveText - + + Export subscription (base64) share to clipboard + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuScanScreen2 + + + cmsMain + + + 264, 22 + + + menuServers + + + menuUpdateSubscriptions + + + $this + + + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolStripSeparator13 + + + RoutingSetting + + + System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tsbQRCodeSwitch + + + 3, 171 + + + True + + + 355, 22 + + 6, 56 - - 203, 22 + + 952, 10 - - v2rayN (this software) + + Updates - - 203, 22 + + 264, 22 - - Update v2flyCore + + 0 - - 203, 22 - - - Update XrayCore - - - Magenta - - - 128, 53 - - - Check for updates - - - ImageAboveText - - - 6, 56 - - - 187, 22 - - - v2rayN Project - - - 187, 22 - - - V2Ray Website - - - 184, 6 - - - 187, 22 - - - Language-[English] - - - 187, 22 - - - 语言-[中文简体] - - - Magenta - - - 48, 53 - - - Help - - - ImageAboveText - - - Magenta + + toolStripSeparator8 89, 53 - - Promotion + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + BottomCenter + + + Test servers ping (Ctrl+P) + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 355, 22 + + + 264, 22 + + + System.Windows.Forms.ToolStripDropDownButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.ToolStripDropDownButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Top + + + menuSetDefaultServer + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Settings + + + 45, 53 + + + System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Http proxy + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 355, 22 + + + groupBox1 + + + MainForm + + + toolStripSeparator9 + + + menuExit + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Servers list + + + System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + lvServers + + + menuRealPingServer + + + Magenta + + + System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuGlobal + + + 100 + + + 2 + + + 4, 4, 4, 4 + + + Magenta + + + 355, 22 + + + v2rayN Project + + + 0 + + + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Select All (Ctrl+A) + + + Informations + + + $this + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuSpeedServer + + + 355, 22 + + + menuRemoveServer + + + tsbServer + + + Test current service status + + + 355, 22 + + + 946, 154 + + + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.NotifyIcon, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + scMain + + + Down (D) + + + 352, 6 + + + Magenta + + + 243, 22 + + + 355, 22 + + + tsbSub + + + Magenta + + + ImageAboveText + + + Clone selected server + + + 0, 0 + + + 355, 22 + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + tsbCheckUpdate + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 微软雅黑, 8pt + + + Vertical + + + 243, 22 + + + 355, 22 + + + v2rayN.Forms.QRCodeControl, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + + + 微软雅黑, 8pt + + + System.Windows.Forms.ToolStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 0, 0 + + + qrCodeControl + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Clear system proxy + + + 355, 22 + + + 0 + + + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 微软雅黑, 8pt + + + groupBox2 + + + ImageAboveText + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 203, 22 + + + 184, 6 + + + 0, 0 + + + Up (U) + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + notifyMain + + + Set system proxy + + + System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + MiddleRight + + + tsbOptionSetting + + + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuAddSocksServer + + + scMain.Panel1 + + + 微软雅黑, 8pt + + + 64, 53 + + + Magenta + + + 946, 26 + + + 355, 22 + + + Set as active server (Enter) + + + menuAddVlessServer + + + 946, 307 + + + 6, 56 + + + Add [Shadowsocks] server + + + 261, 6 + + + 微软雅黑, 8pt + + + 952, 593 + + + Scan QR code on the screen + + + toolSslSocksPort + + + toolStripSeparator10 + + + toolSslHttpPortLab + + + menuMoveBottom + + + 1 + + + Magenta + + + menuExport2ClientConfig + + + 187, 22 + + + menuExport2ServerConfig + + + 0 + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 ImageAboveText + + 264, 22 + 6, 56 - - - iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAySURBVFhH7c6xDQAgCEVBRnVTHU2ZABuMxV3yOvJDAAA/ - GqfZVG6X8mg1dfUAAPBQxAZd0SJruVXHWwAAAABJRU5ErkJggg== - + + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + Magenta 52, 53 + + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Exit + + + menuClearServerStatistics + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 0, 56 + Close - - ImageAboveText + + 264, 22 - - 0, 0 + + 0, 21 - - 952, 56 + + 0 - - 1 + + Import bulk URL from clipboard (Ctrl+V) - - tsMain + + Update XrayCore - - System.Windows.Forms.ToolStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + toolStripSeparator2 - - $this + + toolSslSocksPortLab - - 5 + + Add a custom configuration server + + toolSslHttpPort + + + bgwScan + + + System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 952, 200 + + + statusStrip1 + + + System.Windows.Forms.ToolStripDropDownButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Fill + + + 3, 17 + + + toolStripSeparator3 + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsIAAA7CARUoSoAAAAAySURBVFhH7c6xDQAgCEVBRnVTHU2ZABuMxV3yOvJDAAA/ + GqfZVG6X8mg1dfUAAPBQxAZd0SJruVXHWwAAAABJRU5ErkJggg== + + + + 355, 22 + + + 355, 22 + + + System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.StatusStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 228, 18 + + + zh-Hans + True 65 - - 6, 12 - - - 952, 593 - - - 4, 4, 4, 4 - - - v2rayN - - - menuAddVmessServer - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuAddVlessServer - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuAddShadowsocksServer - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuAddSocksServer - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuAddTrojanServer - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuAddCustomServer - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuAddServers - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuScanScreen - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - toolStripSeparator1 - - - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuRemoveServer - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuRemoveDuplicateServer - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuCopyServer - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuSetDefaultServer - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - toolStripSeparator3 - - - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuMoveTop - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuMoveUp - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuMoveDown - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuMoveBottom - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuSelectAll - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - toolStripSeparator9 - - - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuPingServer - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuTcpingServer - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuRealPingServer - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuSpeedServer - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tsbTestMe - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuClearServerStatistics - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - toolStripSeparator6 - - - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuExport2ClientConfig - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuExport2ServerConfig - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuExport2ShareUrl - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuExport2SubContent - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tsbServer - - - System.Windows.Forms.ToolStripDropDownButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - notifyMain - - - System.Windows.Forms.NotifyIcon, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuSysAgentMode - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuKeepClear - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuGlobal - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuKeepNothing - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuServers - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuAddServers2 - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuScanScreen2 - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuUpdateSubscriptions - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - toolStripSeparator2 - - - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuExit - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - bgwScan - - - System.ComponentModel.BackgroundWorker, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - toolSslSocksPortLab - - - System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - toolSslSocksPort - - - System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - toolSslBlank1 - - - System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - toolSslHttpPortLab - - - System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - toolSslHttpPort - - - System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - toolSslBlank2 - - - System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - toolSslBlank3 - - - System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - toolSslServerSpeed - - - System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - toolSslBlank4 - - - System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - toolStripSeparator4 - - - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tsbSub - - - System.Windows.Forms.ToolStripDropDownButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tsbSubSetting - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tsbSubUpdate - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tsbQRCodeSwitch - - - System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - toolStripSeparator8 - - - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tsbSetting - - - System.Windows.Forms.ToolStripDropDownButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tsbOptionSetting - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tsbRoutingSetting - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - toolStripSeparator5 - - - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tsbReload - - - System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - toolStripSeparator7 - - - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tsbCheckUpdate - - - System.Windows.Forms.ToolStripDropDownButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tsbCheckUpdateN - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tsbCheckUpdateCore - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tsbCheckUpdateXrayCore - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - toolStripSeparator10 - - - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tsbHelp - - - System.Windows.Forms.ToolStripDropDownButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tsbAbout - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tsbV2rayWebsite - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - toolStripSeparator12 - - - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tsbLanguageDef - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tsbLanguageZhHans - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tsbPromotion - - - System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - toolStripSeparator11 - - - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tsbClose - - - System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - MainForm - - - v2rayN.Forms.BaseForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null - + + 137, 17 + + + 498, 17 + + + 17, 17 + + + 409, 17 + + + 327, 17 + \ No newline at end of file diff --git a/v2rayN/v2rayN/Forms/MainForm.zh-Hans.resx b/v2rayN/v2rayN/Forms/MainForm.zh-Hans.resx index f75d3073..42204a5f 100644 --- a/v2rayN/v2rayN/Forms/MainForm.zh-Hans.resx +++ b/v2rayN/v2rayN/Forms/MainForm.zh-Hans.resx @@ -292,14 +292,8 @@ 批量导出订阅内容至剪贴板(多选) - - 73, 53 - - - 服务器 - - 301, 600 + 301, 622 @@ -318,20 +312,26 @@ ZW0uRHJhd2luZy5HcmFwaGljc1VuaXQBAAAAB3ZhbHVlX18ACAMAAAADAAAACw== + + 73, 53 + + + 服务器 + - 228, 22 + 172, 22 清除系统代理 - 228, 22 + 172, 22 - 自动配置系统代理(全局模式) + 自动配置系统代理 - 228, 22 + 172, 22 不改变系统代理 @@ -342,12 +342,21 @@ 系统代理 + + 195, 22 + + + 路由 + 195, 22 服务器 + + 192, 6 + 195, 22 @@ -376,7 +385,7 @@ 退出 - 196, 142 + 196, 192 服务器列表 @@ -388,13 +397,13 @@ 信息 - 124, 22 + 180, 22 订阅设置 - 124, 22 + 180, 22 更新订阅 diff --git a/v2rayN/v2rayN/Forms/RoutingRuleSettingDetailsForm.Designer.cs b/v2rayN/v2rayN/Forms/RoutingRuleSettingDetailsForm.Designer.cs new file mode 100644 index 00000000..d33ade0f --- /dev/null +++ b/v2rayN/v2rayN/Forms/RoutingRuleSettingDetailsForm.Designer.cs @@ -0,0 +1,218 @@ +namespace v2rayN.Forms +{ + partial class RoutingRuleSettingDetailsForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(RoutingRuleSettingDetailsForm)); + this.panel1 = new System.Windows.Forms.Panel(); + this.panel3 = new System.Windows.Forms.Panel(); + this.clbProtocol = new System.Windows.Forms.CheckedListBox(); + this.label3 = new System.Windows.Forms.Label(); + this.txtPort = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.labRoutingTips = new System.Windows.Forms.Label(); + this.label4 = new System.Windows.Forms.Label(); + this.cmbOutboundTag = new System.Windows.Forms.ComboBox(); + this.panel4 = new System.Windows.Forms.Panel(); + this.btnClose = new System.Windows.Forms.Button(); + this.btnOK = new System.Windows.Forms.Button(); + this.panel2 = new System.Windows.Forms.Panel(); + this.groupBox2 = new System.Windows.Forms.GroupBox(); + this.txtIP = new System.Windows.Forms.TextBox(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.txtDomain = new System.Windows.Forms.TextBox(); + this.panel3.SuspendLayout(); + this.panel4.SuspendLayout(); + this.panel2.SuspendLayout(); + this.groupBox2.SuspendLayout(); + this.groupBox1.SuspendLayout(); + this.SuspendLayout(); + // + // panel1 + // + resources.ApplyResources(this.panel1, "panel1"); + this.panel1.Name = "panel1"; + // + // panel3 + // + this.panel3.Controls.Add(this.clbProtocol); + this.panel3.Controls.Add(this.label3); + this.panel3.Controls.Add(this.txtPort); + this.panel3.Controls.Add(this.label1); + this.panel3.Controls.Add(this.labRoutingTips); + this.panel3.Controls.Add(this.label4); + this.panel3.Controls.Add(this.cmbOutboundTag); + resources.ApplyResources(this.panel3, "panel3"); + this.panel3.Name = "panel3"; + // + // clbProtocol + // + this.clbProtocol.CheckOnClick = true; + resources.ApplyResources(this.clbProtocol, "clbProtocol"); + this.clbProtocol.FormattingEnabled = true; + this.clbProtocol.Items.AddRange(new object[] { + resources.GetString("clbProtocol.Items"), + resources.GetString("clbProtocol.Items1"), + resources.GetString("clbProtocol.Items2")}); + this.clbProtocol.MultiColumn = true; + this.clbProtocol.Name = "clbProtocol"; + // + // label3 + // + resources.ApplyResources(this.label3, "label3"); + this.label3.Name = "label3"; + // + // txtPort + // + resources.ApplyResources(this.txtPort, "txtPort"); + this.txtPort.Name = "txtPort"; + // + // label1 + // + resources.ApplyResources(this.label1, "label1"); + this.label1.Name = "label1"; + // + // labRoutingTips + // + this.labRoutingTips.ForeColor = System.Drawing.Color.Brown; + resources.ApplyResources(this.labRoutingTips, "labRoutingTips"); + this.labRoutingTips.Name = "labRoutingTips"; + // + // label4 + // + resources.ApplyResources(this.label4, "label4"); + this.label4.Name = "label4"; + // + // cmbOutboundTag + // + this.cmbOutboundTag.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cmbOutboundTag.FormattingEnabled = true; + this.cmbOutboundTag.Items.AddRange(new object[] { + resources.GetString("cmbOutboundTag.Items"), + resources.GetString("cmbOutboundTag.Items1"), + resources.GetString("cmbOutboundTag.Items2")}); + resources.ApplyResources(this.cmbOutboundTag, "cmbOutboundTag"); + this.cmbOutboundTag.Name = "cmbOutboundTag"; + // + // panel4 + // + this.panel4.Controls.Add(this.btnClose); + this.panel4.Controls.Add(this.btnOK); + resources.ApplyResources(this.panel4, "panel4"); + this.panel4.Name = "panel4"; + // + // btnClose + // + this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel; + resources.ApplyResources(this.btnClose, "btnClose"); + this.btnClose.Name = "btnClose"; + this.btnClose.UseVisualStyleBackColor = true; + this.btnClose.Click += new System.EventHandler(this.btnClose_Click); + // + // btnOK + // + resources.ApplyResources(this.btnOK, "btnOK"); + this.btnOK.Name = "btnOK"; + this.btnOK.UseVisualStyleBackColor = true; + this.btnOK.Click += new System.EventHandler(this.btnOK_Click); + // + // panel2 + // + this.panel2.Controls.Add(this.groupBox2); + this.panel2.Controls.Add(this.groupBox1); + resources.ApplyResources(this.panel2, "panel2"); + this.panel2.Name = "panel2"; + // + // groupBox2 + // + this.groupBox2.Controls.Add(this.txtIP); + resources.ApplyResources(this.groupBox2, "groupBox2"); + this.groupBox2.Name = "groupBox2"; + this.groupBox2.TabStop = false; + // + // txtIP + // + resources.ApplyResources(this.txtIP, "txtIP"); + this.txtIP.Name = "txtIP"; + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.txtDomain); + resources.ApplyResources(this.groupBox1, "groupBox1"); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.TabStop = false; + // + // txtDomain + // + resources.ApplyResources(this.txtDomain, "txtDomain"); + this.txtDomain.Name = "txtDomain"; + // + // RoutingRuleSettingDetailsForm + // + resources.ApplyResources(this, "$this"); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.CancelButton = this.btnClose; + this.Controls.Add(this.panel2); + this.Controls.Add(this.panel4); + this.Controls.Add(this.panel3); + this.Controls.Add(this.panel1); + this.Name = "RoutingRuleSettingDetailsForm"; + this.Load += new System.EventHandler(this.RoutingRuleSettingDetailsForm_Load); + this.panel3.ResumeLayout(false); + this.panel3.PerformLayout(); + this.panel4.ResumeLayout(false); + this.panel2.ResumeLayout(false); + this.groupBox2.ResumeLayout(false); + this.groupBox2.PerformLayout(); + this.groupBox1.ResumeLayout(false); + this.groupBox1.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.Panel panel3; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.ComboBox cmbOutboundTag; + private System.Windows.Forms.Panel panel4; + private System.Windows.Forms.Button btnClose; + private System.Windows.Forms.Button btnOK; + private System.Windows.Forms.Panel panel2; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.TextBox txtDomain; + private System.Windows.Forms.GroupBox groupBox2; + private System.Windows.Forms.TextBox txtIP; + private System.Windows.Forms.Label labRoutingTips; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.TextBox txtPort; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.CheckedListBox clbProtocol; + } +} \ No newline at end of file diff --git a/v2rayN/v2rayN/Forms/RoutingRuleSettingDetailsForm.cs b/v2rayN/v2rayN/Forms/RoutingRuleSettingDetailsForm.cs new file mode 100644 index 00000000..a11e589d --- /dev/null +++ b/v2rayN/v2rayN/Forms/RoutingRuleSettingDetailsForm.cs @@ -0,0 +1,115 @@ +using System; +using System.Collections.Generic; +using System.Windows.Forms; +using v2rayN.Base; +using v2rayN.Handler; +using v2rayN.Mode; + +namespace v2rayN.Forms +{ + public partial class RoutingRuleSettingDetailsForm : BaseForm + { + public RulesItem rulesItem + { + get; set; + } + + public RoutingRuleSettingDetailsForm() + { + InitializeComponent(); + } + + private void RoutingRuleSettingDetailsForm_Load(object sender, EventArgs e) + { + if (Utils.IsNullOrEmpty(rulesItem.outboundTag)) + { + ClearBind(); + } + else + { + BindingData(); + } + } + + private void EndBindingData() + { + if (rulesItem != null) + { + rulesItem.port = txtPort.Text.TrimEx(); + rulesItem.outboundTag = cmbOutboundTag.Text; + rulesItem.domain = Utils.String2List(txtDomain.Text); + rulesItem.ip = Utils.String2List(txtIP.Text); + + var protocol = new List(); + for (int i = 0; i < clbProtocol.Items.Count; i++) + { + if (clbProtocol.GetItemChecked(i)) + { + protocol.Add(clbProtocol.Items[i].ToString()); + } + } + rulesItem.protocol = protocol; + } + } + private void BindingData() + { + if (rulesItem != null) + { + txtPort.Text = rulesItem.port ?? string.Empty; + cmbOutboundTag.Text = rulesItem.outboundTag; + txtDomain.Text = Utils.List2String(rulesItem.domain, true); + txtIP.Text = Utils.List2String(rulesItem.ip, true); + + if (rulesItem.protocol != null) + { + for (int i = 0; i < clbProtocol.Items.Count; i++) + { + if (rulesItem.protocol.Contains(clbProtocol.Items[i].ToString())) + { + clbProtocol.SetItemChecked(i, true); + } + } + } + } + } + private void ClearBind() + { + txtPort.Text = string.Empty; + cmbOutboundTag.Text = Global.agentTag; + txtDomain.Text = string.Empty; + txtIP.Text = string.Empty; + } + private void btnOK_Click(object sender, EventArgs e) + { + EndBindingData(); + var hasRule = false; + if (rulesItem.domain != null && rulesItem.domain.Count > 0) + { + hasRule = true; + } + if (rulesItem.ip != null && rulesItem.ip.Count > 0) + { + hasRule = true; + } + if (rulesItem.protocol != null && rulesItem.protocol.Count > 0) + { + hasRule = true; + } + if (!Utils.IsNullOrEmpty(rulesItem.port)) + { + hasRule = true; + } + if (!hasRule) + { + UI.ShowWarning(string.Format(UIRes.I18N("RoutingRuleDetailRequiredTips"), "Port/Protocol/Domain/IP")); + return; + } + this.DialogResult = DialogResult.OK; + } + + private void btnClose_Click(object sender, EventArgs e) + { + this.DialogResult = DialogResult.Cancel; + } + } +} diff --git a/v2rayN/v2rayN/Forms/RoutingRuleSettingDetailsForm.resx b/v2rayN/v2rayN/Forms/RoutingRuleSettingDetailsForm.resx new file mode 100644 index 00000000..9149d44a --- /dev/null +++ b/v2rayN/v2rayN/Forms/RoutingRuleSettingDetailsForm.resx @@ -0,0 +1,600 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + Top + + + + 0, 0 + + + 742, 10 + + + + 7 + + + panel1 + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 3 + + + 80 + + + http + + + tls + + + bittorrent + + + 347, 43 + + + 245, 20 + + + 39 + + + clbProtocol + + + System.Windows.Forms.CheckedListBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panel3 + + + 0 + + + True + + + NoControl + + + 274, 47 + + + 53, 12 + + + 36 + + + Protocol + + + label3 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panel3 + + + 1 + + + 107, 43 + + + 119, 21 + + + 35 + + + txtPort + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panel3 + + + 2 + + + True + + + NoControl + + + 19, 47 + + + 29, 12 + + + 34 + + + Port + + + label1 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panel3 + + + 3 + + + NoControl + + + 19, 82 + + + 598, 16 + + + 33 + + + *Set the rules, separated by commas (,); The comma in the regular is replaced by <COMMA> + + + labRoutingTips + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panel3 + + + 4 + + + True + + + NoControl + + + 19, 20 + + + 71, 12 + + + 32 + + + outboundTag + + + label4 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panel3 + + + 5 + + + proxy + + + direct + + + block + + + 107, 16 + + + 119, 20 + + + 31 + + + cmbOutboundTag + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panel3 + + + 6 + + + Top + + + 0, 10 + + + 742, 111 + + + 8 + + + panel3 + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 2 + + + NoControl + + + 504, 15 + + + 75, 23 + + + 4 + + + &Cancel + + + btnClose + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panel4 + + + 0 + + + NoControl + + + 411, 15 + + + 75, 23 + + + 5 + + + &OK + + + btnOK + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panel4 + + + 1 + + + Bottom + + + 0, 516 + + + 742, 60 + + + 10 + + + panel4 + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 1 + + + Fill + + + 3, 17 + + + True + + + 344, 375 + + + 25 + + + txtIP + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 0 + + + Fill + + + 392, 0 + + + 350, 395 + + + 4 + + + IP + + + groupBox2 + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panel2 + + + 0 + + + Fill + + + 3, 17 + + + True + + + 386, 375 + + + 24 + + + txtDomain + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 0 + + + Left + + + 0, 0 + + + 392, 395 + + + 3 + + + Domain + + + groupBox1 + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panel2 + + + 1 + + + Fill + + + 0, 121 + + + 742, 395 + + + 11 + + + panel2 + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 0 + + + True + + + 6, 12 + + + 742, 576 + + + RoutingSettingDetailsForm + + + RoutingRuleSettingDetailsForm + + + v2rayN.Forms.BaseForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + + \ No newline at end of file diff --git a/v2rayN/v2rayN/Forms/RoutingRuleSettingDetailsForm.zh-Hans.resx b/v2rayN/v2rayN/Forms/RoutingRuleSettingDetailsForm.zh-Hans.resx new file mode 100644 index 00000000..bac9081a --- /dev/null +++ b/v2rayN/v2rayN/Forms/RoutingRuleSettingDetailsForm.zh-Hans.resx @@ -0,0 +1,145 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + *设置的路由规则,用逗号(,)分隔;正则中的逗号用<COMMA>替代 + + + + 71, 12 + + + OutboundTag + + + 29, 12 + + + 别名 + + + 取消(&C) + + + 确定(&O) + + + 路由规则详情设置 + + \ No newline at end of file diff --git a/v2rayN/v2rayN/Forms/RoutingRuleSettingForm.Designer.cs b/v2rayN/v2rayN/Forms/RoutingRuleSettingForm.Designer.cs new file mode 100644 index 00000000..a0dbe650 --- /dev/null +++ b/v2rayN/v2rayN/Forms/RoutingRuleSettingForm.Designer.cs @@ -0,0 +1,322 @@ +namespace v2rayN.Forms +{ + partial class RoutingRuleSettingForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(RoutingRuleSettingForm)); + this.btnClose = new System.Windows.Forms.Button(); + this.panel2 = new System.Windows.Forms.Panel(); + this.btnOK = new System.Windows.Forms.Button(); + this.panel1 = new System.Windows.Forms.Panel(); + this.label1 = new System.Windows.Forms.Label(); + this.txtUrl = new System.Windows.Forms.TextBox(); + this.label3 = new System.Windows.Forms.Label(); + this.txtRemarks = new System.Windows.Forms.TextBox(); + this.label2 = new System.Windows.Forms.Label(); + this.lvRoutings = new v2rayN.Base.ListViewFlickerFree(); + this.cmsLv = new System.Windows.Forms.ContextMenuStrip(this.components); + this.menuAdd = new System.Windows.Forms.ToolStripMenuItem(); + this.menuRemove = new System.Windows.Forms.ToolStripMenuItem(); + this.menuSelectAll = new System.Windows.Forms.ToolStripMenuItem(); + this.menuExportSelectedRules = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator(); + this.menuMoveTop = new System.Windows.Forms.ToolStripMenuItem(); + this.menuMoveUp = new System.Windows.Forms.ToolStripMenuItem(); + this.menuMoveDown = new System.Windows.Forms.ToolStripMenuItem(); + this.menuMoveBottom = new System.Windows.Forms.ToolStripMenuItem(); + this.MenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + this.tabControl2 = new System.Windows.Forms.TabControl(); + this.tabPage2 = new System.Windows.Forms.TabPage(); + this.menuServer = new System.Windows.Forms.MenuStrip(); + this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + this.menuImportRulesFromFile = new System.Windows.Forms.ToolStripMenuItem(); + this.menuImportRulesFromClipboard = new System.Windows.Forms.ToolStripMenuItem(); + this.menuImportRulesFromUrl = new System.Windows.Forms.ToolStripMenuItem(); + this.panel2.SuspendLayout(); + this.panel1.SuspendLayout(); + this.cmsLv.SuspendLayout(); + this.tabControl2.SuspendLayout(); + this.tabPage2.SuspendLayout(); + this.menuServer.SuspendLayout(); + this.SuspendLayout(); + // + // btnClose + // + resources.ApplyResources(this.btnClose, "btnClose"); + this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.btnClose.Name = "btnClose"; + this.btnClose.UseVisualStyleBackColor = true; + this.btnClose.Click += new System.EventHandler(this.btnClose_Click); + // + // panel2 + // + resources.ApplyResources(this.panel2, "panel2"); + this.panel2.Controls.Add(this.btnClose); + this.panel2.Controls.Add(this.btnOK); + this.panel2.Name = "panel2"; + // + // btnOK + // + resources.ApplyResources(this.btnOK, "btnOK"); + this.btnOK.Name = "btnOK"; + this.btnOK.UseVisualStyleBackColor = true; + this.btnOK.Click += new System.EventHandler(this.btnOK_Click); + // + // panel1 + // + resources.ApplyResources(this.panel1, "panel1"); + this.panel1.Controls.Add(this.label1); + this.panel1.Controls.Add(this.txtUrl); + this.panel1.Controls.Add(this.label3); + this.panel1.Controls.Add(this.txtRemarks); + this.panel1.Controls.Add(this.label2); + this.panel1.Name = "panel1"; + // + // label1 + // + resources.ApplyResources(this.label1, "label1"); + this.label1.Name = "label1"; + // + // txtUrl + // + resources.ApplyResources(this.txtUrl, "txtUrl"); + this.txtUrl.Name = "txtUrl"; + // + // label3 + // + resources.ApplyResources(this.label3, "label3"); + this.label3.Name = "label3"; + // + // txtRemarks + // + resources.ApplyResources(this.txtRemarks, "txtRemarks"); + this.txtRemarks.Name = "txtRemarks"; + // + // label2 + // + resources.ApplyResources(this.label2, "label2"); + this.label2.Name = "label2"; + // + // lvRoutings + // + resources.ApplyResources(this.lvRoutings, "lvRoutings"); + this.lvRoutings.ContextMenuStrip = this.cmsLv; + this.lvRoutings.FullRowSelect = true; + this.lvRoutings.GridLines = true; + this.lvRoutings.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable; + this.lvRoutings.HideSelection = false; + this.lvRoutings.Items.AddRange(new System.Windows.Forms.ListViewItem[] { + ((System.Windows.Forms.ListViewItem)(resources.GetObject("lvRoutings.Items")))}); + this.lvRoutings.MultiSelect = false; + this.lvRoutings.Name = "lvRoutings"; + this.lvRoutings.UseCompatibleStateImageBehavior = false; + this.lvRoutings.View = System.Windows.Forms.View.Details; + this.lvRoutings.DoubleClick += new System.EventHandler(this.lvRoutings_DoubleClick); + this.lvRoutings.KeyDown += new System.Windows.Forms.KeyEventHandler(this.lvRoutings_KeyDown); + // + // cmsLv + // + resources.ApplyResources(this.cmsLv, "cmsLv"); + this.cmsLv.ImageScalingSize = new System.Drawing.Size(20, 20); + this.cmsLv.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.menuAdd, + this.menuRemove, + this.menuSelectAll, + this.menuExportSelectedRules, + this.toolStripSeparator3, + this.menuMoveTop, + this.menuMoveUp, + this.menuMoveDown, + this.menuMoveBottom}); + this.cmsLv.Name = "cmsLv"; + // + // menuAdd + // + resources.ApplyResources(this.menuAdd, "menuAdd"); + this.menuAdd.Name = "menuAdd"; + this.menuAdd.Click += new System.EventHandler(this.menuAdd_Click); + // + // menuRemove + // + resources.ApplyResources(this.menuRemove, "menuRemove"); + this.menuRemove.Name = "menuRemove"; + this.menuRemove.Click += new System.EventHandler(this.menuRemove_Click); + // + // menuSelectAll + // + resources.ApplyResources(this.menuSelectAll, "menuSelectAll"); + this.menuSelectAll.Name = "menuSelectAll"; + this.menuSelectAll.Click += new System.EventHandler(this.menuSelectAll_Click); + // + // menuExportSelectedRules + // + resources.ApplyResources(this.menuExportSelectedRules, "menuExportSelectedRules"); + this.menuExportSelectedRules.Name = "menuExportSelectedRules"; + this.menuExportSelectedRules.Click += new System.EventHandler(this.menuExportSelectedRules_Click); + // + // toolStripSeparator3 + // + resources.ApplyResources(this.toolStripSeparator3, "toolStripSeparator3"); + this.toolStripSeparator3.Name = "toolStripSeparator3"; + // + // menuMoveTop + // + resources.ApplyResources(this.menuMoveTop, "menuMoveTop"); + this.menuMoveTop.Name = "menuMoveTop"; + this.menuMoveTop.Click += new System.EventHandler(this.menuMoveTop_Click); + // + // menuMoveUp + // + resources.ApplyResources(this.menuMoveUp, "menuMoveUp"); + this.menuMoveUp.Name = "menuMoveUp"; + this.menuMoveUp.Click += new System.EventHandler(this.menuMoveUp_Click); + // + // menuMoveDown + // + resources.ApplyResources(this.menuMoveDown, "menuMoveDown"); + this.menuMoveDown.Name = "menuMoveDown"; + this.menuMoveDown.Click += new System.EventHandler(this.menuMoveDown_Click); + // + // menuMoveBottom + // + resources.ApplyResources(this.menuMoveBottom, "menuMoveBottom"); + this.menuMoveBottom.Name = "menuMoveBottom"; + this.menuMoveBottom.Click += new System.EventHandler(this.menuMoveBottom_Click); + // + // MenuItem1 + // + resources.ApplyResources(this.MenuItem1, "MenuItem1"); + this.MenuItem1.DropDown = this.cmsLv; + this.MenuItem1.Name = "MenuItem1"; + // + // tabControl2 + // + resources.ApplyResources(this.tabControl2, "tabControl2"); + this.tabControl2.Controls.Add(this.tabPage2); + this.tabControl2.Name = "tabControl2"; + this.tabControl2.SelectedIndex = 0; + // + // tabPage2 + // + resources.ApplyResources(this.tabPage2, "tabPage2"); + this.tabPage2.Controls.Add(this.lvRoutings); + this.tabPage2.Name = "tabPage2"; + this.tabPage2.UseVisualStyleBackColor = true; + // + // menuServer + // + resources.ApplyResources(this.menuServer, "menuServer"); + this.menuServer.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.MenuItem1, + this.toolStripMenuItem1}); + this.menuServer.Name = "menuServer"; + // + // toolStripMenuItem1 + // + resources.ApplyResources(this.toolStripMenuItem1, "toolStripMenuItem1"); + this.toolStripMenuItem1.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.menuImportRulesFromFile, + this.menuImportRulesFromClipboard, + this.menuImportRulesFromUrl}); + this.toolStripMenuItem1.Name = "toolStripMenuItem1"; + // + // menuImportRulesFromFile + // + resources.ApplyResources(this.menuImportRulesFromFile, "menuImportRulesFromFile"); + this.menuImportRulesFromFile.Name = "menuImportRulesFromFile"; + this.menuImportRulesFromFile.Click += new System.EventHandler(this.menuImportRulesFromFile_Click); + // + // menuImportRulesFromClipboard + // + resources.ApplyResources(this.menuImportRulesFromClipboard, "menuImportRulesFromClipboard"); + this.menuImportRulesFromClipboard.Name = "menuImportRulesFromClipboard"; + this.menuImportRulesFromClipboard.Click += new System.EventHandler(this.menuImportRulesFromClipboard_Click); + // + // menuImportRulesFromUrl + // + resources.ApplyResources(this.menuImportRulesFromUrl, "menuImportRulesFromUrl"); + this.menuImportRulesFromUrl.Name = "menuImportRulesFromUrl"; + this.menuImportRulesFromUrl.Click += new System.EventHandler(this.menuImportRulesFromUrl_Click); + // + // RoutingRuleSettingForm + // + resources.ApplyResources(this, "$this"); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.CancelButton = this.btnClose; + this.Controls.Add(this.tabControl2); + this.Controls.Add(this.panel1); + this.Controls.Add(this.panel2); + this.Controls.Add(this.menuServer); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.Name = "RoutingRuleSettingForm"; + this.Load += new System.EventHandler(this.RoutingRuleSettingForm_Load); + this.panel2.ResumeLayout(false); + this.panel1.ResumeLayout(false); + this.panel1.PerformLayout(); + this.cmsLv.ResumeLayout(false); + this.tabControl2.ResumeLayout(false); + this.tabPage2.ResumeLayout(false); + this.menuServer.ResumeLayout(false); + this.menuServer.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + private System.Windows.Forms.Button btnClose; + private System.Windows.Forms.Button btnOK; + private System.Windows.Forms.Panel panel2; + private System.Windows.Forms.Panel panel1; + private Base.ListViewFlickerFree lvRoutings; + private System.Windows.Forms.TabControl tabControl2; + private System.Windows.Forms.TabPage tabPage2; + private System.Windows.Forms.ContextMenuStrip cmsLv; + private System.Windows.Forms.ToolStripMenuItem menuRemove; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator3; + private System.Windows.Forms.ToolStripMenuItem menuMoveTop; + private System.Windows.Forms.ToolStripMenuItem menuMoveUp; + private System.Windows.Forms.ToolStripMenuItem menuMoveDown; + private System.Windows.Forms.ToolStripMenuItem menuMoveBottom; + private System.Windows.Forms.ToolStripMenuItem menuSelectAll; + private System.Windows.Forms.ToolStripMenuItem menuAdd; + private System.Windows.Forms.MenuStrip menuServer; + private System.Windows.Forms.ToolStripMenuItem MenuItem1; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem1; + private System.Windows.Forms.ToolStripMenuItem menuImportRulesFromFile; + private System.Windows.Forms.ToolStripMenuItem menuImportRulesFromClipboard; + private System.Windows.Forms.ToolStripMenuItem menuExportSelectedRules; + private System.Windows.Forms.ToolStripMenuItem menuImportRulesFromUrl; + private System.Windows.Forms.TextBox txtRemarks; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.TextBox txtUrl; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Label label1; + } +} \ No newline at end of file diff --git a/v2rayN/v2rayN/Forms/RoutingRuleSettingForm.cs b/v2rayN/v2rayN/Forms/RoutingRuleSettingForm.cs new file mode 100644 index 00000000..2c708f4a --- /dev/null +++ b/v2rayN/v2rayN/Forms/RoutingRuleSettingForm.cs @@ -0,0 +1,334 @@ +using System; +using System.Collections.Generic; +using System.Windows.Forms; +using v2rayN.Base; +using v2rayN.Handler; +using v2rayN.Mode; + +namespace v2rayN.Forms +{ + public partial class RoutingRuleSettingForm : BaseForm + { + public int EditIndex + { + get; set; + } + protected RoutingItem routingItem = null; + + private List lvSelecteds = new List(); + public RoutingRuleSettingForm() + { + InitializeComponent(); + } + + private void RoutingRuleSettingForm_Load(object sender, EventArgs e) + { + if (EditIndex >= 0) + { + routingItem = config.routings[EditIndex]; + } + else + { + routingItem = new RoutingItem(); + } + if (routingItem.rules == null) + { + routingItem.rules = new List(); + } + + txtRemarks.Text = routingItem.remarks ?? string.Empty; + txtUrl.Text = routingItem.url ?? string.Empty; + + InitRoutingsView(); + RefreshRoutingsView(); + } + + private void InitRoutingsView() + { + lvRoutings.BeginUpdate(); + lvRoutings.Items.Clear(); + + lvRoutings.GridLines = true; + lvRoutings.FullRowSelect = true; + lvRoutings.View = View.Details; + lvRoutings.MultiSelect = true; + lvRoutings.HeaderStyle = ColumnHeaderStyle.Clickable; + + lvRoutings.Columns.Add("", 30); + lvRoutings.Columns.Add("outboundTag", 80); + lvRoutings.Columns.Add("port", 80); + lvRoutings.Columns.Add("protocol", 100); + lvRoutings.Columns.Add("domain", 160); + lvRoutings.Columns.Add("ip", 160); + + lvRoutings.EndUpdate(); + } + + private void RefreshRoutingsView() + { + lvRoutings.BeginUpdate(); + lvRoutings.Items.Clear(); + + for (int k = 0; k < routingItem.rules.Count; k++) + { + var item = routingItem.rules[k]; + + ListViewItem lvItem = new ListViewItem(""); + Utils.AddSubItem(lvItem, "outboundTag", item.outboundTag); + Utils.AddSubItem(lvItem, "port", item.port); + Utils.AddSubItem(lvItem, "protocol", Utils.List2String(item.protocol)); + Utils.AddSubItem(lvItem, "domain", Utils.List2String(item.domain)); + Utils.AddSubItem(lvItem, "ip", Utils.List2String(item.ip)); + + if (lvItem != null) lvRoutings.Items.Add(lvItem); + } + lvRoutings.EndUpdate(); + } + + private void btnOK_Click(object sender, EventArgs e) + { + routingItem.remarks = txtRemarks.Text.Trim(); + routingItem.url = txtUrl.Text.Trim(); + + if (ConfigHandler.AddRoutingItem(ref config, routingItem, EditIndex) == 0) + { + this.DialogResult = DialogResult.OK; + } + else + { + UI.ShowWarning(UIRes.I18N("OperationFailed")); + } + } + + private void btnClose_Click(object sender, EventArgs e) + { + this.DialogResult = DialogResult.Cancel; + } + + private void lvRoutings_DoubleClick(object sender, EventArgs e) + { + int index = GetLvSelectedIndex(); + if (index < 0) + { + return; + } + var fm = new RoutingRuleSettingDetailsForm(); + fm.rulesItem = routingItem.rules[index]; + if (fm.ShowDialog() == DialogResult.OK) + { + RefreshRoutingsView(); + } + } + + private int GetLvSelectedIndex() + { + int index = -1; + lvSelecteds.Clear(); + try + { + if (lvRoutings.SelectedIndices.Count <= 0) + { + UI.Show(UIRes.I18N("PleaseSelectRules")); + return index; + } + + index = lvRoutings.SelectedIndices[0]; + foreach (int i in lvRoutings.SelectedIndices) + { + lvSelecteds.Add(i); + } + return index; + } + catch + { + return index; + } + } + + #region Edit function + + private void menuMoveTop_Click(object sender, EventArgs e) + { + MoveRule(EMove.Top); + } + + private void menuMoveUp_Click(object sender, EventArgs e) + { + MoveRule(EMove.Up); + } + + private void menuMoveDown_Click(object sender, EventArgs e) + { + MoveRule(EMove.Down); + } + + private void menuMoveBottom_Click(object sender, EventArgs e) + { + MoveRule(EMove.Bottom); + } + + private void MoveRule(EMove eMove) + { + int index = GetLvSelectedIndex(); + if (index < 0) + { + UI.Show(UIRes.I18N("PleaseSelectRules")); + return; + } + if (ConfigHandler.MoveRoutingRule(ref routingItem, index, eMove) == 0) + { + RefreshRoutingsView(); + } + } + private void menuSelectAll_Click(object sender, EventArgs e) + { + foreach (ListViewItem item in lvRoutings.Items) + { + item.Selected = true; + } + } + + private void menuAdd_Click(object sender, EventArgs e) + { + var fm = new RoutingRuleSettingDetailsForm(); + fm.rulesItem = new RulesItem(); + if (fm.ShowDialog() == DialogResult.OK) + { + routingItem.rules.Add(fm.rulesItem); + RefreshRoutingsView(); + } + } + + private void menuRemove_Click(object sender, EventArgs e) + { + int index = GetLvSelectedIndex(); + if (index < 0) + { + return; + } + if (UI.ShowYesNo(UIRes.I18N("RemoveRules")) == DialogResult.No) + { + return; + } + for (int k = lvSelecteds.Count - 1; k >= 0; k--) + { + routingItem.rules.RemoveAt(index); + } + RefreshRoutingsView(); + } + private void menuExportSelectedRules_Click(object sender, EventArgs e) + { + GetLvSelectedIndex(); + var lst = new List(); + foreach (int v in lvSelecteds) + { + lst.Add(routingItem.rules[v]); + } + if (lst.Count > 0) + { + Utils.SetClipboardData(Utils.ToJson(lst)); + UI.Show(UIRes.I18N("OperationSuccess")); + } + + } + + private void lvRoutings_KeyDown(object sender, KeyEventArgs e) + { + if (e.Control) + { + switch (e.KeyCode) + { + case Keys.A: + menuSelectAll_Click(null, null); + break; + case Keys.C: + menuExportSelectedRules_Click(null, null); + break; + } + } + else + { + switch (e.KeyCode) + { + case Keys.Delete: + menuRemove_Click(null, null); + break; + case Keys.T: + menuMoveTop_Click(null, null); + break; + case Keys.B: + menuMoveBottom_Click(null, null); + break; + case Keys.U: + menuMoveUp_Click(null, null); + break; + case Keys.D: + menuMoveDown_Click(null, null); + break; + } + } + } + #endregion + + #region preset rules + + private void menuImportRulesFromFile_Click(object sender, EventArgs e) + { + OpenFileDialog fileDialog = new OpenFileDialog + { + Multiselect = false, + Filter = "Rules|*.json|All|*.*" + }; + if (fileDialog.ShowDialog() != DialogResult.OK) + { + return; + } + string fileName = fileDialog.FileName; + if (Utils.IsNullOrEmpty(fileName)) + { + return; + } + string result = Utils.LoadResource(fileName); + if (Utils.IsNullOrEmpty(result)) + { + return; + } + + if (ConfigHandler.AddBatchRoutingRules(ref routingItem, result) == 0) + { + RefreshRoutingsView(); + UI.Show(UIRes.I18N("OperationSuccess")); + } + } + + private void menuImportRulesFromClipboard_Click(object sender, EventArgs e) + { + string clipboardData = Utils.GetClipboardData(); + if (ConfigHandler.AddBatchRoutingRules(ref routingItem, clipboardData) == 0) + { + RefreshRoutingsView(); + UI.Show(UIRes.I18N("OperationSuccess")); + } + } + private void menuImportRulesFromUrl_Click(object sender, EventArgs e) + { + var url = txtUrl.Text.Trim(); + if (Utils.IsNullOrEmpty(url)) + { + UI.Show(UIRes.I18N("MsgNeedUrl")); + return; + } + DownloadHandle downloadHandle = new DownloadHandle(); + string clipboardData = downloadHandle.WebDownloadStringSync(url); + if (ConfigHandler.AddBatchRoutingRules(ref routingItem, clipboardData) == 0) + { + RefreshRoutingsView(); + UI.Show(UIRes.I18N("OperationSuccess")); + } + } + + #endregion + + + } +} diff --git a/v2rayN/v2rayN/Forms/RoutingRuleSettingForm.resx b/v2rayN/v2rayN/Forms/RoutingRuleSettingForm.resx new file mode 100644 index 00000000..8063cbb9 --- /dev/null +++ b/v2rayN/v2rayN/Forms/RoutingRuleSettingForm.resx @@ -0,0 +1,674 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.TabControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + 199, 6 + + + + Fill + + + menuImportRulesFromUrl + + + Down (D) + + + 762, 25 + + + + 32 + + + 1 + + + 47, 12 + + + Move to bottom (B) + + + Bottom + + + Edit and Function + + + panel1 + + + $this + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + NoControl + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 4 + + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panel1 + + + 15 + + + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 4, 22 + + + $this + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Rule Settings + + + Remove selected + + + NoControl + + + tabPage2 + + + 0 + + + 202, 22 + + + 475, 17 + + + 75, 23 + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 33 + + + MenuItem1 + + + 0 + + + 754, 362 + + + 1 + + + 568, 17 + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 4 + + + Fill + + + 0, 0 + + + label1 + + + 762, 60 + + + Sub Url + + + 95, 21 + + + panel1 + + + menuServer + + + True + + + 120, 21 + + + True + + + Import Rules From Sub Url + + + 2 + + + menuSelectAll + + + menuMoveTop + + + 202, 22 + + + cmsLv + + + 5 + + + Add + + + 12 + + + toolStripSeparator3 + + + panel1 + + + tabPage2 + + + toolStripMenuItem1 + + + menuMoveBottom + + + 0, 25 + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 18, 63 + + + Import Rules From File + + + 202, 22 + + + 762, 388 + + + 1 + + + RoutingRuleSettingForm + + + panel2 + + + 202, 22 + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.MenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + btnClose + + + Up (U) + + + 203, 186 + + + btnOK + + + 47, 12 + + + 14 + + + Import Rules + + + NoControl + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 3, 3 + + + menuImportRulesFromClipboard + + + Import Rules From Clipboard + + + panel1 + + + menuAdd + + + 0, 127 + + + 247, 22 + + + panel2 + + + Move to top (T) + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 762, 102 + + + txtUrl + + + 748, 356 + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w + LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkMAwAAAFFTeXN0 + ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2Vu + PWIwM2Y1ZjdmMTFkNTBhM2EFAQAAACFTeXN0ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0l0ZW0HAAAA + BFRleHQKSW1hZ2VJbmRleAlCYWNrQ29sb3IHQ2hlY2tlZARGb250CUZvcmVDb2xvchdVc2VJdGVtU3R5 + bGVGb3JTdWJJdGVtcwEABAAEBAAIFFN5c3RlbS5EcmF3aW5nLkNvbG9yAwAAAAETU3lzdGVtLkRyYXdp + bmcuRm9udAMAAAAUU3lzdGVtLkRyYXdpbmcuQ29sb3IDAAAAAQIAAAAGBAAAAAD/////Bfv///8UU3lz + dGVtLkRyYXdpbmcuQ29sb3IEAAAABG5hbWUFdmFsdWUKa25vd25Db2xvcgVzdGF0ZQEAAAAJBwcDAAAA + CgAAAAAAAAAAGAABAAAJBgAAAAH5////+////woAAAAAAAAAABoAAQABBQYAAAATU3lzdGVtLkRyYXdp + bmcuRm9udAQAAAAETmFtZQRTaXplBVN0eWxlBFVuaXQBAAQECxhTeXN0ZW0uRHJhd2luZy5Gb250U3R5 + bGUDAAAAG1N5c3RlbS5EcmF3aW5nLkdyYXBoaWNzVW5pdAMAAAADAAAABggAAAAG5a6L5L2TAAAQQQX3 + ////GFN5c3RlbS5EcmF3aW5nLkZvbnRTdHlsZQEAAAAHdmFsdWVfXwAIAwAAAAAAAAAF9v///xtTeXN0 + ZW0uRHJhd2luZy5HcmFwaGljc1VuaXQBAAAAB3ZhbHVlX18ACAMAAAADAAAACw== + + + + 34 + + + &OK + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 247, 22 + + + $this + + + 35 + + + v2rayN.Base.ListViewFlickerFree, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + + + 18, 45 + + + 31 + + + 91, 45 + + + 166, 21 + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 0 + + + 644, 48 + + + menuMoveDown + + + 202, 22 + + + Export Selected Rules + + + menuImportRulesFromFile + + + label3 + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 11 + + + panel2 + + + 7 + + + panel1 + + + v2rayN.Forms.BaseForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + + + tabControl2 + + + Remarks + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 3, 3, 3, 3 + + + 0, 515 + + + menuMoveUp + + + RuleList + + + Select All (Ctrl+A) + + + 53, 12 + + + 6, 12 + + + menuExportSelectedRules + + + Optional + + + 91, 13 + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 247, 22 + + + 202, 22 + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + lvRoutings + + + 202, 22 + + + label2 + + + menuRemove + + + True + + + 18, 13 + + + NoControl + + + 762, 575 + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 202, 22 + + + 2 + + + &Cancel + + + 3 + + + NoControl + + + 4 + + + 3 + + + 75, 23 + + + tabControl2 + + + 0 + + + System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + txtRemarks + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + 0 + + + Top + + + True + + + 17, 17 + + + zh-Hans + + + 139, 17 + + \ No newline at end of file diff --git a/v2rayN/v2rayN/Forms/RoutingRuleSettingForm.zh-Hans.resx b/v2rayN/v2rayN/Forms/RoutingRuleSettingForm.zh-Hans.resx new file mode 100644 index 00000000..d81b8ff0 --- /dev/null +++ b/v2rayN/v2rayN/Forms/RoutingRuleSettingForm.zh-Hans.resx @@ -0,0 +1,285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 取消(&C) + + + + 0, 613 + + + 785, 60 + + + 确定(&O) + + + 785, 109 + + + 29, 12 + + + 可选 + + + 101, 45 + + + 83, 12 + + + 订阅地址(Url) + + + 101, 13 + + + 29, 12 + + + 别名 + + + 197, 186 + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w + LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkMAwAAAFFTeXN0 + ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2Vu + PWIwM2Y1ZjdmMTFkNTBhM2EFAQAAACFTeXN0ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0l0ZW0HAAAA + BFRleHQKSW1hZ2VJbmRleAlCYWNrQ29sb3IHQ2hlY2tlZARGb250CUZvcmVDb2xvchdVc2VJdGVtU3R5 + bGVGb3JTdWJJdGVtcwEABAAEBAAIFFN5c3RlbS5EcmF3aW5nLkNvbG9yAwAAAAETU3lzdGVtLkRyYXdp + bmcuRm9udAMAAAAUU3lzdGVtLkRyYXdpbmcuQ29sb3IDAAAAAQIAAAAGBAAAAAD/////Bfv///8UU3lz + dGVtLkRyYXdpbmcuQ29sb3IEAAAABG5hbWUFdmFsdWUKa25vd25Db2xvcgVzdGF0ZQEAAAAJBwcDAAAA + CgAAAAAAAAAAGAABAAAJBgAAAAH5////+////woAAAAAAAAAABoAAQABBQYAAAATU3lzdGVtLkRyYXdp + bmcuRm9udAQAAAAETmFtZQRTaXplBVN0eWxlBFVuaXQBAAQECxhTeXN0ZW0uRHJhd2luZy5Gb250U3R5 + bGUDAAAAG1N5c3RlbS5EcmF3aW5nLkdyYXBoaWNzVW5pdAMAAAADAAAABggAAAAG5a6L5L2TAAAQQQX3 + ////GFN5c3RlbS5EcmF3aW5nLkZvbnRTdHlsZQEAAAAHdmFsdWVfXwAIAwAAAAAAAAAF9v///xtTeXN0 + ZW0uRHJhd2luZy5HcmFwaGljc1VuaXQBAAAAB3ZhbHVlX18ACAMAAAADAAAACw== + + + + 771, 447 + + + 196, 22 + + + 添加规则 + + + 196, 22 + + + 移除所选规则 + + + 196, 22 + + + 全选 + + + 196, 22 + + + 导出所选规则至剪贴板 + + + 193, 6 + + + 196, 22 + + + 上移至顶 (T) + + + 196, 22 + + + 上移 (U) + + + 196, 22 + + + 下移 (D) + + + 196, 22 + + + 下移至底 (B) + + + 68, 21 + + + 规则功能 + + + 0, 134 + + + 785, 479 + + + 777, 453 + + + 规则列表 + + + 184, 22 + + + 从文件中导入规则 + + + 184, 22 + + + 从剪贴板中导入规则 + + + 189, 22 + + + 从订阅Url中导入规则 + + + 68, 21 + + + 导入规则 + + + 785, 25 + + + 785, 673 + + + 规则集设置 + + \ No newline at end of file diff --git a/v2rayN/v2rayN/Forms/RoutingSettingForm.Designer.cs b/v2rayN/v2rayN/Forms/RoutingSettingForm.Designer.cs index 0edd1e88..417a8283 100644 --- a/v2rayN/v2rayN/Forms/RoutingSettingForm.Designer.cs +++ b/v2rayN/v2rayN/Forms/RoutingSettingForm.Designer.cs @@ -41,21 +41,11 @@ this.menuAdd = new System.Windows.Forms.ToolStripMenuItem(); this.menuRemove = new System.Windows.Forms.ToolStripMenuItem(); this.menuSelectAll = new System.Windows.Forms.ToolStripMenuItem(); - this.menuExportSelectedRules = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator(); - this.menuMoveTop = new System.Windows.Forms.ToolStripMenuItem(); - this.menuMoveUp = new System.Windows.Forms.ToolStripMenuItem(); - this.menuMoveDown = new System.Windows.Forms.ToolStripMenuItem(); - this.menuMoveBottom = new System.Windows.Forms.ToolStripMenuItem(); + this.menuSetDefaultRouting = new System.Windows.Forms.ToolStripMenuItem(); this.MenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); this.tabControl2 = new System.Windows.Forms.TabControl(); this.tabPage2 = new System.Windows.Forms.TabPage(); this.menuServer = new System.Windows.Forms.MenuStrip(); - this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); - this.menuImportRulesFromPreset = new System.Windows.Forms.ToolStripMenuItem(); - this.menuImportRulesFromFile = new System.Windows.Forms.ToolStripMenuItem(); - this.menuImportRulesFromClipboard = new System.Windows.Forms.ToolStripMenuItem(); - this.menuImportRulesFromUrl = new System.Windows.Forms.ToolStripMenuItem(); this.panel2.SuspendLayout(); this.panel1.SuspendLayout(); this.cmsLv.SuspendLayout(); @@ -66,17 +56,17 @@ // // btnClose // - resources.ApplyResources(this.btnClose, "btnClose"); this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel; + resources.ApplyResources(this.btnClose, "btnClose"); this.btnClose.Name = "btnClose"; this.btnClose.UseVisualStyleBackColor = true; this.btnClose.Click += new System.EventHandler(this.btnClose_Click); // // panel2 // - resources.ApplyResources(this.panel2, "panel2"); this.panel2.Controls.Add(this.btnClose); this.panel2.Controls.Add(this.btnOK); + resources.ApplyResources(this.panel2, "panel2"); this.panel2.Name = "panel2"; // // btnOK @@ -88,9 +78,9 @@ // // panel1 // - resources.ApplyResources(this.panel1, "panel1"); this.panel1.Controls.Add(this.linkLabelRoutingDoc); this.panel1.Controls.Add(this.cmbdomainStrategy); + resources.ApplyResources(this.panel1, "panel1"); this.panel1.Name = "panel1"; // // linkLabelRoutingDoc @@ -102,19 +92,19 @@ // // cmbdomainStrategy // - resources.ApplyResources(this.cmbdomainStrategy, "cmbdomainStrategy"); this.cmbdomainStrategy.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.cmbdomainStrategy.FormattingEnabled = true; this.cmbdomainStrategy.Items.AddRange(new object[] { resources.GetString("cmbdomainStrategy.Items"), resources.GetString("cmbdomainStrategy.Items1"), resources.GetString("cmbdomainStrategy.Items2")}); + resources.ApplyResources(this.cmbdomainStrategy, "cmbdomainStrategy"); this.cmbdomainStrategy.Name = "cmbdomainStrategy"; // // lvRoutings // - resources.ApplyResources(this.lvRoutings, "lvRoutings"); this.lvRoutings.ContextMenuStrip = this.cmsLv; + resources.ApplyResources(this.lvRoutings, "lvRoutings"); this.lvRoutings.FullRowSelect = true; this.lvRoutings.GridLines = true; this.lvRoutings.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable; @@ -126,140 +116,70 @@ this.lvRoutings.UseCompatibleStateImageBehavior = false; this.lvRoutings.View = System.Windows.Forms.View.Details; this.lvRoutings.DoubleClick += new System.EventHandler(this.lvRoutings_DoubleClick); - this.lvRoutings.KeyDown += new System.Windows.Forms.KeyEventHandler(this.lvRoutings_KeyDown); // // cmsLv // - resources.ApplyResources(this.cmsLv, "cmsLv"); this.cmsLv.ImageScalingSize = new System.Drawing.Size(20, 20); this.cmsLv.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.menuAdd, this.menuRemove, this.menuSelectAll, - this.menuExportSelectedRules, - this.toolStripSeparator3, - this.menuMoveTop, - this.menuMoveUp, - this.menuMoveDown, - this.menuMoveBottom}); + this.menuSetDefaultRouting}); this.cmsLv.Name = "cmsLv"; this.cmsLv.OwnerItem = this.MenuItem1; + resources.ApplyResources(this.cmsLv, "cmsLv"); // // menuAdd // - resources.ApplyResources(this.menuAdd, "menuAdd"); this.menuAdd.Name = "menuAdd"; + resources.ApplyResources(this.menuAdd, "menuAdd"); this.menuAdd.Click += new System.EventHandler(this.menuAdd_Click); // // menuRemove // - resources.ApplyResources(this.menuRemove, "menuRemove"); this.menuRemove.Name = "menuRemove"; + resources.ApplyResources(this.menuRemove, "menuRemove"); this.menuRemove.Click += new System.EventHandler(this.menuRemove_Click); // // menuSelectAll // - resources.ApplyResources(this.menuSelectAll, "menuSelectAll"); this.menuSelectAll.Name = "menuSelectAll"; + resources.ApplyResources(this.menuSelectAll, "menuSelectAll"); this.menuSelectAll.Click += new System.EventHandler(this.menuSelectAll_Click); // - // menuExportSelectedRules + // menuSetDefaultRouting // - resources.ApplyResources(this.menuExportSelectedRules, "menuExportSelectedRules"); - this.menuExportSelectedRules.Name = "menuExportSelectedRules"; - this.menuExportSelectedRules.Click += new System.EventHandler(this.menuExportSelectedRules_Click); - // - // toolStripSeparator3 - // - resources.ApplyResources(this.toolStripSeparator3, "toolStripSeparator3"); - this.toolStripSeparator3.Name = "toolStripSeparator3"; - // - // menuMoveTop - // - resources.ApplyResources(this.menuMoveTop, "menuMoveTop"); - this.menuMoveTop.Name = "menuMoveTop"; - this.menuMoveTop.Click += new System.EventHandler(this.menuMoveTop_Click); - // - // menuMoveUp - // - resources.ApplyResources(this.menuMoveUp, "menuMoveUp"); - this.menuMoveUp.Name = "menuMoveUp"; - this.menuMoveUp.Click += new System.EventHandler(this.menuMoveUp_Click); - // - // menuMoveDown - // - resources.ApplyResources(this.menuMoveDown, "menuMoveDown"); - this.menuMoveDown.Name = "menuMoveDown"; - this.menuMoveDown.Click += new System.EventHandler(this.menuMoveDown_Click); - // - // menuMoveBottom - // - resources.ApplyResources(this.menuMoveBottom, "menuMoveBottom"); - this.menuMoveBottom.Name = "menuMoveBottom"; - this.menuMoveBottom.Click += new System.EventHandler(this.menuMoveBottom_Click); + this.menuSetDefaultRouting.Name = "menuSetDefaultRouting"; + resources.ApplyResources(this.menuSetDefaultRouting, "menuSetDefaultRouting"); + this.menuSetDefaultRouting.Click += new System.EventHandler(this.menuSetDefaultRouting_Click); // // MenuItem1 // - resources.ApplyResources(this.MenuItem1, "MenuItem1"); this.MenuItem1.DropDown = this.cmsLv; this.MenuItem1.Name = "MenuItem1"; + resources.ApplyResources(this.MenuItem1, "MenuItem1"); // // tabControl2 // - resources.ApplyResources(this.tabControl2, "tabControl2"); this.tabControl2.Controls.Add(this.tabPage2); + resources.ApplyResources(this.tabControl2, "tabControl2"); this.tabControl2.Name = "tabControl2"; this.tabControl2.SelectedIndex = 0; // // tabPage2 // - resources.ApplyResources(this.tabPage2, "tabPage2"); this.tabPage2.Controls.Add(this.lvRoutings); + resources.ApplyResources(this.tabPage2, "tabPage2"); this.tabPage2.Name = "tabPage2"; this.tabPage2.UseVisualStyleBackColor = true; // // menuServer // - resources.ApplyResources(this.menuServer, "menuServer"); this.menuServer.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.MenuItem1, - this.toolStripMenuItem1}); + this.MenuItem1}); + resources.ApplyResources(this.menuServer, "menuServer"); this.menuServer.Name = "menuServer"; // - // toolStripMenuItem1 - // - resources.ApplyResources(this.toolStripMenuItem1, "toolStripMenuItem1"); - this.toolStripMenuItem1.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.menuImportRulesFromPreset, - this.menuImportRulesFromFile, - this.menuImportRulesFromClipboard, - this.menuImportRulesFromUrl}); - this.toolStripMenuItem1.Name = "toolStripMenuItem1"; - // - // menuImportRulesFromPreset - // - resources.ApplyResources(this.menuImportRulesFromPreset, "menuImportRulesFromPreset"); - this.menuImportRulesFromPreset.Name = "menuImportRulesFromPreset"; - this.menuImportRulesFromPreset.Click += new System.EventHandler(this.menuImportRulesFromPreset_Click); - // - // menuImportRulesFromFile - // - resources.ApplyResources(this.menuImportRulesFromFile, "menuImportRulesFromFile"); - this.menuImportRulesFromFile.Name = "menuImportRulesFromFile"; - this.menuImportRulesFromFile.Click += new System.EventHandler(this.menuImportRulesFromFile_Click); - // - // menuImportRulesFromClipboard - // - resources.ApplyResources(this.menuImportRulesFromClipboard, "menuImportRulesFromClipboard"); - this.menuImportRulesFromClipboard.Name = "menuImportRulesFromClipboard"; - this.menuImportRulesFromClipboard.Click += new System.EventHandler(this.menuImportRulesFromClipboard_Click); - // - // menuImportRulesFromUrl - // - resources.ApplyResources(this.menuImportRulesFromUrl, "menuImportRulesFromUrl"); - this.menuImportRulesFromUrl.Name = "menuImportRulesFromUrl"; - this.menuImportRulesFromUrl.Click += new System.EventHandler(this.menuImportRulesFromUrl_Click); - // // RoutingSettingForm // resources.ApplyResources(this, "$this"); @@ -297,20 +217,10 @@ private System.Windows.Forms.TabPage tabPage2; private System.Windows.Forms.ContextMenuStrip cmsLv; private System.Windows.Forms.ToolStripMenuItem menuRemove; - private System.Windows.Forms.ToolStripSeparator toolStripSeparator3; - private System.Windows.Forms.ToolStripMenuItem menuMoveTop; - private System.Windows.Forms.ToolStripMenuItem menuMoveUp; - private System.Windows.Forms.ToolStripMenuItem menuMoveDown; - private System.Windows.Forms.ToolStripMenuItem menuMoveBottom; private System.Windows.Forms.ToolStripMenuItem menuSelectAll; private System.Windows.Forms.ToolStripMenuItem menuAdd; private System.Windows.Forms.MenuStrip menuServer; private System.Windows.Forms.ToolStripMenuItem MenuItem1; - private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem1; - private System.Windows.Forms.ToolStripMenuItem menuImportRulesFromPreset; - private System.Windows.Forms.ToolStripMenuItem menuImportRulesFromFile; - private System.Windows.Forms.ToolStripMenuItem menuImportRulesFromClipboard; - private System.Windows.Forms.ToolStripMenuItem menuExportSelectedRules; - private System.Windows.Forms.ToolStripMenuItem menuImportRulesFromUrl; + private System.Windows.Forms.ToolStripMenuItem menuSetDefaultRouting; } } \ No newline at end of file diff --git a/v2rayN/v2rayN/Forms/RoutingSettingForm.cs b/v2rayN/v2rayN/Forms/RoutingSettingForm.cs index a086d132..cd7ca2c4 100644 --- a/v2rayN/v2rayN/Forms/RoutingSettingForm.cs +++ b/v2rayN/v2rayN/Forms/RoutingSettingForm.cs @@ -17,11 +17,13 @@ namespace v2rayN.Forms private void RoutingSettingForm_Load(object sender, EventArgs e) { + ConfigHandler.InitBuiltinRouting(ref config); + cmbdomainStrategy.Text = config.domainStrategy; - if (config.rules == null) + if (config.routings == null) { - config.rules = new List(); + config.routings = new List(); } InitRoutingsView(); RefreshRoutingsView(); @@ -39,12 +41,9 @@ namespace v2rayN.Forms lvRoutings.HeaderStyle = ColumnHeaderStyle.Clickable; lvRoutings.Columns.Add("", 30); - lvRoutings.Columns.Add(UIRes.I18N("LvAlias"), 100); - lvRoutings.Columns.Add("outboundTag", 80); - lvRoutings.Columns.Add("port", 80); - lvRoutings.Columns.Add("protocol", 100); - lvRoutings.Columns.Add("domain", 160); - lvRoutings.Columns.Add("ip", 160); + lvRoutings.Columns.Add(UIRes.I18N("LvAlias"), 200); + lvRoutings.Columns.Add(UIRes.I18N("LvUrl"), 240); + lvRoutings.Columns.Add(UIRes.I18N("LvCount"), 60); lvRoutings.EndUpdate(); } @@ -54,17 +53,20 @@ namespace v2rayN.Forms lvRoutings.BeginUpdate(); lvRoutings.Items.Clear(); - for (int k = 0; k < config.rules.Count; k++) + for (int k = 0; k < config.routings.Count; k++) { - var item = config.rules[k]; + string def = string.Empty; + if (config.routingIndex.Equals(k)) + { + def = "√"; + } - ListViewItem lvItem = new ListViewItem(""); + var item = config.routings[k]; + + ListViewItem lvItem = new ListViewItem(def); Utils.AddSubItem(lvItem, "remarks", item.remarks); - Utils.AddSubItem(lvItem, "outboundTag", item.outboundTag); - Utils.AddSubItem(lvItem, "port", item.port); - Utils.AddSubItem(lvItem, "protocol", Utils.List2String(item.protocol)); - Utils.AddSubItem(lvItem, "domain", Utils.List2String(item.domain)); - Utils.AddSubItem(lvItem, "ip", Utils.List2String(item.ip)); + Utils.AddSubItem(lvItem, "url", item.url); + Utils.AddSubItem(lvItem, "count", item.rules.Count.ToString()); if (lvItem != null) lvRoutings.Items.Add(lvItem); } @@ -75,7 +77,7 @@ namespace v2rayN.Forms { config.domainStrategy = cmbdomainStrategy.Text; - if (ConfigHandler.SaveRoutingRulesItem(ref config) == 0) + if (ConfigHandler.SaveRouting(ref config) == 0) { this.DialogResult = DialogResult.OK; } @@ -102,7 +104,7 @@ namespace v2rayN.Forms { return; } - var fm = new RoutingSettingDetailsForm(); + var fm = new RoutingRuleSettingForm(); fm.EditIndex = index; if (fm.ShowDialog() == DialogResult.OK) { @@ -137,39 +139,7 @@ namespace v2rayN.Forms #region Edit function - private void menuMoveTop_Click(object sender, EventArgs e) - { - MoveRule(EMove.Top); - } - private void menuMoveUp_Click(object sender, EventArgs e) - { - MoveRule(EMove.Up); - } - - private void menuMoveDown_Click(object sender, EventArgs e) - { - MoveRule(EMove.Down); - } - - private void menuMoveBottom_Click(object sender, EventArgs e) - { - MoveRule(EMove.Bottom); - } - - private void MoveRule(EMove eMove) - { - int index = GetLvSelectedIndex(); - if (index < 0) - { - UI.Show(UIRes.I18N("PleaseSelectRules")); - return; - } - if (ConfigHandler.MoveRoutingRule(ref config, index, eMove) == 0) - { - RefreshRoutingsView(); - } - } private void menuSelectAll_Click(object sender, EventArgs e) { foreach (ListViewItem item in lvRoutings.Items) @@ -180,7 +150,7 @@ namespace v2rayN.Forms private void menuAdd_Click(object sender, EventArgs e) { - var fm = new RoutingSettingDetailsForm(); + var fm = new RoutingRuleSettingForm(); fm.EditIndex = -1; if (fm.ShowDialog() == DialogResult.OK) { @@ -201,129 +171,32 @@ namespace v2rayN.Forms } for (int k = lvSelecteds.Count - 1; k >= 0; k--) { - config.rules.RemoveAt(index); + config.routings.RemoveAt(index); } RefreshRoutingsView(); } - private void menuExportSelectedRules_Click(object sender, EventArgs e) + private void menuSetDefaultRouting_Click(object sender, EventArgs e) { - GetLvSelectedIndex(); - var lst = new List(); - foreach (int v in lvSelecteds) - { - lst.Add(config.rules[v]); - } - if (lst.Count > 0) - { - Utils.SetClipboardData(Utils.ToJson(lst)); - UI.Show(UIRes.I18N("OperationSuccess")); - } - - } - - private void lvRoutings_KeyDown(object sender, KeyEventArgs e) - { - if (e.Control) - { - switch (e.KeyCode) - { - case Keys.A: - menuSelectAll_Click(null, null); - break; - case Keys.C: - menuExportSelectedRules_Click(null, null); - break; - } - } - else - { - switch (e.KeyCode) - { - case Keys.Delete: - menuRemove_Click(null, null); - break; - case Keys.T: - menuMoveTop_Click(null, null); - break; - case Keys.B: - menuMoveBottom_Click(null, null); - break; - case Keys.U: - menuMoveUp_Click(null, null); - break; - case Keys.D: - menuMoveDown_Click(null, null); - break; - } - } - } - #endregion - - #region preset rules - private void menuImportRulesFromPreset_Click(object sender, EventArgs e) - { - var rules = Utils.GetEmbedText(Global.CustomRoutingFileName + "rules"); - if (ConfigHandler.AddBatchRoutingRules(ref config, rules) == 0) - { - RefreshRoutingsView(); - UI.Show(UIRes.I18N("OperationSuccess")); - } - } - - private void menuImportRulesFromFile_Click(object sender, EventArgs e) - { - OpenFileDialog fileDialog = new OpenFileDialog - { - Multiselect = false, - Filter = "Rules|*.json|All|*.*" - }; - if (fileDialog.ShowDialog() != DialogResult.OK) + int index = GetLvSelectedIndex(); + if (index < 0) { return; } - string fileName = fileDialog.FileName; - if (Utils.IsNullOrEmpty(fileName)) - { - return; - } - string result = Utils.LoadResource(fileName); - if (Utils.IsNullOrEmpty(result)) - { - return; - } - if (ConfigHandler.AddBatchRoutingRules(ref config, result) == 0) - { - RefreshRoutingsView(); - UI.Show(UIRes.I18N("OperationSuccess")); - } + SetDefaultRouting(index); } - - private void menuImportRulesFromClipboard_Click(object sender, EventArgs e) + private int SetDefaultRouting(int index) { - string clipboardData = Utils.GetClipboardData(); - if (ConfigHandler.AddBatchRoutingRules(ref config, clipboardData) == 0) + if (index < 0) + { + UI.Show(UIRes.I18N("PleaseSelectServer")); + return -1; + } + if (ConfigHandler.SetDefaultRouting(ref config, index) == 0) { RefreshRoutingsView(); - UI.Show(UIRes.I18N("OperationSuccess")); } + return 0; } - private void menuImportRulesFromUrl_Click(object sender, EventArgs e) - { - var fm = new RoutingSubSettingForm(); - if (fm.ShowDialog() != DialogResult.OK) - { - return; - } - var url = fm.Url; - DownloadHandle downloadHandle = new DownloadHandle(); - string clipboardData = downloadHandle.WebDownloadStringSync(url); - if (ConfigHandler.AddBatchRoutingRules(ref config, clipboardData) == 0) - { - RefreshRoutingsView(); - UI.Show(UIRes.I18N("OperationSuccess")); - } - } - #endregion diff --git a/v2rayN/v2rayN/Forms/RoutingSettingForm.resx b/v2rayN/v2rayN/Forms/RoutingSettingForm.resx index 5e7a353e..ec736bae 100644 --- a/v2rayN/v2rayN/Forms/RoutingSettingForm.resx +++ b/v2rayN/v2rayN/Forms/RoutingSettingForm.resx @@ -117,317 +117,218 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - System.Windows.Forms.TabControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 3 - - - cmbdomainStrategy - - - Fill - - - Down (D) - - - - 765, 25 - - - Bottom - - - Edit and Function - - - panel1 - - - panel1 - - - $this - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 4 - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - 15 - - - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 4, 22 - - - 6, 21 - - - $this - - + NoControl - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 568, 17 - - Routing Settings + + 75, 23 - - Remove selected + + + 4 - - tabPage2 - - - menuExportSelectedRules - - - 202, 22 - - - 475, 17 - - - Domain strategy - - - System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - MenuItem1 - - - 0 - - - 757, 511 - - - 1 - - - 6, 12 - - - IPOnDemand - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Fill - - - Export Selected Rules - - - 0, 0 - - - 765, 60 - - - 0, 25 - - - 95, 21 - - - menuServer - - - Import Rules - - - 120, 21 - - - 19 - - - Import Rules From Url - - - System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 2 - - - menuSelectAll - - - menuMoveTop - - - 202, 22 - - - cmsLv - - - 5 - - - menuMoveDown - - - 165, 20 - - - menuImportRulesFromFile - - - Add - - - 247, 22 - - - toolStripSeparator3 - - - True - - - tabPage2 - - - toolStripMenuItem1 - - - menuMoveBottom - - - menuImportRulesFromUrl - - - 95, 12 - - - Import Rules From File - - - 202, 22 - - - 765, 537 - - - 1 - - - RoutingSettingForm - - - panel2 - - - Import Rules From Preset - - - 202, 22 - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Windows.Forms.MenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + &Cancel btnClose - - Up (U) - - - 12 - - - 203, 186 - - - btnOK - - - 116, 17 - - - 14 - - - NoControl - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 3, 3 - - - menuImportRulesFromClipboard - - - Import Rules From Clipboard - - - menuAdd - - - 0, 76 - - - IPIfNonMatch - - - 247, 22 + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 panel2 - - Move to top (T) + + 0 - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + NoControl + + + 475, 17 + + + 75, 23 + + + 5 + + + &OK + + + btnOK + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panel2 + + + 1 + + + Bottom + + + 0, 613 + + + 765, 60 + + + 7 + + + panel2 + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 3 + + + True + + + NoControl + + + 6, 21 + + + 0, 0, 0, 0 + + + 95, 12 + + + 19 + + + Domain strategy + + + linkLabelRoutingDoc + + + System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panel1 + + + 0 + + + AsIs + + + IPIfNonMatch + + + IPOnDemand + + + 116, 17 + + + 165, 20 + + + 16 + + + cmbdomainStrategy + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panel1 + + + 1 + + + Top + + + 0, 25 765, 51 - - 751, 505 + + 11 + + + panel1 + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 2 + + + 17, 17 + + + 194, 22 + + + Add + + + 194, 22 + + + Remove selected - 202, 22 + 194, 22 + + + Select All (Ctrl+A) + + + 194, 22 + + + Set as active routing + + + 120, 21 + + + Edit and Function + + + 195, 114 + + + cmsLv + + + System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Fill @@ -446,166 +347,148 @@ ZW0uRHJhd2luZy5HcmFwaGljc1VuaXQBAAAAB3ZhbHVlX18ACAMAAAADAAAACw== - - menuImportRulesFromPreset + + 3, 3 - - &OK + + 751, 505 - - 0, 0, 0, 0 - - - 247, 22 - - - $this - - - v2rayN.Base.ListViewFlickerFree, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null - - - 16 - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - AsIs - - - 202, 22 - - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Move to bottom (B) - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 11 - - - panel2 - - - 7 - - - 0 - - - v2rayN.Forms.BaseForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null - - - tabControl2 - - - System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 3, 3, 3, 3 - - - 0, 613 - - - menuMoveUp - - - RuleList - - - Select All (Ctrl+A) - - - &Cancel - - - 199, 6 - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 4 - - - panel1 - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 247, 22 - - - 202, 22 - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 12 lvRoutings - - linkLabelRoutingDoc + + v2rayN.Base.ListViewFlickerFree, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null - - 202, 22 + + tabPage2 - - menuRemove + + 0 - - NoControl + + 4, 22 - - 765, 673 + + 3, 3, 3, 3 - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 75, 23 - - - 1 + + 757, 511 0 - - 75, 23 + + RuleSetList - + + tabPage2 + + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + tabControl2 0 - - System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Fill - - 568, 17 + + 0, 76 - - 0 + + 765, 537 - - Top + + 14 + + + tabControl2 + + + System.Windows.Forms.TabControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 1 + + + 139, 17 + + + 0, 0 + + + 765, 25 + + + 15 + + + menuServer + + + System.Windows.Forms.MenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 4 True - - 17, 17 - - - 139, 17 - + + 6, 12 + + + 765, 673 + + + Routing Settings + + + menuAdd + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuRemove + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuSelectAll + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuSetDefaultRouting + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + MenuItem1 + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + RoutingSettingForm + + + v2rayN.Forms.BaseForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/v2rayN/v2rayN/Forms/RoutingSettingForm.zh-Hans.resx b/v2rayN/v2rayN/Forms/RoutingSettingForm.zh-Hans.resx index 7e6ffcf9..3efb9922 100644 --- a/v2rayN/v2rayN/Forms/RoutingSettingForm.zh-Hans.resx +++ b/v2rayN/v2rayN/Forms/RoutingSettingForm.zh-Hans.resx @@ -124,8 +124,11 @@ 确定(&O) + + 0, 474 + - 785, 60 + 726, 60 77, 12 @@ -134,67 +137,40 @@ 域名解析策略 - 785, 51 + 726, 51 - 196, 22 + 148, 22 - 添加规则 + 添加规则集 - 196, 22 + 148, 22 移除所选规则 - 196, 22 + 148, 22 全选 - - 196, 22 + + 148, 22 - - 导出所选规则至剪贴板 - - - 193, 6 - - - 196, 22 - - - 上移至顶 (T) - - - 196, 22 - - - 上移 (U) - - - 196, 22 - - - 下移 (D) - - - 196, 22 - - - 下移至底 (B) + + 设为活动路由 - 92, 21 + 104, 21 - 路由规则功能 + 路由规则集功能 - 197, 186 + 149, 92 @@ -214,52 +190,22 @@ - 771, 505 + 712, 366 - 777, 511 + 718, 372 - 路由规则列表 + 路由规则集列表 - 785, 537 - - - 184, 22 - - - 从预设中导入规则 - - - 184, 22 - - - 从文件中导入规则 - - - 184, 22 - - - 从剪贴板中导入规则 - - - 184, 22 - - - 从Url中导入规则 - - - 92, 21 - - - 导入路由规则 + 726, 398 - 785, 25 + 726, 25 - 785, 673 + 726, 534 路由设置 diff --git a/v2rayN/v2rayN/Forms/SubSettingControl.resx b/v2rayN/v2rayN/Forms/SubSettingControl.resx index fdeefb50..96c09774 100644 --- a/v2rayN/v2rayN/Forms/SubSettingControl.resx +++ b/v2rayN/v2rayN/Forms/SubSettingControl.resx @@ -131,9 +131,6 @@ txtUrl - - 6 - picQRCode @@ -180,6 +177,9 @@ 83, 12 + + System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + 232, 21 @@ -237,6 +237,9 @@ 5 + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + 47, 12 @@ -258,8 +261,8 @@ NoControl - - 0, 110 + + 619, 310 75, 23 @@ -273,9 +276,6 @@ 25 - - 10 - 23 @@ -309,6 +309,9 @@ label2 + + System.Windows.Forms.UserControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + 619, 110 @@ -321,8 +324,8 @@ NoControl - - 619, 310 + + 0, 110 11 @@ -345,9 +348,6 @@ 75, 23 - - grbMain - 1 @@ -357,17 +357,17 @@ System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - System.Windows.Forms.UserControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 10 - - System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + grbMain 525, 21 - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 6 System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -381,7 +381,4 @@ True - - zh-Hans - \ No newline at end of file diff --git a/v2rayN/v2rayN/Handler/ConfigHandler.cs b/v2rayN/v2rayN/Handler/ConfigHandler.cs index 5f905f84..2287c34d 100644 --- a/v2rayN/v2rayN/Handler/ConfigHandler.cs +++ b/v2rayN/v2rayN/Handler/ConfigHandler.cs @@ -16,6 +16,8 @@ namespace v2rayN.Handler { private static string configRes = Global.ConfigFileName; + #region ConfigHandler + /// /// 载入配置文件 /// @@ -87,10 +89,7 @@ namespace v2rayN.Handler { config.domainStrategy = "IPIfNonMatch"; } - if (config.rules == null) - { - config.rules = new List(); - } + //kcp if (config.kcpItem == null) { @@ -136,10 +135,6 @@ namespace v2rayN.Handler { config.subItem = new List(); } - if (config.ruleSubItem == null) - { - config.ruleSubItem = new List(); - } if (config == null || config.index < 0 @@ -164,6 +159,10 @@ namespace v2rayN.Handler return 0; } + #endregion + + #region Server + /// /// 添加服务器或编辑 /// @@ -861,38 +860,6 @@ namespace v2rayN.Handler return 0; } - public static int AddformMainLvColWidth(ref Config config, string name, int width) - { - if (config.uiItem.mainLvColWidth == null) - { - config.uiItem.mainLvColWidth = new Dictionary(); - } - if (config.uiItem.mainLvColWidth.ContainsKey(name)) - { - config.uiItem.mainLvColWidth[name] = width; - } - else - { - config.uiItem.mainLvColWidth.Add(name, width); - } - return 0; - } - public static int GetformMainLvColWidth(ref Config config, string name, int width) - { - if (config.uiItem.mainLvColWidth == null) - { - config.uiItem.mainLvColWidth = new Dictionary(); - } - if (config.uiItem.mainLvColWidth.ContainsKey(name)) - { - return config.uiItem.mainLvColWidth[name]; - } - else - { - return width; - } - } - public static int SortServers(ref Config config, EServerColName name, bool asc) { if (config.vmess.Count <= 0) @@ -984,47 +951,78 @@ namespace v2rayN.Handler return 0; } + #endregion - /// - /// SaveRoutingItem - /// - /// - /// - public static int SaveRoutingRulesItem(ref Config config) + #region UI + + public static int AddformMainLvColWidth(ref Config config, string name, int width) { - if (config.rules == null) + if (config.uiItem.mainLvColWidth == null) + { + config.uiItem.mainLvColWidth = new Dictionary(); + } + if (config.uiItem.mainLvColWidth.ContainsKey(name)) + { + config.uiItem.mainLvColWidth[name] = width; + } + else + { + config.uiItem.mainLvColWidth.Add(name, width); + } + return 0; + } + public static int GetformMainLvColWidth(ref Config config, string name, int width) + { + if (config.uiItem.mainLvColWidth == null) + { + config.uiItem.mainLvColWidth = new Dictionary(); + } + if (config.uiItem.mainLvColWidth.ContainsKey(name)) + { + return config.uiItem.mainLvColWidth[name]; + } + else + { + return width; + } + } + + #endregion + + #region Routing + + public static int SaveRouting(ref Config config) + { + if (config.routings == null) { return -1; } - foreach (RulesItem sub in config.rules) + foreach (var item in config.routings) { } + if (config.routingIndex >= config.routings.Count) + { + config.routingIndex = 0; + } + Global.reloadV2ray = true; ToJsonFile(config); return 0; } - /// - /// AddRoutingRulesItem - /// - /// - /// - /// - /// - public static int AddRoutingRule(ref Config config, RulesItem item, int index) + + public static int AddRoutingItem(ref Config config, RoutingItem item, int index) { if (index >= 0) { - config.rules[index] = item; + config.routings[index] = item; } else { - config.rules.Add(item); + config.routings.Add(item); } - Global.reloadV2ray = true; - ToJsonFile(config); return 0; @@ -1036,7 +1034,7 @@ namespace v2rayN.Handler /// /// /// - public static int AddBatchRoutingRules(ref Config config, string clipboardData) + public static int AddBatchRoutingRules(ref RoutingItem routingItem, string clipboardData) { if (Utils.IsNullOrEmpty(clipboardData)) { @@ -1049,30 +1047,25 @@ namespace v2rayN.Handler return -1; } - config.rules.Clear(); + routingItem.rules.Clear(); foreach (var item in lstRules) { - config.rules.Add(item); + routingItem.rules.Add(item); } - - Global.reloadV2ray = true; - - ToJsonFile(config); - return 0; } /// /// MoveRoutingRule /// - /// + /// /// /// /// - public static int MoveRoutingRule(ref Config config, int index, EMove eMove) + public static int MoveRoutingRule(ref RoutingItem routingItem, int index, EMove eMove) { - int count = config.rules.Count; - if (index < 0 || index > config.rules.Count - 1) + int count = routingItem.rules.Count; + if (index < 0 || index > routingItem.rules.Count - 1) { return -1; } @@ -1084,9 +1077,9 @@ namespace v2rayN.Handler { return 0; } - var item = Utils.DeepCopy(config.rules[index]); - config.rules.RemoveAt(index); - config.rules.Insert(0, item); + var item = Utils.DeepCopy(routingItem.rules[index]); + routingItem.rules.RemoveAt(index); + routingItem.rules.Insert(0, item); break; } @@ -1096,9 +1089,9 @@ namespace v2rayN.Handler { return 0; } - var item = Utils.DeepCopy(config.rules[index]); - config.rules.RemoveAt(index); - config.rules.Insert(index - 1, item); + var item = Utils.DeepCopy(routingItem.rules[index]); + routingItem.rules.RemoveAt(index); + routingItem.rules.Insert(index - 1, item); break; } @@ -1109,9 +1102,9 @@ namespace v2rayN.Handler { return 0; } - var item = Utils.DeepCopy(config.rules[index]); - config.rules.RemoveAt(index); - config.rules.Insert(index + 1, item); + var item = Utils.DeepCopy(routingItem.rules[index]); + routingItem.rules.RemoveAt(index); + routingItem.rules.Insert(index + 1, item); break; } @@ -1121,14 +1114,30 @@ namespace v2rayN.Handler { return 0; } - var item = Utils.DeepCopy(config.rules[index]); - config.rules.RemoveAt(index); - config.rules.Add(item); + var item = Utils.DeepCopy(routingItem.rules[index]); + routingItem.rules.RemoveAt(index); + routingItem.rules.Add(item); break; } } + return 0; + } + + public static int SetDefaultRouting(ref Config config, int index) + { + if (index < 0 || index > config.routings.Count - 1) + { + return -1; + } + + ////和现在相同 + //if (config.index.Equals(index)) + //{ + // return -1; + //} + config.routingIndex = index; Global.reloadV2ray = true; ToJsonFile(config); @@ -1136,28 +1145,39 @@ namespace v2rayN.Handler return 0; } - /// - /// SaveRuleSubItem - /// - /// - /// - public static int SaveRuleSubItem(ref Config config) + public static int InitBuiltinRouting(ref Config config) { - if (config.ruleSubItem == null || config.ruleSubItem.Count <= 0) + if (config.routings == null) { - return -1; + config.routings = new List(); } + if (config.routings.Count > 0) + { + return 0; + } + config.routingIndex = 0; - foreach (SubItem sub in config.ruleSubItem) - { - if (Utils.IsNullOrEmpty(sub.id)) - { - sub.id = Utils.GetGUID(); - } - } + //Global + var item1 = new RoutingItem(); + item1.remarks = "全局(Global)"; + item1.url = string.Empty; + item1.rules = new List(); + string result = Utils.GetEmbedText(Global.CustomRoutingFileName + "global"); + AddBatchRoutingRules(ref item1, result); + config.routings.Add(item1); + + //Bypass the mainland + var item2 = new RoutingItem(); + item2.remarks = "绕过大陆(Whitelist)"; + item2.url = string.Empty; + item2.rules = new List(); + string result2 = Utils.GetEmbedText(Global.CustomRoutingFileName + "white"); + AddBatchRoutingRules(ref item2, result2); + config.routings.Add(item2); ToJsonFile(config); return 0; } + #endregion } } diff --git a/v2rayN/v2rayN/Handler/MainFormHandler.cs b/v2rayN/v2rayN/Handler/MainFormHandler.cs index 95142bb5..7f21abe6 100644 --- a/v2rayN/v2rayN/Handler/MainFormHandler.cs +++ b/v2rayN/v2rayN/Handler/MainFormHandler.cs @@ -1,6 +1,7 @@ using System; using System.Drawing; using System.Windows.Forms; +using v2rayN.Base; using v2rayN.Mode; namespace v2rayN.Handler @@ -147,6 +148,22 @@ namespace v2rayN.Handler } } + public int AddBatchServers(Config config, string clipboardData, string subid = "") + { + int counter; + int _Add() + { + return ConfigHandler.AddBatchServers(ref config, clipboardData, subid); + } + counter = _Add(); + if (counter < 1) + { + clipboardData = Utils.Base64Decode(clipboardData); + counter = _Add(); + } + return counter; + } + } } diff --git a/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs b/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs index 43ef1752..53a0b8c3 100644 --- a/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs +++ b/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs @@ -190,9 +190,12 @@ namespace v2rayN.Handler { v2rayConfig.routing.domainStrategy = config.domainStrategy; - foreach (var item in config.rules) + if (config.routings != null && config.routingIndex < config.routings.Count) { - routingUserRule(item, ref v2rayConfig); + foreach (var item in config.routings[config.routingIndex].rules) + { + routingUserRule(item, ref v2rayConfig); + } } } } diff --git a/v2rayN/v2rayN/Mode/Config.cs b/v2rayN/v2rayN/Mode/Config.cs index da2983bd..552b35fb 100644 --- a/v2rayN/v2rayN/Mode/Config.cs +++ b/v2rayN/v2rayN/Mode/Config.cs @@ -60,13 +60,6 @@ namespace v2rayN.Mode get; set; } - /// - /// 域名解析策略 - /// - public string domainStrategy - { - get; set; - } /// /// KcpItem /// @@ -161,15 +154,22 @@ namespace v2rayN.Mode { get; set; } - public List rules + /// + /// 域名解析策略 + /// + public string domainStrategy { get; set; } - public List ruleSubItem + public int routingIndex { get; set; } - + public List routings + { + get; set; + } + public ECoreType coreType { get; set; diff --git a/v2rayN/v2rayN/Mode/RoutingItem.cs b/v2rayN/v2rayN/Mode/RoutingItem.cs new file mode 100644 index 00000000..a033c227 --- /dev/null +++ b/v2rayN/v2rayN/Mode/RoutingItem.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace v2rayN.Mode +{ + public class RoutingItem + { + public string remarks + { + get; set; + } + public string url + { + get; set; + } + public List rules + { + get; set; + } + public bool enabled { get; set; } = true; + + } +} diff --git a/v2rayN/v2rayN/Mode/RulesItem.cs b/v2rayN/v2rayN/Mode/RulesItem.cs index bb3a85e4..738a889f 100644 --- a/v2rayN/v2rayN/Mode/RulesItem.cs +++ b/v2rayN/v2rayN/Mode/RulesItem.cs @@ -6,8 +6,6 @@ namespace v2rayN.Mode [Serializable] public class RulesItem { - public string remarks { get; set; } - public string type { get; set; } public string port { get; set; } diff --git a/v2rayN/v2rayN/Properties/AssemblyInfo.cs b/v2rayN/v2rayN/Properties/AssemblyInfo.cs index 1b7c1162..9d36a669 100644 --- a/v2rayN/v2rayN/Properties/AssemblyInfo.cs +++ b/v2rayN/v2rayN/Properties/AssemblyInfo.cs @@ -32,4 +32,4 @@ using System.Runtime.InteropServices; // 方法是按如下所示使用“*”: //[assembly: AssemblyVersion("1.0.*")] //[assembly: AssemblyVersion("1.0.0")] -[assembly: AssemblyFileVersion("4.6")] +[assembly: AssemblyFileVersion("4.7")] diff --git a/v2rayN/v2rayN/Resx/ResUI.Designer.cs b/v2rayN/v2rayN/Resx/ResUI.Designer.cs index a92b8267..df456572 100644 --- a/v2rayN/v2rayN/Resx/ResUI.Designer.cs +++ b/v2rayN/v2rayN/Resx/ResUI.Designer.cs @@ -19,7 +19,7 @@ namespace v2rayN.Resx { // 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。 // 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen // (以 /str 作为命令选项),或重新生成 VS 项目。 - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] internal class ResUI { @@ -312,6 +312,15 @@ namespace v2rayN.Resx { } } + /// + /// 查找类似 Count 的本地化字符串。 + /// + internal static string LvCount { + get { + return ResourceManager.GetString("LvCount", resourceCulture); + } + } + /// /// 查找类似 Security 的本地化字符串。 /// @@ -330,6 +339,15 @@ namespace v2rayN.Resx { } } + /// + /// 查找类似 remarks 的本地化字符串。 + /// + internal static string LvRemarks { + get { + return ResourceManager.GetString("LvRemarks", resourceCulture); + } + } + /// /// 查找类似 Type 的本地化字符串。 /// @@ -402,6 +420,15 @@ namespace v2rayN.Resx { } } + /// + /// 查找类似 Url 的本地化字符串。 + /// + internal static string LvUrl { + get { + return ResourceManager.GetString("LvUrl", resourceCulture); + } + } + /// /// 查找类似 MediumFresh 的本地化字符串。 /// @@ -447,6 +474,15 @@ namespace v2rayN.Resx { } } + /// + /// 查找类似 Please fill in the address (Url) 的本地化字符串。 + /// + internal static string MsgNeedUrl { + get { + return ResourceManager.GetString("MsgNeedUrl", resourceCulture); + } + } + /// /// 查找类似 No valid subscriptions set 的本地化字符串。 /// diff --git a/v2rayN/v2rayN/Resx/ResUI.resx b/v2rayN/v2rayN/Resx/ResUI.resx index 21747ecc..5691c92f 100644 --- a/v2rayN/v2rayN/Resx/ResUI.resx +++ b/v2rayN/v2rayN/Resx/ResUI.resx @@ -373,4 +373,16 @@ {0},One of the required. + + remarks + + + Url + + + Count + + + Please fill in the address (Url) + \ No newline at end of file diff --git a/v2rayN/v2rayN/Resx/ResUI.zh-Hans.resx b/v2rayN/v2rayN/Resx/ResUI.zh-Hans.resx index 59b4f18b..fa947463 100644 --- a/v2rayN/v2rayN/Resx/ResUI.zh-Hans.resx +++ b/v2rayN/v2rayN/Resx/ResUI.zh-Hans.resx @@ -373,4 +373,16 @@ {0},必填其中一项. + + 别名 + + + 地址(Url) + + + 数量 + + + 请填写地址(Url) + \ No newline at end of file diff --git a/v2rayN/v2rayN/Sample/custom_routing_global b/v2rayN/v2rayN/Sample/custom_routing_global new file mode 100644 index 00000000..169d8156 --- /dev/null +++ b/v2rayN/v2rayN/Sample/custom_routing_global @@ -0,0 +1,6 @@ +[ + { + "port": "0-65535", + "outboundTag": "proxy" + } +] \ No newline at end of file diff --git a/v2rayN/v2rayN/Sample/custom_routing_white b/v2rayN/v2rayN/Sample/custom_routing_white new file mode 100644 index 00000000..7ee814b3 --- /dev/null +++ b/v2rayN/v2rayN/Sample/custom_routing_white @@ -0,0 +1,24 @@ +[{ + "outboundTag": "block", + "domain": [ + "geosite:category-ads-all" + ] + }, + { + "outboundTag": "direct", + "domain": [ + "geosite:cn" + ] + }, + { + "outboundTag": "direct", + "ip": [ + "geoip:private", + "geoip:cn" + ] + }, + { + "port": "0-65535", + "outboundTag": "proxy" + } +] \ No newline at end of file diff --git a/v2rayN/v2rayN/v2rayN.csproj b/v2rayN/v2rayN/v2rayN.csproj index 5776ed1f..c38e2c89 100644 --- a/v2rayN/v2rayN/v2rayN.csproj +++ b/v2rayN/v2rayN/v2rayN.csproj @@ -125,17 +125,17 @@ BaseServerForm.cs - + Form - - RoutingSettingDetailsForm.cs + + RoutingRuleSettingDetailsForm.cs - + Form - - RoutingSubSettingForm.cs + + RoutingRuleSettingForm.cs @@ -196,6 +196,7 @@ + @@ -307,19 +308,20 @@ QRCodeControl.cs Designer - - RoutingSettingDetailsForm.cs + + RoutingRuleSettingDetailsForm.cs Designer - - RoutingSettingDetailsForm.cs + + RoutingRuleSettingDetailsForm.cs Designer - - RoutingSubSettingForm.cs + + RoutingRuleSettingForm.cs + Designer - - RoutingSubSettingForm.cs + + RoutingRuleSettingForm.cs SubSettingControl.cs @@ -384,7 +386,8 @@ - + + From ae79d8c608c9c643ffc20031cbf9ad3a9e2ae342 Mon Sep 17 00:00:00 2001 From: 2dust <31833384+2dust@users.noreply.github.com> Date: Sat, 23 Jan 2021 12:44:51 +0800 Subject: [PATCH 48/54] Update MainForm.cs --- v2rayN/v2rayN/Forms/MainForm.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/v2rayN/v2rayN/Forms/MainForm.cs b/v2rayN/v2rayN/Forms/MainForm.cs index a0525134..5ef402c0 100644 --- a/v2rayN/v2rayN/Forms/MainForm.cs +++ b/v2rayN/v2rayN/Forms/MainForm.cs @@ -1440,6 +1440,7 @@ namespace v2rayN.Forms int ret = MainFormHandler.Instance.AddBatchServers(config, result, id); if (ret > 0) { + RefreshServers(); } else { From 53f9fee834b826fccb3004acc9d3802e342b61d3 Mon Sep 17 00:00:00 2001 From: 2dust <31833384+2dust@users.noreply.github.com> Date: Sat, 23 Jan 2021 17:25:09 +0800 Subject: [PATCH 49/54] Update RoutingItem.cs --- v2rayN/v2rayN/Mode/RoutingItem.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/v2rayN/v2rayN/Mode/RoutingItem.cs b/v2rayN/v2rayN/Mode/RoutingItem.cs index a033c227..544558ed 100644 --- a/v2rayN/v2rayN/Mode/RoutingItem.cs +++ b/v2rayN/v2rayN/Mode/RoutingItem.cs @@ -6,6 +6,7 @@ using System.Threading.Tasks; namespace v2rayN.Mode { + [Serializable] public class RoutingItem { public string remarks From 7885893e9b7a6c08866cece4408736deead0fdd8 Mon Sep 17 00:00:00 2001 From: 2dust <31833384+2dust@users.noreply.github.com> Date: Sat, 23 Jan 2021 17:25:19 +0800 Subject: [PATCH 50/54] Update AssemblyInfo.cs --- v2rayN/v2rayN/Properties/AssemblyInfo.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/v2rayN/v2rayN/Properties/AssemblyInfo.cs b/v2rayN/v2rayN/Properties/AssemblyInfo.cs index 9d36a669..01ee1030 100644 --- a/v2rayN/v2rayN/Properties/AssemblyInfo.cs +++ b/v2rayN/v2rayN/Properties/AssemblyInfo.cs @@ -32,4 +32,4 @@ using System.Runtime.InteropServices; // 方法是按如下所示使用“*”: //[assembly: AssemblyVersion("1.0.*")] //[assembly: AssemblyVersion("1.0.0")] -[assembly: AssemblyFileVersion("4.7")] +[assembly: AssemblyFileVersion("4.8")] From 608417325722252c1f462f60ef13684494b82938 Mon Sep 17 00:00:00 2001 From: 2dust <31833384+2dust@users.noreply.github.com> Date: Fri, 29 Jan 2021 20:19:23 +0800 Subject: [PATCH 51/54] up4.9 --- v2rayN/v2rayN/Forms/MainForm.Designer.cs | 49 + v2rayN/v2rayN/Forms/MainForm.cs | 51 + v2rayN/v2rayN/Forms/MainForm.resx | 112 +- v2rayN/v2rayN/Forms/MainForm.zh-Hans.resx | 45 +- .../RoutingRuleQuicklyAddForm.Designer.cs | 170 +++ .../v2rayN/Forms/RoutingRuleQuicklyAddForm.cs | 73 ++ .../Forms/RoutingRuleQuicklyAddForm.resx | 462 +++++++ .../RoutingRuleQuicklyAddForm.zh-Hans.resx | 132 ++ .../Forms/RoutingRuleSettingDetailsForm.resx | 3 + .../Forms/RoutingRuleSettingForm.Designer.cs | 1 + v2rayN/v2rayN/Forms/RoutingRuleSettingForm.cs | 2 +- .../v2rayN/Forms/RoutingRuleSettingForm.resx | 71 +- .../Forms/RoutingRuleSettingForm.zh-Hans.resx | 68 +- .../Forms/RoutingSettingForm.Designer.cs | 351 ++++-- v2rayN/v2rayN/Forms/RoutingSettingForm.cs | 144 ++- v2rayN/v2rayN/Forms/RoutingSettingForm.resx | 1080 ++++++++++++----- .../Forms/RoutingSettingForm.zh-Hans.resx | 97 +- v2rayN/v2rayN/Handler/ConfigHandler.cs | 63 +- v2rayN/v2rayN/Handler/V2rayConfigHandler.cs | 8 + v2rayN/v2rayN/Mode/RoutingItem.cs | 5 + v2rayN/v2rayN/Properties/AssemblyInfo.cs | 2 +- v2rayN/v2rayN/Sample/custom_routing_locked | 21 + v2rayN/v2rayN/Sample/custom_routing_white | 40 +- v2rayN/v2rayN/v2rayN.csproj | 1 + 24 files changed, 2485 insertions(+), 566 deletions(-) create mode 100644 v2rayN/v2rayN/Forms/RoutingRuleQuicklyAddForm.Designer.cs create mode 100644 v2rayN/v2rayN/Forms/RoutingRuleQuicklyAddForm.cs create mode 100644 v2rayN/v2rayN/Forms/RoutingRuleQuicklyAddForm.resx create mode 100644 v2rayN/v2rayN/Forms/RoutingRuleQuicklyAddForm.zh-Hans.resx create mode 100644 v2rayN/v2rayN/Sample/custom_routing_locked diff --git a/v2rayN/v2rayN/Forms/MainForm.Designer.cs b/v2rayN/v2rayN/Forms/MainForm.Designer.cs index 93b3aedb..b69bff7e 100644 --- a/v2rayN/v2rayN/Forms/MainForm.Designer.cs +++ b/v2rayN/v2rayN/Forms/MainForm.Designer.cs @@ -84,6 +84,11 @@ this.groupBox1 = new System.Windows.Forms.GroupBox(); this.groupBox2 = new System.Windows.Forms.GroupBox(); this.txtMsgBox = new System.Windows.Forms.TextBox(); + this.cmsMsgBox = new System.Windows.Forms.ContextMenuStrip(this.components); + this.menuMsgBoxSelectAll = new System.Windows.Forms.ToolStripMenuItem(); + this.menuMsgBoxCopy = new System.Windows.Forms.ToolStripMenuItem(); + this.menuMsgBoxCopyAll = new System.Windows.Forms.ToolStripMenuItem(); + this.menuMsgBoxAddRoutingRule = new System.Windows.Forms.ToolStripMenuItem(); this.ssMain = new System.Windows.Forms.StatusStrip(); this.toolSslSocksPortLab = new System.Windows.Forms.ToolStripStatusLabel(); this.toolSslSocksPort = new System.Windows.Forms.ToolStripStatusLabel(); @@ -130,6 +135,7 @@ this.cmsMain.SuspendLayout(); this.groupBox1.SuspendLayout(); this.groupBox2.SuspendLayout(); + this.cmsMsgBox.SuspendLayout(); this.ssMain.SuspendLayout(); this.tsMain.SuspendLayout(); this.SuspendLayout(); @@ -208,6 +214,7 @@ this.menuExport2ShareUrl, this.menuExport2SubContent}); this.cmsLv.Name = "cmsLv"; + this.cmsLv.OwnerItem = this.tsbServer; // // menuAddVmessServer // @@ -525,9 +532,45 @@ resources.ApplyResources(this.txtMsgBox, "txtMsgBox"); this.txtMsgBox.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(41)))), ((int)(((byte)(49)))), ((int)(((byte)(52))))); this.txtMsgBox.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.txtMsgBox.ContextMenuStrip = this.cmsMsgBox; this.txtMsgBox.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(226)))), ((int)(((byte)(228))))); this.txtMsgBox.Name = "txtMsgBox"; this.txtMsgBox.ReadOnly = true; + this.txtMsgBox.KeyDown += new System.Windows.Forms.KeyEventHandler(this.txtMsgBox_KeyDown); + // + // cmsMsgBox + // + resources.ApplyResources(this.cmsMsgBox, "cmsMsgBox"); + this.cmsMsgBox.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.menuMsgBoxSelectAll, + this.menuMsgBoxCopy, + this.menuMsgBoxCopyAll, + this.menuMsgBoxAddRoutingRule}); + this.cmsMsgBox.Name = "cmsMsgBox"; + // + // menuMsgBoxSelectAll + // + resources.ApplyResources(this.menuMsgBoxSelectAll, "menuMsgBoxSelectAll"); + this.menuMsgBoxSelectAll.Name = "menuMsgBoxSelectAll"; + this.menuMsgBoxSelectAll.Click += new System.EventHandler(this.menuMsgBoxSelectAll_Click); + // + // menuMsgBoxCopy + // + resources.ApplyResources(this.menuMsgBoxCopy, "menuMsgBoxCopy"); + this.menuMsgBoxCopy.Name = "menuMsgBoxCopy"; + this.menuMsgBoxCopy.Click += new System.EventHandler(this.menuMsgBoxCopy_Click); + // + // menuMsgBoxCopyAll + // + resources.ApplyResources(this.menuMsgBoxCopyAll, "menuMsgBoxCopyAll"); + this.menuMsgBoxCopyAll.Name = "menuMsgBoxCopyAll"; + this.menuMsgBoxCopyAll.Click += new System.EventHandler(this.menuMsgBoxCopyAll_Click); + // + // menuMsgBoxAddRoutingRule + // + resources.ApplyResources(this.menuMsgBoxAddRoutingRule, "menuMsgBoxAddRoutingRule"); + this.menuMsgBoxAddRoutingRule.Name = "menuMsgBoxAddRoutingRule"; + this.menuMsgBoxAddRoutingRule.Click += new System.EventHandler(this.menuMsgBoxAddRoutingRule_Click); // // ssMain // @@ -818,6 +861,7 @@ this.groupBox1.ResumeLayout(false); this.groupBox2.ResumeLayout(false); this.groupBox2.PerformLayout(); + this.cmsMsgBox.ResumeLayout(false); this.ssMain.ResumeLayout(false); this.ssMain.PerformLayout(); this.tsMain.ResumeLayout(false); @@ -921,6 +965,11 @@ private System.Windows.Forms.ToolStripMenuItem menuClearServerStatistics; private System.Windows.Forms.ToolStripMenuItem menuRoutings; private System.Windows.Forms.ToolStripSeparator toolStripSeparator13; + private System.Windows.Forms.ContextMenuStrip cmsMsgBox; + private System.Windows.Forms.ToolStripMenuItem menuMsgBoxSelectAll; + private System.Windows.Forms.ToolStripMenuItem menuMsgBoxCopy; + private System.Windows.Forms.ToolStripMenuItem menuMsgBoxAddRoutingRule; + private System.Windows.Forms.ToolStripMenuItem menuMsgBoxCopyAll; } } diff --git a/v2rayN/v2rayN/Forms/MainForm.cs b/v2rayN/v2rayN/Forms/MainForm.cs index 5ef402c0..6b293a83 100644 --- a/v2rayN/v2rayN/Forms/MainForm.cs +++ b/v2rayN/v2rayN/Forms/MainForm.cs @@ -1507,6 +1507,10 @@ namespace v2rayN.Forms for (int k = 0; k < config.routings.Count; k++) { var item = config.routings[k]; + if (item.locked == true) + { + continue; + } string name = item.remarks; ToolStripMenuItem ts = new ToolStripMenuItem(name) @@ -1542,5 +1546,52 @@ namespace v2rayN.Forms } #endregion + #region MsgBoxMenu + private void menuMsgBoxSelectAll_Click(object sender, EventArgs e) + { + this.txtMsgBox.Focus(); + this.txtMsgBox.SelectAll(); + } + + private void menuMsgBoxCopy_Click(object sender, EventArgs e) + { + var data = this.txtMsgBox.SelectedText.TrimEx(); + Utils.SetClipboardData(data); + } + + private void menuMsgBoxCopyAll_Click(object sender, EventArgs e) + { + var data = this.txtMsgBox.Text; + Utils.SetClipboardData(data); + } + private void menuMsgBoxAddRoutingRule_Click(object sender, EventArgs e) + { + menuMsgBoxCopy_Click(null, null); + tsbRoutingSetting_Click(null, null); + } + + private void txtMsgBox_KeyDown(object sender, KeyEventArgs e) + { + if (e.Control) + { + switch (e.KeyCode) + { + case Keys.A: + menuMsgBoxSelectAll_Click(null, null); + break; + case Keys.C: + menuMsgBoxCopy_Click(null, null); + break; + case Keys.V: + menuMsgBoxAddRoutingRule_Click(null, null); + break; + + } + } + + } + + #endregion + } } diff --git a/v2rayN/v2rayN/Forms/MainForm.resx b/v2rayN/v2rayN/Forms/MainForm.resx index 46211fac..df1bd0d6 100644 --- a/v2rayN/v2rayN/Forms/MainForm.resx +++ b/v2rayN/v2rayN/Forms/MainForm.resx @@ -140,7 +140,7 @@ Add [VLESS] server - 2 + 3 System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -176,6 +176,9 @@ System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 227, 22 + 语言-[中文简体] @@ -201,6 +204,9 @@ 355, 22 + + menuMoveDown + 99, 53 @@ -264,8 +270,8 @@ Share - - Subscriptions + + 227, 22 952, 327 @@ -273,6 +279,9 @@ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Add Routing Rule (Ctrl+V) + 355, 22 @@ -288,9 +297,15 @@ System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Copy All + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 227, 22 + Export selected server for server configuration @@ -321,9 +336,6 @@ System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 356, 622 - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -345,6 +357,9 @@ 203, 22 + + menuMsgBoxCopy + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -387,7 +402,7 @@ Servers - 3 + 4 3, 17 @@ -416,8 +431,8 @@ menuAddCustomServer - - menuMoveDown + + txtMsgBox System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -425,8 +440,8 @@ Import bulk URL from clipboard - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 184, 6 Move to bottom (B) @@ -633,7 +648,7 @@ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - 4 + 5 System.Windows.Forms.SplitterPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -656,6 +671,9 @@ Help + + menuMsgBoxSelectAll + menuSelectAll @@ -695,6 +713,9 @@ menuRemoveDuplicateServer + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + BottomCenter @@ -729,10 +750,10 @@ 0, 66 - 5 + 6 - - tsbV2rayWebsite + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Server @@ -743,9 +764,6 @@ menuAddShadowsocksServer - - txtMsgBox - toolSslBlank4 @@ -800,6 +818,9 @@ 352, 6 + + System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -812,6 +833,12 @@ 1 + + tsbV2rayWebsite + + + cmsMsgBox + System.Windows.Forms.SplitterPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -821,8 +848,8 @@ menuMoveTop - - tsbCheckUpdateCore + + Copy (Ctrl+C) @@ -841,6 +868,9 @@ ZW0uRHJhd2luZy5HcmFwaGljc1VuaXQBAAAAB3ZhbHVlX18ACAMAAAADAAAACw== + + menuMsgBoxAddRoutingRule + menuScanScreen @@ -928,6 +958,9 @@ System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Subscriptions + tsbQRCodeSwitch @@ -958,6 +991,9 @@ toolStripSeparator8 + + menuMsgBoxCopyAll + 89, 53 @@ -1027,6 +1063,9 @@ menuExit + + 227, 22 + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -1057,6 +1096,9 @@ 2 + + Magenta + 4, 4, 4, 4 @@ -1090,6 +1132,9 @@ System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + tsbCheckUpdateCore + menuSpeedServer @@ -1150,6 +1195,9 @@ 0, 0 + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + 355, 22 @@ -1189,6 +1237,9 @@ System.Windows.Forms.ToolStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + $this @@ -1231,8 +1282,8 @@ 203, 22 - - 184, 6 + + 356, 622 0, 0 @@ -1255,6 +1306,9 @@ MiddleRight + + Select All (Ctrl+A) + tsbOptionSetting @@ -1273,8 +1327,8 @@ 64, 53 - - Magenta + + 228, 92 946, 26 @@ -1354,6 +1408,9 @@ System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + Magenta @@ -1451,8 +1508,8 @@ System.Windows.Forms.StatusStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 228, 18 + + 603, 17 zh-Hans @@ -1460,6 +1517,9 @@ True + + 228, 18 + 65 diff --git a/v2rayN/v2rayN/Forms/MainForm.zh-Hans.resx b/v2rayN/v2rayN/Forms/MainForm.zh-Hans.resx index 42204a5f..c4e9f00c 100644 --- a/v2rayN/v2rayN/Forms/MainForm.zh-Hans.resx +++ b/v2rayN/v2rayN/Forms/MainForm.zh-Hans.resx @@ -292,6 +292,12 @@ 批量导出订阅内容至剪贴板(多选) + + 73, 53 + + + 服务器 + 301, 622 @@ -312,12 +318,6 @@ ZW0uRHJhd2luZy5HcmFwaGljc1VuaXQBAAAAB3ZhbHVlX18ACAMAAAADAAAACw== - - 73, 53 - - - 服务器 - 172, 22 @@ -385,11 +385,38 @@ 退出 - 196, 192 + 196, 170 服务器列表 + + 221, 22 + + + 全选 (Ctrl+A) + + + 221, 22 + + + 复制 (Ctrl+C) + + + 221, 22 + + + 复制所有 + + + 221, 22 + + + 快速添加路由规则 (Ctrl+V) + + + 222, 114 + 网速显示未启用 @@ -397,13 +424,13 @@ 信息 - 180, 22 + 124, 22 订阅设置 - 180, 22 + 124, 22 更新订阅 diff --git a/v2rayN/v2rayN/Forms/RoutingRuleQuicklyAddForm.Designer.cs b/v2rayN/v2rayN/Forms/RoutingRuleQuicklyAddForm.Designer.cs new file mode 100644 index 00000000..b187f725 --- /dev/null +++ b/v2rayN/v2rayN/Forms/RoutingRuleQuicklyAddForm.Designer.cs @@ -0,0 +1,170 @@ +namespace v2rayN.Forms +{ + partial class RoutingRuleQuicklyAddForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(RoutingRuleQuicklyAddForm)); + this.panel1 = new System.Windows.Forms.Panel(); + this.panel3 = new System.Windows.Forms.Panel(); + this.label4 = new System.Windows.Forms.Label(); + this.cmbOutboundTag = new System.Windows.Forms.ComboBox(); + this.panel4 = new System.Windows.Forms.Panel(); + this.btnClose = new System.Windows.Forms.Button(); + this.btnOK = new System.Windows.Forms.Button(); + this.panel2 = new System.Windows.Forms.Panel(); + this.groupBox2 = new System.Windows.Forms.GroupBox(); + this.txtIP = new System.Windows.Forms.TextBox(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.txtDomain = new System.Windows.Forms.TextBox(); + this.panel3.SuspendLayout(); + this.panel4.SuspendLayout(); + this.panel2.SuspendLayout(); + this.groupBox2.SuspendLayout(); + this.groupBox1.SuspendLayout(); + this.SuspendLayout(); + // + // panel1 + // + resources.ApplyResources(this.panel1, "panel1"); + this.panel1.Name = "panel1"; + // + // panel3 + // + resources.ApplyResources(this.panel3, "panel3"); + this.panel3.Controls.Add(this.label4); + this.panel3.Controls.Add(this.cmbOutboundTag); + this.panel3.Name = "panel3"; + // + // label4 + // + resources.ApplyResources(this.label4, "label4"); + this.label4.Name = "label4"; + // + // cmbOutboundTag + // + resources.ApplyResources(this.cmbOutboundTag, "cmbOutboundTag"); + this.cmbOutboundTag.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cmbOutboundTag.FormattingEnabled = true; + this.cmbOutboundTag.Items.AddRange(new object[] { + resources.GetString("cmbOutboundTag.Items"), + resources.GetString("cmbOutboundTag.Items1"), + resources.GetString("cmbOutboundTag.Items2")}); + this.cmbOutboundTag.Name = "cmbOutboundTag"; + // + // panel4 + // + resources.ApplyResources(this.panel4, "panel4"); + this.panel4.Controls.Add(this.btnClose); + this.panel4.Controls.Add(this.btnOK); + this.panel4.Name = "panel4"; + // + // btnClose + // + resources.ApplyResources(this.btnClose, "btnClose"); + this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.btnClose.Name = "btnClose"; + this.btnClose.UseVisualStyleBackColor = true; + this.btnClose.Click += new System.EventHandler(this.btnClose_Click); + // + // btnOK + // + resources.ApplyResources(this.btnOK, "btnOK"); + this.btnOK.Name = "btnOK"; + this.btnOK.UseVisualStyleBackColor = true; + this.btnOK.Click += new System.EventHandler(this.btnOK_Click); + // + // panel2 + // + resources.ApplyResources(this.panel2, "panel2"); + this.panel2.Controls.Add(this.groupBox2); + this.panel2.Controls.Add(this.groupBox1); + this.panel2.Name = "panel2"; + // + // groupBox2 + // + resources.ApplyResources(this.groupBox2, "groupBox2"); + this.groupBox2.Controls.Add(this.txtIP); + this.groupBox2.Name = "groupBox2"; + this.groupBox2.TabStop = false; + // + // txtIP + // + resources.ApplyResources(this.txtIP, "txtIP"); + this.txtIP.Name = "txtIP"; + // + // groupBox1 + // + resources.ApplyResources(this.groupBox1, "groupBox1"); + this.groupBox1.Controls.Add(this.txtDomain); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.TabStop = false; + // + // txtDomain + // + resources.ApplyResources(this.txtDomain, "txtDomain"); + this.txtDomain.Name = "txtDomain"; + // + // RoutingRuleQuicklyAddForm + // + resources.ApplyResources(this, "$this"); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.CancelButton = this.btnClose; + this.Controls.Add(this.panel2); + this.Controls.Add(this.panel4); + this.Controls.Add(this.panel3); + this.Controls.Add(this.panel1); + this.Name = "RoutingRuleQuicklyAddForm"; + this.Load += new System.EventHandler(this.RoutingRuleQuicklyAddForm_Load); + this.panel3.ResumeLayout(false); + this.panel3.PerformLayout(); + this.panel4.ResumeLayout(false); + this.panel2.ResumeLayout(false); + this.groupBox2.ResumeLayout(false); + this.groupBox2.PerformLayout(); + this.groupBox1.ResumeLayout(false); + this.groupBox1.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.Panel panel3; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.ComboBox cmbOutboundTag; + private System.Windows.Forms.Panel panel4; + private System.Windows.Forms.Button btnClose; + private System.Windows.Forms.Button btnOK; + private System.Windows.Forms.Panel panel2; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.TextBox txtDomain; + private System.Windows.Forms.GroupBox groupBox2; + private System.Windows.Forms.TextBox txtIP; + } +} \ No newline at end of file diff --git a/v2rayN/v2rayN/Forms/RoutingRuleQuicklyAddForm.cs b/v2rayN/v2rayN/Forms/RoutingRuleQuicklyAddForm.cs new file mode 100644 index 00000000..51f6d87b --- /dev/null +++ b/v2rayN/v2rayN/Forms/RoutingRuleQuicklyAddForm.cs @@ -0,0 +1,73 @@ +using System; +using System.Windows.Forms; +using v2rayN.Handler; +using v2rayN.Mode; + +namespace v2rayN.Forms +{ + public partial class RoutingRuleQuicklyAddForm : BaseForm + { + public string domain + { + get; set; + } + private RulesItem rulesItem; + + public RoutingRuleQuicklyAddForm() + { + InitializeComponent(); + } + + private void RoutingRuleQuicklyAddForm_Load(object sender, EventArgs e) + { + rulesItem = new RulesItem(); + ClearBind(); + } + + private void EndBindingData() + { + if (rulesItem != null) + { + rulesItem.outboundTag = cmbOutboundTag.Text; + rulesItem.domain = Utils.String2List(txtDomain.Text); + rulesItem.ip = Utils.String2List(txtIP.Text); + } + } + + private void ClearBind() + { + cmbOutboundTag.Text = Global.agentTag; + txtDomain.Text = domain; + } + private void btnOK_Click(object sender, EventArgs e) + { + EndBindingData(); + var hasRule = false; + if (rulesItem.domain != null && rulesItem.domain.Count > 0) + { + hasRule = true; + } + if (rulesItem.ip != null && rulesItem.ip.Count > 0) + { + hasRule = true; + } + if (!hasRule) + { + return; + } + if (ConfigHandler.InsertRoutingRuleItem(ref config, rulesItem) == 0) + { + this.DialogResult = DialogResult.OK; + } + else + { + UI.ShowWarning(UIRes.I18N("OperationFailed")); + } + } + + private void btnClose_Click(object sender, EventArgs e) + { + this.DialogResult = DialogResult.Cancel; + } + } +} diff --git a/v2rayN/v2rayN/Forms/RoutingRuleQuicklyAddForm.resx b/v2rayN/v2rayN/Forms/RoutingRuleQuicklyAddForm.resx new file mode 100644 index 00000000..b081d36d --- /dev/null +++ b/v2rayN/v2rayN/Forms/RoutingRuleQuicklyAddForm.resx @@ -0,0 +1,462 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + txtIP + + + + Fill + + + + 8 + + + + 119, 20 + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Fill + + + 3, 17 + + + 220, 207 + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 10 + + + btnOK + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + RoutingRuleQuicklyAddForm + + + $this + + + 0, 288 + + + Bottom + + + Fill + + + 32 + + + panel4 + + + proxy + + + Left + + + 24 + + + 75, 23 + + + 6, 12 + + + 506, 10 + + + 7 + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 11 + + + panel1 + + + Domain + + + groupBox1 + + + 0, 10 + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panel3 + + + 31 + + + 1 + + + 506, 51 + + + Fill + + + txtDomain + + + panel3 + + + NoControl + + + 5 + + + Top + + + panel4 + + + IP + + + 280, 0 + + + 75, 23 + + + 3, 17 + + + label4 + + + outboundTag + + + btnClose + + + block + + + direct + + + 1 + + + 2 + + + 0 + + + 305, 25 + + + panel3 + + + Top + + + 0, 0 + + + 506, 227 + + + True + + + 3 + + + 280, 227 + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 4 + + + 3 + + + NoControl + + + &OK + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + cmbOutboundTag + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 506, 60 + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 0 + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + &Cancel + + + 226, 227 + + + 107, 16 + + + RoutingRuleQuicklyAddForm + + + NoControl + + + 0 + + + 1 + + + True + + + groupBox2 + + + 19, 20 + + + $this + + + 71, 12 + + + panel2 + + + groupBox2 + + + 4 + + + 0, 0 + + + panel4 + + + $this + + + groupBox1 + + + panel2 + + + 0, 61 + + + 0 + + + 1 + + + 274, 207 + + + 506, 348 + + + 25 + + + v2rayN.Forms.BaseForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + + + 0 + + + panel2 + + + $this + + + 398, 25 + + + True + + + 0 + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + zh-Hans + + \ No newline at end of file diff --git a/v2rayN/v2rayN/Forms/RoutingRuleQuicklyAddForm.zh-Hans.resx b/v2rayN/v2rayN/Forms/RoutingRuleQuicklyAddForm.zh-Hans.resx new file mode 100644 index 00000000..ee735361 --- /dev/null +++ b/v2rayN/v2rayN/Forms/RoutingRuleQuicklyAddForm.zh-Hans.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + OutboundTag + + + 取消(&C) + + + 确定(&O) + + + 快速添加路由规则 + + \ No newline at end of file diff --git a/v2rayN/v2rayN/Forms/RoutingRuleSettingDetailsForm.resx b/v2rayN/v2rayN/Forms/RoutingRuleSettingDetailsForm.resx index 9149d44a..f92d884b 100644 --- a/v2rayN/v2rayN/Forms/RoutingRuleSettingDetailsForm.resx +++ b/v2rayN/v2rayN/Forms/RoutingRuleSettingDetailsForm.resx @@ -579,6 +579,9 @@ 0 + + zh-Hans + True diff --git a/v2rayN/v2rayN/Forms/RoutingRuleSettingForm.Designer.cs b/v2rayN/v2rayN/Forms/RoutingRuleSettingForm.Designer.cs index a0dbe650..f33f9cdd 100644 --- a/v2rayN/v2rayN/Forms/RoutingRuleSettingForm.Designer.cs +++ b/v2rayN/v2rayN/Forms/RoutingRuleSettingForm.Designer.cs @@ -155,6 +155,7 @@ this.menuMoveDown, this.menuMoveBottom}); this.cmsLv.Name = "cmsLv"; + this.cmsLv.OwnerItem = this.MenuItem1; // // menuAdd // diff --git a/v2rayN/v2rayN/Forms/RoutingRuleSettingForm.cs b/v2rayN/v2rayN/Forms/RoutingRuleSettingForm.cs index 2c708f4a..3daed59a 100644 --- a/v2rayN/v2rayN/Forms/RoutingRuleSettingForm.cs +++ b/v2rayN/v2rayN/Forms/RoutingRuleSettingForm.cs @@ -194,7 +194,7 @@ namespace v2rayN.Forms fm.rulesItem = new RulesItem(); if (fm.ShowDialog() == DialogResult.OK) { - routingItem.rules.Add(fm.rulesItem); + routingItem.rules.Insert(0, fm.rulesItem); RefreshRoutingsView(); } } diff --git a/v2rayN/v2rayN/Forms/RoutingRuleSettingForm.resx b/v2rayN/v2rayN/Forms/RoutingRuleSettingForm.resx index 8063cbb9..2d457319 100644 --- a/v2rayN/v2rayN/Forms/RoutingRuleSettingForm.resx +++ b/v2rayN/v2rayN/Forms/RoutingRuleSettingForm.resx @@ -150,9 +150,6 @@ 47, 12 - - Move to bottom (B) - Bottom @@ -225,9 +222,6 @@ 475, 17 - - 75, 23 - System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -309,6 +303,9 @@ 5 + + menuImportRulesFromFile + Add @@ -369,9 +366,6 @@ System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - btnClose - Up (U) @@ -381,15 +375,15 @@ btnOK + + 53, 12 + 47, 12 14 - - Import Rules - NoControl @@ -423,6 +417,9 @@ panel2 + + 4 + Move to top (T) @@ -438,6 +435,9 @@ 748, 356 + + 202, 22 + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w @@ -461,8 +461,8 @@ &OK - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + lvRoutings 247, 22 @@ -491,9 +491,6 @@ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 0 - 644, 48 @@ -506,8 +503,8 @@ Export Selected Rules - - menuImportRulesFromFile + + Move to bottom (B) label3 @@ -539,6 +536,9 @@ System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Top + 3, 3, 3, 3 @@ -554,8 +554,8 @@ Select All (Ctrl+A) - - 53, 12 + + btnClose 6, 12 @@ -581,8 +581,11 @@ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - lvRoutings + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 202, 22 @@ -605,14 +608,11 @@ 762, 575 - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Import Rules - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 202, 22 + + 75, 23 2 @@ -626,8 +626,8 @@ NoControl - - 4 + + 0 3 @@ -656,8 +656,8 @@ 0 - - Top + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 True @@ -665,9 +665,6 @@ 17, 17 - - zh-Hans - 139, 17 diff --git a/v2rayN/v2rayN/Forms/RoutingRuleSettingForm.zh-Hans.resx b/v2rayN/v2rayN/Forms/RoutingRuleSettingForm.zh-Hans.resx index d81b8ff0..06ade53a 100644 --- a/v2rayN/v2rayN/Forms/RoutingRuleSettingForm.zh-Hans.resx +++ b/v2rayN/v2rayN/Forms/RoutingRuleSettingForm.zh-Hans.resx @@ -120,6 +120,9 @@ 取消(&C) + + 确定(&O) + 0, 613 @@ -127,12 +130,6 @@ 785, 60 - - 确定(&O) - - - 785, 109 - 29, 12 @@ -157,28 +154,8 @@ 别名 - - 197, 186 - - - - AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w - LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkMAwAAAFFTeXN0 - ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2Vu - PWIwM2Y1ZjdmMTFkNTBhM2EFAQAAACFTeXN0ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0l0ZW0HAAAA - BFRleHQKSW1hZ2VJbmRleAlCYWNrQ29sb3IHQ2hlY2tlZARGb250CUZvcmVDb2xvchdVc2VJdGVtU3R5 - bGVGb3JTdWJJdGVtcwEABAAEBAAIFFN5c3RlbS5EcmF3aW5nLkNvbG9yAwAAAAETU3lzdGVtLkRyYXdp - bmcuRm9udAMAAAAUU3lzdGVtLkRyYXdpbmcuQ29sb3IDAAAAAQIAAAAGBAAAAAD/////Bfv///8UU3lz - dGVtLkRyYXdpbmcuQ29sb3IEAAAABG5hbWUFdmFsdWUKa25vd25Db2xvcgVzdGF0ZQEAAAAJBwcDAAAA - CgAAAAAAAAAAGAABAAAJBgAAAAH5////+////woAAAAAAAAAABoAAQABBQYAAAATU3lzdGVtLkRyYXdp - bmcuRm9udAQAAAAETmFtZQRTaXplBVN0eWxlBFVuaXQBAAQECxhTeXN0ZW0uRHJhd2luZy5Gb250U3R5 - bGUDAAAAG1N5c3RlbS5EcmF3aW5nLkdyYXBoaWNzVW5pdAMAAAADAAAABggAAAAG5a6L5L2TAAAQQQX3 - ////GFN5c3RlbS5EcmF3aW5nLkZvbnRTdHlsZQEAAAAHdmFsdWVfXwAIAwAAAAAAAAAF9v///xtTeXN0 - ZW0uRHJhd2luZy5HcmFwaGljc1VuaXQBAAAAB3ZhbHVlX18ACAMAAAADAAAACw== - - - - 771, 447 + + 785, 109 196, 22 @@ -237,11 +214,28 @@ 规则功能 - - 0, 134 + + 197, 186 - - 785, 479 + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w + LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkMAwAAAFFTeXN0 + ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2Vu + PWIwM2Y1ZjdmMTFkNTBhM2EFAQAAACFTeXN0ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0l0ZW0HAAAA + BFRleHQKSW1hZ2VJbmRleAlCYWNrQ29sb3IHQ2hlY2tlZARGb250CUZvcmVDb2xvchdVc2VJdGVtU3R5 + bGVGb3JTdWJJdGVtcwEABAAEBAAIFFN5c3RlbS5EcmF3aW5nLkNvbG9yAwAAAAETU3lzdGVtLkRyYXdp + bmcuRm9udAMAAAAUU3lzdGVtLkRyYXdpbmcuQ29sb3IDAAAAAQIAAAAGBAAAAAD/////Bfv///8UU3lz + dGVtLkRyYXdpbmcuQ29sb3IEAAAABG5hbWUFdmFsdWUKa25vd25Db2xvcgVzdGF0ZQEAAAAJBwcDAAAA + CgAAAAAAAAAAGAABAAAJBgAAAAH5////+////woAAAAAAAAAABoAAQABBQYAAAATU3lzdGVtLkRyYXdp + bmcuRm9udAQAAAAETmFtZQRTaXplBVN0eWxlBFVuaXQBAAQECxhTeXN0ZW0uRHJhd2luZy5Gb250U3R5 + bGUDAAAAG1N5c3RlbS5EcmF3aW5nLkdyYXBoaWNzVW5pdAMAAAADAAAABggAAAAG5a6L5L2TAAAQQQX3 + ////GFN5c3RlbS5EcmF3aW5nLkZvbnRTdHlsZQEAAAAHdmFsdWVfXwAIAwAAAAAAAAAF9v///xtTeXN0 + ZW0uRHJhd2luZy5HcmFwaGljc1VuaXQBAAAAB3ZhbHVlX18ACAMAAAADAAAACw== + + + + 771, 447 777, 453 @@ -249,14 +243,20 @@ 规则列表 + + 0, 134 + + + 785, 479 + - 184, 22 + 189, 22 从文件中导入规则 - 184, 22 + 189, 22 从剪贴板中导入规则 diff --git a/v2rayN/v2rayN/Forms/RoutingSettingForm.Designer.cs b/v2rayN/v2rayN/Forms/RoutingSettingForm.Designer.cs index 417a8283..513d218e 100644 --- a/v2rayN/v2rayN/Forms/RoutingSettingForm.Designer.cs +++ b/v2rayN/v2rayN/Forms/RoutingSettingForm.Designer.cs @@ -34,39 +34,70 @@ this.panel2 = new System.Windows.Forms.Panel(); this.btnOK = new System.Windows.Forms.Button(); this.panel1 = new System.Windows.Forms.Panel(); + this.labRoutingTips = new System.Windows.Forms.Label(); this.linkLabelRoutingDoc = new System.Windows.Forms.LinkLabel(); this.cmbdomainStrategy = new System.Windows.Forms.ComboBox(); - this.lvRoutings = new v2rayN.Base.ListViewFlickerFree(); this.cmsLv = new System.Windows.Forms.ContextMenuStrip(this.components); this.menuAdd = new System.Windows.Forms.ToolStripMenuItem(); this.menuRemove = new System.Windows.Forms.ToolStripMenuItem(); this.menuSelectAll = new System.Windows.Forms.ToolStripMenuItem(); this.menuSetDefaultRouting = new System.Windows.Forms.ToolStripMenuItem(); this.MenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); - this.tabControl2 = new System.Windows.Forms.TabControl(); - this.tabPage2 = new System.Windows.Forms.TabPage(); this.menuServer = new System.Windows.Forms.MenuStrip(); + this.tabNormal = new System.Windows.Forms.TabControl(); + this.tabPageProxy = new System.Windows.Forms.TabPage(); + this.panel5 = new System.Windows.Forms.Panel(); + this.groupBox5 = new System.Windows.Forms.GroupBox(); + this.txtProxyIp = new System.Windows.Forms.TextBox(); + this.groupBox6 = new System.Windows.Forms.GroupBox(); + this.txtProxyDomain = new System.Windows.Forms.TextBox(); + this.tabPageDirect = new System.Windows.Forms.TabPage(); + this.panel4 = new System.Windows.Forms.Panel(); + this.groupBox3 = new System.Windows.Forms.GroupBox(); + this.txtDirectIp = new System.Windows.Forms.TextBox(); + this.groupBox4 = new System.Windows.Forms.GroupBox(); + this.txtDirectDomain = new System.Windows.Forms.TextBox(); + this.tabPageBlock = new System.Windows.Forms.TabPage(); + this.panel3 = new System.Windows.Forms.Panel(); + this.groupBox2 = new System.Windows.Forms.GroupBox(); + this.txtBlockIp = new System.Windows.Forms.TextBox(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.txtBlockDomain = new System.Windows.Forms.TextBox(); + this.tabPageRuleList = new System.Windows.Forms.TabPage(); + this.lvRoutings = new v2rayN.Base.ListViewFlickerFree(); this.panel2.SuspendLayout(); this.panel1.SuspendLayout(); this.cmsLv.SuspendLayout(); - this.tabControl2.SuspendLayout(); - this.tabPage2.SuspendLayout(); this.menuServer.SuspendLayout(); + this.tabNormal.SuspendLayout(); + this.tabPageProxy.SuspendLayout(); + this.panel5.SuspendLayout(); + this.groupBox5.SuspendLayout(); + this.groupBox6.SuspendLayout(); + this.tabPageDirect.SuspendLayout(); + this.panel4.SuspendLayout(); + this.groupBox3.SuspendLayout(); + this.groupBox4.SuspendLayout(); + this.tabPageBlock.SuspendLayout(); + this.panel3.SuspendLayout(); + this.groupBox2.SuspendLayout(); + this.groupBox1.SuspendLayout(); + this.tabPageRuleList.SuspendLayout(); this.SuspendLayout(); // // btnClose // - this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel; resources.ApplyResources(this.btnClose, "btnClose"); + this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel; this.btnClose.Name = "btnClose"; this.btnClose.UseVisualStyleBackColor = true; this.btnClose.Click += new System.EventHandler(this.btnClose_Click); // // panel2 // + resources.ApplyResources(this.panel2, "panel2"); this.panel2.Controls.Add(this.btnClose); this.panel2.Controls.Add(this.btnOK); - resources.ApplyResources(this.panel2, "panel2"); this.panel2.Name = "panel2"; // // btnOK @@ -78,11 +109,18 @@ // // panel1 // + resources.ApplyResources(this.panel1, "panel1"); + this.panel1.Controls.Add(this.labRoutingTips); this.panel1.Controls.Add(this.linkLabelRoutingDoc); this.panel1.Controls.Add(this.cmbdomainStrategy); - resources.ApplyResources(this.panel1, "panel1"); this.panel1.Name = "panel1"; // + // labRoutingTips + // + resources.ApplyResources(this.labRoutingTips, "labRoutingTips"); + this.labRoutingTips.ForeColor = System.Drawing.Color.Brown; + this.labRoutingTips.Name = "labRoutingTips"; + // // linkLabelRoutingDoc // resources.ApplyResources(this.linkLabelRoutingDoc, "linkLabelRoutingDoc"); @@ -92,19 +130,200 @@ // // cmbdomainStrategy // + resources.ApplyResources(this.cmbdomainStrategy, "cmbdomainStrategy"); this.cmbdomainStrategy.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.cmbdomainStrategy.FormattingEnabled = true; this.cmbdomainStrategy.Items.AddRange(new object[] { resources.GetString("cmbdomainStrategy.Items"), resources.GetString("cmbdomainStrategy.Items1"), resources.GetString("cmbdomainStrategy.Items2")}); - resources.ApplyResources(this.cmbdomainStrategy, "cmbdomainStrategy"); this.cmbdomainStrategy.Name = "cmbdomainStrategy"; // + // cmsLv + // + resources.ApplyResources(this.cmsLv, "cmsLv"); + this.cmsLv.ImageScalingSize = new System.Drawing.Size(20, 20); + this.cmsLv.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.menuAdd, + this.menuRemove, + this.menuSelectAll, + this.menuSetDefaultRouting}); + this.cmsLv.Name = "cmsLv"; + this.cmsLv.OwnerItem = this.MenuItem1; + // + // menuAdd + // + resources.ApplyResources(this.menuAdd, "menuAdd"); + this.menuAdd.Name = "menuAdd"; + this.menuAdd.Click += new System.EventHandler(this.menuAdd_Click); + // + // menuRemove + // + resources.ApplyResources(this.menuRemove, "menuRemove"); + this.menuRemove.Name = "menuRemove"; + this.menuRemove.Click += new System.EventHandler(this.menuRemove_Click); + // + // menuSelectAll + // + resources.ApplyResources(this.menuSelectAll, "menuSelectAll"); + this.menuSelectAll.Name = "menuSelectAll"; + this.menuSelectAll.Click += new System.EventHandler(this.menuSelectAll_Click); + // + // menuSetDefaultRouting + // + resources.ApplyResources(this.menuSetDefaultRouting, "menuSetDefaultRouting"); + this.menuSetDefaultRouting.Name = "menuSetDefaultRouting"; + this.menuSetDefaultRouting.Click += new System.EventHandler(this.menuSetDefaultRouting_Click); + // + // MenuItem1 + // + resources.ApplyResources(this.MenuItem1, "MenuItem1"); + this.MenuItem1.DropDown = this.cmsLv; + this.MenuItem1.Name = "MenuItem1"; + // + // menuServer + // + resources.ApplyResources(this.menuServer, "menuServer"); + this.menuServer.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.MenuItem1}); + this.menuServer.Name = "menuServer"; + // + // tabNormal + // + resources.ApplyResources(this.tabNormal, "tabNormal"); + this.tabNormal.Controls.Add(this.tabPageProxy); + this.tabNormal.Controls.Add(this.tabPageDirect); + this.tabNormal.Controls.Add(this.tabPageBlock); + this.tabNormal.Controls.Add(this.tabPageRuleList); + this.tabNormal.Name = "tabNormal"; + this.tabNormal.SelectedIndex = 0; + this.tabNormal.Selecting += new System.Windows.Forms.TabControlCancelEventHandler(this.tabNormal_Selecting); + // + // tabPageProxy + // + resources.ApplyResources(this.tabPageProxy, "tabPageProxy"); + this.tabPageProxy.Controls.Add(this.panel5); + this.tabPageProxy.Name = "tabPageProxy"; + this.tabPageProxy.UseVisualStyleBackColor = true; + // + // panel5 + // + resources.ApplyResources(this.panel5, "panel5"); + this.panel5.Controls.Add(this.groupBox5); + this.panel5.Controls.Add(this.groupBox6); + this.panel5.Name = "panel5"; + // + // groupBox5 + // + resources.ApplyResources(this.groupBox5, "groupBox5"); + this.groupBox5.Controls.Add(this.txtProxyIp); + this.groupBox5.Name = "groupBox5"; + this.groupBox5.TabStop = false; + // + // txtProxyIp + // + resources.ApplyResources(this.txtProxyIp, "txtProxyIp"); + this.txtProxyIp.Name = "txtProxyIp"; + // + // groupBox6 + // + resources.ApplyResources(this.groupBox6, "groupBox6"); + this.groupBox6.Controls.Add(this.txtProxyDomain); + this.groupBox6.Name = "groupBox6"; + this.groupBox6.TabStop = false; + // + // txtProxyDomain + // + resources.ApplyResources(this.txtProxyDomain, "txtProxyDomain"); + this.txtProxyDomain.Name = "txtProxyDomain"; + // + // tabPageDirect + // + resources.ApplyResources(this.tabPageDirect, "tabPageDirect"); + this.tabPageDirect.Controls.Add(this.panel4); + this.tabPageDirect.Name = "tabPageDirect"; + this.tabPageDirect.UseVisualStyleBackColor = true; + // + // panel4 + // + resources.ApplyResources(this.panel4, "panel4"); + this.panel4.Controls.Add(this.groupBox3); + this.panel4.Controls.Add(this.groupBox4); + this.panel4.Name = "panel4"; + // + // groupBox3 + // + resources.ApplyResources(this.groupBox3, "groupBox3"); + this.groupBox3.Controls.Add(this.txtDirectIp); + this.groupBox3.Name = "groupBox3"; + this.groupBox3.TabStop = false; + // + // txtDirectIp + // + resources.ApplyResources(this.txtDirectIp, "txtDirectIp"); + this.txtDirectIp.Name = "txtDirectIp"; + // + // groupBox4 + // + resources.ApplyResources(this.groupBox4, "groupBox4"); + this.groupBox4.Controls.Add(this.txtDirectDomain); + this.groupBox4.Name = "groupBox4"; + this.groupBox4.TabStop = false; + // + // txtDirectDomain + // + resources.ApplyResources(this.txtDirectDomain, "txtDirectDomain"); + this.txtDirectDomain.Name = "txtDirectDomain"; + // + // tabPageBlock + // + resources.ApplyResources(this.tabPageBlock, "tabPageBlock"); + this.tabPageBlock.Controls.Add(this.panel3); + this.tabPageBlock.Name = "tabPageBlock"; + this.tabPageBlock.UseVisualStyleBackColor = true; + // + // panel3 + // + resources.ApplyResources(this.panel3, "panel3"); + this.panel3.Controls.Add(this.groupBox2); + this.panel3.Controls.Add(this.groupBox1); + this.panel3.Name = "panel3"; + // + // groupBox2 + // + resources.ApplyResources(this.groupBox2, "groupBox2"); + this.groupBox2.Controls.Add(this.txtBlockIp); + this.groupBox2.Name = "groupBox2"; + this.groupBox2.TabStop = false; + // + // txtBlockIp + // + resources.ApplyResources(this.txtBlockIp, "txtBlockIp"); + this.txtBlockIp.Name = "txtBlockIp"; + // + // groupBox1 + // + resources.ApplyResources(this.groupBox1, "groupBox1"); + this.groupBox1.Controls.Add(this.txtBlockDomain); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.TabStop = false; + // + // txtBlockDomain + // + resources.ApplyResources(this.txtBlockDomain, "txtBlockDomain"); + this.txtBlockDomain.Name = "txtBlockDomain"; + // + // tabPageRuleList + // + resources.ApplyResources(this.tabPageRuleList, "tabPageRuleList"); + this.tabPageRuleList.Controls.Add(this.lvRoutings); + this.tabPageRuleList.Name = "tabPageRuleList"; + this.tabPageRuleList.UseVisualStyleBackColor = true; + // // lvRoutings // - this.lvRoutings.ContextMenuStrip = this.cmsLv; resources.ApplyResources(this.lvRoutings, "lvRoutings"); + this.lvRoutings.ContextMenuStrip = this.cmsLv; this.lvRoutings.FullRowSelect = true; this.lvRoutings.GridLines = true; this.lvRoutings.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable; @@ -117,75 +336,12 @@ this.lvRoutings.View = System.Windows.Forms.View.Details; this.lvRoutings.DoubleClick += new System.EventHandler(this.lvRoutings_DoubleClick); // - // cmsLv - // - this.cmsLv.ImageScalingSize = new System.Drawing.Size(20, 20); - this.cmsLv.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.menuAdd, - this.menuRemove, - this.menuSelectAll, - this.menuSetDefaultRouting}); - this.cmsLv.Name = "cmsLv"; - this.cmsLv.OwnerItem = this.MenuItem1; - resources.ApplyResources(this.cmsLv, "cmsLv"); - // - // menuAdd - // - this.menuAdd.Name = "menuAdd"; - resources.ApplyResources(this.menuAdd, "menuAdd"); - this.menuAdd.Click += new System.EventHandler(this.menuAdd_Click); - // - // menuRemove - // - this.menuRemove.Name = "menuRemove"; - resources.ApplyResources(this.menuRemove, "menuRemove"); - this.menuRemove.Click += new System.EventHandler(this.menuRemove_Click); - // - // menuSelectAll - // - this.menuSelectAll.Name = "menuSelectAll"; - resources.ApplyResources(this.menuSelectAll, "menuSelectAll"); - this.menuSelectAll.Click += new System.EventHandler(this.menuSelectAll_Click); - // - // menuSetDefaultRouting - // - this.menuSetDefaultRouting.Name = "menuSetDefaultRouting"; - resources.ApplyResources(this.menuSetDefaultRouting, "menuSetDefaultRouting"); - this.menuSetDefaultRouting.Click += new System.EventHandler(this.menuSetDefaultRouting_Click); - // - // MenuItem1 - // - this.MenuItem1.DropDown = this.cmsLv; - this.MenuItem1.Name = "MenuItem1"; - resources.ApplyResources(this.MenuItem1, "MenuItem1"); - // - // tabControl2 - // - this.tabControl2.Controls.Add(this.tabPage2); - resources.ApplyResources(this.tabControl2, "tabControl2"); - this.tabControl2.Name = "tabControl2"; - this.tabControl2.SelectedIndex = 0; - // - // tabPage2 - // - this.tabPage2.Controls.Add(this.lvRoutings); - resources.ApplyResources(this.tabPage2, "tabPage2"); - this.tabPage2.Name = "tabPage2"; - this.tabPage2.UseVisualStyleBackColor = true; - // - // menuServer - // - this.menuServer.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.MenuItem1}); - resources.ApplyResources(this.menuServer, "menuServer"); - this.menuServer.Name = "menuServer"; - // // RoutingSettingForm // resources.ApplyResources(this, "$this"); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.CancelButton = this.btnClose; - this.Controls.Add(this.tabControl2); + this.Controls.Add(this.tabNormal); this.Controls.Add(this.panel1); this.Controls.Add(this.panel2); this.Controls.Add(this.menuServer); @@ -196,10 +352,28 @@ this.panel1.ResumeLayout(false); this.panel1.PerformLayout(); this.cmsLv.ResumeLayout(false); - this.tabControl2.ResumeLayout(false); - this.tabPage2.ResumeLayout(false); this.menuServer.ResumeLayout(false); this.menuServer.PerformLayout(); + this.tabNormal.ResumeLayout(false); + this.tabPageProxy.ResumeLayout(false); + this.panel5.ResumeLayout(false); + this.groupBox5.ResumeLayout(false); + this.groupBox5.PerformLayout(); + this.groupBox6.ResumeLayout(false); + this.groupBox6.PerformLayout(); + this.tabPageDirect.ResumeLayout(false); + this.panel4.ResumeLayout(false); + this.groupBox3.ResumeLayout(false); + this.groupBox3.PerformLayout(); + this.groupBox4.ResumeLayout(false); + this.groupBox4.PerformLayout(); + this.tabPageBlock.ResumeLayout(false); + this.panel3.ResumeLayout(false); + this.groupBox2.ResumeLayout(false); + this.groupBox2.PerformLayout(); + this.groupBox1.ResumeLayout(false); + this.groupBox1.PerformLayout(); + this.tabPageRuleList.ResumeLayout(false); this.ResumeLayout(false); this.PerformLayout(); @@ -212,9 +386,6 @@ private System.Windows.Forms.Panel panel1; private System.Windows.Forms.LinkLabel linkLabelRoutingDoc; private System.Windows.Forms.ComboBox cmbdomainStrategy; - private Base.ListViewFlickerFree lvRoutings; - private System.Windows.Forms.TabControl tabControl2; - private System.Windows.Forms.TabPage tabPage2; private System.Windows.Forms.ContextMenuStrip cmsLv; private System.Windows.Forms.ToolStripMenuItem menuRemove; private System.Windows.Forms.ToolStripMenuItem menuSelectAll; @@ -222,5 +393,27 @@ private System.Windows.Forms.MenuStrip menuServer; private System.Windows.Forms.ToolStripMenuItem MenuItem1; private System.Windows.Forms.ToolStripMenuItem menuSetDefaultRouting; + private System.Windows.Forms.TabControl tabNormal; + private System.Windows.Forms.TabPage tabPageProxy; + private System.Windows.Forms.TabPage tabPageDirect; + private System.Windows.Forms.TabPage tabPageBlock; + private System.Windows.Forms.Panel panel5; + private System.Windows.Forms.GroupBox groupBox5; + private System.Windows.Forms.TextBox txtProxyIp; + private System.Windows.Forms.GroupBox groupBox6; + private System.Windows.Forms.TextBox txtProxyDomain; + private System.Windows.Forms.Panel panel4; + private System.Windows.Forms.GroupBox groupBox3; + private System.Windows.Forms.TextBox txtDirectIp; + private System.Windows.Forms.GroupBox groupBox4; + private System.Windows.Forms.TextBox txtDirectDomain; + private System.Windows.Forms.Panel panel3; + private System.Windows.Forms.GroupBox groupBox2; + private System.Windows.Forms.TextBox txtBlockIp; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.TextBox txtBlockDomain; + private System.Windows.Forms.TabPage tabPageRuleList; + private Base.ListViewFlickerFree lvRoutings; + private System.Windows.Forms.Label labRoutingTips; } } \ No newline at end of file diff --git a/v2rayN/v2rayN/Forms/RoutingSettingForm.cs b/v2rayN/v2rayN/Forms/RoutingSettingForm.cs index cd7ca2c4..9066fb34 100644 --- a/v2rayN/v2rayN/Forms/RoutingSettingForm.cs +++ b/v2rayN/v2rayN/Forms/RoutingSettingForm.cs @@ -10,6 +10,7 @@ namespace v2rayN.Forms public partial class RoutingSettingForm : BaseForm { private List lvSelecteds = new List(); + private RoutingItem lockedItem; public RoutingSettingForm() { InitializeComponent(); @@ -27,55 +28,27 @@ namespace v2rayN.Forms } InitRoutingsView(); RefreshRoutingsView(); - } - private void InitRoutingsView() + BindingLockedData(); + + } + + + private void tabNormal_Selecting(object sender, TabControlCancelEventArgs e) { - lvRoutings.BeginUpdate(); - lvRoutings.Items.Clear(); - - lvRoutings.GridLines = true; - lvRoutings.FullRowSelect = true; - lvRoutings.View = View.Details; - lvRoutings.MultiSelect = true; - lvRoutings.HeaderStyle = ColumnHeaderStyle.Clickable; - - lvRoutings.Columns.Add("", 30); - lvRoutings.Columns.Add(UIRes.I18N("LvAlias"), 200); - lvRoutings.Columns.Add(UIRes.I18N("LvUrl"), 240); - lvRoutings.Columns.Add(UIRes.I18N("LvCount"), 60); - - lvRoutings.EndUpdate(); - } - - private void RefreshRoutingsView() - { - lvRoutings.BeginUpdate(); - lvRoutings.Items.Clear(); - - for (int k = 0; k < config.routings.Count; k++) + if (tabNormal.SelectedTab == tabPageRuleList) { - string def = string.Empty; - if (config.routingIndex.Equals(k)) - { - def = "√"; - } - - var item = config.routings[k]; - - ListViewItem lvItem = new ListViewItem(def); - Utils.AddSubItem(lvItem, "remarks", item.remarks); - Utils.AddSubItem(lvItem, "url", item.url); - Utils.AddSubItem(lvItem, "count", item.rules.Count.ToString()); - - if (lvItem != null) lvRoutings.Items.Add(lvItem); + MenuItem1.Enabled = true; + } + else + { + MenuItem1.Enabled = false; } - lvRoutings.EndUpdate(); } - private void btnOK_Click(object sender, EventArgs e) { config.domainStrategy = cmbdomainStrategy.Text; + EndBindingLockedData(); if (ConfigHandler.SaveRouting(ref config) == 0) { @@ -92,6 +65,89 @@ namespace v2rayN.Forms this.DialogResult = DialogResult.Cancel; } + + #region locked + private void BindingLockedData() + { + lockedItem = ConfigHandler.GetLockedRoutingItem(ref config); + if (lockedItem != null) + { + txtProxyDomain.Text = Utils.List2String(lockedItem.rules[0].domain, true); + txtProxyIp.Text = Utils.List2String(lockedItem.rules[0].ip, true); + + txtDirectDomain.Text = Utils.List2String(lockedItem.rules[1].domain, true); + txtDirectIp.Text = Utils.List2String(lockedItem.rules[1].ip, true); + + txtBlockDomain.Text = Utils.List2String(lockedItem.rules[2].domain, true); + txtBlockIp.Text = Utils.List2String(lockedItem.rules[2].ip, true); + } + } + private void EndBindingLockedData() + { + if (lockedItem != null) + { + lockedItem.rules[0].domain = Utils.String2List(txtProxyDomain.Text.TrimEx()); + lockedItem.rules[0].ip = Utils.String2List(txtProxyIp.Text.TrimEx()); + + lockedItem.rules[1].domain = Utils.String2List(txtDirectDomain.Text.TrimEx()); + lockedItem.rules[1].ip = Utils.String2List(txtDirectIp.Text.TrimEx()); + + lockedItem.rules[2].domain = Utils.String2List(txtBlockDomain.Text.TrimEx()); + lockedItem.rules[2].ip = Utils.String2List(txtBlockIp.Text.TrimEx()); + } + } + #endregion + + #region ListView + private void InitRoutingsView() + { + lvRoutings.BeginUpdate(); + lvRoutings.Items.Clear(); + + lvRoutings.GridLines = true; + lvRoutings.FullRowSelect = true; + lvRoutings.View = View.Details; + lvRoutings.MultiSelect = true; + lvRoutings.HeaderStyle = ColumnHeaderStyle.Clickable; + + lvRoutings.Columns.Add("", 30); + lvRoutings.Columns.Add(UIRes.I18N("LvAlias"), 200); + lvRoutings.Columns.Add(UIRes.I18N("LvCount"), 60); + lvRoutings.Columns.Add(UIRes.I18N("LvUrl"), 240); + + lvRoutings.EndUpdate(); + } + + private void RefreshRoutingsView() + { + lvRoutings.BeginUpdate(); + lvRoutings.Items.Clear(); + + for (int k = 0; k < config.routings.Count; k++) + { + var item = config.routings[k]; + if (item.locked == true) + { + continue; + } + + string def = string.Empty; + if (config.routingIndex.Equals(k)) + { + def = "√"; + } + + ListViewItem lvItem = new ListViewItem(def); + Utils.AddSubItem(lvItem, "remarks", item.remarks); + Utils.AddSubItem(lvItem, "count", item.rules.Count.ToString()); + Utils.AddSubItem(lvItem, "url", item.url); + + if (lvItem != null) lvRoutings.Items.Add(lvItem); + } + lvRoutings.EndUpdate(); + } + + private void linkLabelRoutingDoc_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { System.Diagnostics.Process.Start("https://www.v2fly.org/config/routing.html"); @@ -137,6 +193,9 @@ namespace v2rayN.Forms } } + #endregion + + #region Edit function @@ -197,8 +256,9 @@ namespace v2rayN.Forms } return 0; } - #endregion + #endregion + } } diff --git a/v2rayN/v2rayN/Forms/RoutingSettingForm.resx b/v2rayN/v2rayN/Forms/RoutingSettingForm.resx index ec736bae..8a7aaba4 100644 --- a/v2rayN/v2rayN/Forms/RoutingSettingForm.resx +++ b/v2rayN/v2rayN/Forms/RoutingSettingForm.resx @@ -117,219 +117,486 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - NoControl + + cmbdomainStrategy - - 568, 17 + + 839, 505 - - 75, 23 + + System.Windows.Forms.TabControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 4 + + + Fill - - &Cancel + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - btnClose + + tabPageRuleList - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 853, 25 - - panel2 + + Fill - + + 441, 485 + + + IP + + + 6, 12 + + 0 - - NoControl - - - 475, 17 - - - 75, 23 - - - 5 - - - &OK - - - btnOK - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - panel2 - - - 1 + + 447, 505 Bottom - - 0, 613 - - - 765, 60 - - - 7 - - - panel2 - - - System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 3 - - - True - - - NoControl - - - 6, 21 - - - 0, 0, 0, 0 - - - 95, 12 - - - 19 - - - Domain strategy - - - linkLabelRoutingDoc - - - System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - panel1 - - - 0 - - - AsIs - - - IPIfNonMatch - - - IPOnDemand - - - 116, 17 - - - 165, 20 - - - 16 - - - cmbdomainStrategy - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Edit and Function panel1 - - 1 - - - Top - - - 0, 25 - - - 765, 51 - - - 11 + + tabPageProxy panel1 - + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - $this + + 3 - - 2 + + IPOnDemand - - 17, 17 - - - 194, 22 + + 0 - - Add + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 194, 22 + + + 25 + + + 3, 17 + + + groupBox5 + + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Left + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 392, 505 + + + 15 + + + txtProxyDomain + + + 6, 21 + + + groupBox6 + + + 853, 673 + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + NoControl + + + 3, 17 + + + MenuItem1 + + + Routing Settings + + + Fill Remove selected + + Fill + + + IP + + + 4.Pre-defined Rule Set List + + + Domain + + + 2 + + + 475, 17 + + + Domain strategy + + + 1 + + + 447, 505 + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabNormal + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 0 + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 3, 3, 3, 3 + + + tabPageRuleList + + + tabPageBlock + + + 568, 17 + + + False + 194, 22 - - Select All (Ctrl+A) + + panel5 - - 194, 22 + + panel5 - - Set as active routing + + 0, 0 + + + Fill + + + Domain + + + 853, 60 + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 0, 25 + + + 0 + + + 4 + + + 386, 485 + + + menuServer + + + 1 120, 21 - - Edit and Function + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 195, 114 + + panel5 + + + System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 2 + + + 4, 22 + + + 845, 511 + + + panel2 cmsLv - - System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + + 5 + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + txtProxyIp + + + 845, 511 + + + 386, 485 + + + Add + + + 25 + + + True + + + groupBox3 + + + tabPageProxy + + + panel1 + + + True + + + v2rayN.Base.ListViewFlickerFree, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + + + 2 + + + labRoutingTips + + + 95, 12 + + + panel3 + + + 1 + + + RoutingSettingForm + + + 441, 485 + + + 1 + + + 0 + + + 0 + + + tabPageDirect + + Fill + + $this + + + 25 + + + 392, 505 + + + groupBox2 + + + 0 + + + panel4 + + + 4 + + + True + + + System.Windows.Forms.MenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox4 + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 3, 3 + + + True + + + 195, 92 + + + btnOK + + + 3, 3, 3, 3 + + + 116, 17 + + + txtBlockIp + + + NoControl + + + 0 + + + 542, 16 + + + $this + + + True + + + Left + + + panel4 + + + 441, 485 + + + 0 + + + 3 + + + 386, 485 + + + 0, 0, 0, 0 + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + IPIfNonMatch + + + 3, 17 + + + 853, 537 + + + 1 + + + 24 + + + Fill + + + panel2 + + + 1 + + + tabPageBlock + + + 16 + + + 0, 0 + + + panel4 + + + groupBox1 + + + panel3 + + + $this + + + tabNormal + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w @@ -347,148 +614,391 @@ ZW0uRHJhd2luZy5HcmFwaGljc1VuaXQBAAAAB3ZhbHVlX18ACAMAAAADAAAACw== - - 3, 3 + + 165, 20 - - 751, 505 - - - 12 - - - lvRoutings - - - v2rayN.Base.ListViewFlickerFree, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null - - - tabPage2 - - - 0 - - + 4, 22 - - 3, 3, 3, 3 + + groupBox4 - - 757, 511 - - + 0 - - RuleSetList + + tabNormal - - tabPage2 + + &OK - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabControl2 - - - 0 - - - Fill - - - 0, 76 - - - 765, 537 - - - 14 - - - tabControl2 - - - System.Windows.Forms.TabControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 1 - - - 139, 17 - - - 0, 0 - - - 765, 25 - - - 15 - - - menuServer - - - System.Windows.Forms.MenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 4 - - - True - - - 6, 12 - - - 765, 673 - - - Routing Settings - - - menuAdd - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuRemove - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuSelectAll + + tabNormal System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - menuSetDefaultRouting + + Fill - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 1 - - MenuItem1 + + btnClose + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 845, 511 + + + 3, 17 + + + 4 + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panel3 + + + 16 + + + menuSelectAll + + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 1 + + + AsIs + + + panel2 + + + groupBox1 + + + 194, 22 System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - RoutingSettingForm + + 0 + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 3.Block Domain or IP + + + NoControl + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 11 + + + groupBox2 + + + 12 + + + txtBlockDomain + + + 7 + + + True v2rayN.Forms.BaseForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + + 392, 0 + + + 12 + + + 845, 511 + + + 19 + + + 0, 0 + + + *Set the rules, separated by commas (,); The comma in the regular is replaced by <COMMA> + + + groupBox6 + + + txtDirectDomain + + + 839, 505 + + + 0, 613 + + + 3 + + + 0 + + + tabPageDirect + + + 839, 505 + + + Set as active routing + + + Domain + + + Left + + + txtDirectIp + + + 4 + + + Select All (Ctrl+A) + + + &Cancel + + + 392, 0 + + + 839, 505 + + + tabNormal + + + 3, 3, 3, 3 + + + 15 + + + 0 + + + 3, 3, 3, 3 + + + panel1 + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 3, 17 + + + menuSetDefaultRouting + + + 3 + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 0 + + + 194, 22 + + + 392, 0 + + + 3 + + + lvRoutings + + + linkLabelRoutingDoc + + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 24 + + + 3 + + + 0 + + + menuRemove + + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Fill + + + NoControl + + + 2.Direct Domain or IP + + + 4, 22 + + + 0 + + + groupBox3 + + + 12 + + + 4, 22 + + + 3, 3 + + + 392, 505 + + + 194, 22 + + + Fill + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 75, 23 + + + Fill + + + Fill + + + 2 + + + 0 + + + 1.Proxy Domain or IP + + + groupBox5 + + + 4 + + + 24 + + + Fill + + + 0, 0 + + + IP + + + 75, 23 + + + 3, 17 + + + 0, 76 + + + 3, 3 + + + 34 + + + 447, 505 + + + Fill + + + menuAdd + + + 3, 3 + + + System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 299, 21 + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 853, 51 + + + Top + + + zh-Hans + + + True + + + 17, 17 + + + 139, 17 + \ No newline at end of file diff --git a/v2rayN/v2rayN/Forms/RoutingSettingForm.zh-Hans.resx b/v2rayN/v2rayN/Forms/RoutingSettingForm.zh-Hans.resx index 3efb9922..5c043970 100644 --- a/v2rayN/v2rayN/Forms/RoutingSettingForm.zh-Hans.resx +++ b/v2rayN/v2rayN/Forms/RoutingSettingForm.zh-Hans.resx @@ -125,10 +125,16 @@ - 0, 474 + 0, 545 - 726, 60 + 817, 60 + + + 518, 16 + + + *设置的路由规则,用逗号(,)分隔;正则中的逗号用<COMMA>替代 77, 12 @@ -137,7 +143,7 @@ 域名解析策略 - 726, 51 + 817, 51 148, 22 @@ -172,6 +178,72 @@ 149, 92 + + 817, 25 + + + 405, 417 + + + 411, 437 + + + 386, 417 + + + 392, 437 + + + 803, 437 + + + 809, 443 + + + 1.代理的Domain或IP + + + 405, 417 + + + 411, 437 + + + 386, 417 + + + 392, 437 + + + 803, 437 + + + 809, 443 + + + 2.直连的Domain或IP + + + 405, 417 + + + 411, 437 + + + 386, 417 + + + 392, 437 + + + 803, 437 + + + 809, 443 + + + 3.阻止的Domain或IP + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w @@ -190,22 +262,19 @@ - 712, 366 + 803, 437 - - 718, 372 + + 809, 443 - - 路由规则集列表 + + 4.预定义规则集列表 - - 726, 398 - - - 726, 25 + + 817, 469 - 726, 534 + 817, 605 路由设置 diff --git a/v2rayN/v2rayN/Handler/ConfigHandler.cs b/v2rayN/v2rayN/Handler/ConfigHandler.cs index 2287c34d..38b6d623 100644 --- a/v2rayN/v2rayN/Handler/ConfigHandler.cs +++ b/v2rayN/v2rayN/Handler/ConfigHandler.cs @@ -1001,6 +1001,14 @@ namespace v2rayN.Handler foreach (var item in config.routings) { + } + //move locked item + int index = config.routings.FindIndex(it => it.locked == true); + if (index != -1) + { + var item = Utils.DeepCopy(config.routings[index]); + config.routings.RemoveAt(index); + config.routings.Add(item); } if (config.routingIndex >= config.routings.Count) { @@ -1151,32 +1159,43 @@ namespace v2rayN.Handler { config.routings = new List(); } - if (config.routings.Count > 0) + if (config.routings.Count <= 0) { - return 0; + //Bypass the mainland + var item2 = new RoutingItem(); + item2.remarks = "绕过大陆(Whitelist)"; + item2.url = string.Empty; + item2.rules = new List(); + string result2 = Utils.GetEmbedText(Global.CustomRoutingFileName + "white"); + AddBatchRoutingRules(ref item2, result2); + config.routings.Add(item2); + + config.routingIndex = 0; + } + + if (GetLockedRoutingItem(ref config) == null) + { + var item1 = new RoutingItem(); + item1.remarks = "locked"; + item1.url = string.Empty; + item1.rules = new List(); + item1.locked = true; + string result1 = Utils.GetEmbedText(Global.CustomRoutingFileName + "locked"); + AddBatchRoutingRules(ref item1, result1); + config.routings.Add(item1); } - config.routingIndex = 0; - //Global - var item1 = new RoutingItem(); - item1.remarks = "全局(Global)"; - item1.url = string.Empty; - item1.rules = new List(); - string result = Utils.GetEmbedText(Global.CustomRoutingFileName + "global"); - AddBatchRoutingRules(ref item1, result); - config.routings.Add(item1); - - //Bypass the mainland - var item2 = new RoutingItem(); - item2.remarks = "绕过大陆(Whitelist)"; - item2.url = string.Empty; - item2.rules = new List(); - string result2 = Utils.GetEmbedText(Global.CustomRoutingFileName + "white"); - AddBatchRoutingRules(ref item2, result2); - config.routings.Add(item2); - - ToJsonFile(config); + SaveRouting(ref config); return 0; + } + + public static RoutingItem GetLockedRoutingItem(ref Config config) + { + if (config.routings == null) + { + return null; + } + return config.routings.Find(it => it.locked == true); } #endregion } diff --git a/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs b/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs index 53a0b8c3..3f2ba417 100644 --- a/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs +++ b/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs @@ -190,6 +190,14 @@ namespace v2rayN.Handler { v2rayConfig.routing.domainStrategy = config.domainStrategy; + var lockedItem = ConfigHandler.GetLockedRoutingItem(ref config); + if (lockedItem != null) + { + foreach (var item in lockedItem.rules) + { + routingUserRule(item, ref v2rayConfig); + } + } if (config.routings != null && config.routingIndex < config.routings.Count) { foreach (var item in config.routings[config.routingIndex].rules) diff --git a/v2rayN/v2rayN/Mode/RoutingItem.cs b/v2rayN/v2rayN/Mode/RoutingItem.cs index 544558ed..2344e227 100644 --- a/v2rayN/v2rayN/Mode/RoutingItem.cs +++ b/v2rayN/v2rayN/Mode/RoutingItem.cs @@ -23,5 +23,10 @@ namespace v2rayN.Mode } public bool enabled { get; set; } = true; + public bool locked + { + get; set; + } + } } diff --git a/v2rayN/v2rayN/Properties/AssemblyInfo.cs b/v2rayN/v2rayN/Properties/AssemblyInfo.cs index 01ee1030..d26a2167 100644 --- a/v2rayN/v2rayN/Properties/AssemblyInfo.cs +++ b/v2rayN/v2rayN/Properties/AssemblyInfo.cs @@ -32,4 +32,4 @@ using System.Runtime.InteropServices; // 方法是按如下所示使用“*”: //[assembly: AssemblyVersion("1.0.*")] //[assembly: AssemblyVersion("1.0.0")] -[assembly: AssemblyFileVersion("4.8")] +[assembly: AssemblyFileVersion("4.9")] diff --git a/v2rayN/v2rayN/Sample/custom_routing_locked b/v2rayN/v2rayN/Sample/custom_routing_locked new file mode 100644 index 00000000..b4636131 --- /dev/null +++ b/v2rayN/v2rayN/Sample/custom_routing_locked @@ -0,0 +1,21 @@ +[ + { + "domain": [ + "geosite:google" + ], + "outboundTag": "proxy" + }, + { + "outboundTag": "direct", + "domain": [ + "domain:example.com", + "domain:example2.com" + ] + }, + { + "outboundTag": "block", + "domain": [ + "geosite:category-ads-all" + ] + } +] \ No newline at end of file diff --git a/v2rayN/v2rayN/Sample/custom_routing_white b/v2rayN/v2rayN/Sample/custom_routing_white index 7ee814b3..61c48382 100644 --- a/v2rayN/v2rayN/Sample/custom_routing_white +++ b/v2rayN/v2rayN/Sample/custom_routing_white @@ -1,15 +1,23 @@ -[{ - "outboundTag": "block", - "domain": [ - "geosite:category-ads-all" - ] - }, - { - "outboundTag": "direct", - "domain": [ - "geosite:cn" - ] - }, +[ + { + "outboundTag": "direct", + "domain": [ + "domain:example.com", + "domain:example2.com" + ] + }, + { + "outboundTag": "block", + "domain": [ + "geosite:category-ads-all" + ] + }, + { + "outboundTag": "direct", + "domain": [ + "geosite:cn" + ] + }, { "outboundTag": "direct", "ip": [ @@ -17,8 +25,8 @@ "geoip:cn" ] }, - { - "port": "0-65535", - "outboundTag": "proxy" - } + { + "port": "0-65535", + "outboundTag": "proxy" + } ] \ No newline at end of file diff --git a/v2rayN/v2rayN/v2rayN.csproj b/v2rayN/v2rayN/v2rayN.csproj index c38e2c89..2f87020d 100644 --- a/v2rayN/v2rayN/v2rayN.csproj +++ b/v2rayN/v2rayN/v2rayN.csproj @@ -388,6 +388,7 @@ + From 23b0f154f3aca96b5434280ab9478d70e98a054e Mon Sep 17 00:00:00 2001 From: 2dust <31833384+2dust@users.noreply.github.com> Date: Wed, 3 Feb 2021 16:46:43 +0800 Subject: [PATCH 52/54] up4.10 --- v2rayN/v2rayN/Forms/MainForm.cs | 6 + .../Forms/RoutingSettingForm.Designer.cs | 22 +- v2rayN/v2rayN/Forms/RoutingSettingForm.cs | 51 +- v2rayN/v2rayN/Forms/RoutingSettingForm.resx | 567 +++++++++--------- .../Forms/RoutingSettingForm.zh-Hans.resx | 34 +- v2rayN/v2rayN/Global.cs | 4 + v2rayN/v2rayN/Handler/ConfigHandler.cs | 3 +- v2rayN/v2rayN/Handler/V2rayConfigHandler.cs | 37 +- v2rayN/v2rayN/Mode/Config.cs | 6 +- v2rayN/v2rayN/Properties/AssemblyInfo.cs | 2 +- v2rayN/v2rayN/Sample/custom_routing_locked | 4 +- v2rayN/v2rayN/Sample/custom_routing_white | 4 +- 12 files changed, 426 insertions(+), 314 deletions(-) diff --git a/v2rayN/v2rayN/Forms/MainForm.cs b/v2rayN/v2rayN/Forms/MainForm.cs index 6b293a83..d472f40b 100644 --- a/v2rayN/v2rayN/Forms/MainForm.cs +++ b/v2rayN/v2rayN/Forms/MainForm.cs @@ -1501,6 +1501,12 @@ namespace v2rayN.Forms /// private void RefreshRoutingsMenu() { + menuRoutings.Visible = config.enableRoutingAdvanced; + if (!config.enableRoutingAdvanced) + { + return; + } + menuRoutings.DropDownItems.Clear(); List lst = new List(); diff --git a/v2rayN/v2rayN/Forms/RoutingSettingForm.Designer.cs b/v2rayN/v2rayN/Forms/RoutingSettingForm.Designer.cs index 513d218e..16fa9b00 100644 --- a/v2rayN/v2rayN/Forms/RoutingSettingForm.Designer.cs +++ b/v2rayN/v2rayN/Forms/RoutingSettingForm.Designer.cs @@ -32,9 +32,10 @@ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(RoutingSettingForm)); this.btnClose = new System.Windows.Forms.Button(); this.panel2 = new System.Windows.Forms.Panel(); + this.labRoutingTips = new System.Windows.Forms.Label(); this.btnOK = new System.Windows.Forms.Button(); this.panel1 = new System.Windows.Forms.Panel(); - this.labRoutingTips = new System.Windows.Forms.Label(); + this.chkenableRoutingAdvanced = new System.Windows.Forms.CheckBox(); this.linkLabelRoutingDoc = new System.Windows.Forms.LinkLabel(); this.cmbdomainStrategy = new System.Windows.Forms.ComboBox(); this.cmsLv = new System.Windows.Forms.ContextMenuStrip(this.components); @@ -96,10 +97,17 @@ // panel2 // resources.ApplyResources(this.panel2, "panel2"); + this.panel2.Controls.Add(this.labRoutingTips); this.panel2.Controls.Add(this.btnClose); this.panel2.Controls.Add(this.btnOK); this.panel2.Name = "panel2"; // + // labRoutingTips + // + resources.ApplyResources(this.labRoutingTips, "labRoutingTips"); + this.labRoutingTips.ForeColor = System.Drawing.Color.Brown; + this.labRoutingTips.Name = "labRoutingTips"; + // // btnOK // resources.ApplyResources(this.btnOK, "btnOK"); @@ -110,16 +118,17 @@ // panel1 // resources.ApplyResources(this.panel1, "panel1"); - this.panel1.Controls.Add(this.labRoutingTips); + this.panel1.Controls.Add(this.chkenableRoutingAdvanced); this.panel1.Controls.Add(this.linkLabelRoutingDoc); this.panel1.Controls.Add(this.cmbdomainStrategy); this.panel1.Name = "panel1"; // - // labRoutingTips + // chkenableRoutingAdvanced // - resources.ApplyResources(this.labRoutingTips, "labRoutingTips"); - this.labRoutingTips.ForeColor = System.Drawing.Color.Brown; - this.labRoutingTips.Name = "labRoutingTips"; + resources.ApplyResources(this.chkenableRoutingAdvanced, "chkenableRoutingAdvanced"); + this.chkenableRoutingAdvanced.Name = "chkenableRoutingAdvanced"; + this.chkenableRoutingAdvanced.UseVisualStyleBackColor = true; + this.chkenableRoutingAdvanced.CheckedChanged += new System.EventHandler(this.chkenableRoutingAdvanced_CheckedChanged_1); // // linkLabelRoutingDoc // @@ -415,5 +424,6 @@ private System.Windows.Forms.TabPage tabPageRuleList; private Base.ListViewFlickerFree lvRoutings; private System.Windows.Forms.Label labRoutingTips; + private System.Windows.Forms.CheckBox chkenableRoutingAdvanced; } } \ No newline at end of file diff --git a/v2rayN/v2rayN/Forms/RoutingSettingForm.cs b/v2rayN/v2rayN/Forms/RoutingSettingForm.cs index 9066fb34..5e015af7 100644 --- a/v2rayN/v2rayN/Forms/RoutingSettingForm.cs +++ b/v2rayN/v2rayN/Forms/RoutingSettingForm.cs @@ -21,6 +21,7 @@ namespace v2rayN.Forms ConfigHandler.InitBuiltinRouting(ref config); cmbdomainStrategy.Text = config.domainStrategy; + chkenableRoutingAdvanced.Checked = config.enableRoutingAdvanced; if (config.routings == null) { @@ -30,24 +31,25 @@ namespace v2rayN.Forms RefreshRoutingsView(); BindingLockedData(); - - } + InitUI(); + } private void tabNormal_Selecting(object sender, TabControlCancelEventArgs e) { - if (tabNormal.SelectedTab == tabPageRuleList) - { - MenuItem1.Enabled = true; - } - else - { - MenuItem1.Enabled = false; - } + //if (tabNormal.SelectedTab == tabPageRuleList) + //{ + // MenuItem1.Enabled = true; + //} + //else + //{ + // MenuItem1.Enabled = false; + //} } private void btnOK_Click(object sender, EventArgs e) { config.domainStrategy = cmbdomainStrategy.Text; + config.enableRoutingAdvanced = chkenableRoutingAdvanced.Checked; EndBindingLockedData(); if (ConfigHandler.SaveRouting(ref config) == 0) @@ -64,6 +66,31 @@ namespace v2rayN.Forms { this.DialogResult = DialogResult.Cancel; } + private void chkenableRoutingAdvanced_CheckedChanged_1(object sender, EventArgs e) + { + InitUI(); + } + private void InitUI() + { + if (chkenableRoutingAdvanced.Checked) + { + this.tabPageProxy.Parent = null; + this.tabPageDirect.Parent = null; + this.tabPageBlock.Parent = null; + this.tabPageRuleList.Parent = tabNormal; + MenuItem1.Enabled = true; + + } + else + { + this.tabPageProxy.Parent = tabNormal; + this.tabPageDirect.Parent = tabNormal; + this.tabPageBlock.Parent = tabNormal; + this.tabPageRuleList.Parent = null; + MenuItem1.Enabled = false; + } + + } #region locked @@ -94,6 +121,7 @@ namespace v2rayN.Forms lockedItem.rules[2].domain = Utils.String2List(txtBlockDomain.Text.TrimEx()); lockedItem.rules[2].ip = Utils.String2List(txtBlockIp.Text.TrimEx()); + } } #endregion @@ -136,7 +164,7 @@ namespace v2rayN.Forms { def = "√"; } - + ListViewItem lvItem = new ListViewItem(def); Utils.AddSubItem(lvItem, "remarks", item.remarks); Utils.AddSubItem(lvItem, "count", item.rules.Count.ToString()); @@ -260,5 +288,6 @@ namespace v2rayN.Forms #endregion + } } diff --git a/v2rayN/v2rayN/Forms/RoutingSettingForm.resx b/v2rayN/v2rayN/Forms/RoutingSettingForm.resx index 8a7aaba4..f784cf53 100644 --- a/v2rayN/v2rayN/Forms/RoutingSettingForm.resx +++ b/v2rayN/v2rayN/Forms/RoutingSettingForm.resx @@ -117,6 +117,9 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 4 + cmbdomainStrategy @@ -124,42 +127,39 @@ 839, 505 - - System.Windows.Forms.TabControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 386, 485 + + + 392, 0 - + Fill - + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - tabPageRuleList - 853, 25 - - Fill - - - 441, 485 + + txtDirectIp IP - - 6, 12 + + Fill - - 0 + + panel1 447, 505 - - Bottom + + 441, 485 Edit and Function @@ -173,30 +173,27 @@ panel1 - - System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 25 3 - - IPOnDemand - 0 - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + True - 25 3, 17 - - groupBox5 + + Domain System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -207,14 +204,17 @@ System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 392, 505 + + 3, 3, 3, 3 15 - - txtProxyDomain + + 0 + + + False 6, 21 @@ -225,24 +225,24 @@ 853, 673 + + 392, 0 + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 NoControl - - 3, 17 + + $this - - MenuItem1 + + 0 Routing Settings - - Fill - Remove selected @@ -252,23 +252,23 @@ IP + + 845, 511 + - 4.Pre-defined Rule Set List + Pre-defined Rule Set List - - Domain - - - 2 + + Fill - 475, 17 + 660, 17 Domain strategy - - 1 + + groupBox3 447, 505 @@ -276,44 +276,41 @@ System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 853, 60 + tabNormal - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + MenuItem1 - 0 + 1 System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 3, 3, 3, 3 - - - tabPageRuleList - tabPageBlock - - 568, 17 + + groupBox1 - - False + + IPOnDemand - - 194, 22 + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - panel5 + + 318, 17 panel5 - - 0, 0 + + 95, 12 Fill @@ -321,8 +318,8 @@ Domain - - 853, 60 + + System.Windows.Forms.TabControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -333,11 +330,11 @@ 0 - - 4 + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 386, 485 + + 75, 23 menuServer @@ -345,8 +342,11 @@ 1 - - 120, 21 + + System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panel3 System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -354,8 +354,8 @@ panel5 - - System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + tabPageRuleList 2 @@ -378,11 +378,8 @@ 5 - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - True + + NoControl txtProxyIp @@ -390,47 +387,41 @@ 845, 511 - - 386, 485 - Add - - 25 + + 15 True - - groupBox3 + + txtBlockIp - - tabPageProxy + + 0 - panel1 + panel2 - - True - - - v2rayN.Base.ListViewFlickerFree, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + + tabPageRuleList 2 - - labRoutingTips + + 3 - - 95, 12 + + chkenableRoutingAdvanced - - panel3 + + NoControl - 1 + 2 RoutingSettingForm @@ -438,17 +429,17 @@ 441, 485 - - 1 + + panel2 - - 0 + + 0, 0 0 - - tabPageDirect + + True Fill @@ -456,8 +447,8 @@ $this - - 25 + + 2 392, 505 @@ -465,8 +456,8 @@ groupBox2 - - 0 + + 194, 22 panel4 @@ -486,11 +477,8 @@ groupBox4 - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 3, 3 + + 1.Proxy Domain or IP True @@ -498,50 +486,50 @@ 195, 92 + + True + btnOK 3, 3, 3, 3 + + 26 + 116, 17 - - txtBlockIp - - - NoControl - - - 0 - - - 542, 16 - - - $this - - - True - - - Left - panel4 + + 0 + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 24 + + + Left + 441, 485 - - 0 + + 3, 3 3 - - 386, 485 + + 3, 17 0, 0, 0, 0 @@ -552,32 +540,26 @@ IPIfNonMatch - - 3, 17 - 853, 537 1 - - 24 + + panel1 - - Fill - - - panel2 + + 25 1 - - tabPageBlock + + 0 - - 16 + + 853, 51 0, 0 @@ -585,8 +567,8 @@ panel4 - - groupBox1 + + 194, 22 panel3 @@ -617,15 +599,18 @@ 165, 20 + + 0 + + + Fill + 4, 22 groupBox4 - - 0 - tabNormal @@ -635,8 +620,11 @@ tabNormal - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + True + + + 4, 22 Fill @@ -650,8 +638,8 @@ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - $this + + panel2 845, 511 @@ -659,12 +647,18 @@ 3, 17 - - 4 + + v2rayN.Base.ListViewFlickerFree, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + + + tabPageProxy System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + panel3 @@ -677,38 +671,44 @@ System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 216, 16 + 1 AsIs - - panel2 + + txtDirectDomain groupBox1 - - 194, 22 + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + 0, 76 0 - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Fill 3.Block Domain or IP - - NoControl - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 4 11 @@ -716,6 +716,9 @@ groupBox2 + + 0, 0 + 12 @@ -725,26 +728,32 @@ 7 - - True + + Enable advanced routing function - - v2rayN.Forms.BaseForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + + 3, 17 - - 392, 0 + + 1 + + + NoControl + + + 0 12 - - 845, 511 + + v2rayN.Forms.BaseForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 19 - - 0, 0 + + 392, 505 *Set the rules, separated by commas (,); The comma in the regular is replaced by <COMMA> @@ -752,38 +761,50 @@ groupBox6 - - txtDirectDomain + + Top + + + Fill 839, 505 + + 2.Direct Domain or IP + 0, 613 - - 3 - - - 0 + + Fill tabPageDirect - - 839, 505 + + 562, 16 - - Set as active routing + + Fill - - Domain + + 3, 17 - - Left + + 120, 21 - - txtDirectIp + + 3 + + + 194, 22 + + + NoControl + + + tabPageDirect 4 @@ -806,29 +827,29 @@ 3, 3, 3, 3 - - 15 + + 6, 12 - - 0 + + 1 + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 3, 3, 3, 3 - - panel1 + + 3, 3 System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 3, 17 + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - menuSetDefaultRouting - - - 3 + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -842,8 +863,8 @@ 194, 22 - - 392, 0 + + Bottom 3 @@ -860,29 +881,32 @@ 24 - - 3 + + tabPageBlock 0 + + 3, 17 + menuRemove - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Left - - Fill + + labRoutingTips - - NoControl + + txtProxyDomain - - 2.Direct Domain or IP + + Domain - - 4, 22 + + groupBox5 0 @@ -896,24 +920,27 @@ 4, 22 - - 3, 3 + + Set as active routing 392, 505 - - 194, 22 + + 0, 0 - - Fill + + 0 - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 0 75, 23 + + 5, 22 + Fill @@ -923,11 +950,14 @@ 2 - - 0 + + 16 - - 1.Proxy Domain or IP + + panel5 + + + 3 groupBox5 @@ -938,23 +968,23 @@ 24 - - Fill - - - 0, 0 + + menuSetDefaultRouting IP - - 75, 23 + + 839, 505 - - 3, 17 + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 0, 76 + + 386, 485 + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 3, 3 @@ -965,8 +995,8 @@ 447, 505 - - Fill + + 386, 485 menuAdd @@ -977,21 +1007,18 @@ System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 299, 21 + + 753, 17 System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 853, 51 + + 0 - - Top + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - zh-Hans - True diff --git a/v2rayN/v2rayN/Forms/RoutingSettingForm.zh-Hans.resx b/v2rayN/v2rayN/Forms/RoutingSettingForm.zh-Hans.resx index 5c043970..a5b85f29 100644 --- a/v2rayN/v2rayN/Forms/RoutingSettingForm.zh-Hans.resx +++ b/v2rayN/v2rayN/Forms/RoutingSettingForm.zh-Hans.resx @@ -117,25 +117,37 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 691, 17 + 取消(&C) - - 确定(&O) - - - - 0, 545 - - - 817, 60 - 518, 16 *设置的路由规则,用逗号(,)分隔;正则中的逗号用<COMMA>替代 + + 598, 17 + + + 确定(&O) + + + 0, 545 + + + 817, 60 + + + 120, 16 + + + 启用路由高级功能 + 77, 12 @@ -268,7 +280,7 @@ 809, 443 - 4.预定义规则集列表 + 预定义规则集列表 817, 469 diff --git a/v2rayN/v2rayN/Global.cs b/v2rayN/v2rayN/Global.cs index 0eaf0665..5fbf1fdc 100644 --- a/v2rayN/v2rayN/Global.cs +++ b/v2rayN/v2rayN/Global.cs @@ -1,4 +1,6 @@  +using System.Collections.Generic; + namespace v2rayN { class Global @@ -190,6 +192,8 @@ namespace v2rayN public const string IEProxyExceptions = "localhost;127.*;10.*;172.16.*;172.17.*;172.18.*;172.19.*;172.20.*;172.21.*;172.22.*;172.23.*;172.24.*;172.25.*;172.26.*;172.27.*;172.28.*;172.29.*;172.30.*;172.31.*;192.168.*"; public const string RoutingRuleComma = ""; + + public static readonly IEnumerable ssSecuritys = new HashSet { "aes-256-gcm", "aes-128-gcm", "chacha20-poly1305", "chacha20-ietf-poly1305", "none", "plain" }; #endregion #region 全局变量 diff --git a/v2rayN/v2rayN/Handler/ConfigHandler.cs b/v2rayN/v2rayN/Handler/ConfigHandler.cs index 38b6d623..0fccf551 100644 --- a/v2rayN/v2rayN/Handler/ConfigHandler.cs +++ b/v2rayN/v2rayN/Handler/ConfigHandler.cs @@ -528,8 +528,7 @@ namespace v2rayN.Handler vmessItem.id = vmessItem.id.TrimEx(); vmessItem.security = vmessItem.security.TrimEx(); - var securitys = new HashSet() { "aes-256-gcm", "aes-128-gcm", "chacha20-poly1305", "chacha20-ietf-poly1305", "none", "plain" }; - if (!securitys.Contains(vmessItem.security)) + if (!Global.ssSecuritys.Contains(vmessItem.security)) { return -1; } diff --git a/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs b/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs index 3f2ba417..a6a35459 100644 --- a/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs +++ b/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs @@ -190,19 +190,32 @@ namespace v2rayN.Handler { v2rayConfig.routing.domainStrategy = config.domainStrategy; - var lockedItem = ConfigHandler.GetLockedRoutingItem(ref config); - if (lockedItem != null) + if (config.enableRoutingAdvanced) { - foreach (var item in lockedItem.rules) + if (config.routings != null && config.routingIndex < config.routings.Count) { - routingUserRule(item, ref v2rayConfig); + foreach (var item in config.routings[config.routingIndex].rules) + { + routingUserRule(item, ref v2rayConfig); + } } } - if (config.routings != null && config.routingIndex < config.routings.Count) + else { - foreach (var item in config.routings[config.routingIndex].rules) + var lockedItem = ConfigHandler.GetLockedRoutingItem(ref config); + if (lockedItem != null) { - routingUserRule(item, ref v2rayConfig); + foreach (var item in lockedItem.rules) + { + routingUserRule(item, ref v2rayConfig); + } + //Extra to bypass the mainland + string result = Utils.GetEmbedText(Global.CustomRoutingFileName + "white"); + var lstRules = Utils.FromJson>(result); + foreach (var item in lstRules) + { + routingUserRule(item, ref v2rayConfig); + } } } } @@ -378,7 +391,15 @@ namespace v2rayN.Handler serversItem.address = config.address(); serversItem.port = config.port(); serversItem.password = config.id(); - serversItem.method = config.security(); + if (Global.ssSecuritys.Contains(config.security())) + { + serversItem.method = config.security(); + } + else + { + serversItem.method = "none"; + } + serversItem.ota = false; serversItem.level = 1; diff --git a/v2rayN/v2rayN/Mode/Config.cs b/v2rayN/v2rayN/Mode/Config.cs index 552b35fb..a7733912 100644 --- a/v2rayN/v2rayN/Mode/Config.cs +++ b/v2rayN/v2rayN/Mode/Config.cs @@ -169,7 +169,11 @@ namespace v2rayN.Mode { get; set; } - + public bool enableRoutingAdvanced + { + get; set; + } + public ECoreType coreType { get; set; diff --git a/v2rayN/v2rayN/Properties/AssemblyInfo.cs b/v2rayN/v2rayN/Properties/AssemblyInfo.cs index d26a2167..1df9cdb0 100644 --- a/v2rayN/v2rayN/Properties/AssemblyInfo.cs +++ b/v2rayN/v2rayN/Properties/AssemblyInfo.cs @@ -32,4 +32,4 @@ using System.Runtime.InteropServices; // 方法是按如下所示使用“*”: //[assembly: AssemblyVersion("1.0.*")] //[assembly: AssemblyVersion("1.0.0")] -[assembly: AssemblyFileVersion("4.9")] +[assembly: AssemblyFileVersion("4.10")] diff --git a/v2rayN/v2rayN/Sample/custom_routing_locked b/v2rayN/v2rayN/Sample/custom_routing_locked index b4636131..018ee608 100644 --- a/v2rayN/v2rayN/Sample/custom_routing_locked +++ b/v2rayN/v2rayN/Sample/custom_routing_locked @@ -8,8 +8,8 @@ { "outboundTag": "direct", "domain": [ - "domain:example.com", - "domain:example2.com" + "domain:example-example.com", + "domain:example-example2.com" ] }, { diff --git a/v2rayN/v2rayN/Sample/custom_routing_white b/v2rayN/v2rayN/Sample/custom_routing_white index 61c48382..a708ae0d 100644 --- a/v2rayN/v2rayN/Sample/custom_routing_white +++ b/v2rayN/v2rayN/Sample/custom_routing_white @@ -2,8 +2,8 @@ { "outboundTag": "direct", "domain": [ - "domain:example.com", - "domain:example2.com" + "domain:example-example.com", + "domain:example-example2.com" ] }, { From 83804bd9148cc5cc7e2537cfe989aeee2578a448 Mon Sep 17 00:00:00 2001 From: 2dust <31833384+2dust@users.noreply.github.com> Date: Fri, 5 Feb 2021 20:30:51 +0800 Subject: [PATCH 53/54] up4.11 --- .../Forms/RoutingSettingForm.Designer.cs | 86 +- v2rayN/v2rayN/Forms/RoutingSettingForm.cs | 17 +- v2rayN/v2rayN/Forms/RoutingSettingForm.resx | 1711 +++++++++-------- .../Forms/RoutingSettingForm.zh-Hans.resx | 110 +- v2rayN/v2rayN/Handler/V2rayConfigHandler.cs | 9 +- v2rayN/v2rayN/Properties/AssemblyInfo.cs | 2 +- 6 files changed, 994 insertions(+), 941 deletions(-) diff --git a/v2rayN/v2rayN/Forms/RoutingSettingForm.Designer.cs b/v2rayN/v2rayN/Forms/RoutingSettingForm.Designer.cs index 16fa9b00..1d5cf177 100644 --- a/v2rayN/v2rayN/Forms/RoutingSettingForm.Designer.cs +++ b/v2rayN/v2rayN/Forms/RoutingSettingForm.Designer.cs @@ -43,8 +43,10 @@ this.menuRemove = new System.Windows.Forms.ToolStripMenuItem(); this.menuSelectAll = new System.Windows.Forms.ToolStripMenuItem(); this.menuSetDefaultRouting = new System.Windows.Forms.ToolStripMenuItem(); - this.MenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + this.MenuItemAdvanced = new System.Windows.Forms.ToolStripMenuItem(); this.menuServer = new System.Windows.Forms.MenuStrip(); + this.MenuItemBasic = new System.Windows.Forms.ToolStripMenuItem(); + this.menuImportBasicRules = new System.Windows.Forms.ToolStripMenuItem(); this.tabNormal = new System.Windows.Forms.TabControl(); this.tabPageProxy = new System.Windows.Forms.TabPage(); this.panel5 = new System.Windows.Forms.Panel(); @@ -88,24 +90,24 @@ // // btnClose // - resources.ApplyResources(this.btnClose, "btnClose"); this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel; + resources.ApplyResources(this.btnClose, "btnClose"); this.btnClose.Name = "btnClose"; this.btnClose.UseVisualStyleBackColor = true; this.btnClose.Click += new System.EventHandler(this.btnClose_Click); // // panel2 // - resources.ApplyResources(this.panel2, "panel2"); this.panel2.Controls.Add(this.labRoutingTips); this.panel2.Controls.Add(this.btnClose); this.panel2.Controls.Add(this.btnOK); + resources.ApplyResources(this.panel2, "panel2"); this.panel2.Name = "panel2"; // // labRoutingTips // - resources.ApplyResources(this.labRoutingTips, "labRoutingTips"); this.labRoutingTips.ForeColor = System.Drawing.Color.Brown; + resources.ApplyResources(this.labRoutingTips, "labRoutingTips"); this.labRoutingTips.Name = "labRoutingTips"; // // btnOK @@ -117,10 +119,10 @@ // // panel1 // - resources.ApplyResources(this.panel1, "panel1"); this.panel1.Controls.Add(this.chkenableRoutingAdvanced); this.panel1.Controls.Add(this.linkLabelRoutingDoc); this.panel1.Controls.Add(this.cmbdomainStrategy); + resources.ApplyResources(this.panel1, "panel1"); this.panel1.Name = "panel1"; // // chkenableRoutingAdvanced @@ -139,18 +141,17 @@ // // cmbdomainStrategy // - resources.ApplyResources(this.cmbdomainStrategy, "cmbdomainStrategy"); this.cmbdomainStrategy.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.cmbdomainStrategy.FormattingEnabled = true; this.cmbdomainStrategy.Items.AddRange(new object[] { resources.GetString("cmbdomainStrategy.Items"), resources.GetString("cmbdomainStrategy.Items1"), resources.GetString("cmbdomainStrategy.Items2")}); + resources.ApplyResources(this.cmbdomainStrategy, "cmbdomainStrategy"); this.cmbdomainStrategy.Name = "cmbdomainStrategy"; // // cmsLv // - resources.ApplyResources(this.cmsLv, "cmsLv"); this.cmsLv.ImageScalingSize = new System.Drawing.Size(20, 20); this.cmsLv.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.menuAdd, @@ -158,74 +159,89 @@ this.menuSelectAll, this.menuSetDefaultRouting}); this.cmsLv.Name = "cmsLv"; - this.cmsLv.OwnerItem = this.MenuItem1; + this.cmsLv.OwnerItem = this.MenuItemAdvanced; + resources.ApplyResources(this.cmsLv, "cmsLv"); // // menuAdd // - resources.ApplyResources(this.menuAdd, "menuAdd"); this.menuAdd.Name = "menuAdd"; + resources.ApplyResources(this.menuAdd, "menuAdd"); this.menuAdd.Click += new System.EventHandler(this.menuAdd_Click); // // menuRemove // - resources.ApplyResources(this.menuRemove, "menuRemove"); this.menuRemove.Name = "menuRemove"; + resources.ApplyResources(this.menuRemove, "menuRemove"); this.menuRemove.Click += new System.EventHandler(this.menuRemove_Click); // // menuSelectAll // - resources.ApplyResources(this.menuSelectAll, "menuSelectAll"); this.menuSelectAll.Name = "menuSelectAll"; + resources.ApplyResources(this.menuSelectAll, "menuSelectAll"); this.menuSelectAll.Click += new System.EventHandler(this.menuSelectAll_Click); // // menuSetDefaultRouting // - resources.ApplyResources(this.menuSetDefaultRouting, "menuSetDefaultRouting"); this.menuSetDefaultRouting.Name = "menuSetDefaultRouting"; + resources.ApplyResources(this.menuSetDefaultRouting, "menuSetDefaultRouting"); this.menuSetDefaultRouting.Click += new System.EventHandler(this.menuSetDefaultRouting_Click); // - // MenuItem1 + // MenuItemAdvanced // - resources.ApplyResources(this.MenuItem1, "MenuItem1"); - this.MenuItem1.DropDown = this.cmsLv; - this.MenuItem1.Name = "MenuItem1"; + this.MenuItemAdvanced.DropDown = this.cmsLv; + this.MenuItemAdvanced.Name = "MenuItemAdvanced"; + resources.ApplyResources(this.MenuItemAdvanced, "MenuItemAdvanced"); // // menuServer // - resources.ApplyResources(this.menuServer, "menuServer"); this.menuServer.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.MenuItem1}); + this.MenuItemBasic, + this.MenuItemAdvanced}); + resources.ApplyResources(this.menuServer, "menuServer"); this.menuServer.Name = "menuServer"; // + // MenuItemBasic + // + this.MenuItemBasic.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.menuImportBasicRules}); + this.MenuItemBasic.Name = "MenuItemBasic"; + resources.ApplyResources(this.MenuItemBasic, "MenuItemBasic"); + // + // menuImportBasicRules + // + this.menuImportBasicRules.Name = "menuImportBasicRules"; + resources.ApplyResources(this.menuImportBasicRules, "menuImportBasicRules"); + this.menuImportBasicRules.Click += new System.EventHandler(this.menuImportBasicRules_Click); + // // tabNormal // - resources.ApplyResources(this.tabNormal, "tabNormal"); this.tabNormal.Controls.Add(this.tabPageProxy); this.tabNormal.Controls.Add(this.tabPageDirect); this.tabNormal.Controls.Add(this.tabPageBlock); this.tabNormal.Controls.Add(this.tabPageRuleList); + resources.ApplyResources(this.tabNormal, "tabNormal"); this.tabNormal.Name = "tabNormal"; this.tabNormal.SelectedIndex = 0; this.tabNormal.Selecting += new System.Windows.Forms.TabControlCancelEventHandler(this.tabNormal_Selecting); // // tabPageProxy // - resources.ApplyResources(this.tabPageProxy, "tabPageProxy"); this.tabPageProxy.Controls.Add(this.panel5); + resources.ApplyResources(this.tabPageProxy, "tabPageProxy"); this.tabPageProxy.Name = "tabPageProxy"; this.tabPageProxy.UseVisualStyleBackColor = true; // // panel5 // - resources.ApplyResources(this.panel5, "panel5"); this.panel5.Controls.Add(this.groupBox5); this.panel5.Controls.Add(this.groupBox6); + resources.ApplyResources(this.panel5, "panel5"); this.panel5.Name = "panel5"; // // groupBox5 // - resources.ApplyResources(this.groupBox5, "groupBox5"); this.groupBox5.Controls.Add(this.txtProxyIp); + resources.ApplyResources(this.groupBox5, "groupBox5"); this.groupBox5.Name = "groupBox5"; this.groupBox5.TabStop = false; // @@ -236,8 +252,8 @@ // // groupBox6 // - resources.ApplyResources(this.groupBox6, "groupBox6"); this.groupBox6.Controls.Add(this.txtProxyDomain); + resources.ApplyResources(this.groupBox6, "groupBox6"); this.groupBox6.Name = "groupBox6"; this.groupBox6.TabStop = false; // @@ -248,22 +264,22 @@ // // tabPageDirect // - resources.ApplyResources(this.tabPageDirect, "tabPageDirect"); this.tabPageDirect.Controls.Add(this.panel4); + resources.ApplyResources(this.tabPageDirect, "tabPageDirect"); this.tabPageDirect.Name = "tabPageDirect"; this.tabPageDirect.UseVisualStyleBackColor = true; // // panel4 // - resources.ApplyResources(this.panel4, "panel4"); this.panel4.Controls.Add(this.groupBox3); this.panel4.Controls.Add(this.groupBox4); + resources.ApplyResources(this.panel4, "panel4"); this.panel4.Name = "panel4"; // // groupBox3 // - resources.ApplyResources(this.groupBox3, "groupBox3"); this.groupBox3.Controls.Add(this.txtDirectIp); + resources.ApplyResources(this.groupBox3, "groupBox3"); this.groupBox3.Name = "groupBox3"; this.groupBox3.TabStop = false; // @@ -274,8 +290,8 @@ // // groupBox4 // - resources.ApplyResources(this.groupBox4, "groupBox4"); this.groupBox4.Controls.Add(this.txtDirectDomain); + resources.ApplyResources(this.groupBox4, "groupBox4"); this.groupBox4.Name = "groupBox4"; this.groupBox4.TabStop = false; // @@ -286,22 +302,22 @@ // // tabPageBlock // - resources.ApplyResources(this.tabPageBlock, "tabPageBlock"); this.tabPageBlock.Controls.Add(this.panel3); + resources.ApplyResources(this.tabPageBlock, "tabPageBlock"); this.tabPageBlock.Name = "tabPageBlock"; this.tabPageBlock.UseVisualStyleBackColor = true; // // panel3 // - resources.ApplyResources(this.panel3, "panel3"); this.panel3.Controls.Add(this.groupBox2); this.panel3.Controls.Add(this.groupBox1); + resources.ApplyResources(this.panel3, "panel3"); this.panel3.Name = "panel3"; // // groupBox2 // - resources.ApplyResources(this.groupBox2, "groupBox2"); this.groupBox2.Controls.Add(this.txtBlockIp); + resources.ApplyResources(this.groupBox2, "groupBox2"); this.groupBox2.Name = "groupBox2"; this.groupBox2.TabStop = false; // @@ -312,8 +328,8 @@ // // groupBox1 // - resources.ApplyResources(this.groupBox1, "groupBox1"); this.groupBox1.Controls.Add(this.txtBlockDomain); + resources.ApplyResources(this.groupBox1, "groupBox1"); this.groupBox1.Name = "groupBox1"; this.groupBox1.TabStop = false; // @@ -324,15 +340,15 @@ // // tabPageRuleList // - resources.ApplyResources(this.tabPageRuleList, "tabPageRuleList"); this.tabPageRuleList.Controls.Add(this.lvRoutings); + resources.ApplyResources(this.tabPageRuleList, "tabPageRuleList"); this.tabPageRuleList.Name = "tabPageRuleList"; this.tabPageRuleList.UseVisualStyleBackColor = true; // // lvRoutings // - resources.ApplyResources(this.lvRoutings, "lvRoutings"); this.lvRoutings.ContextMenuStrip = this.cmsLv; + resources.ApplyResources(this.lvRoutings, "lvRoutings"); this.lvRoutings.FullRowSelect = true; this.lvRoutings.GridLines = true; this.lvRoutings.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable; @@ -400,7 +416,7 @@ private System.Windows.Forms.ToolStripMenuItem menuSelectAll; private System.Windows.Forms.ToolStripMenuItem menuAdd; private System.Windows.Forms.MenuStrip menuServer; - private System.Windows.Forms.ToolStripMenuItem MenuItem1; + private System.Windows.Forms.ToolStripMenuItem MenuItemAdvanced; private System.Windows.Forms.ToolStripMenuItem menuSetDefaultRouting; private System.Windows.Forms.TabControl tabNormal; private System.Windows.Forms.TabPage tabPageProxy; @@ -425,5 +441,7 @@ private Base.ListViewFlickerFree lvRoutings; private System.Windows.Forms.Label labRoutingTips; private System.Windows.Forms.CheckBox chkenableRoutingAdvanced; + private System.Windows.Forms.ToolStripMenuItem MenuItemBasic; + private System.Windows.Forms.ToolStripMenuItem menuImportBasicRules; } } \ No newline at end of file diff --git a/v2rayN/v2rayN/Forms/RoutingSettingForm.cs b/v2rayN/v2rayN/Forms/RoutingSettingForm.cs index 5e015af7..c0fc32b4 100644 --- a/v2rayN/v2rayN/Forms/RoutingSettingForm.cs +++ b/v2rayN/v2rayN/Forms/RoutingSettingForm.cs @@ -78,7 +78,8 @@ namespace v2rayN.Forms this.tabPageDirect.Parent = null; this.tabPageBlock.Parent = null; this.tabPageRuleList.Parent = tabNormal; - MenuItem1.Enabled = true; + MenuItemBasic.Enabled = false; + MenuItemAdvanced.Enabled = true; } else @@ -87,9 +88,10 @@ namespace v2rayN.Forms this.tabPageDirect.Parent = tabNormal; this.tabPageBlock.Parent = tabNormal; this.tabPageRuleList.Parent = null; - MenuItem1.Enabled = false; + MenuItemBasic.Enabled = true; + MenuItemAdvanced.Enabled = false; } - + } @@ -285,9 +287,16 @@ namespace v2rayN.Forms return 0; } + private void menuImportBasicRules_Click(object sender, EventArgs e) + { + //Extra to bypass the mainland + txtDirectDomain.Text = "geosite:cn"; + txtDirectIp.Text = "geoip:private,geoip:cn"; + + txtBlockDomain.Text = "geosite:category-ads-all"; + } #endregion - } } diff --git a/v2rayN/v2rayN/Forms/RoutingSettingForm.resx b/v2rayN/v2rayN/Forms/RoutingSettingForm.resx index f784cf53..2b12e311 100644 --- a/v2rayN/v2rayN/Forms/RoutingSettingForm.resx +++ b/v2rayN/v2rayN/Forms/RoutingSettingForm.resx @@ -117,468 +117,789 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 4 - - - cmbdomainStrategy - - - - 839, 505 - - - 386, 485 - - - 392, 0 - - - Fill - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 853, 25 - - - txtDirectIp - - - IP - - - Fill - - - panel1 - - - 447, 505 - - - 441, 485 - - - Edit and Function - - - panel1 - - - tabPageProxy - - - panel1 - - - - 25 - - - 3 - - - 0 - - - True - - - 25 - - - 3, 17 - - - Domain - - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Left - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 3, 3, 3, 3 - - - 15 - - - 0 - - - False - - - 6, 21 - - - groupBox6 - - - 853, 673 - - - 392, 0 - - - System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + NoControl - - $this + + + 753, 17 - - 0 + + 75, 23 - - Routing Settings + + + 4 - - Remove selected + + &Cancel - - Fill + + btnClose - - IP + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 845, 511 - - - Pre-defined Rule Set List - - - Fill - - - 660, 17 - - - Domain strategy - - - groupBox3 - - - 447, 505 - - - System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 853, 60 - - - tabNormal - - - MenuItem1 + + panel2 1 + + NoControl + + + 5, 22 + + + 562, 16 + + + 34 + + + *Set the rules, separated by commas (,); The comma in the regular is replaced by <COMMA> + + + labRoutingTips + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panel2 + + + 0 + + + NoControl + + + 660, 17 + + + 75, 23 + + + 5 + + + &OK + + + btnOK + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panel2 + + + 2 + + + Bottom + + + 0, 613 + + + 853, 60 + + + 7 + + + panel2 + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + $this + + + 3 + + + True + + + NoControl + + + 318, 17 + + + 216, 16 + + + 26 + + + Enable advanced routing function + + + chkenableRoutingAdvanced + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panel1 + + + 0 + + + True + + + NoControl + + + 6, 21 + + + 0, 0, 0, 0 + + + 95, 12 + + + 19 + + + Domain strategy + + + linkLabelRoutingDoc + + + System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panel1 + + + 1 + + + AsIs + + + IPIfNonMatch + + + IPOnDemand + + + 116, 17 + + + 165, 20 + + + 16 + + + cmbdomainStrategy + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panel1 + + + 2 + + + Top + + + 0, 25 + + + 853, 51 + + + 11 + + + panel1 + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 2 + + + 17, 17 + + + 194, 22 + + + Add + + + 194, 22 + + + Remove selected + + + 194, 22 + + + Select All (Ctrl+A) + + + 194, 22 + + + Set as active routing + + + 129, 21 + + + Advanced Function + + + 195, 92 + + + cmsLv + + + System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 139, 17 + + + 185, 22 + + + Import Basic Rules + + + 102, 21 + + + Basic Function + + + 0, 0 + + + 853, 25 + + + 15 + + + menuServer + + + System.Windows.Forms.MenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 4 + + + Fill + + + 3, 17 + + + True + + + 441, 485 + + + 25 + + + txtProxyIp + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox5 + + + 0 + + + Fill + + + 392, 0 + + + 447, 505 + + + 4 + + + IP + + + groupBox5 + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panel5 + + + 0 + + + Fill + + + 3, 17 + + + True + + + 386, 485 + + + 24 + + + txtProxyDomain + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox6 + + + 0 + + + Left + + + 0, 0 + + + 392, 505 + + + 3 + + + Domain + + + groupBox6 + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panel5 + + + 1 + + + Fill + + + 3, 3 + + + 839, 505 + + + 12 + + + panel5 + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPageProxy + + + 0 + + + 4, 22 + + + 3, 3, 3, 3 + + + 845, 511 + + + 0 + + + 1.Proxy Domain or IP + + + tabPageProxy + + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabNormal + + + 0 + + + Fill + + + 3, 17 + + + True + + + 441, 485 + + + 25 + + + txtDirectIp + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox3 + + + 0 + + + Fill + + + 392, 0 + + + 447, 505 + + + 4 + + + IP + + + groupBox3 + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panel4 + + + 0 + + + Fill + + + 3, 17 + + + True + + + 386, 485 + + + 24 + + + txtDirectDomain + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox4 + + + 0 + + + Left + + + 0, 0 + + + 392, 505 + + + 3 + + + Domain + + + groupBox4 + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panel4 + + + 1 + + + Fill + + + 3, 3 + + + 839, 505 + + + 12 + + + panel4 + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPageDirect + + + 0 + + + 4, 22 + + + 3, 3, 3, 3 + + + 845, 511 + + + 1 + + + 2.Direct Domain or IP + + + tabPageDirect + + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabNormal + + + 1 + + + Fill + + + 3, 17 + + + True + + + 441, 485 + + + 25 + + + txtBlockIp + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 0 + + + Fill + + + 392, 0 + + + 447, 505 + + + 4 + + + IP + + + groupBox2 + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panel3 + + + 0 + + + Fill + + + 3, 17 + + + True + + + 386, 485 + + + 24 + + + txtBlockDomain + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 0 + + + Left + + + 0, 0 + + + 392, 505 + + + 3 + + + Domain + + + groupBox1 + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panel3 + + + 1 + + + Fill + + + 3, 3 + + + 839, 505 + + + 12 + + + panel3 + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + tabPageBlock - - groupBox1 - - - IPOnDemand - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 318, 17 - - - panel5 - - - 95, 12 - - - Fill - - - Domain - - - System.Windows.Forms.TabControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 0, 25 - - + 0 - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 75, 23 - - - menuServer - - - 1 - - - System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - panel3 - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - panel5 - - - tabPageRuleList - - - 2 - - + 4, 22 - + + 3, 3, 3, 3 + + 845, 511 - - panel2 - - - cmsLv - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 5 - - - NoControl - - - txtProxyIp - - - 845, 511 - - - Add - - - 15 - - - True - - - txtBlockIp - - - 0 - - - panel2 - - - tabPageRuleList - - - 2 - - - 3 - - - chkenableRoutingAdvanced - - - NoControl - - - 2 - - - RoutingSettingForm - - - 441, 485 - - - panel2 - - - 0, 0 - - - 0 - - - True - - - Fill - - - $this - 2 - - 392, 505 + + 3.Block Domain or IP - - groupBox2 + + tabPageBlock - - 194, 22 + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - panel4 - - - 4 - - - True - - - System.Windows.Forms.MenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox4 - - - 1.Proxy Domain or IP - - - True - - - 195, 92 - - - True - - - btnOK - - - 3, 3, 3, 3 - - - 26 - - - 116, 17 - - - panel4 - - - 0 - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 24 - - - Left - - - 441, 485 - - - 3, 3 - - - 3 - - - 3, 17 - - - 0, 0, 0, 0 - - - System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - IPIfNonMatch - - - 853, 537 - - - 1 - - - panel1 - - - 25 - - - 1 - - - 0 - - - 853, 51 - - - 0, 0 - - - panel4 - - - 194, 22 - - - panel3 - - - $this - - + tabNormal + + 2 + + + Fill + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w @@ -596,436 +917,136 @@ ZW0uRHJhd2luZy5HcmFwaGljc1VuaXQBAAAAB3ZhbHVlX18ACAMAAAADAAAACw== - - 165, 20 - - - 0 - - - Fill - - - 4, 22 - - - groupBox4 - - - tabNormal - - - &OK - - - tabNormal - - - True - - - 4, 22 - - - Fill - - - 1 - - - btnClose - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - panel2 - - - 845, 511 - - - 3, 17 - - - v2rayN.Base.ListViewFlickerFree, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null - - - tabPageProxy - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - panel3 - - - 16 - - - menuSelectAll - - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 216, 16 - - - 1 - - - AsIs - - - txtDirectDomain - - - groupBox1 - - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - True - - - 0, 76 - - - 0 - - - Fill - - - 3.Block Domain or IP - - - 4 - - - 11 - - - groupBox2 - - - 0, 0 - - - 12 - - - txtBlockDomain - - - 7 - - - Enable advanced routing function - - - 3, 17 - - - 1 - - - NoControl - - - 0 - - - 12 - - - v2rayN.Forms.BaseForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null - - - 19 - - - 392, 505 - - - *Set the rules, separated by commas (,); The comma in the regular is replaced by <COMMA> - - - groupBox6 - - - Top - - - Fill - - - 839, 505 - - - 2.Direct Domain or IP - - - 0, 613 - - - Fill - - - tabPageDirect - - - 562, 16 - - - Fill - - - 3, 17 - - - 120, 21 - - - 3 - - - 194, 22 - - - NoControl - - - tabPageDirect - - - 4 - - - Select All (Ctrl+A) - - - &Cancel - - - 392, 0 - - - 839, 505 - - - tabNormal - - - 3, 3, 3, 3 - - - 6, 12 - - - 1 - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 3, 3, 3, 3 - - + 3, 3 - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 0 - - - 194, 22 - - - Bottom - - - 3 - - - lvRoutings - - - linkLabelRoutingDoc - - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 24 - - - tabPageBlock - - - 0 - - - 3, 17 - - - menuRemove - - - Left - - - labRoutingTips - - - txtProxyDomain - - - Domain - - - groupBox5 - - - 0 - - - groupBox3 - - - 12 - - - 4, 22 - - - Set as active routing - - - 392, 505 - - - 0, 0 - - - 0 - - - 0 - - - 75, 23 - - - 5, 22 - - - Fill - - - Fill - - - 2 - - - 16 - - - panel5 - - - 3 - - - groupBox5 - - - 4 - - - 24 - - - menuSetDefaultRouting - - - IP - 839, 505 - - System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 15 - - 386, 485 + + lvRoutings - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + v2rayN.Base.ListViewFlickerFree, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null - - 3, 3 - - - 34 - - - 447, 505 - - - 386, 485 - - - menuAdd - - - 3, 3 - - - System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 753, 17 - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + tabPageRuleList 0 - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 4, 22 + + + 3, 3, 3, 3 + + + 845, 511 + + + 3 + + + Pre-defined Rule Set List + + + tabPageRuleList + + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabNormal + + + 3 + + + Fill + + + 0, 76 + + + 853, 537 + + + 16 + + + tabNormal + + + System.Windows.Forms.TabControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 1 True - - 17, 17 - - - 139, 17 - + + 6, 12 + + + 853, 673 + + + Routing Settings + + + menuAdd + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuRemove + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuSelectAll + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuSetDefaultRouting + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + MenuItemAdvanced + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + MenuItemBasic + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuImportBasicRules + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + RoutingSettingForm + + + v2rayN.Forms.BaseForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/v2rayN/v2rayN/Forms/RoutingSettingForm.zh-Hans.resx b/v2rayN/v2rayN/Forms/RoutingSettingForm.zh-Hans.resx index a5b85f29..992f0e9e 100644 --- a/v2rayN/v2rayN/Forms/RoutingSettingForm.zh-Hans.resx +++ b/v2rayN/v2rayN/Forms/RoutingSettingForm.zh-Hans.resx @@ -124,6 +124,12 @@ 取消(&C) + + 0, 545 + + + 817, 60 + 518, 16 @@ -136,11 +142,8 @@ 确定(&O) - - 0, 545 - - - 817, 60 + + 817, 51 120, 16 @@ -154,8 +157,8 @@ 域名解析策略 - - 817, 51 + + 149, 92 148, 22 @@ -181,32 +184,29 @@ 设为活动路由 - - 104, 21 + + 68, 21 - - 路由规则集功能 - - - 149, 92 + + 高级功能 817, 25 - - 405, 417 + + 68, 21 - - 411, 437 + + 基础功能 - - 386, 417 + + 180, 22 - - 392, 437 + + 一键导入基础规则 - - 803, 437 + + 817, 469 809, 443 @@ -214,20 +214,20 @@ 1.代理的Domain或IP - - 405, 417 + + 803, 437 - + 411, 437 - - 386, 417 + + 405, 417 - + 392, 437 - - 803, 437 + + 386, 417 809, 443 @@ -235,20 +235,20 @@ 2.直连的Domain或IP - - 405, 417 + + 803, 437 - + 411, 437 - - 386, 417 + + 405, 417 - + 392, 437 - - 803, 437 + + 386, 417 809, 443 @@ -256,6 +256,27 @@ 3.阻止的Domain或IP + + 803, 437 + + + 411, 437 + + + 405, 417 + + + 392, 437 + + + 386, 417 + + + 809, 443 + + + 预定义规则集列表 + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w @@ -276,15 +297,6 @@ 803, 437 - - 809, 443 - - - 预定义规则集列表 - - - 817, 469 - 817, 605 diff --git a/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs b/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs index a6a35459..b10e4974 100644 --- a/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs +++ b/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs @@ -208,14 +208,7 @@ namespace v2rayN.Handler foreach (var item in lockedItem.rules) { routingUserRule(item, ref v2rayConfig); - } - //Extra to bypass the mainland - string result = Utils.GetEmbedText(Global.CustomRoutingFileName + "white"); - var lstRules = Utils.FromJson>(result); - foreach (var item in lstRules) - { - routingUserRule(item, ref v2rayConfig); - } + } } } } diff --git a/v2rayN/v2rayN/Properties/AssemblyInfo.cs b/v2rayN/v2rayN/Properties/AssemblyInfo.cs index 1df9cdb0..7eb30d8a 100644 --- a/v2rayN/v2rayN/Properties/AssemblyInfo.cs +++ b/v2rayN/v2rayN/Properties/AssemblyInfo.cs @@ -32,4 +32,4 @@ using System.Runtime.InteropServices; // 方法是按如下所示使用“*”: //[assembly: AssemblyVersion("1.0.*")] //[assembly: AssemblyVersion("1.0.0")] -[assembly: AssemblyFileVersion("4.10")] +[assembly: AssemblyFileVersion("4.11")] From b30191feb2d717e31dea845fc2416c4a73efee34 Mon Sep 17 00:00:00 2001 From: 2dust <31833384+2dust@users.noreply.github.com> Date: Tue, 16 Feb 2021 20:23:32 +0800 Subject: [PATCH 54/54] up4.12 --- .../v2rayN/Forms/AddServer5Form.Designer.cs | 50 +- v2rayN/v2rayN/Forms/AddServer5Form.cs | 6 +- v2rayN/v2rayN/Forms/AddServer5Form.resx | 2328 ++++++++-------- .../v2rayN/Forms/AddServer5Form.zh-Hans.resx | 34 +- .../v2rayN/Forms/AddServer6Form.Designer.cs | 55 +- v2rayN/v2rayN/Forms/AddServer6Form.cs | 18 +- v2rayN/v2rayN/Forms/AddServer6Form.resx | 824 +++--- .../v2rayN/Forms/AddServer6Form.zh-Hans.resx | 26 +- v2rayN/v2rayN/Forms/AddServerForm.Designer.cs | 48 +- v2rayN/v2rayN/Forms/AddServerForm.cs | 4 + v2rayN/v2rayN/Forms/AddServerForm.resx | 2339 +++++++++-------- .../v2rayN/Forms/AddServerForm.zh-Hans.resx | 26 +- v2rayN/v2rayN/Forms/MainForm.cs | 66 +- v2rayN/v2rayN/Handler/ConfigHandler.cs | 5 +- v2rayN/v2rayN/Handler/MainFormHandler.cs | 74 +- v2rayN/v2rayN/Handler/ShareHandler.cs | 15 +- v2rayN/v2rayN/Handler/V2rayConfigHandler.cs | 25 +- v2rayN/v2rayN/Mode/Config.cs | 15 + v2rayN/v2rayN/Mode/VmessQRCode.cs | 6 +- v2rayN/v2rayN/Properties/AssemblyInfo.cs | 2 +- 20 files changed, 3181 insertions(+), 2785 deletions(-) diff --git a/v2rayN/v2rayN/Forms/AddServer5Form.Designer.cs b/v2rayN/v2rayN/Forms/AddServer5Form.Designer.cs index 423b7386..e6558407 100644 --- a/v2rayN/v2rayN/Forms/AddServer5Form.Designer.cs +++ b/v2rayN/v2rayN/Forms/AddServer5Form.Designer.cs @@ -39,6 +39,8 @@ this.label24 = new System.Windows.Forms.Label(); this.label23 = new System.Windows.Forms.Label(); this.panTlsMore = new System.Windows.Forms.Panel(); + this.txtSNI = new System.Windows.Forms.TextBox(); + this.label22 = new System.Windows.Forms.Label(); this.label21 = new System.Windows.Forms.Label(); this.cmbAllowInsecure = new System.Windows.Forms.ComboBox(); this.label9 = new System.Windows.Forms.Label(); @@ -87,14 +89,15 @@ // // btnClose // - this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel; resources.ApplyResources(this.btnClose, "btnClose"); + this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel; this.btnClose.Name = "btnClose"; this.btnClose.UseVisualStyleBackColor = true; this.btnClose.Click += new System.EventHandler(this.btnClose_Click); // // groupBox1 // + resources.ApplyResources(this.groupBox1, "groupBox1"); this.groupBox1.Controls.Add(this.cmbFlow); this.groupBox1.Controls.Add(this.label4); this.groupBox1.Controls.Add(this.btnGUID); @@ -111,12 +114,12 @@ this.groupBox1.Controls.Add(this.label2); this.groupBox1.Controls.Add(this.txtAddress); this.groupBox1.Controls.Add(this.label1); - resources.ApplyResources(this.groupBox1, "groupBox1"); this.groupBox1.Name = "groupBox1"; this.groupBox1.TabStop = false; // // cmbFlow // + resources.ApplyResources(this.cmbFlow, "cmbFlow"); this.cmbFlow.FormattingEnabled = true; this.cmbFlow.Items.AddRange(new object[] { resources.GetString("cmbFlow.Items"), @@ -124,7 +127,6 @@ resources.GetString("cmbFlow.Items2"), resources.GetString("cmbFlow.Items3"), resources.GetString("cmbFlow.Items4")}); - resources.ApplyResources(this.cmbFlow, "cmbFlow"); this.cmbFlow.Name = "cmbFlow"; // // label4 @@ -146,6 +148,7 @@ // // groupBox2 // + resources.ApplyResources(this.groupBox2, "groupBox2"); this.groupBox2.Controls.Add(this.label24); this.groupBox2.Controls.Add(this.label23); this.groupBox2.Controls.Add(this.panTlsMore); @@ -166,7 +169,6 @@ this.groupBox2.Controls.Add(this.label11); this.groupBox2.Controls.Add(this.label10); this.groupBox2.Controls.Add(this.cmbHeaderType); - resources.ApplyResources(this.groupBox2, "groupBox2"); this.groupBox2.Name = "groupBox2"; this.groupBox2.TabStop = false; // @@ -182,11 +184,23 @@ // // panTlsMore // + resources.ApplyResources(this.panTlsMore, "panTlsMore"); + this.panTlsMore.Controls.Add(this.txtSNI); + this.panTlsMore.Controls.Add(this.label22); this.panTlsMore.Controls.Add(this.label21); this.panTlsMore.Controls.Add(this.cmbAllowInsecure); - resources.ApplyResources(this.panTlsMore, "panTlsMore"); this.panTlsMore.Name = "panTlsMore"; // + // txtSNI + // + resources.ApplyResources(this.txtSNI, "txtSNI"); + this.txtSNI.Name = "txtSNI"; + // + // label22 + // + resources.ApplyResources(this.label22, "label22"); + this.label22.Name = "label22"; + // // label21 // resources.ApplyResources(this.label21, "label21"); @@ -194,13 +208,13 @@ // // cmbAllowInsecure // + resources.ApplyResources(this.cmbAllowInsecure, "cmbAllowInsecure"); this.cmbAllowInsecure.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.cmbAllowInsecure.FormattingEnabled = true; this.cmbAllowInsecure.Items.AddRange(new object[] { resources.GetString("cmbAllowInsecure.Items"), resources.GetString("cmbAllowInsecure.Items1"), resources.GetString("cmbAllowInsecure.Items2")}); - resources.ApplyResources(this.cmbAllowInsecure, "cmbAllowInsecure"); this.cmbAllowInsecure.Name = "cmbAllowInsecure"; // // label9 @@ -220,6 +234,7 @@ // // cmbNetwork // + resources.ApplyResources(this.cmbNetwork, "cmbNetwork"); this.cmbNetwork.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.cmbNetwork.FormattingEnabled = true; this.cmbNetwork.Items.AddRange(new object[] { @@ -228,7 +243,6 @@ resources.GetString("cmbNetwork.Items2"), resources.GetString("cmbNetwork.Items3"), resources.GetString("cmbNetwork.Items4")}); - resources.ApplyResources(this.cmbNetwork, "cmbNetwork"); this.cmbNetwork.Name = "cmbNetwork"; this.cmbNetwork.SelectedIndexChanged += new System.EventHandler(this.cmbNetwork_SelectedIndexChanged); // @@ -269,13 +283,13 @@ // // cmbStreamSecurity // + resources.ApplyResources(this.cmbStreamSecurity, "cmbStreamSecurity"); this.cmbStreamSecurity.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.cmbStreamSecurity.FormattingEnabled = true; this.cmbStreamSecurity.Items.AddRange(new object[] { resources.GetString("cmbStreamSecurity.Items"), resources.GetString("cmbStreamSecurity.Items1"), resources.GetString("cmbStreamSecurity.Items2")}); - resources.ApplyResources(this.cmbStreamSecurity, "cmbStreamSecurity"); this.cmbStreamSecurity.Name = "cmbStreamSecurity"; this.cmbStreamSecurity.SelectedIndexChanged += new System.EventHandler(this.cmbStreamSecurity_SelectedIndexChanged); // @@ -301,6 +315,7 @@ // // cmbHeaderType // + resources.ApplyResources(this.cmbHeaderType, "cmbHeaderType"); this.cmbHeaderType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.cmbHeaderType.FormattingEnabled = true; this.cmbHeaderType.Items.AddRange(new object[] { @@ -311,7 +326,6 @@ resources.GetString("cmbHeaderType.Items4"), resources.GetString("cmbHeaderType.Items5"), resources.GetString("cmbHeaderType.Items6")}); - resources.ApplyResources(this.cmbHeaderType, "cmbHeaderType"); this.cmbHeaderType.Name = "cmbHeaderType"; // // label8 @@ -321,11 +335,11 @@ // // cmbSecurity // + resources.ApplyResources(this.cmbSecurity, "cmbSecurity"); this.cmbSecurity.DropDownStyle = System.Windows.Forms.ComboBoxStyle.Simple; this.cmbSecurity.FormattingEnabled = true; this.cmbSecurity.Items.AddRange(new object[] { resources.GetString("cmbSecurity.Items")}); - resources.ApplyResources(this.cmbSecurity, "cmbSecurity"); this.cmbSecurity.Name = "cmbSecurity"; // // txtRemarks @@ -375,9 +389,9 @@ // // panel2 // + resources.ApplyResources(this.panel2, "panel2"); this.panel2.Controls.Add(this.btnClose); this.panel2.Controls.Add(this.btnOK); - resources.ApplyResources(this.panel2, "panel2"); this.panel2.Name = "panel2"; // // btnOK @@ -394,42 +408,42 @@ // // menuServer // + resources.ApplyResources(this.menuServer, "menuServer"); this.menuServer.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.MenuItem1}); - resources.ApplyResources(this.menuServer, "menuServer"); this.menuServer.Name = "menuServer"; // // MenuItem1 // + resources.ApplyResources(this.MenuItem1, "MenuItem1"); this.MenuItem1.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.MenuItemImportClient, this.MenuItemImportServer, this.toolStripSeparator1, this.MenuItemImportClipboard}); this.MenuItem1.Name = "MenuItem1"; - resources.ApplyResources(this.MenuItem1, "MenuItem1"); // // MenuItemImportClient // - this.MenuItemImportClient.Name = "MenuItemImportClient"; resources.ApplyResources(this.MenuItemImportClient, "MenuItemImportClient"); + this.MenuItemImportClient.Name = "MenuItemImportClient"; this.MenuItemImportClient.Click += new System.EventHandler(this.MenuItemImportClient_Click); // // MenuItemImportServer // - this.MenuItemImportServer.Name = "MenuItemImportServer"; resources.ApplyResources(this.MenuItemImportServer, "MenuItemImportServer"); + this.MenuItemImportServer.Name = "MenuItemImportServer"; this.MenuItemImportServer.Click += new System.EventHandler(this.MenuItemImportServer_Click); // // toolStripSeparator1 // - this.toolStripSeparator1.Name = "toolStripSeparator1"; resources.ApplyResources(this.toolStripSeparator1, "toolStripSeparator1"); + this.toolStripSeparator1.Name = "toolStripSeparator1"; // // MenuItemImportClipboard // - this.MenuItemImportClipboard.Name = "MenuItemImportClipboard"; resources.ApplyResources(this.MenuItemImportClipboard, "MenuItemImportClipboard"); + this.MenuItemImportClipboard.Name = "MenuItemImportClipboard"; this.MenuItemImportClipboard.Click += new System.EventHandler(this.MenuItemImportClipboard_Click); // // AddServer5Form @@ -509,5 +523,7 @@ private System.Windows.Forms.Label label23; private System.Windows.Forms.ComboBox cmbFlow; private System.Windows.Forms.Label label4; + private System.Windows.Forms.TextBox txtSNI; + private System.Windows.Forms.Label label22; } } \ No newline at end of file diff --git a/v2rayN/v2rayN/Forms/AddServer5Form.cs b/v2rayN/v2rayN/Forms/AddServer5Form.cs index 32c7e48c..1a389b3d 100644 --- a/v2rayN/v2rayN/Forms/AddServer5Form.cs +++ b/v2rayN/v2rayN/Forms/AddServer5Form.cs @@ -6,7 +6,7 @@ using v2rayN.Mode; namespace v2rayN.Forms { public partial class AddServer5Form : BaseServerForm - { + { public AddServer5Form() { @@ -45,6 +45,7 @@ namespace v2rayN.Forms txtPath.Text = vmessItem.path; cmbStreamSecurity.Text = vmessItem.streamSecurity; cmbAllowInsecure.Text = vmessItem.allowInsecure; + txtSNI.Text = vmessItem.sni; } @@ -66,6 +67,7 @@ namespace v2rayN.Forms cmbStreamSecurity.Text = ""; cmbAllowInsecure.Text = ""; txtPath.Text = ""; + txtSNI.Text = ""; } @@ -122,6 +124,7 @@ namespace v2rayN.Forms string path = txtPath.Text; string streamSecurity = cmbStreamSecurity.Text; string allowInsecure = cmbAllowInsecure.Text; + string sni = txtSNI.Text; if (Utils.IsNullOrEmpty(address)) { @@ -153,6 +156,7 @@ namespace v2rayN.Forms vmessItem.path = path.Replace(" ", ""); vmessItem.streamSecurity = streamSecurity; vmessItem.allowInsecure = allowInsecure; + vmessItem.sni = sni; if (ConfigHandler.AddVlessServer(ref config, vmessItem, EditIndex) == 0) { diff --git a/v2rayN/v2rayN/Forms/AddServer5Form.resx b/v2rayN/v2rayN/Forms/AddServer5Form.resx index e4c57a41..73b868d3 100644 --- a/v2rayN/v2rayN/Forms/AddServer5Form.resx +++ b/v2rayN/v2rayN/Forms/AddServer5Form.resx @@ -117,1270 +117,1324 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 6 + - - 396, 17 - - - 75, 23 - - - - 4 - - - &Cancel - - - btnClose - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - panel2 - - - 0 - - - - - - xtls-rprx-origin - - - xtls-rprx-origin-udp443 - - - xtls-rprx-direct - - - xtls-rprx-direct-udp443 - - - 127, 123 - - - 211, 20 - - - 24 - - - cmbFlow - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 0 - - - True - - - - NoControl - - - 12, 127 - - - 29, 12 - - - 25 - - - Flow - - - label4 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 + + 113, 12 1 - - 411, 91 - - - 75, 23 - - - 23 - - - &Generate - - - btnGUID - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 2 - - - True - 353, 189 - - 113, 12 - - - 22 - - - * Fill in manually - - - label13 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 3 - - - True - - - NoControl - - - 529, 207 - - - 119, 12 - - - 35 - - - 3)QUIC key/Kcp seed - - - label24 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 0 - - - True - - - NoControl - - - 465, 140 - - - 89, 12 - - - 34 - - - 4)QUIC securty - - - label23 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 1 - - - True - - - NoControl - - - 12, 11 - - - 83, 12 - - - 31 - - - allowInsecure - - - label21 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - panTlsMore - - - 0 - - - - - - true - - - false - - - 107, 7 - - - 91, 20 - - - 30 - - - cmbAllowInsecure - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - panTlsMore - - - 1 - - - 284, 232 - - - 338, 35 - - - 33 - - - panTlsMore - - - System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 2 - - - True - - - 353, 32 - - - 113, 12 - - - 15 - - - *Default value tcp - - - label9 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 3 - - - True - - - 464, 124 - - - 203, 12 - - - 29 - - - 3)h2 host Separated by commas (,) - - - label20 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 4 - - - 127, 169 - - - True - - - 396, 54 - - - 28 - - - txtPath - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 5 - - - tcp - - - kcp - - - ws - - - h2 - - - quic - - - 192, 28 - - - 143, 20 - - - 12 - - - cmbNetwork - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 6 - - - True - - - 9, 32 - - - 167, 12 - - - 13 - - - Transport protocol(network) - - - label7 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 7 - - - True - - - 9, 169 - - - 29, 12 - - - 27 - - - Path - - - label19 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 8 - - - True - - - 529, 189 - - - 59, 12 - - - 26 - - - 2)h2 path - - - label18 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 9 - - - True - - - 464, 109 - - - 59, 12 - - - 25 - - - 2)ws host - - - label17 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 10 - - - True - - - 529, 172 - - - 59, 12 - - - 24 - - - 1)ws path - - - label16 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 11 - - - True - - - 464, 94 - - - 215, 12 - - - 23 - - - 1)http host Separated by commas (,) - - - label14 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 12 - - - True - - - 9, 243 - - - 23, 12 - - - 22 - - - TLS - - - label15 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 13 - - - - - - tls - xtls - - 127, 239 + + 8 - - 143, 20 + + Path - - 21 + + 83, 12 - - cmbStreamSecurity + + Transport protocol(network) - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 9 - - groupBox2 + + panTlsMore - - 14 + + groupBox1 - - True + + 1 - - 282, 68 + + 6, 12 - - 299, 12 - - - 20 - - - *tcp or kcp or QUIC camouflage type, default none - - - label12 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 15 - - - 158, 100 - - - True - - - 300, 53 - - - 16 - - - txtRequestHost - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 16 - - - True - - - 9, 68 - - - 95, 12 - - - 19 - - - Camouflage type - - - label11 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 17 - - - True - - - 9, 100 - - - 143, 12 - - - 17 - - - Camouflage domain(host) - - - label10 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 18 - - - none - - - http - - - srtp - - - utp - - - wechat-video - - - dtls - - - wireguard - - - 127, 64 - - - 143, 20 - - - 18 - - - cmbHeaderType + + label15 System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - groupBox2 + + cmbStreamSecurity + + + 3)h2 host Separated by commas (,) + + + + Top + + + 6 + + + + 3 + + + 17 + + + false + + + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 19 - - Bottom - - - 3, 215 - - - 723, 281 - - - 21 - - - Transport - - - groupBox2 - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 4 - - + True - - NoControl - - - 353, 157 - - - 119, 12 - - - 14 - - - *Recommended (none) - - - label8 + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + + 297, 7 + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 127, 123 + + + cmbAllowInsecure + + + 21 + + + 411, 91 + + + 18 + + groupBox1 - - 5 + + 59, 12 + + + 1)ws path + + + 19 + + + True + + + 26 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + txtId + + + label5 + + + True + + + 729, 499 + + + + + + 12, 95 + + + groupBox2 + + + tls + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolStripSeparator1 + + + 299, 12 + + + 4 none - - 127, 154 - - - 211, 20 - - - 6 - - - cmbSecurity - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + groupBox1 - - 6 + + 127, 91 + + + 16 + + + utp + + + Bottom + + + &Cancel + + + txtSNI + + + label10 + + + 723, 281 + + + 5 + + + label21 + + + 359, 21 + + + System.Windows.Forms.MenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Edit or add a [VLESS] server + + + 143, 12 + + + groupBox2 + + + tcp + + + panTlsMore + + + NoControl + + + 21 + + + label11 + + + 158, 100 + + + SNI + + + 0 + + + 2 + + + 29, 12 + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 234, 6 + + + 237, 22 + + + 3)QUIC key/Kcp seed + + + 127, 59 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + txtPort + + + 4 + + + groupBox2 + + + 100, 7 + + + label16 127, 185 - - 211, 21 + + True - - 11 + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + NoControl + + + NoControl + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 29, 12 + + + True + + + ws + + + 13 + + + 15 + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 65, 12 + + + 9, 169 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 15 + + + xtls-rprx-origin-udp443 + + + label17 + + + panel1 + + + groupBox2 + + + 5 + + + 215, 12 + + + 0, 0 + + + 396, 17 + + + Import configuration file + + + 500, 35 + + + 12, 63 + + + MenuItemImportClient + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + &Generate + + + 127, 154 txtRemarks - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 29, 12 - + + v2rayN.Forms.BaseServerForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + + + groupBox2 + + + panel2 + + + panTlsMore + + + True + + + cmbNetwork + + + 200, 232 + + + 95, 12 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 353, 32 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + label22 + + + 22 + + + 211, 20 + + groupBox1 - - 7 - - + True 12, 189 + + groupBox2 + + + 127, 27 + + + label12 + + + Flow + + + True + + + 282, 68 + + + 12 + + + *tcp or kcp or QUIC camouflage type, default none + + + 25 + + + label23 + + + groupBox1 + + + 9, 68 + + + 119, 12 + + + $this + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 1 + + + 33 + + + 6 + + + 0 + + + 47, 12 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + label8 + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 9, 32 + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 2 + + + 35 + + + 13 + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 11 + + + True + + + 464, 94 + + + label9 + + + cmbFlow + + + label20 + + + wechat-video + + + label18 + + + MenuItem1 + + + label1 + + + 13 + + + label7 + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 211, 20 + + + groupBox2 + + + True + + + groupBox2 + + + True + + + btnClose + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + label19 + + + 143, 21 + 95, 12 - - 10 - - - Alias (remarks) - - - label6 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - groupBox1 - - 8 + + 0, 35 - + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + txtPath + + + 729, 60 + + + allowInsecure + + + True + + + True + + + 464, 124 + + + quic + + + panTlsMore + + + groupBox2 + + + h2 + + + kcp + + + 127, 64 + + + 7 + + + NoControl + + + 211, 21 + + True 12, 158 - - 65, 12 - - - 8 - - - Encryption - - - label5 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 9 - - - 127, 91 - - - 278, 21 - - - 5 - - - txtId - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 18 groupBox1 - - 10 - - - True - - - 12, 95 - - - 53, 12 - - - 4 - - - UUID(id) - - - label3 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 11 - - - 127, 59 - - - 143, 21 - - - 3 - - - txtPort - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 12 - - - True - - - 12, 63 - - - 29, 12 - - - 2 - - - Port + + 143, 20 label2 - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 729, 594 - + + groupBox2 + + + 60, 20 + + + groupBox2 + + + 119, 12 + + + 278, 21 + + + True + + + 200, 21 + + + 4 + + + 80, 20 + + + 53, 12 + + + 27 + + + groupBox2 + + + 17 + + + Port + + + groupBox2 + + + Fill + + + 12 + + + groupBox2 + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + groupBox1 - - 13 + + 28 - - 127, 27 + + 2 - - 359, 21 + + 75, 23 - - 1 + + xtls-rprx-direct - - txtAddress + + True - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 11 groupBox1 - - 14 + + 8 - + + *Recommended (none) + + + groupBox1 + + + NoControl + + + 34 + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 1 + + + 6 + + + 10 + + + 35 + + + true + + True + + 3, 215 + + + 529, 189 + + + 10 + + + btnOK + + + 75, 23 + + + Import server configuration + + + 465, 140 + + + True + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 22 + + + 396, 54 + + + 300, 53 + 12, 31 - - 47, 12 + + 14 + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + dtls + + + label4 + + + MenuItemImportServer + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + panel2 + + + 14 + + + 5 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 0, 534 + + + groupBox1 + + + UUID(id) + + + AddServer5Form + + + wireguard + + + 24 + + + groupBox1 + + + 729, 10 + + + Server + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 303, 17 + + + 2)ws host + + + txtAddress + + + True + + + 2)h2 path + + + True + + + 0 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 167, 12 + + + 8 + + + Transport + + + groupBox2 + + + * Fill in manually + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 12 + + + True + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 29 + + + 1 + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 3 + + + True + + + groupBox1 + + + 162, 21 + + + Bottom + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + txtRequestHost + + + btnGUID + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Alias (remarks) + + + 127, 169 + + + 4 + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + &OK + + + 7 + + + 3 + + + http + + + True + + + 34 + + + 9 + + + groupBox2 + + + Camouflage type + + + menuServer + + + 20 + + + TLS + + + $this + + + 1 + + + 5 + + + 89, 12 + + + srtp + + + MenuItemImportClipboard + + + label13 + + + True + + + $this + + + 3 + + + groupBox1 + + + 237, 22 + + + 143, 20 + + + panTlsMore + + + 8 + + + 24 + + + 15 0 + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 113, 12 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 192, 28 + + + 203, 12 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 23, 12 + + + 30 + + + 14 + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 23 + + + 23 + + + 25 + + + 2 + + + 9, 100 + + + label3 + + + 7 + + + groupBox1 + + + xtls-rprx-direct-udp443 + + + Import URL from clipboard + + + 464, 109 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Camouflage domain(host) + + + 0 + + + 529, 172 + + + *Default value tcp + + + 31 + + + 127, 239 + + + 9, 243 + + + 353, 157 + + + Encryption + + + none + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 0 + Address - - label1 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 15 - - - Fill - - - 0, 35 - - - 729, 499 - - + 3 - - Server - - + groupBox1 - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 0 - - - 303, 17 - - - 75, 23 - - - 5 - - - &OK - - - btnOK - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - panel2 - - - 1 - - - Bottom - - - 0, 534 - - - 729, 60 - - - 7 - - - panel2 - - - System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 1 - - - Top - - - 0, 25 - - - 729, 10 - - - 6 - - - panel1 - - - System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 2 - - - 17, 17 - - - 237, 22 - - - Import client configuration - - - 237, 22 - - - Import server configuration - - - 234, 6 - 237, 22 - - Import URL from clipboard + + 16 - - 162, 21 + + 3 - - Import configuration file + + - - 0, 0 + + groupBox2 - - 729, 25 + + xtls-rprx-origin - - 8 + + Import client configuration - - menuServer + + 12, 127 - - System.Windows.Forms.MenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 4)QUIC securty + + + 0, 25 + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + cmbSecurity + + + groupBox2 + + + 267, 11 + + + 75, 23 + + + 23, 12 + + + groupBox1 + + + 12, 11 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + NoControl + + + 1)http host Separated by commas (,) + + + + + + label24 + + + 59, 12 + + + panel2 + + + 11 + + + groupBox2 $this - - 3 + + True + + label6 + + + 59, 12 + + + 10 + + + 729, 25 + + + cmbHeaderType + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 529, 207 + + + 2 + + + label14 + + + zh-Hans + True 25 - - 6, 12 - - - 729, 594 - - - Edit or add a [VLESS] server - - - MenuItem1 - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - MenuItemImportClient - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - MenuItemImportServer - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - toolStripSeparator1 - - - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - MenuItemImportClipboard - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - AddServer5Form - - - v2rayN.Forms.BaseServerForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null - + + 17, 17 + \ No newline at end of file diff --git a/v2rayN/v2rayN/Forms/AddServer5Form.zh-Hans.resx b/v2rayN/v2rayN/Forms/AddServer5Form.zh-Hans.resx index 46ec6353..841c0bd2 100644 --- a/v2rayN/v2rayN/Forms/AddServer5Form.zh-Hans.resx +++ b/v2rayN/v2rayN/Forms/AddServer5Form.zh-Hans.resx @@ -120,9 +120,6 @@ 取消(&C) - - 服务器 - 220, 20 @@ -139,9 +136,6 @@ *手填,方便识别管理 - - 底层传输方式(transport) - 149, 12 @@ -161,7 +155,7 @@ 跳过证书验证(allowInsecure) - 223, 7 + 181, 7 353, 36 @@ -259,6 +253,9 @@ 127, 67 + + 底层传输方式(transport) + 353, 158 @@ -304,19 +301,12 @@ 地址(address) + + 服务器 + 确定(&O) - - - False - - - 92, 21 - - - 导入配置文件 - 171, 22 @@ -338,6 +328,16 @@ 从剪贴板导入URL + + + False + + + 92, 21 + + + 导入配置文件 + 编辑或添加[VLESS]服务器 diff --git a/v2rayN/v2rayN/Forms/AddServer6Form.Designer.cs b/v2rayN/v2rayN/Forms/AddServer6Form.Designer.cs index f14d46e4..fc67c5ec 100644 --- a/v2rayN/v2rayN/Forms/AddServer6Form.Designer.cs +++ b/v2rayN/v2rayN/Forms/AddServer6Form.Designer.cs @@ -31,8 +31,12 @@ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AddServer6Form)); this.btnClose = new System.Windows.Forms.Button(); this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.label21 = new System.Windows.Forms.Label(); + this.cmbAllowInsecure = new System.Windows.Forms.ComboBox(); + this.label15 = new System.Windows.Forms.Label(); + this.cmbStreamSecurity = new System.Windows.Forms.ComboBox(); this.label4 = new System.Windows.Forms.Label(); - this.txtRequestHost = new System.Windows.Forms.TextBox(); + this.txtSNI = new System.Windows.Forms.TextBox(); this.label13 = new System.Windows.Forms.Label(); this.txtRemarks = new System.Windows.Forms.TextBox(); this.label6 = new System.Windows.Forms.Label(); @@ -60,8 +64,12 @@ // groupBox1 // resources.ApplyResources(this.groupBox1, "groupBox1"); + this.groupBox1.Controls.Add(this.label21); + this.groupBox1.Controls.Add(this.cmbAllowInsecure); + this.groupBox1.Controls.Add(this.label15); + this.groupBox1.Controls.Add(this.cmbStreamSecurity); this.groupBox1.Controls.Add(this.label4); - this.groupBox1.Controls.Add(this.txtRequestHost); + this.groupBox1.Controls.Add(this.txtSNI); this.groupBox1.Controls.Add(this.label13); this.groupBox1.Controls.Add(this.txtRemarks); this.groupBox1.Controls.Add(this.label6); @@ -74,15 +82,46 @@ this.groupBox1.Name = "groupBox1"; this.groupBox1.TabStop = false; // + // label21 + // + resources.ApplyResources(this.label21, "label21"); + this.label21.Name = "label21"; + // + // cmbAllowInsecure + // + resources.ApplyResources(this.cmbAllowInsecure, "cmbAllowInsecure"); + this.cmbAllowInsecure.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cmbAllowInsecure.FormattingEnabled = true; + this.cmbAllowInsecure.Items.AddRange(new object[] { + resources.GetString("cmbAllowInsecure.Items"), + resources.GetString("cmbAllowInsecure.Items1"), + resources.GetString("cmbAllowInsecure.Items2")}); + this.cmbAllowInsecure.Name = "cmbAllowInsecure"; + // + // label15 + // + resources.ApplyResources(this.label15, "label15"); + this.label15.Name = "label15"; + // + // cmbStreamSecurity + // + resources.ApplyResources(this.cmbStreamSecurity, "cmbStreamSecurity"); + this.cmbStreamSecurity.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cmbStreamSecurity.FormattingEnabled = true; + this.cmbStreamSecurity.Items.AddRange(new object[] { + resources.GetString("cmbStreamSecurity.Items"), + resources.GetString("cmbStreamSecurity.Items1")}); + this.cmbStreamSecurity.Name = "cmbStreamSecurity"; + // // label4 // resources.ApplyResources(this.label4, "label4"); this.label4.Name = "label4"; // - // txtRequestHost + // txtSNI // - resources.ApplyResources(this.txtRequestHost, "txtRequestHost"); - this.txtRequestHost.Name = "txtRequestHost"; + resources.ApplyResources(this.txtSNI, "txtSNI"); + this.txtSNI.Name = "txtSNI"; // // label13 // @@ -184,6 +223,10 @@ private System.Windows.Forms.Panel panel2; private System.Windows.Forms.Label label13; private System.Windows.Forms.Label label4; - private System.Windows.Forms.TextBox txtRequestHost; + private System.Windows.Forms.TextBox txtSNI; + private System.Windows.Forms.Label label15; + private System.Windows.Forms.ComboBox cmbStreamSecurity; + private System.Windows.Forms.Label label21; + private System.Windows.Forms.ComboBox cmbAllowInsecure; } } \ No newline at end of file diff --git a/v2rayN/v2rayN/Forms/AddServer6Form.cs b/v2rayN/v2rayN/Forms/AddServer6Form.cs index 6911714f..e7d35165 100644 --- a/v2rayN/v2rayN/Forms/AddServer6Form.cs +++ b/v2rayN/v2rayN/Forms/AddServer6Form.cs @@ -35,8 +35,10 @@ namespace v2rayN.Forms txtAddress.Text = vmessItem.address; txtPort.Text = vmessItem.port.ToString(); txtId.Text = vmessItem.id; - txtRequestHost.Text = vmessItem.requestHost; + txtSNI.Text = vmessItem.sni; txtRemarks.Text = vmessItem.remarks; + cmbStreamSecurity.Text = vmessItem.streamSecurity; + cmbAllowInsecure.Text = vmessItem.allowInsecure; } @@ -48,8 +50,10 @@ namespace v2rayN.Forms txtAddress.Text = ""; txtPort.Text = ""; txtId.Text = ""; - txtRequestHost.Text = ""; - txtRemarks.Text = ""; + txtSNI.Text = ""; + txtRemarks.Text = ""; + cmbStreamSecurity.Text = "tls"; + cmbAllowInsecure.Text = ""; } private void btnOK_Click(object sender, EventArgs e) @@ -57,8 +61,10 @@ namespace v2rayN.Forms string address = txtAddress.Text; string port = txtPort.Text; string id = txtId.Text; - string requestHost = txtRequestHost.Text; + string sni = txtSNI.Text; string remarks = txtRemarks.Text; + string streamSecurity = cmbStreamSecurity.Text; + string allowInsecure = cmbAllowInsecure.Text; if (Utils.IsNullOrEmpty(address)) { @@ -79,8 +85,10 @@ namespace v2rayN.Forms vmessItem.address = address; vmessItem.port = Utils.ToInt(port); vmessItem.id = id; - vmessItem.requestHost = requestHost.Replace(" ", ""); + vmessItem.sni = sni.Replace(" ", ""); vmessItem.remarks = remarks; + vmessItem.streamSecurity = streamSecurity; + vmessItem.allowInsecure = allowInsecure; if (ConfigHandler.AddTrojanServer(ref config, vmessItem, EditIndex) == 0) { diff --git a/v2rayN/v2rayN/Forms/AddServer6Form.resx b/v2rayN/v2rayN/Forms/AddServer6Form.resx index 6d3c8975..7add00f3 100644 --- a/v2rayN/v2rayN/Forms/AddServer6Form.resx +++ b/v2rayN/v2rayN/Forms/AddServer6Form.resx @@ -117,107 +117,332 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - groupBox1 + + + 113, 12 - - Server address + + 312, 185 + + + 53, 12 - - 3 + + True - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + label6 + + + True + + + groupBox1 + + + panel2 + + + 24 + + + 11 + + + allowInsecure Bottom - - NoControl - - - txtPort - - - True - Alias (remarks) - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 3 - - btnOK + + Password - - txtRemarks + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 194, 21 + + NoControl - - System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - AddServer6Form - - - label1 - - - 359, 21 - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + groupBox1 - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - panel2 - - - 12, 155 + + cmbStreamSecurity Fill - - 53, 12 + + groupBox1 - - 127, 123 + + NoControl - - 194, 21 + + 89, 12 + + + 127, 27 + + + 6 + + + Edit or add a [Trojan] server + + + 60, 20 + + + 5 + + + groupBox1 + + + 303, 17 + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 4 + + + 0 + + + 359, 21 + + + 1 + + + True + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 12 + + + groupBox1 + + + label1 + + + 25 + + + 0, 0 + + + groupBox1 + + + True + + + 22 + + + 75, 23 + + + True + + + 13 + + + 127, 91 + + + panel2 + + + 3 + + + 5 + + + 2 + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 groupBox1 - - 6, 12 + + cmbAllowInsecure - - 396, 17 + + txtId - - True + + 12, 156 - - label3 + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 127, 154 + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - True + + 12, 31 + + + 1 + + + 1 + + + AddServer6Form + + + 2 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 127, 59 + + + 80, 20 + + + 4 + + + 0 + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 32 + + + 547, 60 + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 71, 12 + + + $this + + + groupBox1 + + + + + + 23 + + + txtPort + + + panel2 + + + 11 + + + 547, 10 + + + 0, 10 + + + 9 + + + 26 + + + label4 + + + &OK + + + 5 + + + groupBox1 + + + btnClose + + + txtSNI + + + 0 + + + 23, 12 + + + 12, 93 + + + 2 + + + 194, 21 + + + 194, 21 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + true + + + 1 + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 6 @@ -225,313 +450,208 @@ 7 - - groupBox1 - - - 113, 12 - - - 12, 93 - - - 10 - - - Server - - - 3 - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 0 - - - txtRequestHost - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 547, 60 - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 359, 21 - - - Edit or add a [Trojan] server - - - 359, 21 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - * - - - groupBox1 - - - * Fill in manually - - - 11 - - - 10 - - - 71, 12 - - - 24 - - - label4 - - - txtId - - - 303, 17 - - - $this - - - 75, 23 - - - btnClose - - - Host(SNI) - - - label6 - - - 5 - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Password - - - 75, 23 - - - 1 - - - txtAddress - - - groupBox1 - - - Top - - - 0, 10 - - - 4 - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 547, 221 - - - 2 - - - groupBox1 - - - 4 - - - 3 - - - 127, 27 - - - 5 - - - groupBox1 - - - System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 23 - - - 127, 59 - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - True - - - True - - - 89, 12 - - - groupBox1 - - - 0 - - - 547, 10 - - - 8 - - - &Cancel - - - 12, 31 - - - &OK - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 0 - - - Server port - - - 4 - - - 337, 158 - - - True - - - 12, 62 - - - 127, 91 - - - 12, 126 - - - 7 - - - $this - - - 59, 12 - - - 1 - - - groupBox1 - - - 0, 0 - - - 1 - label13 - - 5 + + 359, 21 - - 95, 12 + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - label2 - - - 2 - - - panel2 - - - 0, 231 - - - 22 - - - 9 - - - 547, 291 - - - 0 + + groupBox1 v2rayN.Forms.BaseServerForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null - - groupBox1 + + label3 - - $this + + Server port - - 6 + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + + Top + + + 396, 17 + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 1 + + 0, 231 - - panel2 + + tls - - panel1 + + txtRemarks + + + 33 + + + NoControl + + + 12, 189 + + + &Cancel + + + True + + + xtls + + + 6, 12 + + + label21 + + + Server address + + + false + + + TLS + + + 95, 12 + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 127, 185 System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 2 + + * Fill in manually + + + 14 + + + label2 + + + groupBox1 + + + panel1 + + + 12, 62 + + + 547, 291 + + + btnOK + + + 0 + + + $this + + + 547, 221 + + + 8 + + + 75, 23 + + + 10 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 83, 12 + + + 337, 125 + + + True + + + 4 + + + 7 + + + 127, 121 + + + * + + + txtAddress + + + 23, 12 + + + 224, 189 + + + groupBox1 + + + label15 + + + groupBox1 + + + Server + + + 127, 152 + + + 10 + + + 12, 125 + + + True + + + SNI + + + 359, 21 + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 3 True + + zh-Hans + \ No newline at end of file diff --git a/v2rayN/v2rayN/Forms/AddServer6Form.zh-Hans.resx b/v2rayN/v2rayN/Forms/AddServer6Form.zh-Hans.resx index 375c223d..dd715fc9 100644 --- a/v2rayN/v2rayN/Forms/AddServer6Form.zh-Hans.resx +++ b/v2rayN/v2rayN/Forms/AddServer6Form.zh-Hans.resx @@ -120,16 +120,29 @@ 取消(&C) - - 服务器 + + + 167, 12 - - 域名(SNI) + + 跳过证书验证(allowInsecure) + + + 406, 185 + + + 107, 12 + + + 底层传输安全(tls) + + + + False *手填,方便识别管理 - 83, 12 @@ -154,6 +167,9 @@ 服务器地址 + + 服务器 + 确定(&O) diff --git a/v2rayN/v2rayN/Forms/AddServerForm.Designer.cs b/v2rayN/v2rayN/Forms/AddServerForm.Designer.cs index a96b32ab..7db28ff7 100644 --- a/v2rayN/v2rayN/Forms/AddServerForm.Designer.cs +++ b/v2rayN/v2rayN/Forms/AddServerForm.Designer.cs @@ -37,6 +37,8 @@ this.label24 = new System.Windows.Forms.Label(); this.label23 = new System.Windows.Forms.Label(); this.panTlsMore = new System.Windows.Forms.Panel(); + this.txtSNI = new System.Windows.Forms.TextBox(); + this.label22 = new System.Windows.Forms.Label(); this.label21 = new System.Windows.Forms.Label(); this.cmbAllowInsecure = new System.Windows.Forms.ComboBox(); this.label9 = new System.Windows.Forms.Label(); @@ -87,14 +89,15 @@ // // btnClose // - this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel; resources.ApplyResources(this.btnClose, "btnClose"); + this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel; this.btnClose.Name = "btnClose"; this.btnClose.UseVisualStyleBackColor = true; this.btnClose.Click += new System.EventHandler(this.btnClose_Click); // // groupBox1 // + resources.ApplyResources(this.groupBox1, "groupBox1"); this.groupBox1.Controls.Add(this.btnGUID); this.groupBox1.Controls.Add(this.label13); this.groupBox1.Controls.Add(this.groupBox2); @@ -111,7 +114,6 @@ this.groupBox1.Controls.Add(this.label2); this.groupBox1.Controls.Add(this.txtAddress); this.groupBox1.Controls.Add(this.label1); - resources.ApplyResources(this.groupBox1, "groupBox1"); this.groupBox1.Name = "groupBox1"; this.groupBox1.TabStop = false; // @@ -129,6 +131,7 @@ // // groupBox2 // + resources.ApplyResources(this.groupBox2, "groupBox2"); this.groupBox2.Controls.Add(this.label24); this.groupBox2.Controls.Add(this.label23); this.groupBox2.Controls.Add(this.panTlsMore); @@ -149,7 +152,6 @@ this.groupBox2.Controls.Add(this.label11); this.groupBox2.Controls.Add(this.label10); this.groupBox2.Controls.Add(this.cmbHeaderType); - resources.ApplyResources(this.groupBox2, "groupBox2"); this.groupBox2.Name = "groupBox2"; this.groupBox2.TabStop = false; // @@ -165,11 +167,23 @@ // // panTlsMore // + resources.ApplyResources(this.panTlsMore, "panTlsMore"); + this.panTlsMore.Controls.Add(this.txtSNI); + this.panTlsMore.Controls.Add(this.label22); this.panTlsMore.Controls.Add(this.label21); this.panTlsMore.Controls.Add(this.cmbAllowInsecure); - resources.ApplyResources(this.panTlsMore, "panTlsMore"); this.panTlsMore.Name = "panTlsMore"; // + // txtSNI + // + resources.ApplyResources(this.txtSNI, "txtSNI"); + this.txtSNI.Name = "txtSNI"; + // + // label22 + // + resources.ApplyResources(this.label22, "label22"); + this.label22.Name = "label22"; + // // label21 // resources.ApplyResources(this.label21, "label21"); @@ -177,13 +191,13 @@ // // cmbAllowInsecure // + resources.ApplyResources(this.cmbAllowInsecure, "cmbAllowInsecure"); this.cmbAllowInsecure.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.cmbAllowInsecure.FormattingEnabled = true; this.cmbAllowInsecure.Items.AddRange(new object[] { resources.GetString("cmbAllowInsecure.Items"), resources.GetString("cmbAllowInsecure.Items1"), resources.GetString("cmbAllowInsecure.Items2")}); - resources.ApplyResources(this.cmbAllowInsecure, "cmbAllowInsecure"); this.cmbAllowInsecure.Name = "cmbAllowInsecure"; // // label9 @@ -203,6 +217,7 @@ // // cmbNetwork // + resources.ApplyResources(this.cmbNetwork, "cmbNetwork"); this.cmbNetwork.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.cmbNetwork.FormattingEnabled = true; this.cmbNetwork.Items.AddRange(new object[] { @@ -211,7 +226,6 @@ resources.GetString("cmbNetwork.Items2"), resources.GetString("cmbNetwork.Items3"), resources.GetString("cmbNetwork.Items4")}); - resources.ApplyResources(this.cmbNetwork, "cmbNetwork"); this.cmbNetwork.Name = "cmbNetwork"; this.cmbNetwork.SelectedIndexChanged += new System.EventHandler(this.cmbNetwork_SelectedIndexChanged); // @@ -252,12 +266,12 @@ // // cmbStreamSecurity // + resources.ApplyResources(this.cmbStreamSecurity, "cmbStreamSecurity"); this.cmbStreamSecurity.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.cmbStreamSecurity.FormattingEnabled = true; this.cmbStreamSecurity.Items.AddRange(new object[] { resources.GetString("cmbStreamSecurity.Items"), resources.GetString("cmbStreamSecurity.Items1")}); - resources.ApplyResources(this.cmbStreamSecurity, "cmbStreamSecurity"); this.cmbStreamSecurity.Name = "cmbStreamSecurity"; this.cmbStreamSecurity.SelectedIndexChanged += new System.EventHandler(this.cmbStreamSecurity_SelectedIndexChanged); // @@ -283,6 +297,7 @@ // // cmbHeaderType // + resources.ApplyResources(this.cmbHeaderType, "cmbHeaderType"); this.cmbHeaderType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.cmbHeaderType.FormattingEnabled = true; this.cmbHeaderType.Items.AddRange(new object[] { @@ -293,7 +308,6 @@ resources.GetString("cmbHeaderType.Items4"), resources.GetString("cmbHeaderType.Items5"), resources.GetString("cmbHeaderType.Items6")}); - resources.ApplyResources(this.cmbHeaderType, "cmbHeaderType"); this.cmbHeaderType.Name = "cmbHeaderType"; // // label8 @@ -303,6 +317,7 @@ // // cmbSecurity // + resources.ApplyResources(this.cmbSecurity, "cmbSecurity"); this.cmbSecurity.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.cmbSecurity.FormattingEnabled = true; this.cmbSecurity.Items.AddRange(new object[] { @@ -310,7 +325,6 @@ resources.GetString("cmbSecurity.Items1"), resources.GetString("cmbSecurity.Items2"), resources.GetString("cmbSecurity.Items3")}); - resources.ApplyResources(this.cmbSecurity, "cmbSecurity"); this.cmbSecurity.Name = "cmbSecurity"; // // txtRemarks @@ -370,9 +384,9 @@ // // panel2 // + resources.ApplyResources(this.panel2, "panel2"); this.panel2.Controls.Add(this.btnClose); this.panel2.Controls.Add(this.btnOK); - resources.ApplyResources(this.panel2, "panel2"); this.panel2.Name = "panel2"; // // btnOK @@ -389,42 +403,42 @@ // // menuServer // + resources.ApplyResources(this.menuServer, "menuServer"); this.menuServer.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.MenuItem1}); - resources.ApplyResources(this.menuServer, "menuServer"); this.menuServer.Name = "menuServer"; // // MenuItem1 // + resources.ApplyResources(this.MenuItem1, "MenuItem1"); this.MenuItem1.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.MenuItemImportClient, this.MenuItemImportServer, this.toolStripSeparator1, this.MenuItemImportClipboard}); this.MenuItem1.Name = "MenuItem1"; - resources.ApplyResources(this.MenuItem1, "MenuItem1"); // // MenuItemImportClient // - this.MenuItemImportClient.Name = "MenuItemImportClient"; resources.ApplyResources(this.MenuItemImportClient, "MenuItemImportClient"); + this.MenuItemImportClient.Name = "MenuItemImportClient"; this.MenuItemImportClient.Click += new System.EventHandler(this.MenuItemImportClient_Click); // // MenuItemImportServer // - this.MenuItemImportServer.Name = "MenuItemImportServer"; resources.ApplyResources(this.MenuItemImportServer, "MenuItemImportServer"); + this.MenuItemImportServer.Name = "MenuItemImportServer"; this.MenuItemImportServer.Click += new System.EventHandler(this.MenuItemImportServer_Click); // // toolStripSeparator1 // - this.toolStripSeparator1.Name = "toolStripSeparator1"; resources.ApplyResources(this.toolStripSeparator1, "toolStripSeparator1"); + this.toolStripSeparator1.Name = "toolStripSeparator1"; // // MenuItemImportClipboard // - this.MenuItemImportClipboard.Name = "MenuItemImportClipboard"; resources.ApplyResources(this.MenuItemImportClipboard, "MenuItemImportClipboard"); + this.MenuItemImportClipboard.Name = "MenuItemImportClipboard"; this.MenuItemImportClipboard.Click += new System.EventHandler(this.MenuItemImportClipboard_Click); // // AddServerForm @@ -504,5 +518,7 @@ private System.Windows.Forms.Panel panTlsMore; private System.Windows.Forms.Label label24; private System.Windows.Forms.Label label23; + private System.Windows.Forms.Label label22; + private System.Windows.Forms.TextBox txtSNI; } } \ No newline at end of file diff --git a/v2rayN/v2rayN/Forms/AddServerForm.cs b/v2rayN/v2rayN/Forms/AddServerForm.cs index ab54fd9b..99eb4916 100644 --- a/v2rayN/v2rayN/Forms/AddServerForm.cs +++ b/v2rayN/v2rayN/Forms/AddServerForm.cs @@ -45,6 +45,7 @@ namespace v2rayN.Forms txtPath.Text = vmessItem.path; cmbStreamSecurity.Text = vmessItem.streamSecurity; cmbAllowInsecure.Text = vmessItem.allowInsecure; + txtSNI.Text = vmessItem.sni; } @@ -66,6 +67,7 @@ namespace v2rayN.Forms cmbStreamSecurity.Text = ""; cmbAllowInsecure.Text = ""; txtPath.Text = ""; + txtSNI.Text = ""; } @@ -122,6 +124,7 @@ namespace v2rayN.Forms string path = txtPath.Text; string streamSecurity = cmbStreamSecurity.Text; string allowInsecure = cmbAllowInsecure.Text; + string sni = txtSNI.Text; if (Utils.IsNullOrEmpty(address)) { @@ -157,6 +160,7 @@ namespace v2rayN.Forms vmessItem.path = path.Replace(" ", ""); vmessItem.streamSecurity = streamSecurity; vmessItem.allowInsecure = allowInsecure; + vmessItem.sni = sni; if (ConfigHandler.AddServer(ref config, vmessItem, EditIndex) == 0) { diff --git a/v2rayN/v2rayN/Forms/AddServerForm.resx b/v2rayN/v2rayN/Forms/AddServerForm.resx index 156f1f49..adff72fe 100644 --- a/v2rayN/v2rayN/Forms/AddServerForm.resx +++ b/v2rayN/v2rayN/Forms/AddServerForm.resx @@ -117,1202 +117,1295 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 396, 17 - - - 75, 23 - - - + 4 - - &Cancel + + + 113, 12 - - btnClose - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - panel2 - - - 0 - - - 411, 83 - - - 75, 23 - - - 23 - - - &Generate - - - btnGUID - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 0 - - - True + + 9 285, 175 - - 113, 12 + + 127, 64 - - 22 - - - * Fill in manually - - - label13 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 1 - - - True - - - - NoControl - - - 529, 207 - - - 119, 12 - - - 35 - - - 3)QUIC key/Kcp seed - - - label24 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 0 - - - True - - - NoControl - - - 465, 146 - - - 89, 12 - - - 34 - - - 4)QUIC securty - - - label23 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 1 - - - True - - - 12, 11 - - - 83, 12 - - - 31 - - - allowInsecure - - - label21 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - panTlsMore - - - 0 - - - - - - true - - - false - - - 107, 7 - - - 91, 20 - - - 30 - - - cmbAllowInsecure - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - panTlsMore - - - 1 - - - 284, 234 - - - 338, 35 - - - 33 - - - panTlsMore - - - System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 2 - - - True - - - 350, 32 - - - 113, 12 - - - 15 - - - *Default value tcp - - - label9 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 3 - - - True - - - 464, 130 - - - 203, 12 - - - 29 - - - 3)h2 host Separated by commas (,) - - - label20 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 4 - - - 127, 169 - - - True - - - 396, 54 - - - 28 - - - txtPath - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 5 - - - tcp - - - kcp - - - ws - - - h2 - - - quic - - - 192, 28 - - - 143, 20 - - - 12 - - - cmbNetwork - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - + 6 - - True - - - 9, 32 - - - 167, 12 - - - 13 - - - Transport protocol(network) - - - label7 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 7 - - - True - - - 9, 169 - - - 29, 12 - - - 27 - Path - - label19 + + 83, 12 - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Transport protocol(network) - - groupBox2 + + 7 - - 8 + + groupBox1 - - True - - - 529, 189 - - - 59, 12 - - - 26 - - - 2)h2 path - - - label18 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 9 - - - True - - - 464, 115 - - - 59, 12 - - - 25 - - - 2)ws host - - - label17 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 10 - - - True - - - 529, 172 - - - 59, 12 - - - 24 - - - 1)ws path - - - label16 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 11 - - - True - - - 464, 100 - - - 215, 12 - - - 23 - - - 1)http host Separated by commas (,) - - - label14 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 12 - - - True - - - 9, 243 - - - 23, 12 - - - 22 - - - TLS + + 1 label15 - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 13 - - - - - - tls - - - 127, 239 - - - 143, 20 - - - 21 + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 cmbStreamSecurity - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 143, 20 - + + 200, 21 + + + + Top + + + 6 + + + + 3 + + + 17 + + + false + + + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 19 + + + True + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 300, 7 + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 21 + + + 411, 83 + + + groupBox1 + + + 75, 23 + + + 59, 12 + + + 1)ws path + + + 19 + + + True + + + 26 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + txtId + + + True + + + 729, 499 + + + + + + 12, 89 + + groupBox2 - - 14 + + tls - + + True + + + 299, 12 + + + aes-128-gcm + + + groupBox1 + + + 127, 85 + + + 16 + + + utp + + + 12, 175 + + + &Cancel + + + txtSNI + + + label10 + + + 723, 281 + + + 5 + + + label21 + + + 359, 21 + + + System.Windows.Forms.MenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Edit or add a [VMess] server + + + 143, 12 + + + groupBox2 + + + toolStripSeparator1 + + + panTlsMore + + + NoControl + + + 21 + + + label11 + + + 5 + + + SNI + + + 158, 100 + + + 2 + + + 29, 12 + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 237, 22 + + + 3)QUIC key/Kcp seed + + + 127, 56 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + txtPort + + + 2 + + + groupBox2 + + + Bottom + + + True + + + 127, 171 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + NoControl + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 29, 12 + + + ws + + + 13 + + + 9, 66 + + + 15 + + + Import server configuration + + + 6, 12 + + + 1 + + + 7 + + + 15 + + + label17 + + + panel1 + + + groupBox2 + + + 215, 12 + + + 0, 0 + + + 396, 17 + + + 500, 35 + + + 12, 60 + + + MenuItemImportClient + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + &Generate + + + Encryption method (security) + + + none + + + txtRemarks + + + 47, 12 + + + v2rayN.Forms.BaseServerForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + + + groupBox2 + + + true + + + panTlsMore + + + True + + + 127, 114 + + + 200, 234 + + + 95, 12 + + + 350, 32 + + + cmbNetwork + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + label22 + + + 22 + + + groupBox1 + + + True + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 24 + + + 127, 27 + + + label12 + + + label2 + + + AlterId + + True 282, 66 - - 299, 12 - - - 20 + + 12 *tcp or kcp or QUIC camouflage type, default none - - label12 + + 25 + + + label23 + + + groupBox1 + + + 60, 20 + + + $this + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 33 + + + 6 + + + 0 + + + 2 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + label8 + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + label13 + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + txtAlterId + + + 35 + + + 13 + + + 11 + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 11 + + + True + + + 464, 100 + + + label9 + + + label20 + + + 127, 169 + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + label18 + + + MenuItem1 + + + label1 + + + 13 System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + + 143, 20 + + groupBox2 - - 15 - - - 158, 100 - - + True - - 300, 53 + + btnClose - - 16 + + label7 - - txtRequestHost + + Address - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + label19 - - groupBox2 + + 143, 21 - - 16 - - - True - - - 9, 66 - - + 95, 12 - - 19 + + groupBox1 - - Camouflage type + + 0, 35 - - label11 + + panTlsMore - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 729, 60 + + + allowInsecure + + + True + + + True + + + 464, 130 + + + quic + + + panTlsMore groupBox2 + + h2 + + + kcp + + + 7 + + + 143, 21 + + + 529, 172 + + + 18 + + + 12, 147 + + + 18 + + + groupBox1 + + + 34 + + + 3, 215 + + + 729, 594 + + + groupBox2 + + + 234, 6 + + + groupBox2 + + + 119, 12 + + + 278, 21 + + + True + + + True + + + 4 + + + 80, 20 + + + 53, 12 + + + 27 + + + groupBox2 + 17 - - True + + Port - - 9, 100 - - - 143, 12 - - - 17 - - - Camouflage domain(host) - - - label10 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + groupBox2 - - 18 + + Fill - - none + + chacha20-poly1305 - - http + + 12 - - srtp - - - utp - - - wechat-video - - - dtls - - - wireguard - - - 127, 64 - - - 143, 20 - - - 18 - - - cmbHeaderType - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 19 - - - Bottom - - - 3, 215 - - - 723, 281 - - - 21 - - - Transport - - + groupBox2 System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - groupBox1 - - - 2 - - - True - - - 353, 147 - - - 119, 12 - - - 14 - - - *Recommended (auto) - - - label8 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 3 - - - aes-128-gcm - - - chacha20-poly1305 - - - auto - - - none - - - 195, 143 - - - 143, 20 - - - 6 - - - cmbSecurity - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 4 - - - 127, 171 - - - 143, 21 - - - 11 - - - txtRemarks - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - groupBox1 - - 5 - - - True - - - 12, 175 - - - 95, 12 - - - 10 - - - Alias (remarks) - - - label6 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 6 - - - True - - - 12, 147 - - - 173, 12 - - - 8 - - - Encryption method (security) - - - label5 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 7 - - - 127, 114 - - - 143, 21 - - - 7 - - - txtAlterId - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 8 - - - True - - - 12, 118 - - - 47, 12 - - - 6 - - - AlterId - - - label4 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 9 - - - 127, 85 - - - 278, 21 - - - 5 - - - txtId - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 10 - - - True - - - 12, 89 - - - 53, 12 - - - 4 - - - UUID(id) - - - label3 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 11 - - - 127, 56 - - - 143, 21 - - - 3 - - - txtPort - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 12 - - - True - - - 12, 60 - - - 29, 12 - - - 2 - - - Port - - - label2 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 13 - - - 127, 27 - - - 359, 21 - - - 1 - - - txtAddress - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 14 - - - True - - - 12, 31 - - - 47, 12 - - - 0 - - - Address - - - label1 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 15 - - - Fill - - - 0, 35 - - - 729, 499 - - - 3 - - - Server - - - groupBox1 - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 0 - - - 303, 17 - - - 75, 23 - - - 5 - - - &OK - - - btnOK - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - panel2 - - - 1 - - - Bottom - - - 0, 534 - - - 729, 60 - - - 7 - - - panel2 - System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - $this - - - 1 - - - Top - - - 0, 25 - - - 729, 10 - - - 6 - - - panel1 - - - System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - + 2 - - 17, 17 - - - 237, 22 + + 75, 23 - - Import client configuration + + 4 - - 237, 22 + + True - - Import server configuration + + 11 - - 234, 6 - - - 237, 22 - - - Import URL from clipboard - - - 162, 21 - - - Import configuration file - - - 0, 0 - - - 729, 25 + + groupBox1 8 + + *Recommended (auto) + + + 195, 143 + + + groupBox1 + + + panel2 + + + 32 + + + 23 + + + 1 + + + 6 + + + 10 + + + groupBox2 + + + 14 + + + True + + + 173, 12 + + + Import configuration file + + + wechat-video + + + 9, 32 + + + btnOK + + + 729, 10 + + + 100, 7 + + + 465, 146 + + + True + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 22 + + + 396, 54 + + + 300, 53 + + + 12, 31 + + + 14 + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + dtls + + + 47, 12 + + + label4 + + + groupBox2 + + + panel2 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 0, 534 + + + groupBox1 + + + AddServerForm + + + wireguard + + + groupBox1 + + + Server + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 303, 17 + + + 2)ws host + + + txtAddress + + + True + + + 2)h2 path + + + True + + + 0 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 167, 12 + + + 8 + + + Transport + + + groupBox2 + + + * Fill in manually + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 12 + + + True + + + 12, 11 + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 29 + + + 1 + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 143, 21 + + + 1 + + + True + + + txtPath + + + 162, 21 + + + Bottom + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + txtRequestHost + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + btnGUID + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Alias (remarks) + + + groupBox2 + + + 3)h2 host Separated by commas (,) + + + 4 + + + 9, 169 + + + &OK + + + 7 + + + 3 + + + http + + + True + + + 529, 189 + + + 9 + + + groupBox2 + menuServer - - System.Windows.Forms.MenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 20 + + + TLS + + + 1 + + + 3 + + + UUID(id) + + + $this + + + MenuItemImportClipboard + + + True + + + $this + + + 3 + + + groupBox1 + + + cmbAllowInsecure + + + 237, 22 + + + 143, 20 + + + panTlsMore + + + 8 + + + 0 + + + 15 + + + 0 + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 113, 12 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 192, 28 + + + 203, 12 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 23, 12 + + + 30 + + + 14 + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 23 + + + 10 + + + auto + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 6 + + + 464, 115 + + + 2 + + + 9, 100 + + + label3 + + + srtp + + + 5 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 89, 12 + + + Import URL from clipboard + + + True + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Camouflage domain(host) + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + *Default value tcp + + + MenuItemImportServer + + + 5 + + + 31 + + + 127, 239 + + + 9, 243 + + + 353, 147 + + + none + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 8 + + + groupBox1 + + + label5 + + + cmbSecurity + + + 3 + + + label16 + + + groupBox1 + + + 237, 22 + + + 16 + + + 3 + + + 28 + + + + + + groupBox2 + + + Import client configuration + + + 12, 118 + + + 4)QUIC securty + + + 0, 25 + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 0 + + + tcp + + + groupBox2 + + + 270, 11 + + + 75, 23 + + + 23, 12 + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + Camouflage type + + + 0 + + + groupBox2 + + + NoControl + + + 1)http host Separated by commas (,) + + + 33 + + + label24 + + + 59, 12 + + + panel2 + + + 119, 12 + + + groupBox2 $this - - 3 + + True + + + label6 + + + 59, 12 + + + 10 + + + 729, 25 + + + cmbHeaderType + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 529, 207 + + + label14 True @@ -1320,49 +1413,7 @@ 114 - - 6, 12 - - - 729, 594 - - - Edit or add a [VMess] server - - - MenuItem1 - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - MenuItemImportClient - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - MenuItemImportServer - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - toolStripSeparator1 - - - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - MenuItemImportClipboard - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - AddServerForm - - - v2rayN.Forms.BaseServerForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null - + + 17, 17 + \ No newline at end of file diff --git a/v2rayN/v2rayN/Forms/AddServerForm.zh-Hans.resx b/v2rayN/v2rayN/Forms/AddServerForm.zh-Hans.resx index 489f5fd2..4bbfcc1f 100644 --- a/v2rayN/v2rayN/Forms/AddServerForm.zh-Hans.resx +++ b/v2rayN/v2rayN/Forms/AddServerForm.zh-Hans.resx @@ -120,18 +120,12 @@ 取消(&C) - - 服务器 - 生成(&G) *手填,方便识别管理 - - 底层传输方式(transport) - 149, 12 @@ -152,7 +146,7 @@ 跳过证书验证(allowInsecure) - 223, 7 + 180, 7 350, 36 @@ -250,6 +244,9 @@ 127, 67 + + 底层传输方式(transport) + 113, 12 @@ -298,15 +295,12 @@ 地址(address) + + 服务器 + 确定(&O) - - 92, 21 - - - 导入配置文件 - 171, 22 @@ -328,6 +322,12 @@ 从剪贴板导入URL + + 92, 21 + + + 导入配置文件 + 编辑或添加[VMess]服务器 diff --git a/v2rayN/v2rayN/Forms/MainForm.cs b/v2rayN/v2rayN/Forms/MainForm.cs index d472f40b..b13e60cc 100644 --- a/v2rayN/v2rayN/Forms/MainForm.cs +++ b/v2rayN/v2rayN/Forms/MainForm.cs @@ -1398,69 +1398,15 @@ namespace v2rayN.Forms /// private void UpdateSubscriptionProcess() { - AppendText(false, UIRes.I18N("MsgUpdateSubscriptionStart")); - - if (config.subItem == null || config.subItem.Count <= 0) + void _updateUI(bool refresh, string msg) { - AppendText(false, UIRes.I18N("MsgNoValidSubscription")); - return; - } - - for (int k = 1; k <= config.subItem.Count; k++) - { - string id = config.subItem[k - 1].id.TrimEx(); - string url = config.subItem[k - 1].url.TrimEx(); - string hashCode = $"{k}->"; - if (config.subItem[k - 1].enabled == false) + AppendText(false, msg); + if (refresh) { - continue; + RefreshServers(); } - if (Utils.IsNullOrEmpty(id) || Utils.IsNullOrEmpty(url)) - { - AppendText(false, $"{hashCode}{UIRes.I18N("MsgNoValidSubscription")}"); - continue; - } - - DownloadHandle downloadHandle3 = new DownloadHandle(); - downloadHandle3.UpdateCompleted += (sender2, args) => - { - if (args.Success) - { - AppendText(false, $"{hashCode}{UIRes.I18N("MsgGetSubscriptionSuccessfully")}"); - string result = Utils.Base64Decode(args.Msg); - if (Utils.IsNullOrEmpty(result)) - { - AppendText(false, $"{hashCode}{UIRes.I18N("MsgSubscriptionDecodingFailed")}"); - return; - } - - ConfigHandler.RemoveServerViaSubid(ref config, id); - AppendText(false, $"{hashCode}{UIRes.I18N("MsgClearSubscription")}"); - RefreshServers(); - int ret = MainFormHandler.Instance.AddBatchServers(config, result, id); - if (ret > 0) - { - RefreshServers(); - } - else - { - AppendText(false, $"{hashCode}{UIRes.I18N("MsgFailedImportSubscription")}"); - } - AppendText(false, $"{hashCode}{UIRes.I18N("MsgUpdateSubscriptionEnd")}"); - } - else - { - AppendText(false, args.Msg); - } - }; - downloadHandle3.Error += (sender2, args) => - { - AppendText(true, args.GetException().Message); - }; - - downloadHandle3.WebDownloadString(url); - AppendText(false, $"{hashCode}{UIRes.I18N("MsgStartGettingSubscriptions")}"); - } + }; + MainFormHandler.Instance.UpdateSubscriptionProcess(config, _updateUI); } private void tsbQRCodeSwitch_CheckedChanged(object sender, EventArgs e) diff --git a/v2rayN/v2rayN/Handler/ConfigHandler.cs b/v2rayN/v2rayN/Handler/ConfigHandler.cs index 0fccf551..2636752f 100644 --- a/v2rayN/v2rayN/Handler/ConfigHandler.cs +++ b/v2rayN/v2rayN/Handler/ConfigHandler.cs @@ -614,7 +614,10 @@ namespace v2rayN.Handler vmessItem.id = vmessItem.id.TrimEx(); vmessItem.streamSecurity = Global.StreamSecurity; - vmessItem.allowInsecure = "false"; + if (Utils.IsNullOrEmpty(vmessItem.allowInsecure)) + { + vmessItem.allowInsecure = config.defAllowInsecure.ToString(); + } if (index >= 0) { diff --git a/v2rayN/v2rayN/Handler/MainFormHandler.cs b/v2rayN/v2rayN/Handler/MainFormHandler.cs index 7f21abe6..6842a5b9 100644 --- a/v2rayN/v2rayN/Handler/MainFormHandler.cs +++ b/v2rayN/v2rayN/Handler/MainFormHandler.cs @@ -9,6 +9,7 @@ namespace v2rayN.Handler class MainFormHandler { private static MainFormHandler instance; + Action updateUI; //private DownloadHandle downloadHandle2; //private Config _config; @@ -164,6 +165,77 @@ namespace v2rayN.Handler return counter; } - + + + public void UpdateSubscriptionProcess(Config config, Action update) + { + updateUI = update; + + updateUI(false, UIRes.I18N("MsgUpdateSubscriptionStart")); + + if (config.subItem == null || config.subItem.Count <= 0) + { + updateUI(false, UIRes.I18N("MsgNoValidSubscription")); + return; + } + + for (int k = 1; k <= config.subItem.Count; k++) + { + string id = config.subItem[k - 1].id.TrimEx(); + string url = config.subItem[k - 1].url.TrimEx(); + string hashCode = $"{k}->"; + if (config.subItem[k - 1].enabled == false) + { + continue; + } + if (Utils.IsNullOrEmpty(id) || Utils.IsNullOrEmpty(url)) + { + updateUI(false, $"{hashCode}{UIRes.I18N("MsgNoValidSubscription")}"); + continue; + } + + DownloadHandle downloadHandle3 = new DownloadHandle(); + downloadHandle3.UpdateCompleted += (sender2, args) => + { + if (args.Success) + { + updateUI(false, $"{hashCode}{UIRes.I18N("MsgGetSubscriptionSuccessfully")}"); + string result = Utils.Base64Decode(args.Msg); + if (Utils.IsNullOrEmpty(result)) + { + updateUI(false, $"{hashCode}{UIRes.I18N("MsgSubscriptionDecodingFailed")}"); + return; + } + + ConfigHandler.RemoveServerViaSubid(ref config, id); + updateUI(false, $"{hashCode}{UIRes.I18N("MsgClearSubscription")}"); + // RefreshServers(); + int ret = MainFormHandler.Instance.AddBatchServers(config, result, id); + if (ret > 0) + { + // RefreshServers(); + } + else + { + updateUI(false, $"{hashCode}{UIRes.I18N("MsgFailedImportSubscription")}"); + } + updateUI(true, $"{hashCode}{UIRes.I18N("MsgUpdateSubscriptionEnd")}"); + } + else + { + updateUI(false, args.Msg); + } + }; + downloadHandle3.Error += (sender2, args) => + { + updateUI(false, args.GetException().Message); + }; + + downloadHandle3.WebDownloadString(url); + updateUI(false, $"{hashCode}{UIRes.I18N("MsgStartGettingSubscriptions")}"); + } + + } + } } diff --git a/v2rayN/v2rayN/Handler/ShareHandler.cs b/v2rayN/v2rayN/Handler/ShareHandler.cs index 157988c8..b523f145 100644 --- a/v2rayN/v2rayN/Handler/ShareHandler.cs +++ b/v2rayN/v2rayN/Handler/ShareHandler.cs @@ -44,7 +44,8 @@ namespace v2rayN.Handler type = item.headerType, host = item.requestHost, path = item.path, - tls = item.streamSecurity + tls = item.streamSecurity, + sni = item.sni }; url = Utils.ToJson(vmessQRCode); @@ -90,9 +91,9 @@ namespace v2rayN.Handler remark = "#" + Utils.UrlEncode(item.remarks); } string query = string.Empty; - if (!Utils.IsNullOrEmpty(item.requestHost)) + if (!Utils.IsNullOrEmpty(item.sni)) { - query = string.Format("?sni={0}", Utils.UrlEncode(item.requestHost)); + query = string.Format("?sni={0}", Utils.UrlEncode(item.sni)); } url = string.Format("{0}@{1}:{2}", item.id, @@ -128,6 +129,10 @@ namespace v2rayN.Handler { dicQuery.Add("security", "none"); } + if (!Utils.IsNullOrEmpty(item.sni)) + { + dicQuery.Add("sni", item.sni); + } if (!Utils.IsNullOrEmpty(item.network)) { dicQuery.Add("type", item.network); @@ -294,6 +299,7 @@ namespace v2rayN.Handler vmessItem.requestHost = Utils.ToString(vmessQRCode.host); vmessItem.path = Utils.ToString(vmessQRCode.path); vmessItem.streamSecurity = Utils.ToString(vmessQRCode.tls); + vmessItem.sni = Utils.ToString(vmessQRCode.sni); } ConfigHandler.UpgradeServerVersion(ref vmessItem); @@ -374,7 +380,7 @@ namespace v2rayN.Handler vmessItem.id = uri.UserInfo; var qurery = HttpUtility.ParseQueryString(uri.Query); - vmessItem.requestHost = qurery["sni"] ?? ""; + vmessItem.sni = qurery["sni"] ?? ""; var remarks = uri.Fragment.Replace("#", ""); if (Utils.IsNullOrEmpty(remarks)) @@ -640,6 +646,7 @@ namespace v2rayN.Handler item.flow = query["flow"] ?? ""; item.security = query["encryption"] ?? "none"; item.streamSecurity = query["security"] ?? ""; + item.sni = query["sni"] ?? ""; item.network = query["type"] ?? "tcp"; switch (item.network) { diff --git a/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs b/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs index b10e4974..e72a4c20 100644 --- a/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs +++ b/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs @@ -208,7 +208,7 @@ namespace v2rayN.Handler foreach (var item in lockedItem.rules) { routingUserRule(item, ref v2rayConfig); - } + } } } } @@ -553,6 +553,8 @@ namespace v2rayN.Handler //远程服务器底层传输配置 streamSettings.network = config.network(); string host = config.requestHost(); + string sni = config.sni(); + //if tls if (config.streamSecurity() == Global.StreamSecurity) { @@ -562,7 +564,11 @@ namespace v2rayN.Handler { allowInsecure = config.allowInsecure() }; - if (!string.IsNullOrWhiteSpace(host)) + if (!string.IsNullOrWhiteSpace(sni)) + { + tlsSettings.serverName = sni; + } + else if (!string.IsNullOrWhiteSpace(host)) { tlsSettings.serverName = Utils.String2List(host)[0]; } @@ -578,7 +584,11 @@ namespace v2rayN.Handler { allowInsecure = config.allowInsecure() }; - if (!string.IsNullOrWhiteSpace(host)) + if (!string.IsNullOrWhiteSpace(sni)) + { + xtlsSettings.serverName = sni; + } + else if (!string.IsNullOrWhiteSpace(host)) { xtlsSettings.serverName = Utils.String2List(host)[0]; } @@ -682,7 +692,14 @@ namespace v2rayN.Handler streamSettings.quicSettings = quicsettings; if (config.streamSecurity() == Global.StreamSecurity) { - streamSettings.tlsSettings.serverName = config.address(); + if (!string.IsNullOrWhiteSpace(sni)) + { + streamSettings.tlsSettings.serverName = sni; + } + else + { + streamSettings.tlsSettings.serverName = config.address(); + } } break; default: diff --git a/v2rayN/v2rayN/Mode/Config.cs b/v2rayN/v2rayN/Mode/Config.cs index a7733912..90189fe9 100644 --- a/v2rayN/v2rayN/Mode/Config.cs +++ b/v2rayN/v2rayN/Mode/Config.cs @@ -346,6 +346,14 @@ namespace v2rayN.Mode } return vmess[index].flow.TrimEx(); } + public string sni() + { + if (index < 0) + { + return string.Empty; + } + return vmess[index].sni.TrimEx(); + } #endregion } @@ -572,6 +580,13 @@ namespace v2rayN.Mode { get; set; } + /// + /// tls sni + /// + public string sni + { + get; set; + } } [Serializable] diff --git a/v2rayN/v2rayN/Mode/VmessQRCode.cs b/v2rayN/v2rayN/Mode/VmessQRCode.cs index 0a9cc8ab..32fdbbd1 100644 --- a/v2rayN/v2rayN/Mode/VmessQRCode.cs +++ b/v2rayN/v2rayN/Mode/VmessQRCode.cs @@ -49,5 +49,9 @@ namespace v2rayN.Mode /// 底层传输安全 /// public string tls { get; set; } = string.Empty; - } + /// + /// SNI + /// + public string sni { get; set; } = string.Empty; + } } diff --git a/v2rayN/v2rayN/Properties/AssemblyInfo.cs b/v2rayN/v2rayN/Properties/AssemblyInfo.cs index 7eb30d8a..bc383876 100644 --- a/v2rayN/v2rayN/Properties/AssemblyInfo.cs +++ b/v2rayN/v2rayN/Properties/AssemblyInfo.cs @@ -32,4 +32,4 @@ using System.Runtime.InteropServices; // 方法是按如下所示使用“*”: //[assembly: AssemblyVersion("1.0.*")] //[assembly: AssemblyVersion("1.0.0")] -[assembly: AssemblyFileVersion("4.11")] +[assembly: AssemblyFileVersion("4.12")]