mirror of
https://github.com/2dust/v2rayN.git
synced 2025-04-19 21:52:25 +00:00
commit
48218a3dad
19 changed files with 902 additions and 130 deletions
|
@ -34,6 +34,8 @@ namespace v2rayN.Base
|
||||||
}
|
}
|
||||||
|
|
||||||
private void StartListen()
|
private void StartListen()
|
||||||
|
{
|
||||||
|
try
|
||||||
{
|
{
|
||||||
listener = new TcpListener(IPAddress.Any, port);
|
listener = new TcpListener(IPAddress.Any, port);
|
||||||
listener.Start();
|
listener.Start();
|
||||||
|
@ -56,6 +58,11 @@ namespace v2rayN.Base
|
||||||
Thread.Sleep(1);
|
Thread.Sleep(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
Utils.SaveLog("WebserverB start fail.");
|
||||||
|
}
|
||||||
|
}
|
||||||
private void ProcessThread(object obj)
|
private void ProcessThread(object obj)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
|
|
|
@ -17,17 +17,7 @@ namespace v2rayN.Base
|
||||||
protected override WebRequest GetWebRequest(Uri address)
|
protected override WebRequest GetWebRequest(Uri address)
|
||||||
{
|
{
|
||||||
HttpWebRequest request;
|
HttpWebRequest request;
|
||||||
if (address.Scheme == "https")
|
|
||||||
{
|
|
||||||
ServicePointManager.ServerCertificateValidationCallback = (a, b, c, d) => { return true; };
|
|
||||||
request = (HttpWebRequest)base.GetWebRequest(address);
|
request = (HttpWebRequest)base.GetWebRequest(address);
|
||||||
//request.ProtocolVersion = HttpVersion.Version10;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
request = (HttpWebRequest)base.GetWebRequest(address);
|
|
||||||
}
|
|
||||||
|
|
||||||
request.Timeout = Timeout;
|
request.Timeout = Timeout;
|
||||||
request.ReadWriteTimeout = Timeout;
|
request.ReadWriteTimeout = Timeout;
|
||||||
//request.AllowAutoRedirect = false;
|
//request.AllowAutoRedirect = false;
|
||||||
|
|
|
@ -153,7 +153,4 @@
|
||||||
<data name="menuItemImportClipboard.Text" xml:space="preserve">
|
<data name="menuItemImportClipboard.Text" xml:space="preserve">
|
||||||
<value>从剪贴板导入URL</value>
|
<value>从剪贴板导入URL</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="menuItemScanScreen.Text" xml:space="preserve">
|
|
||||||
<value>扫描屏幕上的二维码</value>
|
|
||||||
</data>
|
|
||||||
</root>
|
</root>
|
21
v2rayN/v2rayN/Forms/MainForm.Designer.cs
generated
21
v2rayN/v2rayN/Forms/MainForm.Designer.cs
generated
|
@ -76,6 +76,7 @@
|
||||||
this.menuAddServers2 = new System.Windows.Forms.ToolStripMenuItem();
|
this.menuAddServers2 = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.menuScanScreen2 = new System.Windows.Forms.ToolStripMenuItem();
|
this.menuScanScreen2 = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.menuCopyPACUrl = 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.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator();
|
||||||
this.menuExit = new System.Windows.Forms.ToolStripMenuItem();
|
this.menuExit = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.bgwScan = new System.ComponentModel.BackgroundWorker();
|
this.bgwScan = new System.ComponentModel.BackgroundWorker();
|
||||||
|
@ -103,6 +104,7 @@
|
||||||
this.toolStripSeparator8 = new System.Windows.Forms.ToolStripSeparator();
|
this.toolStripSeparator8 = new System.Windows.Forms.ToolStripSeparator();
|
||||||
this.tsbOptionSetting = new System.Windows.Forms.ToolStripButton();
|
this.tsbOptionSetting = new System.Windows.Forms.ToolStripButton();
|
||||||
this.toolStripSeparator5 = new System.Windows.Forms.ToolStripSeparator();
|
this.toolStripSeparator5 = new System.Windows.Forms.ToolStripSeparator();
|
||||||
|
this.tsbTestMe = new System.Windows.Forms.ToolStripButton();
|
||||||
this.tsbReload = new System.Windows.Forms.ToolStripButton();
|
this.tsbReload = new System.Windows.Forms.ToolStripButton();
|
||||||
this.toolStripSeparator7 = new System.Windows.Forms.ToolStripSeparator();
|
this.toolStripSeparator7 = new System.Windows.Forms.ToolStripSeparator();
|
||||||
this.tsbCheckUpdate = new System.Windows.Forms.ToolStripDropDownButton();
|
this.tsbCheckUpdate = new System.Windows.Forms.ToolStripDropDownButton();
|
||||||
|
@ -388,6 +390,7 @@
|
||||||
this.menuAddServers2,
|
this.menuAddServers2,
|
||||||
this.menuScanScreen2,
|
this.menuScanScreen2,
|
||||||
this.menuCopyPACUrl,
|
this.menuCopyPACUrl,
|
||||||
|
this.menuUpdateSubscriptions,
|
||||||
this.toolStripSeparator2,
|
this.toolStripSeparator2,
|
||||||
this.menuExit});
|
this.menuExit});
|
||||||
this.cmsMain.Name = "contextMenuStrip1";
|
this.cmsMain.Name = "contextMenuStrip1";
|
||||||
|
@ -473,6 +476,12 @@
|
||||||
resources.ApplyResources(this.menuCopyPACUrl, "menuCopyPACUrl");
|
resources.ApplyResources(this.menuCopyPACUrl, "menuCopyPACUrl");
|
||||||
this.menuCopyPACUrl.Click += new System.EventHandler(this.menuCopyPACUrl_Click);
|
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
|
// toolStripSeparator2
|
||||||
//
|
//
|
||||||
this.toolStripSeparator2.Name = "toolStripSeparator2";
|
this.toolStripSeparator2.Name = "toolStripSeparator2";
|
||||||
|
@ -606,6 +615,7 @@
|
||||||
this.toolStripSeparator8,
|
this.toolStripSeparator8,
|
||||||
this.tsbOptionSetting,
|
this.tsbOptionSetting,
|
||||||
this.toolStripSeparator5,
|
this.toolStripSeparator5,
|
||||||
|
this.tsbTestMe,
|
||||||
this.tsbReload,
|
this.tsbReload,
|
||||||
this.toolStripSeparator7,
|
this.toolStripSeparator7,
|
||||||
this.tsbCheckUpdate,
|
this.tsbCheckUpdate,
|
||||||
|
@ -660,6 +670,13 @@
|
||||||
this.toolStripSeparator5.Name = "toolStripSeparator5";
|
this.toolStripSeparator5.Name = "toolStripSeparator5";
|
||||||
resources.ApplyResources(this.toolStripSeparator5, "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
|
// tsbReload
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.tsbReload, "tsbReload");
|
resources.ApplyResources(this.tsbReload, "tsbReload");
|
||||||
|
@ -811,7 +828,7 @@
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
private System.Windows.Forms.GroupBox groupBox1;
|
private System.Windows.Forms.GroupBox groupBox1;
|
||||||
private System.Windows.Forms.GroupBox groupBox2;
|
private System.Windows.Forms.GroupBox groupBox2;
|
||||||
|
@ -901,7 +918,9 @@
|
||||||
private System.Windows.Forms.ToolStripMenuItem menuRealPingServer;
|
private System.Windows.Forms.ToolStripMenuItem menuRealPingServer;
|
||||||
private System.Windows.Forms.ToolStripMenuItem menuNotEnabledHttp;
|
private System.Windows.Forms.ToolStripMenuItem menuNotEnabledHttp;
|
||||||
private System.Windows.Forms.ToolStripSeparator toolStripSeparator13;
|
private System.Windows.Forms.ToolStripSeparator toolStripSeparator13;
|
||||||
|
private System.Windows.Forms.ToolStripMenuItem menuUpdateSubscriptions;
|
||||||
private System.Windows.Forms.ToolStripMenuItem tsbV2rayWebsite;
|
private System.Windows.Forms.ToolStripMenuItem tsbV2rayWebsite;
|
||||||
|
private System.Windows.Forms.ToolStripButton tsbTestMe;
|
||||||
private System.Windows.Forms.ToolStripMenuItem menuKeepNothing;
|
private System.Windows.Forms.ToolStripMenuItem menuKeepNothing;
|
||||||
private System.Windows.Forms.ToolStripMenuItem menuKeepPACNothing;
|
private System.Windows.Forms.ToolStripMenuItem menuKeepPACNothing;
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,6 +9,8 @@ using v2rayN.Mode;
|
||||||
using v2rayN.Base;
|
using v2rayN.Base;
|
||||||
using v2rayN.Tool;
|
using v2rayN.Tool;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
|
using System.Drawing;
|
||||||
|
using System.Net;
|
||||||
|
|
||||||
namespace v2rayN.Forms
|
namespace v2rayN.Forms
|
||||||
{
|
{
|
||||||
|
@ -239,6 +241,16 @@ namespace v2rayN.Forms
|
||||||
item.testResult
|
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);
|
if (lvItem != null) lvServers.Items.Add(lvItem);
|
||||||
}
|
}
|
||||||
|
@ -322,10 +334,12 @@ namespace v2rayN.Forms
|
||||||
|
|
||||||
toolSslSocksPort.Text = $"{Global.Loopback}:{config.inbound[0].localPort}";
|
toolSslSocksPort.Text = $"{Global.Loopback}:{config.inbound[0].localPort}";
|
||||||
|
|
||||||
if (config.listenerType != 0)
|
if (config.listenerType != (int)ListenerType.noHttpProxy)
|
||||||
{
|
{
|
||||||
toolSslHttpPort.Text = $"{Global.Loopback}:{Global.httpPort}";
|
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)
|
if (PACServerHandle.IsRunning)
|
||||||
{
|
{
|
||||||
|
@ -640,7 +654,7 @@ namespace v2rayN.Forms
|
||||||
}
|
}
|
||||||
private void Speedtest(string actionType)
|
private void Speedtest(string actionType)
|
||||||
{
|
{
|
||||||
GetLvSelectedIndex();
|
if (GetLvSelectedIndex() < 0) return;
|
||||||
ClearTestResult();
|
ClearTestResult();
|
||||||
SpeedtestHandler statistics = new SpeedtestHandler(ref config, ref v2rayHandler, lvSelecteds, actionType, UpdateSpeedtestHandler);
|
SpeedtestHandler statistics = new SpeedtestHandler(ref config, ref v2rayHandler, lvSelecteds, actionType, UpdateSpeedtestHandler);
|
||||||
}
|
}
|
||||||
|
@ -871,6 +885,11 @@ namespace v2rayN.Forms
|
||||||
return counter;
|
return counter;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void menuUpdateSubscriptions_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
UpdateSubscriptionProcess();
|
||||||
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
|
@ -1116,41 +1135,41 @@ namespace v2rayN.Forms
|
||||||
|
|
||||||
private void menuNotEnabledHttp_Click(object sender, EventArgs e)
|
private void menuNotEnabledHttp_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
SetListenerType(0);
|
SetListenerType(ListenerType.noHttpProxy);
|
||||||
}
|
}
|
||||||
private void menuGlobal_Click(object sender, EventArgs e)
|
private void menuGlobal_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
SetListenerType(1);
|
SetListenerType(ListenerType.GlobalHttp);
|
||||||
}
|
}
|
||||||
private void menuGlobalPAC_Click(object sender, EventArgs e)
|
private void menuGlobalPAC_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
SetListenerType(2);
|
SetListenerType(ListenerType.GlobalPac);
|
||||||
}
|
}
|
||||||
private void menuKeep_Click(object sender, EventArgs e)
|
private void menuKeep_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
SetListenerType(3);
|
SetListenerType(ListenerType.HttpOpenAndClear);
|
||||||
}
|
}
|
||||||
private void menuKeepPAC_Click(object sender, EventArgs e)
|
private void menuKeepPAC_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
SetListenerType(4);
|
SetListenerType(ListenerType.PacOpenAndClear);
|
||||||
}
|
}
|
||||||
private void menuKeepNothing_Click(object sender, EventArgs e)
|
private void menuKeepNothing_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
SetListenerType(5);
|
SetListenerType(ListenerType.HttpOpenOnly);
|
||||||
}
|
}
|
||||||
private void menuKeepPACNothing_Click(object sender, EventArgs e)
|
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;
|
config.listenerType = type;
|
||||||
ChangePACButtonStatus(type);
|
ChangePACButtonStatus(type);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ChangePACButtonStatus(int type)
|
private void ChangePACButtonStatus(ListenerType type)
|
||||||
{
|
{
|
||||||
if (type != 0)
|
if (type != ListenerType.noHttpProxy)
|
||||||
{
|
{
|
||||||
HttpProxyHandle.RestartHttpAgent(config, false);
|
HttpProxyHandle.RestartHttpAgent(config, false);
|
||||||
}
|
}
|
||||||
|
@ -1162,7 +1181,7 @@ namespace v2rayN.Forms
|
||||||
for (int k = 0; k < menuSysAgentMode.DropDownItems.Count; k++)
|
for (int k = 0; k < menuSysAgentMode.DropDownItems.Count; k++)
|
||||||
{
|
{
|
||||||
ToolStripMenuItem item = ((ToolStripMenuItem)menuSysAgentMode.DropDownItems[k]);
|
ToolStripMenuItem item = ((ToolStripMenuItem)menuSysAgentMode.DropDownItems[k]);
|
||||||
item.Checked = (type == k);
|
item.Checked = ((int)type == k);
|
||||||
}
|
}
|
||||||
|
|
||||||
ConfigHandler.SaveConfig(ref config, false);
|
ConfigHandler.SaveConfig(ref config, false);
|
||||||
|
@ -1174,6 +1193,22 @@ namespace v2rayN.Forms
|
||||||
|
|
||||||
#region CheckUpdate
|
#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)
|
private void tsbCheckUpdateN_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
//System.Diagnostics.Process.Start(Global.UpdateUrl);
|
//System.Diagnostics.Process.Start(Global.UpdateUrl);
|
||||||
|
@ -1190,15 +1225,7 @@ namespace v2rayN.Forms
|
||||||
string url = args.Msg;
|
string url = args.Msg;
|
||||||
this.Invoke((MethodInvoker)(delegate
|
this.Invoke((MethodInvoker)(delegate
|
||||||
{
|
{
|
||||||
|
askToDownload(downloadHandle, url);
|
||||||
if (UI.ShowYesNo(string.Format(UIRes.I18N("DownloadYesNo"), url)) == DialogResult.No)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
downloadHandle.DownloadFileAsync(url, null, -1);
|
|
||||||
}
|
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -1215,7 +1242,7 @@ namespace v2rayN.Forms
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
string fileName = Utils.GetPath(downloadHandle.DownloadFileName);
|
string fileName = Utils.GetPath(downloadHandle.DownloadFileName);
|
||||||
Process process = Process.Start("v2rayUpgrade.exe", fileName);
|
Process process = Process.Start("v2rayUpgrade.exe", "\"" + fileName + "\"");
|
||||||
if (process.Id > 0)
|
if (process.Id > 0)
|
||||||
{
|
{
|
||||||
menuExit_Click(null, null);
|
menuExit_Click(null, null);
|
||||||
|
@ -1256,15 +1283,7 @@ namespace v2rayN.Forms
|
||||||
string url = args.Msg;
|
string url = args.Msg;
|
||||||
this.Invoke((MethodInvoker)(delegate
|
this.Invoke((MethodInvoker)(delegate
|
||||||
{
|
{
|
||||||
|
askToDownload(downloadHandle, url);
|
||||||
if (UI.ShowYesNo(string.Format(UIRes.I18N("DownloadYesNo"), url)) == DialogResult.No)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
downloadHandle.DownloadFileAsync(url, null, -1);
|
|
||||||
}
|
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -1415,6 +1434,14 @@ namespace v2rayN.Forms
|
||||||
}
|
}
|
||||||
|
|
||||||
private void tsbSubUpdate_Click(object sender, EventArgs e)
|
private void tsbSubUpdate_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
UpdateSubscriptionProcess();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// the subscription update process
|
||||||
|
/// </summary>
|
||||||
|
private void UpdateSubscriptionProcess()
|
||||||
{
|
{
|
||||||
AppendText(false, UIRes.I18N("MsgUpdateSubscriptionStart"));
|
AppendText(false, UIRes.I18N("MsgUpdateSubscriptionStart"));
|
||||||
|
|
||||||
|
@ -1505,5 +1532,16 @@ namespace v2rayN.Forms
|
||||||
{
|
{
|
||||||
Process.Start(Global.v2rayWebsiteUrl);
|
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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -363,6 +363,9 @@
|
||||||
<data name="menuTcpingServer.Text" xml:space="preserve">
|
<data name="menuTcpingServer.Text" xml:space="preserve">
|
||||||
<value>测试服务器延迟Tcping(多选) (Ctrl+O)</value>
|
<value>测试服务器延迟Tcping(多选) (Ctrl+O)</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="menuUpdateSubscriptions.Text" xml:space="preserve">
|
||||||
|
<value>更新订阅</value>
|
||||||
|
</data>
|
||||||
<data name="toolSslServerSpeed.Text" xml:space="preserve">
|
<data name="toolSslServerSpeed.Text" xml:space="preserve">
|
||||||
<value>网速显示未启用</value>
|
<value>网速显示未启用</value>
|
||||||
</data>
|
</data>
|
||||||
|
@ -489,6 +492,9 @@
|
||||||
<data name="tsbSubUpdate.Text" xml:space="preserve">
|
<data name="tsbSubUpdate.Text" xml:space="preserve">
|
||||||
<value>更新订阅</value>
|
<value>更新订阅</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="tsbTestMe.Text" xml:space="preserve">
|
||||||
|
<value>测试状态</value>
|
||||||
|
</data>
|
||||||
<data name="tsbV2rayWebsite.Text" xml:space="preserve">
|
<data name="tsbV2rayWebsite.Text" xml:space="preserve">
|
||||||
<value>V2Ray 官网</value>
|
<value>V2Ray 官网</value>
|
||||||
</data>
|
</data>
|
||||||
|
|
|
@ -3,6 +3,7 @@ using System.Collections.Generic;
|
||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
using v2rayN.Handler;
|
using v2rayN.Handler;
|
||||||
using v2rayN.Base;
|
using v2rayN.Base;
|
||||||
|
using v2rayN.HttpProxyHandler;
|
||||||
|
|
||||||
namespace v2rayN.Forms
|
namespace v2rayN.Forms
|
||||||
{
|
{
|
||||||
|
@ -67,7 +68,7 @@ namespace v2rayN.Forms
|
||||||
//remoteDNS
|
//remoteDNS
|
||||||
txtremoteDNS.Text = config.remoteDNS;
|
txtremoteDNS.Text = config.remoteDNS;
|
||||||
|
|
||||||
cmblistenerType.SelectedIndex = config.listenerType;
|
cmblistenerType.SelectedIndex = (int)config.listenerType;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -262,7 +263,8 @@ namespace v2rayN.Forms
|
||||||
//remoteDNS
|
//remoteDNS
|
||||||
config.remoteDNS = txtremoteDNS.Text.TrimEx();
|
config.remoteDNS = txtremoteDNS.Text.TrimEx();
|
||||||
|
|
||||||
config.listenerType = cmblistenerType.SelectedIndex;
|
config.listenerType = (ListenerType)Enum.ToObject(typeof(ListenerType), cmblistenerType.SelectedIndex);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -16,6 +16,7 @@ namespace v2rayN
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public const string SpeedTestUrl = @"http://speedtest-sgp1.digitalocean.com/10mb.test";
|
public const string SpeedTestUrl = @"http://speedtest-sgp1.digitalocean.com/10mb.test";
|
||||||
public const string SpeedPingTestUrl = @"https://www.google.com/generate_204";
|
public const string SpeedPingTestUrl = @"https://www.google.com/generate_204";
|
||||||
|
public const string AvailabilityTestUrl = @"https://www.google.com/generate_204";
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// CustomRoutingListUrl
|
/// CustomRoutingListUrl
|
||||||
|
|
|
@ -57,7 +57,7 @@ namespace v2rayN.Handler
|
||||||
private readonly string coreLatestUrl = "https://github.com/v2ray/v2ray-core/releases/latest";
|
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";
|
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();
|
Utils.SetSecurityProtocol();
|
||||||
WebRequestHandler webRequestHandler = new WebRequestHandler
|
WebRequestHandler webRequestHandler = new WebRequestHandler
|
||||||
|
|
|
@ -32,7 +32,7 @@ namespace v2rayN.Handler
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
Color color = ColorTranslator.FromHtml("#3399CC");
|
Color color = ColorTranslator.FromHtml("#3399CC");
|
||||||
int index = config.listenerType;
|
int index = (int)config.listenerType;
|
||||||
if (index > 0)
|
if (index > 0)
|
||||||
{
|
{
|
||||||
color = (new Color[] { Color.Red, Color.Purple, Color.DarkGreen, Color.Orange, Color.DarkSlateBlue, Color.RoyalBlue })[index - 1];
|
color = (new Color[] { Color.Red, Color.Purple, Color.DarkGreen, Color.Orange, Color.DarkSlateBlue, Color.RoyalBlue })[index - 1];
|
||||||
|
|
|
@ -150,6 +150,37 @@ namespace v2rayN.Handler
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int RunAvailabilityCheck() // alias: isLive
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
int httpPort = _config.GetLocalPort(Global.InboundHttp);
|
||||||
|
|
||||||
|
Task<int> 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()
|
private void RunSpeedTest()
|
||||||
{
|
{
|
||||||
int pid = -1;
|
int pid = -1;
|
||||||
|
|
|
@ -3,6 +3,19 @@ using v2rayN.Mode;
|
||||||
|
|
||||||
namespace v2rayN.HttpProxyHandler
|
namespace v2rayN.HttpProxyHandler
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 系统代理(http)模式
|
||||||
|
/// </summary>
|
||||||
|
public enum ListenerType
|
||||||
|
{
|
||||||
|
noHttpProxy = 0,
|
||||||
|
GlobalHttp = 1,
|
||||||
|
GlobalPac = 2,
|
||||||
|
HttpOpenAndClear = 3,
|
||||||
|
PacOpenAndClear = 4,
|
||||||
|
HttpOpenOnly = 5,
|
||||||
|
PacOpenOnly = 6
|
||||||
|
}
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 系统代理(http)总处理
|
/// 系统代理(http)总处理
|
||||||
/// 启动privoxy提供http协议
|
/// 启动privoxy提供http协议
|
||||||
|
@ -12,29 +25,29 @@ namespace v2rayN.HttpProxyHandler
|
||||||
{
|
{
|
||||||
private static bool Update(Config config, bool forceDisable)
|
private static bool Update(Config config, bool forceDisable)
|
||||||
{
|
{
|
||||||
int type = config.listenerType;
|
ListenerType type = config.listenerType;
|
||||||
|
|
||||||
if (forceDisable)
|
if (forceDisable)
|
||||||
{
|
{
|
||||||
type = 0;
|
type = ListenerType.noHttpProxy;
|
||||||
}
|
}
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (type != 0)
|
if (type != ListenerType.noHttpProxy)
|
||||||
{
|
{
|
||||||
int port = Global.httpPort;
|
int port = Global.httpPort;
|
||||||
if (port <= 0)
|
if (port <= 0)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (type == 1)
|
if (type == ListenerType.GlobalHttp)
|
||||||
{
|
{
|
||||||
//PACServerHandle.Stop();
|
//PACServerHandle.Stop();
|
||||||
//ProxySetting.SetProxy($"{Global.Loopback}:{port}", Global.IEProxyExceptions, 2);
|
//ProxySetting.SetProxy($"{Global.Loopback}:{port}", Global.IEProxyExceptions, 2);
|
||||||
SysProxyHandle.SetIEProxy(true, true, $"{Global.Loopback}:{port}");
|
SysProxyHandle.SetIEProxy(true, true, $"{Global.Loopback}:{port}");
|
||||||
}
|
}
|
||||||
else if (type == 2)
|
else if (type == ListenerType.GlobalPac)
|
||||||
{
|
{
|
||||||
string pacUrl = GetPacUrl();
|
string pacUrl = GetPacUrl();
|
||||||
//ProxySetting.SetProxy(pacUrl, "", 4);
|
//ProxySetting.SetProxy(pacUrl, "", 4);
|
||||||
|
@ -42,24 +55,24 @@ namespace v2rayN.HttpProxyHandler
|
||||||
//PACServerHandle.Stop();
|
//PACServerHandle.Stop();
|
||||||
PACServerHandle.Init(config);
|
PACServerHandle.Init(config);
|
||||||
}
|
}
|
||||||
else if (type == 3)
|
else if (type == ListenerType.HttpOpenAndClear)
|
||||||
{
|
{
|
||||||
//PACServerHandle.Stop();
|
//PACServerHandle.Stop();
|
||||||
SysProxyHandle.ResetIEProxy();
|
SysProxyHandle.ResetIEProxy();
|
||||||
}
|
}
|
||||||
else if (type == 4)
|
else if (type == ListenerType.PacOpenAndClear)
|
||||||
{
|
{
|
||||||
string pacUrl = GetPacUrl();
|
string pacUrl = GetPacUrl();
|
||||||
SysProxyHandle.ResetIEProxy();
|
SysProxyHandle.ResetIEProxy();
|
||||||
//PACServerHandle.Stop();
|
//PACServerHandle.Stop();
|
||||||
PACServerHandle.Init(config);
|
PACServerHandle.Init(config);
|
||||||
}
|
}
|
||||||
else if (type == 5)
|
else if (type == ListenerType.HttpOpenOnly)
|
||||||
{
|
{
|
||||||
//PACServerHandle.Stop();
|
//PACServerHandle.Stop();
|
||||||
//SysProxyHandle.ResetIEProxy();
|
//SysProxyHandle.ResetIEProxy();
|
||||||
}
|
}
|
||||||
else if (type == 6)
|
else if (type == ListenerType.PacOpenOnly)
|
||||||
{
|
{
|
||||||
string pacUrl = GetPacUrl();
|
string pacUrl = GetPacUrl();
|
||||||
//SysProxyHandle.ResetIEProxy();
|
//SysProxyHandle.ResetIEProxy();
|
||||||
|
@ -114,7 +127,7 @@ namespace v2rayN.HttpProxyHandler
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (config.listenerType != 5 && config.listenerType != 6)
|
if (config.listenerType != ListenerType.HttpOpenOnly && config.listenerType != ListenerType.PacOpenOnly)
|
||||||
{
|
{
|
||||||
Update(config, true);
|
Update(config, true);
|
||||||
}
|
}
|
||||||
|
@ -138,7 +151,7 @@ namespace v2rayN.HttpProxyHandler
|
||||||
public static void RestartHttpAgent(Config config, bool forced)
|
public static void RestartHttpAgent(Config config, bool forced)
|
||||||
{
|
{
|
||||||
bool isRestart = false;
|
bool isRestart = false;
|
||||||
if (config.listenerType == 0)
|
if (config.listenerType == ListenerType.noHttpProxy)
|
||||||
{
|
{
|
||||||
// 关闭http proxy时,直接返回
|
// 关闭http proxy时,直接返回
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using v2rayN.Base;
|
using v2rayN.Base;
|
||||||
|
using v2rayN.HttpProxyHandler;
|
||||||
|
|
||||||
|
|
||||||
namespace v2rayN.Mode
|
namespace v2rayN.Mode
|
||||||
{
|
{
|
||||||
|
@ -107,9 +109,9 @@ namespace v2rayN.Mode
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 监听状态 0-not 1-http 2-PAC
|
/// 监听状态
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public int listenerType
|
public ListenerType listenerType
|
||||||
{
|
{
|
||||||
get; set;
|
get; set;
|
||||||
}
|
}
|
||||||
|
|
9
v2rayN/v2rayN/Resx/ResUI.Designer.cs
generated
9
v2rayN/v2rayN/Resx/ResUI.Designer.cs
generated
|
@ -780,5 +780,14 @@ namespace v2rayN.Resx {
|
||||||
return ResourceManager.GetString("SuccessfullyImportedServerViaScan", resourceCulture);
|
return ResourceManager.GetString("SuccessfullyImportedServerViaScan", resourceCulture);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 查找类似 The ping of current service: {0} 的本地化字符串。
|
||||||
|
/// </summary>
|
||||||
|
internal static string TestMeOutput {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("TestMeOutput", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -264,12 +264,12 @@
|
||||||
<data name="MsgStartGettingSubscriptions" xml:space="preserve">
|
<data name="MsgStartGettingSubscriptions" xml:space="preserve">
|
||||||
<value>Start getting subscriptions</value>
|
<value>Start getting subscriptions</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="MsgStartUpdatingPAC" xml:space="preserve">
|
|
||||||
<value>Start updating PAC...</value>
|
|
||||||
</data>
|
|
||||||
<data name="MsgStartUpdating" xml:space="preserve">
|
<data name="MsgStartUpdating" xml:space="preserve">
|
||||||
<value>Start updating {0}...</value>
|
<value>Start updating {0}...</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="MsgStartUpdatingPAC" xml:space="preserve">
|
||||||
|
<value>Start updating PAC...</value>
|
||||||
|
</data>
|
||||||
<data name="MsgSubscriptionDecodingFailed" xml:space="preserve">
|
<data name="MsgSubscriptionDecodingFailed" xml:space="preserve">
|
||||||
<value>Subscription content decoding failed (non-BASE64 code)</value>
|
<value>Subscription content decoding failed (non-BASE64 code)</value>
|
||||||
</data>
|
</data>
|
||||||
|
@ -358,4 +358,7 @@
|
||||||
<data name="SuccessfullyImportedServerViaScan" xml:space="preserve">
|
<data name="SuccessfullyImportedServerViaScan" xml:space="preserve">
|
||||||
<value>Scan import URL successfully</value>
|
<value>Scan import URL successfully</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="TestMeOutput" xml:space="preserve">
|
||||||
|
<value>The ping of current service: {0}</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
|
@ -264,12 +264,12 @@
|
||||||
<data name="MsgStartGettingSubscriptions" xml:space="preserve">
|
<data name="MsgStartGettingSubscriptions" xml:space="preserve">
|
||||||
<value>开始获取订阅内容</value>
|
<value>开始获取订阅内容</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="MsgStartUpdatingPAC" xml:space="preserve">
|
|
||||||
<value>开始更新 PAC...</value>
|
|
||||||
</data>
|
|
||||||
<data name="MsgStartUpdating" xml:space="preserve">
|
<data name="MsgStartUpdating" xml:space="preserve">
|
||||||
<value>开始更新 {0}...</value>
|
<value>开始更新 {0}...</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="MsgStartUpdatingPAC" xml:space="preserve">
|
||||||
|
<value>开始更新 PAC...</value>
|
||||||
|
</data>
|
||||||
<data name="MsgSubscriptionDecodingFailed" xml:space="preserve">
|
<data name="MsgSubscriptionDecodingFailed" xml:space="preserve">
|
||||||
<value>订阅内容解码失败(非BASE64码)</value>
|
<value>订阅内容解码失败(非BASE64码)</value>
|
||||||
</data>
|
</data>
|
||||||
|
@ -358,4 +358,7 @@
|
||||||
<data name="SuccessfullyImportedServerViaScan" xml:space="preserve">
|
<data name="SuccessfullyImportedServerViaScan" xml:space="preserve">
|
||||||
<value>扫描导入URL成功</value>
|
<value>扫描导入URL成功</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="TestMeOutput" xml:space="preserve">
|
||||||
|
<value>当前服务的访问延迟: {0}</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
|
@ -804,22 +804,15 @@ namespace v2rayN
|
||||||
|
|
||||||
public static string UnGzip(byte[] buf)
|
public static string UnGzip(byte[] buf)
|
||||||
{
|
{
|
||||||
byte[] buffer = new byte[1024];
|
MemoryStream sb = new MemoryStream();
|
||||||
int n;
|
|
||||||
using (MemoryStream sb = new MemoryStream())
|
|
||||||
{
|
|
||||||
using (GZipStream input = new GZipStream(new MemoryStream(buf),
|
using (GZipStream input = new GZipStream(new MemoryStream(buf),
|
||||||
CompressionMode.Decompress,
|
CompressionMode.Decompress,
|
||||||
false))
|
false))
|
||||||
{
|
{
|
||||||
while ((n = input.Read(buffer, 0, buffer.Length)) > 0)
|
input.CopyTo(sb);
|
||||||
{
|
|
||||||
sb.Write(buffer, 0, n);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return Encoding.UTF8.GetString(sb.ToArray());
|
return Encoding.UTF8.GetString(sb.ToArray());
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
|
|
@ -41,8 +41,9 @@ namespace v2rayUpgrade
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
showWarn("Failed to close v2rayN(关闭v2rayN失败)." + ex.StackTrace);
|
// Access may be denied without admin right. The user may not be an administrator.
|
||||||
return;
|
showWarn("Failed to close v2rayN(关闭v2rayN失败).\n" +
|
||||||
|
"Close it manually, or the upgrade may fail.(请手动关闭正在运行的v2rayN,否则可能升级失败。\n\n" + ex.StackTrace);
|
||||||
}
|
}
|
||||||
|
|
||||||
try
|
try
|
||||||
|
|
Loading…
Reference in a new issue