diff --git a/v2rayN/v2rayN/Base/HttpWebServer.cs b/v2rayN/v2rayN/Base/HttpWebServer.cs deleted file mode 100644 index 9fa72495..00000000 --- a/v2rayN/v2rayN/Base/HttpWebServer.cs +++ /dev/null @@ -1,101 +0,0 @@ -using System; -using System.Net; -using System.Text; -using System.Threading; - -namespace v2rayN.Base -{ - public class HttpWebServer - { - private HttpListener _listener; - private Func _responderMethod; - - public HttpWebServer(string[] prefixes, Func method) - { - try - { - _listener = new HttpListener(); - - if (!HttpListener.IsSupported) - throw new NotSupportedException( - "Needs Windows XP SP2, Server 2003 or later."); - - // URI prefixes are required, for example - // "http://localhost:8080/index/". - if (prefixes == null || prefixes.Length == 0) - throw new ArgumentException("prefixes"); - - // A responder method is required - if (method == null) - throw new ArgumentException("method"); - - foreach (string s in prefixes) - _listener.Prefixes.Add(s); - - _responderMethod = method; - _listener.Start(); - - } - catch (Exception ex) - { - Utils.SaveLog(ex.Message, ex); - throw; - } - } - - public HttpWebServer(Func method, params string[] prefixes) - : this(prefixes, method) { } - - public void Run() - { - ThreadPool.QueueUserWorkItem((o) => - { - Utils.SaveLog("Webserver running..."); - try - { - while (_listener.IsListening) - { - ThreadPool.QueueUserWorkItem((c) => - { - HttpListenerContext ctx = c as HttpListenerContext; - try - { - string address = ctx.Request.LocalEndPoint.Address.ToString(); - Utils.SaveLog("Webserver Request " + address); - string rstr = _responderMethod(address); - byte[] buf = Encoding.UTF8.GetBytes(rstr); - ctx.Response.StatusCode = 200; - ctx.Response.ContentType = "application/x-ns-proxy-autoconfig"; - ctx.Response.ContentLength64 = buf.Length; - ctx.Response.OutputStream.Write(buf, 0, buf.Length); - } - catch - { - } // suppress any exceptions - finally - { - // always close the stream - ctx.Response.OutputStream.Close(); - } - }, _listener.GetContext()); - } - } - catch (Exception ex) - { - Utils.SaveLog(ex.Message, ex); - } // suppress any exceptions - }); - } - - public void Stop() - { - if (_listener != null) - { - _listener.Stop(); - _listener.Close(); - _listener = null; - } - } - - } -} diff --git a/v2rayN/v2rayN/Base/HttpWebServerB.cs b/v2rayN/v2rayN/Base/HttpWebServerB.cs deleted file mode 100644 index fcbca1dd..00000000 --- a/v2rayN/v2rayN/Base/HttpWebServerB.cs +++ /dev/null @@ -1,141 +0,0 @@ -using System; -using System.IO; -using System.Net; -using System.Net.Sockets; -using System.Threading; - -namespace v2rayN.Base -{ - public class HttpWebServerB - { - private TcpListener listener; - private int port; - private Func _responderMethod; - - public HttpWebServerB(int port, Func method) - { - this.port = port; - this._responderMethod = method; - - Thread thread = new Thread(StartListen) - { - IsBackground = true - }; - thread.Start(); - } - - public void Stop() - { - if (listener != null) - { - listener.Stop(); - listener = null; - } - } - - private void StartListen() - { - try - { - listener = new TcpListener(IPAddress.Any, port); - listener.Start(); - Utils.SaveLog("WebserverB running..."); - - while (true) - { - if (!listener.Pending()) - { - Thread.Sleep(100); - continue; - } - - TcpClient socket = listener.AcceptTcpClient(); - Thread thread = new Thread(new ParameterizedThreadStart(ProcessThread)) - { - IsBackground = true - }; - thread.Start(socket); - Thread.Sleep(1); - } - } - catch - { - Utils.SaveLog("WebserverB start fail."); - } - } - private void ProcessThread(object obj) - { - try - { - TcpClient socket = obj as TcpClient; - - BufferedStream inputStream = new BufferedStream(socket.GetStream()); - StreamWriter outputStream = new StreamWriter(new BufferedStream(socket.GetStream())); - if (inputStream.CanRead) - { - string data = ReadStream(inputStream); - - if (data.Contains("/pac/")) - { - if (_responderMethod != null) - { - string address = ((IPEndPoint)socket.Client.LocalEndPoint).Address.ToString(); - Utils.SaveLog("WebserverB Request " + address); - string pac = _responderMethod(address); - - if (inputStream.CanWrite) - { - WriteStream(outputStream, pac); - } - } - } - } - - outputStream.BaseStream.Flush(); - inputStream = null; - outputStream = null; - socket.Close(); - } - catch (Exception ex) - { - Utils.SaveLog(ex.Message, ex); - } - } - - private string ReadStream(Stream inputStream) - { - int nextchar; - string data = ""; - while (true) - { - nextchar = inputStream.ReadByte(); - if (nextchar == '\n') - { - break; - } - if (nextchar == '\r') - { - continue; - } - if (nextchar == -1) - { - Thread.Sleep(1); - continue; - }; - data += Convert.ToChar(nextchar); - } - return data; - } - - private void WriteStream(StreamWriter outputStream, string pac) - { - string content_type = "application/x-ns-proxy-autoconfig"; - outputStream.WriteLine("HTTP/1.1 200 OK"); - outputStream.WriteLine(String.Format("Content-Type:{0}", content_type)); - outputStream.WriteLine("Connection: close"); - outputStream.WriteLine(""); - outputStream.WriteLine(pac); - outputStream.Flush(); - } - } -} diff --git a/v2rayN/v2rayN/Forms/MainForm.Designer.cs b/v2rayN/v2rayN/Forms/MainForm.Designer.cs index 86a73954..1b546c7b 100644 --- a/v2rayN/v2rayN/Forms/MainForm.Designer.cs +++ b/v2rayN/v2rayN/Forms/MainForm.Designer.cs @@ -63,22 +63,17 @@ this.menuExport2ServerConfig = new System.Windows.Forms.ToolStripMenuItem(); this.menuExport2ShareUrl = new System.Windows.Forms.ToolStripMenuItem(); this.menuExport2SubContent = new System.Windows.Forms.ToolStripMenuItem(); - this.qrCodeControl = new v2rayN.Forms.QRCodeControl(); this.tsbServer = new System.Windows.Forms.ToolStripDropDownButton(); + this.qrCodeControl = new v2rayN.Forms.QRCodeControl(); this.notifyMain = new System.Windows.Forms.NotifyIcon(this.components); this.cmsMain = new System.Windows.Forms.ContextMenuStrip(this.components); this.menuSysAgentMode = new System.Windows.Forms.ToolStripMenuItem(); - this.menuNotEnabledHttp = new System.Windows.Forms.ToolStripMenuItem(); - this.menuGlobal = new System.Windows.Forms.ToolStripMenuItem(); - this.menuGlobalPAC = new System.Windows.Forms.ToolStripMenuItem(); - this.menuKeep = new System.Windows.Forms.ToolStripMenuItem(); - this.menuKeepPAC = new System.Windows.Forms.ToolStripMenuItem(); this.menuKeepNothing = new System.Windows.Forms.ToolStripMenuItem(); - this.menuKeepPACNothing = new System.Windows.Forms.ToolStripMenuItem(); + this.menuGlobal = new System.Windows.Forms.ToolStripMenuItem(); + this.menuKeepClear = new System.Windows.Forms.ToolStripMenuItem(); this.menuServers = new System.Windows.Forms.ToolStripMenuItem(); this.menuAddServers2 = new System.Windows.Forms.ToolStripMenuItem(); this.menuScanScreen2 = new System.Windows.Forms.ToolStripMenuItem(); - this.menuCopyPACUrl = new System.Windows.Forms.ToolStripMenuItem(); this.menuUpdateSubscriptions = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator(); this.menuExit = new System.Windows.Forms.ToolStripMenuItem(); @@ -93,8 +88,6 @@ this.toolSslHttpPortLab = new System.Windows.Forms.ToolStripStatusLabel(); this.toolSslHttpPort = new System.Windows.Forms.ToolStripStatusLabel(); this.toolSslBlank2 = new System.Windows.Forms.ToolStripStatusLabel(); - this.toolSslPacPortLab = new System.Windows.Forms.ToolStripStatusLabel(); - this.toolSslPacPort = new System.Windows.Forms.ToolStripStatusLabel(); this.toolSslBlank3 = new System.Windows.Forms.ToolStripStatusLabel(); this.toolSslServerSpeed = new System.Windows.Forms.ToolStripStatusLabel(); this.toolSslBlank4 = new System.Windows.Forms.ToolStripStatusLabel(); @@ -106,16 +99,16 @@ this.tsbSubUpdate = new System.Windows.Forms.ToolStripMenuItem(); this.tsbQRCodeSwitch = new System.Windows.Forms.ToolStripButton(); this.toolStripSeparator8 = new System.Windows.Forms.ToolStripSeparator(); - this.tsbOptionSetting = new System.Windows.Forms.ToolStripButton(); + this.tsbSetting = new System.Windows.Forms.ToolStripDropDownButton(); + this.tsbOptionSetting = new System.Windows.Forms.ToolStripMenuItem(); + this.tsbRoutingSetting = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripSeparator5 = new System.Windows.Forms.ToolStripSeparator(); this.tsbReload = new System.Windows.Forms.ToolStripButton(); this.toolStripSeparator7 = new System.Windows.Forms.ToolStripSeparator(); this.tsbCheckUpdate = new System.Windows.Forms.ToolStripDropDownButton(); this.tsbCheckUpdateN = new System.Windows.Forms.ToolStripMenuItem(); this.tsbCheckUpdateCore = new System.Windows.Forms.ToolStripMenuItem(); - this.tsbCheckUpdatePACList = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator13 = new System.Windows.Forms.ToolStripSeparator(); - this.tsbCheckClearPACList = new System.Windows.Forms.ToolStripMenuItem(); + this.tsbCheckUpdateXrayCore = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripSeparator10 = new System.Windows.Forms.ToolStripSeparator(); this.tsbHelp = new System.Windows.Forms.ToolStripDropDownButton(); this.tsbAbout = new System.Windows.Forms.ToolStripMenuItem(); @@ -211,6 +204,7 @@ this.menuExport2ShareUrl, this.menuExport2SubContent}); this.cmsLv.Name = "cmsLv"; + this.cmsLv.OwnerItem = this.tsbServer; // // menuAddVmessServer // @@ -388,11 +382,6 @@ this.menuExport2SubContent.Name = "menuExport2SubContent"; this.menuExport2SubContent.Click += new System.EventHandler(this.menuExport2SubContent_Click); // - // qrCodeControl - // - resources.ApplyResources(this.qrCodeControl, "qrCodeControl"); - this.qrCodeControl.Name = "qrCodeControl"; - // // tsbServer // resources.ApplyResources(this.tsbServer, "tsbServer"); @@ -400,6 +389,11 @@ this.tsbServer.Image = global::v2rayN.Properties.Resources.server; this.tsbServer.Name = "tsbServer"; // + // qrCodeControl + // + resources.ApplyResources(this.qrCodeControl, "qrCodeControl"); + this.qrCodeControl.Name = "qrCodeControl"; + // // notifyMain // resources.ApplyResources(this.notifyMain, "notifyMain"); @@ -415,7 +409,6 @@ this.menuServers, this.menuAddServers2, this.menuScanScreen2, - this.menuCopyPACUrl, this.menuUpdateSubscriptions, this.toolStripSeparator2, this.menuExit}); @@ -428,56 +421,28 @@ // resources.ApplyResources(this.menuSysAgentMode, "menuSysAgentMode"); this.menuSysAgentMode.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.menuNotEnabledHttp, - this.menuGlobal, - this.menuGlobalPAC, - this.menuKeep, - this.menuKeepPAC, this.menuKeepNothing, - this.menuKeepPACNothing}); + this.menuGlobal, + this.menuKeepClear}); this.menuSysAgentMode.Name = "menuSysAgentMode"; // - // menuNotEnabledHttp - // - resources.ApplyResources(this.menuNotEnabledHttp, "menuNotEnabledHttp"); - this.menuNotEnabledHttp.Name = "menuNotEnabledHttp"; - this.menuNotEnabledHttp.Click += new System.EventHandler(this.menuNotEnabledHttp_Click); - // - // menuGlobal - // - resources.ApplyResources(this.menuGlobal, "menuGlobal"); - this.menuGlobal.Name = "menuGlobal"; - this.menuGlobal.Click += new System.EventHandler(this.menuGlobal_Click); - // - // menuGlobalPAC - // - resources.ApplyResources(this.menuGlobalPAC, "menuGlobalPAC"); - this.menuGlobalPAC.Name = "menuGlobalPAC"; - this.menuGlobalPAC.Click += new System.EventHandler(this.menuGlobalPAC_Click); - // - // menuKeep - // - resources.ApplyResources(this.menuKeep, "menuKeep"); - this.menuKeep.Name = "menuKeep"; - this.menuKeep.Click += new System.EventHandler(this.menuKeep_Click); - // - // menuKeepPAC - // - resources.ApplyResources(this.menuKeepPAC, "menuKeepPAC"); - this.menuKeepPAC.Name = "menuKeepPAC"; - this.menuKeepPAC.Click += new System.EventHandler(this.menuKeepPAC_Click); - // // menuKeepNothing // resources.ApplyResources(this.menuKeepNothing, "menuKeepNothing"); this.menuKeepNothing.Name = "menuKeepNothing"; this.menuKeepNothing.Click += new System.EventHandler(this.menuKeepNothing_Click); // - // menuKeepPACNothing + // menuGlobal // - resources.ApplyResources(this.menuKeepPACNothing, "menuKeepPACNothing"); - this.menuKeepPACNothing.Name = "menuKeepPACNothing"; - this.menuKeepPACNothing.Click += new System.EventHandler(this.menuKeepPACNothing_Click); + resources.ApplyResources(this.menuGlobal, "menuGlobal"); + this.menuGlobal.Name = "menuGlobal"; + this.menuGlobal.Click += new System.EventHandler(this.menuGlobal_Click); + // + // menuKeepClear + // + resources.ApplyResources(this.menuKeepClear, "menuKeepClear"); + this.menuKeepClear.Name = "menuKeepClear"; + this.menuKeepClear.Click += new System.EventHandler(this.menuKeepClear_Click); // // menuServers // @@ -496,12 +461,6 @@ this.menuScanScreen2.Name = "menuScanScreen2"; this.menuScanScreen2.Click += new System.EventHandler(this.menuScanScreen_Click); // - // menuCopyPACUrl - // - resources.ApplyResources(this.menuCopyPACUrl, "menuCopyPACUrl"); - this.menuCopyPACUrl.Name = "menuCopyPACUrl"; - this.menuCopyPACUrl.Click += new System.EventHandler(this.menuCopyPACUrl_Click); - // // menuUpdateSubscriptions // resources.ApplyResources(this.menuUpdateSubscriptions, "menuUpdateSubscriptions"); @@ -559,8 +518,6 @@ this.toolSslHttpPortLab, this.toolSslHttpPort, this.toolSslBlank2, - this.toolSslPacPortLab, - this.toolSslPacPort, this.toolSslBlank3, this.toolSslServerSpeed, this.toolSslBlank4}); @@ -599,16 +556,6 @@ this.toolSslBlank2.Name = "toolSslBlank2"; this.toolSslBlank2.Spring = true; // - // toolSslPacPortLab - // - resources.ApplyResources(this.toolSslPacPortLab, "toolSslPacPortLab"); - this.toolSslPacPortLab.Name = "toolSslPacPortLab"; - // - // toolSslPacPort - // - resources.ApplyResources(this.toolSslPacPort, "toolSslPacPort"); - this.toolSslPacPort.Name = "toolSslPacPort"; - // // toolSslBlank3 // resources.ApplyResources(this.toolSslBlank3, "toolSslBlank3"); @@ -641,7 +588,7 @@ this.tsbSub, this.tsbQRCodeSwitch, this.toolStripSeparator8, - this.tsbOptionSetting, + this.tsbSetting, this.toolStripSeparator5, this.tsbReload, this.toolStripSeparator7, @@ -694,13 +641,27 @@ resources.ApplyResources(this.toolStripSeparator8, "toolStripSeparator8"); this.toolStripSeparator8.Name = "toolStripSeparator8"; // + // tsbSetting + // + resources.ApplyResources(this.tsbSetting, "tsbSetting"); + this.tsbSetting.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.tsbOptionSetting, + this.tsbRoutingSetting}); + this.tsbSetting.Image = global::v2rayN.Properties.Resources.option; + this.tsbSetting.Name = "tsbSetting"; + // // tsbOptionSetting // resources.ApplyResources(this.tsbOptionSetting, "tsbOptionSetting"); - this.tsbOptionSetting.Image = global::v2rayN.Properties.Resources.option; this.tsbOptionSetting.Name = "tsbOptionSetting"; this.tsbOptionSetting.Click += new System.EventHandler(this.tsbOptionSetting_Click); // + // tsbRoutingSetting + // + resources.ApplyResources(this.tsbRoutingSetting, "tsbRoutingSetting"); + this.tsbRoutingSetting.Name = "tsbRoutingSetting"; + this.tsbRoutingSetting.Click += new System.EventHandler(this.tsbRoutingSetting_Click); + // // toolStripSeparator5 // resources.ApplyResources(this.toolStripSeparator5, "toolStripSeparator5"); @@ -723,9 +684,7 @@ this.tsbCheckUpdate.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.tsbCheckUpdateN, this.tsbCheckUpdateCore, - this.tsbCheckUpdatePACList, - this.toolStripSeparator13, - this.tsbCheckClearPACList}); + this.tsbCheckUpdateXrayCore}); this.tsbCheckUpdate.Image = global::v2rayN.Properties.Resources.checkupdate; this.tsbCheckUpdate.Name = "tsbCheckUpdate"; // @@ -741,22 +700,11 @@ this.tsbCheckUpdateCore.Name = "tsbCheckUpdateCore"; this.tsbCheckUpdateCore.Click += new System.EventHandler(this.tsbCheckUpdateCore_Click); // - // tsbCheckUpdatePACList + // tsbCheckUpdateXrayCore // - resources.ApplyResources(this.tsbCheckUpdatePACList, "tsbCheckUpdatePACList"); - this.tsbCheckUpdatePACList.Name = "tsbCheckUpdatePACList"; - this.tsbCheckUpdatePACList.Click += new System.EventHandler(this.tsbCheckUpdatePACList_Click); - // - // toolStripSeparator13 - // - resources.ApplyResources(this.toolStripSeparator13, "toolStripSeparator13"); - this.toolStripSeparator13.Name = "toolStripSeparator13"; - // - // tsbCheckClearPACList - // - resources.ApplyResources(this.tsbCheckClearPACList, "tsbCheckClearPACList"); - this.tsbCheckClearPACList.Name = "tsbCheckClearPACList"; - this.tsbCheckClearPACList.Click += new System.EventHandler(this.tsbCheckClearPACList_Click); + resources.ApplyResources(this.tsbCheckUpdateXrayCore, "tsbCheckUpdateXrayCore"); + this.tsbCheckUpdateXrayCore.Name = "tsbCheckUpdateXrayCore"; + this.tsbCheckUpdateXrayCore.Click += new System.EventHandler(this.tsbCheckUpdateXrayCore_Click); // // toolStripSeparator10 // @@ -880,7 +828,6 @@ private System.Windows.Forms.ToolStripMenuItem menuExport2ServerConfig; private System.Windows.Forms.ToolStrip tsMain; private System.Windows.Forms.ToolStripDropDownButton tsbServer; - private System.Windows.Forms.ToolStripButton tsbOptionSetting; private System.Windows.Forms.ToolStripButton tsbClose; private System.Windows.Forms.ToolStripSeparator toolStripSeparator4; private System.Windows.Forms.ToolStripSeparator toolStripSeparator5; @@ -893,9 +840,7 @@ private System.Windows.Forms.ToolStripSeparator toolStripSeparator9; private System.Windows.Forms.ToolStripMenuItem menuSysAgentMode; private System.Windows.Forms.ToolStripMenuItem menuGlobal; - private System.Windows.Forms.ToolStripMenuItem menuGlobalPAC; - private System.Windows.Forms.ToolStripMenuItem menuKeep; - private System.Windows.Forms.ToolStripMenuItem menuCopyPACUrl; + private System.Windows.Forms.ToolStripMenuItem menuKeepClear; private System.Windows.Forms.ToolStripMenuItem menuAddCustomServer; private System.Windows.Forms.ToolStripSeparator toolStripSeparator1; private System.Windows.Forms.ToolStripMenuItem menuAddShadowsocksServer; @@ -905,7 +850,6 @@ private System.Windows.Forms.ToolStripDropDownButton tsbCheckUpdate; private System.Windows.Forms.ToolStripMenuItem tsbCheckUpdateN; private System.Windows.Forms.ToolStripMenuItem tsbCheckUpdateCore; - private System.Windows.Forms.ToolStripMenuItem tsbCheckUpdatePACList; private System.Windows.Forms.ToolStripMenuItem menuAddServers; private System.Windows.Forms.ToolStripMenuItem menuExport2ShareUrl; private System.Windows.Forms.ToolStripMenuItem menuSpeedServer; @@ -920,8 +864,6 @@ private System.Windows.Forms.ToolStripSeparator toolStripSeparator8; private System.Windows.Forms.ToolStripMenuItem tsbSubSetting; private System.Windows.Forms.ToolStripMenuItem tsbSubUpdate; - private System.Windows.Forms.ToolStripMenuItem tsbCheckClearPACList; - private System.Windows.Forms.ToolStripMenuItem menuKeepPAC; private System.Windows.Forms.ToolStripMenuItem menuSelectAll; private System.Windows.Forms.ToolStripMenuItem menuExport2SubContent; private System.Windows.Forms.ToolStripSeparator toolStripSeparator12; @@ -934,27 +876,26 @@ private System.Windows.Forms.ToolStripStatusLabel toolSslHttpPort; private System.Windows.Forms.ToolStripStatusLabel toolSslBlank2; private System.Windows.Forms.ToolStripStatusLabel toolSslBlank1; - private System.Windows.Forms.ToolStripStatusLabel toolSslPacPort; private System.Windows.Forms.ToolStripStatusLabel toolSslBlank3; private System.Windows.Forms.ToolStripStatusLabel toolSslSocksPortLab; private System.Windows.Forms.ToolStripStatusLabel toolSslHttpPortLab; - private System.Windows.Forms.ToolStripStatusLabel toolSslPacPortLab; private System.Windows.Forms.ToolStripStatusLabel toolSslServerSpeed; private System.Windows.Forms.ToolStripStatusLabel toolSslBlank4; private System.Windows.Forms.ToolStripMenuItem menuRemoveDuplicateServer; private System.Windows.Forms.ToolStripMenuItem menuTcpingServer; private System.Windows.Forms.ToolStripMenuItem menuRealPingServer; - private System.Windows.Forms.ToolStripMenuItem menuNotEnabledHttp; - private System.Windows.Forms.ToolStripSeparator toolStripSeparator13; private System.Windows.Forms.ToolStripMenuItem menuUpdateSubscriptions; private System.Windows.Forms.ToolStripMenuItem tsbV2rayWebsite; private System.Windows.Forms.ToolStripMenuItem menuKeepNothing; - private System.Windows.Forms.ToolStripMenuItem menuKeepPACNothing; private System.Windows.Forms.ToolStripMenuItem tsbTestMe; private System.Windows.Forms.ToolStripButton tsbReload; private System.Windows.Forms.ToolStripButton tsbQRCodeSwitch; private System.Windows.Forms.ToolStripMenuItem menuAddVlessServer; private System.Windows.Forms.ToolStripMenuItem menuAddTrojanServer; + private System.Windows.Forms.ToolStripDropDownButton tsbSetting; + private System.Windows.Forms.ToolStripMenuItem tsbOptionSetting; + private System.Windows.Forms.ToolStripMenuItem tsbRoutingSetting; + private System.Windows.Forms.ToolStripMenuItem tsbCheckUpdateXrayCore; } } diff --git a/v2rayN/v2rayN/Forms/MainForm.cs b/v2rayN/v2rayN/Forms/MainForm.cs index 90977fd0..0b7b2e55 100644 --- a/v2rayN/v2rayN/Forms/MainForm.cs +++ b/v2rayN/v2rayN/Forms/MainForm.cs @@ -35,8 +35,8 @@ namespace v2rayN.Forms { v2rayHandler.V2rayStop(); - HttpProxyHandle.CloseHttpAgent(config); - PACServerHandle.Stop(); + //HttpProxyHandle.CloseHttpAgent(config); + HttpProxyHandle.UpdateSysProxy(config, true); ConfigHandler.SaveConfig(ref config); statistics?.SaveToFile(); @@ -205,6 +205,8 @@ namespace v2rayN.Forms /// private void RefreshServersView() { + int index = lvServers.SelectedIndices.Count > 0 ? lvServers.SelectedIndices[0] : -1; + lvServers.BeginUpdate(); lvServers.Items.Clear(); @@ -270,15 +272,11 @@ namespace v2rayN.Forms } lvServers.EndUpdate(); - //if (lvServers.Items.Count > 0) - //{ - // if (lvServers.Items.Count <= testConfigIndex) - // { - // testConfigIndex = lvServers.Items.Count - 1; - // } - // lvServers.Items[testConfigIndex].Selected = true; - // lvServers.Select(); - //} + if (index >= 0 && index < lvServers.Items.Count && lvServers.Items.Count > 0) + { + lvServers.Items[index].Selected = true; + lvServers.EnsureVisible(index); // workaround + } } /// @@ -343,29 +341,8 @@ namespace v2rayN.Forms private void DisplayToolStatus() { - toolSslSocksPort.Text = - toolSslHttpPort.Text = - toolSslPacPort.Text = "OFF"; - toolSslSocksPort.Text = $"{Global.Loopback}:{config.inbound[0].localPort}"; - - if (config.listenerType != (int)ListenerType.noHttpProxy) - { - toolSslHttpPort.Text = $"{Global.Loopback}:{Global.httpPort}"; - if (config.listenerType == ListenerType.GlobalPac || - config.listenerType == ListenerType.PacOpenAndClear || - config.listenerType == ListenerType.PacOpenOnly) - { - if (PACServerHandle.IsRunning) - { - toolSslPacPort.Text = $"{HttpProxyHandle.GetPacUrl()}"; - } - else - { - toolSslPacPort.Text = UIRes.I18N("StartPacFailed"); - } - } - } + toolSslHttpPort.Text = $"{Global.Loopback}:{Global.httpPort}"; notifyMain.Icon = MainFormHandler.Instance.GetNotifyIcon(config, this.Icon); } @@ -426,7 +403,7 @@ namespace v2rayN.Forms ConfigHandler.SaveConfig(ref config, false); statistics?.SaveToFile(); - ChangePACButtonStatus(config.listenerType); + ChangePACButtonStatus(config.sysProxyType); tsbReload.Enabled = true; } @@ -576,7 +553,7 @@ namespace v2rayN.Forms private void menuAddVlessServer_Click(object sender, EventArgs e) { - ShowServerForm((int)EConfigType.VLESS, -1); + ShowServerForm((int)EConfigType.VLESS, -1); } private void menuRemoveServer_Click(object sender, EventArgs e) @@ -758,7 +735,17 @@ namespace v2rayN.Forms //刷新 RefreshServers(); LoadV2ray(); - HttpProxyHandle.RestartHttpAgent(config, true); + } + } + + private void tsbRoutingSetting_Click(object sender, EventArgs e) + { + RoutingSettingForm fm = new RoutingSettingForm(); + if (fm.ShowDialog() == DialogResult.OK) + { + //刷新 + RefreshServers(); + LoadV2ray(); } } @@ -858,13 +845,13 @@ namespace v2rayN.Forms private void menuAddShadowsocksServer_Click(object sender, EventArgs e) { - ShowServerForm((int)EConfigType.Shadowsocks, -1); + ShowServerForm((int)EConfigType.Shadowsocks, -1); ShowForm(); } private void menuAddSocksServer_Click(object sender, EventArgs e) { - ShowServerForm((int)EConfigType.Socks, -1); + ShowServerForm((int)EConfigType.Socks, -1); ShowForm(); } @@ -1020,10 +1007,11 @@ namespace v2rayN.Forms this.ShowInTaskbar = true; //this.notifyIcon1.Visible = false; this.txtMsgBox.ScrollToCaret(); - if (config.index >= 0 && config.index < lvServers.Items.Count) - { - lvServers.EnsureVisible(config.index); // workaround - } + //if (config.index >= 0 && config.index < lvServers.Items.Count) + //{ + // lvServers.Items[config.index].Selected = true; + // lvServers.EnsureVisible(config.index); // workaround + //} SetVisibleCore(true); } @@ -1151,55 +1139,37 @@ namespace v2rayN.Forms #region 系统代理相关 - private void menuCopyPACUrl_Click(object sender, EventArgs e) - { - Utils.SetClipboardData(HttpProxyHandle.GetPacUrl()); - } - private void menuNotEnabledHttp_Click(object sender, EventArgs e) - { - SetListenerType(ListenerType.noHttpProxy); - } private void menuGlobal_Click(object sender, EventArgs e) { - SetListenerType(ListenerType.GlobalHttp); + SetListenerType(ESysProxyType.ForcedChange); } - private void menuGlobalPAC_Click(object sender, EventArgs e) + + private void menuKeepClear_Click(object sender, EventArgs e) { - SetListenerType(ListenerType.GlobalPac); - } - private void menuKeep_Click(object sender, EventArgs e) - { - SetListenerType(ListenerType.HttpOpenAndClear); - } - private void menuKeepPAC_Click(object sender, EventArgs e) - { - SetListenerType(ListenerType.PacOpenAndClear); + SetListenerType(ESysProxyType.ForcedClear); } private void menuKeepNothing_Click(object sender, EventArgs e) { - SetListenerType(ListenerType.HttpOpenOnly); + SetListenerType(ESysProxyType.Unchanged); } - private void menuKeepPACNothing_Click(object sender, EventArgs e) + private void SetListenerType(ESysProxyType type) { - SetListenerType(ListenerType.PacOpenOnly); - } - private void SetListenerType(ListenerType type) - { - config.listenerType = type; + config.sysProxyType = type; ChangePACButtonStatus(type); } - private void ChangePACButtonStatus(ListenerType type) + private void ChangePACButtonStatus(ESysProxyType type) { - if (type != ListenerType.noHttpProxy) - { - HttpProxyHandle.RestartHttpAgent(config, false); - } - else - { - HttpProxyHandle.CloseHttpAgent(config); - } + HttpProxyHandle.UpdateSysProxy(config, false); + //if (type != ListenerType.noHttpProxy) + //{ + // HttpProxyHandle.RestartHttpAgent(config, false); + //} + //else + //{ + // HttpProxyHandle.CloseHttpAgent(config); + //} for (int k = 0; k < menuSysAgentMode.DropDownItems.Count; k++) { @@ -1301,6 +1271,16 @@ namespace v2rayN.Forms } private void tsbCheckUpdateCore_Click(object sender, EventArgs e) + { + CheckUpdateCore("v2fly"); + } + + private void tsbCheckUpdateXrayCore_Click(object sender, EventArgs e) + { + CheckUpdateCore("xray"); + } + + private void CheckUpdateCore(string type) { DownloadHandle downloadHandle = null; if (downloadHandle == null) @@ -1362,53 +1342,7 @@ namespace v2rayN.Forms } AppendText(false, string.Format(UIRes.I18N("MsgStartUpdating"), "v2rayCore")); - downloadHandle.CheckUpdateAsync("Core"); - } - - private void tsbCheckUpdatePACList_Click(object sender, EventArgs e) - { - DownloadHandle pacListHandle = null; - if (pacListHandle == null) - { - pacListHandle = new DownloadHandle(); - pacListHandle.UpdateCompleted += (sender2, args) => - { - if (args.Success) - { - string result = args.Msg; - if (Utils.IsNullOrEmpty(result)) - { - return; - } - pacListHandle.GenPacFile(result); - - AppendText(false, UIRes.I18N("MsgPACUpdateSuccessfully")); - } - else - { - AppendText(false, UIRes.I18N("MsgPACUpdateFailed")); - } - }; - pacListHandle.Error += (sender2, args) => - { - AppendText(true, args.GetException().Message); - }; - } - AppendText(false, UIRes.I18N("MsgStartUpdatingPAC")); - pacListHandle.WebDownloadString(config.urlGFWList); - } - - private void tsbCheckClearPACList_Click(object sender, EventArgs e) - { - try - { - File.WriteAllText(Utils.GetPath(Global.pacFILE), Utils.GetEmbedText(Global.BlankPacFileName), Encoding.UTF8); - AppendText(false, UIRes.I18N("MsgSimplifyPAC")); - } - catch (Exception ex) - { - Utils.SaveLog(ex.Message, ex); - } + downloadHandle.CheckUpdateAsync(type); } #endregion @@ -1570,8 +1504,8 @@ namespace v2rayN.Forms + #endregion - } } diff --git a/v2rayN/v2rayN/Forms/MainForm.resx b/v2rayN/v2rayN/Forms/MainForm.resx index eb1e2e63..e1d6def6 100644 --- a/v2rayN/v2rayN/Forms/MainForm.resx +++ b/v2rayN/v2rayN/Forms/MainForm.resx @@ -127,17 +127,14 @@ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - Magenta - 355, 22 97, 53 - - groupBox2 + + 355, 22 Add [VLESS] server @@ -151,11 +148,8 @@ Restart service - - 184, 6 - - - tsbSubSetting + + menuCopyServer 264, 22 @@ -176,22 +170,25 @@ ImageAboveText + + System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + 语言-[中文简体] NoControl - - Top + + Settings tsbHelp - - 5 - + + 0 + False @@ -213,23 +210,20 @@ 187, 22 + + tsbSetting + toolSslBlank2 - - tsbCheckUpdateN - 355, 22 355, 22 - - Move to top (T) - - - 45, 53 + + tsbCheckUpdateN Only open Http proxy and do nothing @@ -237,11 +231,14 @@ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + menuExport2SubContent + toolStripSeparator7 - Update v2rayCore + Update v2flyCore Magenta @@ -255,8 +252,8 @@ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - menuExport2SubContent + + Fill 52, 17 @@ -264,8 +261,14 @@ Share - - tsbQRCodeSwitch + + Subscriptions + + + 952, 351 + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 355, 22 @@ -273,23 +276,23 @@ Export selected server for client configuration + + tsbRoutingSetting + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Export selected server for server configuration - - ImageAboveText + + 0, 17 952, 56 @@ -306,21 +309,21 @@ menuTcpingServer - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + ImageAboveText System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 356, 600 + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 v2rayN - - 411, 22 - 355, 22 @@ -334,25 +337,19 @@ System.Windows.Forms.ToolStripDropDownButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - 393, 22 + 203, 22 System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - tsbClose - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 187, 22 System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -368,17 +365,17 @@ - iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - wwAADsMBx2+oZAAAATdJREFUWEftloENAiEMRW8ER3AEN9ANdARHcAPdwBF0A91AN9INtC+5JvUCJwWM - mvCTFw3QUiiU65qa/lUTYT6Ato9rJZyERwT6GFNdU+EihCYNwVhsqmgm3AR1fheOAitd9PCfNvp0HDbY - FolV2MmZZCzX9J0FG0TRTlwFdbahIVE7Qe1IR5bYVnXCyr2yO5F1MNUBec25YtjomcCXSxhr9DmrV2Gr - flyL4GSrYcm9tmnEZ7JsAC7DgWr5ydbXA8hOAcVjG8FTD6ocQgvXKrW8MqFWUfc1DAXgmRwVFaJQAHsh - VbYUU87diqWA934sl/TZ7wV2Lesx0gBwsO5/1Sl5PQhLQb+G+E+bfTm9KXsRAVgHrMK+jO9gbNEzzMSh - 6DlM9nANoa+kdCeLXLNLFtc9b2r6EXXdE4e4mdByNuG1AAAAAElFTkSuQmCC + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsIAAA7CARUoSoAAAAE3SURBVFhH7ZaBDQIhDEVvBEdwBDfQDXQER3AD3cARdAPd + QDfSDbQvuSb1AicFjJrwkxcN0FIolOuamv5VE2E+gLaPayWchEcE+hhTXVPhIoQmDcFYbKpoJtwEdX4X + jgIrXfTwnzb6dBw22BaJVdjJmWQs1/SdBRtE0U5cBXW2oSFRO0HtSEeW2FZ1wsq9sjuRdTDVAXnNuWLY + 6JnAl0sYa/Q5q1dhq35ci+Bkq2HJvbZpxGeybAAuw4Fq+cnW1wPITgHFYxvBUw+qHEIL1yq1vDKhVlH3 + NQwF4JkcFRWiUAB7IVW2FFPO3YqlgPd+LJf02e8Fdi3rMdIAcLDuf9UpeT0IS0G/hvhPm305vSl7EQFY + B6zCvozvYGzRM8zEoeg5TPZwDaGvpHQni1yzSxbXPW9q+hF13ROHuJnQcjbhtQAAAABJRU5ErkJggg== - - 411, 22 + + Servers 3 @@ -413,15 +410,15 @@ menuMoveDown + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + Import bulk URL from clipboard - + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 411, 22 - Move to bottom (B) @@ -434,8 +431,8 @@ 48, 53 - - 393, 22 + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 355, 22 @@ -447,7 +444,7 @@ panel1 - 195, 17 + 206, 17 0 @@ -461,17 +458,17 @@ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + menuKeepClear + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - Bottom - - System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Export share URLs to clipboard (Ctrl+C) scMain.Panel2 @@ -510,7 +507,7 @@ tsbAbout - 195, 17 + 206, 17 toolStripSeparator5 @@ -527,6 +524,9 @@ 352, 6 + + tsbPromotion + 256, 331 @@ -539,17 +539,14 @@ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 6, 56 - - - System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 352, 6 groupBox1 - 195, 17 + 206, 17 2 @@ -557,21 +554,15 @@ 125, 22 - - 0, 17 - scMain.Panel2 - 58, 53 + 161, 22 355, 22 - - Not Enabled Http Proxy - 187, 22 @@ -587,14 +578,17 @@ 686 - - ImageAboveText + + tsbTestMe - 265, 164 + 265, 142 - - 355, 22 + + 411, 22 + + + $this System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -605,9 +599,15 @@ Check for updates - + + tsbCheckUpdateXrayCore + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 0, 17 + toolSslServerSpeed @@ -620,24 +620,18 @@ 125, 22 - - Only open Http proxy and clear the proxy settings - scMain + + 203, 22 + HTTP: Remove selected servers (Delete) - - 411, 22 - - - menuKeepPAC - 0 @@ -647,17 +641,11 @@ menuSelectAll - - $this - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Vertical + + Move to top (T) - System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -668,11 +656,11 @@ ImageAboveText - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 1 - - 187, 22 + + Promotion menuAddServers @@ -695,14 +683,17 @@ menuExport2ShareUrl + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + tsMain System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - tsbReload + + SOCKS5: v2rayN (this software) @@ -719,8 +710,8 @@ 0, 66 - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 5 tsbV2rayWebsite @@ -752,8 +743,8 @@ Language-[English] - - menuSpeedServer + + tsbSubSetting 264, 22 @@ -761,6 +752,9 @@ 0 + + Fill + toolSslBlank3 @@ -770,11 +764,14 @@ Add [Trojan] server + + 161, 22 + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - toolStripSeparator11 + + ImageAboveText System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -782,9 +779,6 @@ 0, 417 - - System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - 352, 6 @@ -800,20 +794,17 @@ 1 - - toolSslPacPort - System.Windows.Forms.SplitterPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - Settings + OptionSetting menuMoveTop - - menuKeep + + tsbCheckUpdateCore @@ -832,12 +823,12 @@ ZW0uRHJhd2luZy5HcmFwaGljc1VuaXQBAAAAB3ZhbHVlX18ACAMAAAADAAAACw== - - 952, 351 - menuScanScreen + + ImageAboveText + cmsLv @@ -847,12 +838,15 @@ 6, 56 - - Fill - toolSslBlank1 + + scMain.Panel1 + + + tsbReload + tsbSubUpdate @@ -865,11 +859,8 @@ SPEED Disabled - - PAC: - - - Promotion + + 67, 53 menuSysAgentMode @@ -877,8 +868,8 @@ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 0, 0 + + ImageAboveText Export subscription (base64) share to clipboard @@ -907,17 +898,17 @@ System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - toolStripSeparator13 + + tsbClose - - 1 + + RoutingSetting System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 0, 17 + + tsbQRCodeSwitch 3, 151 @@ -928,8 +919,8 @@ 355, 22 - - Subscriptions + + 6, 56 952, 10 @@ -940,15 +931,9 @@ 264, 22 - - menuNotEnabledHttp - 0 - - Informations - toolStripSeparator8 @@ -964,9 +949,6 @@ Test servers ping (Ctrl+P) - - System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -979,6 +961,15 @@ System.Windows.Forms.ToolStripDropDownButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.ToolStripDropDownButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Top + menuSetDefaultServer @@ -988,11 +979,11 @@ Settings - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 45, 53 - - menuCopyServer + + System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Http proxy @@ -1000,12 +991,6 @@ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 411, 22 - - - Only open PAC and clear the proxy settings - 355, 22 @@ -1051,11 +1036,11 @@ 2 - - menuKeepPACNothing + + toolStripSeparator11 - - Check for updated PAC (need the HTTP proxy are ON) + + Magenta 355, 22 @@ -1063,11 +1048,8 @@ v2rayN Project - - Servers - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 0 System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -1075,8 +1057,8 @@ Select All (Ctrl+A) - - ImageAboveText + + Informations 3 @@ -1084,14 +1066,8 @@ System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - tsbCheckUpdateCore - - - SOCKS5: - - - 33, 17 + + menuSpeedServer 355, 22 @@ -1099,8 +1075,8 @@ menuRemoveServer - - tsbTestMe + + Test current service status 355, 22 @@ -1120,20 +1096,14 @@ Down (D) - - menuCopyPACUrl - 352, 6 Magenta - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Only open PAC and do nothing + + 411, 22 355, 22 @@ -1156,6 +1126,9 @@ 355, 22 + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + groupBox2 @@ -1171,8 +1144,8 @@ 微软雅黑, 8pt - - Export share URLs to clipboard (Ctrl+C) + + Vertical 411, 22 @@ -1189,26 +1162,17 @@ System.Windows.Forms.ToolStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - Simplify PAC (need to set Core route) - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 0 - $this - - Fill + + 0, 0 qrCodeControl - - 264, 22 + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 355, 22 @@ -1225,8 +1189,8 @@ 微软雅黑, 8pt - - tsbPromotion + + groupBox2 ImageAboveText @@ -1234,21 +1198,15 @@ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - menuGlobalPAC - - 393, 22 + 203, 22 - - 356, 600 + + 184, 6 0, 0 - - scMain.Panel1 - Up (U) @@ -1291,9 +1249,6 @@ 946, 22 - - Open PAC and set the system proxy (PAC mode) - 355, 22 @@ -1303,9 +1258,6 @@ menuAddVlessServer - - System.Windows.Forms.StatusStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - 946, 331 @@ -1315,23 +1267,14 @@ Add [Shadowsocks] server - - 390, 6 - 微软雅黑, 8pt 952, 593 - - 411, 22 - - - tsbCheckClearPACList - - - Test current service status + + Scan QR code on the screen toolSslSocksPort @@ -1345,9 +1288,6 @@ menuMoveBottom - - 393, 22 - 1 @@ -1372,26 +1312,17 @@ 6, 56 - - 0, 17 - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - Magenta 52, 53 - - ImageAboveText - - - toolSslPacPortLab + + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -1405,9 +1336,6 @@ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - Scan QR code on the screen - 0, 56 @@ -1429,6 +1357,9 @@ $this + + Update xrayCore + toolStripSeparator2 @@ -1444,9 +1375,6 @@ System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 352, 6 - 952, 176 @@ -1456,15 +1384,9 @@ System.Windows.Forms.ToolStripDropDownButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 0 - Fill - - Copy local PAC URL - 3, 17 @@ -1473,37 +1395,34 @@ - iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - wwAADsMBx2+oZAAAADJJREFUWEftzrENACAIRUFGdVMdTZkAG4zFXfI68kMAAD8ap9lUbpfyaDV19QAA - 8FDEBl3RImu5VcdbAAAAAElFTkSuQmCC + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsIAAA7CARUoSoAAAAAySURBVFhH7c6xDQAgCEVBRnVTHU2ZABuMxV3yOvJDAAA/ + GqfZVG6X8mg1dfUAAPBQxAZd0SJruVXHWwAAAABJRU5ErkJggg== 355, 22 - - 微软雅黑, 8pt - 355, 22 System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tsbCheckUpdatePACList + + System.Windows.Forms.StatusStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 228, 18 + + zh-Hans + True - 108 + 65 137, 17 diff --git a/v2rayN/v2rayN/Forms/MainForm.zh-Hans.resx b/v2rayN/v2rayN/Forms/MainForm.zh-Hans.resx index 83e8f530..ab434f47 100644 --- a/v2rayN/v2rayN/Forms/MainForm.zh-Hans.resx +++ b/v2rayN/v2rayN/Forms/MainForm.zh-Hans.resx @@ -286,6 +286,12 @@ 批量导出订阅内容至剪贴板(多选) + + 73, 53 + + + 服务器 + 301, 600 @@ -306,62 +312,29 @@ ZW0uRHJhd2luZy5HcmFwaGljc1VuaXQBAAAAB3ZhbHVlX18ACAMAAAADAAAACw== - - 73, 53 + + 228, 22 - - 服务器 + + 不改变系统代理 - - 196, 164 + + 228, 22 + + + 自动配置系统代理(全局模式) + + + 228, 22 + + + 清除系统代理 195, 22 - Http代理 - - - 316, 22 - - - 关闭Http代理 - - - 316, 22 - - - 开启Http代理,并自动配置系统代理(全局模式) - - - 316, 22 - - - 开启PAC,并自动配置系统代理(PAC模式) - - - 316, 22 - - - 仅开启Http代理,并清除系统代理 - - - 316, 22 - - - 仅开启PAC,并清除系统代理 - - - 316, 22 - - - 仅开启Http代理,不改变系统代理 - - - 316, 22 - - - 仅开启PAC,不改变系统代理 + 系统代理 195, 22 @@ -381,12 +354,6 @@ 扫描屏幕上的二维码 - - 195, 22 - - - 复制本地PAC网址 - 195, 22 @@ -402,20 +369,17 @@ 退出 + + 196, 142 + 服务器列表 - - 信息 - 网速显示未启用 - - 61, 53 - - - 订阅 + + 信息 124, 22 @@ -429,6 +393,12 @@ 更新订阅 + + 61, 53 + + + 订阅 + 52, 53 @@ -436,10 +406,22 @@ 分享 - 76, 53 + 124, 22 - 参数设置 + 参数设置 + + + 124, 22 + + + 路由设置 + + + 61, 53 + + + 设置 @@ -458,38 +440,35 @@ 重启服务 + + 180, 22 + + + v2rayN + + + 180, 22 + + + v2fly-Core + + + 180, 22 + + + xray-Core + 85, 53 检查更新 - - 223, 22 + + v2rayN 项目 - - v2rayN - - - 223, 22 - - - v2rayCore - - - 223, 22 - - - PAC - - - 220, 6 - - - 223, 22 - - - 简化PAC (请设置Core路由) + + V2Ray 官网 69, 53 @@ -497,12 +476,6 @@ 帮助 - - v2rayN 项目 - - - V2Ray 官网 - 68, 53 diff --git a/v2rayN/v2rayN/Forms/OptionSettingForm.Designer.cs b/v2rayN/v2rayN/Forms/OptionSettingForm.Designer.cs index 62af6048..27a61a74 100644 --- a/v2rayN/v2rayN/Forms/OptionSettingForm.Designer.cs +++ b/v2rayN/v2rayN/Forms/OptionSettingForm.Designer.cs @@ -34,12 +34,8 @@ this.tabPage1 = new System.Windows.Forms.TabPage(); this.groupBox1 = new System.Windows.Forms.GroupBox(); this.chkdefAllowInsecure = new System.Windows.Forms.CheckBox(); - this.label16 = new System.Windows.Forms.Label(); - this.cmblistenerType = new System.Windows.Forms.ComboBox(); this.chksniffingEnabled2 = new System.Windows.Forms.CheckBox(); this.chksniffingEnabled = new System.Windows.Forms.CheckBox(); - this.txtremoteDNS = new System.Windows.Forms.TextBox(); - this.label14 = new System.Windows.Forms.Label(); this.chkmuxEnabled = new System.Windows.Forms.CheckBox(); this.chkAllowIn2 = new System.Windows.Forms.CheckBox(); this.chkudpEnabled2 = new System.Windows.Forms.CheckBox(); @@ -55,21 +51,9 @@ this.txtlocalPort = new System.Windows.Forms.TextBox(); this.label2 = new System.Windows.Forms.Label(); this.tabPage2 = new System.Windows.Forms.TabPage(); - this.groupBox2 = new System.Windows.Forms.GroupBox(); - this.tabControl2 = new System.Windows.Forms.TabControl(); - this.tabPage3 = new System.Windows.Forms.TabPage(); - this.txtUseragent = new System.Windows.Forms.TextBox(); - this.tabPage4 = new System.Windows.Forms.TabPage(); - this.txtUserdirect = new System.Windows.Forms.TextBox(); - this.tabPage5 = new System.Windows.Forms.TabPage(); - this.txtUserblock = new System.Windows.Forms.TextBox(); - this.tabPage8 = new System.Windows.Forms.TabPage(); - this.cmbroutingMode = new System.Windows.Forms.ComboBox(); - this.panel3 = new System.Windows.Forms.Panel(); - this.linkLabelRoutingDoc = new System.Windows.Forms.LinkLabel(); - this.btnSetDefRountingRule = new System.Windows.Forms.Button(); - this.labRoutingTips = new System.Windows.Forms.Label(); - this.cmbdomainStrategy = new System.Windows.Forms.ComboBox(); + this.linkDnsObjectDoc = new System.Windows.Forms.LinkLabel(); + this.txtremoteDNS = new System.Windows.Forms.TextBox(); + this.label14 = new System.Windows.Forms.Label(); this.tabPage6 = new System.Windows.Forms.TabPage(); this.chkKcpcongestion = new System.Windows.Forms.CheckBox(); this.txtKcpwriteBufferSize = new System.Windows.Forms.TextBox(); @@ -90,13 +74,7 @@ this.lbFreshrate = new System.Windows.Forms.Label(); this.chkEnableStatistics = new System.Windows.Forms.CheckBox(); this.chkAllowLANConn = new System.Windows.Forms.CheckBox(); - this.txturlGFWList = new System.Windows.Forms.TextBox(); - this.label13 = new System.Windows.Forms.Label(); this.chkAutoRun = new System.Windows.Forms.CheckBox(); - this.tabPage9 = new System.Windows.Forms.TabPage(); - this.txtuserPacRule = new System.Windows.Forms.TextBox(); - this.panel4 = new System.Windows.Forms.Panel(); - this.label4 = new System.Windows.Forms.Label(); this.panel2 = new System.Windows.Forms.Panel(); this.btnOK = new System.Windows.Forms.Button(); this.panel1 = new System.Windows.Forms.Panel(); @@ -104,56 +82,41 @@ this.tabPage1.SuspendLayout(); this.groupBox1.SuspendLayout(); this.tabPage2.SuspendLayout(); - this.groupBox2.SuspendLayout(); - this.tabControl2.SuspendLayout(); - this.tabPage3.SuspendLayout(); - this.tabPage4.SuspendLayout(); - this.tabPage5.SuspendLayout(); - this.tabPage8.SuspendLayout(); - this.panel3.SuspendLayout(); this.tabPage6.SuspendLayout(); this.tabPage7.SuspendLayout(); - this.tabPage9.SuspendLayout(); - this.panel4.SuspendLayout(); this.panel2.SuspendLayout(); this.SuspendLayout(); // // btnClose // - resources.ApplyResources(this.btnClose, "btnClose"); this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel; + resources.ApplyResources(this.btnClose, "btnClose"); this.btnClose.Name = "btnClose"; this.btnClose.UseVisualStyleBackColor = true; this.btnClose.Click += new System.EventHandler(this.btnClose_Click); // // tabControl1 // - resources.ApplyResources(this.tabControl1, "tabControl1"); this.tabControl1.Controls.Add(this.tabPage1); this.tabControl1.Controls.Add(this.tabPage2); this.tabControl1.Controls.Add(this.tabPage6); this.tabControl1.Controls.Add(this.tabPage7); - this.tabControl1.Controls.Add(this.tabPage9); + resources.ApplyResources(this.tabControl1, "tabControl1"); this.tabControl1.Name = "tabControl1"; this.tabControl1.SelectedIndex = 0; // // tabPage1 // - resources.ApplyResources(this.tabPage1, "tabPage1"); this.tabPage1.Controls.Add(this.groupBox1); + resources.ApplyResources(this.tabPage1, "tabPage1"); this.tabPage1.Name = "tabPage1"; this.tabPage1.UseVisualStyleBackColor = true; // // groupBox1 // - resources.ApplyResources(this.groupBox1, "groupBox1"); this.groupBox1.Controls.Add(this.chkdefAllowInsecure); - this.groupBox1.Controls.Add(this.label16); - this.groupBox1.Controls.Add(this.cmblistenerType); this.groupBox1.Controls.Add(this.chksniffingEnabled2); this.groupBox1.Controls.Add(this.chksniffingEnabled); - this.groupBox1.Controls.Add(this.txtremoteDNS); - this.groupBox1.Controls.Add(this.label14); this.groupBox1.Controls.Add(this.chkmuxEnabled); this.groupBox1.Controls.Add(this.chkAllowIn2); this.groupBox1.Controls.Add(this.chkudpEnabled2); @@ -168,6 +131,7 @@ this.groupBox1.Controls.Add(this.label5); this.groupBox1.Controls.Add(this.txtlocalPort); this.groupBox1.Controls.Add(this.label2); + resources.ApplyResources(this.groupBox1, "groupBox1"); this.groupBox1.Name = "groupBox1"; this.groupBox1.TabStop = false; // @@ -177,26 +141,6 @@ this.chkdefAllowInsecure.Name = "chkdefAllowInsecure"; this.chkdefAllowInsecure.UseVisualStyleBackColor = true; // - // label16 - // - resources.ApplyResources(this.label16, "label16"); - this.label16.Name = "label16"; - // - // cmblistenerType - // - resources.ApplyResources(this.cmblistenerType, "cmblistenerType"); - this.cmblistenerType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.cmblistenerType.FormattingEnabled = true; - this.cmblistenerType.Items.AddRange(new object[] { - resources.GetString("cmblistenerType.Items"), - resources.GetString("cmblistenerType.Items1"), - resources.GetString("cmblistenerType.Items2"), - resources.GetString("cmblistenerType.Items3"), - resources.GetString("cmblistenerType.Items4"), - resources.GetString("cmblistenerType.Items5"), - resources.GetString("cmblistenerType.Items6")}); - this.cmblistenerType.Name = "cmblistenerType"; - // // chksniffingEnabled2 // resources.ApplyResources(this.chksniffingEnabled2, "chksniffingEnabled2"); @@ -209,16 +153,6 @@ this.chksniffingEnabled.Name = "chksniffingEnabled"; this.chksniffingEnabled.UseVisualStyleBackColor = true; // - // txtremoteDNS - // - resources.ApplyResources(this.txtremoteDNS, "txtremoteDNS"); - this.txtremoteDNS.Name = "txtremoteDNS"; - // - // label14 - // - resources.ApplyResources(this.label14, "label14"); - this.label14.Name = "label14"; - // // chkmuxEnabled // resources.ApplyResources(this.chkmuxEnabled, "chkmuxEnabled"); @@ -240,12 +174,12 @@ // // cmbprotocol2 // - resources.ApplyResources(this.cmbprotocol2, "cmbprotocol2"); this.cmbprotocol2.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.cmbprotocol2.FormattingEnabled = true; this.cmbprotocol2.Items.AddRange(new object[] { resources.GetString("cmbprotocol2.Items"), resources.GetString("cmbprotocol2.Items1")}); + resources.ApplyResources(this.cmbprotocol2, "cmbprotocol2"); this.cmbprotocol2.Name = "cmbprotocol2"; // // label3 @@ -260,8 +194,8 @@ // // cmbprotocol // - resources.ApplyResources(this.cmbprotocol, "cmbprotocol"); this.cmbprotocol.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + resources.ApplyResources(this.cmbprotocol, "cmbprotocol"); this.cmbprotocol.FormattingEnabled = true; this.cmbprotocol.Items.AddRange(new object[] { resources.GetString("cmbprotocol.Items"), @@ -287,7 +221,6 @@ // // cmbloglevel // - resources.ApplyResources(this.cmbloglevel, "cmbloglevel"); this.cmbloglevel.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.cmbloglevel.FormattingEnabled = true; this.cmbloglevel.Items.AddRange(new object[] { @@ -296,6 +229,7 @@ resources.GetString("cmbloglevel.Items2"), resources.GetString("cmbloglevel.Items3"), resources.GetString("cmbloglevel.Items4")}); + resources.ApplyResources(this.cmbloglevel, "cmbloglevel"); this.cmbloglevel.Name = "cmbloglevel"; // // label5 @@ -315,127 +249,31 @@ // // tabPage2 // + this.tabPage2.Controls.Add(this.linkDnsObjectDoc); + this.tabPage2.Controls.Add(this.txtremoteDNS); + this.tabPage2.Controls.Add(this.label14); resources.ApplyResources(this.tabPage2, "tabPage2"); - this.tabPage2.Controls.Add(this.groupBox2); this.tabPage2.Name = "tabPage2"; this.tabPage2.UseVisualStyleBackColor = true; // - // groupBox2 + // linkDnsObjectDoc // - resources.ApplyResources(this.groupBox2, "groupBox2"); - this.groupBox2.Controls.Add(this.tabControl2); - this.groupBox2.Controls.Add(this.panel3); - this.groupBox2.Name = "groupBox2"; - this.groupBox2.TabStop = false; + resources.ApplyResources(this.linkDnsObjectDoc, "linkDnsObjectDoc"); + this.linkDnsObjectDoc.Name = "linkDnsObjectDoc"; + this.linkDnsObjectDoc.TabStop = true; // - // tabControl2 + // txtremoteDNS // - resources.ApplyResources(this.tabControl2, "tabControl2"); - this.tabControl2.Controls.Add(this.tabPage3); - this.tabControl2.Controls.Add(this.tabPage4); - this.tabControl2.Controls.Add(this.tabPage5); - this.tabControl2.Controls.Add(this.tabPage8); - this.tabControl2.Name = "tabControl2"; - this.tabControl2.SelectedIndex = 0; + resources.ApplyResources(this.txtremoteDNS, "txtremoteDNS"); + this.txtremoteDNS.Name = "txtremoteDNS"; // - // tabPage3 + // label14 // - resources.ApplyResources(this.tabPage3, "tabPage3"); - this.tabPage3.Controls.Add(this.txtUseragent); - this.tabPage3.Name = "tabPage3"; - this.tabPage3.UseVisualStyleBackColor = true; - // - // txtUseragent - // - resources.ApplyResources(this.txtUseragent, "txtUseragent"); - this.txtUseragent.Name = "txtUseragent"; - // - // tabPage4 - // - resources.ApplyResources(this.tabPage4, "tabPage4"); - this.tabPage4.Controls.Add(this.txtUserdirect); - this.tabPage4.Name = "tabPage4"; - this.tabPage4.UseVisualStyleBackColor = true; - // - // txtUserdirect - // - resources.ApplyResources(this.txtUserdirect, "txtUserdirect"); - this.txtUserdirect.Name = "txtUserdirect"; - // - // tabPage5 - // - resources.ApplyResources(this.tabPage5, "tabPage5"); - this.tabPage5.Controls.Add(this.txtUserblock); - this.tabPage5.Name = "tabPage5"; - this.tabPage5.UseVisualStyleBackColor = true; - // - // txtUserblock - // - resources.ApplyResources(this.txtUserblock, "txtUserblock"); - this.txtUserblock.Name = "txtUserblock"; - // - // tabPage8 - // - resources.ApplyResources(this.tabPage8, "tabPage8"); - this.tabPage8.Controls.Add(this.cmbroutingMode); - this.tabPage8.Name = "tabPage8"; - this.tabPage8.UseVisualStyleBackColor = true; - // - // cmbroutingMode - // - resources.ApplyResources(this.cmbroutingMode, "cmbroutingMode"); - this.cmbroutingMode.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.cmbroutingMode.FormattingEnabled = true; - this.cmbroutingMode.Items.AddRange(new object[] { - resources.GetString("cmbroutingMode.Items"), - resources.GetString("cmbroutingMode.Items1"), - resources.GetString("cmbroutingMode.Items2"), - resources.GetString("cmbroutingMode.Items3")}); - this.cmbroutingMode.Name = "cmbroutingMode"; - // - // panel3 - // - resources.ApplyResources(this.panel3, "panel3"); - this.panel3.Controls.Add(this.linkLabelRoutingDoc); - this.panel3.Controls.Add(this.btnSetDefRountingRule); - this.panel3.Controls.Add(this.labRoutingTips); - this.panel3.Controls.Add(this.cmbdomainStrategy); - this.panel3.Name = "panel3"; - // - // linkLabelRoutingDoc - // - resources.ApplyResources(this.linkLabelRoutingDoc, "linkLabelRoutingDoc"); - this.linkLabelRoutingDoc.Name = "linkLabelRoutingDoc"; - this.linkLabelRoutingDoc.TabStop = true; - this.linkLabelRoutingDoc.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabelRoutingDoc_LinkClicked); - // - // btnSetDefRountingRule - // - resources.ApplyResources(this.btnSetDefRountingRule, "btnSetDefRountingRule"); - this.btnSetDefRountingRule.Name = "btnSetDefRountingRule"; - this.btnSetDefRountingRule.UseVisualStyleBackColor = true; - this.btnSetDefRountingRule.Click += new System.EventHandler(this.btnSetDefRountingRule_Click); - // - // labRoutingTips - // - resources.ApplyResources(this.labRoutingTips, "labRoutingTips"); - this.labRoutingTips.ForeColor = System.Drawing.Color.Brown; - this.labRoutingTips.Name = "labRoutingTips"; - // - // cmbdomainStrategy - // - resources.ApplyResources(this.cmbdomainStrategy, "cmbdomainStrategy"); - this.cmbdomainStrategy.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.cmbdomainStrategy.FormattingEnabled = true; - this.cmbdomainStrategy.Items.AddRange(new object[] { - resources.GetString("cmbdomainStrategy.Items"), - resources.GetString("cmbdomainStrategy.Items1"), - resources.GetString("cmbdomainStrategy.Items2")}); - this.cmbdomainStrategy.Name = "cmbdomainStrategy"; + resources.ApplyResources(this.label14, "label14"); + this.label14.Name = "label14"; // // tabPage6 // - resources.ApplyResources(this.tabPage6, "tabPage6"); this.tabPage6.Controls.Add(this.chkKcpcongestion); this.tabPage6.Controls.Add(this.txtKcpwriteBufferSize); this.tabPage6.Controls.Add(this.label10); @@ -449,6 +287,7 @@ this.tabPage6.Controls.Add(this.label7); this.tabPage6.Controls.Add(this.txtKcpmtu); this.tabPage6.Controls.Add(this.label6); + resources.ApplyResources(this.tabPage6, "tabPage6"); this.tabPage6.Name = "tabPage6"; this.tabPage6.UseVisualStyleBackColor = true; // @@ -520,15 +359,13 @@ // // tabPage7 // - resources.ApplyResources(this.tabPage7, "tabPage7"); this.tabPage7.Controls.Add(this.chkKeepOlderDedupl); this.tabPage7.Controls.Add(this.cbFreshrate); this.tabPage7.Controls.Add(this.lbFreshrate); this.tabPage7.Controls.Add(this.chkEnableStatistics); this.tabPage7.Controls.Add(this.chkAllowLANConn); - this.tabPage7.Controls.Add(this.txturlGFWList); - this.tabPage7.Controls.Add(this.label13); this.tabPage7.Controls.Add(this.chkAutoRun); + resources.ApplyResources(this.tabPage7, "tabPage7"); this.tabPage7.Name = "tabPage7"; this.tabPage7.UseVisualStyleBackColor = true; // @@ -540,9 +377,9 @@ // // cbFreshrate // - resources.ApplyResources(this.cbFreshrate, "cbFreshrate"); this.cbFreshrate.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.cbFreshrate.FormattingEnabled = true; + resources.ApplyResources(this.cbFreshrate, "cbFreshrate"); this.cbFreshrate.Name = "cbFreshrate"; // // lbFreshrate @@ -562,52 +399,17 @@ this.chkAllowLANConn.Name = "chkAllowLANConn"; this.chkAllowLANConn.UseVisualStyleBackColor = true; // - // txturlGFWList - // - resources.ApplyResources(this.txturlGFWList, "txturlGFWList"); - this.txturlGFWList.Name = "txturlGFWList"; - // - // label13 - // - resources.ApplyResources(this.label13, "label13"); - this.label13.Name = "label13"; - // // chkAutoRun // resources.ApplyResources(this.chkAutoRun, "chkAutoRun"); this.chkAutoRun.Name = "chkAutoRun"; this.chkAutoRun.UseVisualStyleBackColor = true; // - // tabPage9 - // - resources.ApplyResources(this.tabPage9, "tabPage9"); - this.tabPage9.Controls.Add(this.txtuserPacRule); - this.tabPage9.Controls.Add(this.panel4); - this.tabPage9.Name = "tabPage9"; - this.tabPage9.UseVisualStyleBackColor = true; - // - // txtuserPacRule - // - resources.ApplyResources(this.txtuserPacRule, "txtuserPacRule"); - this.txtuserPacRule.Name = "txtuserPacRule"; - // - // panel4 - // - resources.ApplyResources(this.panel4, "panel4"); - this.panel4.Controls.Add(this.label4); - this.panel4.Name = "panel4"; - // - // label4 - // - resources.ApplyResources(this.label4, "label4"); - this.label4.ForeColor = System.Drawing.Color.Brown; - this.label4.Name = "label4"; - // // panel2 // - resources.ApplyResources(this.panel2, "panel2"); this.panel2.Controls.Add(this.btnClose); this.panel2.Controls.Add(this.btnOK); + resources.ApplyResources(this.panel2, "panel2"); this.panel2.Name = "panel2"; // // btnOK @@ -638,24 +440,11 @@ this.groupBox1.ResumeLayout(false); this.groupBox1.PerformLayout(); this.tabPage2.ResumeLayout(false); - this.groupBox2.ResumeLayout(false); - this.tabControl2.ResumeLayout(false); - this.tabPage3.ResumeLayout(false); - this.tabPage3.PerformLayout(); - this.tabPage4.ResumeLayout(false); - this.tabPage4.PerformLayout(); - this.tabPage5.ResumeLayout(false); - this.tabPage5.PerformLayout(); - this.tabPage8.ResumeLayout(false); - this.panel3.ResumeLayout(false); - this.panel3.PerformLayout(); + this.tabPage2.PerformLayout(); this.tabPage6.ResumeLayout(false); this.tabPage6.PerformLayout(); this.tabPage7.ResumeLayout(false); this.tabPage7.PerformLayout(); - this.tabPage9.ResumeLayout(false); - this.tabPage9.PerformLayout(); - this.panel4.ResumeLayout(false); this.panel2.ResumeLayout(false); this.ResumeLayout(false); @@ -675,9 +464,7 @@ private System.Windows.Forms.Panel panel1; private System.Windows.Forms.TabControl tabControl1; private System.Windows.Forms.TabPage tabPage1; - private System.Windows.Forms.TabPage tabPage2; private System.Windows.Forms.Panel panel2; - private System.Windows.Forms.GroupBox groupBox2; private System.Windows.Forms.ComboBox cmbprotocol; private System.Windows.Forms.Label label1; private System.Windows.Forms.ComboBox cmbprotocol2; @@ -686,14 +473,6 @@ private System.Windows.Forms.CheckBox chkudpEnabled2; private System.Windows.Forms.CheckBox chkAllowIn2; private System.Windows.Forms.CheckBox chkmuxEnabled; - private System.Windows.Forms.TabControl tabControl2; - private System.Windows.Forms.TabPage tabPage3; - private System.Windows.Forms.TabPage tabPage4; - private System.Windows.Forms.Label labRoutingTips; - private System.Windows.Forms.TextBox txtUseragent; - private System.Windows.Forms.TabPage tabPage5; - private System.Windows.Forms.TextBox txtUserdirect; - private System.Windows.Forms.TextBox txtUserblock; private System.Windows.Forms.TabPage tabPage6; private System.Windows.Forms.TextBox txtKcpmtu; private System.Windows.Forms.Label label6; @@ -710,29 +489,17 @@ private System.Windows.Forms.CheckBox chkKcpcongestion; private System.Windows.Forms.TabPage tabPage7; private System.Windows.Forms.CheckBox chkAutoRun; - private System.Windows.Forms.Label label13; - private System.Windows.Forms.TextBox txturlGFWList; private System.Windows.Forms.CheckBox chkAllowLANConn; - private System.Windows.Forms.TextBox txtremoteDNS; - private System.Windows.Forms.Label label14; - private System.Windows.Forms.Panel panel3; - private System.Windows.Forms.ComboBox cmbdomainStrategy; - private System.Windows.Forms.ComboBox cmbroutingMode; private System.Windows.Forms.CheckBox chksniffingEnabled; private System.Windows.Forms.CheckBox chksniffingEnabled2; - private System.Windows.Forms.Button btnSetDefRountingRule; private System.Windows.Forms.CheckBox chkEnableStatistics; private System.Windows.Forms.ComboBox cbFreshrate; private System.Windows.Forms.Label lbFreshrate; - private System.Windows.Forms.Label label16; - private System.Windows.Forms.ComboBox cmblistenerType; - private System.Windows.Forms.TabPage tabPage8; - private System.Windows.Forms.TabPage tabPage9; - private System.Windows.Forms.TextBox txtuserPacRule; - private System.Windows.Forms.Panel panel4; - private System.Windows.Forms.Label label4; private System.Windows.Forms.CheckBox chkKeepOlderDedupl; - private System.Windows.Forms.LinkLabel linkLabelRoutingDoc; private System.Windows.Forms.CheckBox chkdefAllowInsecure; + private System.Windows.Forms.TabPage tabPage2; + private System.Windows.Forms.LinkLabel linkDnsObjectDoc; + private System.Windows.Forms.TextBox txtremoteDNS; + private System.Windows.Forms.Label label14; } } \ No newline at end of file diff --git a/v2rayN/v2rayN/Forms/OptionSettingForm.cs b/v2rayN/v2rayN/Forms/OptionSettingForm.cs index 78d4eeff..d1262268 100644 --- a/v2rayN/v2rayN/Forms/OptionSettingForm.cs +++ b/v2rayN/v2rayN/Forms/OptionSettingForm.cs @@ -4,6 +4,7 @@ using System.Windows.Forms; using v2rayN.Handler; using v2rayN.Base; using v2rayN.HttpProxyHandler; +using v2rayN.Mode; namespace v2rayN.Forms { @@ -18,13 +19,9 @@ namespace v2rayN.Forms { InitBase(); - InitRouting(); - InitKCP(); InitGUI(); - - InitUserPAC(); } /// @@ -68,25 +65,10 @@ namespace v2rayN.Forms //remoteDNS txtremoteDNS.Text = config.remoteDNS; - cmblistenerType.SelectedIndex = (int)config.listenerType; chkdefAllowInsecure.Checked = config.defAllowInsecure; } - /// - /// 初始化路由设置 - /// - private void InitRouting() - { - //路由 - cmbdomainStrategy.Text = config.domainStrategy; - int.TryParse(config.routingMode, out int routingMode); - cmbroutingMode.SelectedIndex = routingMode; - - txtUseragent.Text = Utils.List2String(config.useragent, true); - txtUserdirect.Text = Utils.List2String(config.userdirect, true); - txtUserblock.Text = Utils.List2String(config.userblock, true); - } /// /// 初始化KCP设置 @@ -110,16 +92,10 @@ namespace v2rayN.Forms //开机自动启动 chkAutoRun.Checked = Utils.IsAutoRun(); - //自定义GFWList - txturlGFWList.Text = config.urlGFWList; - chkAllowLANConn.Checked = config.allowLANConn; chkEnableStatistics.Checked = config.enableStatistics; chkKeepOlderDedupl.Checked = config.keepOlderDedupl; - - - ComboItem[] cbSource = new ComboItem[] { new ComboItem{ID = (int)Global.StatisticsFreshRate.quick, Text = UIRes.I18N("QuickFresh")}, @@ -145,12 +121,6 @@ namespace v2rayN.Forms } } - - private void InitUserPAC() - { - txtuserPacRule.Text = Utils.List2String(config.userPacRule, true); - } - private void btnOK_Click(object sender, EventArgs e) { if (SaveBase() != 0) @@ -158,10 +128,6 @@ namespace v2rayN.Forms return; } - if (SaveRouting() != 0) - { - return; - } if (SaveKCP() != 0) { @@ -173,11 +139,6 @@ namespace v2rayN.Forms return; } - if (SaveUserPAC() != 0) - { - return; - } - if (ConfigHandler.SaveConfig(ref config) == 0) { this.DialogResult = DialogResult.OK; @@ -265,36 +226,12 @@ namespace v2rayN.Forms //remoteDNS config.remoteDNS = txtremoteDNS.Text.TrimEx(); - config.listenerType = (ListenerType)Enum.ToObject(typeof(ListenerType), cmblistenerType.SelectedIndex); config.defAllowInsecure = chkdefAllowInsecure.Checked; return 0; } - /// - /// 保存路由设置 - /// - /// - private int SaveRouting() - { - //路由 - string domainStrategy = cmbdomainStrategy.Text; - string routingMode = cmbroutingMode.SelectedIndex.ToString(); - - string useragent = txtUseragent.Text.TrimEx(); - string userdirect = txtUserdirect.Text.TrimEx(); - string userblock = txtUserblock.Text.TrimEx(); - - config.domainStrategy = domainStrategy; - config.routingMode = routingMode; - - config.useragent = Utils.String2List(useragent); - config.userdirect = Utils.String2List(userdirect); - config.userblock = Utils.String2List(userblock); - - return 0; - } /// /// 保存KCP设置 @@ -340,9 +277,6 @@ namespace v2rayN.Forms //开机自动启动 Utils.SetAutoRun(chkAutoRun.Checked); - //自定义GFWList - config.urlGFWList = txturlGFWList.Text.TrimEx(); - config.allowLANConn = chkAllowLANConn.Checked; bool lastEnableStatistics = config.enableStatistics; @@ -350,27 +284,10 @@ namespace v2rayN.Forms config.statisticsFreshRate = (int)cbFreshrate.SelectedValue; config.keepOlderDedupl = chkKeepOlderDedupl.Checked; - //if(lastEnableStatistics != config.enableStatistics) - //{ - // /// https://stackoverflow.com/questions/779405/how-do-i-restart-my-c-sharp-winform-application - // // Shut down the current app instance. - // Application.Exit(); - - // // Restart the app passing "/restart [processId]" as cmd line args - // Process.Start(Application.ExecutablePath, "/restart " + Process.GetCurrentProcess().Id); - //} - return 0; - } - - private int SaveUserPAC() - { - string userPacRule = txtuserPacRule.Text.TrimEx(); - userPacRule = userPacRule.Replace("\"", ""); - - config.userPacRule = Utils.String2List(userPacRule); return 0; } + private void btnClose_Click(object sender, EventArgs e) { this.DialogResult = DialogResult.Cancel; @@ -388,75 +305,9 @@ namespace v2rayN.Forms chkudpEnabled2.Enabled = blAllow2; } - private void btnSetDefRountingRule_Click(object sender, EventArgs e) + private void linkDnsObjectDoc_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { - txtUseragent.Text = Utils.GetEmbedText(Global.CustomRoutingFileName + Global.agentTag); - txtUserdirect.Text = Utils.GetEmbedText(Global.CustomRoutingFileName + Global.directTag); - txtUserblock.Text = Utils.GetEmbedText(Global.CustomRoutingFileName + Global.blockTag); - cmbroutingMode.SelectedIndex = 3; - - List lstUrl = new List - { - Global.CustomRoutingListUrl + Global.agentTag, - Global.CustomRoutingListUrl + Global.directTag, - Global.CustomRoutingListUrl + Global.blockTag - }; - - List lstTxt = new List - { - txtUseragent, - txtUserdirect, - txtUserblock - }; - - for (int k = 0; k < lstUrl.Count; k++) - { - TextBox txt = lstTxt[k]; - DownloadHandle downloadHandle = new DownloadHandle(); - downloadHandle.UpdateCompleted += (sender2, args) => - { - if (args.Success) - { - string result = args.Msg; - if (Utils.IsNullOrEmpty(result)) - { - return; - } - txt.Text = result; - } - else - { - AppendText(false, args.Msg); - } - }; - downloadHandle.Error += (sender2, args) => - { - AppendText(true, args.GetException().Message); - }; - - downloadHandle.WebDownloadString(lstUrl[k]); - } - } - void AppendText(bool notify, string text) - { - labRoutingTips.Text = text; - } - - private void linkLabelRoutingDoc_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - System.Diagnostics.Process.Start("https://www.v2fly.org/config/routing.html"); - } - } - - class ComboItem - { - public int ID - { - get; set; - } - public string Text - { - get; set; + System.Diagnostics.Process.Start("https://www.v2fly.org/config/dns.html#dnsobject"); } } } diff --git a/v2rayN/v2rayN/Forms/OptionSettingForm.resx b/v2rayN/v2rayN/Forms/OptionSettingForm.resx index 2d85641a..f0757e7d 100644 --- a/v2rayN/v2rayN/Forms/OptionSettingForm.resx +++ b/v2rayN/v2rayN/Forms/OptionSettingForm.resx @@ -117,34 +117,992 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 355, 16 + + + 75, 23 + + + 7 + + + &Cancel + + + btnClose + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panel2 + + + 0 + + + True + + + + NoControl + + + 15, 192 + + + 102, 16 + + + 35 + + + allowInsecure + + + chkdefAllowInsecure + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 0 + + + True + + + NoControl + + + 468, 60 + + + 120, 16 + + + 32 + + + Turn on Sniffing + + + False + + + chksniffingEnabled2 + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 1 + + + True + + + NoControl + + + 468, 27 + + + 120, 16 + + + 31 + + + Turn on Sniffing + + + chksniffingEnabled + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 2 + + + True + + + 15, 129 + + + 174, 16 + + + 20 + + + Turn on Mux Multiplexing + + + chkmuxEnabled + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 3 + True - + + 15, 63 + + + 120, 16 + + + 19 + + + listening port 2 + + + False + + + chkAllowIn2 + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 4 + + + True + + + 369, 62 + + + 84, 16 + + + 18 + + + Enable UDP + + + False + + + chkudpEnabled2 + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 5 + + + socks + + + http + + + 257, 60 + + + 97, 20 + + + 17 + + + False + + + cmbprotocol2 + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 6 + + + True + + + 206, 64 + + + 53, 12 + + + 16 + + + protocol + + + False + + + label3 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 7 + + + 124, 60 + + + 78, 21 + + + 14 + + + False + + + txtlocalPort2 + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + + groupBox1 + + + 8 + + + False + + + socks + + + http + + + 257, 25 + + + 97, 20 + + + 12 + + + cmbprotocol + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 9 + + + True + + + 206, 29 + + + 53, 12 + + 11 - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + protocol - - groupBox2 + + label1 - - 2 + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 30, 176 + + groupBox1 + + + 10 + + + True + + + 369, 27 + + + 84, 16 + + + 10 + + + Enable UDP + + + chkudpEnabled + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 11 + + + True + + + 15, 160 + + + 126, 16 + + + 9 Record local logs - - 634, 460 + + chklogEnabled + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 12 + + + debug + + + info + + + warning + + + error + + + none + + + 257, 158 + + + 97, 20 + + + 6 + + + cmbloglevel + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 13 + + + True + + + 193, 162 + + + 59, 12 + + + 8 + + + Log level + + + label5 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 14 + + + 124, 25 + + + 78, 21 + + + 3 + + + txtlocalPort + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 15 + + + True + + + 33, 29 + + + 89, 12 + + + 2 + + + Listening port + + + label2 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 16 + + + Fill + + + 3, 3 + + + 648, 421 + + + 6 + + + groupBox1 + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage1 + + + 0 + + + 4, 22 + + + 3, 3, 3, 3 + + + 654, 427 + + + 0 + + + Core: basic settings + + + tabPage1 + + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabControl1 + + + 0 + + + True + + + NoControl + + + 342, 17 + + + 0, 0, 0, 0 + + + 107, 12 + + + 40 + + + Support DnsObject + + + linkDnsObjectDoc + + + System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage2 + + + 0 + + + 8, 41 + + + True + + + 638, 356 + + + 39 + + + txtremoteDNS + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage2 + + + 1 + + + True + + + NoControl + + + 8, 17 + + + 281, 12 + + + 38 + + + Custom DNS (multiple, separated by commas (,)) + + + label14 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage2 + + + 2 + + + 4, 22 + + + 654, 427 + + + 4 + + + Core: DNS settings + + + tabPage2 + + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabControl1 + + + 1 + + + True + + + 20, 143 + + + 84, 16 + + + 20 + + + congestion + + + chkKcpcongestion + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage6 + + + 0 + + + 345, 100 + + + 94, 21 + + + 15 + + + txtKcpwriteBufferSize + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage6 + + + 1 + + + True + + + 236, 104 + + + 95, 12 + + + 14 + + + writeBufferSize + + + label10 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage6 + + + 2 + + + 111, 100 + + + 94, 21 + + + 13 + + + txtKcpreadBufferSize + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage6 + + + 3 + + + True + + + 18, 104 + + + 89, 12 + + + 12 + + + readBufferSize + + + label11 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage6 + + + 4 + + + 345, 62 + + + 94, 21 + + + 11 + + + txtKcpdownlinkCapacity + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage6 + + + 5 + + + True + + + 236, 66 + + + 101, 12 + + + 10 + + + downlinkCapacity + + + label8 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage6 + + + 6 + + + 111, 62 + + + 94, 21 + + + 9 + + + txtKcpuplinkCapacity + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage6 + + + 7 + + + True + + + 18, 66 + + + 89, 12 + + + 8 + + + uplinkCapacity + + + label9 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage6 + + + 8 + + + 345, 24 + + + 94, 21 + + + 7 + + + txtKcptti + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage6 + + + 9 + + + True + + + 236, 28 + + + 23, 12 + + + 6 + + + tti + + + label7 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage6 + + + 10 + + + 111, 24 + + + 94, 21 + + + 5 + + + txtKcpmtu + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage6 + + + 11 + + + True + + + 18, 28 + + + 23, 12 + + + 4 + + + mtu + + + label6 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage6 12 @@ -152,1922 +1110,340 @@ 4, 22 - - txtKcpwriteBufferSize - - - txtuserPacRule - - - 2 - - - False - - - 18 - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabControl1 - - - groupBox1 - - - 5 - - - 94, 21 - - - 9 - - - groupBox1 - - - tabPage9 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - linkLabelRoutingDoc - - - 468, 60 - - - - Top - - - 102, 16 - - - 6 - - - txtKcptti - - - tabPage3 - - - 4, 22 - - - cmblistenerType - - - 0 - - - 634, 460 - - - 0 - - - 111, 100 - - - True - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 3, 3 - - - 598, 16 - - - Core: basic settings - - - True - - - 120, 16 - - - 281, 12 - - - panel3 - - - True - - - tti - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 84, 16 - - - groupBox1 - - - 65, 12 - - - 628, 454 - - - tabPage7 - - - Only open PAC, do not automatically configure PAC - - - 12 - - - 662, 60 - - - 20 - - - http - - - 7 - - - chkdefAllowInsecure - - - 648, 573 - - - 206, 64 - - - 95, 12 - - - tabPage6 - - - 14 - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 15, 63 - - - tabControl2 - - - 16 - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Fill - - - Enable UDP - - - 94, 21 - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Fill - - - &Cancel - - - label10 - - - 648, 573 - - - Vertical - - - groupBox1 - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 0 - - - 1 - - - Bypassing the LAN address - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Bypassing LAN and mainland address - - - Bypass mainland address - - - Top - - - 12 - - - txtKcpmtu - - - lbFreshrate - - - 1 - - - label11 - - - 29 - - - 1 - - - NoControl - - - Turn on Sniffing - - - Only open Http proxy, do not automatically configure proxy server (direct mode) - - - False - - - 4 - - - tabPage6 - - - False - - - tabControl2 - - - 1 - - - $this - - - 7 - - - 3 - - - 4 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 0 - - - readBufferSize - - - 0 - - - tabPage6 - - - 3 - - - True - - - 18 - - - True - - - Fill - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - True - - - congestion - - - NoControl - - - groupBox1 - - - panel3 - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + 3, 3, 3, 3 - - 89, 12 - - - info - - - txtUseragent - - - 1 - - - tabPage7 - - - v2rayN settings - - - 20 - - - groupBox1 - - - 16 - - - Not Enabled Http Proxy - - - 14 - - - 32 - - - 628, 454 - - - 6, 12 - - - groupBox1 - - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - txtKcpdownlinkCapacity - - - 198, 16 - - - Automatically start at system startup - - - 3, 3, 3, 3 - - - 1 - - - Http proxy - - - 4 - - - groupBox1 - - - tabPage6 - - - 355, 16 - - - 3, 3, 3, 3 - - - 97, 20 - - - 3 - - - 662, 605 - - - 33, 29 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 78, 21 - - - 5, 45 - - - Custom DNS (multiple, separated by commas (,)) - - - tabControl1 - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 598, 16 - - - v2rayN.Forms.BaseForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null - - - warning - - - groupBox1 - - - 0 - - - tabPage7 - - - Statistics freshrate - - - label5 - - - 120, 16 - - - 20 - - - 89, 12 - - - Only open Http proxy and do nothing - - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 18, 66 - - - 20, 143 - - - 11 - - - 4, 4, 4, 4 - - - tabPage6 - - - btnClose - - - Turn on Sniffing - - - groupBox1 - - - 18, 28 - - - 30 - - - 34 - - - 20 - - - 29 - - - 0 - - - 21, 17 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 2 - - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 14 - - - 19 - - - 4, 22 - - - *Set user pac rules, separated by commas (,) - - - True - - - chksniffingEnabled - - - 6 - - - 174, 16 - - - 16 - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 18, 104 - - - tabPage2 - - - NoControl - - - 97, 20 - - - socks - - - tabPage5 - - - 576, 16 - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 464, 20 - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabPage9 - - - True - - - tabPage6 - - - *Set the rules, separated by commas (,); support Domain (pure string / regular / subdomain) and IP - - - tabPage3 - - - 30 - - - 53, 12 - - - 17 - - - label8 - - - 468, 27 - - - label13 - - - chkAutoRun - - - tabControl2 - - - 654, 579 - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 345, 62 - - - 15 - - - 12 - - - 1 - - - chkudpEnabled - - - True - - - 33, 253 - - - tabPage1 - - - 5 - - - tabPage6 - - - 2 - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 5 - - - btnSetDefRountingRule - - - True - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 32 - - - label1 - - - 84, 16 - - - tabPage8 - - - True - - - panel4 - - - label7 - - - allowInsecure - - - txtlocalPort - - - True - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabPage7 - - - 3, 17 - - - 3, 40 - - - labRoutingTips - - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 3, 3, 3, 3 - - - 124, 25 - - - protocol - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabControl2 - - - Top, Right - - - Turn on Mux Multiplexing - - - True - - - 23, 12 - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 555, 100 - - - socks - - - 0 - - - 3, 3 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - chkAllowLANConn - - - 84, 16 - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabControl1 - - - tabControl1 - - - True - - - tabPage6 - - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 15, 38 - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 3 - - - 10 - - - 369, 62 - - - 13 - - - 1.Proxy Domain or IP - - - groupBox1 - - - panel3 - - - NoControl - - - 654, 579 - - - chkEnableStatistics - - - 14 - - - 8 - - - 7 - - - http - - - 53, 12 - - - 193, 162 - - - True - - - 2 - - - 0 - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabPage6 - - - label2 - - - 165, 20 - - - False - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 0 - - - 3, 3 - - - 9 - - - groupBox1 - - - 4.Pre-defined rules - - - 101, 12 - - - 3 - - - 12 - - - 431, 12 - - - Domain strategy - - - cmbprotocol - - - 648, 37 - - - True - - - Enable Statistics (Realtime netspeed and traffic records. Require restart the v2rayN client) - - - System.Windows.Forms.TabControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 4 - - - Listening port - - - Vertical - - - Fill - - - 1 - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Vertical - - - 1 - - - 28 - - - 257, 60 - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 94, 21 - - - True - - - cmbprotocol2 - - - Open Http proxy and automatically configure proxy server (global mode) - - - groupBox2 - - - chkKeepOlderDedupl - - - 15, 129 - - - 255, 20 - - - mtu - - - True - - - True - - - True - - - chkKcpcongestion - - - 1 - - - 0 - - - 257, 25 - - - 3, 84 - - - groupBox1 - - - Top - - - listening port 2 - - - 97, 20 - - - chkAllowIn2 - - - tabPage2 - - - System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - True - - - True - - - False - - - 3 - - - 33 - - - 4, 22 - - - 9 - - - 541, 100 - - - Core: KCP settings - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - error - - - 15, 160 - - - True - - - 59, 12 - - - 5, 14 - - - groupBox1 - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 634, 460 - - - 12 - - - 120, 16 - - - 662, 10 - - - txtlocalPort2 - - - Only open PAC and do nothing - - - True - - - Fill - - - groupBox1 - - - 654, 579 - - - 7 - - - 27 - - - 10 - - - False - - - Vertical - - - 206, 29 - - - 8 - - - txtUserdirect - - - chkudpEnabled2 - - - 0 - - - 0 - - - 648, 536 - - - Allow connections from the LAN - - - 161, 84 - - - panel3 - - - 0 - - - tabPage6 - - - tabControl2 - - - 30, 87 - - - txtKcpreadBufferSize - - - 4 - - - panel2 - - - 3 - - - 8 - - - 35 - - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - User PAC settings - - - 95, 12 - - - tabPage7 - - - 10 - - - none - - - Log level - - - tabControl1 - - - protocol - - - 6 - - - tabPage4 - - - NoControl + + 654, 427 2 - - AsIs - - - 15, 62 - - - 7 - - - tabPage7 - - - 642, 486 - - - 4, 22 - - - 58, 20 - - - groupBox1 - - - 1 - - - 42, 98 - - - 13 - - - 13 - - - 2 - - - downlinkCapacity - - - True - - - 78, 21 - - - tabPage7 - - - True - - - 19 - - - System.Windows.Forms.TabControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - True - - - cmbroutingMode - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 1 - - - 23, 12 - - - True - - - 8 - - - True - - - 3, 3, 3, 3 - - - Custom GFWList address (please fill in the blank without customization) - - - 345, 100 - - - panel3 - - - 75, 23 - - - 654, 579 - - - 10 - - - 204, 16 - - - 17 - - - 628, 454 - - - debug - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 6 - - - 1 - - - txtUserblock - - - 229, 23 - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabPage1 - - - 15 - - - 2 - - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 0 - - - 11 - - - 18 - - - 126, 16 - - - 345, 24 - - - NoControl - - - 4, 22 - - - cmbdomainStrategy - - - False - - - 257, 158 - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - &OK - - - 10 - - - 634, 460 - - - panel2 - - - txtKcpuplinkCapacity - - - 115, 10 - - - System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabPage4 - - - chklogEnabled - - - chksniffingEnabled2 - - - tabPage7 - - - 642, 67 - - - 0 - - - 4, 22 - - - True - - - System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabPage5 - - - 9 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - IPIfNonMatch - - - groupBox1 - - - 4, 22 - - - 23 - - - 3.Block Domain or IP - - - label3 - - - 6 - - - 236, 66 - - - tabPage7 - - - $this - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - True - - - $this - - - 8 - - - txtremoteDNS - - - 3, 3 - - - 0, 615 - - - 19 - - - 33 - - - 94, 21 - - - 4, 22 - - - writeBufferSize - - - 11 - - - System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 89, 12 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 0 - - - 31 - - - 369, 27 - - - 4 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Fill + + Core: KCP settings tabPage6 - - groupBox1 - - - groupBox1 - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - panel4 - - - True - - - 29 - - - Fill - - - True - - - 3, 3 - - - OptionSettingForm - - - 124, 94 - - - Core: Routing settings - - - 13 - - - tabPage8 - - - 2 - - - 236, 104 - - - 5 - - - Open PAC and automatically configure PAC (PAC mode) - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - NoControl - - - tabPage9 - - - 94, 21 - - - 75, 23 - - - 15, 16 - - - 33, 277 - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 0, 0, 0, 0 - - - 662, 675 - - - uplinkCapacity - - - IPOnDemand - - - NoControl - - - True - - - 6 - - - 1 - - - 0 - - - Settings - - - 0 - - - 3, 3, 3, 3 - - - 3, 3 - - - 32, 205 - - - cmbloglevel - - - 111, 62 - - + System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - label4 - - - System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - label16 - - - btnOK - - - Set default custom routing rules - - - tabPage6 - - - txturlGFWList - - - chkmuxEnabled - - - 654, 579 - - - tabPage6 - - + tabControl1 - - 0 + + 2 + + + True + + + NoControl 15, 110 - - 5, 11 + + 198, 16 - - 0 - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 0, 0 - - - Enable UDP - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 3, 3, 3, 3 - - - groupBox1 - - - 19 - - - 2.Direct Domain or IP - - - 267, 16 - - - Global - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Fill - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 9 - - - 0 - - - 322, 10 - - - 15, 192 - - - 0 - - - 94, 21 - - - 3 + + 33 Keep older when deduplication - - 3, 3, 3, 3 + + chkKeepOlderDedupl - - 236, 28 + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - Bottom + + tabPage7 - - 3 - - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + 0 - - groupBox1 + + 161, 84 - - 125, 12 + + 58, 20 - - 3, 3, 3, 3 - - - 11 - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 124, 60 + + 32 cbFreshrate + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage7 + + + 1 + + + True + + + NoControl + + + 30, 87 + + + 125, 12 + + + 30 + + + Statistics freshrate + + + lbFreshrate + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage7 + + + 2 + + + True + + + NoControl + + + 15, 62 + + + 576, 16 + + + 29 + + + Enable Statistics (Realtime netspeed and traffic records. Require restart the v2rayN client) + + + chkEnableStatistics + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage7 + + + 3 + + + True + + + 15, 38 + + + 204, 16 + + + 29 + + + Allow connections from the LAN + + + chkAllowLANConn + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage7 + + + 4 + + + True + + + 15, 16 + 246, 16 - - tabPage6 + + 23 - - label6 + + Automatically start at system startup - - 111, 24 + + chkAutoRun - - panel2 + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 21 + + tabPage7 - - label9 + + 5 + + + 4, 22 + + + 3, 3, 3, 3 + + + 654, 427 + + + 3 + + + v2rayN settings + + + tabPage7 + + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabControl1 + + + 3 + + + Fill 0, 10 + + 662, 453 + + + 10 + + + tabControl1 + + + System.Windows.Forms.TabControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 0 + + + 267, 16 + + + 75, 23 + + + 8 + + + &OK + + + btnOK + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panel2 + + + 1 + + + Bottom + + + 0, 463 + + + 662, 60 + + + 11 + + + panel2 + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 1 + + + Top + + + 0, 0 + + + 662, 10 + + + 9 + panel1 + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + 2 - - label14 - True + + zh-Hans + + + 6, 12 + + + 662, 523 + + + 4, 4, 4, 4 + + + Settings + + + OptionSettingForm + + + v2rayN.Forms.BaseForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/v2rayN/v2rayN/Forms/OptionSettingForm.zh-Hans.resx b/v2rayN/v2rayN/Forms/OptionSettingForm.zh-Hans.resx index 81c0d92c..0618fb5f 100644 --- a/v2rayN/v2rayN/Forms/OptionSettingForm.zh-Hans.resx +++ b/v2rayN/v2rayN/Forms/OptionSettingForm.zh-Hans.resx @@ -120,43 +120,19 @@ 取消(&C) - - Core:基础设置 - + + 161, 12 + + + 支持填写DnsObject,JSON格式 + - 222, 16 + 336, 16 底层传输安全选tls时,默认跳过证书验证(allowInsecure) - - 53, 12 - - - Http代理 - - - 关闭Http代理 - - - 开启Http代理,并自动配置系统代理(全局模式) - - - 开启PAC,并自动配置系统代理(PAC模式) - - - 仅开启Http代理,并清除系统代理 - - - 仅开启PAC,并清除系统代理 - - - 仅开启Http代理,不改变系统代理 - - - 仅开启PAC,不改变系统代理 - 96, 16 @@ -226,107 +202,27 @@ 本地监听端口 + + 648, 437 + + + 654, 443 + + + Core:基础设置 + + + 654, 443 + - Core:路由设置 + Core:DNS设置 - - 3, 89 - - - 642, 481 - - - 634, 455 - - - 1.代理的Domain或IP - - - 628, 449 - - - 634, 455 - - - 2.直连的Domain或IP - - - 628, 449 - - - 634, 455 - - - 3.阻止的Domain或IP - - - 628, 449 - - - 634, 455 - - - 4.预定义规则 - - - 全局 - - - 绕过局域网地址 - - - 绕过大陆地址 - - - 绕过局域网及大陆地址 - - - 19, 26 - - - 244, 20 - - - 642, 72 - - - 77, 12 - - - 域名解析策略 - - - - NoControl - - - 351, 14 - - - 201, 23 - - - 一键设置默认自定义路由规则 - - - - True - - - 5, 49 - - - 383, 12 - - - *设置的规则,用逗号(,)隔开;支持Domain(纯字符串/正则/子域名)和IP + + 654, 443 Core:KCP设置 - - v2rayN设置 - 156, 16 @@ -351,27 +247,30 @@ 允许来自局域网的连接 - - 227, 12 - - - 自定义GFWList地址(不需自定义请填空白) - 180, 16 开机自动启动(可能会不成功) - - 用户PAC设置 + + 654, 443 - - *设置用户PAC规则,用逗号(,)隔开 + + v2rayN设置 + + + 662, 469 确定(&O) + + 0, 479 + + + 662, 539 + 参数设置 diff --git a/v2rayN/v2rayN/Forms/RoutingSettingControl.Designer.cs b/v2rayN/v2rayN/Forms/RoutingSettingControl.Designer.cs new file mode 100644 index 00000000..56ae1ccf --- /dev/null +++ b/v2rayN/v2rayN/Forms/RoutingSettingControl.Designer.cs @@ -0,0 +1,159 @@ +namespace v2rayN.Forms +{ + partial class RoutingSettingControl + { + /// + /// 必需的设计器变量。 + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 清理所有正在使用的资源。 + /// + /// 如果应释放托管资源,为 true;否则为 false。 + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region 组件设计器生成的代码 + + /// + /// 设计器支持所需的方法 - 不要修改 + /// 使用代码编辑器修改此方法的内容。 + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(RoutingSettingControl)); + this.groupBox2 = new System.Windows.Forms.GroupBox(); + this.btnExpand = new System.Windows.Forms.Button(); + this.label4 = new System.Windows.Forms.Label(); + this.label1 = new System.Windows.Forms.Label(); + this.cmbroutingMode = new System.Windows.Forms.ComboBox(); + this.cmbOutboundTag = new System.Windows.Forms.ComboBox(); + this.btnRemove = new System.Windows.Forms.Button(); + this.txtUserRule = new System.Windows.Forms.TextBox(); + this.txtRemarks = new System.Windows.Forms.TextBox(); + this.label2 = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.groupBox2.SuspendLayout(); + this.SuspendLayout(); + // + // groupBox2 + // + resources.ApplyResources(this.groupBox2, "groupBox2"); + this.groupBox2.Controls.Add(this.btnExpand); + this.groupBox2.Controls.Add(this.label4); + this.groupBox2.Controls.Add(this.label1); + this.groupBox2.Controls.Add(this.cmbroutingMode); + this.groupBox2.Controls.Add(this.cmbOutboundTag); + this.groupBox2.Controls.Add(this.btnRemove); + this.groupBox2.Controls.Add(this.txtUserRule); + this.groupBox2.Controls.Add(this.txtRemarks); + this.groupBox2.Controls.Add(this.label2); + this.groupBox2.Controls.Add(this.label3); + this.groupBox2.Name = "groupBox2"; + this.groupBox2.TabStop = false; + // + // btnExpand + // + resources.ApplyResources(this.btnExpand, "btnExpand"); + this.btnExpand.Name = "btnExpand"; + this.btnExpand.UseVisualStyleBackColor = true; + this.btnExpand.Click += new System.EventHandler(this.btnExpand_Click); + // + // label4 + // + resources.ApplyResources(this.label4, "label4"); + this.label4.Name = "label4"; + // + // label1 + // + resources.ApplyResources(this.label1, "label1"); + this.label1.Name = "label1"; + // + // cmbroutingMode + // + resources.ApplyResources(this.cmbroutingMode, "cmbroutingMode"); + this.cmbroutingMode.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cmbroutingMode.FormattingEnabled = true; + this.cmbroutingMode.Items.AddRange(new object[] { + resources.GetString("cmbroutingMode.Items"), + resources.GetString("cmbroutingMode.Items1"), + resources.GetString("cmbroutingMode.Items2"), + resources.GetString("cmbroutingMode.Items3"), + resources.GetString("cmbroutingMode.Items4")}); + this.cmbroutingMode.Name = "cmbroutingMode"; + // + // cmbOutboundTag + // + resources.ApplyResources(this.cmbOutboundTag, "cmbOutboundTag"); + this.cmbOutboundTag.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cmbOutboundTag.FormattingEnabled = true; + this.cmbOutboundTag.Items.AddRange(new object[] { + resources.GetString("cmbOutboundTag.Items"), + resources.GetString("cmbOutboundTag.Items1"), + resources.GetString("cmbOutboundTag.Items2")}); + this.cmbOutboundTag.Name = "cmbOutboundTag"; + // + // btnRemove + // + resources.ApplyResources(this.btnRemove, "btnRemove"); + this.btnRemove.Name = "btnRemove"; + this.btnRemove.UseVisualStyleBackColor = true; + this.btnRemove.Click += new System.EventHandler(this.btnRemove_Click); + // + // txtUserRule + // + resources.ApplyResources(this.txtUserRule, "txtUserRule"); + this.txtUserRule.Name = "txtUserRule"; + this.txtUserRule.Leave += new System.EventHandler(this.txtRemarks_Leave); + // + // txtRemarks + // + resources.ApplyResources(this.txtRemarks, "txtRemarks"); + this.txtRemarks.Name = "txtRemarks"; + this.txtRemarks.Leave += new System.EventHandler(this.txtRemarks_Leave); + // + // label2 + // + resources.ApplyResources(this.label2, "label2"); + this.label2.Name = "label2"; + // + // label3 + // + resources.ApplyResources(this.label3, "label3"); + this.label3.Name = "label3"; + // + // RoutingSettingControl + // + resources.ApplyResources(this, "$this"); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.groupBox2); + this.Name = "RoutingSettingControl"; + this.Load += new System.EventHandler(this.RoutingSettingControl_Load); + this.groupBox2.ResumeLayout(false); + this.groupBox2.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.GroupBox groupBox2; + private System.Windows.Forms.TextBox txtUserRule; + private System.Windows.Forms.TextBox txtRemarks; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Button btnRemove; + private System.Windows.Forms.ComboBox cmbOutboundTag; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.ComboBox cmbroutingMode; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.Button btnExpand; + } +} diff --git a/v2rayN/v2rayN/Forms/RoutingSettingControl.cs b/v2rayN/v2rayN/Forms/RoutingSettingControl.cs new file mode 100644 index 00000000..2637aacf --- /dev/null +++ b/v2rayN/v2rayN/Forms/RoutingSettingControl.cs @@ -0,0 +1,76 @@ +using System; +using System.Windows.Forms; +using v2rayN.Base; +using v2rayN.Mode; + +namespace v2rayN.Forms +{ + public partial class RoutingSettingControl : UserControl + { + public event ChangeEventHandler OnButtonClicked; + + + public RoutingItem routingItem + { + get; set; + } + + public RoutingSettingControl() + { + InitializeComponent(); + } + + private void RoutingSettingControl_Load(object sender, EventArgs e) + { + BindingSub(); + } + + private void BindingSub() + { + if (routingItem != null) + { + txtRemarks.Text = routingItem.remarks.ToString(); + cmbOutboundTag.Text = routingItem.outboundTag; + int.TryParse(routingItem.routingMode, out int routingMode); + cmbroutingMode.SelectedIndex = routingMode; + txtUserRule.Text = Utils.List2String(routingItem.userRules, true); + } + } + private void EndBindingSub() + { + if (routingItem != null) + { + routingItem.remarks = txtRemarks.Text.TrimEx(); + routingItem.outboundTag = cmbOutboundTag.Text; + routingItem.routingMode = cmbroutingMode.SelectedIndex.ToString(); + routingItem.userRules = Utils.String2List(txtUserRule.Text); + } + } + private void txtRemarks_Leave(object sender, EventArgs e) + { + EndBindingSub(); + } + + private void btnRemove_Click(object sender, EventArgs e) + { + if (routingItem != null) + { + routingItem.remarks = string.Empty; + } + + OnButtonClicked?.Invoke(sender, e); + } + + private void btnExpand_Click(object sender, EventArgs e) + { + if (this.Height > 200) + { + this.Height = 160; + } + else + { + this.Height = 500; + } + } + } +} diff --git a/v2rayN/v2rayN/Forms/RoutingSettingControl.resx b/v2rayN/v2rayN/Forms/RoutingSettingControl.resx new file mode 100644 index 00000000..7c33a91b --- /dev/null +++ b/v2rayN/v2rayN/Forms/RoutingSettingControl.resx @@ -0,0 +1,456 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Pre-defined + + + + NoControl + + + + 733, 164 + + + 119, 20 + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 9 + + + 127, 53 + + + 75, 23 + + + 127, 87 + + + Remove + + + txtRemarks + + + + 24 + + + 23 + + + RoutingSettingControl + + + 162, 21 + + + label1 + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 28 + + + 7 + + + proxy + + + 77, 12 + + + 362, 21 + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 6, 12 + + + label3 + + + 127, 21 + + + True + + + 0 + + + btnExpand + + + groupBox2 + + + 12, 87 + + + 2 + + + cmbroutingMode + + + 255, 20 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Global + + + 71, 12 + + + Bypass mainland address + + + Bypassing the LAN address + + + 4 + + + 640, 21 + + + Fill + + + NoControl + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 25 + + + groupBox2 + + + NoControl + + + 47, 12 + + + True + + + btnRemove + + + 0, 0 + + + 29 + + + label4 + + + NoControl + + + Out Tag + + + 27 + + + block + + + direct + + + 75, 23 + + + NoControl + + + 26 + + + 5 + + + groupBox2 + + + 6 + + + Expand + + + 1 + + + groupBox2 + + + groupBox2 + + + 588, 68 + + + True + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + True + + + Bypassing LAN and mainland address + + + NoControl + + + label2 + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 733, 164 + + + 8 + + + Top, Bottom, Left, Right + + + 12, 57 + + + cmbOutboundTag + + + 11 + + + Remarks + + + groupBox2 + + + 3 + + + True + + + 12, 25 + + + groupBox2 + + + 301, 26 + + + 47, 12 + + + Rule + + + 10 + + + Domain or IP + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + txtUserRule + + + 0 + + + System.Windows.Forms.UserControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 0 + + + $this + + + Use custom Domain or IP + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 640, 46 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 10 + + + True + + + zh-Hans + + \ No newline at end of file diff --git a/v2rayN/v2rayN/Forms/RoutingSettingControl.zh-Hans.resx b/v2rayN/v2rayN/Forms/RoutingSettingControl.zh-Hans.resx new file mode 100644 index 00000000..d95c2560 --- /dev/null +++ b/v2rayN/v2rayN/Forms/RoutingSettingControl.zh-Hans.resx @@ -0,0 +1,184 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + 619, 46 + + + 扩大 + + + 53, 12 + + + 出口标签 + + + 65, 12 + + + 预定义规则 + + + 使用自定义域名或IP + + + 全局 + + + 绕过局域网 + + + 绕过大陆地址 + + + 绕过局域网及大陆地址 + + + 619, 20 + + + 移除 + + + 567, 64 + + + 29, 12 + + + 备注 + + + 53, 12 + + + 域名或IP + + + 709, 160 + + + 规则 + + + 709, 160 + + \ No newline at end of file diff --git a/v2rayN/v2rayN/Forms/RoutingSettingForm.Designer.cs b/v2rayN/v2rayN/Forms/RoutingSettingForm.Designer.cs new file mode 100644 index 00000000..5a87e09a --- /dev/null +++ b/v2rayN/v2rayN/Forms/RoutingSettingForm.Designer.cs @@ -0,0 +1,151 @@ +namespace v2rayN.Forms +{ + partial class RoutingSettingForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(RoutingSettingForm)); + this.btnClose = new System.Windows.Forms.Button(); + this.panCon = new System.Windows.Forms.Panel(); + this.panel2 = new System.Windows.Forms.Panel(); + this.btnAdd = new System.Windows.Forms.Button(); + this.btnOK = new System.Windows.Forms.Button(); + this.btnSetDefRountingRule = new System.Windows.Forms.Button(); + this.panel1 = new System.Windows.Forms.Panel(); + this.labRoutingTips = new System.Windows.Forms.Label(); + this.linkLabelRoutingDoc = new System.Windows.Forms.LinkLabel(); + this.cmbdomainStrategy = new System.Windows.Forms.ComboBox(); + this.panel2.SuspendLayout(); + this.panel1.SuspendLayout(); + this.SuspendLayout(); + // + // btnClose + // + this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel; + resources.ApplyResources(this.btnClose, "btnClose"); + this.btnClose.Name = "btnClose"; + this.btnClose.UseVisualStyleBackColor = true; + this.btnClose.Click += new System.EventHandler(this.btnClose_Click); + // + // panCon + // + resources.ApplyResources(this.panCon, "panCon"); + this.panCon.Name = "panCon"; + // + // panel2 + // + this.panel2.Controls.Add(this.btnAdd); + this.panel2.Controls.Add(this.btnClose); + this.panel2.Controls.Add(this.btnOK); + resources.ApplyResources(this.panel2, "panel2"); + this.panel2.Name = "panel2"; + // + // btnAdd + // + resources.ApplyResources(this.btnAdd, "btnAdd"); + this.btnAdd.Name = "btnAdd"; + this.btnAdd.UseVisualStyleBackColor = true; + this.btnAdd.Click += new System.EventHandler(this.btnAdd_Click); + // + // btnOK + // + resources.ApplyResources(this.btnOK, "btnOK"); + this.btnOK.Name = "btnOK"; + this.btnOK.UseVisualStyleBackColor = true; + this.btnOK.Click += new System.EventHandler(this.btnOK_Click); + // + // btnSetDefRountingRule + // + resources.ApplyResources(this.btnSetDefRountingRule, "btnSetDefRountingRule"); + this.btnSetDefRountingRule.Name = "btnSetDefRountingRule"; + this.btnSetDefRountingRule.UseVisualStyleBackColor = true; + this.btnSetDefRountingRule.Click += new System.EventHandler(this.btnSetDefRountingRule_Click); + // + // panel1 + // + this.panel1.Controls.Add(this.btnSetDefRountingRule); + this.panel1.Controls.Add(this.labRoutingTips); + this.panel1.Controls.Add(this.linkLabelRoutingDoc); + this.panel1.Controls.Add(this.cmbdomainStrategy); + resources.ApplyResources(this.panel1, "panel1"); + this.panel1.Name = "panel1"; + // + // labRoutingTips + // + this.labRoutingTips.ForeColor = System.Drawing.Color.Brown; + resources.ApplyResources(this.labRoutingTips, "labRoutingTips"); + this.labRoutingTips.Name = "labRoutingTips"; + // + // linkLabelRoutingDoc + // + resources.ApplyResources(this.linkLabelRoutingDoc, "linkLabelRoutingDoc"); + this.linkLabelRoutingDoc.Name = "linkLabelRoutingDoc"; + this.linkLabelRoutingDoc.TabStop = true; + this.linkLabelRoutingDoc.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabelRoutingDoc_LinkClicked); + // + // cmbdomainStrategy + // + this.cmbdomainStrategy.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cmbdomainStrategy.FormattingEnabled = true; + this.cmbdomainStrategy.Items.AddRange(new object[] { + resources.GetString("cmbdomainStrategy.Items"), + resources.GetString("cmbdomainStrategy.Items1"), + resources.GetString("cmbdomainStrategy.Items2")}); + resources.ApplyResources(this.cmbdomainStrategy, "cmbdomainStrategy"); + this.cmbdomainStrategy.Name = "cmbdomainStrategy"; + // + // RoutingSettingForm + // + resources.ApplyResources(this, "$this"); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.CancelButton = this.btnClose; + this.Controls.Add(this.panCon); + this.Controls.Add(this.panel1); + this.Controls.Add(this.panel2); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.Name = "RoutingSettingForm"; + this.Load += new System.EventHandler(this.RoutingSettingForm_Load); + this.panel2.ResumeLayout(false); + this.panel1.ResumeLayout(false); + this.panel1.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + private System.Windows.Forms.Button btnClose; + private System.Windows.Forms.Button btnOK; + private System.Windows.Forms.Panel panel2; + private System.Windows.Forms.Button btnAdd; + private System.Windows.Forms.Panel panCon; + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.Label labRoutingTips; + private System.Windows.Forms.LinkLabel linkLabelRoutingDoc; + private System.Windows.Forms.ComboBox cmbdomainStrategy; + private System.Windows.Forms.Button btnSetDefRountingRule; + } +} \ No newline at end of file diff --git a/v2rayN/v2rayN/Forms/RoutingSettingForm.cs b/v2rayN/v2rayN/Forms/RoutingSettingForm.cs new file mode 100644 index 00000000..0b145a04 --- /dev/null +++ b/v2rayN/v2rayN/Forms/RoutingSettingForm.cs @@ -0,0 +1,143 @@ +using System; +using System.Collections.Generic; +using System.Windows.Forms; +using v2rayN.Handler; +using v2rayN.Mode; + +namespace v2rayN.Forms +{ + public partial class RoutingSettingForm : BaseForm + { + List lstControls = new List(); + + public RoutingSettingForm() + { + InitializeComponent(); + } + + private void RoutingSettingForm_Load(object sender, EventArgs e) + { + cmbdomainStrategy.Text = config.domainStrategy; + + if (config.routingItem == null) + { + config.routingItem = new List(); + } + + RefreshSubsView(); + } + + /// + /// 刷新列表 + /// + private void RefreshSubsView() + { + panCon.Controls.Clear(); + lstControls.Clear(); + + for (int k = config.routingItem.Count - 1; k >= 0; k--) + { + RoutingItem item = config.routingItem[k]; + if (Utils.IsNullOrEmpty(item.remarks)) + { + config.routingItem.RemoveAt(k); + } + } + + foreach (RoutingItem item in config.routingItem) + { + RoutingSettingControl control = new RoutingSettingControl(); + control.OnButtonClicked += Control_OnButtonClicked; + control.routingItem = item; + control.Dock = DockStyle.Top; + + panCon.Controls.Add(control); + panCon.Controls.SetChildIndex(control, 0); + + lstControls.Add(control); + } + } + + private void Control_OnButtonClicked(object sender, EventArgs e) + { + RefreshSubsView(); + } + + private void btnOK_Click(object sender, EventArgs e) + { + if (config.routingItem.Count <= 0) + { + AddSub("proxy", ""); + } + if (ConfigHandler.SaveRoutingItem(ref config) == 0) + { + this.DialogResult = DialogResult.OK; + } + else + { + UI.ShowWarning(UIRes.I18N("OperationFailed")); + } + + } + + private void btnClose_Click(object sender, EventArgs e) + { + this.DialogResult = DialogResult.Cancel; + } + + private void btnAdd_Click(object sender, EventArgs e) + { + AddSub("proxy", ""); + + RefreshSubsView(); + } + + + private void AddSub(string outboundTag, string userRule, string routingMode = "0") + { + RoutingItem RoutingItem = new RoutingItem + { + remarks = outboundTag, + routingMode = routingMode, + outboundTag = outboundTag, + userRules = Utils.String2List(userRule) + + }; + config.routingItem.Add(RoutingItem); + } + + + private void btnSetDefRountingRule_Click(object sender, EventArgs e) + { + config.routingItem.Clear(); + + List lstTag = new List + { + Global.agentTag, + Global.directTag, + Global.blockTag + }; + for (int k = 0; k < lstTag.Count; k++) + { + DownloadHandle downloadHandle = new DownloadHandle(); + + string result = downloadHandle.WebDownloadStringSync(Global.CustomRoutingListUrl + lstTag[k]); + if (Utils.IsNullOrEmpty(result)) + { + result = Utils.GetEmbedText(Global.CustomRoutingFileName + lstTag[k]); + } + AddSub(lstTag[k], result); + } + + AddSub(Global.directTag, "", "4"); + AddSub(Global.agentTag, "", "0"); + + RefreshSubsView(); + } + + private void linkLabelRoutingDoc_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + System.Diagnostics.Process.Start("https://www.v2fly.org/config/routing.html"); + } + } +} diff --git a/v2rayN/v2rayN/Forms/RoutingSettingForm.resx b/v2rayN/v2rayN/Forms/RoutingSettingForm.resx new file mode 100644 index 00000000..9c08b219 --- /dev/null +++ b/v2rayN/v2rayN/Forms/RoutingSettingForm.resx @@ -0,0 +1,420 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + NoControl + + + + 568, 17 + + + 75, 23 + + + + 4 + + + &Cancel + + + btnClose + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panel2 + + + 1 + + + True + + + Fill + + + 0, 68 + + + 765, 545 + + + 10 + + + panCon + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 0 + + + NoControl + + + 47, 17 + + + 75, 23 + + + 6 + + + &Add + + + btnAdd + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panel2 + + + 0 + + + NoControl + + + 475, 17 + + + 75, 23 + + + 5 + + + &OK + + + btnOK + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panel2 + + + 2 + + + Bottom + + + 0, 613 + + + 765, 60 + + + 7 + + + panel2 + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 2 + + + Top, Right + + + True + + + NoControl + + + 319, 17 + + + 229, 23 + + + 19 + + + Set default custom routing rules + + + btnSetDefRountingRule + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panel1 + + + 0 + + + NoControl + + + 10, 42 + + + 598, 16 + + + 13 + + + *Set the rules, separated by commas (,); support Domain (pure string / regular / subdomain) and IP + + + labRoutingTips + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panel1 + + + 1 + + + True + + + NoControl + + + 6, 21 + + + 0, 0, 0, 0 + + + 95, 12 + + + 19 + + + Domain strategy + + + linkLabelRoutingDoc + + + System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panel1 + + + 2 + + + AsIs + + + IPIfNonMatch + + + IPOnDemand + + + 116, 17 + + + 165, 20 + + + 16 + + + cmbdomainStrategy + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panel1 + + + 3 + + + Top + + + 0, 0 + + + 765, 68 + + + 11 + + + panel1 + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 1 + + + True + + + 6, 12 + + + 765, 673 + + + Routing Settings + + + RoutingSettingForm + + + v2rayN.Forms.BaseForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + + \ No newline at end of file diff --git a/v2rayN/v2rayN/Forms/RoutingSettingForm.zh-Hans.resx b/v2rayN/v2rayN/Forms/RoutingSettingForm.zh-Hans.resx new file mode 100644 index 00000000..dc3bb7b1 --- /dev/null +++ b/v2rayN/v2rayN/Forms/RoutingSettingForm.zh-Hans.resx @@ -0,0 +1,145 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 取消(&C) + + + 添加(&A) + + + 确定(&O) + + + 一键设置默认自定义路由规则 + + + *设置的规则,用逗号(,)隔开;支持Domain(纯字符串/正则/子域名)和IP + + + + 77, 12 + + + 域名解析策略 + + + 路由设置 + + \ No newline at end of file diff --git a/v2rayN/v2rayN/Forms/SubSettingControl.Designer.cs b/v2rayN/v2rayN/Forms/SubSettingControl.Designer.cs index 30fcadf5..b23cac62 100644 --- a/v2rayN/v2rayN/Forms/SubSettingControl.Designer.cs +++ b/v2rayN/v2rayN/Forms/SubSettingControl.Designer.cs @@ -29,27 +29,38 @@ private void InitializeComponent() { System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SubSettingControl)); - this.groupBox2 = new System.Windows.Forms.GroupBox(); + this.grbMain = new System.Windows.Forms.GroupBox(); + this.btnShare = new System.Windows.Forms.Button(); this.chkEnabled = new System.Windows.Forms.CheckBox(); this.btnRemove = new System.Windows.Forms.Button(); this.txtUrl = new System.Windows.Forms.TextBox(); this.txtRemarks = new System.Windows.Forms.TextBox(); this.label2 = new System.Windows.Forms.Label(); this.label3 = new System.Windows.Forms.Label(); - this.groupBox2.SuspendLayout(); + this.picQRCode = new System.Windows.Forms.PictureBox(); + this.grbMain.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.picQRCode)).BeginInit(); this.SuspendLayout(); // - // groupBox2 + // grbMain // - resources.ApplyResources(this.groupBox2, "groupBox2"); - this.groupBox2.Controls.Add(this.chkEnabled); - this.groupBox2.Controls.Add(this.btnRemove); - this.groupBox2.Controls.Add(this.txtUrl); - this.groupBox2.Controls.Add(this.txtRemarks); - this.groupBox2.Controls.Add(this.label2); - this.groupBox2.Controls.Add(this.label3); - this.groupBox2.Name = "groupBox2"; - this.groupBox2.TabStop = false; + resources.ApplyResources(this.grbMain, "grbMain"); + this.grbMain.Controls.Add(this.btnShare); + this.grbMain.Controls.Add(this.chkEnabled); + this.grbMain.Controls.Add(this.btnRemove); + this.grbMain.Controls.Add(this.txtUrl); + this.grbMain.Controls.Add(this.txtRemarks); + this.grbMain.Controls.Add(this.label2); + this.grbMain.Controls.Add(this.label3); + this.grbMain.Name = "grbMain"; + this.grbMain.TabStop = false; + // + // btnShare + // + resources.ApplyResources(this.btnShare, "btnShare"); + this.btnShare.Name = "btnShare"; + this.btnShare.UseVisualStyleBackColor = true; + this.btnShare.Click += new System.EventHandler(this.btnShare_Click); // // chkEnabled // @@ -87,27 +98,37 @@ resources.ApplyResources(this.label3, "label3"); this.label3.Name = "label3"; // + // picQRCode + // + resources.ApplyResources(this.picQRCode, "picQRCode"); + this.picQRCode.Name = "picQRCode"; + this.picQRCode.TabStop = false; + // // SubSettingControl // resources.ApplyResources(this, "$this"); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.Controls.Add(this.groupBox2); + this.Controls.Add(this.picQRCode); + this.Controls.Add(this.grbMain); this.Name = "SubSettingControl"; this.Load += new System.EventHandler(this.SubSettingControl_Load); - this.groupBox2.ResumeLayout(false); - this.groupBox2.PerformLayout(); + this.grbMain.ResumeLayout(false); + this.grbMain.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.picQRCode)).EndInit(); this.ResumeLayout(false); } #endregion - private System.Windows.Forms.GroupBox groupBox2; + private System.Windows.Forms.GroupBox grbMain; private System.Windows.Forms.TextBox txtUrl; private System.Windows.Forms.TextBox txtRemarks; private System.Windows.Forms.Label label2; private System.Windows.Forms.Label label3; private System.Windows.Forms.Button btnRemove; private System.Windows.Forms.CheckBox chkEnabled; + private System.Windows.Forms.Button btnShare; + private System.Windows.Forms.PictureBox picQRCode; } } diff --git a/v2rayN/v2rayN/Forms/SubSettingControl.cs b/v2rayN/v2rayN/Forms/SubSettingControl.cs index 9836be5d..652e389e 100644 --- a/v2rayN/v2rayN/Forms/SubSettingControl.cs +++ b/v2rayN/v2rayN/Forms/SubSettingControl.cs @@ -1,6 +1,7 @@ using System; using System.Windows.Forms; using v2rayN.Base; +using v2rayN.Handler; using v2rayN.Mode; namespace v2rayN.Forms @@ -11,7 +12,10 @@ namespace v2rayN.Forms public event ChangeEventHandler OnButtonClicked; - public SubItem subItem { get; set; } + public SubItem subItem + { + get; set; + } public SubSettingControl() { @@ -20,6 +24,7 @@ namespace v2rayN.Forms private void SubSettingControl_Load(object sender, EventArgs e) { + this.Height = grbMain.Height; BindingSub(); } @@ -56,5 +61,23 @@ namespace v2rayN.Forms OnButtonClicked?.Invoke(sender, e); } + + private void btnShare_Click(object sender, EventArgs e) + { + if (this.Height <= grbMain.Height) + { + if (Utils.IsNullOrEmpty(subItem.url)) + { + picQRCode.Image = null; + return; + } + picQRCode.Image = QRCodeHelper.GetQRCode(subItem.url); + this.Height = grbMain.Height + 200; + } + else + { + this.Height = grbMain.Height; + } + } } } diff --git a/v2rayN/v2rayN/Forms/SubSettingControl.resx b/v2rayN/v2rayN/Forms/SubSettingControl.resx index a5dec524..fdeefb50 100644 --- a/v2rayN/v2rayN/Forms/SubSettingControl.resx +++ b/v2rayN/v2rayN/Forms/SubSettingControl.resx @@ -118,123 +118,270 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - 6, 12 - - - zh-Hans - - - True - - - 584, 119 - - - NoControl - - - 484, 21 - - - 75, 23 - - - 24 - - - &Remove - - - True - - - NoControl - - - 406, 23 - - - 60, 16 - - - 25 - - - Enable - - - Bottom - - - 0, 9 - - - 584, 110 - - - 10 - - - Subscription details - - - True - NoControl - - 12, 25 + + grbMain - - 47, 12 + + + 60, 16 - - 10 + + txtUrl - - Remarks + + 6 - - True + + picQRCode - - NoControl + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 12, 55 + + Remove - - 83, 12 + + txtRemarks - - 0 + + + 24 - - Address (url) + + grbMain - - 127, 21 + + SubSettingControl - - 265, 21 + + Zoom - - 11 + + Subscription details - - 127, 55 + + 26 + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 True - - 432, 46 + + grbMain + + + 434, 21 + + + 83, 12 + + + 232, 21 + + + Top + + + 6, 12 + + + label3 + + + 127, 21 + + + True + + + Share + + + 619, 200 + + + 1 + + + 12, 55 + + + NoControl + + + Fill + + + $this + + + 25 + + + 127, 55 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 3 + + + grbMain + + + 5 + + + 47, 12 + + + btnRemove + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Enable + + + chkEnabled + + + 4 + + + NoControl + + + 0, 110 + + + 75, 23 + + + 2 + + + grbMain + + + 25 + + + 10 23 + + grbMain + + + grbMain + + + 368, 23 + + + True + + + True + + + 0, 0 + + + $this + + + 0 + + + NoControl + + + label2 + + + 619, 110 + + + btnShare + + + 0 + + + NoControl + + + 619, 310 + + + 11 + + + Remarks + + + 0 + + + NoControl + + + 473, 46 + + + 12, 25 + + + 75, 23 + + + grbMain + + + 1 + + + Address (url) + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.UserControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 525, 21 + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 10 + + + True + + + zh-Hans + \ No newline at end of file diff --git a/v2rayN/v2rayN/Forms/SubSettingControl.zh-Hans.resx b/v2rayN/v2rayN/Forms/SubSettingControl.zh-Hans.resx index 95e5122f..6979e601 100644 --- a/v2rayN/v2rayN/Forms/SubSettingControl.zh-Hans.resx +++ b/v2rayN/v2rayN/Forms/SubSettingControl.zh-Hans.resx @@ -117,18 +117,18 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 移除 + + 分享 + 48, 16 启用 - - 订阅详情 + + 移除 29, 12 @@ -142,4 +142,7 @@ 地址 (url) + + 订阅详情 + \ No newline at end of file diff --git a/v2rayN/v2rayN/Forms/SubSettingForm.resx b/v2rayN/v2rayN/Forms/SubSettingForm.resx index e2001bb5..0f5ca1f3 100644 --- a/v2rayN/v2rayN/Forms/SubSettingForm.resx +++ b/v2rayN/v2rayN/Forms/SubSettingForm.resx @@ -118,19 +118,61 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + NoControl + + + 448, 17 + + + 75, 23 + - - 6, 12 + + 4 - - 581, 629 + + &Cancel - + + btnClose + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panel2 + + + 1 + + True - - Subscription settings + + Fill + + + 0, 0 + + + 614, 569 + + + 10 + + + panCon + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 0 NoControl @@ -147,20 +189,17 @@ &Add - - NoControl + + btnAdd - - 448, 17 + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 75, 23 + + panel2 - - 4 - - - &Cancel + + 0 NoControl @@ -177,20 +216,17 @@ &OK - - True + + btnOK - - Fill + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 0, 0 + + panel2 - - 581, 569 - - - 10 + + 2 Bottom @@ -199,9 +235,39 @@ 0, 569 - 581, 60 + 614, 60 7 + + panel2 + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 1 + + + True + + + 6, 12 + + + 614, 629 + + + Subscription settings + + + SubSettingForm + + + v2rayN.Forms.BaseForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/v2rayN/v2rayN/Global.cs b/v2rayN/v2rayN/Global.cs index 55eeea14..7c96ee51 100644 --- a/v2rayN/v2rayN/Global.cs +++ b/v2rayN/v2rayN/Global.cs @@ -23,7 +23,6 @@ namespace v2rayN /// public const string CustomRoutingListUrl = @"https://raw.githubusercontent.com/2dust/v2rayCustomRoutingList/master/"; - public const string GFWLIST_URL = "https://raw.githubusercontent.com/gfwlist/gfwlist/master/gfwlist.txt"; /// /// PromotionUrl @@ -56,10 +55,7 @@ namespace v2rayN /// v2ray配置Httpresponse文件名 /// public const string v2raySampleHttpresponseFileName = "v2rayN.Sample.SampleHttpresponse.txt"; - /// - /// 空白的pac文件 - /// - public const string BlankPacFileName = "v2rayN.Sample.BlankPac.txt"; + public const string CustomRoutingFileName = "v2rayN.Sample.custom_routing_"; @@ -97,7 +93,7 @@ namespace v2rayN /// /// 阻止 tag值 /// - public const string blockTag = "block"; + public const string blockTag = "block"; /// /// @@ -161,11 +157,6 @@ namespace v2rayN /// public const string trojanProtocolLite = "trojan"; - /// - /// pac - /// - public const string pacFILE = "pac.txt"; - /// /// email /// @@ -231,13 +222,6 @@ namespace v2rayN get; set; } - /// - /// PAC端口 - /// - public static int pacPort - { - get; set; - } /// /// diff --git a/v2rayN/v2rayN/Handler/ConfigHandler.cs b/v2rayN/v2rayN/Handler/ConfigHandler.cs index 37a9878e..ddce8665 100644 --- a/v2rayN/v2rayN/Handler/ConfigHandler.cs +++ b/v2rayN/v2rayN/Handler/ConfigHandler.cs @@ -86,22 +86,10 @@ namespace v2rayN.Handler if (Utils.IsNullOrEmpty(config.domainStrategy)) { config.domainStrategy = "IPIfNonMatch"; - } - if (Utils.IsNullOrEmpty(config.routingMode)) + } + if (config.routingItem == null) { - config.routingMode = "0"; - } - if (config.useragent == null) - { - config.useragent = new List(); - } - if (config.userdirect == null) - { - config.userdirect = new List(); - } - if (config.userblock == null) - { - config.userblock = new List(); + config.routingItem = new List(); } //kcp if (config.kcpItem == null) @@ -139,10 +127,6 @@ namespace v2rayN.Handler { config.speedPingTestUrl = Global.SpeedPingTestUrl; } - if (Utils.IsNullOrEmpty(config.urlGFWList)) - { - config.urlGFWList = Global.GFWLIST_URL; - } //if (Utils.IsNullOrEmpty(config.remoteDNS)) //{ // config.remoteDNS = "1.1.1.1"; @@ -152,10 +136,6 @@ namespace v2rayN.Handler { config.subItem = new List(); } - if (config.userPacRule == null) - { - config.userPacRule = new List(); - } if (config == null || config.index < 0 @@ -299,7 +279,8 @@ namespace v2rayN.Handler path = config.vmess[index].path, streamSecurity = config.vmess[index].streamSecurity, allowInsecure = config.vmess[index].allowInsecure, - configType = config.vmess[index].configType + configType = config.vmess[index].configType, + flow = config.vmess[index].flow }; config.vmess.Insert(index + 1, vmessItem); // 插入到下一项 @@ -1080,5 +1061,28 @@ namespace v2rayN.Handler return 0; } + + /// + /// SaveRoutingItem + /// + /// + /// + public static int SaveRoutingItem(ref Config config) + { + if (config.routingItem == null || config.routingItem.Count <= 0) + { + return -1; + } + + foreach (RoutingItem sub in config.routingItem) + { + + } + Global.reloadV2ray = true; + + ToJsonFile(config); + return 0; + } + } } diff --git a/v2rayN/v2rayN/Handler/DownloadHandle.cs b/v2rayN/v2rayN/Handler/DownloadHandle.cs index 67a936f2..369fbc72 100644 --- a/v2rayN/v2rayN/Handler/DownloadHandle.cs +++ b/v2rayN/v2rayN/Handler/DownloadHandle.cs @@ -54,8 +54,10 @@ namespace v2rayN.Handler private readonly string nLatestUrl = "https://github.com/2dust/v2rayN/releases/latest"; private const string nUrl = "https://github.com/2dust/v2rayN/releases/download/{0}/v2rayN.zip"; - private readonly string coreLatestUrl = "https://github.com/v2fly/v2ray-core/releases/latest"; - private const string coreUrl = "https://github.com/v2fly/v2ray-core/releases/download/{0}/v2ray-windows-{1}.zip"; + private readonly string v2flyCoreLatestUrl = "https://github.com/v2fly/v2ray-core/releases/latest"; + private const string v2flyCoreUrl = "https://github.com/v2fly/v2ray-core/releases/download/{0}/v2ray-windows-{1}.zip"; + private readonly string xrayCoreLatestUrl = "https://github.com/xtls/xray-core/releases/latest"; + private const string xrayCoreUrl = "https://github.com/xtls/xray-core/releases/download/{0}/xray-windows-{1}.zip"; public async void CheckUpdateAsync(string type) { @@ -67,9 +69,13 @@ namespace v2rayN.Handler HttpClient httpClient = new HttpClient(webRequestHandler); string url; - if (type == "Core") + if (type == "v2fly") { - url = coreLatestUrl; + url = v2flyCoreLatestUrl; + } + else if (type == "xray") + { + url = xrayCoreLatestUrl; } else if (type == "v2rayN") { @@ -94,11 +100,23 @@ namespace v2rayN.Handler /// /// 获取V2RayCore版本 /// - public string getV2rayVersion() + public string getCoreVersion(string type) { try { - string filePath = Utils.GetPath("V2ray.exe"); + var core = string.Empty; + var match = string.Empty; + if (type == "v2fly") + { + core = "v2ray.exe"; + match = "V2Ray"; + } + else if (type == "xray") + { + core = "xray.exe"; + match = "Xray"; + } + string filePath = Utils.GetPath(core); if (!File.Exists(filePath)) { string msg = string.Format(UIRes.I18N("NotFoundCore"), @"https://github.com/v2fly/v2ray-core/releases"); @@ -117,10 +135,9 @@ namespace v2rayN.Handler p.Start(); p.WaitForExit(5000); string echo = p.StandardOutput.ReadToEnd(); - string version = Regex.Match(echo, "V2Ray ([0-9.]+) \\(").Groups[1].Value; + string version = Regex.Match(echo, $"{match} ([0-9.]+) \\(").Groups[1].Value; return version; } - catch (Exception ex) { Utils.SaveLog(ex.Message, ex); @@ -136,12 +153,19 @@ namespace v2rayN.Handler string curVersion; string message; string url; - if (type == "Core") + if (type == "v2fly") { - curVersion = "v" + getV2rayVersion(); + curVersion = "v" + getCoreVersion(type); message = string.Format(UIRes.I18N("IsLatestCore"), curVersion); string osBit = Environment.Is64BitProcess ? "64" : "32"; - url = string.Format(coreUrl, version, osBit); + url = string.Format(v2flyCoreUrl, version, osBit); + } + else if (type == "xray") + { + curVersion = "v" + getCoreVersion(type); + message = string.Format(UIRes.I18N("IsLatestCore"), curVersion); + string osBit = Environment.Is64BitProcess ? "64" : "32"; + url = string.Format(xrayCoreUrl, version, osBit); } else if (type == "v2rayN") { @@ -313,47 +337,24 @@ namespace v2rayN.Handler } } - #endregion - - #region PAC - - public string GenPacFile(string result) + public string WebDownloadStringSync(string url) { + string source = string.Empty; try { - File.WriteAllText(Utils.GetTempPath("gfwlist.txt"), result, Encoding.UTF8); - List lines = ParsePacResult(result); - string abpContent = Utils.UnGzip(Resources.abp_js); - abpContent = abpContent.Replace("__RULES__", JsonConvert.SerializeObject(lines, Formatting.Indented)); - File.WriteAllText(Utils.GetPath(Global.pacFILE), abpContent, Encoding.UTF8); + Utils.SetSecurityProtocol(); + + WebClientEx ws = new WebClientEx(); + + return ws.DownloadString(new Uri(url)); } catch (Exception ex) { Utils.SaveLog(ex.Message, ex); - return ex.Message; + return string.Empty; } - return string.Empty; } - - private List ParsePacResult(string response) - { - IEnumerable IgnoredLineBegins = new[] { '!', '[' }; - - byte[] bytes = Convert.FromBase64String(response); - string content = Encoding.UTF8.GetString(bytes); - List valid_lines = new List(); - using (StringReader sr = new StringReader(content)) - { - foreach (string line in sr.NonWhiteSpaceLines()) - { - if (line.BeginWithAny(IgnoredLineBegins)) - continue; - valid_lines.Add(line); - } - } - return valid_lines; - } - #endregion + } } diff --git a/v2rayN/v2rayN/Handler/MainFormHandler.cs b/v2rayN/v2rayN/Handler/MainFormHandler.cs index 419ba374..95142bb5 100644 --- a/v2rayN/v2rayN/Handler/MainFormHandler.cs +++ b/v2rayN/v2rayN/Handler/MainFormHandler.cs @@ -32,7 +32,7 @@ namespace v2rayN.Handler try { Color color = ColorTranslator.FromHtml("#3399CC"); - int index = (int)config.listenerType; + int index = (int)config.sysProxyType; if (index > 0) { color = (new Color[] { Color.Red, Color.Purple, Color.DarkGreen, Color.Orange, Color.DarkSlateBlue, Color.RoyalBlue })[index - 1]; diff --git a/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs b/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs index b02ea327..654a7571 100644 --- a/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs +++ b/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs @@ -166,6 +166,13 @@ namespace v2rayN.Handler //开启udp inbound.settings.udp = config.inbound[0].udpEnabled; inbound.sniffing.enabled = config.inbound[0].sniffingEnabled; + + //http + Inbounds inbound2 = v2rayConfig.inbounds[1]; + inbound2.port = config.GetLocalPort(Global.InboundHttp); + inbound2.protocol = Global.InboundHttp; + inbound2.listen = inbound.listen; + inbound2.settings.allowTransparent = false; } catch { @@ -188,31 +195,31 @@ namespace v2rayN.Handler { v2rayConfig.routing.domainStrategy = config.domainStrategy; - //自定义 - //需代理 - routingUserRule(config.useragent, Global.agentTag, ref v2rayConfig); - //直连 - routingUserRule(config.userdirect, Global.directTag, ref v2rayConfig); - //阻止 - routingUserRule(config.userblock, Global.blockTag, ref v2rayConfig); - - - switch (config.routingMode) + foreach (var item in config.routingItem) { - case "0": - break; - case "1": - routingGeo("ip", "private", Global.directTag, ref v2rayConfig); - break; - case "2": - routingGeo("", "cn", Global.directTag, ref v2rayConfig); - break; - case "3": - routingGeo("ip", "private", Global.directTag, ref v2rayConfig); - routingGeo("", "cn", Global.directTag, ref v2rayConfig); - break; + if (item.routingMode != "0") + { + switch (item.routingMode) + { + case "1": + break; + case "2": + routingGeo("ip", "private", Global.directTag, ref v2rayConfig); + break; + case "3": + routingGeo("", "cn", Global.directTag, ref v2rayConfig); + break; + case "4": + routingGeo("ip", "private", Global.directTag, ref v2rayConfig); + routingGeo("", "cn", Global.directTag, ref v2rayConfig); + break; + } + } + else + { + routingUserRule(item.userRules, item.outboundTag, ref v2rayConfig); + } } - } } catch @@ -224,8 +231,19 @@ namespace v2rayN.Handler { try { - if (userRule != null - && userRule.Count > 0) + if (userRule == null) + { + } + else if (userRule.Count == 0) + { + v2rayConfig.routing.rules.Add(new RulesItem + { + type = "field", + outboundTag = tag, + port = "0-65535" + }); + } + else if (userRule.Count > 0) { //Domain RulesItem rulesDomain = new RulesItem @@ -470,7 +488,7 @@ namespace v2rayN.Handler usersItem.flow = string.Empty; usersItem.email = Global.userEMail; usersItem.encryption = config.security(); - + //Mux outbound.mux.enabled = config.muxEnabled; outbound.mux.concurrency = config.muxEnabled ? 8 : -1; @@ -490,7 +508,7 @@ namespace v2rayN.Handler { usersItem.flow = config.flow(); } - + outbound.mux.enabled = false; outbound.mux.concurrency = -1; } @@ -624,7 +642,7 @@ namespace v2rayN.Handler //ws case "ws": WsSettings wsSettings = new WsSettings - { + { }; string path = config.path(); @@ -744,21 +762,30 @@ namespace v2rayN.Handler { return 0; } - List servers = new List(); - string[] arrDNS = config.remoteDNS.Split(','); - foreach (string str in arrDNS) + var obj = Utils.ParseJson(config.remoteDNS); + if (obj != null && obj.ContainsKey("servers")) { - //if (Utils.IsIP(str)) - //{ - servers.Add(str); - //} + v2rayConfig.dns = obj; } - //servers.Add("localhost"); - v2rayConfig.dns = new Mode.Dns + else { - servers = servers - }; + List servers = new List(); + + string[] arrDNS = config.remoteDNS.Split(','); + foreach (string str in arrDNS) + { + //if (Utils.IsIP(str)) + //{ + servers.Add(str); + //} + } + //servers.Add("localhost"); + v2rayConfig.dns = new Mode.Dns + { + servers = servers + }; + } } catch { @@ -783,8 +810,8 @@ namespace v2rayN.Handler apiObj.services = services.ToList(); v2rayConfig.api = apiObj; - policySystemSetting.statsInboundDownlink = true; - policySystemSetting.statsInboundUplink = true; + policySystemSetting.statsOutboundDownlink = true; + policySystemSetting.statsOutboundUplink = true; policyObj.system = policySystemSetting; v2rayConfig.policy = policyObj; @@ -1450,7 +1477,7 @@ namespace v2rayN.Handler else { vmessItem.remarks = WebUtility.UrlDecode(remarks); - } + } } else { @@ -1743,7 +1770,7 @@ namespace v2rayN.Handler //routing(config, ref v2rayConfig); dns(configCopy, ref v2rayConfig); - v2rayConfig.inbounds.RemoveAt(0); // Remove "proxy" service for speedtest, avoiding port conflicts. + v2rayConfig.inbounds.Clear(); // Remove "proxy" service for speedtest, avoiding port conflicts. int httpPort = configCopy.GetLocalPort("speedtest"); foreach (int index in selecteds) diff --git a/v2rayN/v2rayN/HttpProxyHandler/HttpProxyHandle.cs b/v2rayN/v2rayN/HttpProxyHandler/HttpProxyHandle.cs index 0236c5a8..cab3c055 100644 --- a/v2rayN/v2rayN/HttpProxyHandler/HttpProxyHandle.cs +++ b/v2rayN/v2rayN/HttpProxyHandler/HttpProxyHandle.cs @@ -10,23 +10,20 @@ namespace v2rayN.HttpProxyHandler { noHttpProxy = 0, GlobalHttp = 1, - GlobalPac = 2, - HttpOpenAndClear = 3, - PacOpenAndClear = 4, - HttpOpenOnly = 5, - PacOpenOnly = 6 + HttpOpenAndClear = 2, + HttpOpenOnly = 3, } /// /// 系统代理(http)总处理 /// 启动privoxy提供http协议 - /// 设置IE系统代理或者PAC模式 + /// 设置IE系统代理 /// class HttpProxyHandle { private static bool Update(Config config, bool forceDisable) { - ListenerType type = config.listenerType; - + // ListenerType type = config.listenerType; + var type = ListenerType.noHttpProxy; if (forceDisable) { type = ListenerType.noHttpProxy; @@ -43,47 +40,21 @@ namespace v2rayN.HttpProxyHandler } if (type == ListenerType.GlobalHttp) { - //PACServerHandle.Stop(); //ProxySetting.SetProxy($"{Global.Loopback}:{port}", Global.IEProxyExceptions, 2); SysProxyHandle.SetIEProxy(true, true, $"{Global.Loopback}:{port}"); } - else if (type == ListenerType.GlobalPac) - { - string pacUrl = GetPacUrl(); - //ProxySetting.SetProxy(pacUrl, "", 4); - SysProxyHandle.SetIEProxy(true, false, pacUrl); - //PACServerHandle.Stop(); - PACServerHandle.Init(config); - } else if (type == ListenerType.HttpOpenAndClear) { - //PACServerHandle.Stop(); SysProxyHandle.ResetIEProxy(); } - else if (type == ListenerType.PacOpenAndClear) - { - string pacUrl = GetPacUrl(); - SysProxyHandle.ResetIEProxy(); - //PACServerHandle.Stop(); - PACServerHandle.Init(config); - } else if (type == ListenerType.HttpOpenOnly) { - //PACServerHandle.Stop(); //SysProxyHandle.ResetIEProxy(); } - else if (type == ListenerType.PacOpenOnly) - { - string pacUrl = GetPacUrl(); - //SysProxyHandle.ResetIEProxy(); - //PACServerHandle.Stop(); - PACServerHandle.Init(config); - } } else { SysProxyHandle.ResetIEProxy(); - //PACServerHandle.Stop(); } } catch (Exception ex) @@ -110,7 +81,6 @@ namespace v2rayN.HttpProxyHandler Global.sysAgent = true; Global.socksPort = localPort; Global.httpPort = PrivoxyHandler.Instance.RunningPort; - Global.pacPort = config.GetLocalPort("pac"); } } } @@ -127,10 +97,10 @@ namespace v2rayN.HttpProxyHandler { try { - if (config.listenerType != ListenerType.HttpOpenOnly && config.listenerType != ListenerType.PacOpenOnly) - { - Update(config, true); - } + //if (config.listenerType != ListenerType.HttpOpenOnly) + //{ + // Update(config, true); + //} PrivoxyHandler.Instance.Stop(); @@ -151,11 +121,11 @@ namespace v2rayN.HttpProxyHandler public static void RestartHttpAgent(Config config, bool forced) { bool isRestart = false; - if (config.listenerType == ListenerType.noHttpProxy) - { - // 关闭http proxy时,直接返回 - return; - } + //if (config.listenerType == ListenerType.noHttpProxy) + //{ + // // 关闭http proxy时,直接返回 + // return; + //} //强制重启或者socks端口变化 if (forced) { @@ -177,10 +147,40 @@ namespace v2rayN.HttpProxyHandler Update(config, false); } - public static string GetPacUrl() + public static bool UpdateSysProxy(Config config, bool forceDisable) { - string pacUrl = $"http://{Global.Loopback}:{Global.pacPort}/pac/?t={ DateTime.Now.ToString("HHmmss")}"; - return pacUrl; + var type = config.sysProxyType; + + if (forceDisable) + { + type = ESysProxyType.ForcedClear; + } + + try + { + Global.httpPort = config.GetLocalPort(Global.InboundHttp); + int port = Global.httpPort; + if (port <= 0) + { + return false; + } + if (type == ESysProxyType.ForcedChange) + { + SysProxyHandle.SetIEProxy(true, true, $"{Global.Loopback}:{port}"); + } + else if (type == ESysProxyType.ForcedClear) + { + SysProxyHandle.ResetIEProxy(); + } + else if (type == ESysProxyType.Unchanged) + { + } + } + catch (Exception ex) + { + Utils.SaveLog(ex.Message, ex); + } + return true; } } } diff --git a/v2rayN/v2rayN/HttpProxyHandler/PACServerHandle.cs b/v2rayN/v2rayN/HttpProxyHandler/PACServerHandle.cs deleted file mode 100644 index 23bf8087..00000000 --- a/v2rayN/v2rayN/HttpProxyHandler/PACServerHandle.cs +++ /dev/null @@ -1,209 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Text; -using v2rayN.Mode; -using v2rayN.Properties; -using v2rayN.Tool; -using v2rayN.Base; - -namespace v2rayN.HttpProxyHandler -{ - /// - /// 提供PAC功能支持 - /// - class PACServerHandle - { - private static int pacPort = 0; - private static HttpWebServer server; - private static HttpWebServerB serverB; - private static Config _config; - - public static bool IsRunning - { - get - { - return (pacPort > 0); - } - } - - public static void Init(Config config) - { - _config = config; - Global.pacPort = config.GetLocalPort("pac"); - - if (InitServer("*")) - { - pacPort = Global.pacPort; - } - //else if (InitServer(Global.Loopback)) - //{ - // pacPort = Global.pacPort; - //} - else if (InitServerB(Global.Loopback)) - { - pacPort = Global.pacPort; - } - else - { - Utils.SaveLog("Webserver init failed "); - pacPort = 0; - } - } - - private static bool InitServer(string address) - { - try - { - if (pacPort != Global.pacPort) - { - if (server != null) - { - server.Stop(); - server = null; - } - - if (server == null) - { - string prefixes = string.Format("http://{0}:{1}/pac/", address, Global.pacPort); - Utils.SaveLog("Webserver prefixes " + prefixes); - - server = new HttpWebServer(SendResponse, prefixes); - server.Run(); - - } - } - Utils.SaveLog("Webserver at " + address); - } - catch (Exception ex) - { - Utils.SaveLog("Webserver InitServer " + ex.Message); - return false; - } - return true; - } - - public static bool InitServerB(string address) - { - try - { - if (pacPort != Global.pacPort) - { - if (serverB != null) - { - serverB.Stop(); - serverB = null; - } - - if (serverB == null) - { - serverB = new HttpWebServerB(Global.pacPort, SendResponse); - } - } - Utils.SaveLog("WebserverB at " + address); - } - catch (Exception ex) - { - Utils.SaveLog("WebserverB InitServer " + ex.Message); - return false; - } - return true; - } - - public static string SendResponse(string address) - { - try - { - string pac = GetPacList(address); - return pac; - } - catch (Exception ex) - { - Utils.SaveLog("Webserver SendResponse " + ex.Message); - return ex.Message; - } - } - - public static void Stop() - { - try - { - if (server != null) - { - server.Stop(); - server = null; - } - if (serverB != null) - { - serverB.Stop(); - serverB = null; - } - } - catch (Exception ex) - { - Utils.SaveLog("Webserver Stop " + ex.Message); - } - - //try - //{ - // if (httpWebServer == null) - // { - // return; - // } - // foreach (var key in httpWebServer.Keys) - // { - // Utils.SaveLog("Webserver Stop " + key.ToString()); - // ((HttpWebServer)httpWebServer[key]).Stop(); - // } - // httpWebServer.Clear(); - //} - //catch (Exception ex) - //{ - // Utils.SaveLog("Webserver Stop " + ex.Message); - //} - } - - private static string GetPacList(string address) - { - int port = Global.httpPort; - if (port <= 0) - { - return "No port"; - } - try - { - List lstProxy = new List - { - string.Format("PROXY {0}:{1};", address, port) - }; - string proxy = string.Join("", lstProxy.ToArray()); - - string strPacfile = Utils.GetPath(Global.pacFILE); - if (!File.Exists(strPacfile)) - { - FileManager.UncompressFile(strPacfile, Resources.pac_txt); - } - string pac = File.ReadAllText(strPacfile, Encoding.UTF8); - pac = pac.Replace("__PROXY__", proxy); - - if (_config.userPacRule.Count > 0) - { - string keyWords = "var rules = ["; - if (pac.IndexOf(keyWords) >= 0) - { - string userPac = string.Join($"\",{Environment.NewLine}\"", _config.userPacRule.ToArray()); - userPac = string.Format("\"{0}\",", userPac); - pac = pac.Replace(keyWords, keyWords + userPac); - } - } - - return pac; - } - catch - { - } - return "No pac content"; - } - - } -} diff --git a/v2rayN/v2rayN/Mode/ComboItem.cs b/v2rayN/v2rayN/Mode/ComboItem.cs new file mode 100644 index 00000000..e69373ef --- /dev/null +++ b/v2rayN/v2rayN/Mode/ComboItem.cs @@ -0,0 +1,14 @@ +namespace v2rayN.Mode +{ + class ComboItem + { + public int ID + { + get; set; + } + public string Text + { + get; set; + } + } +} diff --git a/v2rayN/v2rayN/Mode/Config.cs b/v2rayN/v2rayN/Mode/Config.cs index fb737942..42c01f70 100644 --- a/v2rayN/v2rayN/Mode/Config.cs +++ b/v2rayN/v2rayN/Mode/Config.cs @@ -67,39 +67,6 @@ namespace v2rayN.Mode { get; set; } - - /// - /// 路由模式 - /// - public string routingMode - { - get; set; - } - - /// - /// 用户自定义需代理的网址或ip - /// - public List useragent - { - get; set; - } - - /// - /// 用户自定义直连的网址或ip - /// - public List userdirect - { - get; set; - } - - /// - /// 用户自定义阻止的网址或ip - /// - public List userblock - { - get; set; - } - /// /// KcpItem /// @@ -109,9 +76,9 @@ namespace v2rayN.Mode } /// - /// 监听状态 + /// /// - public ListenerType listenerType + public ESysProxyType sysProxyType { get; set; } @@ -129,14 +96,7 @@ namespace v2rayN.Mode public string speedPingTestUrl { get; set; - } - /// - /// 自定义GFWList url - /// - public string urlGFWList - { - get; set; - } + } /// /// 允许来自局域网的连接 @@ -201,8 +161,7 @@ namespace v2rayN.Mode { get; set; } - - public List userPacRule + public List routingItem { get; set; } @@ -317,10 +276,7 @@ namespace v2rayN.Mode { return GetLocalPort(Global.InboundSocks) + 1; } - else if (protocol == "pac") - { - return GetLocalPort(Global.InboundSocks) + 2; - } + else if (protocol == "speedtest") { return GetLocalPort(Global.InboundSocks) + 103; @@ -737,4 +693,40 @@ namespace v2rayN.Mode get; set; } } + + [Serializable] + public class RoutingItem + { + /// + /// + /// + public string remarks + { + get; set; + } + + /// + /// 路由模式 + /// + public string routingMode + { + get; set; + } + + /// + /// + /// + public string outboundTag + { + get; set; + } + + /// + /// + /// + public List userRules + { + get; set; + } + } } diff --git a/v2rayN/v2rayN/Mode/ERoutingSort.cs b/v2rayN/v2rayN/Mode/ERoutingSort.cs new file mode 100644 index 00000000..2df23d2d --- /dev/null +++ b/v2rayN/v2rayN/Mode/ERoutingSort.cs @@ -0,0 +1,11 @@ + +namespace v2rayN.Mode +{ + public enum ERoutingSort + { + UserProxy = 1, + UserDirect = 2, + UserBlock = 3, + UserPredefined = 4 + } +} diff --git a/v2rayN/v2rayN/Mode/ESysProxyType.cs b/v2rayN/v2rayN/Mode/ESysProxyType.cs new file mode 100644 index 00000000..13f63c7e --- /dev/null +++ b/v2rayN/v2rayN/Mode/ESysProxyType.cs @@ -0,0 +1,10 @@ + +namespace v2rayN.Mode +{ + public enum ESysProxyType + { + Unchanged = 0, + ForcedChange = 1, + ForcedClear = 2 + } +} diff --git a/v2rayN/v2rayN/Mode/V2rayConfig.cs b/v2rayN/v2rayN/Mode/V2rayConfig.cs index bc85c18f..9ec65af0 100644 --- a/v2rayN/v2rayN/Mode/V2rayConfig.cs +++ b/v2rayN/v2rayN/Mode/V2rayConfig.cs @@ -35,7 +35,7 @@ namespace v2rayN.Mode /// /// DNS 配置 /// - public Dns dns { get; set; } + public object dns { get; set; } /// /// 路由配置 /// @@ -57,8 +57,8 @@ namespace v2rayN.Mode public class SystemPolicy { - public bool statsInboundUplink; - public bool statsInboundDownlink; + public bool statsOutboundUplink; + public bool statsOutboundDownlink; } public class Log @@ -138,7 +138,9 @@ namespace v2rayN.Mode /// VLESS /// public string decryption { get; set; } - + + public bool allowTransparent { get; set; } + } public class UsersItem diff --git a/v2rayN/v2rayN/Properties/AssemblyInfo.cs b/v2rayN/v2rayN/Properties/AssemblyInfo.cs index 152885aa..79c9ddd1 100644 --- a/v2rayN/v2rayN/Properties/AssemblyInfo.cs +++ b/v2rayN/v2rayN/Properties/AssemblyInfo.cs @@ -32,4 +32,4 @@ using System.Runtime.InteropServices; // 方法是按如下所示使用“*”: //[assembly: AssemblyVersion("1.0.*")] //[assembly: AssemblyVersion("1.0.0")] -[assembly: AssemblyFileVersion("3.29")] +[assembly: AssemblyFileVersion("4.0")] diff --git a/v2rayN/v2rayN/Properties/Resources.Designer.cs b/v2rayN/v2rayN/Properties/Resources.Designer.cs index f21638d7..2088590e 100644 --- a/v2rayN/v2rayN/Properties/Resources.Designer.cs +++ b/v2rayN/v2rayN/Properties/Resources.Designer.cs @@ -19,7 +19,7 @@ namespace v2rayN.Properties { // 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。 // 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen // (以 /str 作为命令选项),或重新生成 VS 项目。 - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] internal class Resources { @@ -70,16 +70,6 @@ namespace v2rayN.Properties { } } - /// - /// 查找 System.Byte[] 类型的本地化资源。 - /// - internal static byte[] abp_js { - get { - object obj = ResourceManager.GetObject("abp_js", resourceCulture); - return ((byte[])(obj)); - } - } - /// /// 查找 System.Drawing.Bitmap 类型的本地化资源。 /// @@ -130,16 +120,6 @@ namespace v2rayN.Properties { } } - /// - /// 查找 System.Byte[] 类型的本地化资源。 - /// - internal static byte[] pac_txt { - get { - object obj = ResourceManager.GetObject("pac_txt", resourceCulture); - return ((byte[])(obj)); - } - } - /// /// 查找类似 listen-address __PRIVOXY_BIND_IP__:__PRIVOXY_BIND_PORT__ ///toggle 0 diff --git a/v2rayN/v2rayN/Properties/Resources.resx b/v2rayN/v2rayN/Properties/Resources.resx index 706454a0..2aa66967 100644 --- a/v2rayN/v2rayN/Properties/Resources.resx +++ b/v2rayN/v2rayN/Properties/Resources.resx @@ -157,15 +157,9 @@ ..\Resources\minimize.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\pac.txt.gz;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - ..\resources\help.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\abp.js.gz;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - ..\resources\share.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a diff --git a/v2rayN/v2rayN/Resources/abp.js.gz b/v2rayN/v2rayN/Resources/abp.js.gz deleted file mode 100644 index 0577c7f5..00000000 Binary files a/v2rayN/v2rayN/Resources/abp.js.gz and /dev/null differ diff --git a/v2rayN/v2rayN/Resources/pac.txt.gz b/v2rayN/v2rayN/Resources/pac.txt.gz deleted file mode 100644 index 7f621cb7..00000000 Binary files a/v2rayN/v2rayN/Resources/pac.txt.gz and /dev/null differ diff --git a/v2rayN/v2rayN/Sample/BlankPac.txt b/v2rayN/v2rayN/Sample/BlankPac.txt deleted file mode 100644 index 906a14cb..00000000 --- a/v2rayN/v2rayN/Sample/BlankPac.txt +++ /dev/null @@ -1,5 +0,0 @@ -var proxy = "__PROXY__"; - -function FindProxyForURL(url, host) { - return proxy; -} \ No newline at end of file diff --git a/v2rayN/v2rayN/Sample/SampleClientConfig.txt b/v2rayN/v2rayN/Sample/SampleClientConfig.txt index a582c6ea..f2924c9a 100644 --- a/v2rayN/v2rayN/Sample/SampleClientConfig.txt +++ b/v2rayN/v2rayN/Sample/SampleClientConfig.txt @@ -1,17 +1,11 @@ -{ - "log": { - "access": "", - "error": "", - "loglevel": "error" - }, +{ "log": { "access": "Vaccess.log", "error": "Verror.log", "loglevel": "warning" }, - "inbounds": [ - { - "tag": "proxy", + "inbounds": [{ + "tag": "tag1", "port": 10808, "protocol": "socks", "listen": "127.0.0.1", @@ -26,6 +20,22 @@ "tls" ] } + }, + { + "tag": "tag2", + "port": 10809, + "protocol": "socks", + "listen": "127.0.0.1", + "settings": { + "allowTransparent": false + }, + "sniffing": { + "enabled": true, + "destOverride": [ + "http", + "tls" + ] + } } ], "outbounds": [{ diff --git a/v2rayN/v2rayN/Tool/Utils.cs b/v2rayN/v2rayN/Tool/Utils.cs index 22c37976..8fa10c63 100644 --- a/v2rayN/v2rayN/Tool/Utils.cs +++ b/v2rayN/v2rayN/Tool/Utils.cs @@ -19,6 +19,7 @@ using ZXing.Common; using ZXing.QrCode; using System.Security.Principal; using v2rayN.Base; +using Newtonsoft.Json.Linq; namespace v2rayN { @@ -146,6 +147,19 @@ namespace v2rayN } return result; } + + public static JObject ParseJson(string strJson) + { + try + { + JObject obj = JObject.Parse(strJson); + return obj; + } + catch + { + return null; + } + } #endregion #region 转换函数 diff --git a/v2rayN/v2rayN/v2rayN.csproj b/v2rayN/v2rayN/v2rayN.csproj index d1f912ba..51a06fb1 100644 --- a/v2rayN/v2rayN/v2rayN.csproj +++ b/v2rayN/v2rayN/v2rayN.csproj @@ -125,12 +125,25 @@ BaseServerForm.cs + Form MainForm.cs + + Form + + + RoutingSettingForm.cs + + + UserControl + + + RoutingSettingControl.cs + Form @@ -165,16 +178,16 @@ - - - Component + + + @@ -287,6 +300,13 @@ QRCodeControl.cs Designer + + RoutingSettingControl.cs + Designer + + + RoutingSettingControl.cs + SubSettingControl.cs Designer @@ -294,6 +314,13 @@ SubSettingControl.cs + + RoutingSettingForm.cs + Designer + + + RoutingSettingForm.cs + SubSettingForm.cs Designer @@ -347,8 +374,6 @@ - - @@ -411,7 +436,6 @@ -