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