diff --git a/v2rayN/v2rayN/Base/HttpWebServerB.cs b/v2rayN/v2rayN/Base/HttpWebServerB.cs index 403ffedb..fcbca1dd 100644 --- a/v2rayN/v2rayN/Base/HttpWebServerB.cs +++ b/v2rayN/v2rayN/Base/HttpWebServerB.cs @@ -35,25 +35,32 @@ namespace v2rayN.Base private void StartListen() { - listener = new TcpListener(IPAddress.Any, port); - listener.Start(); - Utils.SaveLog("WebserverB running..."); - - while (true) + try { - if (!listener.Pending()) - { - Thread.Sleep(100); - continue; - } + listener = new TcpListener(IPAddress.Any, port); + listener.Start(); + Utils.SaveLog("WebserverB running..."); - TcpClient socket = listener.AcceptTcpClient(); - Thread thread = new Thread(new ParameterizedThreadStart(ProcessThread)) + while (true) { - IsBackground = true - }; - thread.Start(socket); - Thread.Sleep(1); + 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) diff --git a/v2rayN/v2rayN/Base/WebClientEx.cs b/v2rayN/v2rayN/Base/WebClientEx.cs index 4cdfdf03..096826cc 100644 --- a/v2rayN/v2rayN/Base/WebClientEx.cs +++ b/v2rayN/v2rayN/Base/WebClientEx.cs @@ -17,17 +17,7 @@ namespace v2rayN.Base protected override WebRequest GetWebRequest(Uri address) { HttpWebRequest request; - if (address.Scheme == "https") - { - ServicePointManager.ServerCertificateValidationCallback = (a, b, c, d) => { return true; }; - request = (HttpWebRequest)base.GetWebRequest(address); - //request.ProtocolVersion = HttpVersion.Version10; - } - else - { - request = (HttpWebRequest)base.GetWebRequest(address); - } - + request = (HttpWebRequest)base.GetWebRequest(address); request.Timeout = Timeout; request.ReadWriteTimeout = Timeout; //request.AllowAutoRedirect = false; diff --git a/v2rayN/v2rayN/Forms/AddServer3Form.zh-Hans.resx b/v2rayN/v2rayN/Forms/AddServer3Form.zh-Hans.resx index 9cb34d6a..c9d6760a 100644 --- a/v2rayN/v2rayN/Forms/AddServer3Form.zh-Hans.resx +++ b/v2rayN/v2rayN/Forms/AddServer3Form.zh-Hans.resx @@ -153,7 +153,4 @@ 从剪贴板导入URL - - 扫描屏幕上的二维码 - \ No newline at end of file diff --git a/v2rayN/v2rayN/Forms/MainForm.Designer.cs b/v2rayN/v2rayN/Forms/MainForm.Designer.cs index 426672d0..b3c75b8f 100644 --- a/v2rayN/v2rayN/Forms/MainForm.Designer.cs +++ b/v2rayN/v2rayN/Forms/MainForm.Designer.cs @@ -76,6 +76,7 @@ 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(); this.bgwScan = new System.ComponentModel.BackgroundWorker(); @@ -103,6 +104,7 @@ this.toolStripSeparator8 = new System.Windows.Forms.ToolStripSeparator(); this.tsbOptionSetting = new System.Windows.Forms.ToolStripButton(); this.toolStripSeparator5 = new System.Windows.Forms.ToolStripSeparator(); + this.tsbTestMe = new System.Windows.Forms.ToolStripButton(); this.tsbReload = new System.Windows.Forms.ToolStripButton(); this.toolStripSeparator7 = new System.Windows.Forms.ToolStripSeparator(); this.tsbCheckUpdate = new System.Windows.Forms.ToolStripDropDownButton(); @@ -388,6 +390,7 @@ this.menuAddServers2, this.menuScanScreen2, this.menuCopyPACUrl, + this.menuUpdateSubscriptions, this.toolStripSeparator2, this.menuExit}); this.cmsMain.Name = "contextMenuStrip1"; @@ -473,6 +476,12 @@ resources.ApplyResources(this.menuCopyPACUrl, "menuCopyPACUrl"); this.menuCopyPACUrl.Click += new System.EventHandler(this.menuCopyPACUrl_Click); // + // menuUpdateSubscriptions + // + this.menuUpdateSubscriptions.Name = "menuUpdateSubscriptions"; + resources.ApplyResources(this.menuUpdateSubscriptions, "menuUpdateSubscriptions"); + this.menuUpdateSubscriptions.Click += new System.EventHandler(this.menuUpdateSubscriptions_Click); + // // toolStripSeparator2 // this.toolStripSeparator2.Name = "toolStripSeparator2"; @@ -606,6 +615,7 @@ this.toolStripSeparator8, this.tsbOptionSetting, this.toolStripSeparator5, + this.tsbTestMe, this.tsbReload, this.toolStripSeparator7, this.tsbCheckUpdate, @@ -660,6 +670,13 @@ this.toolStripSeparator5.Name = "toolStripSeparator5"; resources.ApplyResources(this.toolStripSeparator5, "toolStripSeparator5"); // + // tsbTestMe + // + this.tsbTestMe.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text; + this.tsbTestMe.Name = "tsbTestMe"; + resources.ApplyResources(this.tsbTestMe, "tsbTestMe"); + this.tsbTestMe.Click += new System.EventHandler(this.tsbTestMe_Click); + // // tsbReload // resources.ApplyResources(this.tsbReload, "tsbReload"); @@ -811,7 +828,7 @@ } - #endregion +#endregion private System.Windows.Forms.GroupBox groupBox1; private System.Windows.Forms.GroupBox groupBox2; @@ -901,7 +918,9 @@ 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.ToolStripButton tsbTestMe; private System.Windows.Forms.ToolStripMenuItem menuKeepNothing; private System.Windows.Forms.ToolStripMenuItem menuKeepPACNothing; } diff --git a/v2rayN/v2rayN/Forms/MainForm.cs b/v2rayN/v2rayN/Forms/MainForm.cs index 223bba24..a283acb9 100644 --- a/v2rayN/v2rayN/Forms/MainForm.cs +++ b/v2rayN/v2rayN/Forms/MainForm.cs @@ -9,6 +9,8 @@ using v2rayN.Mode; using v2rayN.Base; using v2rayN.Tool; using System.Diagnostics; +using System.Drawing; +using System.Net; namespace v2rayN.Forms { @@ -239,6 +241,16 @@ namespace v2rayN.Forms item.testResult }); } + if (k % 2 == 1) // 隔行着色 + { + lvItem.BackColor = Color.WhiteSmoke; + } + if (config.index.Equals(k)) + { + //lvItem.Checked = true; + lvItem.ForeColor = Color.Blue; + lvItem.Font = new Font(lvItem.Font, FontStyle.Bold); + } if (lvItem != null) lvServers.Items.Add(lvItem); } @@ -322,10 +334,12 @@ namespace v2rayN.Forms toolSslSocksPort.Text = $"{Global.Loopback}:{config.inbound[0].localPort}"; - if (config.listenerType != 0) + if (config.listenerType != (int)ListenerType.noHttpProxy) { toolSslHttpPort.Text = $"{Global.Loopback}:{Global.httpPort}"; - if (config.listenerType % 2 == 0) + if (config.listenerType == ListenerType.GlobalPac || + config.listenerType == ListenerType.PacOpenAndClear || + config.listenerType == ListenerType.PacOpenOnly) { if (PACServerHandle.IsRunning) { @@ -640,7 +654,7 @@ namespace v2rayN.Forms } private void Speedtest(string actionType) { - GetLvSelectedIndex(); + if (GetLvSelectedIndex() < 0) return; ClearTestResult(); SpeedtestHandler statistics = new SpeedtestHandler(ref config, ref v2rayHandler, lvSelecteds, actionType, UpdateSpeedtestHandler); } @@ -871,6 +885,11 @@ namespace v2rayN.Forms return counter; } + private void menuUpdateSubscriptions_Click(object sender, EventArgs e) + { + UpdateSubscriptionProcess(); + } + #endregion @@ -1116,41 +1135,41 @@ namespace v2rayN.Forms private void menuNotEnabledHttp_Click(object sender, EventArgs e) { - SetListenerType(0); + SetListenerType(ListenerType.noHttpProxy); } private void menuGlobal_Click(object sender, EventArgs e) { - SetListenerType(1); + SetListenerType(ListenerType.GlobalHttp); } private void menuGlobalPAC_Click(object sender, EventArgs e) { - SetListenerType(2); + SetListenerType(ListenerType.GlobalPac); } private void menuKeep_Click(object sender, EventArgs e) { - SetListenerType(3); + SetListenerType(ListenerType.HttpOpenAndClear); } private void menuKeepPAC_Click(object sender, EventArgs e) { - SetListenerType(4); + SetListenerType(ListenerType.PacOpenAndClear); } private void menuKeepNothing_Click(object sender, EventArgs e) { - SetListenerType(5); + SetListenerType(ListenerType.HttpOpenOnly); } private void menuKeepPACNothing_Click(object sender, EventArgs e) { - SetListenerType(6); + SetListenerType(ListenerType.PacOpenOnly); } - private void SetListenerType(int type) + private void SetListenerType(ListenerType type) { config.listenerType = type; ChangePACButtonStatus(type); } - private void ChangePACButtonStatus(int type) + private void ChangePACButtonStatus(ListenerType type) { - if (type != 0) + if (type != ListenerType.noHttpProxy) { HttpProxyHandle.RestartHttpAgent(config, false); } @@ -1162,7 +1181,7 @@ namespace v2rayN.Forms for (int k = 0; k < menuSysAgentMode.DropDownItems.Count; k++) { ToolStripMenuItem item = ((ToolStripMenuItem)menuSysAgentMode.DropDownItems[k]); - item.Checked = (type == k); + item.Checked = ((int)type == k); } ConfigHandler.SaveConfig(ref config, false); @@ -1174,6 +1193,22 @@ namespace v2rayN.Forms #region CheckUpdate + private void askToDownload(DownloadHandle downloadHandle, string url) + { + if (UI.ShowYesNo(string.Format(UIRes.I18N("DownloadYesNo"), url)) == DialogResult.Yes) + { + if (httpProxyTest() > 0) + { + int httpPort = config.GetLocalPort(Global.InboundHttp); + WebProxy webProxy = new WebProxy(Global.Loopback, httpPort); + downloadHandle.DownloadFileAsync(url, webProxy, 60); + } + else + { + downloadHandle.DownloadFileAsync(url, null, 60); + } + } + } private void tsbCheckUpdateN_Click(object sender, EventArgs e) { //System.Diagnostics.Process.Start(Global.UpdateUrl); @@ -1190,15 +1225,7 @@ namespace v2rayN.Forms string url = args.Msg; this.Invoke((MethodInvoker)(delegate { - - if (UI.ShowYesNo(string.Format(UIRes.I18N("DownloadYesNo"), url)) == DialogResult.No) - { - return; - } - else - { - downloadHandle.DownloadFileAsync(url, null, -1); - } + askToDownload(downloadHandle, url); })); } else @@ -1214,8 +1241,8 @@ namespace v2rayN.Forms try { - string fileName = Utils.GetPath(downloadHandle.DownloadFileName); - Process process = Process.Start("v2rayUpgrade.exe", fileName); + string fileName = Utils.GetPath(downloadHandle.DownloadFileName); + Process process = Process.Start("v2rayUpgrade.exe", "\"" + fileName + "\""); if (process.Id > 0) { menuExit_Click(null, null); @@ -1256,15 +1283,7 @@ namespace v2rayN.Forms string url = args.Msg; this.Invoke((MethodInvoker)(delegate { - - if (UI.ShowYesNo(string.Format(UIRes.I18N("DownloadYesNo"), url)) == DialogResult.No) - { - return; - } - else - { - downloadHandle.DownloadFileAsync(url, null, -1); - } + askToDownload(downloadHandle, url); })); } else @@ -1415,6 +1434,14 @@ namespace v2rayN.Forms } private void tsbSubUpdate_Click(object sender, EventArgs e) + { + UpdateSubscriptionProcess(); + } + + /// + /// the subscription update process + /// + private void UpdateSubscriptionProcess() { AppendText(false, UIRes.I18N("MsgUpdateSubscriptionStart")); @@ -1505,5 +1532,16 @@ namespace v2rayN.Forms { Process.Start(Global.v2rayWebsiteUrl); } + + private void tsbTestMe_Click(object sender, EventArgs e) + { + string result = httpProxyTest() + "ms"; + AppendText(false, string.Format(UIRes.I18N("TestMeOutput"), result)); + } + private int httpProxyTest() + { + SpeedtestHandler statistics = new SpeedtestHandler(ref config, ref v2rayHandler, lvSelecteds, "", UpdateSpeedtestHandler); + return statistics.RunAvailabilityCheck(); + } } } diff --git a/v2rayN/v2rayN/Forms/MainForm.resx b/v2rayN/v2rayN/Forms/MainForm.resx index d221a5c6..0bbd1220 100644 --- a/v2rayN/v2rayN/Forms/MainForm.resx +++ b/v2rayN/v2rayN/Forms/MainForm.resx @@ -119,42 +119,75 @@ + + 327, 17 + + + 17, 17 + + + 137, 17 + + + 498, 17 + + + 228, 18 + + + 409, 17 + + + True + + + 65 + 6, 12 952, 593 - - True - 4, 4, 4, 4 + + MainForm + v2rayN - - 65 + + v2rayN.Forms.BaseForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null - - 498, 17 + + bgwScan + + + System.ComponentModel.BackgroundWorker, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + cmsLv 356, 534 - - 327, 17 + + System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 NoControl + + cmsMain + 265, 164 - - 137, 17 + + System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Fill @@ -162,6 +195,12 @@ 0, 66 + + groupBox1 + + + $this + 952, 351 @@ -171,12 +210,24 @@ Servers list + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 2 + Bottom 0, 417 + + groupBox2 + + + $this + 952, 176 @@ -186,6 +237,12 @@ Informations + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 3 + Fill @@ -209,233 +266,476 @@ 0, 0 + + lvServers + + + splitContainer1.Panel1 + 686, 331 1 + + v2rayN.Base.ListViewFlickerFree, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + + + 0 + + + menuAddCustomServer + 355, 22 Add a custom configuration server + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuAddServers + 355, 22 Import bulk URL from clipboard (Ctrl+V) + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuAddServers2 + 264, 22 Import bulk URL from clipboard + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuAddShadowsocksServer + 355, 22 Add [Shadowsocks] server + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuAddSocksServer + 355, 22 Add [Socks] server + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuAddVmessServer + 355, 22 Add [VMess] server + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuCopyPACUrl + 264, 22 Copy local PAC URL + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuCopyServer + 355, 22 Clone selected server + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuExit + 264, 22 Exit + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuExport2ClientConfig + 355, 22 Export selected server for client configuration + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuExport2ServerConfig + 355, 22 Export selected server for server configuration + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuExport2ShareUrl + 355, 22 Export share URLs to clipboard (Ctrl+C) + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuExport2SubContent + 355, 22 Export subscription (base64) share to clipboard + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuGlobal + 411, 22 Open Http proxy and set the system proxy (global mode) + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuGlobalPAC + 411, 22 Open PAC and set the system proxy (PAC mode) + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuKeep + 411, 22 Only open Http proxy and clear the proxy settings + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuKeepNothing + 411, 22 Only open Http proxy and do nothing + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuKeepPAC + 411, 22 Only open PAC and clear the proxy settings + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuKeepPACNothing + 411, 22 Only open PAC and do nothing + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuMoveBottom + 355, 22 Move to bottom (B) + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuMoveDown + 355, 22 Down (D) + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuMoveTop + 355, 22 Move to top (T) + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuMoveUp + 355, 22 Up (U) + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuNotEnabledHttp + 411, 22 Not Enabled Http Proxy + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuPingServer + 355, 22 Test servers ping (Ctrl+P) + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuRealPingServer + 355, 22 Test servers real delay (Ctrl+R) + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuRemoveDuplicateServer + 355, 22 Remove duplicate servers + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuRemoveServer + 355, 22 Remove selected servers (Delete) + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuScanScreen + 355, 22 Scan QR code on the screen (Ctrl+S) + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuScanScreen2 + 264, 22 Scan QR code on the screen + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuSelectAll + 355, 22 Select All (Ctrl+A) + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuServers + 264, 22 Server + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuSetDefaultServer + 355, 22 Set as active server (Enter) + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuSpeedServer + 355, 22 Test servers download speed (Ctrl+T) + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuSysAgentMode + 264, 22 Http proxy + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuTcpingServer + 355, 22 Test servers with tcping (Ctrl+O) + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + menuUpdateSubscriptions + + + 264, 22 + + + Update subscriptions + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + notifyMain + v2rayN - - 17, 17 + + System.Windows.Forms.NotifyIcon, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 True @@ -446,33 +746,87 @@ 0, 56 + + panel1 + + + $this + 952, 10 5 + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 4 + Fill 0, 0 + + qrCodeControl + + + splitContainer1.Panel2 + 256, 331 0 + + v2rayN.Forms.QRCodeControl, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + + + 0 + Fill 3, 17 + + splitContainer1 + + + splitContainer1.Panel1 + + + splitContainer1 + + + System.Windows.Forms.SplitterPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 0 + + + splitContainer1.Panel2 + + + splitContainer1 + + + System.Windows.Forms.SplitterPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 1 + 100 + + groupBox1 + 946, 331 @@ -482,9 +836,21 @@ 2 + + System.Windows.Forms.SplitContainer, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 0 + 3, 151 + + ssMain + + + groupBox2 + 946, 22 @@ -494,60 +860,114 @@ statusStrip1 - - 228, 18 + + System.Windows.Forms.StatusStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 1 微软雅黑, 8pt + + toolSslBlank1 + 195, 17 + + System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + 微软雅黑, 8pt + + toolSslBlank2 + 195, 17 + + System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + 微软雅黑, 8pt + + toolSslBlank3 + 195, 17 + + System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolSslBlank4 + 0, 17 + + System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolSslHttpPort + 0, 17 + + System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + 微软雅黑, 8pt + + toolSslHttpPortLab + 39, 17 HTTP: + + System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolSslPacPort + 0, 17 + + System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + 微软雅黑, 8pt + + toolSslPacPortLab + 33, 17 PAC: + + System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + False 微软雅黑, 8pt + + toolSslServerSpeed + No @@ -560,72 +980,180 @@ MiddleRight + + System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolSslSocksPort + 0, 17 + + System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + 微软雅黑, 8pt + + toolSslSocksPortLab + 52, 17 SOCKS5: + + System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolStripSeparator1 + 352, 6 + + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolStripSeparator10 + 6, 56 + + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolStripSeparator11 + 6, 56 + + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolStripSeparator12 + 184, 6 + + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolStripSeparator13 + 390, 6 + + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolStripSeparator2 + 261, 6 + + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolStripSeparator3 + 352, 6 + + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolStripSeparator4 + 6, 56 + + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolStripSeparator5 + 6, 56 + + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolStripSeparator6 + 352, 6 + + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolStripSeparator7 + 6, 56 + + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolStripSeparator8 + 6, 56 + + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolStripSeparator9 + 352, 6 + + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tsbAbout + 187, 22 v2rayN Project + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tsbCheckClearPACList + 393, 22 Simplify PAC (need to set Core route) + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + Magenta + + tsbCheckUpdate + 128, 53 @@ -635,34 +1163,58 @@ ImageAboveText + + System.Windows.Forms.ToolStripDropDownButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tsbCheckUpdateCore + 393, 22 Update v2rayCore + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tsbCheckUpdateN + 393, 22 v2rayN (this software) + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tsbCheckUpdatePACList + 393, 22 Check for updated PAC (need the HTTP proxy are ON) + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + - iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - wwAADsMBx2+oZAAAADJJREFUWEftzrENACAIRUFGdVMdTZkAG4zFXfI68kMAAD8ap9lUbpfyaDV19QAA - 8FDEBl3RImu5VcdbAAAAAElFTkSuQmCC + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAySURBVFhH7c6xDQAgCEVBRnVTHU2ZABuMxV3yOvJDAAA/ + GqfZVG6X8mg1dfUAAPBQxAZd0SJruVXHWwAAAABJRU5ErkJggg== Magenta + + tsbClose + 52, 53 @@ -672,9 +1224,15 @@ ImageAboveText + + System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + Magenta + + tsbHelp + 48, 53 @@ -684,21 +1242,39 @@ ImageAboveText + + System.Windows.Forms.ToolStripDropDownButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tsbLanguageDef + 187, 22 Language-[English] + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tsbLanguageZhHans + 187, 22 语言-[中文简体] + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + Magenta + + tsbOptionSetting + 58, 53 @@ -708,9 +1284,15 @@ ImageAboveText + + System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + Magenta + + tsbPromotion + 89, 53 @@ -720,15 +1302,18 @@ ImageAboveText + + System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + - iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - wwAADsMBx2+oZAAAATdJREFUWEftloENAiEMRW8ER3AEN9ANdARHcAPdwBF0A91AN9INtC+5JvUCJwWM - mvCTFw3QUiiU65qa/lUTYT6Ato9rJZyERwT6GFNdU+EihCYNwVhsqmgm3AR1fheOAitd9PCfNvp0HDbY - FolV2MmZZCzX9J0FG0TRTlwFdbahIVE7Qe1IR5bYVnXCyr2yO5F1MNUBec25YtjomcCXSxhr9DmrV2Gr - flyL4GSrYcm9tmnEZ7JsAC7DgWr5ydbXA8hOAcVjG8FTD6ocQgvXKrW8MqFWUfc1DAXgmRwVFaJQAHsh - VbYUU87diqWA934sl/TZ7wV2Lesx0gBwsO5/1Sl5PQhLQb+G+E+bfTm9KXsRAVgHrMK+jO9gbNEzzMSh - 6DlM9nANoa+kdCeLXLNLFtc9b2r6EXXdE4e4mdByNuG1AAAAAElFTkSuQmCC + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAE3SURBVFhH7ZaBDQIhDEVvBEdwBDfQDXQER3AD3cARdAPd + QDfSDbQvuSb1AicFjJrwkxcN0FIolOuamv5VE2E+gLaPayWchEcE+hhTXVPhIoQmDcFYbKpoJtwEdX4X + jgIrXfTwnzb6dBw22BaJVdjJmWQs1/SdBRtE0U5cBXW2oSFRO0HtSEeW2FZ1wsq9sjuRdTDVAXnNuWLY + 6JnAl0sYa/Q5q1dhq35ci+Bkq2HJvbZpxGeybAAuw4Fq+cnW1wPITgHFYxvBUw+qHEIL1yq1vDKhVlH3 + NQwF4JkcFRWiUAB7IVW2FFPO3YqlgPd+LJf02e8Fdi3rMdIAcLDuf9UpeT0IS0G/hvhPm305vSl7EQFY + B6zCvozvYGzRM8zEoeg5TPZwDaGvpHQni1yzSxbXPW9q+hF13ROHuJnQcjbhtQAAAABJRU5ErkJggg== @@ -737,6 +1322,9 @@ Magenta + + tsbReload + 98, 53 @@ -746,9 +1334,15 @@ ImageAboveText + + System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + Magenta + + tsbServer + 64, 53 @@ -758,9 +1352,15 @@ ImageAboveText + + System.Windows.Forms.ToolStripDropDownButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + Magenta + + tsbSub + 99, 53 @@ -770,35 +1370,80 @@ ImageAboveText + + System.Windows.Forms.ToolStripDropDownButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tsbSubSetting + 125, 22 Settings + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tsbSubUpdate + 125, 22 Updates + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tsbTestMe + + + 74, 53 + + + Test status + + + BottomCenter + + + System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tsbV2rayWebsite + 187, 22 V2Ray Website + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + 0, 0 + + tsMain + + + $this + 952, 56 6 - - 409, 17 + + System.Windows.Forms.ToolStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 5 Fill @@ -812,6 +1457,12 @@ True + + txtMsgBox + + + groupBox2 + Vertical @@ -821,4 +1472,10 @@ 2 + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 0 + \ 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 3b7d84b5..85743a05 100644 --- a/v2rayN/v2rayN/Forms/MainForm.zh-Hans.resx +++ b/v2rayN/v2rayN/Forms/MainForm.zh-Hans.resx @@ -363,6 +363,9 @@ 测试服务器延迟Tcping(多选) (Ctrl+O) + + 更新订阅 + 网速显示未启用 @@ -489,6 +492,9 @@ 更新订阅 + + 测试状态 + V2Ray 官网 diff --git a/v2rayN/v2rayN/Forms/OptionSettingForm.cs b/v2rayN/v2rayN/Forms/OptionSettingForm.cs index 294ebe73..a882018b 100644 --- a/v2rayN/v2rayN/Forms/OptionSettingForm.cs +++ b/v2rayN/v2rayN/Forms/OptionSettingForm.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Windows.Forms; using v2rayN.Handler; using v2rayN.Base; +using v2rayN.HttpProxyHandler; namespace v2rayN.Forms { @@ -67,7 +68,7 @@ namespace v2rayN.Forms //remoteDNS txtremoteDNS.Text = config.remoteDNS; - cmblistenerType.SelectedIndex = config.listenerType; + cmblistenerType.SelectedIndex = (int)config.listenerType; } /// @@ -262,7 +263,8 @@ namespace v2rayN.Forms //remoteDNS config.remoteDNS = txtremoteDNS.Text.TrimEx(); - config.listenerType = cmblistenerType.SelectedIndex; + config.listenerType = (ListenerType)Enum.ToObject(typeof(ListenerType), cmblistenerType.SelectedIndex); + return 0; } diff --git a/v2rayN/v2rayN/Global.cs b/v2rayN/v2rayN/Global.cs index 3f1cd7a7..bdc5b12b 100644 --- a/v2rayN/v2rayN/Global.cs +++ b/v2rayN/v2rayN/Global.cs @@ -16,6 +16,7 @@ namespace v2rayN /// public const string SpeedTestUrl = @"http://speedtest-sgp1.digitalocean.com/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/DownloadHandle.cs b/v2rayN/v2rayN/Handler/DownloadHandle.cs index bf99a25f..19630bf7 100644 --- a/v2rayN/v2rayN/Handler/DownloadHandle.cs +++ b/v2rayN/v2rayN/Handler/DownloadHandle.cs @@ -57,7 +57,7 @@ namespace v2rayN.Handler private readonly string coreLatestUrl = "https://github.com/v2ray/v2ray-core/releases/latest"; private const string coreUrl = "https://github.com/v2ray/v2ray-core/releases/download/{0}/v2ray-windows-{1}.zip"; - public async Task CheckUpdateAsync(string type) + public async void CheckUpdateAsync(string type) { Utils.SetSecurityProtocol(); WebRequestHandler webRequestHandler = new WebRequestHandler diff --git a/v2rayN/v2rayN/Handler/MainFormHandler.cs b/v2rayN/v2rayN/Handler/MainFormHandler.cs index f9d66496..83865d92 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 = config.listenerType; + int index = (int)config.listenerType; 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/SpeedtestHandler.cs b/v2rayN/v2rayN/Handler/SpeedtestHandler.cs index 88dedf27..5acad82f 100644 --- a/v2rayN/v2rayN/Handler/SpeedtestHandler.cs +++ b/v2rayN/v2rayN/Handler/SpeedtestHandler.cs @@ -150,6 +150,37 @@ namespace v2rayN.Handler } } + public int RunAvailabilityCheck() // alias: isLive + { + try + { + int httpPort = _config.GetLocalPort(Global.InboundHttp); + + Task t = Task.Run(() => + { + try + { + WebProxy webProxy = new WebProxy(Global.Loopback, httpPort); + int responseTime = -1; + string status = GetRealPingTime(Global.AvailabilityTestUrl, webProxy, out responseTime); + bool noError = Utils.IsNullOrEmpty(status); + return noError ? responseTime : -1; + } + catch (Exception ex) + { + Utils.SaveLog(ex.Message, ex); + return -1; + } + }); + return t.Result; + } + catch (Exception ex) + { + Utils.SaveLog(ex.Message, ex); + return -1; + } + } + private void RunSpeedTest() { int pid = -1; diff --git a/v2rayN/v2rayN/HttpProxyHandler/HttpProxyHandle.cs b/v2rayN/v2rayN/HttpProxyHandler/HttpProxyHandle.cs index 63826a02..0236c5a8 100644 --- a/v2rayN/v2rayN/HttpProxyHandler/HttpProxyHandle.cs +++ b/v2rayN/v2rayN/HttpProxyHandler/HttpProxyHandle.cs @@ -3,6 +3,19 @@ using v2rayN.Mode; namespace v2rayN.HttpProxyHandler { + /// + /// 系统代理(http)模式 + /// + public enum ListenerType + { + noHttpProxy = 0, + GlobalHttp = 1, + GlobalPac = 2, + HttpOpenAndClear = 3, + PacOpenAndClear = 4, + HttpOpenOnly = 5, + PacOpenOnly = 6 + } /// /// 系统代理(http)总处理 /// 启动privoxy提供http协议 @@ -12,29 +25,29 @@ namespace v2rayN.HttpProxyHandler { private static bool Update(Config config, bool forceDisable) { - int type = config.listenerType; + ListenerType type = config.listenerType; if (forceDisable) { - type = 0; + type = ListenerType.noHttpProxy; } try { - if (type != 0) + if (type != ListenerType.noHttpProxy) { int port = Global.httpPort; if (port <= 0) { return false; } - if (type == 1) + if (type == ListenerType.GlobalHttp) { //PACServerHandle.Stop(); //ProxySetting.SetProxy($"{Global.Loopback}:{port}", Global.IEProxyExceptions, 2); SysProxyHandle.SetIEProxy(true, true, $"{Global.Loopback}:{port}"); } - else if (type == 2) + else if (type == ListenerType.GlobalPac) { string pacUrl = GetPacUrl(); //ProxySetting.SetProxy(pacUrl, "", 4); @@ -42,24 +55,24 @@ namespace v2rayN.HttpProxyHandler //PACServerHandle.Stop(); PACServerHandle.Init(config); } - else if (type == 3) + else if (type == ListenerType.HttpOpenAndClear) { //PACServerHandle.Stop(); SysProxyHandle.ResetIEProxy(); } - else if (type == 4) + else if (type == ListenerType.PacOpenAndClear) { string pacUrl = GetPacUrl(); SysProxyHandle.ResetIEProxy(); //PACServerHandle.Stop(); PACServerHandle.Init(config); } - else if (type == 5) + else if (type == ListenerType.HttpOpenOnly) { //PACServerHandle.Stop(); //SysProxyHandle.ResetIEProxy(); } - else if (type == 6) + else if (type == ListenerType.PacOpenOnly) { string pacUrl = GetPacUrl(); //SysProxyHandle.ResetIEProxy(); @@ -114,7 +127,7 @@ namespace v2rayN.HttpProxyHandler { try { - if (config.listenerType != 5 && config.listenerType != 6) + if (config.listenerType != ListenerType.HttpOpenOnly && config.listenerType != ListenerType.PacOpenOnly) { Update(config, true); } @@ -138,7 +151,7 @@ namespace v2rayN.HttpProxyHandler public static void RestartHttpAgent(Config config, bool forced) { bool isRestart = false; - if (config.listenerType == 0) + if (config.listenerType == ListenerType.noHttpProxy) { // 关闭http proxy时,直接返回 return; diff --git a/v2rayN/v2rayN/Mode/Config.cs b/v2rayN/v2rayN/Mode/Config.cs index f41e36b1..60e48e55 100644 --- a/v2rayN/v2rayN/Mode/Config.cs +++ b/v2rayN/v2rayN/Mode/Config.cs @@ -1,6 +1,8 @@ using System; using System.Collections.Generic; using v2rayN.Base; +using v2rayN.HttpProxyHandler; + namespace v2rayN.Mode { @@ -107,9 +109,9 @@ namespace v2rayN.Mode } /// - /// 监听状态 0-not 1-http 2-PAC + /// 监听状态 /// - public int listenerType + public ListenerType listenerType { get; set; } diff --git a/v2rayN/v2rayN/Resx/ResUI.Designer.cs b/v2rayN/v2rayN/Resx/ResUI.Designer.cs index 47a1fdd8..b176221a 100644 --- a/v2rayN/v2rayN/Resx/ResUI.Designer.cs +++ b/v2rayN/v2rayN/Resx/ResUI.Designer.cs @@ -780,5 +780,14 @@ namespace v2rayN.Resx { return ResourceManager.GetString("SuccessfullyImportedServerViaScan", resourceCulture); } } + + /// + /// 查找类似 The ping of current service: {0} 的本地化字符串。 + /// + internal static string TestMeOutput { + get { + return ResourceManager.GetString("TestMeOutput", resourceCulture); + } + } } } diff --git a/v2rayN/v2rayN/Resx/ResUI.resx b/v2rayN/v2rayN/Resx/ResUI.resx index bfa63937..87150298 100644 --- a/v2rayN/v2rayN/Resx/ResUI.resx +++ b/v2rayN/v2rayN/Resx/ResUI.resx @@ -264,12 +264,12 @@ Start getting subscriptions - - Start updating PAC... - Start updating {0}... + + Start updating PAC... + Subscription content decoding failed (non-BASE64 code) @@ -358,4 +358,7 @@ Scan import URL successfully + + The ping of current service: {0} + \ 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 1adba146..6e80e758 100644 --- a/v2rayN/v2rayN/Resx/ResUI.zh-Hans.resx +++ b/v2rayN/v2rayN/Resx/ResUI.zh-Hans.resx @@ -264,12 +264,12 @@ 开始获取订阅内容 - - 开始更新 PAC... - 开始更新 {0}... + + 开始更新 PAC... + 订阅内容解码失败(非BASE64码) @@ -358,4 +358,7 @@ 扫描导入URL成功 + + 当前服务的访问延迟: {0} + \ No newline at end of file diff --git a/v2rayN/v2rayN/Tool/Utils.cs b/v2rayN/v2rayN/Tool/Utils.cs index c92674bf..64fe2775 100644 --- a/v2rayN/v2rayN/Tool/Utils.cs +++ b/v2rayN/v2rayN/Tool/Utils.cs @@ -804,21 +804,14 @@ namespace v2rayN public static string UnGzip(byte[] buf) { - byte[] buffer = new byte[1024]; - int n; - using (MemoryStream sb = new MemoryStream()) + MemoryStream sb = new MemoryStream(); + using (GZipStream input = new GZipStream(new MemoryStream(buf), + CompressionMode.Decompress, + false)) { - using (GZipStream input = new GZipStream(new MemoryStream(buf), - CompressionMode.Decompress, - false)) - { - while ((n = input.Read(buffer, 0, buffer.Length)) > 0) - { - sb.Write(buffer, 0, n); - } - } - return Encoding.UTF8.GetString(sb.ToArray()); + input.CopyTo(sb); } + return Encoding.UTF8.GetString(sb.ToArray()); } #endregion diff --git a/v2rayN/v2rayUpgrade/MainForm.cs b/v2rayN/v2rayUpgrade/MainForm.cs index 41990f42..7b77ed61 100644 --- a/v2rayN/v2rayUpgrade/MainForm.cs +++ b/v2rayN/v2rayUpgrade/MainForm.cs @@ -41,8 +41,9 @@ namespace v2rayUpgrade } catch (Exception ex) { - showWarn("Failed to close v2rayN(关闭v2rayN失败)." + ex.StackTrace); - return; + // Access may be denied without admin right. The user may not be an administrator. + showWarn("Failed to close v2rayN(关闭v2rayN失败).\n" + + "Close it manually, or the upgrade may fail.(请手动关闭正在运行的v2rayN,否则可能升级失败。\n\n" + ex.StackTrace); } try