Compare commits

...

17 Commits
2.44 ... 2.49

Author SHA1 Message Date
2dust
70dadf9964 up routing 2019-11-08 17:30:48 +08:00
2dust
9eab95e870 up test 2019-11-02 11:07:31 +08:00
2dust
f199e3bf82 Update AssemblyInfo.cs 2019-10-30 14:20:12 +08:00
2dust
7d31c2e472 up addr 2019-10-30 14:07:26 +08:00
2dust
ad406c3682 Update SpeedtestHandler.cs 2019-10-28 13:11:14 +08:00
2dust
2779670fa2 up speedtest 2019-10-27 12:55:20 +08:00
2dust
5b00bf82fb Update MainForm.cs 2019-10-24 08:42:55 +08:00
2dust
473e0cf839 Update HttpWebServerB.cs 2019-10-24 08:23:32 +08:00
2dust
ef01b4aa5e fix pac 2019-10-23 15:18:21 +08:00
2dust
c0340843eb up pac 2019-10-22 17:04:11 +08:00
2dust
e6ca25462e clean 2019-10-21 14:17:28 +08:00
2dust
53494341fc Update AssemblyInfo.cs 2019-10-21 10:38:15 +08:00
2dust
5aee97320b up speedtest 2019-10-21 10:35:54 +08:00
2dust
d5c69c7838 Clean code 2019-10-18 14:49:42 +08:00
2dust
9224ea9819 up webproxy 2019-10-17 13:29:58 +08:00
2dust
a922d3c46d Update SysProxyHandle.cs 2019-10-17 11:00:36 +08:00
2dust
b94d10d808 up speedtest 2019-10-17 09:41:46 +08:00
43 changed files with 2658 additions and 2125 deletions

View File

@@ -3,7 +3,7 @@ using System.Net;
using System.Text; using System.Text;
using System.Threading; using System.Threading;
namespace v2rayN.HttpProxyHandler namespace v2rayN.Base
{ {
public class HttpWebServer public class HttpWebServer
{ {
@@ -61,6 +61,7 @@ namespace v2rayN.HttpProxyHandler
try try
{ {
string address = ctx.Request.LocalEndPoint.Address.ToString(); string address = ctx.Request.LocalEndPoint.Address.ToString();
Utils.SaveLog("Webserver Request " + address);
string rstr = _responderMethod(address); string rstr = _responderMethod(address);
byte[] buf = Encoding.UTF8.GetBytes(rstr); byte[] buf = Encoding.UTF8.GetBytes(rstr);
ctx.Response.StatusCode = 200; ctx.Response.StatusCode = 200;

View File

@@ -1,12 +1,10 @@
using System; using System;
using System.Collections;
using System.IO; using System.IO;
using System.Net; using System.Net;
using System.Net.Sockets; using System.Net.Sockets;
using System.Text;
using System.Threading; using System.Threading;
namespace v2rayN.HttpProxyHandler namespace v2rayN.Base
{ {
public class HttpWebServerB public class HttpWebServerB
{ {
@@ -41,8 +39,15 @@ namespace v2rayN.HttpProxyHandler
while (true) while (true)
{ {
if (!listener.Pending())
{
Thread.Sleep(100);
continue;
}
TcpClient socket = listener.AcceptTcpClient(); TcpClient socket = listener.AcceptTcpClient();
Thread thread = new Thread(new ParameterizedThreadStart(ProcessThread)); Thread thread = new Thread(new ParameterizedThreadStart(ProcessThread));
thread.IsBackground = true;
thread.Start(socket); thread.Start(socket);
Thread.Sleep(1); Thread.Sleep(1);
} }
@@ -64,6 +69,7 @@ namespace v2rayN.HttpProxyHandler
if (_responderMethod != null) if (_responderMethod != null)
{ {
var address = ((IPEndPoint)socket.Client.LocalEndPoint).Address.ToString(); var address = ((IPEndPoint)socket.Client.LocalEndPoint).Address.ToString();
Utils.SaveLog("WebserverB Request " + address);
string pac = _responderMethod(address); string pac = _responderMethod(address);
if (inputStream.CanWrite) if (inputStream.CanWrite)

View File

@@ -1,7 +1,7 @@
using System.Drawing; using System.Drawing;
using System.Windows.Forms; using System.Windows.Forms;
namespace v2rayN.Forms namespace v2rayN.Base
{ {
class ListViewFlickerFree : ListView class ListViewFlickerFree : ListView
{ {

View File

@@ -2,7 +2,7 @@
using System.IO; using System.IO;
using System.Linq; using System.Linq;
namespace v2rayN namespace v2rayN.Base
{ {
static class StringEx static class StringEx
{ {

View File

@@ -0,0 +1,47 @@
using System;
using System.Net;
namespace v2rayN.Base
{
class WebClientEx : WebClient
{
public int Timeout
{
get; set;
}
public WebClientEx(int timeout = 3000)
{
Timeout = timeout;
}
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.Timeout = Timeout;
request.ReadWriteTimeout = Timeout;
//request.AllowAutoRedirect = false;
//request.AllowWriteStreamBuffering = true;
request.ServicePoint.BindIPEndPointDelegate = (servicePoint, remoteEndPoint, retryCount) =>
{
if (remoteEndPoint.AddressFamily == System.Net.Sockets.AddressFamily.InterNetworkV6)
return new IPEndPoint(IPAddress.IPv6Any, 0);
else
return new IPEndPoint(IPAddress.Any, 0);
};
return request;
}
}
}

View File

@@ -31,7 +31,7 @@
this.components = new System.ComponentModel.Container(); this.components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm)); System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm));
this.splitContainer1 = new System.Windows.Forms.SplitContainer(); this.splitContainer1 = new System.Windows.Forms.SplitContainer();
this.lvServers = new v2rayN.Forms.ListViewFlickerFree(); this.lvServers = new v2rayN.Base.ListViewFlickerFree();
this.cmsLv = new System.Windows.Forms.ContextMenuStrip(this.components); this.cmsLv = new System.Windows.Forms.ContextMenuStrip(this.components);
this.menuAddVmessServer = new System.Windows.Forms.ToolStripMenuItem(); this.menuAddVmessServer = new System.Windows.Forms.ToolStripMenuItem();
this.menuAddShadowsocksServer = new System.Windows.Forms.ToolStripMenuItem(); this.menuAddShadowsocksServer = new System.Windows.Forms.ToolStripMenuItem();
@@ -784,7 +784,7 @@
private System.Windows.Forms.GroupBox groupBox1; private System.Windows.Forms.GroupBox groupBox1;
private System.Windows.Forms.GroupBox groupBox2; private System.Windows.Forms.GroupBox groupBox2;
private System.Windows.Forms.TextBox txtMsgBox; private System.Windows.Forms.TextBox txtMsgBox;
private v2rayN.Forms.ListViewFlickerFree lvServers; private v2rayN.Base.ListViewFlickerFree lvServers;
private System.Windows.Forms.NotifyIcon notifyMain; private System.Windows.Forms.NotifyIcon notifyMain;
private System.Windows.Forms.ContextMenuStrip cmsMain; private System.Windows.Forms.ContextMenuStrip cmsMain;
private System.Windows.Forms.ToolStripMenuItem menuExit; private System.Windows.Forms.ToolStripMenuItem menuExit;

View File

@@ -8,6 +8,7 @@ using System.Windows.Forms;
using v2rayN.Handler; using v2rayN.Handler;
using v2rayN.HttpProxyHandler; using v2rayN.HttpProxyHandler;
using v2rayN.Mode; using v2rayN.Mode;
using v2rayN.Base;
namespace v2rayN.Forms namespace v2rayN.Forms
{ {
@@ -15,7 +16,7 @@ namespace v2rayN.Forms
{ {
private V2rayHandler v2rayHandler; private V2rayHandler v2rayHandler;
private PACListHandle pacListHandle; private PACListHandle pacListHandle;
private V2rayUpdateHandle v2rayUpdateHandle; private DownloadHandle downloadHandle;
private List<int> lvSelecteds = new List<int>(); private List<int> lvSelecteds = new List<int>();
private StatisticsHandler statistics = null; private StatisticsHandler statistics = null;
@@ -32,6 +33,14 @@ namespace v2rayN.Forms
Application.ApplicationExit += (sender, args) => Application.ApplicationExit += (sender, args) =>
{ {
Utils.ClearTempPath(); Utils.ClearTempPath();
v2rayHandler.V2rayStop();
HttpProxyHandle.Update(config, true);
HttpProxyHandle.CloseHttpAgent(config);
PACServerHandle.Stop();
ConfigHandler.SaveConfig(ref config);
statistics?.SaveToFile();
statistics?.Close(); statistics?.Close();
}; };
} }
@@ -78,18 +87,9 @@ namespace v2rayN.Forms
if (e.CloseReason == CloseReason.UserClosing) if (e.CloseReason == CloseReason.UserClosing)
{ {
e.Cancel = true; e.Cancel = true;
statistics?.SaveToFile();
HideForm(); HideForm();
return; return;
} }
if (e.CloseReason == CloseReason.ApplicationExitCall)
{
ConfigHandler.SaveConfig(ref config);
statistics?.SaveToFile();
statistics?.Close();
}
} }
private void MainForm_Resize(object sender, EventArgs e) private void MainForm_Resize(object sender, EventArgs e)
@@ -109,24 +109,24 @@ namespace v2rayN.Forms
//config.uiItem.mainQRCodeWidth = splitContainer1.SplitterDistance; //config.uiItem.mainQRCodeWidth = splitContainer1.SplitterDistance;
} }
private const int WM_QUERYENDSESSION = 0x0011; //private const int WM_QUERYENDSESSION = 0x0011;
protected override void WndProc(ref Message m) //protected override void WndProc(ref Message m)
{ //{
switch (m.Msg) // switch (m.Msg)
{ // {
case WM_QUERYENDSESSION: // case WM_QUERYENDSESSION:
Utils.SaveLog("Windows shutdown UnsetProxy"); // Utils.SaveLog("Windows shutdown UnsetProxy");
//CloseV2ray();
ConfigHandler.ToJsonFile(config); // ConfigHandler.ToJsonFile(config);
statistics?.SaveToFile(); // statistics?.SaveToFile();
ProxySetting.UnsetProxy(); // ProxySetting.UnsetProxy();
m.Result = (IntPtr)1; // m.Result = (IntPtr)1;
break; // break;
default: // default:
base.WndProc(ref m); // base.WndProc(ref m);
break; // break;
} // }
} //}
#endregion #endregion
#region listview menu #region listview menu
@@ -319,16 +319,15 @@ namespace v2rayN.Forms
private void DisplayToolStatus() private void DisplayToolStatus()
{ {
var localIP = "127.0.0.1";
toolSslSocksPort.Text = toolSslSocksPort.Text =
toolSslHttpPort.Text = toolSslHttpPort.Text =
toolSslPacPort.Text = "NONE"; toolSslPacPort.Text = "NONE";
toolSslSocksPort.Text = $"{localIP}:{config.inbound[0].localPort}"; toolSslSocksPort.Text = $"{Global.Loopback}:{config.inbound[0].localPort}";
if (config.sysAgentEnabled) if (config.sysAgentEnabled)
{ {
toolSslHttpPort.Text = $"{localIP}:{Global.sysAgentPort}"; toolSslHttpPort.Text = $"{Global.Loopback}:{Global.httpPort}";
if (config.listenerType == 2 || config.listenerType == 4) if (config.listenerType == 2 || config.listenerType == 4)
{ {
if (PACServerHandle.IsRunning) if (PACServerHandle.IsRunning)
@@ -363,7 +362,7 @@ namespace v2rayN.Forms
color = (new Color[] { Color.Red, Color.Purple, Color.DarkGreen, Color.Orange })[index - 1]; color = (new Color[] { Color.Red, Color.Purple, Color.DarkGreen, Color.Orange })[index - 1];
//color = ColorTranslator.FromHtml(new string[] { "#CC0066", "#CC6600", "#99CC99", "#666699" }[index - 1]); //color = ColorTranslator.FromHtml(new string[] { "#CC0066", "#CC6600", "#99CC99", "#666699" }[index - 1]);
} }
var width = 128; var width = 128;
var height = 128; var height = 128;
@@ -406,7 +405,7 @@ namespace v2rayN.Forms
} }
v2rayHandler.LoadV2ray(config); v2rayHandler.LoadV2ray(config);
Global.reloadV2ray = false; Global.reloadV2ray = false;
ConfigHandler.ToJsonFile(config); ConfigHandler.SaveConfig(ref config, false);
ChangeSysAgent(config.sysAgentEnabled); ChangeSysAgent(config.sysAgentEnabled);
DisplayToolStatus(); DisplayToolStatus();
@@ -417,7 +416,7 @@ namespace v2rayN.Forms
/// </summary> /// </summary>
private void CloseV2ray() private void CloseV2ray()
{ {
ConfigHandler.ToJsonFile(config); ConfigHandler.SaveConfig(ref config, false);
ChangeSysAgent(false); ChangeSysAgent(false);
@@ -594,44 +593,43 @@ namespace v2rayN.Forms
private void menuPingServer_Click(object sender, EventArgs e) private void menuPingServer_Click(object sender, EventArgs e)
{ {
GetLvSelectedIndex(); Speedtest("ping");
ClearTestResult();
var statistics = new SpeedtestHandler(ref config, ref v2rayHandler, lvSelecteds, "ping", UpdateSpeedtestHandler);
} }
private void menuTcpingServer_Click(object sender, EventArgs e) private void menuTcpingServer_Click(object sender, EventArgs e)
{ {
GetLvSelectedIndex(); Speedtest("tcping");
ClearTestResult();
var statistics = new SpeedtestHandler(ref config, ref v2rayHandler, lvSelecteds, "tcping", UpdateSpeedtestHandler);
} }
private void menuRealPingServer_Click(object sender, EventArgs e) private void menuRealPingServer_Click(object sender, EventArgs e)
{ {
if (!config.sysAgentEnabled || config.listenerType != 1) //if (!config.sysAgentEnabled)
{ //{
UI.Show(UIRes.I18N("NeedHttpGlobalProxy")); // UI.Show(UIRes.I18N("NeedHttpGlobalProxy"));
return; // return;
} //}
UI.Show(UIRes.I18N("SpeedServerTips")); //UI.Show(UIRes.I18N("SpeedServerTips"));
GetLvSelectedIndex(); Speedtest("realping");
ClearTestResult();
var statistics = new SpeedtestHandler(ref config, ref v2rayHandler, lvSelecteds, "realping", UpdateSpeedtestHandler);
} }
private void menuSpeedServer_Click(object sender, EventArgs e) private void menuSpeedServer_Click(object sender, EventArgs e)
{ {
if (!config.sysAgentEnabled || config.listenerType != 1) //if (!config.sysAgentEnabled)
{ //{
UI.Show(UIRes.I18N("NeedHttpGlobalProxy")); // UI.Show(UIRes.I18N("NeedHttpGlobalProxy"));
return; // return;
} //}
UI.Show(UIRes.I18N("SpeedServerTips")); //UI.Show(UIRes.I18N("SpeedServerTips"));
Speedtest("speedtest");
}
private void Speedtest(string actionType)
{
GetLvSelectedIndex(); GetLvSelectedIndex();
var statistics = new SpeedtestHandler(ref config, ref v2rayHandler, lvSelecteds, "speedtest", UpdateSpeedtestHandler); ClearTestResult();
var statistics = new SpeedtestHandler(ref config, ref v2rayHandler, lvSelecteds, actionType, UpdateSpeedtestHandler);
} }
private void menuExport2ClientConfig_Click(object sender, EventArgs e) private void menuExport2ClientConfig_Click(object sender, EventArgs e)
@@ -1007,15 +1005,10 @@ namespace v2rayN.Forms
private void menuExit_Click(object sender, EventArgs e) private void menuExit_Click(object sender, EventArgs e)
{ {
CloseV2ray();
this.Visible = false; this.Visible = false;
this.Close(); this.Close();
statistics?.Close();
//this.Dispose();
//System.Environment.Exit(System.Environment.ExitCode);
Application.Exit(); Application.Exit();
} }
@@ -1045,7 +1038,7 @@ namespace v2rayN.Forms
#endregion #endregion
#region #region
private void SetTestResult(int k, string txt) private void SetTestResult(int k, string txt)
{ {
config.vmess[k].testResult = txt; config.vmess[k].testResult = txt;
@@ -1241,6 +1234,7 @@ namespace v2rayN.Forms
break; break;
} }
} }
ConfigHandler.SaveConfig(ref config, false);
DisplayToolStatus(); DisplayToolStatus();
} }
@@ -1252,7 +1246,7 @@ namespace v2rayN.Forms
{ {
if (isChecked) if (isChecked)
{ {
if (HttpProxyHandle.RestartHttpAgent(config, true)) if (HttpProxyHandle.RestartHttpAgent(config, false))
{ {
ChangePACButtonStatus(config.listenerType); ChangePACButtonStatus(config.listenerType);
} }
@@ -1280,10 +1274,10 @@ namespace v2rayN.Forms
private void tsbCheckUpdateCore_Click(object sender, EventArgs e) private void tsbCheckUpdateCore_Click(object sender, EventArgs e)
{ {
if (v2rayUpdateHandle == null) if (downloadHandle == null)
{ {
v2rayUpdateHandle = new V2rayUpdateHandle(); downloadHandle = new DownloadHandle();
v2rayUpdateHandle.AbsoluteCompleted += (sender2, args) => downloadHandle.AbsoluteCompleted += (sender2, args) =>
{ {
if (args.Success) if (args.Success)
{ {
@@ -1299,7 +1293,7 @@ namespace v2rayN.Forms
} }
else else
{ {
v2rayUpdateHandle.DownloadFileAsync(config, url); downloadHandle.DownloadFileAsync(config, url, null);
} }
})); }));
} }
@@ -1308,7 +1302,7 @@ namespace v2rayN.Forms
AppendText(false, args.Msg); AppendText(false, args.Msg);
} }
}; };
v2rayUpdateHandle.UpdateCompleted += (sender2, args) => downloadHandle.UpdateCompleted += (sender2, args) =>
{ {
if (args.Success) if (args.Success)
{ {
@@ -1319,7 +1313,7 @@ namespace v2rayN.Forms
{ {
CloseV2ray(); CloseV2ray();
string fileName = v2rayUpdateHandle.DownloadFileName; string fileName = downloadHandle.DownloadFileName;
fileName = Utils.GetPath(fileName); fileName = Utils.GetPath(fileName);
using (ZipArchive archive = ZipFile.OpenRead(fileName)) using (ZipArchive archive = ZipFile.OpenRead(fileName))
{ {
@@ -1347,14 +1341,14 @@ namespace v2rayN.Forms
AppendText(false, args.Msg); AppendText(false, args.Msg);
} }
}; };
v2rayUpdateHandle.Error += (sender2, args) => downloadHandle.Error += (sender2, args) =>
{ {
AppendText(true, args.GetException().Message); AppendText(true, args.GetException().Message);
}; };
} }
AppendText(false, UIRes.I18N("MsgStartUpdatingV2rayCore")); AppendText(false, UIRes.I18N("MsgStartUpdatingV2rayCore"));
v2rayUpdateHandle.AbsoluteV2rayCore(config); downloadHandle.AbsoluteV2rayCore(config);
} }
private void tsbCheckUpdatePACList_Click(object sender, EventArgs e) private void tsbCheckUpdatePACList_Click(object sender, EventArgs e)
@@ -1406,7 +1400,7 @@ namespace v2rayN.Forms
private void tsbPromotion_Click(object sender, EventArgs e) private void tsbPromotion_Click(object sender, EventArgs e)
{ {
System.Diagnostics.Process.Start(Global.PromotionUrl); System.Diagnostics.Process.Start($"{Global.PromotionUrl}?t={DateTime.Now.Ticks}");
} }
#endregion #endregion
@@ -1474,8 +1468,8 @@ namespace v2rayN.Forms
continue; continue;
} }
V2rayUpdateHandle v2rayUpdateHandle3 = new V2rayUpdateHandle(); DownloadHandle downloadHandle3 = new DownloadHandle();
v2rayUpdateHandle3.UpdateCompleted += (sender2, args) => downloadHandle3.UpdateCompleted += (sender2, args) =>
{ {
if (args.Success) if (args.Success)
{ {
@@ -1504,12 +1498,12 @@ namespace v2rayN.Forms
AppendText(false, args.Msg); AppendText(false, args.Msg);
} }
}; };
v2rayUpdateHandle3.Error += (sender2, args) => downloadHandle3.Error += (sender2, args) =>
{ {
AppendText(true, args.GetException().Message); AppendText(true, args.GetException().Message);
}; };
v2rayUpdateHandle3.WebDownloadString(url); downloadHandle3.WebDownloadString(url);
AppendText(false, $"{hashCode}{UIRes.I18N("MsgStartGettingSubscriptions")}"); AppendText(false, $"{hashCode}{UIRes.I18N("MsgStartGettingSubscriptions")}");
} }
@@ -1537,6 +1531,6 @@ namespace v2rayN.Forms
#endregion #endregion
} }
} }

View File

@@ -28,7 +28,6 @@
/// </summary> /// </summary>
private void InitializeComponent() private void InitializeComponent()
{ {
this.components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(OptionSettingForm)); System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(OptionSettingForm));
this.btnClose = new System.Windows.Forms.Button(); this.btnClose = new System.Windows.Forms.Button();
this.tabControl1 = new System.Windows.Forms.TabControl(); this.tabControl1 = new System.Windows.Forms.TabControl();
@@ -63,8 +62,9 @@
this.txtUserblock = new System.Windows.Forms.TextBox(); this.txtUserblock = new System.Windows.Forms.TextBox();
this.panel3 = new System.Windows.Forms.Panel(); this.panel3 = new System.Windows.Forms.Panel();
this.btnSetDefRountingRule = new System.Windows.Forms.Button(); this.btnSetDefRountingRule = new System.Windows.Forms.Button();
this.cmbdomainStrategy = new System.Windows.Forms.ComboBox();
this.labRoutingTips = new System.Windows.Forms.Label(); this.labRoutingTips = new System.Windows.Forms.Label();
this.label4 = new System.Windows.Forms.Label();
this.cmbdomainStrategy = new System.Windows.Forms.ComboBox();
this.label15 = new System.Windows.Forms.Label(); this.label15 = new System.Windows.Forms.Label();
this.label12 = new System.Windows.Forms.Label(); this.label12 = new System.Windows.Forms.Label();
this.cmbroutingMode = new System.Windows.Forms.ComboBox(); this.cmbroutingMode = new System.Windows.Forms.ComboBox();
@@ -95,7 +95,6 @@
this.panel2 = new System.Windows.Forms.Panel(); this.panel2 = new System.Windows.Forms.Panel();
this.btnOK = new System.Windows.Forms.Button(); this.btnOK = new System.Windows.Forms.Button();
this.panel1 = new System.Windows.Forms.Panel(); this.panel1 = new System.Windows.Forms.Panel();
this.configBindingSource = new System.Windows.Forms.BindingSource(this.components);
this.tabControl1.SuspendLayout(); this.tabControl1.SuspendLayout();
this.tabPage1.SuspendLayout(); this.tabPage1.SuspendLayout();
this.groupBox1.SuspendLayout(); this.groupBox1.SuspendLayout();
@@ -109,36 +108,36 @@
this.tabPage6.SuspendLayout(); this.tabPage6.SuspendLayout();
this.tabPage7.SuspendLayout(); this.tabPage7.SuspendLayout();
this.panel2.SuspendLayout(); this.panel2.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.configBindingSource)).BeginInit();
this.SuspendLayout(); this.SuspendLayout();
// //
// btnClose // btnClose
// //
this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel;
resources.ApplyResources(this.btnClose, "btnClose"); resources.ApplyResources(this.btnClose, "btnClose");
this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.btnClose.Name = "btnClose"; this.btnClose.Name = "btnClose";
this.btnClose.UseVisualStyleBackColor = true; this.btnClose.UseVisualStyleBackColor = true;
this.btnClose.Click += new System.EventHandler(this.btnClose_Click); this.btnClose.Click += new System.EventHandler(this.btnClose_Click);
// //
// tabControl1 // tabControl1
// //
resources.ApplyResources(this.tabControl1, "tabControl1");
this.tabControl1.Controls.Add(this.tabPage1); this.tabControl1.Controls.Add(this.tabPage1);
this.tabControl1.Controls.Add(this.tabPage2); this.tabControl1.Controls.Add(this.tabPage2);
this.tabControl1.Controls.Add(this.tabPage6); this.tabControl1.Controls.Add(this.tabPage6);
this.tabControl1.Controls.Add(this.tabPage7); this.tabControl1.Controls.Add(this.tabPage7);
resources.ApplyResources(this.tabControl1, "tabControl1");
this.tabControl1.Name = "tabControl1"; this.tabControl1.Name = "tabControl1";
this.tabControl1.SelectedIndex = 0; this.tabControl1.SelectedIndex = 0;
// //
// tabPage1 // tabPage1
// //
this.tabPage1.Controls.Add(this.groupBox1);
resources.ApplyResources(this.tabPage1, "tabPage1"); resources.ApplyResources(this.tabPage1, "tabPage1");
this.tabPage1.Controls.Add(this.groupBox1);
this.tabPage1.Name = "tabPage1"; this.tabPage1.Name = "tabPage1";
this.tabPage1.UseVisualStyleBackColor = true; this.tabPage1.UseVisualStyleBackColor = true;
// //
// groupBox1 // groupBox1
// //
resources.ApplyResources(this.groupBox1, "groupBox1");
this.groupBox1.Controls.Add(this.chksniffingEnabled2); this.groupBox1.Controls.Add(this.chksniffingEnabled2);
this.groupBox1.Controls.Add(this.chksniffingEnabled); this.groupBox1.Controls.Add(this.chksniffingEnabled);
this.groupBox1.Controls.Add(this.txtremoteDNS); this.groupBox1.Controls.Add(this.txtremoteDNS);
@@ -157,7 +156,6 @@
this.groupBox1.Controls.Add(this.label5); this.groupBox1.Controls.Add(this.label5);
this.groupBox1.Controls.Add(this.txtlocalPort); this.groupBox1.Controls.Add(this.txtlocalPort);
this.groupBox1.Controls.Add(this.label2); this.groupBox1.Controls.Add(this.label2);
resources.ApplyResources(this.groupBox1, "groupBox1");
this.groupBox1.Name = "groupBox1"; this.groupBox1.Name = "groupBox1";
this.groupBox1.TabStop = false; this.groupBox1.TabStop = false;
// //
@@ -204,12 +202,12 @@
// //
// cmbprotocol2 // cmbprotocol2
// //
resources.ApplyResources(this.cmbprotocol2, "cmbprotocol2");
this.cmbprotocol2.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.cmbprotocol2.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cmbprotocol2.FormattingEnabled = true; this.cmbprotocol2.FormattingEnabled = true;
this.cmbprotocol2.Items.AddRange(new object[] { this.cmbprotocol2.Items.AddRange(new object[] {
resources.GetString("cmbprotocol2.Items"), resources.GetString("cmbprotocol2.Items"),
resources.GetString("cmbprotocol2.Items1")}); resources.GetString("cmbprotocol2.Items1")});
resources.ApplyResources(this.cmbprotocol2, "cmbprotocol2");
this.cmbprotocol2.Name = "cmbprotocol2"; this.cmbprotocol2.Name = "cmbprotocol2";
// //
// label3 // label3
@@ -224,8 +222,8 @@
// //
// cmbprotocol // cmbprotocol
// //
this.cmbprotocol.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
resources.ApplyResources(this.cmbprotocol, "cmbprotocol"); resources.ApplyResources(this.cmbprotocol, "cmbprotocol");
this.cmbprotocol.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cmbprotocol.FormattingEnabled = true; this.cmbprotocol.FormattingEnabled = true;
this.cmbprotocol.Items.AddRange(new object[] { this.cmbprotocol.Items.AddRange(new object[] {
resources.GetString("cmbprotocol.Items"), resources.GetString("cmbprotocol.Items"),
@@ -251,6 +249,7 @@
// //
// cmbloglevel // cmbloglevel
// //
resources.ApplyResources(this.cmbloglevel, "cmbloglevel");
this.cmbloglevel.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.cmbloglevel.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cmbloglevel.FormattingEnabled = true; this.cmbloglevel.FormattingEnabled = true;
this.cmbloglevel.Items.AddRange(new object[] { this.cmbloglevel.Items.AddRange(new object[] {
@@ -259,7 +258,6 @@
resources.GetString("cmbloglevel.Items2"), resources.GetString("cmbloglevel.Items2"),
resources.GetString("cmbloglevel.Items3"), resources.GetString("cmbloglevel.Items3"),
resources.GetString("cmbloglevel.Items4")}); resources.GetString("cmbloglevel.Items4")});
resources.ApplyResources(this.cmbloglevel, "cmbloglevel");
this.cmbloglevel.Name = "cmbloglevel"; this.cmbloglevel.Name = "cmbloglevel";
// //
// label5 // label5
@@ -279,32 +277,32 @@
// //
// tabPage2 // tabPage2
// //
this.tabPage2.Controls.Add(this.groupBox2);
resources.ApplyResources(this.tabPage2, "tabPage2"); resources.ApplyResources(this.tabPage2, "tabPage2");
this.tabPage2.Controls.Add(this.groupBox2);
this.tabPage2.Name = "tabPage2"; this.tabPage2.Name = "tabPage2";
this.tabPage2.UseVisualStyleBackColor = true; this.tabPage2.UseVisualStyleBackColor = true;
// //
// groupBox2 // groupBox2
// //
resources.ApplyResources(this.groupBox2, "groupBox2");
this.groupBox2.Controls.Add(this.tabControl2); this.groupBox2.Controls.Add(this.tabControl2);
this.groupBox2.Controls.Add(this.panel3); this.groupBox2.Controls.Add(this.panel3);
resources.ApplyResources(this.groupBox2, "groupBox2");
this.groupBox2.Name = "groupBox2"; this.groupBox2.Name = "groupBox2";
this.groupBox2.TabStop = false; this.groupBox2.TabStop = false;
// //
// tabControl2 // tabControl2
// //
resources.ApplyResources(this.tabControl2, "tabControl2");
this.tabControl2.Controls.Add(this.tabPage3); this.tabControl2.Controls.Add(this.tabPage3);
this.tabControl2.Controls.Add(this.tabPage4); this.tabControl2.Controls.Add(this.tabPage4);
this.tabControl2.Controls.Add(this.tabPage5); this.tabControl2.Controls.Add(this.tabPage5);
resources.ApplyResources(this.tabControl2, "tabControl2");
this.tabControl2.Name = "tabControl2"; this.tabControl2.Name = "tabControl2";
this.tabControl2.SelectedIndex = 0; this.tabControl2.SelectedIndex = 0;
// //
// tabPage3 // tabPage3
// //
this.tabPage3.Controls.Add(this.txtUseragent);
resources.ApplyResources(this.tabPage3, "tabPage3"); resources.ApplyResources(this.tabPage3, "tabPage3");
this.tabPage3.Controls.Add(this.txtUseragent);
this.tabPage3.Name = "tabPage3"; this.tabPage3.Name = "tabPage3";
this.tabPage3.UseVisualStyleBackColor = true; this.tabPage3.UseVisualStyleBackColor = true;
// //
@@ -315,8 +313,8 @@
// //
// tabPage4 // tabPage4
// //
this.tabPage4.Controls.Add(this.txtUserdirect);
resources.ApplyResources(this.tabPage4, "tabPage4"); resources.ApplyResources(this.tabPage4, "tabPage4");
this.tabPage4.Controls.Add(this.txtUserdirect);
this.tabPage4.Name = "tabPage4"; this.tabPage4.Name = "tabPage4";
this.tabPage4.UseVisualStyleBackColor = true; this.tabPage4.UseVisualStyleBackColor = true;
// //
@@ -327,8 +325,8 @@
// //
// tabPage5 // tabPage5
// //
this.tabPage5.Controls.Add(this.txtUserblock);
resources.ApplyResources(this.tabPage5, "tabPage5"); resources.ApplyResources(this.tabPage5, "tabPage5");
this.tabPage5.Controls.Add(this.txtUserblock);
this.tabPage5.Name = "tabPage5"; this.tabPage5.Name = "tabPage5";
this.tabPage5.UseVisualStyleBackColor = true; this.tabPage5.UseVisualStyleBackColor = true;
// //
@@ -339,13 +337,14 @@
// //
// panel3 // panel3
// //
resources.ApplyResources(this.panel3, "panel3");
this.panel3.Controls.Add(this.btnSetDefRountingRule); this.panel3.Controls.Add(this.btnSetDefRountingRule);
this.panel3.Controls.Add(this.cmbdomainStrategy);
this.panel3.Controls.Add(this.labRoutingTips); this.panel3.Controls.Add(this.labRoutingTips);
this.panel3.Controls.Add(this.label4);
this.panel3.Controls.Add(this.cmbdomainStrategy);
this.panel3.Controls.Add(this.label15); this.panel3.Controls.Add(this.label15);
this.panel3.Controls.Add(this.label12); this.panel3.Controls.Add(this.label12);
this.panel3.Controls.Add(this.cmbroutingMode); this.panel3.Controls.Add(this.cmbroutingMode);
resources.ApplyResources(this.panel3, "panel3");
this.panel3.Name = "panel3"; this.panel3.Name = "panel3";
// //
// btnSetDefRountingRule // btnSetDefRountingRule
@@ -355,23 +354,29 @@
this.btnSetDefRountingRule.UseVisualStyleBackColor = true; this.btnSetDefRountingRule.UseVisualStyleBackColor = true;
this.btnSetDefRountingRule.Click += new System.EventHandler(this.btnSetDefRountingRule_Click); this.btnSetDefRountingRule.Click += new System.EventHandler(this.btnSetDefRountingRule_Click);
// //
// labRoutingTips
//
resources.ApplyResources(this.labRoutingTips, "labRoutingTips");
this.labRoutingTips.ForeColor = System.Drawing.Color.Brown;
this.labRoutingTips.Name = "labRoutingTips";
//
// label4
//
resources.ApplyResources(this.label4, "label4");
this.label4.ForeColor = System.Drawing.Color.Brown;
this.label4.Name = "label4";
//
// cmbdomainStrategy // cmbdomainStrategy
// //
resources.ApplyResources(this.cmbdomainStrategy, "cmbdomainStrategy");
this.cmbdomainStrategy.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.cmbdomainStrategy.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cmbdomainStrategy.FormattingEnabled = true; this.cmbdomainStrategy.FormattingEnabled = true;
this.cmbdomainStrategy.Items.AddRange(new object[] { this.cmbdomainStrategy.Items.AddRange(new object[] {
resources.GetString("cmbdomainStrategy.Items"), resources.GetString("cmbdomainStrategy.Items"),
resources.GetString("cmbdomainStrategy.Items1"), resources.GetString("cmbdomainStrategy.Items1"),
resources.GetString("cmbdomainStrategy.Items2")}); resources.GetString("cmbdomainStrategy.Items2")});
resources.ApplyResources(this.cmbdomainStrategy, "cmbdomainStrategy");
this.cmbdomainStrategy.Name = "cmbdomainStrategy"; this.cmbdomainStrategy.Name = "cmbdomainStrategy";
// //
// labRoutingTips
//
this.labRoutingTips.ForeColor = System.Drawing.Color.Brown;
resources.ApplyResources(this.labRoutingTips, "labRoutingTips");
this.labRoutingTips.Name = "labRoutingTips";
//
// label15 // label15
// //
resources.ApplyResources(this.label15, "label15"); resources.ApplyResources(this.label15, "label15");
@@ -384,6 +389,7 @@
// //
// cmbroutingMode // cmbroutingMode
// //
resources.ApplyResources(this.cmbroutingMode, "cmbroutingMode");
this.cmbroutingMode.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.cmbroutingMode.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cmbroutingMode.FormattingEnabled = true; this.cmbroutingMode.FormattingEnabled = true;
this.cmbroutingMode.Items.AddRange(new object[] { this.cmbroutingMode.Items.AddRange(new object[] {
@@ -391,11 +397,11 @@
resources.GetString("cmbroutingMode.Items1"), resources.GetString("cmbroutingMode.Items1"),
resources.GetString("cmbroutingMode.Items2"), resources.GetString("cmbroutingMode.Items2"),
resources.GetString("cmbroutingMode.Items3")}); resources.GetString("cmbroutingMode.Items3")});
resources.ApplyResources(this.cmbroutingMode, "cmbroutingMode");
this.cmbroutingMode.Name = "cmbroutingMode"; this.cmbroutingMode.Name = "cmbroutingMode";
// //
// tabPage6 // tabPage6
// //
resources.ApplyResources(this.tabPage6, "tabPage6");
this.tabPage6.Controls.Add(this.chkKcpcongestion); this.tabPage6.Controls.Add(this.chkKcpcongestion);
this.tabPage6.Controls.Add(this.txtKcpwriteBufferSize); this.tabPage6.Controls.Add(this.txtKcpwriteBufferSize);
this.tabPage6.Controls.Add(this.label10); this.tabPage6.Controls.Add(this.label10);
@@ -409,7 +415,6 @@
this.tabPage6.Controls.Add(this.label7); this.tabPage6.Controls.Add(this.label7);
this.tabPage6.Controls.Add(this.txtKcpmtu); this.tabPage6.Controls.Add(this.txtKcpmtu);
this.tabPage6.Controls.Add(this.label6); this.tabPage6.Controls.Add(this.label6);
resources.ApplyResources(this.tabPage6, "tabPage6");
this.tabPage6.Name = "tabPage6"; this.tabPage6.Name = "tabPage6";
this.tabPage6.UseVisualStyleBackColor = true; this.tabPage6.UseVisualStyleBackColor = true;
// //
@@ -481,6 +486,7 @@
// //
// tabPage7 // tabPage7
// //
resources.ApplyResources(this.tabPage7, "tabPage7");
this.tabPage7.Controls.Add(this.cbFreshrate); this.tabPage7.Controls.Add(this.cbFreshrate);
this.tabPage7.Controls.Add(this.tbCacheDays); this.tabPage7.Controls.Add(this.tbCacheDays);
this.tabPage7.Controls.Add(this.lbFreshrate); this.tabPage7.Controls.Add(this.lbFreshrate);
@@ -490,15 +496,14 @@
this.tabPage7.Controls.Add(this.txturlGFWList); this.tabPage7.Controls.Add(this.txturlGFWList);
this.tabPage7.Controls.Add(this.label13); this.tabPage7.Controls.Add(this.label13);
this.tabPage7.Controls.Add(this.chkAutoRun); this.tabPage7.Controls.Add(this.chkAutoRun);
resources.ApplyResources(this.tabPage7, "tabPage7");
this.tabPage7.Name = "tabPage7"; this.tabPage7.Name = "tabPage7";
this.tabPage7.UseVisualStyleBackColor = true; this.tabPage7.UseVisualStyleBackColor = true;
// //
// cbFreshrate // cbFreshrate
// //
resources.ApplyResources(this.cbFreshrate, "cbFreshrate");
this.cbFreshrate.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.cbFreshrate.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cbFreshrate.FormattingEnabled = true; this.cbFreshrate.FormattingEnabled = true;
resources.ApplyResources(this.cbFreshrate, "cbFreshrate");
this.cbFreshrate.Name = "cbFreshrate"; this.cbFreshrate.Name = "cbFreshrate";
// //
// tbCacheDays // tbCacheDays
@@ -546,9 +551,9 @@
// //
// panel2 // panel2
// //
resources.ApplyResources(this.panel2, "panel2");
this.panel2.Controls.Add(this.btnClose); this.panel2.Controls.Add(this.btnClose);
this.panel2.Controls.Add(this.btnOK); this.panel2.Controls.Add(this.btnOK);
resources.ApplyResources(this.panel2, "panel2");
this.panel2.Name = "panel2"; this.panel2.Name = "panel2";
// //
// btnOK // btnOK
@@ -563,10 +568,6 @@
resources.ApplyResources(this.panel1, "panel1"); resources.ApplyResources(this.panel1, "panel1");
this.panel1.Name = "panel1"; this.panel1.Name = "panel1";
// //
// configBindingSource
//
this.configBindingSource.DataSource = typeof(v2rayN.Mode.Config);
//
// OptionSettingForm // OptionSettingForm
// //
resources.ApplyResources(this, "$this"); resources.ApplyResources(this, "$this");
@@ -598,7 +599,6 @@
this.tabPage7.ResumeLayout(false); this.tabPage7.ResumeLayout(false);
this.tabPage7.PerformLayout(); this.tabPage7.PerformLayout();
this.panel2.ResumeLayout(false); this.panel2.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.configBindingSource)).EndInit();
this.ResumeLayout(false); this.ResumeLayout(false);
} }
@@ -670,6 +670,6 @@
private System.Windows.Forms.Label lbCacheDays; private System.Windows.Forms.Label lbCacheDays;
private System.Windows.Forms.ComboBox cbFreshrate; private System.Windows.Forms.ComboBox cbFreshrate;
private System.Windows.Forms.Label lbFreshrate; private System.Windows.Forms.Label lbFreshrate;
private System.Windows.Forms.BindingSource configBindingSource; private System.Windows.Forms.Label label4;
} }
} }

View File

@@ -2,6 +2,7 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Windows.Forms; using System.Windows.Forms;
using v2rayN.Handler; using v2rayN.Handler;
using v2rayN.Base;
namespace v2rayN.Forms namespace v2rayN.Forms
{ {
@@ -43,8 +44,8 @@ namespace v2rayN.Forms
chkudpEnabled.Checked = config.inbound[0].udpEnabled; chkudpEnabled.Checked = config.inbound[0].udpEnabled;
chksniffingEnabled.Checked = config.inbound[0].sniffingEnabled; chksniffingEnabled.Checked = config.inbound[0].sniffingEnabled;
txtlocalPort2.Text = "socks + 1"; txtlocalPort2.Text = $"{config.inbound[0].localPort + 1}";
cmbprotocol2.Text = "http"; cmbprotocol2.Text = Global.InboundHttp;
if (config.inbound.Count > 1) if (config.inbound.Count > 1)
{ {
@@ -126,7 +127,7 @@ namespace v2rayN.Forms
cbFreshrate.DisplayMember = "Text"; cbFreshrate.DisplayMember = "Text";
cbFreshrate.ValueMember = "ID"; cbFreshrate.ValueMember = "ID";
switch(config.statisticsFreshRate) switch (config.statisticsFreshRate)
{ {
case (int)Global.StatisticsFreshRate.quick: case (int)Global.StatisticsFreshRate.quick:
cbFreshrate.SelectedItem = cbSource[0]; cbFreshrate.SelectedItem = cbSource[0];
@@ -368,10 +369,14 @@ namespace v2rayN.Forms
private void btnSetDefRountingRule_Click(object sender, EventArgs e) private void btnSetDefRountingRule_Click(object sender, EventArgs e)
{ {
txtUseragent.Text = Utils.GetEmbedText(Global.CustomRoutingFileName + Global.agentTag);
txtUserdirect.Text = Utils.GetEmbedText(Global.CustomRoutingFileName + Global.directTag);
txtUserblock.Text = Utils.GetEmbedText(Global.CustomRoutingFileName + Global.blockTag);
var lstUrl = new List<string>(); var lstUrl = new List<string>();
lstUrl.Add(Global.CustomRoutingListUrl + "proxy"); lstUrl.Add(Global.CustomRoutingListUrl + Global.agentTag);
lstUrl.Add(Global.CustomRoutingListUrl + "direct"); lstUrl.Add(Global.CustomRoutingListUrl + Global.directTag);
lstUrl.Add(Global.CustomRoutingListUrl + "block"); lstUrl.Add(Global.CustomRoutingListUrl + Global.blockTag);
var lstTxt = new List<TextBox>(); var lstTxt = new List<TextBox>();
lstTxt.Add(txtUseragent); lstTxt.Add(txtUseragent);
@@ -381,8 +386,8 @@ namespace v2rayN.Forms
for (int k = 0; k < lstUrl.Count; k++) for (int k = 0; k < lstUrl.Count; k++)
{ {
var txt = lstTxt[k]; var txt = lstTxt[k];
V2rayUpdateHandle v2rayUpdateHandle3 = new V2rayUpdateHandle(); DownloadHandle downloadHandle = new DownloadHandle();
v2rayUpdateHandle3.UpdateCompleted += (sender2, args) => downloadHandle.UpdateCompleted += (sender2, args) =>
{ {
if (args.Success) if (args.Success)
{ {
@@ -398,12 +403,12 @@ namespace v2rayN.Forms
AppendText(false, args.Msg); AppendText(false, args.Msg);
} }
}; };
v2rayUpdateHandle3.Error += (sender2, args) => downloadHandle.Error += (sender2, args) =>
{ {
AppendText(true, args.GetException().Message); AppendText(true, args.GetException().Message);
}; };
v2rayUpdateHandle3.WebDownloadString(lstUrl[k]); downloadHandle.WebDownloadString(lstUrl[k]);
} }
} }
void AppendText(bool notify, string text) void AppendText(bool notify, string text)
@@ -414,7 +419,13 @@ namespace v2rayN.Forms
class ComboItem class ComboItem
{ {
public int ID { get; set; } public int ID
public string Text { get; set; } {
get; set;
}
public string Text
{
get; set;
}
} }
} }

File diff suppressed because it is too large Load Diff

View File

@@ -196,9 +196,21 @@
<data name="tabPage3.Text" xml:space="preserve"> <data name="tabPage3.Text" xml:space="preserve">
<value> 代理的Domain或IP </value> <value> 代理的Domain或IP </value>
</data> </data>
<data name="txtUserdirect.Size" type="System.Drawing.Size, System.Drawing">
<value>628, 404</value>
</data>
<data name="tabPage4.Size" type="System.Drawing.Size, System.Drawing">
<value>634, 410</value>
</data>
<data name="tabPage4.Text" xml:space="preserve"> <data name="tabPage4.Text" xml:space="preserve">
<value> 直连的Domain或IP </value> <value> 直连的Domain或IP </value>
</data> </data>
<data name="txtUserblock.Size" type="System.Drawing.Size, System.Drawing">
<value>628, 404</value>
</data>
<data name="tabPage5.Size" type="System.Drawing.Size, System.Drawing">
<value>634, 410</value>
</data>
<data name="tabPage5.Text" xml:space="preserve"> <data name="tabPage5.Text" xml:space="preserve">
<value> 阻止的Domain或IP </value> <value> 阻止的Domain或IP </value>
</data> </data>
@@ -207,7 +219,7 @@
<value>NoControl</value> <value>NoControl</value>
</data> </data>
<data name="btnSetDefRountingRule.Location" type="System.Drawing.Point, System.Drawing"> <data name="btnSetDefRountingRule.Location" type="System.Drawing.Point, System.Drawing">
<value>381, 43</value> <value>7, 60</value>
</data> </data>
<data name="btnSetDefRountingRule.Size" type="System.Drawing.Size, System.Drawing"> <data name="btnSetDefRountingRule.Size" type="System.Drawing.Size, System.Drawing">
<value>201, 23</value> <value>201, 23</value>
@@ -215,25 +227,37 @@
<data name="btnSetDefRountingRule.Text" xml:space="preserve"> <data name="btnSetDefRountingRule.Text" xml:space="preserve">
<value>一键设置默认自定义路由规则</value> <value>一键设置默认自定义路由规则</value>
</data> </data>
<data name="cmbdomainStrategy.Size" type="System.Drawing.Size, System.Drawing">
<value>232, 20</value>
</data>
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> <assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="labRoutingTips.AutoSize" type="System.Boolean, mscorlib"> <data name="labRoutingTips.AutoSize" type="System.Boolean, mscorlib">
<value>True</value> <value>True</value>
</data> </data>
<data name="labRoutingTips.Location" type="System.Drawing.Point, System.Drawing">
<value>5, 96</value>
</data>
<data name="labRoutingTips.Size" type="System.Drawing.Size, System.Drawing"> <data name="labRoutingTips.Size" type="System.Drawing.Size, System.Drawing">
<value>383, 12</value> <value>383, 12</value>
</data> </data>
<data name="labRoutingTips.Text" xml:space="preserve"> <data name="labRoutingTips.Text" xml:space="preserve">
<value>*设置的规则,用逗号(,)隔开;支持Domain(纯字符串/正则/子域名)和IP</value> <value>*设置的规则,用逗号(,)隔开;支持Domain(纯字符串/正则/子域名)和IP</value>
</data> </data>
<data name="label4.Text" xml:space="preserve">
<value>规则加载次序:自定义的代理/直连/阻止,选择的路由模式</value>
</data>
<data name="cmbdomainStrategy.Location" type="System.Drawing.Point, System.Drawing">
<value>81, 30</value>
</data>
<data name="cmbdomainStrategy.Size" type="System.Drawing.Size, System.Drawing">
<value>186, 20</value>
</data>
<data name="label15.Size" type="System.Drawing.Size, System.Drawing"> <data name="label15.Size" type="System.Drawing.Size, System.Drawing">
<value>53, 12</value> <value>53, 12</value>
</data> </data>
<data name="label15.Text" xml:space="preserve"> <data name="label15.Text" xml:space="preserve">
<value>域名策略</value> <value>域名策略</value>
</data> </data>
<data name="label12.Location" type="System.Drawing.Point, System.Drawing">
<value>295, 34</value>
</data>
<data name="label12.Size" type="System.Drawing.Size, System.Drawing"> <data name="label12.Size" type="System.Drawing.Size, System.Drawing">
<value>53, 12</value> <value>53, 12</value>
</data> </data>
@@ -252,8 +276,11 @@
<data name="cmbroutingMode.Items3" xml:space="preserve"> <data name="cmbroutingMode.Items3" xml:space="preserve">
<value>绕过局域网及大陆地址</value> <value>绕过局域网及大陆地址</value>
</data> </data>
<data name="cmbroutingMode.Location" type="System.Drawing.Point, System.Drawing">
<value>372, 30</value>
</data>
<data name="cmbroutingMode.Size" type="System.Drawing.Size, System.Drawing"> <data name="cmbroutingMode.Size" type="System.Drawing.Size, System.Drawing">
<value>232, 20</value> <value>244, 20</value>
</data> </data>
<data name="tabPage2.Text" xml:space="preserve"> <data name="tabPage2.Text" xml:space="preserve">
<value> Core:路由设置 </value> <value> Core:路由设置 </value>
@@ -261,6 +288,24 @@
<data name="tabPage6.Text" xml:space="preserve"> <data name="tabPage6.Text" xml:space="preserve">
<value> Core:KCP设置 </value> <value> Core:KCP设置 </value>
</data> </data>
<data name="lbFreshrate.Size" type="System.Drawing.Size, System.Drawing">
<value>77, 12</value>
</data>
<data name="lbFreshrate.Text" xml:space="preserve">
<value>统计刷新频率</value>
</data>
<data name="lbCacheDays.Size" type="System.Drawing.Size, System.Drawing">
<value>305, 12</value>
</data>
<data name="lbCacheDays.Text" xml:space="preserve">
<value>缓存天数0-30 0关闭缓存单独每天的数据使用情况</value>
</data>
<data name="chkEnableStatistics.Size" type="System.Drawing.Size, System.Drawing">
<value>384, 16</value>
</data>
<data name="chkEnableStatistics.Text" xml:space="preserve">
<value>启用统计实时网速显示和使用流量显示需要重启v2rayN客户端</value>
</data>
<data name="chkAllowLANConn.Size" type="System.Drawing.Size, System.Drawing"> <data name="chkAllowLANConn.Size" type="System.Drawing.Size, System.Drawing">
<value>144, 16</value> <value>144, 16</value>
</data> </data>
@@ -288,13 +333,4 @@
<data name="$this.Text" xml:space="preserve"> <data name="$this.Text" xml:space="preserve">
<value>参数设置</value> <value>参数设置</value>
</data> </data>
<data name="chkEnableStatistics.Text" xml:space="preserve">
<value>启用统计实时网速显示和使用流量显示需要重启v2rayN客户端</value>
</data>
<data name="lbCacheDays.Text" xml:space="preserve">
<value>缓存天数0-30 0关闭缓存单独每天的数据使用情况</value>
</data>
<data name="lbFreshrate.Text" xml:space="preserve">
<value>统计刷新频率</value>
</data>
</root> </root>

View File

@@ -1,5 +1,6 @@
using System; using System;
using System.Windows.Forms; using System.Windows.Forms;
using v2rayN.Base;
using v2rayN.Mode; using v2rayN.Mode;
namespace v2rayN.Forms namespace v2rayN.Forms

View File

@@ -25,6 +25,8 @@ namespace v2rayN
/// </summary> /// </summary>
public const string CustomRoutingListUrl = @"https://raw.githubusercontent.com/2dust/v2rayCustomRoutingList/master/"; public const string CustomRoutingListUrl = @"https://raw.githubusercontent.com/2dust/v2rayCustomRoutingList/master/";
public const string GFWLIST_URL = "https://raw.githubusercontent.com/gfwlist/gfwlist/master/gfwlist.txt";
/// <summary> /// <summary>
/// PromotionUrl /// PromotionUrl
/// </summary> /// </summary>
@@ -61,6 +63,8 @@ namespace v2rayN
/// </summary> /// </summary>
public const string BlankPacFileName = "v2rayN.Sample.BlankPac.txt"; public const string BlankPacFileName = "v2rayN.Sample.BlankPac.txt";
public const string CustomRoutingFileName = "v2rayN.Sample.custom_routing_";
/// <summary> /// <summary>
/// 默认加密方式 /// 默认加密方式
@@ -96,12 +100,19 @@ namespace v2rayN
/// 阻止 tag值 /// 阻止 tag值
/// </summary> /// </summary>
public const string blockTag = "block"; public const string blockTag = "block";
/// <summary> /// <summary>
/// ///
/// </summary> /// </summary>
public const string StreamSecurity = "tls"; public const string StreamSecurity = "tls";
public const string InboundSocks = "socks";
public const string InboundHttp = "http";
public const string Loopback = "127.0.0.1";
public const string InboundAPITagName = "api";
public const string InboundAPIProtocal = "dokodemo-door";
/// <summary> /// <summary>
/// vmess /// vmess
/// </summary> /// </summary>
@@ -147,12 +158,6 @@ namespace v2rayN
/// </summary> /// </summary>
public const string CustomIconName = "v2rayN.ico"; public const string CustomIconName = "v2rayN.ico";
public const string InboundAPITagName = "api";
public const string InboundProxyTagName = "proxy";
public const string Loopback = "127.0.0.1";
public const string InboundAPIProtocal = "dokodemo-door";
public enum StatisticsFreshRate public enum StatisticsFreshRate
{ {
quick = 1000, quick = 1000,
@@ -169,32 +174,50 @@ namespace v2rayN
/// <summary> /// <summary>
/// 是否需要重启服务V2ray /// 是否需要重启服务V2ray
/// </summary> /// </summary>
public static bool reloadV2ray { get; set; } public static bool reloadV2ray
{
get; set;
}
/// <summary> /// <summary>
/// 是否开启全局代理(http) /// 是否开启全局代理(http)
/// </summary> /// </summary>
public static bool sysAgent { get; set; } public static bool sysAgent
{
get; set;
}
/// <summary> /// <summary>
/// socks端口 /// socks端口
/// </summary> /// </summary>
public static int socksPort { get; set; } public static int socksPort
{
get; set;
}
/// <summary> /// <summary>
/// 全局代理端口(http) /// http端口
/// </summary> /// </summary>
public static int sysAgentPort { get; set; } public static int httpPort
{
get; set;
}
/// <summary> /// <summary>
/// PAC监听端口 /// PAC端口
/// </summary> /// </summary>
public static int pacPort { get; set; } public static int pacPort
{
get; set;
}
/// <summary> /// <summary>
/// ///
/// </summary> /// </summary>
public static int statePort { get; set; } public static int statePort
{
get; set;
}
#endregion #endregion

View File

@@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.IO; using System.IO;
using System.Net; using System.Net;
using v2rayN.Mode; using v2rayN.Mode;
using v2rayN.Base;
namespace v2rayN.Handler namespace v2rayN.Handler
{ {
@@ -56,7 +57,7 @@ namespace v2rayN.Handler
{ {
config.inbound = new List<InItem>(); config.inbound = new List<InItem>();
InItem inItem = new InItem(); InItem inItem = new InItem();
inItem.protocol = "socks"; inItem.protocol = Global.InboundSocks;
inItem.localPort = 10808; inItem.localPort = 10808;
inItem.udpEnabled = true; inItem.udpEnabled = true;
inItem.sniffingEnabled = true; inItem.sniffingEnabled = true;
@@ -75,7 +76,7 @@ namespace v2rayN.Handler
//http协议不由core提供,只保留socks //http协议不由core提供,只保留socks
if (config.inbound.Count > 0) if (config.inbound.Count > 0)
{ {
config.inbound[0].protocol = "socks"; config.inbound[0].protocol = Global.InboundSocks;
} }
} }
//路由规则 //路由规则
@@ -120,6 +121,10 @@ namespace v2rayN.Handler
//{ //{
// config.pacPort = 8888; // config.pacPort = 8888;
//} //}
if (Utils.IsNullOrEmpty(config.urlGFWList))
{
config.urlGFWList = Global.GFWLIST_URL;
}
if (config.subItem == null) if (config.subItem == null)
{ {
@@ -302,9 +307,9 @@ namespace v2rayN.Handler
/// </summary> /// </summary>
/// <param name="config"></param> /// <param name="config"></param>
/// <returns></returns> /// <returns></returns>
public static int SaveConfig(ref Config config) public static int SaveConfig(ref Config config, bool reload = true)
{ {
Global.reloadV2ray = true; Global.reloadV2ray = reload;
ToJsonFile(config); ToJsonFile(config);
@@ -315,7 +320,7 @@ namespace v2rayN.Handler
/// 存储文件 /// 存储文件
/// </summary> /// </summary>
/// <param name="config"></param> /// <param name="config"></param>
public static void ToJsonFile(Config config) private static void ToJsonFile(Config config)
{ {
Utils.ToJsonFile(config, Utils.GetPath(configRes)); Utils.ToJsonFile(config, Utils.GetPath(configRes));
} }
@@ -514,11 +519,11 @@ namespace v2rayN.Handler
{ {
string newFileName = string.Empty; string newFileName = string.Empty;
newFileName = string.Format("{0}.json", Utils.GetGUID()); newFileName = string.Format("{0}.json", Utils.GetGUID());
newFileName = Path.Combine(Utils.GetTempPath(), newFileName); //newFileName = Path.Combine(Utils.GetTempPath(), newFileName);
try try
{ {
File.Copy(fileName, newFileName); File.Copy(fileName, Path.Combine(Utils.GetTempPath(), newFileName));
} }
catch catch
{ {
@@ -578,7 +583,7 @@ namespace v2rayN.Handler
vmessItem.address = vmessItem.address.TrimEx(); vmessItem.address = vmessItem.address.TrimEx();
vmessItem.id = vmessItem.id.TrimEx(); vmessItem.id = vmessItem.id.TrimEx();
vmessItem.security = vmessItem.security.TrimEx(); vmessItem.security = vmessItem.security.TrimEx();
if (index >= 0) if (index >= 0)
{ {
//修改 //修改

View File

@@ -1,20 +1,15 @@
using System; using System;
using System.Collections.Generic;
using System.IO; using System.IO;
using System.Net; using System.Net;
using System.Text; using v2rayN.Base;
using Newtonsoft.Json;
using v2rayN.Mode; using v2rayN.Mode;
using v2rayN.Properties;
using v2rayN.HttpProxyHandler;
using System.Diagnostics;
namespace v2rayN.Handler namespace v2rayN.Handler
{ {
/// <summary> /// <summary>
///Update V2ray Core ///Download
/// </summary> /// </summary>
class V2rayUpdateHandle class DownloadHandle
{ {
public event EventHandler<ResultEventArgs> AbsoluteCompleted; public event EventHandler<ResultEventArgs> AbsoluteCompleted;
@@ -92,7 +87,7 @@ namespace v2rayN.Handler
} }
public void DownloadFileAsync(Config config, string url) public void DownloadFileAsync(Config config, string url, WebProxy webProxy)
{ {
try try
{ {
@@ -100,12 +95,17 @@ namespace v2rayN.Handler
ServicePointManager.DefaultConnectionLimit = 256; ServicePointManager.DefaultConnectionLimit = 256;
if (UpdateCompleted != null) if (UpdateCompleted != null)
{ {
UpdateCompleted(this, new ResultEventArgs(false, url)); UpdateCompleted(this, new ResultEventArgs(false, "Downloading..."));
} }
progressPercentage = -1; progressPercentage = -1;
WebClientEx ws = new WebClientEx(); WebClientEx ws = new WebClientEx();
if (webProxy != null)
{
ws.Proxy = webProxy;// new WebProxy(Global.Loopback, Global.httpPort);
}
ws.DownloadFileCompleted += ws_DownloadFileCompleted; ws.DownloadFileCompleted += ws_DownloadFileCompleted;
ws.DownloadProgressChanged += ws_DownloadProgressChanged; ws.DownloadProgressChanged += ws_DownloadProgressChanged;
ws.DownloadFileAsync(new Uri(url), Utils.GetPath(DownloadFileName)); ws.DownloadFileAsync(new Uri(url), Utils.GetPath(DownloadFileName));
@@ -216,6 +216,6 @@ namespace v2rayN.Handler
} }
} }
} }
} }

View File

@@ -11,7 +11,7 @@ namespace v2rayN.Handler
{ {
class SpeedtestHandler class SpeedtestHandler
{ {
private V2rayUpdateHandle v2rayUpdateHandle2; private DownloadHandle downloadHandle2;
private Config _config; private Config _config;
private V2rayHandler _v2rayHandler; private V2rayHandler _v2rayHandler;
private List<int> _selecteds; private List<int> _selecteds;
@@ -37,16 +37,19 @@ namespace v2rayN.Handler
if (actionType == "ping") if (actionType == "ping")
{ {
_workThread = new Thread(new ThreadStart(RunPing)); _workThread = new Thread(new ThreadStart(RunPing));
_workThread.IsBackground = true;
_workThread.Start(); _workThread.Start();
} }
if (actionType == "tcping") if (actionType == "tcping")
{ {
_workThread = new Thread(new ThreadStart(RunTcping)); _workThread = new Thread(new ThreadStart(RunTcping));
_workThread.IsBackground = true;
_workThread.Start(); _workThread.Start();
} }
else if (actionType == "realping") else if (actionType == "realping")
{ {
_workThread = new Thread(new ThreadStart(RunRealPing)); _workThread = new Thread(new ThreadStart(RunRealPing));
_workThread.IsBackground = true;
_workThread.Start(); _workThread.Start();
} }
else if (actionType == "speedtest") else if (actionType == "speedtest")
@@ -88,7 +91,7 @@ namespace v2rayN.Handler
} }
} }
Thread.Sleep(1); Thread.Sleep(100);
} }
catch (Exception ex) catch (Exception ex)
@@ -119,7 +122,7 @@ namespace v2rayN.Handler
} }
} }
Thread.Sleep(1); Thread.Sleep(100);
} }
catch (Exception ex) catch (Exception ex)
@@ -132,6 +135,14 @@ namespace v2rayN.Handler
{ {
try try
{ {
string msg = string.Empty;
Global.reloadV2ray = true;
_v2rayHandler.LoadV2ray(_config, _selecteds);
Thread.Sleep(5000);
var httpPort = _config.GetLocalPort("speedtest");
for (int k = 0; k < _selecteds.Count; k++) for (int k = 0; k < _selecteds.Count; k++)
{ {
int index = _selecteds[k]; int index = _selecteds[k];
@@ -139,20 +150,12 @@ namespace v2rayN.Handler
{ {
continue; continue;
} }
try try
{ {
if (ConfigHandler.SetDefaultServer(ref _config, index) == 0) var webProxy = new WebProxy(Global.Loopback, httpPort + index);
{
_v2rayHandler.LoadV2ray(_config);
}
else
{
return;
}
Thread.Sleep(1000 * 5);
int responseTime = -1; int responseTime = -1;
var status = GetRealPingTime(Global.SpeedPingTestUrl, out responseTime); var status = GetRealPingTime(Global.SpeedPingTestUrl, webProxy, out responseTime);
if (!Utils.IsNullOrEmpty(status)) if (!Utils.IsNullOrEmpty(status))
{ {
_updateFunc(index, string.Format("{0}", status)); _updateFunc(index, string.Format("{0}", status));
@@ -166,9 +169,12 @@ namespace v2rayN.Handler
{ {
Utils.SaveLog(ex.Message, ex); Utils.SaveLog(ex.Message, ex);
} }
Thread.Sleep(100);
} }
Thread.Sleep(1); Global.reloadV2ray = true;
_v2rayHandler.LoadV2ray(_config);
Thread.Sleep(100);
} }
catch (Exception ex) catch (Exception ex)
@@ -184,12 +190,17 @@ namespace v2rayN.Handler
return; return;
} }
Global.reloadV2ray = true;
_v2rayHandler.LoadV2ray(_config, _selecteds);
Thread.Sleep(5000);
string url = Global.SpeedTestUrl; string url = Global.SpeedTestUrl;
testCounter = 0; testCounter = 0;
if (v2rayUpdateHandle2 == null) if (downloadHandle2 == null)
{ {
v2rayUpdateHandle2 = new V2rayUpdateHandle(); downloadHandle2 = new DownloadHandle();
v2rayUpdateHandle2.UpdateCompleted += (sender2, args) => downloadHandle2.UpdateCompleted += (sender2, args) =>
{ {
if (args.Success) if (args.Success)
{ {
@@ -204,7 +215,7 @@ namespace v2rayN.Handler
_updateFunc(ItemIndex, args.Msg); _updateFunc(ItemIndex, args.Msg);
} }
}; };
v2rayUpdateHandle2.Error += (sender2, args) => downloadHandle2.Error += (sender2, args) =>
{ {
_updateFunc(ItemIndex, args.GetException().Message); _updateFunc(ItemIndex, args.GetException().Message);
if (ServerSpeedTestSub(testCounter, url) != 0) if (ServerSpeedTestSub(testCounter, url) != 0)
@@ -213,6 +224,7 @@ namespace v2rayN.Handler
} }
}; };
} }
if (ServerSpeedTestSub(testCounter, url) != 0) if (ServerSpeedTestSub(testCounter, url) != 0)
{ {
return; return;
@@ -223,23 +235,19 @@ namespace v2rayN.Handler
{ {
if (index >= _selecteds.Count) if (index >= _selecteds.Count)
{ {
return -1; Global.reloadV2ray = true;
}
if (ConfigHandler.SetDefaultServer(ref _config, _selecteds[index]) == 0)
{
_v2rayHandler.LoadV2ray(_config); _v2rayHandler.LoadV2ray(_config);
testCounter++;
v2rayUpdateHandle2.DownloadFileAsync(_config, url);
return 0;
}
else
{
return -1; return -1;
} }
var httpPort = _config.GetLocalPort("speedtest");
index = _selecteds[index];
testCounter++;
var webProxy = new WebProxy(Global.Loopback, httpPort + index);
downloadHandle2.DownloadFileAsync(_config, url, webProxy);
return 0;
} }
private int GetTcpingTime(string url, int port) private int GetTcpingTime(string url, int port)
@@ -248,7 +256,7 @@ namespace v2rayN.Handler
try try
{ {
IPHostEntry ipHostInfo = System.Net.Dns.Resolve(url); IPHostEntry ipHostInfo = System.Net.Dns.GetHostEntry(url);
IPAddress ipAddress = ipHostInfo.AddressList[0]; IPAddress ipAddress = ipHostInfo.AddressList[0];
var timer = new Stopwatch(); var timer = new Stopwatch();
@@ -267,7 +275,7 @@ namespace v2rayN.Handler
return responseTime; return responseTime;
} }
private string GetRealPingTime(string url, out int responseTime) private string GetRealPingTime(string url, WebProxy webProxy, out int responseTime)
{ {
string msg = string.Empty; string msg = string.Empty;
responseTime = -1; responseTime = -1;
@@ -276,6 +284,7 @@ namespace v2rayN.Handler
{ {
HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(url); HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(url);
myHttpWebRequest.Timeout = 5000; myHttpWebRequest.Timeout = 5000;
myHttpWebRequest.Proxy = webProxy;//new WebProxy(Global.Loopback, Global.httpPort);
var timer = new Stopwatch(); var timer = new Stopwatch();
timer.Start(); timer.Start();

View File

@@ -6,7 +6,9 @@ using System.Net;
using System.Net.Sockets; using System.Net.Sockets;
using System.Threading; using System.Threading;
using v2rayN.Mode; using v2rayN.Mode;
using v2rayN.Properties;
using v2rayN.Protos.Statistics; using v2rayN.Protos.Statistics;
using v2rayN.Tool;
namespace v2rayN.Handler namespace v2rayN.Handler
{ {
@@ -66,6 +68,23 @@ namespace v2rayN.Handler
public StatisticsHandler(Mode.Config config, Action<ulong, ulong, ulong, ulong, List<Mode.ServerStatistics>> update) public StatisticsHandler(Mode.Config config, Action<ulong, ulong, ulong, ulong, List<Mode.ServerStatistics>> update)
{ {
try
{
if (Environment.Is64BitOperatingSystem)
{
FileManager.UncompressFile(Utils.GetPath("grpc_csharp_ext.x64.dll"), Resources.grpc_csharp_ext_x64_dll);
}
else
{
FileManager.UncompressFile(Utils.GetPath("grpc_csharp_ext.x86.dll"), Resources.grpc_csharp_ext_x86_dll);
}
}
catch (IOException ex)
{
Utils.SaveLog(ex.Message, ex);
}
config_ = config; config_ = config;
enabled_ = config.enableStatistics; enabled_ = config.enableStatistics;
UpdateUI = false; UpdateUI = false;
@@ -86,6 +105,7 @@ namespace v2rayN.Handler
GrpcInit(); GrpcInit();
workThread_ = new Thread(new ThreadStart(Run)); workThread_ = new Thread(new ThreadStart(Run));
workThread_.IsBackground = true;
workThread_.Start(); workThread_.Start();
} }
@@ -95,7 +115,7 @@ namespace v2rayN.Handler
{ {
Global.statePort = GetFreePort(); Global.statePort = GetFreePort();
channel_ = new Channel($"127.0.0.1:{Global.statePort}", ChannelCredentials.Insecure); channel_ = new Channel($"{Global.Loopback}:{Global.statePort}", ChannelCredentials.Insecure);
channel_.ConnectAsync(); channel_.ConnectAsync();
client_ = new StatsService.StatsServiceClient(channel_); client_ = new StatsService.StatsServiceClient(channel_);
} }
@@ -192,7 +212,7 @@ namespace v2rayN.Handler
name = nStr[1]; name = nStr[1];
type = nStr[3]; type = nStr[3];
if (name == Global.InboundProxyTagName) if (name == Global.agentTag)
{ {
if (type == "uplink") if (type == "uplink")
{ {

View File

@@ -1,10 +1,10 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;
using v2rayN.Mode;
using System.Net;
using System.Text;
using System.Linq; using System.Linq;
using System.Net;
using v2rayN.Base;
using v2rayN.Mode;
namespace v2rayN.Handler namespace v2rayN.Handler
{ {
@@ -159,7 +159,7 @@ namespace v2rayN.Handler
} }
else else
{ {
inbound.listen = "127.0.0.1"; inbound.listen = Global.Loopback;
} }
//开启udp //开启udp
inbound.settings.udp = config.inbound[0].udpEnabled; inbound.settings.udp = config.inbound[0].udpEnabled;
@@ -655,7 +655,7 @@ namespace v2rayN.Handler
if (!v2rayConfig.routing.rules.Exists(item => { return item.outboundTag == tag; })) if (!v2rayConfig.routing.rules.Exists(item => { return item.outboundTag == tag; }))
{ {
var apiRoutingRule = new Mode.RulesItem(); var apiRoutingRule = new Mode.RulesItem();
apiRoutingRule.inboundTag = tag; apiRoutingRule.inboundTag = new List<string> { tag };
apiRoutingRule.outboundTag = tag; apiRoutingRule.outboundTag = tag;
apiRoutingRule.type = "field"; apiRoutingRule.type = "field";
v2rayConfig.routing.rules.Add(apiRoutingRule); v2rayConfig.routing.rules.Add(apiRoutingRule);
@@ -688,11 +688,21 @@ namespace v2rayN.Handler
return -1; return -1;
} }
string addressFileName = config.address();
if (File.Exists(fileName)) if (File.Exists(fileName))
{ {
File.Delete(fileName); File.Delete(fileName);
} }
string addressFileName = config.address();
if (!File.Exists(addressFileName))
{
addressFileName = Path.Combine(Utils.GetTempPath(), addressFileName);
}
if (!File.Exists(addressFileName))
{
msg = UIRes.I18N("FailedGenDefaultConfiguration");
return -1;
}
File.Copy(addressFileName, fileName); File.Copy(addressFileName, fileName);
msg = string.Format(UIRes.I18N("SuccessfulConfiguration"), config.getSummary()); msg = string.Format(UIRes.I18N("SuccessfulConfiguration"), config.getSummary());
@@ -1365,5 +1375,90 @@ namespace v2rayN.Handler
#endregion #endregion
#region Gen speedtest config
public static int GenerateClientSpeedtestConfig(Config config, List<int> selecteds, string fileName, out string msg)
{
msg = string.Empty;
try
{
if (config == null
|| config.index < 0
|| config.vmess.Count <= 0
|| config.index > config.vmess.Count - 1
)
{
msg = UIRes.I18N("CheckServerSettings");
return -1;
}
msg = UIRes.I18N("InitialConfiguration");
string result = Utils.GetEmbedText(SampleClient);
if (Utils.IsNullOrEmpty(result))
{
msg = UIRes.I18N("FailedGetDefaultConfiguration");
return -1;
}
V2rayConfig v2rayConfig = Utils.FromJson<V2rayConfig>(result);
if (v2rayConfig == null)
{
msg = UIRes.I18N("FailedGenDefaultConfiguration");
return -1;
}
log(config, ref v2rayConfig, false);
//routing(config, ref v2rayConfig);
dns(config, ref v2rayConfig);
var httpPort = config.GetLocalPort("speedtest");
for (int k = 0; k < selecteds.Count; k++)
{
int index = selecteds[k];
if (config.vmess[index].configType == (int)EConfigType.Custom)
{
continue;
}
config.index = index;
var inbound = new Inbounds();
inbound.listen = Global.Loopback;
inbound.port = httpPort + index;
inbound.protocol = Global.InboundHttp;
inbound.tag = Global.InboundHttp + inbound.port.ToString();
v2rayConfig.inbounds.Add(inbound);
var v2rayConfigCopy = Utils.FromJson<V2rayConfig>(result);
outbound(config, ref v2rayConfigCopy);
v2rayConfigCopy.outbounds[0].tag = Global.agentTag + inbound.port.ToString();
v2rayConfig.outbounds.Add(v2rayConfigCopy.outbounds[0]);
var rule = new Mode.RulesItem();
rule.inboundTag = new List<string> { inbound.tag };
rule.outboundTag = v2rayConfigCopy.outbounds[0].tag;
rule.type = "field";
v2rayConfig.routing.rules.Add(rule);
}
Utils.ToJsonFile(v2rayConfig, fileName);
msg = string.Format(UIRes.I18N("SuccessfulConfiguration"), config.getSummary());
}
catch (Exception ex)
{
msg = UIRes.I18N("FailedGenDefaultConfiguration");
return -1;
}
return 0;
}
#endregion
} }
} }

View File

@@ -52,6 +52,27 @@ namespace v2rayN.Handler
} }
} }
/// <summary>
/// 载入V2ray
/// </summary>
public void LoadV2ray(Config config, List<int> _selecteds)
{
if (Global.reloadV2ray)
{
string msg = string.Empty;
string fileName = Utils.GetPath(v2rayConfigRes);
if (V2rayConfigHandler.GenerateClientSpeedtestConfig(config, _selecteds, fileName, out msg) != 0)
{
ShowMsg(false, msg);
}
else
{
ShowMsg(true, msg);
V2rayRestart();
}
}
}
/// <summary> /// <summary>
/// V2ray重启 /// V2ray重启
/// </summary> /// </summary>
@@ -118,7 +139,7 @@ namespace v2rayN.Handler
} }
} }
if (Utils.IsNullOrEmpty(fileName)) if (Utils.IsNullOrEmpty(fileName))
{ {
string msg = string.Format(UIRes.I18N("NotFoundCore"), @"https://github.com/v2ray/v2ray-core/releases"); string msg = string.Format(UIRes.I18N("NotFoundCore"), @"https://github.com/v2ray/v2ray-core/releases");
ShowMsg(true, msg); ShowMsg(true, msg);
return; return;

View File

@@ -10,21 +10,6 @@ namespace v2rayN.HttpProxyHandler
/// </summary> /// </summary>
class HttpProxyHandle class HttpProxyHandle
{ {
private static string GetTimestamp(DateTime value)
{
return value.ToString("MMddHHmmssfff");
}
public static void ReSetPACProxy(Config config)
{
if (config.listenerType == 2)
{
//SysProxyHandle.SetIEProxy(false, false, null, null);
//PACServerHandle.Stop();
}
Update(config, false);
}
public static bool Update(Config config, bool forceDisable) public static bool Update(Config config, bool forceDisable)
{ {
int type = config.listenerType; int type = config.listenerType;
@@ -38,45 +23,40 @@ namespace v2rayN.HttpProxyHandler
{ {
if (type != 0) if (type != 0)
{ {
var port = Global.sysAgentPort; var port = Global.httpPort;
if (port <= 0) if (port <= 0)
{ {
return false; return false;
} }
if (type == 1) if (type == 1)
{ {
PACServerHandle.Stop(); //PACServerHandle.Stop();
PACFileWatcherHandle.StopWatch(); SysProxyHandle.SetIEProxy(true, true, $"{Global.Loopback}:{port}", null);
SysProxyHandle.SetIEProxy(true, true, "127.0.0.1:" + port, null);
} }
else if (type == 2) else if (type == 2)
{ {
string pacUrl = GetPacUrl(); string pacUrl = GetPacUrl();
SysProxyHandle.SetIEProxy(true, false, null, pacUrl); SysProxyHandle.SetIEProxy(true, false, null, pacUrl);
PACServerHandle.Stop(); //PACServerHandle.Stop();
PACServerHandle.Init(config); PACServerHandle.Init(config);
PACFileWatcherHandle.StartWatch(config);
} }
else if (type == 3) else if (type == 3)
{ {
PACServerHandle.Stop(); //PACServerHandle.Stop();
PACFileWatcherHandle.StopWatch();
SysProxyHandle.SetIEProxy(false, false, null, null); SysProxyHandle.SetIEProxy(false, false, null, null);
} }
else if (type == 4) else if (type == 4)
{ {
string pacUrl = GetPacUrl(); string pacUrl = GetPacUrl();
SysProxyHandle.SetIEProxy(false, false, null, null); SysProxyHandle.SetIEProxy(false, false, null, null);
PACServerHandle.Stop(); //PACServerHandle.Stop();
PACServerHandle.Init(config); PACServerHandle.Init(config);
PACFileWatcherHandle.StartWatch(config);
} }
} }
else else
{ {
SysProxyHandle.SetIEProxy(false, false, null, null); SysProxyHandle.SetIEProxy(false, false, null, null);
PACServerHandle.Stop(); //PACServerHandle.Stop();
PACFileWatcherHandle.StopWatch();
} }
} }
catch (Exception ex) catch (Exception ex)
@@ -94,7 +74,7 @@ namespace v2rayN.HttpProxyHandler
{ {
try try
{ {
int localPort = config.GetLocalPort("socks"); int localPort = config.GetLocalPort(Global.InboundSocks);
if (localPort > 0) if (localPort > 0)
{ {
PrivoxyHandler.Instance.Start(localPort, config); PrivoxyHandler.Instance.Start(localPort, config);
@@ -102,8 +82,8 @@ namespace v2rayN.HttpProxyHandler
{ {
Global.sysAgent = true; Global.sysAgent = true;
Global.socksPort = localPort; Global.socksPort = localPort;
Global.sysAgentPort = PrivoxyHandler.Instance.RunningPort; Global.httpPort = PrivoxyHandler.Instance.RunningPort;
Global.pacPort = Global.sysAgentPort + 1; Global.pacPort = config.GetLocalPort("pac");
} }
} }
} }
@@ -120,16 +100,11 @@ namespace v2rayN.HttpProxyHandler
{ {
try try
{ {
////开启全局代理则关闭
//if (Global.sysAgent)
//{
PrivoxyHandler.Instance.Stop(); PrivoxyHandler.Instance.Stop();
Global.sysAgent = false; Global.sysAgent = false;
Global.socksPort = 0; Global.socksPort = 0;
Global.sysAgentPort = 0; Global.httpPort = 0;
Global.pacPort = 0;
//}
} }
catch catch
{ {
@@ -151,7 +126,7 @@ namespace v2rayN.HttpProxyHandler
} }
else else
{ {
int localPort = config.GetLocalPort("socks"); int localPort = config.GetLocalPort(Global.InboundSocks);
if (localPort != Global.socksPort) if (localPort != Global.socksPort)
{ {
isRestart = true; isRestart = true;
@@ -168,9 +143,7 @@ namespace v2rayN.HttpProxyHandler
public static string GetPacUrl() public static string GetPacUrl()
{ {
string pacUrl = string.Format("http://127.0.0.1:{0}/pac/?t={1}", Global.pacPort, string pacUrl = $"http://{Global.Loopback}:{Global.pacPort}/pac/?t={ DateTime.Now.ToString("HHmmss")}";
GetTimestamp(DateTime.Now));
return pacUrl; return pacUrl;
} }
} }

View File

@@ -1,45 +0,0 @@
using System.IO;
using System.Windows.Forms;
using v2rayN.Mode;
namespace v2rayN.HttpProxyHandler
{
/// <summary>
/// 提供PAC功能支持
/// </summary>
class PACFileWatcherHandle
{
private static FileSystemWatcher fileSystemWatcher;
private static long fileSize;
public static void StartWatch(Config config)
{
if (fileSystemWatcher == null)
{
fileSystemWatcher = new FileSystemWatcher(Utils.StartupPath());
fileSystemWatcher.Filter = "pac.txt";
fileSystemWatcher.NotifyFilter = NotifyFilters.Size;
fileSystemWatcher.Changed += (sender, args) =>
{
var fileInfo = new FileInfo(args.FullPath);
if (fileSize != fileInfo.Length)
{
fileSize = fileInfo.Length;
HttpProxyHandle.ReSetPACProxy(config);
}
};
}
fileSystemWatcher.EnableRaisingEvents = true;
}
public static void StopWatch()
{
if (fileSystemWatcher != null)
{
fileSystemWatcher.EnableRaisingEvents = false;
}
}
}
}

View File

@@ -4,6 +4,7 @@ using System.IO;
using System.Net; using System.Net;
using System.Text; using System.Text;
using Newtonsoft.Json; using Newtonsoft.Json;
using v2rayN.Base;
using v2rayN.Mode; using v2rayN.Mode;
using v2rayN.Properties; using v2rayN.Properties;
@@ -28,13 +29,13 @@ namespace v2rayN.HttpProxyHandler
} }
} }
private const string GFWLIST_URL = "https://raw.githubusercontent.com/gfwlist/gfwlist/master/gfwlist.txt";
private static readonly IEnumerable<char> IgnoredLineBegins = new[] { '!', '[' }; private static readonly IEnumerable<char> IgnoredLineBegins = new[] { '!', '[' };
public void UpdatePACFromGFWList(Config config) public void UpdatePACFromGFWList(Config config)
{ {
string url = GFWLIST_URL; string url = Global.GFWLIST_URL;
if (!Utils.IsNullOrEmpty(config.urlGFWList)) if (!Utils.IsNullOrEmpty(config.urlGFWList))
{ {
url = config.urlGFWList; url = config.urlGFWList;
@@ -46,7 +47,7 @@ namespace v2rayN.HttpProxyHandler
//{ //{
// throw new Exception("未发现HTTP代理无法设置代理更新"); // throw new Exception("未发现HTTP代理无法设置代理更新");
//} //}
WebClient http = new WebClient(); var http = new WebClientEx();
//http.Headers.Add("Connection", "Close"); //http.Headers.Add("Connection", "Close");
//http.Proxy = new WebProxy(IPAddress.Loopback.ToString(), httpProxy.localPort); //http.Proxy = new WebProxy(IPAddress.Loopback.ToString(), httpProxy.localPort);
http.DownloadStringCompleted += http_DownloadStringCompleted; http.DownloadStringCompleted += http_DownloadStringCompleted;

View File

@@ -5,6 +5,7 @@ using System.Text;
using v2rayN.Mode; using v2rayN.Mode;
using v2rayN.Properties; using v2rayN.Properties;
using v2rayN.Tool; using v2rayN.Tool;
using v2rayN.Base;
namespace v2rayN.HttpProxyHandler namespace v2rayN.HttpProxyHandler
{ {
@@ -27,15 +28,17 @@ namespace v2rayN.HttpProxyHandler
public static void Init(Config config) public static void Init(Config config)
{ {
//if (InitServer("*")) Global.pacPort = config.GetLocalPort("pac");
//{
// pacPort = Global.pacPort; if (InitServer("*"))
//}
if (InitServer("127.0.0.1"))
{ {
pacPort = Global.pacPort; pacPort = Global.pacPort;
} }
else if (InitServerB("127.0.0.1")) //else if (InitServer(Global.Loopback))
//{
// pacPort = Global.pacPort;
//}
else if (InitServerB(Global.Loopback))
{ {
pacPort = Global.pacPort; pacPort = Global.pacPort;
} }
@@ -66,7 +69,6 @@ namespace v2rayN.HttpProxyHandler
server = new HttpWebServer(SendResponse, prefixes); server = new HttpWebServer(SendResponse, prefixes);
server.Run(); server.Run();
//pacPort = Global.pacPort;
} }
} }
Utils.SaveLog("Webserver at " + address); Utils.SaveLog("Webserver at " + address);
@@ -94,7 +96,6 @@ namespace v2rayN.HttpProxyHandler
if (serverB == null) if (serverB == null)
{ {
serverB = new HttpWebServerB(Global.pacPort, SendResponse); serverB = new HttpWebServerB(Global.pacPort, SendResponse);
//pacPort = Global.pacPort;
} }
} }
Utils.SaveLog("WebserverB at " + address); Utils.SaveLog("WebserverB at " + address);
@@ -123,18 +124,23 @@ namespace v2rayN.HttpProxyHandler
public static void Stop() public static void Stop()
{ {
//try try
//{ {
// if (server != null) if (server != null)
// { {
// server.Stop(); server.Stop();
// server = null; server = null;
// } }
//} if (serverB != null)
//catch (Exception ex) {
//{ serverB.Stop();
// Utils.SaveLog("Webserver Stop " + ex.Message); serverB = null;
//} }
}
catch (Exception ex)
{
Utils.SaveLog("Webserver Stop " + ex.Message);
}
//try //try
//{ //{
@@ -158,7 +164,7 @@ namespace v2rayN.HttpProxyHandler
private static string GetPacList(string address) private static string GetPacList(string address)
{ {
var port = Global.sysAgentPort; var port = Global.httpPort;
if (port <= 0) if (port <= 0)
{ {
return "No port"; return "No port";

View File

@@ -24,8 +24,6 @@ namespace v2rayN.HttpProxyHandler
private static string _uniqueConfigFile; private static string _uniqueConfigFile;
private static Job _privoxyJob; private static Job _privoxyJob;
private Process _process; private Process _process;
private int _runningPort;
private bool _isRunning;
static PrivoxyHandler() static PrivoxyHandler()
{ {
@@ -36,7 +34,6 @@ namespace v2rayN.HttpProxyHandler
_privoxyJob = new Job(); _privoxyJob = new Job();
FileManager.UncompressFile(Utils.GetTempPath("v2ray_privoxy.exe"), Resources.privoxy_exe); FileManager.UncompressFile(Utils.GetTempPath("v2ray_privoxy.exe"), Resources.privoxy_exe);
FileManager.UncompressFile(Utils.GetTempPath("mgwz.dll"), Resources.mgwz_dll);
} }
catch (IOException ex) catch (IOException ex)
{ {
@@ -66,18 +63,7 @@ namespace v2rayN.HttpProxyHandler
public int RunningPort public int RunningPort
{ {
get get; set;
{
return _runningPort;
}
}
public bool IsRunning
{
get
{
return _isRunning;
}
} }
public void Start(int localPort, Config config) public void Start(int localPort, Config config)
@@ -90,16 +76,16 @@ namespace v2rayN.HttpProxyHandler
KillProcess(p); KillProcess(p);
} }
string privoxyConfig = Resources.privoxy_conf; string privoxyConfig = Resources.privoxy_conf;
_runningPort = GetFreePort(localPort); RunningPort = config.GetLocalPort(Global.InboundHttp);
privoxyConfig = privoxyConfig.Replace("__SOCKS_PORT__", localPort.ToString()); privoxyConfig = privoxyConfig.Replace("__SOCKS_PORT__", localPort.ToString());
privoxyConfig = privoxyConfig.Replace("__PRIVOXY_BIND_PORT__", _runningPort.ToString()); privoxyConfig = privoxyConfig.Replace("__PRIVOXY_BIND_PORT__", RunningPort.ToString());
if (config.allowLANConn) if (config.allowLANConn)
{ {
privoxyConfig = privoxyConfig.Replace("__PRIVOXY_BIND_IP__", "0.0.0.0"); privoxyConfig = privoxyConfig.Replace("__PRIVOXY_BIND_IP__", "0.0.0.0");
} }
else else
{ {
privoxyConfig = privoxyConfig.Replace("__PRIVOXY_BIND_IP__", "127.0.0.1"); privoxyConfig = privoxyConfig.Replace("__PRIVOXY_BIND_IP__", Global.Loopback);
} }
FileManager.ByteArrayToFile(Utils.GetTempPath(_uniqueConfigFile), Encoding.UTF8.GetBytes(privoxyConfig)); FileManager.ByteArrayToFile(Utils.GetTempPath(_uniqueConfigFile), Encoding.UTF8.GetBytes(privoxyConfig));
@@ -123,7 +109,7 @@ namespace v2rayN.HttpProxyHandler
* when ss exit unexpectedly, this process will be forced killed by system. * when ss exit unexpectedly, this process will be forced killed by system.
*/ */
_privoxyJob.AddProcess(_process.Handle); _privoxyJob.AddProcess(_process.Handle);
_isRunning = true;
} }
} }
@@ -134,7 +120,7 @@ namespace v2rayN.HttpProxyHandler
KillProcess(_process); KillProcess(_process);
_process.Dispose(); _process.Dispose();
_process = null; _process = null;
_isRunning = false; RunningPort = 0;
} }
} }
@@ -191,25 +177,5 @@ namespace v2rayN.HttpProxyHandler
} }
} }
private int GetFreePort(int localPort)
{
int defaultPort = 8123;
try
{
//// TCP stack please do me a favor
//TcpListener l = new TcpListener(IPAddress.Loopback, 0);
//l.Start();
//var port = ((IPEndPoint)l.LocalEndpoint).Port;
//l.Stop();
//return port;
return localPort + 1;
}
catch (Exception ex)
{
// in case access denied
Utils.SaveLog(ex.Message, ex);
return defaultPort;
}
}
} }
} }

View File

@@ -1,8 +1,9 @@
using System; using Newtonsoft.Json;
using System;
using System.Diagnostics; using System.Diagnostics;
using System.IO; using System.IO;
using System.Text; using System.Text;
using Newtonsoft.Json; using v2rayN.Base;
using v2rayN.Mode; using v2rayN.Mode;
using v2rayN.Properties; using v2rayN.Properties;
using v2rayN.Tool; using v2rayN.Tool;
@@ -49,14 +50,14 @@ namespace v2rayN.HttpProxyHandler
public static void SetIEProxy(bool enable, bool global, string proxyServer, string pacURL) public static void SetIEProxy(bool enable, bool global, string proxyServer, string pacURL)
{ {
Read(); //Read();
if (!_userSettings.UserSettingsRecorded) //if (!_userSettings.UserSettingsRecorded)
{ //{
// record user settings // // record user settings
ExecSysproxy("query"); // ExecSysproxy("query");
ParseQueryStr(_queryStr); // ParseQueryStr(_queryStr);
} //}
string arguments; string arguments;
if (enable) if (enable)
@@ -71,17 +72,19 @@ namespace v2rayN.HttpProxyHandler
else else
{ {
// restore user settings // restore user settings
var flags = _userSettings.Flags; //var flags = _userSettings.Flags;
var proxy_server = _userSettings.ProxyServer ?? "-"; //var proxy_server = _userSettings.ProxyServer ?? "-";
var bypass_list = _userSettings.BypassList ?? "-"; //var bypass_list = _userSettings.BypassList ?? "-";
var pac_url = _userSettings.PacUrl ?? "-"; //var pac_url = _userSettings.PacUrl ?? "-";
arguments = string.Format("set {0} {1} {2} {3}", flags, proxy_server, bypass_list, pac_url); ////arguments = string.Format("set {0} {1} {2} {3}", flags, proxy_server, bypass_list, pac_url);
//set null settings
arguments = string.Format("set {0} {1} {2} {3}", 1, "-", "<local>", @"http://127.0.0.1");
// have to get new settings // have to get new settings
_userSettings.UserSettingsRecorded = false; //_userSettings.UserSettingsRecorded = false;
} }
Save(); //Save();
ExecSysproxy(arguments); ExecSysproxy(arguments);
} }

View File

@@ -1,22 +0,0 @@
using System;
using System.Net;
namespace v2rayN.HttpProxyHandler
{
class WebClientEx : WebClient
{
public int Timeout { get; set; }
public WebClientEx(int timeout = 3000)
{
Timeout = timeout;
}
protected override WebRequest GetWebRequest(Uri address)
{
var request = base.GetWebRequest(address);
request.Timeout = Timeout;
return request;
}
}
}

View File

@@ -1,6 +1,6 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Text.RegularExpressions; using v2rayN.Base;
namespace v2rayN.Mode namespace v2rayN.Mode
{ {
@@ -13,93 +13,147 @@ namespace v2rayN.Mode
/// <summary> /// <summary>
/// 本地监听 /// 本地监听
/// </summary> /// </summary>
public List<InItem> inbound { get; set; } public List<InItem> inbound
{
get; set;
}
/// <summary> /// <summary>
/// 允许日志 /// 允许日志
/// </summary> /// </summary>
public bool logEnabled { get; set; } public bool logEnabled
{
get; set;
}
/// <summary> /// <summary>
/// 日志等级 /// 日志等级
/// </summary> /// </summary>
public string loglevel { get; set; } public string loglevel
{
get; set;
}
/// <summary> /// <summary>
/// 活动配置序号 /// 活动配置序号
/// </summary> /// </summary>
public int index { get; set; } public int index
{
get; set;
}
/// <summary> /// <summary>
/// vmess服务器信息 /// vmess服务器信息
/// </summary> /// </summary>
public List<VmessItem> vmess { get; set; } public List<VmessItem> vmess
{
get; set;
}
/// <summary> /// <summary>
/// 允许Mux多路复用 /// 允许Mux多路复用
/// </summary> /// </summary>
public bool muxEnabled { get; set; } public bool muxEnabled
{
get; set;
}
/// <summary> /// <summary>
/// 域名解析策略 /// 域名解析策略
/// </summary> /// </summary>
public string domainStrategy { get; set; } public string domainStrategy
{
get; set;
}
/// <summary> /// <summary>
/// 路由模式 /// 路由模式
/// </summary> /// </summary>
public string routingMode { get; set; } public string routingMode
{
get; set;
}
/// <summary> /// <summary>
/// 用户自定义需代理的网址或ip /// 用户自定义需代理的网址或ip
/// </summary> /// </summary>
public List<string> useragent { get; set; } public List<string> useragent
{
get; set;
}
/// <summary> /// <summary>
/// 用户自定义直连的网址或ip /// 用户自定义直连的网址或ip
/// </summary> /// </summary>
public List<string> userdirect { get; set; } public List<string> userdirect
{
get; set;
}
/// <summary> /// <summary>
/// 用户自定义阻止的网址或ip /// 用户自定义阻止的网址或ip
/// </summary> /// </summary>
public List<string> userblock { get; set; } public List<string> userblock
{
get; set;
}
/// <summary> /// <summary>
/// KcpItem /// KcpItem
/// </summary> /// </summary>
public KcpItem kcpItem { get; set; } public KcpItem kcpItem
{
get; set;
}
/// <summary> /// <summary>
/// 启用Http代理 /// 启用Http代理
/// </summary> /// </summary>
public bool sysAgentEnabled { get; set; } public bool sysAgentEnabled
{
get; set;
}
/// <summary> /// <summary>
/// 监听状态 0-不改变 1-全局 2-PAC /// 监听状态 0-不改变 1-全局 2-PAC
/// </summary> /// </summary>
public int listenerType { get; set; } public int listenerType
{
get; set;
}
/// <summary> /// <summary>
/// 自定义GFWList url /// 自定义GFWList url
/// </summary> /// </summary>
public string urlGFWList { get; set; } public string urlGFWList
{
get; set;
}
/// <summary> /// <summary>
/// 允许来自局域网的连接 /// 允许来自局域网的连接
/// </summary> /// </summary>
public bool allowLANConn { get; set; } public bool allowLANConn
{
get; set;
}
/// <summary> /// <summary>
/// 启用实时网速和流量统计 /// 启用实时网速和流量统计
/// </summary> /// </summary>
public bool enableStatistics { get; set; } public bool enableStatistics
{
get; set;
}
/// <summary> /// <summary>
/// 视图刷新率 /// 视图刷新率
/// </summary> /// </summary>
public int statisticsFreshRate { get; set; } public int statisticsFreshRate
{
get; set;
}
/// <summary> /// <summary>
/// 统计数据缓存天数 [0, 30] /// 统计数据缓存天数 [0, 30]
@@ -107,9 +161,13 @@ namespace v2rayN.Mode
/// * 无论如何不会关闭总流量的缓存 /// * 无论如何不会关闭总流量的缓存
/// </summary> /// </summary>
private uint cacheDays; private uint cacheDays;
public uint CacheDays { public uint CacheDays
get { return cacheDays; } {
set get
{
return cacheDays;
}
set
{ {
if (value < 0) cacheDays = 0; if (value < 0) cacheDays = 0;
else if (value > 30) cacheDays = 30; else if (value > 30) cacheDays = 30;
@@ -120,15 +178,24 @@ namespace v2rayN.Mode
/// <summary> /// <summary>
/// 自定义远程DNS /// 自定义远程DNS
/// </summary> /// </summary>
public string remoteDNS { get; set; } public string remoteDNS
{
get; set;
}
/// <summary> /// <summary>
/// 订阅 /// 订阅
/// </summary> /// </summary>
public List<SubItem> subItem { get; set; } public List<SubItem> subItem
{
get; set;
}
/// <summary> /// <summary>
/// UI /// UI
/// </summary> /// </summary>
public UIItem uiItem { get; set; } public UIItem uiItem
{
get; set;
}
#region #region
@@ -236,6 +303,19 @@ namespace v2rayN.Mode
public int GetLocalPort(string protocol) public int GetLocalPort(string protocol)
{ {
if (protocol == Global.InboundHttp)
{
return GetLocalPort(Global.InboundSocks) + 1;
}
else if (protocol == "pac")
{
return GetLocalPort(Global.InboundSocks) + 2;
}
else if (protocol == "speedtest")
{
return GetLocalPort(Global.InboundSocks) + 103;
}
int localPort = 0; int localPort = 0;
foreach (InItem inItem in inbound) foreach (InItem inItem in inbound)
{ {
@@ -352,77 +432,125 @@ namespace v2rayN.Mode
/// <summary> /// <summary>
/// 版本(现在=2) /// 版本(现在=2)
/// </summary> /// </summary>
public int configVersion { get; set; } public int configVersion
{
get; set;
}
/// <summary> /// <summary>
/// 远程服务器地址 /// 远程服务器地址
/// </summary> /// </summary>
public string address { get; set; } public string address
{
get; set;
}
/// <summary> /// <summary>
/// 远程服务器端口 /// 远程服务器端口
/// </summary> /// </summary>
public int port { get; set; } public int port
{
get; set;
}
/// <summary> /// <summary>
/// 远程服务器ID /// 远程服务器ID
/// </summary> /// </summary>
public string id { get; set; } public string id
{
get; set;
}
/// <summary> /// <summary>
/// 远程服务器额外ID /// 远程服务器额外ID
/// </summary> /// </summary>
public int alterId { get; set; } public int alterId
{
get; set;
}
/// <summary> /// <summary>
/// 本地安全策略 /// 本地安全策略
/// </summary> /// </summary>
public string security { get; set; } public string security
{
get; set;
}
/// <summary> /// <summary>
/// tcp,kcp,ws /// tcp,kcp,ws
/// </summary> /// </summary>
public string network { get; set; } public string network
{
get; set;
}
/// <summary> /// <summary>
/// 备注或别名 /// 备注或别名
/// </summary> /// </summary>
public string remarks { get; set; } public string remarks
{
get; set;
}
/// <summary> /// <summary>
/// 伪装类型 /// 伪装类型
/// </summary> /// </summary>
public string headerType { get; set; } public string headerType
{
get; set;
}
/// <summary> /// <summary>
/// 伪装的域名 /// 伪装的域名
/// </summary> /// </summary>
public string requestHost { get; set; } public string requestHost
{
get; set;
}
/// <summary> /// <summary>
/// ws h2 path /// ws h2 path
/// </summary> /// </summary>
public string path { get; set; } public string path
{
get; set;
}
/// <summary> /// <summary>
/// 底层传输安全 /// 底层传输安全
/// </summary> /// </summary>
public string streamSecurity { get; set; } public string streamSecurity
{
get; set;
}
/// <summary> /// <summary>
/// 是否允许不安全连接(用于客户端) /// 是否允许不安全连接(用于客户端)
/// </summary> /// </summary>
public string allowInsecure { get; set; } public string allowInsecure
{
get; set;
}
/// <summary> /// <summary>
/// config type(1=normal,2=custom) /// config type(1=normal,2=custom)
/// </summary> /// </summary>
public int configType { get; set; } public int configType
{
get; set;
}
/// <summary> /// <summary>
/// ///
/// </summary> /// </summary>
public string testResult { get; set; } public string testResult
{
get; set;
}
/// <summary> /// <summary>
/// SubItem id /// SubItem id
/// </summary> /// </summary>
public string subid { get; set; } public string subid
{
get; set;
}
} }
[Serializable] [Serializable]
@@ -431,17 +559,26 @@ namespace v2rayN.Mode
/// <summary> /// <summary>
/// 本地监听端口 /// 本地监听端口
/// </summary> /// </summary>
public int localPort { get; set; } public int localPort
{
get; set;
}
/// <summary> /// <summary>
/// 协议默认为socks /// 协议默认为socks
/// </summary> /// </summary>
public string protocol { get; set; } public string protocol
{
get; set;
}
/// <summary> /// <summary>
/// 允许udp /// 允许udp
/// </summary> /// </summary>
public bool udpEnabled { get; set; } public bool udpEnabled
{
get; set;
}
/// <summary> /// <summary>
/// 开启流量探测 /// 开启流量探测
@@ -455,31 +592,52 @@ namespace v2rayN.Mode
/// <summary> /// <summary>
/// ///
/// </summary> /// </summary>
public int mtu { get; set; } public int mtu
{
get; set;
}
/// <summary> /// <summary>
/// ///
/// </summary> /// </summary>
public int tti { get; set; } public int tti
{
get; set;
}
/// <summary> /// <summary>
/// ///
/// </summary> /// </summary>
public int uplinkCapacity { get; set; } public int uplinkCapacity
{
get; set;
}
/// <summary> /// <summary>
/// ///
/// </summary> /// </summary>
public int downlinkCapacity { get; set; } public int downlinkCapacity
{
get; set;
}
/// <summary> /// <summary>
/// ///
/// </summary> /// </summary>
public bool congestion { get; set; } public bool congestion
{
get; set;
}
/// <summary> /// <summary>
/// ///
/// </summary> /// </summary>
public int readBufferSize { get; set; } public int readBufferSize
{
get; set;
}
/// <summary> /// <summary>
/// ///
/// </summary> /// </summary>
public int writeBufferSize { get; set; } public int writeBufferSize
{
get; set;
}
} }
@@ -489,17 +647,26 @@ namespace v2rayN.Mode
/// <summary> /// <summary>
/// ///
/// </summary> /// </summary>
public string id { get; set; } public string id
{
get; set;
}
/// <summary> /// <summary>
/// 备注 /// 备注
/// </summary> /// </summary>
public string remarks { get; set; } public string remarks
{
get; set;
}
/// <summary> /// <summary>
/// url /// url
/// </summary> /// </summary>
public string url { get; set; } public string url
{
get; set;
}
/// <summary> /// <summary>
/// enable /// enable

View File

@@ -310,7 +310,7 @@ namespace v2rayN.Mode
/// </summary> /// </summary>
public string port { get; set; } public string port { get; set; }
public string inboundTag { get; set; } public List<string> inboundTag { get; set; }
/// <summary> /// <summary>
/// ///
/// </summary> /// </summary>

View File

@@ -33,4 +33,4 @@ using System.Runtime.InteropServices;
// 方法是按如下所示使用“*”: // 方法是按如下所示使用“*”:
//[assembly: AssemblyVersion("1.0.*")] //[assembly: AssemblyVersion("1.0.*")]
//[assembly: AssemblyVersion("1.0.0")] //[assembly: AssemblyVersion("1.0.0")]
[assembly: AssemblyFileVersion("2.43")] [assembly: AssemblyFileVersion("2.49")]

View File

@@ -19,7 +19,7 @@ namespace v2rayN.Properties {
// 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。 // 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。
// 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen // 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen
// (以 /str 作为命令选项),或重新生成 VS 项目。 // (以 /str 作为命令选项),或重新生成 VS 项目。
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources { internal class Resources {
@@ -91,25 +91,35 @@ namespace v2rayN.Properties {
} }
/// <summary> /// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。 /// 查找 System.Byte[] 类型的本地化资源。
/// </summary> /// </summary>
internal static System.Drawing.Bitmap help { internal static byte[] grpc_csharp_ext_x64_dll {
get { get {
object obj = ResourceManager.GetObject("help", resourceCulture); object obj = ResourceManager.GetObject("grpc_csharp_ext_x64_dll", resourceCulture);
return ((System.Drawing.Bitmap)(obj)); return ((byte[])(obj));
} }
} }
/// <summary> /// <summary>
/// 查找 System.Byte[] 类型的本地化资源。 /// 查找 System.Byte[] 类型的本地化资源。
/// </summary> /// </summary>
internal static byte[] mgwz_dll { internal static byte[] grpc_csharp_ext_x86_dll {
get { get {
object obj = ResourceManager.GetObject("mgwz_dll", resourceCulture); object obj = ResourceManager.GetObject("grpc_csharp_ext_x86_dll", resourceCulture);
return ((byte[])(obj)); return ((byte[])(obj));
} }
} }
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap help {
get {
object obj = ResourceManager.GetObject("help", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary> /// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。 /// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary> /// </summary>
@@ -157,6 +167,7 @@ namespace v2rayN.Properties {
///show-on-task-bar 0 ///show-on-task-bar 0
///activity-animation 0 ///activity-animation 0
///forward-socks5 / 127.0.0.1:__SOCKS_PORT__ . ///forward-socks5 / 127.0.0.1:__SOCKS_PORT__ .
///max-client-connections 2048
///hide-console ///hide-console
/// 的本地化字符串。 /// 的本地化字符串。
/// </summary> /// </summary>

View File

@@ -127,12 +127,15 @@
<data name="checkupdate" type="System.Resources.ResXFileRef, System.Windows.Forms"> <data name="checkupdate" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\resources\checkupdate.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value> <value>..\resources\checkupdate.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data> </data>
<data name="grpc_csharp_ext_x64_dll" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\resources\grpc_csharp_ext.x64.dll.gz;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="grpc_csharp_ext_x86_dll" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\resources\grpc_csharp_ext.x86.dll.gz;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="help" type="System.Resources.ResXFileRef, System.Windows.Forms"> <data name="help" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\resources\help.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value> <value>..\resources\help.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data> </data>
<data name="mgwz_dll" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\resources\mgwz.dll.gz;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="minimize" type="System.Resources.ResXFileRef, System.Windows.Forms"> <data name="minimize" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\minimize.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value> <value>..\Resources\minimize.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data> </data>

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -76,7 +76,7 @@
"domainStrategy": "IPIfNonMatch", "domainStrategy": "IPIfNonMatch",
"rules": [ "rules": [
{ {
"inboundTag": "api", "inboundTag": ["api"],
"outboundTag": "api", "outboundTag": "api",
"type": "field" "type": "field"
} }

View File

@@ -0,0 +1 @@
geosite:category-ads,

View File

@@ -0,0 +1,132 @@
domain:12306.com,
domain:51ym.me,
domain:52pojie.cn,
domain:8686c.com,
domain:abercrombie.com,
domain:adobesc.com,
domain:air-matters.com,
domain:air-matters.io,
domain:airtable.com,
domain:akadns.net,
domain:apache.org,
domain:api.crisp.chat,
domain:api.termius.com,
domain:appshike.com,
domain:appstore.com,
domain:aweme.snssdk.com,
domain:bababian.com,
domain:battle.net,
domain:beatsbydre.com,
domain:bet365.com,
domain:bilibili.cn,
domain:ccgslb.com,
domain:ccgslb.net,
domain:chunbo.com,
domain:chunboimg.com,
domain:clashroyaleapp.com,
domain:cloudsigma.com,
domain:cloudxns.net,
domain:cmfu.com,
domain:culturedcode.com,
domain:dct-cloud.com,
domain:didialift.com,
domain:douyutv.com,
domain:duokan.com,
domain:dytt8.net,
domain:easou.com,
domain:ecitic.net,
domain:eclipse.org,
domain:eudic.net,
domain:ewqcxz.com,
domain:fir.im,
domain:frdic.com,
domain:fresh-ideas.cc,
domain:godic.net,
domain:goodread.com,
domain:haibian.com,
domain:hdslb.net,
domain:hollisterco.com,
domain:hongxiu.com,
domain:hxcdn.net,
domain:images.unsplash.com,
domain:img4me.com,
domain:ipify.org,
domain:ixdzs.com,
domain:jd.hk,
domain:jianshuapi.com,
domain:jomodns.com,
domain:jsboxbbs.com,
domain:knewone.com,
domain:kuaidi100.com,
domain:lemicp.com,
domain:letvcloud.com,
domain:lizhi.io,
domain:localizecdn.com,
domain:lucifr.com,
domain:luoo.net,
domain:mai.tn,
domain:maven.org,
domain:miwifi.com,
domain:moji.com,
domain:moke.com,
domain:mtalk.google.com,
domain:mxhichina.com,
domain:myqcloud.com,
domain:myunlu.com,
domain:netease.com,
domain:nfoservers.com,
domain:nssurge.com,
domain:nuomi.com,
domain:ourdvs.com,
domain:overcast.fm,
domain:paypal.com,
domain:paypalobjects.com,
domain:pgyer.com,
domain:qdaily.com,
domain:qdmm.com,
domain:qin.io,
domain:qingmang.me,
domain:qingmang.mobi,
domain:qqurl.com,
domain:rarbg.to,
domain:rrmj.tv,
domain:ruguoapp.com,
domain:sm.ms,
domain:snwx.com,
domain:soku.com,
domain:startssl.com,
domain:store.steampowered.com,
domain:symcd.com,
domain:teamviewer.com,
domain:tmzvps.com,
domain:trello.com,
domain:trellocdn.com,
domain:ttmeiju.com,
domain:udache.com,
domain:uxengine.net,
domain:weather.bjango.com,
domain:weather.com,
domain:webqxs.com,
domain:weico.cc,
domain:wenku8.net,
domain:werewolf.53site.com,
domain:windowsupdate.com,
domain:wkcdn.com,
domain:workflowy.com,
domain:xdrig.com,
domain:xiaojukeji.com,
domain:xiaomi.net,
domain:xiaomicp.com,
domain:ximalaya.com,
domain:xitek.com,
domain:xmcdn.com,
domain:xslb.net,
domain:xteko.com,
domain:yach.me,
domain:yixia.com,
domain:yunjiasu-cdn.net,
domain:zealer.com,
domain:zgslb.net,
domain:zimuzu.tv,
domain:zmz002.com,
domain:samsungdm.com,

View File

@@ -0,0 +1,33 @@
geosite:google,
geosite:github,
geosite:netflix,
geosite:steam,
geosite:telegram,
geosite:tumblr,
geosite:speedtest,
geosite:bbc,
domain:gvt1.com,
domain:textnow.com,
domain:twitch.tv,
domain:wikileaks.org,
domain:naver.com,
91.108.4.0/22,
91.108.8.0/22,
91.108.12.0/22,
91.108.20.0/22,
91.108.36.0/23,
91.108.38.0/23,
91.108.56.0/22,
149.154.160.0/20,
149.154.164.0/22,
149.154.172.0/22,
74.125.0.0/16,
173.194.0.0/16,
172.217.0.0/16,
216.58.200.0/24,
216.58.220.0/24,
91.108.56.116,
91.108.56.0/24,
109.239.140.0/24,
149.154.167.0/24,
149.154.175.0/24,

View File

@@ -18,6 +18,7 @@ using ZXing;
using ZXing.Common; using ZXing.Common;
using ZXing.QrCode; using ZXing.QrCode;
using System.Security.Principal; using System.Security.Principal;
using v2rayN.Base;
namespace v2rayN namespace v2rayN
{ {

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<packages> <packages>
<package id="Grpc.Tools" version="2.23.0" targetFramework="net46" developmentDependency="true" /> <package id="Grpc.Tools" version="2.24.0" targetFramework="net46" developmentDependency="true" />
</packages> </packages>

View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="..\packages\Grpc.Tools.2.23.0\build\Grpc.Tools.props" Condition="Exists('..\packages\Grpc.Tools.2.23.0\build\Grpc.Tools.props')" /> <Import Project="..\packages\Grpc.Tools.2.24.0\build\Grpc.Tools.props" Condition="Exists('..\packages\Grpc.Tools.2.24.0\build\Grpc.Tools.props')" />
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" /> <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup> <PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
@@ -114,6 +114,7 @@
<HintPath>LIB\System.Memory.dll</HintPath> <HintPath>LIB\System.Memory.dll</HintPath>
<Private>False</Private> <Private>False</Private>
</Reference> </Reference>
<Reference Include="System.Messaging" />
<Reference Include="System.Net" /> <Reference Include="System.Net" />
<Reference Include="System.Runtime.CompilerServices.Unsafe, Version=4.0.4.1, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"> <Reference Include="System.Runtime.CompilerServices.Unsafe, Version=4.0.4.1, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion> <SpecificVersion>False</SpecificVersion>
@@ -140,7 +141,7 @@
<Compile Include="Forms\AddServer4Form.Designer.cs"> <Compile Include="Forms\AddServer4Form.Designer.cs">
<DependentUpon>AddServer4Form.cs</DependentUpon> <DependentUpon>AddServer4Form.cs</DependentUpon>
</Compile> </Compile>
<Compile Include="Forms\ListViewFlickerFree.cs"> <Compile Include="Base\ListViewFlickerFree.cs">
<SubType>Component</SubType> <SubType>Component</SubType>
</Compile> </Compile>
<Compile Include="Forms\MainForm.cs"> <Compile Include="Forms\MainForm.cs">
@@ -149,6 +150,12 @@
<Compile Include="Forms\MainForm.Designer.cs"> <Compile Include="Forms\MainForm.Designer.cs">
<DependentUpon>MainForm.cs</DependentUpon> <DependentUpon>MainForm.cs</DependentUpon>
</Compile> </Compile>
<Compile Include="Forms\RoutingRuleSettingForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Forms\RoutingRuleSettingForm.Designer.cs">
<DependentUpon>RoutingRuleSettingForm.cs</DependentUpon>
</Compile>
<Compile Include="Forms\SubSettingForm.cs"> <Compile Include="Forms\SubSettingForm.cs">
<SubType>Form</SubType> <SubType>Form</SubType>
</Compile> </Compile>
@@ -181,23 +188,27 @@
</Compile> </Compile>
<Compile Include="Handler\SpeedtestHandler.cs" /> <Compile Include="Handler\SpeedtestHandler.cs" />
<Compile Include="Handler\StatisticsHandler.cs" /> <Compile Include="Handler\StatisticsHandler.cs" />
<Compile Include="Handler\V2rayUpdateHandle.cs" /> <Compile Include="Handler\DownloadHandle.cs" />
<Compile Include="HttpProxyHandler\HttpWebServer.cs" /> <Compile Include="Base\HttpWebServer.cs" />
<Compile Include="HttpProxyHandler\HttpWebServerB.cs" /> <Compile Include="Base\HttpWebServerB.cs" />
<Compile Include="HttpProxyHandler\PACFileWatcherHandle.cs" />
<Compile Include="HttpProxyHandler\PrivoxyHandler.cs" /> <Compile Include="HttpProxyHandler\PrivoxyHandler.cs" />
<Compile Include="HttpProxyHandler\PACListHandle.cs" /> <Compile Include="HttpProxyHandler\PACListHandle.cs" />
<Compile Include="HttpProxyHandler\PACServerHandle.cs" /> <Compile Include="HttpProxyHandler\PACServerHandle.cs" />
<Compile Include="HttpProxyHandler\ProxySetting.cs" /> <Compile Include="HttpProxyHandler\ProxySetting.cs" />
<Compile Include="HttpProxyHandler\SysProxyHandle.cs" /> <Compile Include="HttpProxyHandler\SysProxyHandle.cs" />
<Compile Include="HttpProxyHandler\HttpProxyHandle.cs" /> <Compile Include="HttpProxyHandler\HttpProxyHandle.cs" />
<Compile Include="HttpProxyHandler\WebClientEx.cs"> <Compile Include="Base\WebClientEx.cs">
<SubType>Component</SubType> <SubType>Component</SubType>
</Compile> </Compile>
<Compile Include="Mode\EMove.cs" /> <Compile Include="Mode\EMove.cs" />
<Compile Include="Mode\ServerStatistics.cs" /> <Compile Include="Mode\ServerStatistics.cs" />
<Compile Include="Mode\SysproxyConfig.cs" /> <Compile Include="Mode\SysproxyConfig.cs" />
<Compile Include="Mode\EConfigType.cs" /> <Compile Include="Mode\EConfigType.cs" />
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
<Compile Include="Resx\ResUI.zh-Hans.Designer.cs"> <Compile Include="Resx\ResUI.zh-Hans.Designer.cs">
<AutoGen>True</AutoGen> <AutoGen>True</AutoGen>
<DesignTime>True</DesignTime> <DesignTime>True</DesignTime>
@@ -208,7 +219,7 @@
<DesignTime>True</DesignTime> <DesignTime>True</DesignTime>
<DependentUpon>ResUI.resx</DependentUpon> <DependentUpon>ResUI.resx</DependentUpon>
</Compile> </Compile>
<Compile Include="StringEx.cs"> <Compile Include="Base\StringEx.cs">
<SubType>Code</SubType> <SubType>Code</SubType>
</Compile> </Compile>
<Compile Include="Forms\AddServerForm.cs"> <Compile Include="Forms\AddServerForm.cs">
@@ -281,6 +292,9 @@
<DependentUpon>QRCodeControl.cs</DependentUpon> <DependentUpon>QRCodeControl.cs</DependentUpon>
<SubType>Designer</SubType> <SubType>Designer</SubType>
</EmbeddedResource> </EmbeddedResource>
<EmbeddedResource Include="Forms\RoutingRuleSettingForm.resx">
<DependentUpon>RoutingRuleSettingForm.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Forms\SubSettingControl.resx"> <EmbeddedResource Include="Forms\SubSettingControl.resx">
<DependentUpon>SubSettingControl.cs</DependentUpon> <DependentUpon>SubSettingControl.cs</DependentUpon>
</EmbeddedResource> </EmbeddedResource>
@@ -319,14 +333,9 @@
</EmbeddedResource> </EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx"> <EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator> <Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
<SubType>Designer</SubType> <SubType>Designer</SubType>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
</EmbeddedResource> </EmbeddedResource>
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
<DesignTime>True</DesignTime>
</Compile>
<EmbeddedResource Include="app.config"> <EmbeddedResource Include="app.config">
<SubType>Designer</SubType> <SubType>Designer</SubType>
</EmbeddedResource> </EmbeddedResource>
@@ -340,8 +349,13 @@
<DependentUpon>Settings.settings</DependentUpon> <DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput> <DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile> </Compile>
<EmbeddedResource Include="Sample\custom_routing_block" />
<EmbeddedResource Include="Sample\custom_routing_direct" />
<EmbeddedResource Include="Sample\custom_routing_proxy" />
<Protobuf Include="Protos\Statistics.proto" /> <Protobuf Include="Protos\Statistics.proto" />
<None Include="Resources\abp.js.gz" /> <None Include="Resources\abp.js.gz" />
<None Include="Resources\grpc_csharp_ext.x64.dll.gz" />
<None Include="Resources\grpc_csharp_ext.x86.dll.gz" />
<None Include="Resources\pac.txt.gz" /> <None Include="Resources\pac.txt.gz" />
<None Include="Resources\sysproxy.exe.gz" /> <None Include="Resources\sysproxy.exe.gz" />
<None Include="Resources\sysproxy64.exe.gz" /> <None Include="Resources\sysproxy64.exe.gz" />
@@ -392,7 +406,6 @@
<EmbeddedResource Include="Sample\SampleServerConfig.txt" /> <EmbeddedResource Include="Sample\SampleServerConfig.txt" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<None Include="Resources\mgwz.dll.gz" />
<None Include="Resources\privoxy.exe.gz" /> <None Include="Resources\privoxy.exe.gz" />
<None Include="Resources\restart.png" /> <None Include="Resources\restart.png" />
</ItemGroup> </ItemGroup>
@@ -420,12 +433,6 @@
<EmbeddedResource Include="LIB\System.Runtime.CompilerServices.Unsafe.dll" /> <EmbeddedResource Include="LIB\System.Runtime.CompilerServices.Unsafe.dll" />
<EmbeddedResource Include="LIB\zxing.dll" /> <EmbeddedResource Include="LIB\zxing.dll" />
<EmbeddedResource Include="LIB\zxing.presentation.dll" /> <EmbeddedResource Include="LIB\zxing.presentation.dll" />
<Content Include="grpc_csharp_ext.x64.dll">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="grpc_csharp_ext.x86.dll">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<EmbeddedResource Include="LIB\netstandard.dll" /> <EmbeddedResource Include="LIB\netstandard.dll" />
<Content Include="Resources\help.png" /> <Content Include="Resources\help.png" />
<None Include="Resources\notify.png" /> <None Include="Resources\notify.png" />
@@ -439,12 +446,12 @@
<Import Project="..\packages\Grpc.Core.2.23.0\build\net45\Grpc.Core.targets" Condition="Exists('..\packages\Grpc.Core.2.23.0\build\net45\Grpc.Core.targets')" /> <Import Project="..\packages\Grpc.Core.2.23.0\build\net45\Grpc.Core.targets" Condition="Exists('..\packages\Grpc.Core.2.23.0\build\net45\Grpc.Core.targets')" />
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild"> <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup> <PropertyGroup>
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText> <ErrorText>这台计算机上缺少此项目引用的 NuGet 程序包。使用“NuGet 程序包还原”可下载这些程序包。有关更多信息,请参见 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 {0}</ErrorText>
</PropertyGroup> </PropertyGroup>
<Error Condition="!Exists('..\packages\Grpc.Tools.2.23.0\build\Grpc.Tools.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Grpc.Tools.2.23.0\build\Grpc.Tools.props'))" /> <Error Condition="!Exists('..\packages\Grpc.Tools.2.24.0\build\Grpc.Tools.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Grpc.Tools.2.24.0\build\Grpc.Tools.props'))" />
<Error Condition="!Exists('..\packages\Grpc.Tools.2.23.0\build\Grpc.Tools.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Grpc.Tools.2.23.0\build\Grpc.Tools.targets'))" /> <Error Condition="!Exists('..\packages\Grpc.Tools.2.24.0\build\Grpc.Tools.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Grpc.Tools.2.24.0\build\Grpc.Tools.targets'))" />
</Target> </Target>
<Import Project="..\packages\Grpc.Tools.2.23.0\build\Grpc.Tools.targets" Condition="Exists('..\packages\Grpc.Tools.2.23.0\build\Grpc.Tools.targets')" /> <Import Project="..\packages\Grpc.Tools.2.24.0\build\Grpc.Tools.targets" Condition="Exists('..\packages\Grpc.Tools.2.24.0\build\Grpc.Tools.targets')" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it. <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets. Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild"> <Target Name="BeforeBuild">