diff --git a/v2rayN/v2rayN/Forms/MainForm.Designer.cs b/v2rayN/v2rayN/Forms/MainForm.Designer.cs
index a208b5dd..93b3aedb 100644
--- a/v2rayN/v2rayN/Forms/MainForm.Designer.cs
+++ b/v2rayN/v2rayN/Forms/MainForm.Designer.cs
@@ -72,7 +72,9 @@
this.menuKeepClear = new System.Windows.Forms.ToolStripMenuItem();
this.menuGlobal = new System.Windows.Forms.ToolStripMenuItem();
this.menuKeepNothing = new System.Windows.Forms.ToolStripMenuItem();
+ this.menuRoutings = new System.Windows.Forms.ToolStripMenuItem();
this.menuServers = new System.Windows.Forms.ToolStripMenuItem();
+ this.toolStripSeparator13 = new System.Windows.Forms.ToolStripSeparator();
this.menuAddServers2 = new System.Windows.Forms.ToolStripMenuItem();
this.menuScanScreen2 = new System.Windows.Forms.ToolStripMenuItem();
this.menuUpdateSubscriptions = new System.Windows.Forms.ToolStripMenuItem();
@@ -140,17 +142,19 @@
//
// scMain.Panel1
//
+ resources.ApplyResources(this.scMain.Panel1, "scMain.Panel1");
this.scMain.Panel1.Controls.Add(this.lvServers);
//
// scMain.Panel2
//
+ resources.ApplyResources(this.scMain.Panel2, "scMain.Panel2");
this.scMain.Panel2.Controls.Add(this.qrCodeControl);
this.scMain.TabStop = false;
//
// lvServers
//
- this.lvServers.ContextMenuStrip = this.cmsLv;
resources.ApplyResources(this.lvServers, "lvServers");
+ this.lvServers.ContextMenuStrip = this.cmsLv;
this.lvServers.FullRowSelect = true;
this.lvServers.GridLines = true;
this.lvServers.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable;
@@ -169,6 +173,7 @@
//
// cmsLv
//
+ resources.ApplyResources(this.cmsLv, "cmsLv");
this.cmsLv.ImageScalingSize = new System.Drawing.Size(20, 20);
this.cmsLv.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.menuAddVmessServer,
@@ -203,196 +208,194 @@
this.menuExport2ShareUrl,
this.menuExport2SubContent});
this.cmsLv.Name = "cmsLv";
- this.cmsLv.OwnerItem = this.tsbServer;
- resources.ApplyResources(this.cmsLv, "cmsLv");
//
// menuAddVmessServer
//
- this.menuAddVmessServer.Name = "menuAddVmessServer";
resources.ApplyResources(this.menuAddVmessServer, "menuAddVmessServer");
+ this.menuAddVmessServer.Name = "menuAddVmessServer";
this.menuAddVmessServer.Click += new System.EventHandler(this.menuAddVmessServer_Click);
//
// menuAddVlessServer
//
- this.menuAddVlessServer.Name = "menuAddVlessServer";
resources.ApplyResources(this.menuAddVlessServer, "menuAddVlessServer");
+ this.menuAddVlessServer.Name = "menuAddVlessServer";
this.menuAddVlessServer.Click += new System.EventHandler(this.menuAddVlessServer_Click);
//
// menuAddShadowsocksServer
//
- this.menuAddShadowsocksServer.Name = "menuAddShadowsocksServer";
resources.ApplyResources(this.menuAddShadowsocksServer, "menuAddShadowsocksServer");
+ this.menuAddShadowsocksServer.Name = "menuAddShadowsocksServer";
this.menuAddShadowsocksServer.Click += new System.EventHandler(this.menuAddShadowsocksServer_Click);
//
// menuAddSocksServer
//
- this.menuAddSocksServer.Name = "menuAddSocksServer";
resources.ApplyResources(this.menuAddSocksServer, "menuAddSocksServer");
+ this.menuAddSocksServer.Name = "menuAddSocksServer";
this.menuAddSocksServer.Click += new System.EventHandler(this.menuAddSocksServer_Click);
//
// menuAddTrojanServer
//
- this.menuAddTrojanServer.Name = "menuAddTrojanServer";
resources.ApplyResources(this.menuAddTrojanServer, "menuAddTrojanServer");
+ this.menuAddTrojanServer.Name = "menuAddTrojanServer";
this.menuAddTrojanServer.Click += new System.EventHandler(this.menuAddTrojanServer_Click);
//
// menuAddCustomServer
//
- this.menuAddCustomServer.Name = "menuAddCustomServer";
resources.ApplyResources(this.menuAddCustomServer, "menuAddCustomServer");
+ this.menuAddCustomServer.Name = "menuAddCustomServer";
this.menuAddCustomServer.Click += new System.EventHandler(this.menuAddCustomServer_Click);
//
// menuAddServers
//
- this.menuAddServers.Name = "menuAddServers";
resources.ApplyResources(this.menuAddServers, "menuAddServers");
+ this.menuAddServers.Name = "menuAddServers";
this.menuAddServers.Click += new System.EventHandler(this.menuAddServers_Click);
//
// menuScanScreen
//
- this.menuScanScreen.Name = "menuScanScreen";
resources.ApplyResources(this.menuScanScreen, "menuScanScreen");
+ this.menuScanScreen.Name = "menuScanScreen";
this.menuScanScreen.Click += new System.EventHandler(this.menuScanScreen_Click);
//
// toolStripSeparator1
//
- this.toolStripSeparator1.Name = "toolStripSeparator1";
resources.ApplyResources(this.toolStripSeparator1, "toolStripSeparator1");
+ this.toolStripSeparator1.Name = "toolStripSeparator1";
//
// menuRemoveServer
//
- this.menuRemoveServer.Name = "menuRemoveServer";
resources.ApplyResources(this.menuRemoveServer, "menuRemoveServer");
+ this.menuRemoveServer.Name = "menuRemoveServer";
this.menuRemoveServer.Click += new System.EventHandler(this.menuRemoveServer_Click);
//
// menuRemoveDuplicateServer
//
- this.menuRemoveDuplicateServer.Name = "menuRemoveDuplicateServer";
resources.ApplyResources(this.menuRemoveDuplicateServer, "menuRemoveDuplicateServer");
+ this.menuRemoveDuplicateServer.Name = "menuRemoveDuplicateServer";
this.menuRemoveDuplicateServer.Click += new System.EventHandler(this.menuRemoveDuplicateServer_Click);
//
// menuCopyServer
//
- this.menuCopyServer.Name = "menuCopyServer";
resources.ApplyResources(this.menuCopyServer, "menuCopyServer");
+ this.menuCopyServer.Name = "menuCopyServer";
this.menuCopyServer.Click += new System.EventHandler(this.menuCopyServer_Click);
//
// menuSetDefaultServer
//
- this.menuSetDefaultServer.Name = "menuSetDefaultServer";
resources.ApplyResources(this.menuSetDefaultServer, "menuSetDefaultServer");
+ this.menuSetDefaultServer.Name = "menuSetDefaultServer";
this.menuSetDefaultServer.Click += new System.EventHandler(this.menuSetDefaultServer_Click);
//
// toolStripSeparator3
//
- this.toolStripSeparator3.Name = "toolStripSeparator3";
resources.ApplyResources(this.toolStripSeparator3, "toolStripSeparator3");
+ this.toolStripSeparator3.Name = "toolStripSeparator3";
//
// menuMoveTop
//
- this.menuMoveTop.Name = "menuMoveTop";
resources.ApplyResources(this.menuMoveTop, "menuMoveTop");
+ this.menuMoveTop.Name = "menuMoveTop";
this.menuMoveTop.Click += new System.EventHandler(this.menuMoveTop_Click);
//
// menuMoveUp
//
- this.menuMoveUp.Name = "menuMoveUp";
resources.ApplyResources(this.menuMoveUp, "menuMoveUp");
+ this.menuMoveUp.Name = "menuMoveUp";
this.menuMoveUp.Click += new System.EventHandler(this.menuMoveUp_Click);
//
// menuMoveDown
//
- this.menuMoveDown.Name = "menuMoveDown";
resources.ApplyResources(this.menuMoveDown, "menuMoveDown");
+ this.menuMoveDown.Name = "menuMoveDown";
this.menuMoveDown.Click += new System.EventHandler(this.menuMoveDown_Click);
//
// menuMoveBottom
//
- this.menuMoveBottom.Name = "menuMoveBottom";
resources.ApplyResources(this.menuMoveBottom, "menuMoveBottom");
+ this.menuMoveBottom.Name = "menuMoveBottom";
this.menuMoveBottom.Click += new System.EventHandler(this.menuMoveBottom_Click);
//
// menuSelectAll
//
- this.menuSelectAll.Name = "menuSelectAll";
resources.ApplyResources(this.menuSelectAll, "menuSelectAll");
+ this.menuSelectAll.Name = "menuSelectAll";
this.menuSelectAll.Click += new System.EventHandler(this.menuSelectAll_Click);
//
// toolStripSeparator9
//
- this.toolStripSeparator9.Name = "toolStripSeparator9";
resources.ApplyResources(this.toolStripSeparator9, "toolStripSeparator9");
+ this.toolStripSeparator9.Name = "toolStripSeparator9";
//
// menuPingServer
//
- this.menuPingServer.Name = "menuPingServer";
resources.ApplyResources(this.menuPingServer, "menuPingServer");
+ this.menuPingServer.Name = "menuPingServer";
this.menuPingServer.Click += new System.EventHandler(this.menuPingServer_Click);
//
// menuTcpingServer
//
- this.menuTcpingServer.Name = "menuTcpingServer";
resources.ApplyResources(this.menuTcpingServer, "menuTcpingServer");
+ this.menuTcpingServer.Name = "menuTcpingServer";
this.menuTcpingServer.Click += new System.EventHandler(this.menuTcpingServer_Click);
//
// menuRealPingServer
//
- this.menuRealPingServer.Name = "menuRealPingServer";
resources.ApplyResources(this.menuRealPingServer, "menuRealPingServer");
+ this.menuRealPingServer.Name = "menuRealPingServer";
this.menuRealPingServer.Click += new System.EventHandler(this.menuRealPingServer_Click);
//
// menuSpeedServer
//
- this.menuSpeedServer.Name = "menuSpeedServer";
resources.ApplyResources(this.menuSpeedServer, "menuSpeedServer");
+ this.menuSpeedServer.Name = "menuSpeedServer";
this.menuSpeedServer.Click += new System.EventHandler(this.menuSpeedServer_Click);
//
// tsbTestMe
//
- this.tsbTestMe.Name = "tsbTestMe";
resources.ApplyResources(this.tsbTestMe, "tsbTestMe");
+ this.tsbTestMe.Name = "tsbTestMe";
this.tsbTestMe.Click += new System.EventHandler(this.tsbTestMe_Click);
//
// menuClearServerStatistics
//
- this.menuClearServerStatistics.Name = "menuClearServerStatistics";
resources.ApplyResources(this.menuClearServerStatistics, "menuClearServerStatistics");
+ this.menuClearServerStatistics.Name = "menuClearServerStatistics";
this.menuClearServerStatistics.Click += new System.EventHandler(this.menuClearStatistic_Click);
//
// toolStripSeparator6
//
- this.toolStripSeparator6.Name = "toolStripSeparator6";
resources.ApplyResources(this.toolStripSeparator6, "toolStripSeparator6");
+ this.toolStripSeparator6.Name = "toolStripSeparator6";
//
// menuExport2ClientConfig
//
- this.menuExport2ClientConfig.Name = "menuExport2ClientConfig";
resources.ApplyResources(this.menuExport2ClientConfig, "menuExport2ClientConfig");
+ this.menuExport2ClientConfig.Name = "menuExport2ClientConfig";
this.menuExport2ClientConfig.Click += new System.EventHandler(this.menuExport2ClientConfig_Click);
//
// menuExport2ServerConfig
//
- this.menuExport2ServerConfig.Name = "menuExport2ServerConfig";
resources.ApplyResources(this.menuExport2ServerConfig, "menuExport2ServerConfig");
+ this.menuExport2ServerConfig.Name = "menuExport2ServerConfig";
this.menuExport2ServerConfig.Click += new System.EventHandler(this.menuExport2ServerConfig_Click);
//
// menuExport2ShareUrl
//
- this.menuExport2ShareUrl.Name = "menuExport2ShareUrl";
resources.ApplyResources(this.menuExport2ShareUrl, "menuExport2ShareUrl");
+ this.menuExport2ShareUrl.Name = "menuExport2ShareUrl";
this.menuExport2ShareUrl.Click += new System.EventHandler(this.menuExport2ShareUrl_Click);
//
// menuExport2SubContent
//
- this.menuExport2SubContent.Name = "menuExport2SubContent";
resources.ApplyResources(this.menuExport2SubContent, "menuExport2SubContent");
+ this.menuExport2SubContent.Name = "menuExport2SubContent";
this.menuExport2SubContent.Click += new System.EventHandler(this.menuExport2SubContent_Click);
//
// tsbServer
//
+ resources.ApplyResources(this.tsbServer, "tsbServer");
this.tsbServer.DropDown = this.cmsLv;
this.tsbServer.Image = global::v2rayN.Properties.Resources.server;
- resources.ApplyResources(this.tsbServer, "tsbServer");
this.tsbServer.Name = "tsbServer";
//
// qrCodeControl
@@ -402,17 +405,19 @@
//
// notifyMain
//
- this.notifyMain.ContextMenuStrip = this.cmsMain;
resources.ApplyResources(this.notifyMain, "notifyMain");
+ this.notifyMain.ContextMenuStrip = this.cmsMain;
this.notifyMain.MouseClick += new System.Windows.Forms.MouseEventHandler(this.notifyMain_MouseClick);
//
// cmsMain
//
- this.cmsMain.ImageScalingSize = new System.Drawing.Size(20, 20);
resources.ApplyResources(this.cmsMain, "cmsMain");
+ this.cmsMain.ImageScalingSize = new System.Drawing.Size(20, 20);
this.cmsMain.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.menuSysAgentMode,
+ this.menuRoutings,
this.menuServers,
+ this.toolStripSeparator13,
this.menuAddServers2,
this.menuScanScreen2,
this.menuUpdateSubscriptions,
@@ -425,63 +430,73 @@
//
// menuSysAgentMode
//
+ resources.ApplyResources(this.menuSysAgentMode, "menuSysAgentMode");
this.menuSysAgentMode.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.menuKeepClear,
this.menuGlobal,
this.menuKeepNothing});
this.menuSysAgentMode.Name = "menuSysAgentMode";
- resources.ApplyResources(this.menuSysAgentMode, "menuSysAgentMode");
//
// menuKeepClear
//
- this.menuKeepClear.Name = "menuKeepClear";
resources.ApplyResources(this.menuKeepClear, "menuKeepClear");
+ this.menuKeepClear.Name = "menuKeepClear";
this.menuKeepClear.Click += new System.EventHandler(this.menuKeepClear_Click);
//
// menuGlobal
//
- this.menuGlobal.Name = "menuGlobal";
resources.ApplyResources(this.menuGlobal, "menuGlobal");
+ this.menuGlobal.Name = "menuGlobal";
this.menuGlobal.Click += new System.EventHandler(this.menuGlobal_Click);
//
// menuKeepNothing
//
- this.menuKeepNothing.Name = "menuKeepNothing";
resources.ApplyResources(this.menuKeepNothing, "menuKeepNothing");
+ this.menuKeepNothing.Name = "menuKeepNothing";
this.menuKeepNothing.Click += new System.EventHandler(this.menuKeepNothing_Click);
//
+ // menuRoutings
+ //
+ resources.ApplyResources(this.menuRoutings, "menuRoutings");
+ this.menuRoutings.Name = "menuRoutings";
+ //
// menuServers
//
- this.menuServers.Name = "menuServers";
resources.ApplyResources(this.menuServers, "menuServers");
+ this.menuServers.Name = "menuServers";
+ //
+ // toolStripSeparator13
+ //
+ resources.ApplyResources(this.toolStripSeparator13, "toolStripSeparator13");
+ this.toolStripSeparator13.Name = "toolStripSeparator13";
//
// menuAddServers2
//
- this.menuAddServers2.Name = "menuAddServers2";
resources.ApplyResources(this.menuAddServers2, "menuAddServers2");
+ this.menuAddServers2.Name = "menuAddServers2";
this.menuAddServers2.Click += new System.EventHandler(this.menuAddServers_Click);
//
// menuScanScreen2
//
- this.menuScanScreen2.Name = "menuScanScreen2";
resources.ApplyResources(this.menuScanScreen2, "menuScanScreen2");
+ this.menuScanScreen2.Name = "menuScanScreen2";
this.menuScanScreen2.Click += new System.EventHandler(this.menuScanScreen_Click);
//
// menuUpdateSubscriptions
//
- this.menuUpdateSubscriptions.Name = "menuUpdateSubscriptions";
resources.ApplyResources(this.menuUpdateSubscriptions, "menuUpdateSubscriptions");
+ this.menuUpdateSubscriptions.Name = "menuUpdateSubscriptions";
this.menuUpdateSubscriptions.Click += new System.EventHandler(this.menuUpdateSubscriptions_Click);
//
// toolStripSeparator2
//
- this.toolStripSeparator2.Name = "toolStripSeparator2";
resources.ApplyResources(this.toolStripSeparator2, "toolStripSeparator2");
+ this.toolStripSeparator2.Name = "toolStripSeparator2";
//
// menuExit
//
- this.menuExit.Name = "menuExit";
resources.ApplyResources(this.menuExit, "menuExit");
+ this.menuExit.Name = "menuExit";
this.menuExit.Click += new System.EventHandler(this.menuExit_Click);
//
// bgwScan
@@ -492,30 +507,31 @@
//
// groupBox1
//
- this.groupBox1.Controls.Add(this.scMain);
resources.ApplyResources(this.groupBox1, "groupBox1");
+ this.groupBox1.Controls.Add(this.scMain);
this.groupBox1.Name = "groupBox1";
this.groupBox1.TabStop = false;
//
// groupBox2
//
+ resources.ApplyResources(this.groupBox2, "groupBox2");
this.groupBox2.Controls.Add(this.txtMsgBox);
this.groupBox2.Controls.Add(this.ssMain);
- resources.ApplyResources(this.groupBox2, "groupBox2");
this.groupBox2.Name = "groupBox2";
this.groupBox2.TabStop = false;
//
// txtMsgBox
//
+ resources.ApplyResources(this.txtMsgBox, "txtMsgBox");
this.txtMsgBox.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(41)))), ((int)(((byte)(49)))), ((int)(((byte)(52)))));
this.txtMsgBox.BorderStyle = System.Windows.Forms.BorderStyle.None;
- resources.ApplyResources(this.txtMsgBox, "txtMsgBox");
this.txtMsgBox.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(226)))), ((int)(((byte)(228)))));
this.txtMsgBox.Name = "txtMsgBox";
this.txtMsgBox.ReadOnly = true;
//
// ssMain
//
+ resources.ApplyResources(this.ssMain, "ssMain");
this.ssMain.ImageScalingSize = new System.Drawing.Size(20, 20);
this.ssMain.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.toolSslSocksPortLab,
@@ -527,7 +543,6 @@
this.toolSslBlank3,
this.toolSslServerSpeed,
this.toolSslBlank4});
- resources.ApplyResources(this.ssMain, "ssMain");
this.ssMain.Name = "ssMain";
this.ssMain.ItemClicked += new System.Windows.Forms.ToolStripItemClickedEventHandler(this.ssMain_ItemClicked);
//
@@ -538,8 +553,8 @@
//
// toolSslSocksPort
//
- this.toolSslSocksPort.Name = "toolSslSocksPort";
resources.ApplyResources(this.toolSslSocksPort, "toolSslSocksPort");
+ this.toolSslSocksPort.Name = "toolSslSocksPort";
//
// toolSslBlank1
//
@@ -554,8 +569,8 @@
//
// toolSslHttpPort
//
- this.toolSslHttpPort.Name = "toolSslHttpPort";
resources.ApplyResources(this.toolSslHttpPort, "toolSslHttpPort");
+ this.toolSslHttpPort.Name = "toolSslHttpPort";
//
// toolSslBlank2
//
@@ -577,8 +592,8 @@
//
// toolSslBlank4
//
- this.toolSslBlank4.Name = "toolSslBlank4";
resources.ApplyResources(this.toolSslBlank4, "toolSslBlank4");
+ this.toolSslBlank4.Name = "toolSslBlank4";
//
// panel1
//
@@ -587,6 +602,7 @@
//
// tsMain
//
+ resources.ApplyResources(this.tsMain, "tsMain");
this.tsMain.ImageScalingSize = new System.Drawing.Size(32, 32);
this.tsMain.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.tsbServer,
@@ -604,75 +620,74 @@
this.tsbPromotion,
this.toolStripSeparator11,
this.tsbClose});
- resources.ApplyResources(this.tsMain, "tsMain");
this.tsMain.Name = "tsMain";
this.tsMain.TabStop = true;
//
// toolStripSeparator4
//
- this.toolStripSeparator4.Name = "toolStripSeparator4";
resources.ApplyResources(this.toolStripSeparator4, "toolStripSeparator4");
+ this.toolStripSeparator4.Name = "toolStripSeparator4";
//
// tsbSub
//
+ resources.ApplyResources(this.tsbSub, "tsbSub");
this.tsbSub.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.tsbSubSetting,
this.tsbSubUpdate});
this.tsbSub.Image = global::v2rayN.Properties.Resources.sub;
- resources.ApplyResources(this.tsbSub, "tsbSub");
this.tsbSub.Name = "tsbSub";
//
// tsbSubSetting
//
- this.tsbSubSetting.Name = "tsbSubSetting";
resources.ApplyResources(this.tsbSubSetting, "tsbSubSetting");
+ this.tsbSubSetting.Name = "tsbSubSetting";
this.tsbSubSetting.Click += new System.EventHandler(this.tsbSubSetting_Click);
//
// tsbSubUpdate
//
- this.tsbSubUpdate.Name = "tsbSubUpdate";
resources.ApplyResources(this.tsbSubUpdate, "tsbSubUpdate");
+ this.tsbSubUpdate.Name = "tsbSubUpdate";
this.tsbSubUpdate.Click += new System.EventHandler(this.tsbSubUpdate_Click);
//
// tsbQRCodeSwitch
//
+ resources.ApplyResources(this.tsbQRCodeSwitch, "tsbQRCodeSwitch");
this.tsbQRCodeSwitch.CheckOnClick = true;
this.tsbQRCodeSwitch.ForeColor = System.Drawing.Color.Black;
this.tsbQRCodeSwitch.Image = global::v2rayN.Properties.Resources.share;
- resources.ApplyResources(this.tsbQRCodeSwitch, "tsbQRCodeSwitch");
this.tsbQRCodeSwitch.Name = "tsbQRCodeSwitch";
this.tsbQRCodeSwitch.CheckedChanged += new System.EventHandler(this.tsbQRCodeSwitch_CheckedChanged);
//
// toolStripSeparator8
//
- this.toolStripSeparator8.Name = "toolStripSeparator8";
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;
- resources.ApplyResources(this.tsbSetting, "tsbSetting");
this.tsbSetting.Name = "tsbSetting";
//
// tsbOptionSetting
//
- this.tsbOptionSetting.Name = "tsbOptionSetting";
resources.ApplyResources(this.tsbOptionSetting, "tsbOptionSetting");
+ this.tsbOptionSetting.Name = "tsbOptionSetting";
this.tsbOptionSetting.Click += new System.EventHandler(this.tsbOptionSetting_Click);
//
// tsbRoutingSetting
//
- this.tsbRoutingSetting.Name = "tsbRoutingSetting";
resources.ApplyResources(this.tsbRoutingSetting, "tsbRoutingSetting");
+ this.tsbRoutingSetting.Name = "tsbRoutingSetting";
this.tsbRoutingSetting.Click += new System.EventHandler(this.tsbRoutingSetting_Click);
//
// toolStripSeparator5
//
- this.toolStripSeparator5.Name = "toolStripSeparator5";
resources.ApplyResources(this.toolStripSeparator5, "toolStripSeparator5");
+ this.toolStripSeparator5.Name = "toolStripSeparator5";
//
// tsbReload
//
@@ -682,44 +697,45 @@
//
// toolStripSeparator7
//
- this.toolStripSeparator7.Name = "toolStripSeparator7";
resources.ApplyResources(this.toolStripSeparator7, "toolStripSeparator7");
+ this.toolStripSeparator7.Name = "toolStripSeparator7";
//
// tsbCheckUpdate
//
+ resources.ApplyResources(this.tsbCheckUpdate, "tsbCheckUpdate");
this.tsbCheckUpdate.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.tsbCheckUpdateN,
this.tsbCheckUpdateCore,
this.tsbCheckUpdateXrayCore});
this.tsbCheckUpdate.Image = global::v2rayN.Properties.Resources.checkupdate;
- resources.ApplyResources(this.tsbCheckUpdate, "tsbCheckUpdate");
this.tsbCheckUpdate.Name = "tsbCheckUpdate";
//
// tsbCheckUpdateN
//
- this.tsbCheckUpdateN.Name = "tsbCheckUpdateN";
resources.ApplyResources(this.tsbCheckUpdateN, "tsbCheckUpdateN");
+ this.tsbCheckUpdateN.Name = "tsbCheckUpdateN";
this.tsbCheckUpdateN.Click += new System.EventHandler(this.tsbCheckUpdateN_Click);
//
// tsbCheckUpdateCore
//
- this.tsbCheckUpdateCore.Name = "tsbCheckUpdateCore";
resources.ApplyResources(this.tsbCheckUpdateCore, "tsbCheckUpdateCore");
+ this.tsbCheckUpdateCore.Name = "tsbCheckUpdateCore";
this.tsbCheckUpdateCore.Click += new System.EventHandler(this.tsbCheckUpdateCore_Click);
//
// tsbCheckUpdateXrayCore
//
- this.tsbCheckUpdateXrayCore.Name = "tsbCheckUpdateXrayCore";
resources.ApplyResources(this.tsbCheckUpdateXrayCore, "tsbCheckUpdateXrayCore");
+ this.tsbCheckUpdateXrayCore.Name = "tsbCheckUpdateXrayCore";
this.tsbCheckUpdateXrayCore.Click += new System.EventHandler(this.tsbCheckUpdateXrayCore_Click);
//
// toolStripSeparator10
//
- this.toolStripSeparator10.Name = "toolStripSeparator10";
resources.ApplyResources(this.toolStripSeparator10, "toolStripSeparator10");
+ this.toolStripSeparator10.Name = "toolStripSeparator10";
//
// tsbHelp
//
+ resources.ApplyResources(this.tsbHelp, "tsbHelp");
this.tsbHelp.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.tsbAbout,
this.tsbV2rayWebsite,
@@ -727,50 +743,49 @@
this.tsbLanguageDef,
this.tsbLanguageZhHans});
this.tsbHelp.Image = global::v2rayN.Properties.Resources.help;
- resources.ApplyResources(this.tsbHelp, "tsbHelp");
this.tsbHelp.Name = "tsbHelp";
//
// tsbAbout
//
- this.tsbAbout.Name = "tsbAbout";
resources.ApplyResources(this.tsbAbout, "tsbAbout");
+ this.tsbAbout.Name = "tsbAbout";
this.tsbAbout.Click += new System.EventHandler(this.tsbAbout_Click);
//
// tsbV2rayWebsite
//
- this.tsbV2rayWebsite.Name = "tsbV2rayWebsite";
resources.ApplyResources(this.tsbV2rayWebsite, "tsbV2rayWebsite");
+ this.tsbV2rayWebsite.Name = "tsbV2rayWebsite";
this.tsbV2rayWebsite.Click += new System.EventHandler(this.tsbV2rayWebsite_Click);
//
// toolStripSeparator12
//
- this.toolStripSeparator12.Name = "toolStripSeparator12";
resources.ApplyResources(this.toolStripSeparator12, "toolStripSeparator12");
+ this.toolStripSeparator12.Name = "toolStripSeparator12";
//
// tsbLanguageDef
//
- this.tsbLanguageDef.Name = "tsbLanguageDef";
resources.ApplyResources(this.tsbLanguageDef, "tsbLanguageDef");
+ this.tsbLanguageDef.Name = "tsbLanguageDef";
this.tsbLanguageDef.Click += new System.EventHandler(this.tsbLanguageDef_Click);
//
// tsbLanguageZhHans
//
- this.tsbLanguageZhHans.Name = "tsbLanguageZhHans";
resources.ApplyResources(this.tsbLanguageZhHans, "tsbLanguageZhHans");
+ this.tsbLanguageZhHans.Name = "tsbLanguageZhHans";
this.tsbLanguageZhHans.Click += new System.EventHandler(this.tsbLanguageZhHans_Click);
//
// tsbPromotion
//
+ resources.ApplyResources(this.tsbPromotion, "tsbPromotion");
this.tsbPromotion.ForeColor = System.Drawing.Color.Black;
this.tsbPromotion.Image = global::v2rayN.Properties.Resources.promotion;
- resources.ApplyResources(this.tsbPromotion, "tsbPromotion");
this.tsbPromotion.Name = "tsbPromotion";
this.tsbPromotion.Click += new System.EventHandler(this.tsbPromotion_Click);
//
// toolStripSeparator11
//
- this.toolStripSeparator11.Name = "toolStripSeparator11";
resources.ApplyResources(this.toolStripSeparator11, "toolStripSeparator11");
+ this.toolStripSeparator11.Name = "toolStripSeparator11";
//
// tsbClose
//
@@ -904,6 +919,8 @@
private System.Windows.Forms.ToolStripMenuItem tsbRoutingSetting;
private System.Windows.Forms.ToolStripMenuItem tsbCheckUpdateXrayCore;
private System.Windows.Forms.ToolStripMenuItem menuClearServerStatistics;
+ private System.Windows.Forms.ToolStripMenuItem menuRoutings;
+ private System.Windows.Forms.ToolStripSeparator toolStripSeparator13;
}
}
diff --git a/v2rayN/v2rayN/Forms/MainForm.cs b/v2rayN/v2rayN/Forms/MainForm.cs
index 54dfd491..a0525134 100644
--- a/v2rayN/v2rayN/Forms/MainForm.cs
+++ b/v2rayN/v2rayN/Forms/MainForm.cs
@@ -47,6 +47,7 @@ namespace v2rayN.Forms
private void MainForm_Load(object sender, EventArgs e)
{
ConfigHandler.LoadConfig(ref config);
+ ConfigHandler.InitBuiltinRouting(ref config);
v2rayHandler = new V2rayHandler();
v2rayHandler.ProcessEvent += v2rayHandler_ProcessEvent;
@@ -73,6 +74,7 @@ namespace v2rayN.Forms
{
InitServersView();
RefreshServers();
+ RefreshRoutingsMenu();
RestoreUI();
LoadV2ray();
@@ -477,7 +479,6 @@ namespace v2rayN.Forms
fm.EditIndex = index;
if (fm.ShowDialog() == DialogResult.OK)
{
- //刷新
RefreshServers();
LoadV2ray();
}
@@ -568,7 +569,6 @@ namespace v2rayN.Forms
{
ConfigHandler.RemoveServer(ref config, lvSelecteds[k]);
}
- //刷新
RefreshServers();
LoadV2ray();
@@ -583,7 +583,6 @@ namespace v2rayN.Forms
{
config.vmess = servers;
}
- //刷新
RefreshServers();
LoadV2ray();
UI.Show(string.Format(UIRes.I18N("RemoveDuplicateServerResult"), oldCount, newCount));
@@ -598,7 +597,6 @@ namespace v2rayN.Forms
}
if (ConfigHandler.CopyServer(ref config, index) == 0)
{
- //刷新
RefreshServers();
}
}
@@ -737,7 +735,6 @@ namespace v2rayN.Forms
OptionSettingForm fm = new OptionSettingForm();
if (fm.ShowDialog() == DialogResult.OK)
{
- //刷新
RefreshServers();
LoadV2ray();
}
@@ -745,10 +742,10 @@ namespace v2rayN.Forms
private void tsbRoutingSetting_Click(object sender, EventArgs e)
{
- RoutingSettingForm fm = new RoutingSettingForm();
+ var fm = new RoutingSettingForm();
if (fm.ShowDialog() == DialogResult.OK)
{
- //刷新
+ RefreshRoutingsMenu();
RefreshServers();
LoadV2ray();
}
@@ -780,7 +777,6 @@ namespace v2rayN.Forms
}
if (ConfigHandler.SetDefaultServer(ref config, index) == 0)
{
- //刷新
RefreshServers();
LoadV2ray();
}
@@ -837,7 +833,6 @@ namespace v2rayN.Forms
if (ConfigHandler.AddCustomServer(ref config, fileName) == 0)
{
- //刷新
RefreshServers();
//LoadV2ray();
UI.Show(UIRes.I18N("SuccessfullyImportedCustomServer"));
@@ -869,10 +864,11 @@ namespace v2rayN.Forms
private void menuAddServers_Click(object sender, EventArgs e)
{
string clipboardData = Utils.GetClipboardData();
- int result = AddBatchServers(clipboardData);
- if (result > 0)
+ int ret = MainFormHandler.Instance.AddBatchServers(config, clipboardData);
+ if (ret > 0)
{
- UI.Show(string.Format(UIRes.I18N("SuccessfullyImportedServerViaClipboard"), result));
+ RefreshServers();
+ UI.Show(string.Format(UIRes.I18N("SuccessfullyImportedServerViaClipboard"), ret));
}
}
@@ -882,23 +878,6 @@ namespace v2rayN.Forms
bgwScan.RunWorkerAsync();
}
- private int AddBatchServers(string clipboardData, string subid = "")
- {
- int counter;
- int _Add()
- {
- return ConfigHandler.AddBatchServers(ref config, clipboardData, subid);
- }
- counter = _Add();
- if (counter < 1)
- {
- clipboardData = Utils.Base64Decode(clipboardData);
- counter = _Add();
- }
- RefreshServers();
- return counter;
- }
-
private void menuUpdateSubscriptions_Click(object sender, EventArgs e)
{
UpdateSubscriptionProcess();
@@ -1388,8 +1367,10 @@ namespace v2rayN.Forms
}
else
{
- if (AddBatchServers(result) > 0)
+ int ret = MainFormHandler.Instance.AddBatchServers(config, result);
+ if (ret > 0)
{
+ RefreshServers();
UI.Show(UIRes.I18N("SuccessfullyImportedServerViaScan"));
}
}
@@ -1456,7 +1437,8 @@ namespace v2rayN.Forms
ConfigHandler.RemoveServerViaSubid(ref config, id);
AppendText(false, $"{hashCode}{UIRes.I18N("MsgClearSubscription")}");
RefreshServers();
- if (AddBatchServers(result, id) > 0)
+ int ret = MainFormHandler.Instance.AddBatchServers(config, result, id);
+ if (ret > 0)
{
}
else
@@ -1509,5 +1491,55 @@ namespace v2rayN.Forms
#endregion
+
+
+ #region RoutingsMenu
+
+ ///
+ ///
+ ///
+ private void RefreshRoutingsMenu()
+ {
+ menuRoutings.DropDownItems.Clear();
+
+ List lst = new List();
+ for (int k = 0; k < config.routings.Count; k++)
+ {
+ var item = config.routings[k];
+ string name = item.remarks;
+
+ ToolStripMenuItem ts = new ToolStripMenuItem(name)
+ {
+ Tag = k
+ };
+ if (config.routingIndex.Equals(k))
+ {
+ ts.Checked = true;
+ }
+ ts.Click += new EventHandler(ts_Routing_Click);
+ lst.Add(ts);
+ }
+ menuRoutings.DropDownItems.AddRange(lst.ToArray());
+ }
+
+ private void ts_Routing_Click(object sender, EventArgs e)
+ {
+ try
+ {
+ ToolStripItem ts = (ToolStripItem)sender;
+ int index = Utils.ToInt(ts.Tag);
+
+ if (ConfigHandler.SetDefaultRouting(ref config, index) == 0)
+ {
+ RefreshRoutingsMenu();
+ LoadV2ray();
+ }
+ }
+ catch
+ {
+ }
+ }
+ #endregion
+
}
}
diff --git a/v2rayN/v2rayN/Forms/MainForm.resx b/v2rayN/v2rayN/Forms/MainForm.resx
index 08f3f3fc..46211fac 100644
--- a/v2rayN/v2rayN/Forms/MainForm.resx
+++ b/v2rayN/v2rayN/Forms/MainForm.resx
@@ -117,214 +117,712 @@
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- Fill
+
+ Remove duplicate servers
-
- 3, 17
-
-
- 327, 17
-
-
+
355, 22
-
- Add [VMess] server
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
+
+ 355, 22
+
+
+ 97, 53
+
+
355, 22
Add [VLESS] server
-
- 355, 22
+
+ 2
-
- Add [Shadowsocks] server
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
- 355, 22
+
+ Restart service
+
+
+ menuCopyServer
+
+
+ 264, 22
+
+
+ groupBox2
+
+
+ menuMoveUp
Add [Socks] server
+
+ 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
+
+
+
+ ImageAboveText
+
+
+ System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 语言-[中文简体]
+
+
+ NoControl
+
+
+ Settings
+
+
+ tsbHelp
+
+
+
+ 0
+
+
+ False
+
+
+ toolStripSeparator6
+
355, 22
-
- Add [Trojan] server
+
+ 99, 53
-
- 355, 22
+
+ Update subscriptions
-
- Add a custom configuration server
+
+ System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
- 355, 22
+
+ 187, 22
-
- Import bulk URL from clipboard (Ctrl+V)
+
+ tsbSetting
-
- 355, 22
-
-
- Scan QR code on the screen (Ctrl+S)
-
-
- 352, 6
+
+ toolSslBlank2
355, 22
-
- Remove selected servers (Delete)
-
-
+
355, 22
-
- Remove duplicate servers
+
+ tsbCheckUpdateN
+
+
+ Do not change system proxy
+
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ menuExport2SubContent
+
+
+ toolStripSeparator7
+
+
+ Update v2flyCore
+
+
+ Magenta
+
+
+ menuKeepNothing
355, 22
-
- Clone selected server
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
- 355, 22
+
+ Fill
-
- Set as active server (Enter)
+
+ 52, 21
-
- 352, 6
+
+ Share
+
+
+ Subscriptions
+
+
+ 952, 327
+
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
355, 22
-
- Move to top (T)
-
-
- 355, 22
-
-
- Up (U)
-
-
- 355, 22
-
-
- Down (D)
-
-
- 355, 22
-
-
- Move to bottom (B)
-
-
- 355, 22
-
-
- Select All (Ctrl+A)
-
-
- 352, 6
-
-
- 355, 22
-
-
- Test servers ping (Ctrl+P)
-
-
- 355, 22
-
-
- Test servers with tcping (Ctrl+O)
-
-
- 355, 22
-
-
- Test servers real delay (Ctrl+R)
-
-
- 355, 22
-
-
- Test servers download speed (Ctrl+T)
-
-
- 355, 22
-
-
- Test current service status
-
-
- 355, 22
-
-
- Clear all service statistics
-
-
- 352, 6
-
-
- 355, 22
-
Export selected server for client configuration
-
- 355, 22
+
+ 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
Export selected server for server configuration
-
- 355, 22
+
+ 0, 21
-
- Export share URLs to clipboard (Ctrl+C)
+
+ toolStripSeparator11
-
- 355, 22
+
+ 952, 56
-
- Export subscription (base64) share to clipboard
+
+ System.Windows.Forms.SplitContainer, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
- Magenta
+
+ 0
-
- 64, 53
+
+ Test servers real delay (Ctrl+R)
-
- Servers
+
+ menuTcpingServer
-
+
ImageAboveText
+
+ System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
356, 622
-
- cmsLv
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ v2rayN
+
+
+ 355, 22
+
+
+ toolStripSeparator1
+
+
+ 3
+
+
+ System.Windows.Forms.ToolStripDropDownButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 203, 22
+
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ tsbClose
+
+
+ 125, 22
+
+
+ 256, 307
+
+
+ 187, 22
+
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ menuPingServer
+
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ tsbLanguageDef
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+ YQUAAAAJcEhZcwAADsIAAA7CARUoSoAAAAE3SURBVFhH7ZaBDQIhDEVvBEdwBDfQDXQER3AD3cARdAPd
+ QDfSDbQvuSb1AicFjJrwkxcN0FIolOuamv5VE2E+gLaPayWchEcE+hhTXVPhIoQmDcFYbKpoJtwEdX4X
+ jgIrXfTwnzb6dBw22BaJVdjJmWQs1/SdBRtE0U5cBXW2oSFRO0HtSEeW2FZ1wsq9sjuRdTDVAXnNuWLY
+ 6JnAl0sYa/Q5q1dhq35ci+Bkq2HJvbZpxGeybAAuw4Fq+cnW1wPITgHFYxvBUw+qHEIL1yq1vDKhVlH3
+ NQwF4JkcFRWiUAB7IVW2FFPO3YqlgPd+LJf02e8Fdi3rMdIAcLDuf9UpeT0IS0G/hvhPm305vSl7EQFY
+ B6zCvozvYGzRM8zEoeg5TPZwDaGvpHQni1yzSxbXPW9q+hF13ROHuJnQcjbhtQAAAABJRU5ErkJggg==
+
+
+
+ Servers
+
+
+ 3
+
+
+ 3, 17
+
+
+ 355, 22
+
+
+ System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ Fill
+
+
+ 6, 56
+
+
+ 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
+
+
+ 220, 21
+
+
+ menuAddCustomServer
+
+
+ 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
+
+
+ Move to bottom (B)
+
+
+ toolSslBlank3
+
+
+ System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 6, 12
+
+
+ 48, 53
+
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 355, 22
+
+
+ System.ComponentModel.BackgroundWorker, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ panel1
+
+
+ 206, 21
+
+
+ 0
+
+
+ 686, 307
+
+
+ toolStripSeparator4
+
+
+ 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
+
+
+ Export share URLs to clipboard (Ctrl+C)
+
+
+ scMain.Panel2
+
+
+ System.Windows.Forms.ToolStripDropDownButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 39, 21
+
+
+ menuAddServers2
+
+
+ Fill
+
+
+ 3
+
+
+ Add [VMess] server
+
+
+ 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
+
+
+ v2rayN.Forms.BaseForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
+
+
+ tsbAbout
+
+
+ 206, 21
+
+
+ toolStripSeparator5
+
+
+ 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
+
+
+ True
+
+
+ 352, 6
+
+
+ tsbPromotion
+
+
+ 128, 53
+
+
+ 4, 4, 4, 4
+
+
+ Test servers with tcping (Ctrl+O)
+
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 352, 6
+
+
+ groupBox1
+
+
+ 206, 21
+
+
+ 2
+
+
+ 125, 22
+
+
+ Clear all service statistics
+
+
+ scMain.Panel2
+
+
+ menuRoutings
+
+
+ 161, 22
+
+
+ 355, 22
+
+
+ 187, 22
+
+
+ 6, 56
+
+
+ Test servers download speed (Ctrl+T)
+
+
+ ssMain
+
+
+ 686
+
+
+ tsbTestMe
+
+
+ 265, 170
+
+
+ 243, 22
+
+
+ $this
+
+
+ System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ scMain
+
+
+ Check for updates
+
+
+ tsbCheckUpdateXrayCore
+
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 0, 21
+
+
+ toolSslServerSpeed
+
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 4
+
+
+ System.Windows.Forms.SplitterPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ scMain
+
+
+ 203, 22
+
+
+ HTTP:
+
+
+ Remove selected servers (Delete)
+
+
+ 0
+
+
+ Help
+
+
+ menuSelectAll
+
+
+ Move to top (T)
+
+
+ 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
+
+
+ Scan QR code on the screen (Ctrl+S)
+
+
+ ImageAboveText
+
+
+ 1
+
+
+ Promotion
+
+
+ menuAddServers
+
+
+ 355, 22
+
+
+ menuAddVmessServer
+
+
+ tsbLanguageZhHans
+
+
+ menuRemoveDuplicateServer
+
+
+ BottomCenter
+
+
+ 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
+
+
+ SOCKS5:
+
+
+ v2rayN (this software)
+
+
+ Magenta
+
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 0, 66
+
+
+ 5
+
+
+ tsbV2rayWebsite
+
+
+ Server
+
+
+ v2rayN.Base.ListViewFlickerFree, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
+
+
+ menuAddShadowsocksServer
+
+
+ txtMsgBox
+
+
+ toolSslBlank4
+
+
+ menuAddTrojanServer
+
+
+ 261, 6
+
+
+ v2rayN
+
+
+ Language-[English]
+
+
+ tsbSubSetting
+
+
+ 264, 22
+
+
+ 0
+
+
+ Fill
+
+
+ Routing
+
+
+ Add [Trojan] server
+
+
+ 161, 22
+
+
+ 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
+
+
+ ImageAboveText
System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
- Fill
+
+ 0, 393
+
+
+ 352, 6
+
+
+ System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ V2Ray Website
+
+
+ No
+
+
+ 1
+
+
+ System.Windows.Forms.SplitterPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ OptionSetting
+
+
+ menuMoveTop
+
+
+ tsbCheckUpdateCore
@@ -343,1115 +841,641 @@
ZW0uRHJhd2luZy5HcmFwaGljc1VuaXQBAAAAB3ZhbHVlX18ACAMAAAADAAAACw==
-
- 0, 0
-
-
- 686, 307
-
-
-
- 0
-
-
- lvServers
-
-
- v2rayN.Base.ListViewFlickerFree, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
-
-
- scMain.Panel1
-
-
- 0
-
-
- scMain.Panel1
-
-
- System.Windows.Forms.SplitterPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- scMain
-
-
- 0
-
-
- Fill
-
-
- 0, 0
-
-
- 4, 4, 4, 4
-
-
- 256, 307
-
-
- 2
-
-
- qrCodeControl
-
-
- v2rayN.Forms.QRCodeControl, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
-
-
- scMain.Panel2
-
-
- 0
-
-
- scMain.Panel2
-
-
- System.Windows.Forms.SplitterPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- scMain
-
-
- 1
-
-
- 100
-
-
- 946, 307
-
-
- 686
-
-
- 0
-
-
- scMain
-
-
- System.Windows.Forms.SplitContainer, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- groupBox1
-
-
- 0
-
-
- 17, 17
-
-
- 137, 17
-
-
- NoControl
-
-
- 262, 22
-
-
- Clear system proxy
-
-
- 262, 22
-
-
- Set system proxy (global mode)
-
-
- 262, 22
-
-
- Do not change system proxy
-
-
- 264, 22
-
-
- Http proxy
-
-
- 264, 22
-
-
- Server
-
-
- 264, 22
-
-
- Import bulk URL from clipboard
-
-
- 264, 22
-
-
- Scan QR code on the screen
-
-
- 264, 22
-
-
- Update subscriptions
-
-
- 261, 6
-
-
- 264, 22
-
-
- Exit
-
-
- 265, 142
-
-
- cmsMain
-
-
- System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- v2rayN
-
-
- True
-
-
- 498, 17
-
-
- Fill
-
-
- 0, 66
-
-
- 952, 327
-
-
- 0
-
-
- Servers list
-
-
- groupBox1
-
-
- System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- $this
-
-
- 2
-
-
- Fill
-
-
- 3, 17
-
-
- 0
-
-
- True
-
-
- Vertical
-
-
- 946, 154
-
-
- 3
-
-
- txtMsgBox
-
-
- System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- groupBox2
-
-
- 0
-
-
- 228, 18
-
-
- 微软雅黑, 8pt
-
-
- 52, 21
-
-
- SOCKS5:
-
-
- 0, 21
-
-
- 微软雅黑, 8pt
-
-
- 206, 21
-
-
- 微软雅黑, 8pt
-
-
- 39, 21
-
-
- HTTP:
-
-
- 0, 21
-
-
- 微软雅黑, 8pt
-
-
- 206, 21
-
-
- 微软雅黑, 8pt
-
-
- 206, 21
-
-
- False
-
-
- 微软雅黑, 8pt
-
-
- No
-
-
- 220, 21
-
-
- SPEED Disabled
-
-
- MiddleRight
-
-
- 0, 21
-
-
- 3, 171
-
-
- 946, 26
-
-
- 0
-
-
- statusStrip1
-
-
- ssMain
-
-
- System.Windows.Forms.StatusStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- groupBox2
-
-
- 1
-
-
- Bottom
-
-
- 0, 393
-
-
- 952, 200
-
-
- 3
-
-
- Informations
-
-
- groupBox2
-
-
- System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- $this
-
-
- 3
-
-
- Top
-
-
- 0, 56
-
-
- 952, 10
-
-
- 2
-
-
- panel1
-
-
- System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- $this
-
-
- 4
-
-
- 409, 17
-
-
- 6, 56
-
-
- 125, 22
-
-
- Settings
-
-
- 125, 22
-
-
- Updates
-
-
- Magenta
-
-
- 99, 53
-
-
- Subscriptions
-
-
- ImageAboveText
-
-
- Magenta
-
-
- 45, 53
-
-
- Share
-
-
- BottomCenter
-
-
- ImageAboveText
-
-
- 6, 56
-
-
- 161, 22
-
-
- OptionSetting
-
-
- 161, 22
-
-
- RoutingSetting
-
-
- Magenta
-
-
- 67, 53
-
-
- Settings
+
+ menuScanScreen
ImageAboveText
+
+ cmsLv
+
+
+ toolStripSeparator12
+
6, 56
-
-
- iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
- YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAE3SURBVFhH7ZaBDQIhDEVvBEdwBDfQDXQER3AD3cARdAPd
- QDfSDbQvuSb1AicFjJrwkxcN0FIolOuamv5VE2E+gLaPayWchEcE+hhTXVPhIoQmDcFYbKpoJtwEdX4X
- jgIrXfTwnzb6dBw22BaJVdjJmWQs1/SdBRtE0U5cBXW2oSFRO0HtSEeW2FZ1wsq9sjuRdTDVAXnNuWLY
- 6JnAl0sYa/Q5q1dhq35ci+Bkq2HJvbZpxGeybAAuw4Fq+cnW1wPITgHFYxvBUw+qHEIL1yq1vDKhVlH3
- NQwF4JkcFRWiUAB7IVW2FFPO3YqlgPd+LJf02e8Fdi3rMdIAcLDuf9UpeT0IS0G/hvhPm305vSl7EQFY
- B6zCvozvYGzRM8zEoeg5TPZwDaGvpHQni1yzSxbXPW9q+hF13ROHuJnQcjbhtQAAAABJRU5ErkJggg==
-
+
+ toolSslBlank1
-
- BottomCenter
+
+ scMain.Panel1
-
- Magenta
+
+ tsbReload
-
- 97, 53
+
+ tsbSubUpdate
-
- Restart service
+
+ 微软雅黑, 8pt
-
+
+ System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ SPEED Disabled
+
+
+ 355, 22
+
+
+ 67, 53
+
+
+ menuSysAgentMode
+
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
ImageAboveText
-
+
+ Export subscription (base64) share to clipboard
+
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ menuScanScreen2
+
+
+ cmsMain
+
+
+ 264, 22
+
+
+ menuServers
+
+
+ menuUpdateSubscriptions
+
+
+ $this
+
+
+ System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ toolStripSeparator13
+
+
+ RoutingSetting
+
+
+ System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ tsbQRCodeSwitch
+
+
+ 3, 171
+
+
+ True
+
+
+ 355, 22
+
+
6, 56
-
- 203, 22
+
+ 952, 10
-
- v2rayN (this software)
+
+ Updates
-
- 203, 22
+
+ 264, 22
-
- Update v2flyCore
+
+ 0
-
- 203, 22
-
-
- Update XrayCore
-
-
- Magenta
-
-
- 128, 53
-
-
- Check for updates
-
-
- ImageAboveText
-
-
- 6, 56
-
-
- 187, 22
-
-
- v2rayN Project
-
-
- 187, 22
-
-
- V2Ray Website
-
-
- 184, 6
-
-
- 187, 22
-
-
- Language-[English]
-
-
- 187, 22
-
-
- 语言-[中文简体]
-
-
- Magenta
-
-
- 48, 53
-
-
- Help
-
-
- ImageAboveText
-
-
- Magenta
+
+ toolStripSeparator8
89, 53
-
- Promotion
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ BottomCenter
+
+
+ Test servers ping (Ctrl+P)
+
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 355, 22
+
+
+ 264, 22
+
+
+ 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
+
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ Settings
+
+
+ 45, 53
+
+
+ System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ Http proxy
+
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 355, 22
+
+
+ groupBox1
+
+
+ MainForm
+
+
+ toolStripSeparator9
+
+
+ menuExit
+
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ Servers list
+
+
+ System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ lvServers
+
+
+ menuRealPingServer
+
+
+ Magenta
+
+
+ System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ menuGlobal
+
+
+ 100
+
+
+ 2
+
+
+ 4, 4, 4, 4
+
+
+ Magenta
+
+
+ 355, 22
+
+
+ v2rayN Project
+
+
+ 0
+
+
+ System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ Select All (Ctrl+A)
+
+
+ Informations
+
+
+ $this
+
+
+ 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
+
+
+ menuSpeedServer
+
+
+ 355, 22
+
+
+ menuRemoveServer
+
+
+ tsbServer
+
+
+ Test current service status
+
+
+ 355, 22
+
+
+ 946, 154
+
+
+ System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Windows.Forms.NotifyIcon, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ scMain
+
+
+ Down (D)
+
+
+ 352, 6
+
+
+ Magenta
+
+
+ 243, 22
+
+
+ 355, 22
+
+
+ tsbSub
+
+
+ Magenta
+
+
+ ImageAboveText
+
+
+ Clone selected server
+
+
+ 0, 0
+
+
+ 355, 22
+
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ groupBox2
+
+
+ tsbCheckUpdate
+
+
+ System.Windows.Forms.TextBox, 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
+
+
+ 微软雅黑, 8pt
+
+
+ Vertical
+
+
+ 243, 22
+
+
+ 355, 22
+
+
+ v2rayN.Forms.QRCodeControl, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
+
+
+ 微软雅黑, 8pt
+
+
+ System.Windows.Forms.ToolStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ $this
+
+
+ 0, 0
+
+
+ qrCodeControl
+
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ Clear system proxy
+
+
+ 355, 22
+
+
+ 0
+
+
+ System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 微软雅黑, 8pt
+
+
+ groupBox2
+
+
+ ImageAboveText
+
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 203, 22
+
+
+ 184, 6
+
+
+ 0, 0
+
+
+ Up (U)
+
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ notifyMain
+
+
+ Set system proxy
+
+
+ System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ MiddleRight
+
+
+ tsbOptionSetting
+
+
+ System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ menuAddSocksServer
+
+
+ scMain.Panel1
+
+
+ 微软雅黑, 8pt
+
+
+ 64, 53
+
+
+ Magenta
+
+
+ 946, 26
+
+
+ 355, 22
+
+
+ Set as active server (Enter)
+
+
+ menuAddVlessServer
+
+
+ 946, 307
+
+
+ 6, 56
+
+
+ Add [Shadowsocks] server
+
+
+ 261, 6
+
+
+ 微软雅黑, 8pt
+
+
+ 952, 593
+
+
+ Scan QR code on the screen
+
+
+ toolSslSocksPort
+
+
+ toolStripSeparator10
+
+
+ toolSslHttpPortLab
+
+
+ menuMoveBottom
+
+
+ 1
+
+
+ Magenta
+
+
+ menuExport2ClientConfig
+
+
+ 187, 22
+
+
+ menuExport2ServerConfig
+
+
+ 0
+
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
ImageAboveText
+
+ 264, 22
+
6, 56
-
-
- iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
- YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAySURBVFhH7c6xDQAgCEVBRnVTHU2ZABuMxV3yOvJDAAA/
- GqfZVG6X8mg1dfUAAPBQxAZd0SJruVXHWwAAAABJRU5ErkJggg==
-
+
+ System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
+
Magenta
52, 53
+
+ 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
+
+
+ Exit
+
+
+ menuClearServerStatistics
+
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 0, 56
+
Close
-
- ImageAboveText
+
+ 264, 22
-
- 0, 0
+
+ 0, 21
-
- 952, 56
+
+ 0
-
- 1
+
+ Import bulk URL from clipboard (Ctrl+V)
-
- tsMain
+
+ Update XrayCore
-
- System.Windows.Forms.ToolStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+ toolStripSeparator2
-
- $this
+
+ toolSslSocksPortLab
-
- 5
+
+ Add a custom configuration server
+
+ toolSslHttpPort
+
+
+ bgwScan
+
+
+ System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 952, 200
+
+
+ statusStrip1
+
+
+ System.Windows.Forms.ToolStripDropDownButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ Fill
+
+
+ 3, 17
+
+
+ toolStripSeparator3
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+ YQUAAAAJcEhZcwAADsIAAA7CARUoSoAAAAAySURBVFhH7c6xDQAgCEVBRnVTHU2ZABuMxV3yOvJDAAA/
+ GqfZVG6X8mg1dfUAAPBQxAZd0SJruVXHWwAAAABJRU5ErkJggg==
+
+
+
+ 355, 22
+
+
+ 355, 22
+
+
+ System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Windows.Forms.StatusStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 228, 18
+
+
+ zh-Hans
+
True
65
-
- 6, 12
-
-
- 952, 593
-
-
- 4, 4, 4, 4
-
-
- v2rayN
-
-
- menuAddVmessServer
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- menuAddVlessServer
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- menuAddShadowsocksServer
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- menuAddSocksServer
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- menuAddTrojanServer
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- menuAddCustomServer
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- menuAddServers
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- menuScanScreen
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- toolStripSeparator1
-
-
- System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- menuRemoveServer
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- menuRemoveDuplicateServer
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- menuCopyServer
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- menuSetDefaultServer
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- toolStripSeparator3
-
-
- System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- menuMoveTop
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- menuMoveUp
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- menuMoveDown
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- menuMoveBottom
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- menuSelectAll
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- toolStripSeparator9
-
-
- System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- menuPingServer
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- menuTcpingServer
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- menuRealPingServer
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- menuSpeedServer
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- tsbTestMe
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- menuClearServerStatistics
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- toolStripSeparator6
-
-
- System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- menuExport2ClientConfig
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- menuExport2ServerConfig
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- menuExport2ShareUrl
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- menuExport2SubContent
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- tsbServer
-
-
- System.Windows.Forms.ToolStripDropDownButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- notifyMain
-
-
- System.Windows.Forms.NotifyIcon, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- menuSysAgentMode
-
-
- 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
-
-
- menuGlobal
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- menuKeepNothing
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- menuServers
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- menuAddServers2
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- menuScanScreen2
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- menuUpdateSubscriptions
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- toolStripSeparator2
-
-
- System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- menuExit
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- bgwScan
-
-
- System.ComponentModel.BackgroundWorker, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- toolSslSocksPortLab
-
-
- System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- toolSslSocksPort
-
-
- System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- toolSslBlank1
-
-
- System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- toolSslHttpPortLab
-
-
- System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- toolSslHttpPort
-
-
- System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- toolSslBlank2
-
-
- System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- toolSslBlank3
-
-
- System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- toolSslServerSpeed
-
-
- System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- toolSslBlank4
-
-
- System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- toolStripSeparator4
-
-
- System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- tsbSub
-
-
- System.Windows.Forms.ToolStripDropDownButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- tsbSubSetting
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- tsbSubUpdate
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- tsbQRCodeSwitch
-
-
- System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- toolStripSeparator8
-
-
- System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- tsbSetting
-
-
- System.Windows.Forms.ToolStripDropDownButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- tsbOptionSetting
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- tsbRoutingSetting
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- toolStripSeparator5
-
-
- System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- tsbReload
-
-
- System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- toolStripSeparator7
-
-
- System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- tsbCheckUpdate
-
-
- System.Windows.Forms.ToolStripDropDownButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- tsbCheckUpdateN
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- tsbCheckUpdateCore
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- tsbCheckUpdateXrayCore
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- toolStripSeparator10
-
-
- System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- tsbHelp
-
-
- System.Windows.Forms.ToolStripDropDownButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- tsbAbout
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- tsbV2rayWebsite
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- toolStripSeparator12
-
-
- System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- tsbLanguageDef
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- tsbLanguageZhHans
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- tsbPromotion
-
-
- System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- toolStripSeparator11
-
-
- System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- tsbClose
-
-
- System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- MainForm
-
-
- v2rayN.Forms.BaseForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
-
+
+ 137, 17
+
+
+ 498, 17
+
+
+ 17, 17
+
+
+ 409, 17
+
+
+ 327, 17
+
\ No newline at end of file
diff --git a/v2rayN/v2rayN/Forms/MainForm.zh-Hans.resx b/v2rayN/v2rayN/Forms/MainForm.zh-Hans.resx
index f75d3073..42204a5f 100644
--- a/v2rayN/v2rayN/Forms/MainForm.zh-Hans.resx
+++ b/v2rayN/v2rayN/Forms/MainForm.zh-Hans.resx
@@ -292,14 +292,8 @@
批量导出订阅内容至剪贴板(多选)
-
- 73, 53
-
-
- 服务器
-
- 301, 600
+ 301, 622
@@ -318,20 +312,26 @@
ZW0uRHJhd2luZy5HcmFwaGljc1VuaXQBAAAAB3ZhbHVlX18ACAMAAAADAAAACw==
+
+ 73, 53
+
+
+ 服务器
+
- 228, 22
+ 172, 22
清除系统代理
- 228, 22
+ 172, 22
- 自动配置系统代理(全局模式)
+ 自动配置系统代理
- 228, 22
+ 172, 22
不改变系统代理
@@ -342,12 +342,21 @@
系统代理
+
+ 195, 22
+
+
+ 路由
+
195, 22
服务器
+
+ 192, 6
+
195, 22
@@ -376,7 +385,7 @@
退出
- 196, 142
+ 196, 192
服务器列表
@@ -388,13 +397,13 @@
信息
- 124, 22
+ 180, 22
订阅设置
- 124, 22
+ 180, 22
更新订阅
diff --git a/v2rayN/v2rayN/Forms/RoutingRuleSettingDetailsForm.Designer.cs b/v2rayN/v2rayN/Forms/RoutingRuleSettingDetailsForm.Designer.cs
new file mode 100644
index 00000000..d33ade0f
--- /dev/null
+++ b/v2rayN/v2rayN/Forms/RoutingRuleSettingDetailsForm.Designer.cs
@@ -0,0 +1,218 @@
+namespace v2rayN.Forms
+{
+ partial class RoutingRuleSettingDetailsForm
+ {
+ ///
+ /// 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(RoutingRuleSettingDetailsForm));
+ this.panel1 = new System.Windows.Forms.Panel();
+ this.panel3 = new System.Windows.Forms.Panel();
+ this.clbProtocol = new System.Windows.Forms.CheckedListBox();
+ this.label3 = new System.Windows.Forms.Label();
+ this.txtPort = new System.Windows.Forms.TextBox();
+ this.label1 = new System.Windows.Forms.Label();
+ this.labRoutingTips = new System.Windows.Forms.Label();
+ this.label4 = new System.Windows.Forms.Label();
+ this.cmbOutboundTag = new System.Windows.Forms.ComboBox();
+ this.panel4 = new System.Windows.Forms.Panel();
+ this.btnClose = new System.Windows.Forms.Button();
+ this.btnOK = new System.Windows.Forms.Button();
+ this.panel2 = new System.Windows.Forms.Panel();
+ this.groupBox2 = new System.Windows.Forms.GroupBox();
+ this.txtIP = new System.Windows.Forms.TextBox();
+ this.groupBox1 = new System.Windows.Forms.GroupBox();
+ this.txtDomain = new System.Windows.Forms.TextBox();
+ this.panel3.SuspendLayout();
+ this.panel4.SuspendLayout();
+ this.panel2.SuspendLayout();
+ this.groupBox2.SuspendLayout();
+ this.groupBox1.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // panel1
+ //
+ resources.ApplyResources(this.panel1, "panel1");
+ this.panel1.Name = "panel1";
+ //
+ // panel3
+ //
+ this.panel3.Controls.Add(this.clbProtocol);
+ this.panel3.Controls.Add(this.label3);
+ this.panel3.Controls.Add(this.txtPort);
+ this.panel3.Controls.Add(this.label1);
+ this.panel3.Controls.Add(this.labRoutingTips);
+ this.panel3.Controls.Add(this.label4);
+ this.panel3.Controls.Add(this.cmbOutboundTag);
+ resources.ApplyResources(this.panel3, "panel3");
+ this.panel3.Name = "panel3";
+ //
+ // clbProtocol
+ //
+ this.clbProtocol.CheckOnClick = true;
+ resources.ApplyResources(this.clbProtocol, "clbProtocol");
+ this.clbProtocol.FormattingEnabled = true;
+ this.clbProtocol.Items.AddRange(new object[] {
+ resources.GetString("clbProtocol.Items"),
+ resources.GetString("clbProtocol.Items1"),
+ resources.GetString("clbProtocol.Items2")});
+ this.clbProtocol.MultiColumn = true;
+ this.clbProtocol.Name = "clbProtocol";
+ //
+ // label3
+ //
+ resources.ApplyResources(this.label3, "label3");
+ this.label3.Name = "label3";
+ //
+ // txtPort
+ //
+ resources.ApplyResources(this.txtPort, "txtPort");
+ this.txtPort.Name = "txtPort";
+ //
+ // label1
+ //
+ resources.ApplyResources(this.label1, "label1");
+ this.label1.Name = "label1";
+ //
+ // labRoutingTips
+ //
+ this.labRoutingTips.ForeColor = System.Drawing.Color.Brown;
+ resources.ApplyResources(this.labRoutingTips, "labRoutingTips");
+ this.labRoutingTips.Name = "labRoutingTips";
+ //
+ // label4
+ //
+ resources.ApplyResources(this.label4, "label4");
+ this.label4.Name = "label4";
+ //
+ // 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")});
+ resources.ApplyResources(this.cmbOutboundTag, "cmbOutboundTag");
+ this.cmbOutboundTag.Name = "cmbOutboundTag";
+ //
+ // panel4
+ //
+ this.panel4.Controls.Add(this.btnClose);
+ this.panel4.Controls.Add(this.btnOK);
+ resources.ApplyResources(this.panel4, "panel4");
+ this.panel4.Name = "panel4";
+ //
+ // 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);
+ //
+ // btnOK
+ //
+ resources.ApplyResources(this.btnOK, "btnOK");
+ this.btnOK.Name = "btnOK";
+ this.btnOK.UseVisualStyleBackColor = true;
+ this.btnOK.Click += new System.EventHandler(this.btnOK_Click);
+ //
+ // panel2
+ //
+ this.panel2.Controls.Add(this.groupBox2);
+ this.panel2.Controls.Add(this.groupBox1);
+ resources.ApplyResources(this.panel2, "panel2");
+ this.panel2.Name = "panel2";
+ //
+ // groupBox2
+ //
+ this.groupBox2.Controls.Add(this.txtIP);
+ resources.ApplyResources(this.groupBox2, "groupBox2");
+ this.groupBox2.Name = "groupBox2";
+ this.groupBox2.TabStop = false;
+ //
+ // txtIP
+ //
+ resources.ApplyResources(this.txtIP, "txtIP");
+ this.txtIP.Name = "txtIP";
+ //
+ // groupBox1
+ //
+ this.groupBox1.Controls.Add(this.txtDomain);
+ resources.ApplyResources(this.groupBox1, "groupBox1");
+ this.groupBox1.Name = "groupBox1";
+ this.groupBox1.TabStop = false;
+ //
+ // txtDomain
+ //
+ resources.ApplyResources(this.txtDomain, "txtDomain");
+ this.txtDomain.Name = "txtDomain";
+ //
+ // RoutingRuleSettingDetailsForm
+ //
+ resources.ApplyResources(this, "$this");
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.CancelButton = this.btnClose;
+ this.Controls.Add(this.panel2);
+ this.Controls.Add(this.panel4);
+ this.Controls.Add(this.panel3);
+ this.Controls.Add(this.panel1);
+ this.Name = "RoutingRuleSettingDetailsForm";
+ this.Load += new System.EventHandler(this.RoutingRuleSettingDetailsForm_Load);
+ this.panel3.ResumeLayout(false);
+ this.panel3.PerformLayout();
+ this.panel4.ResumeLayout(false);
+ this.panel2.ResumeLayout(false);
+ this.groupBox2.ResumeLayout(false);
+ this.groupBox2.PerformLayout();
+ this.groupBox1.ResumeLayout(false);
+ this.groupBox1.PerformLayout();
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.Panel panel1;
+ private System.Windows.Forms.Panel panel3;
+ private System.Windows.Forms.Label label4;
+ private System.Windows.Forms.ComboBox cmbOutboundTag;
+ private System.Windows.Forms.Panel panel4;
+ private System.Windows.Forms.Button btnClose;
+ private System.Windows.Forms.Button btnOK;
+ private System.Windows.Forms.Panel panel2;
+ private System.Windows.Forms.GroupBox groupBox1;
+ private System.Windows.Forms.TextBox txtDomain;
+ private System.Windows.Forms.GroupBox groupBox2;
+ private System.Windows.Forms.TextBox txtIP;
+ private System.Windows.Forms.Label labRoutingTips;
+ private System.Windows.Forms.Label label1;
+ private System.Windows.Forms.TextBox txtPort;
+ private System.Windows.Forms.Label label3;
+ private System.Windows.Forms.CheckedListBox clbProtocol;
+ }
+}
\ No newline at end of file
diff --git a/v2rayN/v2rayN/Forms/RoutingRuleSettingDetailsForm.cs b/v2rayN/v2rayN/Forms/RoutingRuleSettingDetailsForm.cs
new file mode 100644
index 00000000..a11e589d
--- /dev/null
+++ b/v2rayN/v2rayN/Forms/RoutingRuleSettingDetailsForm.cs
@@ -0,0 +1,115 @@
+using System;
+using System.Collections.Generic;
+using System.Windows.Forms;
+using v2rayN.Base;
+using v2rayN.Handler;
+using v2rayN.Mode;
+
+namespace v2rayN.Forms
+{
+ public partial class RoutingRuleSettingDetailsForm : BaseForm
+ {
+ public RulesItem rulesItem
+ {
+ get; set;
+ }
+
+ public RoutingRuleSettingDetailsForm()
+ {
+ InitializeComponent();
+ }
+
+ private void RoutingRuleSettingDetailsForm_Load(object sender, EventArgs e)
+ {
+ if (Utils.IsNullOrEmpty(rulesItem.outboundTag))
+ {
+ ClearBind();
+ }
+ else
+ {
+ BindingData();
+ }
+ }
+
+ private void EndBindingData()
+ {
+ if (rulesItem != null)
+ {
+ rulesItem.port = txtPort.Text.TrimEx();
+ rulesItem.outboundTag = cmbOutboundTag.Text;
+ rulesItem.domain = Utils.String2List(txtDomain.Text);
+ rulesItem.ip = Utils.String2List(txtIP.Text);
+
+ var protocol = new List();
+ for (int i = 0; i < clbProtocol.Items.Count; i++)
+ {
+ if (clbProtocol.GetItemChecked(i))
+ {
+ protocol.Add(clbProtocol.Items[i].ToString());
+ }
+ }
+ rulesItem.protocol = protocol;
+ }
+ }
+ private void BindingData()
+ {
+ if (rulesItem != null)
+ {
+ txtPort.Text = rulesItem.port ?? string.Empty;
+ cmbOutboundTag.Text = rulesItem.outboundTag;
+ txtDomain.Text = Utils.List2String(rulesItem.domain, true);
+ txtIP.Text = Utils.List2String(rulesItem.ip, true);
+
+ if (rulesItem.protocol != null)
+ {
+ for (int i = 0; i < clbProtocol.Items.Count; i++)
+ {
+ if (rulesItem.protocol.Contains(clbProtocol.Items[i].ToString()))
+ {
+ clbProtocol.SetItemChecked(i, true);
+ }
+ }
+ }
+ }
+ }
+ private void ClearBind()
+ {
+ txtPort.Text = string.Empty;
+ cmbOutboundTag.Text = Global.agentTag;
+ txtDomain.Text = string.Empty;
+ txtIP.Text = string.Empty;
+ }
+ private void btnOK_Click(object sender, EventArgs e)
+ {
+ EndBindingData();
+ var hasRule = false;
+ if (rulesItem.domain != null && rulesItem.domain.Count > 0)
+ {
+ hasRule = true;
+ }
+ if (rulesItem.ip != null && rulesItem.ip.Count > 0)
+ {
+ hasRule = true;
+ }
+ if (rulesItem.protocol != null && rulesItem.protocol.Count > 0)
+ {
+ hasRule = true;
+ }
+ if (!Utils.IsNullOrEmpty(rulesItem.port))
+ {
+ hasRule = true;
+ }
+ if (!hasRule)
+ {
+ UI.ShowWarning(string.Format(UIRes.I18N("RoutingRuleDetailRequiredTips"), "Port/Protocol/Domain/IP"));
+ return;
+ }
+ this.DialogResult = DialogResult.OK;
+ }
+
+ private void btnClose_Click(object sender, EventArgs e)
+ {
+ this.DialogResult = DialogResult.Cancel;
+ }
+ }
+}
diff --git a/v2rayN/v2rayN/Forms/RoutingRuleSettingDetailsForm.resx b/v2rayN/v2rayN/Forms/RoutingRuleSettingDetailsForm.resx
new file mode 100644
index 00000000..9149d44a
--- /dev/null
+++ b/v2rayN/v2rayN/Forms/RoutingRuleSettingDetailsForm.resx
@@ -0,0 +1,600 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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
+
+
+
+ Top
+
+
+
+ 0, 0
+
+
+ 742, 10
+
+
+
+ 7
+
+
+ panel1
+
+
+ System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ $this
+
+
+ 3
+
+
+ 80
+
+
+ http
+
+
+ tls
+
+
+ bittorrent
+
+
+ 347, 43
+
+
+ 245, 20
+
+
+ 39
+
+
+ clbProtocol
+
+
+ System.Windows.Forms.CheckedListBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ panel3
+
+
+ 0
+
+
+ True
+
+
+ NoControl
+
+
+ 274, 47
+
+
+ 53, 12
+
+
+ 36
+
+
+ Protocol
+
+
+ label3
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ panel3
+
+
+ 1
+
+
+ 107, 43
+
+
+ 119, 21
+
+
+ 35
+
+
+ txtPort
+
+
+ System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ panel3
+
+
+ 2
+
+
+ True
+
+
+ NoControl
+
+
+ 19, 47
+
+
+ 29, 12
+
+
+ 34
+
+
+ Port
+
+
+ label1
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ panel3
+
+
+ 3
+
+
+ NoControl
+
+
+ 19, 82
+
+
+ 598, 16
+
+
+ 33
+
+
+ *Set the rules, separated by commas (,); The comma in the regular is replaced by <COMMA>
+
+
+ labRoutingTips
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ panel3
+
+
+ 4
+
+
+ True
+
+
+ NoControl
+
+
+ 19, 20
+
+
+ 71, 12
+
+
+ 32
+
+
+ outboundTag
+
+
+ label4
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ panel3
+
+
+ 5
+
+
+ proxy
+
+
+ direct
+
+
+ block
+
+
+ 107, 16
+
+
+ 119, 20
+
+
+ 31
+
+
+ cmbOutboundTag
+
+
+ System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ panel3
+
+
+ 6
+
+
+ Top
+
+
+ 0, 10
+
+
+ 742, 111
+
+
+ 8
+
+
+ panel3
+
+
+ System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ $this
+
+
+ 2
+
+
+ NoControl
+
+
+ 504, 15
+
+
+ 75, 23
+
+
+ 4
+
+
+ &Cancel
+
+
+ btnClose
+
+
+ System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ panel4
+
+
+ 0
+
+
+ NoControl
+
+
+ 411, 15
+
+
+ 75, 23
+
+
+ 5
+
+
+ &OK
+
+
+ btnOK
+
+
+ System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ panel4
+
+
+ 1
+
+
+ Bottom
+
+
+ 0, 516
+
+
+ 742, 60
+
+
+ 10
+
+
+ panel4
+
+
+ System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ $this
+
+
+ 1
+
+
+ Fill
+
+
+ 3, 17
+
+
+ True
+
+
+ 344, 375
+
+
+ 25
+
+
+ txtIP
+
+
+ System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ groupBox2
+
+
+ 0
+
+
+ Fill
+
+
+ 392, 0
+
+
+ 350, 395
+
+
+ 4
+
+
+ IP
+
+
+ groupBox2
+
+
+ System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ panel2
+
+
+ 0
+
+
+ Fill
+
+
+ 3, 17
+
+
+ True
+
+
+ 386, 375
+
+
+ 24
+
+
+ txtDomain
+
+
+ System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ groupBox1
+
+
+ 0
+
+
+ Left
+
+
+ 0, 0
+
+
+ 392, 395
+
+
+ 3
+
+
+ Domain
+
+
+ groupBox1
+
+
+ System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ panel2
+
+
+ 1
+
+
+ Fill
+
+
+ 0, 121
+
+
+ 742, 395
+
+
+ 11
+
+
+ panel2
+
+
+ System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ $this
+
+
+ 0
+
+
+ True
+
+
+ 6, 12
+
+
+ 742, 576
+
+
+ RoutingSettingDetailsForm
+
+
+ RoutingRuleSettingDetailsForm
+
+
+ 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/RoutingRuleSettingDetailsForm.zh-Hans.resx b/v2rayN/v2rayN/Forms/RoutingRuleSettingDetailsForm.zh-Hans.resx
new file mode 100644
index 00000000..bac9081a
--- /dev/null
+++ b/v2rayN/v2rayN/Forms/RoutingRuleSettingDetailsForm.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
+
+
+ *设置的路由规则,用逗号(,)分隔;正则中的逗号用<COMMA>替代
+
+
+
+ 71, 12
+
+
+ OutboundTag
+
+
+ 29, 12
+
+
+ 别名
+
+
+ 取消(&C)
+
+
+ 确定(&O)
+
+
+ 路由规则详情设置
+
+
\ No newline at end of file
diff --git a/v2rayN/v2rayN/Forms/RoutingRuleSettingForm.Designer.cs b/v2rayN/v2rayN/Forms/RoutingRuleSettingForm.Designer.cs
new file mode 100644
index 00000000..a0dbe650
--- /dev/null
+++ b/v2rayN/v2rayN/Forms/RoutingRuleSettingForm.Designer.cs
@@ -0,0 +1,322 @@
+namespace v2rayN.Forms
+{
+ partial class RoutingRuleSettingForm
+ {
+ ///
+ /// 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()
+ {
+ this.components = new System.ComponentModel.Container();
+ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(RoutingRuleSettingForm));
+ this.btnClose = new System.Windows.Forms.Button();
+ this.panel2 = new System.Windows.Forms.Panel();
+ this.btnOK = new System.Windows.Forms.Button();
+ this.panel1 = new System.Windows.Forms.Panel();
+ this.label1 = new System.Windows.Forms.Label();
+ this.txtUrl = new System.Windows.Forms.TextBox();
+ this.label3 = new System.Windows.Forms.Label();
+ this.txtRemarks = new System.Windows.Forms.TextBox();
+ this.label2 = new System.Windows.Forms.Label();
+ this.lvRoutings = new v2rayN.Base.ListViewFlickerFree();
+ this.cmsLv = new System.Windows.Forms.ContextMenuStrip(this.components);
+ this.menuAdd = new System.Windows.Forms.ToolStripMenuItem();
+ this.menuRemove = new System.Windows.Forms.ToolStripMenuItem();
+ this.menuSelectAll = new System.Windows.Forms.ToolStripMenuItem();
+ this.menuExportSelectedRules = new System.Windows.Forms.ToolStripMenuItem();
+ this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator();
+ this.menuMoveTop = new System.Windows.Forms.ToolStripMenuItem();
+ this.menuMoveUp = new System.Windows.Forms.ToolStripMenuItem();
+ this.menuMoveDown = new System.Windows.Forms.ToolStripMenuItem();
+ this.menuMoveBottom = new System.Windows.Forms.ToolStripMenuItem();
+ this.MenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
+ this.tabControl2 = new System.Windows.Forms.TabControl();
+ this.tabPage2 = new System.Windows.Forms.TabPage();
+ this.menuServer = new System.Windows.Forms.MenuStrip();
+ this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
+ this.menuImportRulesFromFile = new System.Windows.Forms.ToolStripMenuItem();
+ this.menuImportRulesFromClipboard = new System.Windows.Forms.ToolStripMenuItem();
+ this.menuImportRulesFromUrl = new System.Windows.Forms.ToolStripMenuItem();
+ this.panel2.SuspendLayout();
+ this.panel1.SuspendLayout();
+ this.cmsLv.SuspendLayout();
+ this.tabControl2.SuspendLayout();
+ this.tabPage2.SuspendLayout();
+ this.menuServer.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // btnClose
+ //
+ resources.ApplyResources(this.btnClose, "btnClose");
+ this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel;
+ this.btnClose.Name = "btnClose";
+ this.btnClose.UseVisualStyleBackColor = true;
+ this.btnClose.Click += new System.EventHandler(this.btnClose_Click);
+ //
+ // panel2
+ //
+ resources.ApplyResources(this.panel2, "panel2");
+ this.panel2.Controls.Add(this.btnClose);
+ this.panel2.Controls.Add(this.btnOK);
+ this.panel2.Name = "panel2";
+ //
+ // btnOK
+ //
+ resources.ApplyResources(this.btnOK, "btnOK");
+ this.btnOK.Name = "btnOK";
+ this.btnOK.UseVisualStyleBackColor = true;
+ this.btnOK.Click += new System.EventHandler(this.btnOK_Click);
+ //
+ // panel1
+ //
+ resources.ApplyResources(this.panel1, "panel1");
+ this.panel1.Controls.Add(this.label1);
+ this.panel1.Controls.Add(this.txtUrl);
+ this.panel1.Controls.Add(this.label3);
+ this.panel1.Controls.Add(this.txtRemarks);
+ this.panel1.Controls.Add(this.label2);
+ this.panel1.Name = "panel1";
+ //
+ // label1
+ //
+ resources.ApplyResources(this.label1, "label1");
+ this.label1.Name = "label1";
+ //
+ // txtUrl
+ //
+ resources.ApplyResources(this.txtUrl, "txtUrl");
+ this.txtUrl.Name = "txtUrl";
+ //
+ // label3
+ //
+ resources.ApplyResources(this.label3, "label3");
+ this.label3.Name = "label3";
+ //
+ // txtRemarks
+ //
+ resources.ApplyResources(this.txtRemarks, "txtRemarks");
+ this.txtRemarks.Name = "txtRemarks";
+ //
+ // label2
+ //
+ resources.ApplyResources(this.label2, "label2");
+ this.label2.Name = "label2";
+ //
+ // lvRoutings
+ //
+ resources.ApplyResources(this.lvRoutings, "lvRoutings");
+ this.lvRoutings.ContextMenuStrip = this.cmsLv;
+ this.lvRoutings.FullRowSelect = true;
+ this.lvRoutings.GridLines = true;
+ this.lvRoutings.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable;
+ this.lvRoutings.HideSelection = false;
+ this.lvRoutings.Items.AddRange(new System.Windows.Forms.ListViewItem[] {
+ ((System.Windows.Forms.ListViewItem)(resources.GetObject("lvRoutings.Items")))});
+ this.lvRoutings.MultiSelect = false;
+ this.lvRoutings.Name = "lvRoutings";
+ this.lvRoutings.UseCompatibleStateImageBehavior = false;
+ this.lvRoutings.View = System.Windows.Forms.View.Details;
+ this.lvRoutings.DoubleClick += new System.EventHandler(this.lvRoutings_DoubleClick);
+ this.lvRoutings.KeyDown += new System.Windows.Forms.KeyEventHandler(this.lvRoutings_KeyDown);
+ //
+ // cmsLv
+ //
+ resources.ApplyResources(this.cmsLv, "cmsLv");
+ this.cmsLv.ImageScalingSize = new System.Drawing.Size(20, 20);
+ this.cmsLv.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ this.menuAdd,
+ this.menuRemove,
+ this.menuSelectAll,
+ this.menuExportSelectedRules,
+ this.toolStripSeparator3,
+ this.menuMoveTop,
+ this.menuMoveUp,
+ this.menuMoveDown,
+ this.menuMoveBottom});
+ this.cmsLv.Name = "cmsLv";
+ //
+ // menuAdd
+ //
+ resources.ApplyResources(this.menuAdd, "menuAdd");
+ this.menuAdd.Name = "menuAdd";
+ this.menuAdd.Click += new System.EventHandler(this.menuAdd_Click);
+ //
+ // menuRemove
+ //
+ resources.ApplyResources(this.menuRemove, "menuRemove");
+ this.menuRemove.Name = "menuRemove";
+ this.menuRemove.Click += new System.EventHandler(this.menuRemove_Click);
+ //
+ // menuSelectAll
+ //
+ resources.ApplyResources(this.menuSelectAll, "menuSelectAll");
+ this.menuSelectAll.Name = "menuSelectAll";
+ this.menuSelectAll.Click += new System.EventHandler(this.menuSelectAll_Click);
+ //
+ // menuExportSelectedRules
+ //
+ resources.ApplyResources(this.menuExportSelectedRules, "menuExportSelectedRules");
+ this.menuExportSelectedRules.Name = "menuExportSelectedRules";
+ this.menuExportSelectedRules.Click += new System.EventHandler(this.menuExportSelectedRules_Click);
+ //
+ // toolStripSeparator3
+ //
+ resources.ApplyResources(this.toolStripSeparator3, "toolStripSeparator3");
+ this.toolStripSeparator3.Name = "toolStripSeparator3";
+ //
+ // menuMoveTop
+ //
+ resources.ApplyResources(this.menuMoveTop, "menuMoveTop");
+ this.menuMoveTop.Name = "menuMoveTop";
+ this.menuMoveTop.Click += new System.EventHandler(this.menuMoveTop_Click);
+ //
+ // menuMoveUp
+ //
+ resources.ApplyResources(this.menuMoveUp, "menuMoveUp");
+ this.menuMoveUp.Name = "menuMoveUp";
+ this.menuMoveUp.Click += new System.EventHandler(this.menuMoveUp_Click);
+ //
+ // menuMoveDown
+ //
+ resources.ApplyResources(this.menuMoveDown, "menuMoveDown");
+ this.menuMoveDown.Name = "menuMoveDown";
+ this.menuMoveDown.Click += new System.EventHandler(this.menuMoveDown_Click);
+ //
+ // menuMoveBottom
+ //
+ resources.ApplyResources(this.menuMoveBottom, "menuMoveBottom");
+ this.menuMoveBottom.Name = "menuMoveBottom";
+ this.menuMoveBottom.Click += new System.EventHandler(this.menuMoveBottom_Click);
+ //
+ // MenuItem1
+ //
+ resources.ApplyResources(this.MenuItem1, "MenuItem1");
+ this.MenuItem1.DropDown = this.cmsLv;
+ this.MenuItem1.Name = "MenuItem1";
+ //
+ // tabControl2
+ //
+ resources.ApplyResources(this.tabControl2, "tabControl2");
+ this.tabControl2.Controls.Add(this.tabPage2);
+ this.tabControl2.Name = "tabControl2";
+ this.tabControl2.SelectedIndex = 0;
+ //
+ // tabPage2
+ //
+ resources.ApplyResources(this.tabPage2, "tabPage2");
+ this.tabPage2.Controls.Add(this.lvRoutings);
+ this.tabPage2.Name = "tabPage2";
+ this.tabPage2.UseVisualStyleBackColor = true;
+ //
+ // menuServer
+ //
+ resources.ApplyResources(this.menuServer, "menuServer");
+ this.menuServer.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ this.MenuItem1,
+ this.toolStripMenuItem1});
+ this.menuServer.Name = "menuServer";
+ //
+ // toolStripMenuItem1
+ //
+ resources.ApplyResources(this.toolStripMenuItem1, "toolStripMenuItem1");
+ this.toolStripMenuItem1.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ this.menuImportRulesFromFile,
+ this.menuImportRulesFromClipboard,
+ this.menuImportRulesFromUrl});
+ this.toolStripMenuItem1.Name = "toolStripMenuItem1";
+ //
+ // menuImportRulesFromFile
+ //
+ resources.ApplyResources(this.menuImportRulesFromFile, "menuImportRulesFromFile");
+ this.menuImportRulesFromFile.Name = "menuImportRulesFromFile";
+ this.menuImportRulesFromFile.Click += new System.EventHandler(this.menuImportRulesFromFile_Click);
+ //
+ // menuImportRulesFromClipboard
+ //
+ resources.ApplyResources(this.menuImportRulesFromClipboard, "menuImportRulesFromClipboard");
+ this.menuImportRulesFromClipboard.Name = "menuImportRulesFromClipboard";
+ this.menuImportRulesFromClipboard.Click += new System.EventHandler(this.menuImportRulesFromClipboard_Click);
+ //
+ // menuImportRulesFromUrl
+ //
+ resources.ApplyResources(this.menuImportRulesFromUrl, "menuImportRulesFromUrl");
+ this.menuImportRulesFromUrl.Name = "menuImportRulesFromUrl";
+ this.menuImportRulesFromUrl.Click += new System.EventHandler(this.menuImportRulesFromUrl_Click);
+ //
+ // RoutingRuleSettingForm
+ //
+ resources.ApplyResources(this, "$this");
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.CancelButton = this.btnClose;
+ this.Controls.Add(this.tabControl2);
+ this.Controls.Add(this.panel1);
+ this.Controls.Add(this.panel2);
+ this.Controls.Add(this.menuServer);
+ this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
+ this.Name = "RoutingRuleSettingForm";
+ this.Load += new System.EventHandler(this.RoutingRuleSettingForm_Load);
+ this.panel2.ResumeLayout(false);
+ this.panel1.ResumeLayout(false);
+ this.panel1.PerformLayout();
+ this.cmsLv.ResumeLayout(false);
+ this.tabControl2.ResumeLayout(false);
+ this.tabPage2.ResumeLayout(false);
+ this.menuServer.ResumeLayout(false);
+ this.menuServer.PerformLayout();
+ this.ResumeLayout(false);
+ this.PerformLayout();
+
+ }
+
+ #endregion
+ private System.Windows.Forms.Button btnClose;
+ private System.Windows.Forms.Button btnOK;
+ private System.Windows.Forms.Panel panel2;
+ private System.Windows.Forms.Panel panel1;
+ private Base.ListViewFlickerFree lvRoutings;
+ private System.Windows.Forms.TabControl tabControl2;
+ private System.Windows.Forms.TabPage tabPage2;
+ private System.Windows.Forms.ContextMenuStrip cmsLv;
+ private System.Windows.Forms.ToolStripMenuItem menuRemove;
+ private System.Windows.Forms.ToolStripSeparator toolStripSeparator3;
+ private System.Windows.Forms.ToolStripMenuItem menuMoveTop;
+ private System.Windows.Forms.ToolStripMenuItem menuMoveUp;
+ private System.Windows.Forms.ToolStripMenuItem menuMoveDown;
+ private System.Windows.Forms.ToolStripMenuItem menuMoveBottom;
+ private System.Windows.Forms.ToolStripMenuItem menuSelectAll;
+ private System.Windows.Forms.ToolStripMenuItem menuAdd;
+ private System.Windows.Forms.MenuStrip menuServer;
+ private System.Windows.Forms.ToolStripMenuItem MenuItem1;
+ private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem1;
+ private System.Windows.Forms.ToolStripMenuItem menuImportRulesFromFile;
+ private System.Windows.Forms.ToolStripMenuItem menuImportRulesFromClipboard;
+ private System.Windows.Forms.ToolStripMenuItem menuExportSelectedRules;
+ private System.Windows.Forms.ToolStripMenuItem menuImportRulesFromUrl;
+ private System.Windows.Forms.TextBox txtRemarks;
+ private System.Windows.Forms.Label label2;
+ private System.Windows.Forms.TextBox txtUrl;
+ private System.Windows.Forms.Label label3;
+ private System.Windows.Forms.Label label1;
+ }
+}
\ No newline at end of file
diff --git a/v2rayN/v2rayN/Forms/RoutingRuleSettingForm.cs b/v2rayN/v2rayN/Forms/RoutingRuleSettingForm.cs
new file mode 100644
index 00000000..2c708f4a
--- /dev/null
+++ b/v2rayN/v2rayN/Forms/RoutingRuleSettingForm.cs
@@ -0,0 +1,334 @@
+using System;
+using System.Collections.Generic;
+using System.Windows.Forms;
+using v2rayN.Base;
+using v2rayN.Handler;
+using v2rayN.Mode;
+
+namespace v2rayN.Forms
+{
+ public partial class RoutingRuleSettingForm : BaseForm
+ {
+ public int EditIndex
+ {
+ get; set;
+ }
+ protected RoutingItem routingItem = null;
+
+ private List lvSelecteds = new List();
+ public RoutingRuleSettingForm()
+ {
+ InitializeComponent();
+ }
+
+ private void RoutingRuleSettingForm_Load(object sender, EventArgs e)
+ {
+ if (EditIndex >= 0)
+ {
+ routingItem = config.routings[EditIndex];
+ }
+ else
+ {
+ routingItem = new RoutingItem();
+ }
+ if (routingItem.rules == null)
+ {
+ routingItem.rules = new List();
+ }
+
+ txtRemarks.Text = routingItem.remarks ?? string.Empty;
+ txtUrl.Text = routingItem.url ?? string.Empty;
+
+ InitRoutingsView();
+ RefreshRoutingsView();
+ }
+
+ private void InitRoutingsView()
+ {
+ lvRoutings.BeginUpdate();
+ lvRoutings.Items.Clear();
+
+ lvRoutings.GridLines = true;
+ lvRoutings.FullRowSelect = true;
+ lvRoutings.View = View.Details;
+ lvRoutings.MultiSelect = true;
+ lvRoutings.HeaderStyle = ColumnHeaderStyle.Clickable;
+
+ lvRoutings.Columns.Add("", 30);
+ lvRoutings.Columns.Add("outboundTag", 80);
+ lvRoutings.Columns.Add("port", 80);
+ lvRoutings.Columns.Add("protocol", 100);
+ lvRoutings.Columns.Add("domain", 160);
+ lvRoutings.Columns.Add("ip", 160);
+
+ lvRoutings.EndUpdate();
+ }
+
+ private void RefreshRoutingsView()
+ {
+ lvRoutings.BeginUpdate();
+ lvRoutings.Items.Clear();
+
+ for (int k = 0; k < routingItem.rules.Count; k++)
+ {
+ var item = routingItem.rules[k];
+
+ ListViewItem lvItem = new ListViewItem("");
+ Utils.AddSubItem(lvItem, "outboundTag", item.outboundTag);
+ Utils.AddSubItem(lvItem, "port", item.port);
+ Utils.AddSubItem(lvItem, "protocol", Utils.List2String(item.protocol));
+ Utils.AddSubItem(lvItem, "domain", Utils.List2String(item.domain));
+ Utils.AddSubItem(lvItem, "ip", Utils.List2String(item.ip));
+
+ if (lvItem != null) lvRoutings.Items.Add(lvItem);
+ }
+ lvRoutings.EndUpdate();
+ }
+
+ private void btnOK_Click(object sender, EventArgs e)
+ {
+ routingItem.remarks = txtRemarks.Text.Trim();
+ routingItem.url = txtUrl.Text.Trim();
+
+ if (ConfigHandler.AddRoutingItem(ref config, routingItem, EditIndex) == 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 lvRoutings_DoubleClick(object sender, EventArgs e)
+ {
+ int index = GetLvSelectedIndex();
+ if (index < 0)
+ {
+ return;
+ }
+ var fm = new RoutingRuleSettingDetailsForm();
+ fm.rulesItem = routingItem.rules[index];
+ if (fm.ShowDialog() == DialogResult.OK)
+ {
+ RefreshRoutingsView();
+ }
+ }
+
+ private int GetLvSelectedIndex()
+ {
+ int index = -1;
+ lvSelecteds.Clear();
+ try
+ {
+ if (lvRoutings.SelectedIndices.Count <= 0)
+ {
+ UI.Show(UIRes.I18N("PleaseSelectRules"));
+ return index;
+ }
+
+ index = lvRoutings.SelectedIndices[0];
+ foreach (int i in lvRoutings.SelectedIndices)
+ {
+ lvSelecteds.Add(i);
+ }
+ return index;
+ }
+ catch
+ {
+ return index;
+ }
+ }
+
+ #region Edit function
+
+ private void menuMoveTop_Click(object sender, EventArgs e)
+ {
+ MoveRule(EMove.Top);
+ }
+
+ private void menuMoveUp_Click(object sender, EventArgs e)
+ {
+ MoveRule(EMove.Up);
+ }
+
+ private void menuMoveDown_Click(object sender, EventArgs e)
+ {
+ MoveRule(EMove.Down);
+ }
+
+ private void menuMoveBottom_Click(object sender, EventArgs e)
+ {
+ MoveRule(EMove.Bottom);
+ }
+
+ private void MoveRule(EMove eMove)
+ {
+ int index = GetLvSelectedIndex();
+ if (index < 0)
+ {
+ UI.Show(UIRes.I18N("PleaseSelectRules"));
+ return;
+ }
+ if (ConfigHandler.MoveRoutingRule(ref routingItem, index, eMove) == 0)
+ {
+ RefreshRoutingsView();
+ }
+ }
+ private void menuSelectAll_Click(object sender, EventArgs e)
+ {
+ foreach (ListViewItem item in lvRoutings.Items)
+ {
+ item.Selected = true;
+ }
+ }
+
+ private void menuAdd_Click(object sender, EventArgs e)
+ {
+ var fm = new RoutingRuleSettingDetailsForm();
+ fm.rulesItem = new RulesItem();
+ if (fm.ShowDialog() == DialogResult.OK)
+ {
+ routingItem.rules.Add(fm.rulesItem);
+ RefreshRoutingsView();
+ }
+ }
+
+ private void menuRemove_Click(object sender, EventArgs e)
+ {
+ int index = GetLvSelectedIndex();
+ if (index < 0)
+ {
+ return;
+ }
+ if (UI.ShowYesNo(UIRes.I18N("RemoveRules")) == DialogResult.No)
+ {
+ return;
+ }
+ for (int k = lvSelecteds.Count - 1; k >= 0; k--)
+ {
+ routingItem.rules.RemoveAt(index);
+ }
+ RefreshRoutingsView();
+ }
+ private void menuExportSelectedRules_Click(object sender, EventArgs e)
+ {
+ GetLvSelectedIndex();
+ var lst = new List();
+ foreach (int v in lvSelecteds)
+ {
+ lst.Add(routingItem.rules[v]);
+ }
+ if (lst.Count > 0)
+ {
+ Utils.SetClipboardData(Utils.ToJson(lst));
+ UI.Show(UIRes.I18N("OperationSuccess"));
+ }
+
+ }
+
+ private void lvRoutings_KeyDown(object sender, KeyEventArgs e)
+ {
+ if (e.Control)
+ {
+ switch (e.KeyCode)
+ {
+ case Keys.A:
+ menuSelectAll_Click(null, null);
+ break;
+ case Keys.C:
+ menuExportSelectedRules_Click(null, null);
+ break;
+ }
+ }
+ else
+ {
+ switch (e.KeyCode)
+ {
+ case Keys.Delete:
+ menuRemove_Click(null, null);
+ break;
+ case Keys.T:
+ menuMoveTop_Click(null, null);
+ break;
+ case Keys.B:
+ menuMoveBottom_Click(null, null);
+ break;
+ case Keys.U:
+ menuMoveUp_Click(null, null);
+ break;
+ case Keys.D:
+ menuMoveDown_Click(null, null);
+ break;
+ }
+ }
+ }
+ #endregion
+
+ #region preset rules
+
+ private void menuImportRulesFromFile_Click(object sender, EventArgs e)
+ {
+ OpenFileDialog fileDialog = new OpenFileDialog
+ {
+ Multiselect = false,
+ Filter = "Rules|*.json|All|*.*"
+ };
+ if (fileDialog.ShowDialog() != DialogResult.OK)
+ {
+ return;
+ }
+ string fileName = fileDialog.FileName;
+ if (Utils.IsNullOrEmpty(fileName))
+ {
+ return;
+ }
+ string result = Utils.LoadResource(fileName);
+ if (Utils.IsNullOrEmpty(result))
+ {
+ return;
+ }
+
+ if (ConfigHandler.AddBatchRoutingRules(ref routingItem, result) == 0)
+ {
+ RefreshRoutingsView();
+ UI.Show(UIRes.I18N("OperationSuccess"));
+ }
+ }
+
+ private void menuImportRulesFromClipboard_Click(object sender, EventArgs e)
+ {
+ string clipboardData = Utils.GetClipboardData();
+ if (ConfigHandler.AddBatchRoutingRules(ref routingItem, clipboardData) == 0)
+ {
+ RefreshRoutingsView();
+ UI.Show(UIRes.I18N("OperationSuccess"));
+ }
+ }
+ private void menuImportRulesFromUrl_Click(object sender, EventArgs e)
+ {
+ var url = txtUrl.Text.Trim();
+ if (Utils.IsNullOrEmpty(url))
+ {
+ UI.Show(UIRes.I18N("MsgNeedUrl"));
+ return;
+ }
+ DownloadHandle downloadHandle = new DownloadHandle();
+ string clipboardData = downloadHandle.WebDownloadStringSync(url);
+ if (ConfigHandler.AddBatchRoutingRules(ref routingItem, clipboardData) == 0)
+ {
+ RefreshRoutingsView();
+ UI.Show(UIRes.I18N("OperationSuccess"));
+ }
+ }
+
+ #endregion
+
+
+ }
+}
diff --git a/v2rayN/v2rayN/Forms/RoutingRuleSettingForm.resx b/v2rayN/v2rayN/Forms/RoutingRuleSettingForm.resx
new file mode 100644
index 00000000..8063cbb9
--- /dev/null
+++ b/v2rayN/v2rayN/Forms/RoutingRuleSettingForm.resx
@@ -0,0 +1,674 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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
+
+
+ System.Windows.Forms.TabControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+
+ 199, 6
+
+
+
+ Fill
+
+
+ menuImportRulesFromUrl
+
+
+ Down (D)
+
+
+ 762, 25
+
+
+
+ 32
+
+
+ 1
+
+
+ 47, 12
+
+
+ Move to bottom (B)
+
+
+ Bottom
+
+
+ Edit and Function
+
+
+ panel1
+
+
+ $this
+
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ NoControl
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 4
+
+
+ System.Windows.Forms.TabPage, 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
+
+
+ panel1
+
+
+ 15
+
+
+ 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
+
+
+ 4, 22
+
+
+ $this
+
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ Rule Settings
+
+
+ Remove selected
+
+
+ NoControl
+
+
+ tabPage2
+
+
+ 0
+
+
+ 202, 22
+
+
+ 475, 17
+
+
+ 75, 23
+
+
+ System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 33
+
+
+ MenuItem1
+
+
+ 0
+
+
+ 754, 362
+
+
+ 1
+
+
+ 568, 17
+
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 4
+
+
+ Fill
+
+
+ 0, 0
+
+
+ label1
+
+
+ 762, 60
+
+
+ Sub Url
+
+
+ 95, 21
+
+
+ panel1
+
+
+ menuServer
+
+
+ True
+
+
+ 120, 21
+
+
+ True
+
+
+ Import Rules From Sub Url
+
+
+ 2
+
+
+ menuSelectAll
+
+
+ menuMoveTop
+
+
+ 202, 22
+
+
+ cmsLv
+
+
+ 5
+
+
+ Add
+
+
+ 12
+
+
+ toolStripSeparator3
+
+
+ panel1
+
+
+ tabPage2
+
+
+ toolStripMenuItem1
+
+
+ menuMoveBottom
+
+
+ 0, 25
+
+
+ System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 18, 63
+
+
+ Import Rules From File
+
+
+ 202, 22
+
+
+ 762, 388
+
+
+ 1
+
+
+ RoutingRuleSettingForm
+
+
+ panel2
+
+
+ 202, 22
+
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Windows.Forms.MenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ btnClose
+
+
+ Up (U)
+
+
+ 203, 186
+
+
+ btnOK
+
+
+ 47, 12
+
+
+ 14
+
+
+ Import Rules
+
+
+ NoControl
+
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ $this
+
+
+ 3, 3
+
+
+ menuImportRulesFromClipboard
+
+
+ Import Rules From Clipboard
+
+
+ panel1
+
+
+ menuAdd
+
+
+ 0, 127
+
+
+ 247, 22
+
+
+ panel2
+
+
+ Move to top (T)
+
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 762, 102
+
+
+ txtUrl
+
+
+ 748, 356
+
+
+
+ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
+ LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkMAwAAAFFTeXN0
+ ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2Vu
+ PWIwM2Y1ZjdmMTFkNTBhM2EFAQAAACFTeXN0ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0l0ZW0HAAAA
+ BFRleHQKSW1hZ2VJbmRleAlCYWNrQ29sb3IHQ2hlY2tlZARGb250CUZvcmVDb2xvchdVc2VJdGVtU3R5
+ bGVGb3JTdWJJdGVtcwEABAAEBAAIFFN5c3RlbS5EcmF3aW5nLkNvbG9yAwAAAAETU3lzdGVtLkRyYXdp
+ bmcuRm9udAMAAAAUU3lzdGVtLkRyYXdpbmcuQ29sb3IDAAAAAQIAAAAGBAAAAAD/////Bfv///8UU3lz
+ dGVtLkRyYXdpbmcuQ29sb3IEAAAABG5hbWUFdmFsdWUKa25vd25Db2xvcgVzdGF0ZQEAAAAJBwcDAAAA
+ CgAAAAAAAAAAGAABAAAJBgAAAAH5////+////woAAAAAAAAAABoAAQABBQYAAAATU3lzdGVtLkRyYXdp
+ bmcuRm9udAQAAAAETmFtZQRTaXplBVN0eWxlBFVuaXQBAAQECxhTeXN0ZW0uRHJhd2luZy5Gb250U3R5
+ bGUDAAAAG1N5c3RlbS5EcmF3aW5nLkdyYXBoaWNzVW5pdAMAAAADAAAABggAAAAG5a6L5L2TAAAQQQX3
+ ////GFN5c3RlbS5EcmF3aW5nLkZvbnRTdHlsZQEAAAAHdmFsdWVfXwAIAwAAAAAAAAAF9v///xtTeXN0
+ ZW0uRHJhd2luZy5HcmFwaGljc1VuaXQBAAAAB3ZhbHVlX18ACAMAAAADAAAACw==
+
+
+
+ 34
+
+
+ &OK
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 247, 22
+
+
+ $this
+
+
+ 35
+
+
+ v2rayN.Base.ListViewFlickerFree, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
+
+
+ 18, 45
+
+
+ 31
+
+
+ 91, 45
+
+
+ 166, 21
+
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 0
+
+
+ 644, 48
+
+
+ menuMoveDown
+
+
+ 202, 22
+
+
+ Export Selected Rules
+
+
+ menuImportRulesFromFile
+
+
+ label3
+
+
+ System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 11
+
+
+ panel2
+
+
+ 7
+
+
+ panel1
+
+
+ v2rayN.Forms.BaseForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
+
+
+ tabControl2
+
+
+ Remarks
+
+
+ System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 3, 3, 3, 3
+
+
+ 0, 515
+
+
+ menuMoveUp
+
+
+ RuleList
+
+
+ Select All (Ctrl+A)
+
+
+ 53, 12
+
+
+ 6, 12
+
+
+ menuExportSelectedRules
+
+
+ Optional
+
+
+ 91, 13
+
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 247, 22
+
+
+ 202, 22
+
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ lvRoutings
+
+
+ 202, 22
+
+
+ label2
+
+
+ menuRemove
+
+
+ True
+
+
+ 18, 13
+
+
+ NoControl
+
+
+ 762, 575
+
+
+ System.Windows.Forms.ToolStripMenuItem, 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
+
+
+ 202, 22
+
+
+ 2
+
+
+ &Cancel
+
+
+ 3
+
+
+ NoControl
+
+
+ 4
+
+
+ 3
+
+
+ 75, 23
+
+
+ tabControl2
+
+
+ 0
+
+
+ System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ txtRemarks
+
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ True
+
+
+ 0
+
+
+ Top
+
+
+ True
+
+
+ 17, 17
+
+
+ zh-Hans
+
+
+ 139, 17
+
+
\ No newline at end of file
diff --git a/v2rayN/v2rayN/Forms/RoutingRuleSettingForm.zh-Hans.resx b/v2rayN/v2rayN/Forms/RoutingRuleSettingForm.zh-Hans.resx
new file mode 100644
index 00000000..d81b8ff0
--- /dev/null
+++ b/v2rayN/v2rayN/Forms/RoutingRuleSettingForm.zh-Hans.resx
@@ -0,0 +1,285 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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)
+
+
+
+ 0, 613
+
+
+ 785, 60
+
+
+ 确定(&O)
+
+
+ 785, 109
+
+
+ 29, 12
+
+
+ 可选
+
+
+ 101, 45
+
+
+ 83, 12
+
+
+ 订阅地址(Url)
+
+
+ 101, 13
+
+
+ 29, 12
+
+
+ 别名
+
+
+ 197, 186
+
+
+
+ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
+ LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkMAwAAAFFTeXN0
+ ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2Vu
+ PWIwM2Y1ZjdmMTFkNTBhM2EFAQAAACFTeXN0ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0l0ZW0HAAAA
+ BFRleHQKSW1hZ2VJbmRleAlCYWNrQ29sb3IHQ2hlY2tlZARGb250CUZvcmVDb2xvchdVc2VJdGVtU3R5
+ bGVGb3JTdWJJdGVtcwEABAAEBAAIFFN5c3RlbS5EcmF3aW5nLkNvbG9yAwAAAAETU3lzdGVtLkRyYXdp
+ bmcuRm9udAMAAAAUU3lzdGVtLkRyYXdpbmcuQ29sb3IDAAAAAQIAAAAGBAAAAAD/////Bfv///8UU3lz
+ dGVtLkRyYXdpbmcuQ29sb3IEAAAABG5hbWUFdmFsdWUKa25vd25Db2xvcgVzdGF0ZQEAAAAJBwcDAAAA
+ CgAAAAAAAAAAGAABAAAJBgAAAAH5////+////woAAAAAAAAAABoAAQABBQYAAAATU3lzdGVtLkRyYXdp
+ bmcuRm9udAQAAAAETmFtZQRTaXplBVN0eWxlBFVuaXQBAAQECxhTeXN0ZW0uRHJhd2luZy5Gb250U3R5
+ bGUDAAAAG1N5c3RlbS5EcmF3aW5nLkdyYXBoaWNzVW5pdAMAAAADAAAABggAAAAG5a6L5L2TAAAQQQX3
+ ////GFN5c3RlbS5EcmF3aW5nLkZvbnRTdHlsZQEAAAAHdmFsdWVfXwAIAwAAAAAAAAAF9v///xtTeXN0
+ ZW0uRHJhd2luZy5HcmFwaGljc1VuaXQBAAAAB3ZhbHVlX18ACAMAAAADAAAACw==
+
+
+
+ 771, 447
+
+
+ 196, 22
+
+
+ 添加规则
+
+
+ 196, 22
+
+
+ 移除所选规则
+
+
+ 196, 22
+
+
+ 全选
+
+
+ 196, 22
+
+
+ 导出所选规则至剪贴板
+
+
+ 193, 6
+
+
+ 196, 22
+
+
+ 上移至顶 (T)
+
+
+ 196, 22
+
+
+ 上移 (U)
+
+
+ 196, 22
+
+
+ 下移 (D)
+
+
+ 196, 22
+
+
+ 下移至底 (B)
+
+
+ 68, 21
+
+
+ 规则功能
+
+
+ 0, 134
+
+
+ 785, 479
+
+
+ 777, 453
+
+
+ 规则列表
+
+
+ 184, 22
+
+
+ 从文件中导入规则
+
+
+ 184, 22
+
+
+ 从剪贴板中导入规则
+
+
+ 189, 22
+
+
+ 从订阅Url中导入规则
+
+
+ 68, 21
+
+
+ 导入规则
+
+
+ 785, 25
+
+
+ 785, 673
+
+
+ 规则集设置
+
+
\ No newline at end of file
diff --git a/v2rayN/v2rayN/Forms/RoutingSettingForm.Designer.cs b/v2rayN/v2rayN/Forms/RoutingSettingForm.Designer.cs
index 0edd1e88..417a8283 100644
--- a/v2rayN/v2rayN/Forms/RoutingSettingForm.Designer.cs
+++ b/v2rayN/v2rayN/Forms/RoutingSettingForm.Designer.cs
@@ -41,21 +41,11 @@
this.menuAdd = new System.Windows.Forms.ToolStripMenuItem();
this.menuRemove = new System.Windows.Forms.ToolStripMenuItem();
this.menuSelectAll = new System.Windows.Forms.ToolStripMenuItem();
- this.menuExportSelectedRules = new System.Windows.Forms.ToolStripMenuItem();
- this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator();
- this.menuMoveTop = new System.Windows.Forms.ToolStripMenuItem();
- this.menuMoveUp = new System.Windows.Forms.ToolStripMenuItem();
- this.menuMoveDown = new System.Windows.Forms.ToolStripMenuItem();
- this.menuMoveBottom = new System.Windows.Forms.ToolStripMenuItem();
+ this.menuSetDefaultRouting = new System.Windows.Forms.ToolStripMenuItem();
this.MenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
this.tabControl2 = new System.Windows.Forms.TabControl();
this.tabPage2 = new System.Windows.Forms.TabPage();
this.menuServer = new System.Windows.Forms.MenuStrip();
- this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
- this.menuImportRulesFromPreset = new System.Windows.Forms.ToolStripMenuItem();
- this.menuImportRulesFromFile = new System.Windows.Forms.ToolStripMenuItem();
- this.menuImportRulesFromClipboard = new System.Windows.Forms.ToolStripMenuItem();
- this.menuImportRulesFromUrl = new System.Windows.Forms.ToolStripMenuItem();
this.panel2.SuspendLayout();
this.panel1.SuspendLayout();
this.cmsLv.SuspendLayout();
@@ -66,17 +56,17 @@
//
// 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);
//
// 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
@@ -88,9 +78,9 @@
//
// panel1
//
- resources.ApplyResources(this.panel1, "panel1");
this.panel1.Controls.Add(this.linkLabelRoutingDoc);
this.panel1.Controls.Add(this.cmbdomainStrategy);
+ resources.ApplyResources(this.panel1, "panel1");
this.panel1.Name = "panel1";
//
// linkLabelRoutingDoc
@@ -102,19 +92,19 @@
//
// 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")});
+ resources.ApplyResources(this.cmbdomainStrategy, "cmbdomainStrategy");
this.cmbdomainStrategy.Name = "cmbdomainStrategy";
//
// lvRoutings
//
- resources.ApplyResources(this.lvRoutings, "lvRoutings");
this.lvRoutings.ContextMenuStrip = this.cmsLv;
+ resources.ApplyResources(this.lvRoutings, "lvRoutings");
this.lvRoutings.FullRowSelect = true;
this.lvRoutings.GridLines = true;
this.lvRoutings.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable;
@@ -126,140 +116,70 @@
this.lvRoutings.UseCompatibleStateImageBehavior = false;
this.lvRoutings.View = System.Windows.Forms.View.Details;
this.lvRoutings.DoubleClick += new System.EventHandler(this.lvRoutings_DoubleClick);
- this.lvRoutings.KeyDown += new System.Windows.Forms.KeyEventHandler(this.lvRoutings_KeyDown);
//
// cmsLv
//
- resources.ApplyResources(this.cmsLv, "cmsLv");
this.cmsLv.ImageScalingSize = new System.Drawing.Size(20, 20);
this.cmsLv.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.menuAdd,
this.menuRemove,
this.menuSelectAll,
- this.menuExportSelectedRules,
- this.toolStripSeparator3,
- this.menuMoveTop,
- this.menuMoveUp,
- this.menuMoveDown,
- this.menuMoveBottom});
+ this.menuSetDefaultRouting});
this.cmsLv.Name = "cmsLv";
this.cmsLv.OwnerItem = this.MenuItem1;
+ resources.ApplyResources(this.cmsLv, "cmsLv");
//
// menuAdd
//
- resources.ApplyResources(this.menuAdd, "menuAdd");
this.menuAdd.Name = "menuAdd";
+ resources.ApplyResources(this.menuAdd, "menuAdd");
this.menuAdd.Click += new System.EventHandler(this.menuAdd_Click);
//
// menuRemove
//
- resources.ApplyResources(this.menuRemove, "menuRemove");
this.menuRemove.Name = "menuRemove";
+ resources.ApplyResources(this.menuRemove, "menuRemove");
this.menuRemove.Click += new System.EventHandler(this.menuRemove_Click);
//
// menuSelectAll
//
- resources.ApplyResources(this.menuSelectAll, "menuSelectAll");
this.menuSelectAll.Name = "menuSelectAll";
+ resources.ApplyResources(this.menuSelectAll, "menuSelectAll");
this.menuSelectAll.Click += new System.EventHandler(this.menuSelectAll_Click);
//
- // menuExportSelectedRules
+ // menuSetDefaultRouting
//
- resources.ApplyResources(this.menuExportSelectedRules, "menuExportSelectedRules");
- this.menuExportSelectedRules.Name = "menuExportSelectedRules";
- this.menuExportSelectedRules.Click += new System.EventHandler(this.menuExportSelectedRules_Click);
- //
- // toolStripSeparator3
- //
- resources.ApplyResources(this.toolStripSeparator3, "toolStripSeparator3");
- this.toolStripSeparator3.Name = "toolStripSeparator3";
- //
- // menuMoveTop
- //
- resources.ApplyResources(this.menuMoveTop, "menuMoveTop");
- this.menuMoveTop.Name = "menuMoveTop";
- this.menuMoveTop.Click += new System.EventHandler(this.menuMoveTop_Click);
- //
- // menuMoveUp
- //
- resources.ApplyResources(this.menuMoveUp, "menuMoveUp");
- this.menuMoveUp.Name = "menuMoveUp";
- this.menuMoveUp.Click += new System.EventHandler(this.menuMoveUp_Click);
- //
- // menuMoveDown
- //
- resources.ApplyResources(this.menuMoveDown, "menuMoveDown");
- this.menuMoveDown.Name = "menuMoveDown";
- this.menuMoveDown.Click += new System.EventHandler(this.menuMoveDown_Click);
- //
- // menuMoveBottom
- //
- resources.ApplyResources(this.menuMoveBottom, "menuMoveBottom");
- this.menuMoveBottom.Name = "menuMoveBottom";
- this.menuMoveBottom.Click += new System.EventHandler(this.menuMoveBottom_Click);
+ this.menuSetDefaultRouting.Name = "menuSetDefaultRouting";
+ resources.ApplyResources(this.menuSetDefaultRouting, "menuSetDefaultRouting");
+ this.menuSetDefaultRouting.Click += new System.EventHandler(this.menuSetDefaultRouting_Click);
//
// MenuItem1
//
- resources.ApplyResources(this.MenuItem1, "MenuItem1");
this.MenuItem1.DropDown = this.cmsLv;
this.MenuItem1.Name = "MenuItem1";
+ resources.ApplyResources(this.MenuItem1, "MenuItem1");
//
// tabControl2
//
- resources.ApplyResources(this.tabControl2, "tabControl2");
this.tabControl2.Controls.Add(this.tabPage2);
+ resources.ApplyResources(this.tabControl2, "tabControl2");
this.tabControl2.Name = "tabControl2";
this.tabControl2.SelectedIndex = 0;
//
// tabPage2
//
- resources.ApplyResources(this.tabPage2, "tabPage2");
this.tabPage2.Controls.Add(this.lvRoutings);
+ resources.ApplyResources(this.tabPage2, "tabPage2");
this.tabPage2.Name = "tabPage2";
this.tabPage2.UseVisualStyleBackColor = true;
//
// menuServer
//
- resources.ApplyResources(this.menuServer, "menuServer");
this.menuServer.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
- this.MenuItem1,
- this.toolStripMenuItem1});
+ this.MenuItem1});
+ resources.ApplyResources(this.menuServer, "menuServer");
this.menuServer.Name = "menuServer";
//
- // toolStripMenuItem1
- //
- resources.ApplyResources(this.toolStripMenuItem1, "toolStripMenuItem1");
- this.toolStripMenuItem1.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
- this.menuImportRulesFromPreset,
- this.menuImportRulesFromFile,
- this.menuImportRulesFromClipboard,
- this.menuImportRulesFromUrl});
- this.toolStripMenuItem1.Name = "toolStripMenuItem1";
- //
- // menuImportRulesFromPreset
- //
- resources.ApplyResources(this.menuImportRulesFromPreset, "menuImportRulesFromPreset");
- this.menuImportRulesFromPreset.Name = "menuImportRulesFromPreset";
- this.menuImportRulesFromPreset.Click += new System.EventHandler(this.menuImportRulesFromPreset_Click);
- //
- // menuImportRulesFromFile
- //
- resources.ApplyResources(this.menuImportRulesFromFile, "menuImportRulesFromFile");
- this.menuImportRulesFromFile.Name = "menuImportRulesFromFile";
- this.menuImportRulesFromFile.Click += new System.EventHandler(this.menuImportRulesFromFile_Click);
- //
- // menuImportRulesFromClipboard
- //
- resources.ApplyResources(this.menuImportRulesFromClipboard, "menuImportRulesFromClipboard");
- this.menuImportRulesFromClipboard.Name = "menuImportRulesFromClipboard";
- this.menuImportRulesFromClipboard.Click += new System.EventHandler(this.menuImportRulesFromClipboard_Click);
- //
- // menuImportRulesFromUrl
- //
- resources.ApplyResources(this.menuImportRulesFromUrl, "menuImportRulesFromUrl");
- this.menuImportRulesFromUrl.Name = "menuImportRulesFromUrl";
- this.menuImportRulesFromUrl.Click += new System.EventHandler(this.menuImportRulesFromUrl_Click);
- //
// RoutingSettingForm
//
resources.ApplyResources(this, "$this");
@@ -297,20 +217,10 @@
private System.Windows.Forms.TabPage tabPage2;
private System.Windows.Forms.ContextMenuStrip cmsLv;
private System.Windows.Forms.ToolStripMenuItem menuRemove;
- private System.Windows.Forms.ToolStripSeparator toolStripSeparator3;
- private System.Windows.Forms.ToolStripMenuItem menuMoveTop;
- private System.Windows.Forms.ToolStripMenuItem menuMoveUp;
- private System.Windows.Forms.ToolStripMenuItem menuMoveDown;
- private System.Windows.Forms.ToolStripMenuItem menuMoveBottom;
private System.Windows.Forms.ToolStripMenuItem menuSelectAll;
private System.Windows.Forms.ToolStripMenuItem menuAdd;
private System.Windows.Forms.MenuStrip menuServer;
private System.Windows.Forms.ToolStripMenuItem MenuItem1;
- private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem1;
- private System.Windows.Forms.ToolStripMenuItem menuImportRulesFromPreset;
- private System.Windows.Forms.ToolStripMenuItem menuImportRulesFromFile;
- private System.Windows.Forms.ToolStripMenuItem menuImportRulesFromClipboard;
- private System.Windows.Forms.ToolStripMenuItem menuExportSelectedRules;
- private System.Windows.Forms.ToolStripMenuItem menuImportRulesFromUrl;
+ private System.Windows.Forms.ToolStripMenuItem menuSetDefaultRouting;
}
}
\ No newline at end of file
diff --git a/v2rayN/v2rayN/Forms/RoutingSettingForm.cs b/v2rayN/v2rayN/Forms/RoutingSettingForm.cs
index a086d132..cd7ca2c4 100644
--- a/v2rayN/v2rayN/Forms/RoutingSettingForm.cs
+++ b/v2rayN/v2rayN/Forms/RoutingSettingForm.cs
@@ -17,11 +17,13 @@ namespace v2rayN.Forms
private void RoutingSettingForm_Load(object sender, EventArgs e)
{
+ ConfigHandler.InitBuiltinRouting(ref config);
+
cmbdomainStrategy.Text = config.domainStrategy;
- if (config.rules == null)
+ if (config.routings == null)
{
- config.rules = new List();
+ config.routings = new List();
}
InitRoutingsView();
RefreshRoutingsView();
@@ -39,12 +41,9 @@ namespace v2rayN.Forms
lvRoutings.HeaderStyle = ColumnHeaderStyle.Clickable;
lvRoutings.Columns.Add("", 30);
- lvRoutings.Columns.Add(UIRes.I18N("LvAlias"), 100);
- lvRoutings.Columns.Add("outboundTag", 80);
- lvRoutings.Columns.Add("port", 80);
- lvRoutings.Columns.Add("protocol", 100);
- lvRoutings.Columns.Add("domain", 160);
- lvRoutings.Columns.Add("ip", 160);
+ lvRoutings.Columns.Add(UIRes.I18N("LvAlias"), 200);
+ lvRoutings.Columns.Add(UIRes.I18N("LvUrl"), 240);
+ lvRoutings.Columns.Add(UIRes.I18N("LvCount"), 60);
lvRoutings.EndUpdate();
}
@@ -54,17 +53,20 @@ namespace v2rayN.Forms
lvRoutings.BeginUpdate();
lvRoutings.Items.Clear();
- for (int k = 0; k < config.rules.Count; k++)
+ for (int k = 0; k < config.routings.Count; k++)
{
- var item = config.rules[k];
+ string def = string.Empty;
+ if (config.routingIndex.Equals(k))
+ {
+ def = "√";
+ }
- ListViewItem lvItem = new ListViewItem("");
+ var item = config.routings[k];
+
+ ListViewItem lvItem = new ListViewItem(def);
Utils.AddSubItem(lvItem, "remarks", item.remarks);
- Utils.AddSubItem(lvItem, "outboundTag", item.outboundTag);
- Utils.AddSubItem(lvItem, "port", item.port);
- Utils.AddSubItem(lvItem, "protocol", Utils.List2String(item.protocol));
- Utils.AddSubItem(lvItem, "domain", Utils.List2String(item.domain));
- Utils.AddSubItem(lvItem, "ip", Utils.List2String(item.ip));
+ Utils.AddSubItem(lvItem, "url", item.url);
+ Utils.AddSubItem(lvItem, "count", item.rules.Count.ToString());
if (lvItem != null) lvRoutings.Items.Add(lvItem);
}
@@ -75,7 +77,7 @@ namespace v2rayN.Forms
{
config.domainStrategy = cmbdomainStrategy.Text;
- if (ConfigHandler.SaveRoutingRulesItem(ref config) == 0)
+ if (ConfigHandler.SaveRouting(ref config) == 0)
{
this.DialogResult = DialogResult.OK;
}
@@ -102,7 +104,7 @@ namespace v2rayN.Forms
{
return;
}
- var fm = new RoutingSettingDetailsForm();
+ var fm = new RoutingRuleSettingForm();
fm.EditIndex = index;
if (fm.ShowDialog() == DialogResult.OK)
{
@@ -137,39 +139,7 @@ namespace v2rayN.Forms
#region Edit function
- private void menuMoveTop_Click(object sender, EventArgs e)
- {
- MoveRule(EMove.Top);
- }
- private void menuMoveUp_Click(object sender, EventArgs e)
- {
- MoveRule(EMove.Up);
- }
-
- private void menuMoveDown_Click(object sender, EventArgs e)
- {
- MoveRule(EMove.Down);
- }
-
- private void menuMoveBottom_Click(object sender, EventArgs e)
- {
- MoveRule(EMove.Bottom);
- }
-
- private void MoveRule(EMove eMove)
- {
- int index = GetLvSelectedIndex();
- if (index < 0)
- {
- UI.Show(UIRes.I18N("PleaseSelectRules"));
- return;
- }
- if (ConfigHandler.MoveRoutingRule(ref config, index, eMove) == 0)
- {
- RefreshRoutingsView();
- }
- }
private void menuSelectAll_Click(object sender, EventArgs e)
{
foreach (ListViewItem item in lvRoutings.Items)
@@ -180,7 +150,7 @@ namespace v2rayN.Forms
private void menuAdd_Click(object sender, EventArgs e)
{
- var fm = new RoutingSettingDetailsForm();
+ var fm = new RoutingRuleSettingForm();
fm.EditIndex = -1;
if (fm.ShowDialog() == DialogResult.OK)
{
@@ -201,129 +171,32 @@ namespace v2rayN.Forms
}
for (int k = lvSelecteds.Count - 1; k >= 0; k--)
{
- config.rules.RemoveAt(index);
+ config.routings.RemoveAt(index);
}
RefreshRoutingsView();
}
- private void menuExportSelectedRules_Click(object sender, EventArgs e)
+ private void menuSetDefaultRouting_Click(object sender, EventArgs e)
{
- GetLvSelectedIndex();
- var lst = new List();
- foreach (int v in lvSelecteds)
- {
- lst.Add(config.rules[v]);
- }
- if (lst.Count > 0)
- {
- Utils.SetClipboardData(Utils.ToJson(lst));
- UI.Show(UIRes.I18N("OperationSuccess"));
- }
-
- }
-
- private void lvRoutings_KeyDown(object sender, KeyEventArgs e)
- {
- if (e.Control)
- {
- switch (e.KeyCode)
- {
- case Keys.A:
- menuSelectAll_Click(null, null);
- break;
- case Keys.C:
- menuExportSelectedRules_Click(null, null);
- break;
- }
- }
- else
- {
- switch (e.KeyCode)
- {
- case Keys.Delete:
- menuRemove_Click(null, null);
- break;
- case Keys.T:
- menuMoveTop_Click(null, null);
- break;
- case Keys.B:
- menuMoveBottom_Click(null, null);
- break;
- case Keys.U:
- menuMoveUp_Click(null, null);
- break;
- case Keys.D:
- menuMoveDown_Click(null, null);
- break;
- }
- }
- }
- #endregion
-
- #region preset rules
- private void menuImportRulesFromPreset_Click(object sender, EventArgs e)
- {
- var rules = Utils.GetEmbedText(Global.CustomRoutingFileName + "rules");
- if (ConfigHandler.AddBatchRoutingRules(ref config, rules) == 0)
- {
- RefreshRoutingsView();
- UI.Show(UIRes.I18N("OperationSuccess"));
- }
- }
-
- private void menuImportRulesFromFile_Click(object sender, EventArgs e)
- {
- OpenFileDialog fileDialog = new OpenFileDialog
- {
- Multiselect = false,
- Filter = "Rules|*.json|All|*.*"
- };
- if (fileDialog.ShowDialog() != DialogResult.OK)
+ int index = GetLvSelectedIndex();
+ if (index < 0)
{
return;
}
- string fileName = fileDialog.FileName;
- if (Utils.IsNullOrEmpty(fileName))
- {
- return;
- }
- string result = Utils.LoadResource(fileName);
- if (Utils.IsNullOrEmpty(result))
- {
- return;
- }
- if (ConfigHandler.AddBatchRoutingRules(ref config, result) == 0)
- {
- RefreshRoutingsView();
- UI.Show(UIRes.I18N("OperationSuccess"));
- }
+ SetDefaultRouting(index);
}
-
- private void menuImportRulesFromClipboard_Click(object sender, EventArgs e)
+ private int SetDefaultRouting(int index)
{
- string clipboardData = Utils.GetClipboardData();
- if (ConfigHandler.AddBatchRoutingRules(ref config, clipboardData) == 0)
+ if (index < 0)
+ {
+ UI.Show(UIRes.I18N("PleaseSelectServer"));
+ return -1;
+ }
+ if (ConfigHandler.SetDefaultRouting(ref config, index) == 0)
{
RefreshRoutingsView();
- UI.Show(UIRes.I18N("OperationSuccess"));
}
+ return 0;
}
- private void menuImportRulesFromUrl_Click(object sender, EventArgs e)
- {
- var fm = new RoutingSubSettingForm();
- if (fm.ShowDialog() != DialogResult.OK)
- {
- return;
- }
- var url = fm.Url;
- DownloadHandle downloadHandle = new DownloadHandle();
- string clipboardData = downloadHandle.WebDownloadStringSync(url);
- if (ConfigHandler.AddBatchRoutingRules(ref config, clipboardData) == 0)
- {
- RefreshRoutingsView();
- UI.Show(UIRes.I18N("OperationSuccess"));
- }
- }
-
#endregion
diff --git a/v2rayN/v2rayN/Forms/RoutingSettingForm.resx b/v2rayN/v2rayN/Forms/RoutingSettingForm.resx
index 5e7a353e..ec736bae 100644
--- a/v2rayN/v2rayN/Forms/RoutingSettingForm.resx
+++ b/v2rayN/v2rayN/Forms/RoutingSettingForm.resx
@@ -117,317 +117,218 @@
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
- System.Windows.Forms.TabControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- 3
-
-
- cmbdomainStrategy
-
-
- Fill
-
-
- Down (D)
-
-
-
- 765, 25
-
-
- Bottom
-
-
- Edit and Function
-
-
- panel1
-
-
- panel1
-
-
- $this
-
-
- 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
-
-
- 4
-
-
- System.Windows.Forms.ToolStripMenuItem, 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
-
-
-
- 15
-
-
- 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
-
-
- 4, 22
-
-
- 6, 21
-
-
- $this
-
-
+
NoControl
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 568, 17
-
- Routing Settings
+
+ 75, 23
-
- Remove selected
+
+
+ 4
-
- tabPage2
-
-
- menuExportSelectedRules
-
-
- 202, 22
-
-
- 475, 17
-
-
- Domain strategy
-
-
- System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- MenuItem1
-
-
- 0
-
-
- 757, 511
-
-
- 1
-
-
- 6, 12
-
-
- IPOnDemand
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- Fill
-
-
- Export Selected Rules
-
-
- 0, 0
-
-
- 765, 60
-
-
- 0, 25
-
-
- 95, 21
-
-
- menuServer
-
-
- Import Rules
-
-
- 120, 21
-
-
- 19
-
-
- Import Rules From Url
-
-
- System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- 2
-
-
- menuSelectAll
-
-
- menuMoveTop
-
-
- 202, 22
-
-
- cmsLv
-
-
- 5
-
-
- menuMoveDown
-
-
- 165, 20
-
-
- menuImportRulesFromFile
-
-
- Add
-
-
- 247, 22
-
-
- toolStripSeparator3
-
-
- True
-
-
- tabPage2
-
-
- toolStripMenuItem1
-
-
- menuMoveBottom
-
-
- menuImportRulesFromUrl
-
-
- 95, 12
-
-
- Import Rules From File
-
-
- 202, 22
-
-
- 765, 537
-
-
- 1
-
-
- RoutingSettingForm
-
-
- panel2
-
-
- Import Rules From Preset
-
-
- 202, 22
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- System.Windows.Forms.MenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+ &Cancel
btnClose
-
- Up (U)
-
-
- 12
-
-
- 203, 186
-
-
- btnOK
-
-
- 116, 17
-
-
- 14
-
-
- NoControl
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- $this
-
-
- 3, 3
-
-
- menuImportRulesFromClipboard
-
-
- Import Rules From Clipboard
-
-
- menuAdd
-
-
- 0, 76
-
-
- IPIfNonMatch
-
-
- 247, 22
+
+ System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
panel2
-
- Move to top (T)
+
+ 0
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+ 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
+
+
+ 1
+
+
+ Bottom
+
+
+ 0, 613
+
+
+ 765, 60
+
+
+ 7
+
+
+ panel2
+
+
+ System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ $this
+
+
+ 3
+
+
+ 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
+
+
+ 0
+
+
+ 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
+
+
+ 1
+
+
+ Top
+
+
+ 0, 25
765, 51
-
- 751, 505
+
+ 11
+
+
+ panel1
+
+
+ System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ $this
+
+
+ 2
+
+
+ 17, 17
+
+
+ 194, 22
+
+
+ Add
+
+
+ 194, 22
+
+
+ Remove selected
- 202, 22
+ 194, 22
+
+
+ Select All (Ctrl+A)
+
+
+ 194, 22
+
+
+ Set as active routing
+
+
+ 120, 21
+
+
+ Edit and Function
+
+
+ 195, 114
+
+
+ cmsLv
+
+
+ System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ Fill
@@ -446,166 +347,148 @@
ZW0uRHJhd2luZy5HcmFwaGljc1VuaXQBAAAAB3ZhbHVlX18ACAMAAAADAAAACw==
-
- menuImportRulesFromPreset
+
+ 3, 3
-
- &OK
+
+ 751, 505
-
- 0, 0, 0, 0
-
-
- 247, 22
-
-
- $this
-
-
- v2rayN.Base.ListViewFlickerFree, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
-
-
- 16
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- AsIs
-
-
- 202, 22
-
-
- System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- Move to bottom (B)
-
-
- System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- 11
-
-
- panel2
-
-
- 7
-
-
- 0
-
-
- v2rayN.Forms.BaseForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
-
-
- tabControl2
-
-
- System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- 3, 3, 3, 3
-
-
- 0, 613
-
-
- menuMoveUp
-
-
- RuleList
-
-
- Select All (Ctrl+A)
-
-
- &Cancel
-
-
- 199, 6
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- 4
-
-
- panel1
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- 247, 22
-
-
- 202, 22
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+ 12
lvRoutings
-
- linkLabelRoutingDoc
+
+ v2rayN.Base.ListViewFlickerFree, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
-
- 202, 22
+
+ tabPage2
-
- menuRemove
+
+ 0
-
- NoControl
+
+ 4, 22
-
- 765, 673
+
+ 3, 3, 3, 3
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- 75, 23
-
-
- 1
+
+ 757, 511
0
-
- 75, 23
+
+ RuleSetList
-
+
+ tabPage2
+
+
+ System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
tabControl2
0
-
- System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+ Fill
-
- 568, 17
+
+ 0, 76
-
- 0
+
+ 765, 537
-
- Top
+
+ 14
+
+
+ tabControl2
+
+
+ System.Windows.Forms.TabControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ $this
+
+
+ 1
+
+
+ 139, 17
+
+
+ 0, 0
+
+
+ 765, 25
+
+
+ 15
+
+
+ menuServer
+
+
+ System.Windows.Forms.MenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ $this
+
+
+ 4
True
-
- 17, 17
-
-
- 139, 17
-
+
+ 6, 12
+
+
+ 765, 673
+
+
+ Routing Settings
+
+
+ menuAdd
+
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ menuRemove
+
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ menuSelectAll
+
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ menuSetDefaultRouting
+
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ MenuItem1
+
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 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
index 7e6ffcf9..3efb9922 100644
--- a/v2rayN/v2rayN/Forms/RoutingSettingForm.zh-Hans.resx
+++ b/v2rayN/v2rayN/Forms/RoutingSettingForm.zh-Hans.resx
@@ -124,8 +124,11 @@
确定(&O)
+
+ 0, 474
+
- 785, 60
+ 726, 60
77, 12
@@ -134,67 +137,40 @@
域名解析策略
- 785, 51
+ 726, 51
- 196, 22
+ 148, 22
- 添加规则
+ 添加规则集
- 196, 22
+ 148, 22
移除所选规则
- 196, 22
+ 148, 22
全选
-
- 196, 22
+
+ 148, 22
-
- 导出所选规则至剪贴板
-
-
- 193, 6
-
-
- 196, 22
-
-
- 上移至顶 (T)
-
-
- 196, 22
-
-
- 上移 (U)
-
-
- 196, 22
-
-
- 下移 (D)
-
-
- 196, 22
-
-
- 下移至底 (B)
+
+ 设为活动路由
- 92, 21
+ 104, 21
- 路由规则功能
+ 路由规则集功能
- 197, 186
+ 149, 92
@@ -214,52 +190,22 @@
- 771, 505
+ 712, 366
- 777, 511
+ 718, 372
- 路由规则列表
+ 路由规则集列表
- 785, 537
-
-
- 184, 22
-
-
- 从预设中导入规则
-
-
- 184, 22
-
-
- 从文件中导入规则
-
-
- 184, 22
-
-
- 从剪贴板中导入规则
-
-
- 184, 22
-
-
- 从Url中导入规则
-
-
- 92, 21
-
-
- 导入路由规则
+ 726, 398
- 785, 25
+ 726, 25
- 785, 673
+ 726, 534
路由设置
diff --git a/v2rayN/v2rayN/Forms/SubSettingControl.resx b/v2rayN/v2rayN/Forms/SubSettingControl.resx
index fdeefb50..96c09774 100644
--- a/v2rayN/v2rayN/Forms/SubSettingControl.resx
+++ b/v2rayN/v2rayN/Forms/SubSettingControl.resx
@@ -131,9 +131,6 @@
txtUrl
-
- 6
-
picQRCode
@@ -180,6 +177,9 @@
83, 12
+
+ System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
232, 21
@@ -237,6 +237,9 @@
5
+
+ System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
47, 12
@@ -258,8 +261,8 @@
NoControl
-
- 0, 110
+
+ 619, 310
75, 23
@@ -273,9 +276,6 @@
25
-
- 10
-
23
@@ -309,6 +309,9 @@
label2
+
+ System.Windows.Forms.UserControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
619, 110
@@ -321,8 +324,8 @@
NoControl
-
- 619, 310
+
+ 0, 110
11
@@ -345,9 +348,6 @@
75, 23
-
- grbMain
-
1
@@ -357,17 +357,17 @@
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
+
+ 10
-
- System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+ grbMain
525, 21
-
- System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+ 6
System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
@@ -381,7 +381,4 @@
True
-
- zh-Hans
-
\ No newline at end of file
diff --git a/v2rayN/v2rayN/Handler/ConfigHandler.cs b/v2rayN/v2rayN/Handler/ConfigHandler.cs
index 5f905f84..2287c34d 100644
--- a/v2rayN/v2rayN/Handler/ConfigHandler.cs
+++ b/v2rayN/v2rayN/Handler/ConfigHandler.cs
@@ -16,6 +16,8 @@ namespace v2rayN.Handler
{
private static string configRes = Global.ConfigFileName;
+ #region ConfigHandler
+
///
/// 载入配置文件
///
@@ -87,10 +89,7 @@ namespace v2rayN.Handler
{
config.domainStrategy = "IPIfNonMatch";
}
- if (config.rules == null)
- {
- config.rules = new List();
- }
+
//kcp
if (config.kcpItem == null)
{
@@ -136,10 +135,6 @@ namespace v2rayN.Handler
{
config.subItem = new List();
}
- if (config.ruleSubItem == null)
- {
- config.ruleSubItem = new List();
- }
if (config == null
|| config.index < 0
@@ -164,6 +159,10 @@ namespace v2rayN.Handler
return 0;
}
+ #endregion
+
+ #region Server
+
///
/// 添加服务器或编辑
///
@@ -861,38 +860,6 @@ namespace v2rayN.Handler
return 0;
}
- public static int AddformMainLvColWidth(ref Config config, string name, int width)
- {
- if (config.uiItem.mainLvColWidth == null)
- {
- config.uiItem.mainLvColWidth = new Dictionary();
- }
- if (config.uiItem.mainLvColWidth.ContainsKey(name))
- {
- config.uiItem.mainLvColWidth[name] = width;
- }
- else
- {
- config.uiItem.mainLvColWidth.Add(name, width);
- }
- return 0;
- }
- public static int GetformMainLvColWidth(ref Config config, string name, int width)
- {
- if (config.uiItem.mainLvColWidth == null)
- {
- config.uiItem.mainLvColWidth = new Dictionary();
- }
- if (config.uiItem.mainLvColWidth.ContainsKey(name))
- {
- return config.uiItem.mainLvColWidth[name];
- }
- else
- {
- return width;
- }
- }
-
public static int SortServers(ref Config config, EServerColName name, bool asc)
{
if (config.vmess.Count <= 0)
@@ -984,47 +951,78 @@ namespace v2rayN.Handler
return 0;
}
+ #endregion
- ///
- /// SaveRoutingItem
- ///
- ///
- ///
- public static int SaveRoutingRulesItem(ref Config config)
+ #region UI
+
+ public static int AddformMainLvColWidth(ref Config config, string name, int width)
{
- if (config.rules == null)
+ if (config.uiItem.mainLvColWidth == null)
+ {
+ config.uiItem.mainLvColWidth = new Dictionary();
+ }
+ if (config.uiItem.mainLvColWidth.ContainsKey(name))
+ {
+ config.uiItem.mainLvColWidth[name] = width;
+ }
+ else
+ {
+ config.uiItem.mainLvColWidth.Add(name, width);
+ }
+ return 0;
+ }
+ public static int GetformMainLvColWidth(ref Config config, string name, int width)
+ {
+ if (config.uiItem.mainLvColWidth == null)
+ {
+ config.uiItem.mainLvColWidth = new Dictionary();
+ }
+ if (config.uiItem.mainLvColWidth.ContainsKey(name))
+ {
+ return config.uiItem.mainLvColWidth[name];
+ }
+ else
+ {
+ return width;
+ }
+ }
+
+ #endregion
+
+ #region Routing
+
+ public static int SaveRouting(ref Config config)
+ {
+ if (config.routings == null)
{
return -1;
}
- foreach (RulesItem sub in config.rules)
+ foreach (var item in config.routings)
{
}
+ if (config.routingIndex >= config.routings.Count)
+ {
+ config.routingIndex = 0;
+ }
+
Global.reloadV2ray = true;
ToJsonFile(config);
return 0;
}
- ///
- /// AddRoutingRulesItem
- ///
- ///
- ///
- ///
- ///
- public static int AddRoutingRule(ref Config config, RulesItem item, int index)
+
+ public static int AddRoutingItem(ref Config config, RoutingItem item, int index)
{
if (index >= 0)
{
- config.rules[index] = item;
+ config.routings[index] = item;
}
else
{
- config.rules.Add(item);
+ config.routings.Add(item);
}
- Global.reloadV2ray = true;
-
ToJsonFile(config);
return 0;
@@ -1036,7 +1034,7 @@ namespace v2rayN.Handler
///
///
///
- public static int AddBatchRoutingRules(ref Config config, string clipboardData)
+ public static int AddBatchRoutingRules(ref RoutingItem routingItem, string clipboardData)
{
if (Utils.IsNullOrEmpty(clipboardData))
{
@@ -1049,30 +1047,25 @@ namespace v2rayN.Handler
return -1;
}
- config.rules.Clear();
+ routingItem.rules.Clear();
foreach (var item in lstRules)
{
- config.rules.Add(item);
+ routingItem.rules.Add(item);
}
-
- Global.reloadV2ray = true;
-
- ToJsonFile(config);
-
return 0;
}
///
/// MoveRoutingRule
///
- ///
+ ///
///
///
///
- public static int MoveRoutingRule(ref Config config, int index, EMove eMove)
+ public static int MoveRoutingRule(ref RoutingItem routingItem, int index, EMove eMove)
{
- int count = config.rules.Count;
- if (index < 0 || index > config.rules.Count - 1)
+ int count = routingItem.rules.Count;
+ if (index < 0 || index > routingItem.rules.Count - 1)
{
return -1;
}
@@ -1084,9 +1077,9 @@ namespace v2rayN.Handler
{
return 0;
}
- var item = Utils.DeepCopy(config.rules[index]);
- config.rules.RemoveAt(index);
- config.rules.Insert(0, item);
+ var item = Utils.DeepCopy(routingItem.rules[index]);
+ routingItem.rules.RemoveAt(index);
+ routingItem.rules.Insert(0, item);
break;
}
@@ -1096,9 +1089,9 @@ namespace v2rayN.Handler
{
return 0;
}
- var item = Utils.DeepCopy(config.rules[index]);
- config.rules.RemoveAt(index);
- config.rules.Insert(index - 1, item);
+ var item = Utils.DeepCopy(routingItem.rules[index]);
+ routingItem.rules.RemoveAt(index);
+ routingItem.rules.Insert(index - 1, item);
break;
}
@@ -1109,9 +1102,9 @@ namespace v2rayN.Handler
{
return 0;
}
- var item = Utils.DeepCopy(config.rules[index]);
- config.rules.RemoveAt(index);
- config.rules.Insert(index + 1, item);
+ var item = Utils.DeepCopy(routingItem.rules[index]);
+ routingItem.rules.RemoveAt(index);
+ routingItem.rules.Insert(index + 1, item);
break;
}
@@ -1121,14 +1114,30 @@ namespace v2rayN.Handler
{
return 0;
}
- var item = Utils.DeepCopy(config.rules[index]);
- config.rules.RemoveAt(index);
- config.rules.Add(item);
+ var item = Utils.DeepCopy(routingItem.rules[index]);
+ routingItem.rules.RemoveAt(index);
+ routingItem.rules.Add(item);
break;
}
}
+ return 0;
+ }
+
+ public static int SetDefaultRouting(ref Config config, int index)
+ {
+ if (index < 0 || index > config.routings.Count - 1)
+ {
+ return -1;
+ }
+
+ ////和现在相同
+ //if (config.index.Equals(index))
+ //{
+ // return -1;
+ //}
+ config.routingIndex = index;
Global.reloadV2ray = true;
ToJsonFile(config);
@@ -1136,28 +1145,39 @@ namespace v2rayN.Handler
return 0;
}
- ///
- /// SaveRuleSubItem
- ///
- ///
- ///
- public static int SaveRuleSubItem(ref Config config)
+ public static int InitBuiltinRouting(ref Config config)
{
- if (config.ruleSubItem == null || config.ruleSubItem.Count <= 0)
+ if (config.routings == null)
{
- return -1;
+ config.routings = new List();
}
+ if (config.routings.Count > 0)
+ {
+ return 0;
+ }
+ config.routingIndex = 0;
- foreach (SubItem sub in config.ruleSubItem)
- {
- if (Utils.IsNullOrEmpty(sub.id))
- {
- sub.id = Utils.GetGUID();
- }
- }
+ //Global
+ var item1 = new RoutingItem();
+ item1.remarks = "全局(Global)";
+ item1.url = string.Empty;
+ item1.rules = new List();
+ string result = Utils.GetEmbedText(Global.CustomRoutingFileName + "global");
+ AddBatchRoutingRules(ref item1, result);
+ config.routings.Add(item1);
+
+ //Bypass the mainland
+ var item2 = new RoutingItem();
+ item2.remarks = "绕过大陆(Whitelist)";
+ item2.url = string.Empty;
+ item2.rules = new List();
+ string result2 = Utils.GetEmbedText(Global.CustomRoutingFileName + "white");
+ AddBatchRoutingRules(ref item2, result2);
+ config.routings.Add(item2);
ToJsonFile(config);
return 0;
}
+ #endregion
}
}
diff --git a/v2rayN/v2rayN/Handler/MainFormHandler.cs b/v2rayN/v2rayN/Handler/MainFormHandler.cs
index 95142bb5..7f21abe6 100644
--- a/v2rayN/v2rayN/Handler/MainFormHandler.cs
+++ b/v2rayN/v2rayN/Handler/MainFormHandler.cs
@@ -1,6 +1,7 @@
using System;
using System.Drawing;
using System.Windows.Forms;
+using v2rayN.Base;
using v2rayN.Mode;
namespace v2rayN.Handler
@@ -147,6 +148,22 @@ namespace v2rayN.Handler
}
}
+ public int AddBatchServers(Config config, string clipboardData, string subid = "")
+ {
+ int counter;
+ int _Add()
+ {
+ return ConfigHandler.AddBatchServers(ref config, clipboardData, subid);
+ }
+ counter = _Add();
+ if (counter < 1)
+ {
+ clipboardData = Utils.Base64Decode(clipboardData);
+ counter = _Add();
+ }
+ return counter;
+ }
+
}
}
diff --git a/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs b/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs
index 43ef1752..53a0b8c3 100644
--- a/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs
+++ b/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs
@@ -190,9 +190,12 @@ namespace v2rayN.Handler
{
v2rayConfig.routing.domainStrategy = config.domainStrategy;
- foreach (var item in config.rules)
+ if (config.routings != null && config.routingIndex < config.routings.Count)
{
- routingUserRule(item, ref v2rayConfig);
+ foreach (var item in config.routings[config.routingIndex].rules)
+ {
+ routingUserRule(item, ref v2rayConfig);
+ }
}
}
}
diff --git a/v2rayN/v2rayN/Mode/Config.cs b/v2rayN/v2rayN/Mode/Config.cs
index da2983bd..552b35fb 100644
--- a/v2rayN/v2rayN/Mode/Config.cs
+++ b/v2rayN/v2rayN/Mode/Config.cs
@@ -60,13 +60,6 @@ namespace v2rayN.Mode
get; set;
}
- ///
- /// 域名解析策略
- ///
- public string domainStrategy
- {
- get; set;
- }
///
/// KcpItem
///
@@ -161,15 +154,22 @@ namespace v2rayN.Mode
{
get; set;
}
- public List rules
+ ///
+ /// 域名解析策略
+ ///
+ public string domainStrategy
{
get; set;
}
- public List ruleSubItem
+ public int routingIndex
{
get; set;
}
-
+ public List routings
+ {
+ get; set;
+ }
+
public ECoreType coreType
{
get; set;
diff --git a/v2rayN/v2rayN/Mode/RoutingItem.cs b/v2rayN/v2rayN/Mode/RoutingItem.cs
new file mode 100644
index 00000000..a033c227
--- /dev/null
+++ b/v2rayN/v2rayN/Mode/RoutingItem.cs
@@ -0,0 +1,26 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace v2rayN.Mode
+{
+ public class RoutingItem
+ {
+ public string remarks
+ {
+ get; set;
+ }
+ public string url
+ {
+ get; set;
+ }
+ public List rules
+ {
+ get; set;
+ }
+ public bool enabled { get; set; } = true;
+
+ }
+}
diff --git a/v2rayN/v2rayN/Mode/RulesItem.cs b/v2rayN/v2rayN/Mode/RulesItem.cs
index bb3a85e4..738a889f 100644
--- a/v2rayN/v2rayN/Mode/RulesItem.cs
+++ b/v2rayN/v2rayN/Mode/RulesItem.cs
@@ -6,8 +6,6 @@ namespace v2rayN.Mode
[Serializable]
public class RulesItem
{
- public string remarks { get; set; }
-
public string type { get; set; }
public string port { get; set; }
diff --git a/v2rayN/v2rayN/Properties/AssemblyInfo.cs b/v2rayN/v2rayN/Properties/AssemblyInfo.cs
index 1b7c1162..9d36a669 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("4.6")]
+[assembly: AssemblyFileVersion("4.7")]
diff --git a/v2rayN/v2rayN/Resx/ResUI.Designer.cs b/v2rayN/v2rayN/Resx/ResUI.Designer.cs
index a92b8267..df456572 100644
--- a/v2rayN/v2rayN/Resx/ResUI.Designer.cs
+++ b/v2rayN/v2rayN/Resx/ResUI.Designer.cs
@@ -19,7 +19,7 @@ namespace v2rayN.Resx {
// 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。
// 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen
// (以 /str 作为命令选项),或重新生成 VS 项目。
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class ResUI {
@@ -312,6 +312,15 @@ namespace v2rayN.Resx {
}
}
+ ///
+ /// 查找类似 Count 的本地化字符串。
+ ///
+ internal static string LvCount {
+ get {
+ return ResourceManager.GetString("LvCount", resourceCulture);
+ }
+ }
+
///
/// 查找类似 Security 的本地化字符串。
///
@@ -330,6 +339,15 @@ namespace v2rayN.Resx {
}
}
+ ///
+ /// 查找类似 remarks 的本地化字符串。
+ ///
+ internal static string LvRemarks {
+ get {
+ return ResourceManager.GetString("LvRemarks", resourceCulture);
+ }
+ }
+
///
/// 查找类似 Type 的本地化字符串。
///
@@ -402,6 +420,15 @@ namespace v2rayN.Resx {
}
}
+ ///
+ /// 查找类似 Url 的本地化字符串。
+ ///
+ internal static string LvUrl {
+ get {
+ return ResourceManager.GetString("LvUrl", resourceCulture);
+ }
+ }
+
///
/// 查找类似 MediumFresh 的本地化字符串。
///
@@ -447,6 +474,15 @@ namespace v2rayN.Resx {
}
}
+ ///
+ /// 查找类似 Please fill in the address (Url) 的本地化字符串。
+ ///
+ internal static string MsgNeedUrl {
+ get {
+ return ResourceManager.GetString("MsgNeedUrl", resourceCulture);
+ }
+ }
+
///
/// 查找类似 No valid subscriptions set 的本地化字符串。
///
diff --git a/v2rayN/v2rayN/Resx/ResUI.resx b/v2rayN/v2rayN/Resx/ResUI.resx
index 21747ecc..5691c92f 100644
--- a/v2rayN/v2rayN/Resx/ResUI.resx
+++ b/v2rayN/v2rayN/Resx/ResUI.resx
@@ -373,4 +373,16 @@
{0},One of the required.
+
+ remarks
+
+
+ Url
+
+
+ Count
+
+
+ Please fill in the address (Url)
+
\ No newline at end of file
diff --git a/v2rayN/v2rayN/Resx/ResUI.zh-Hans.resx b/v2rayN/v2rayN/Resx/ResUI.zh-Hans.resx
index 59b4f18b..fa947463 100644
--- a/v2rayN/v2rayN/Resx/ResUI.zh-Hans.resx
+++ b/v2rayN/v2rayN/Resx/ResUI.zh-Hans.resx
@@ -373,4 +373,16 @@
{0},必填其中一项.
+
+ 别名
+
+
+ 地址(Url)
+
+
+ 数量
+
+
+ 请填写地址(Url)
+
\ No newline at end of file
diff --git a/v2rayN/v2rayN/Sample/custom_routing_global b/v2rayN/v2rayN/Sample/custom_routing_global
new file mode 100644
index 00000000..169d8156
--- /dev/null
+++ b/v2rayN/v2rayN/Sample/custom_routing_global
@@ -0,0 +1,6 @@
+[
+ {
+ "port": "0-65535",
+ "outboundTag": "proxy"
+ }
+]
\ No newline at end of file
diff --git a/v2rayN/v2rayN/Sample/custom_routing_white b/v2rayN/v2rayN/Sample/custom_routing_white
new file mode 100644
index 00000000..7ee814b3
--- /dev/null
+++ b/v2rayN/v2rayN/Sample/custom_routing_white
@@ -0,0 +1,24 @@
+[{
+ "outboundTag": "block",
+ "domain": [
+ "geosite:category-ads-all"
+ ]
+ },
+ {
+ "outboundTag": "direct",
+ "domain": [
+ "geosite:cn"
+ ]
+ },
+ {
+ "outboundTag": "direct",
+ "ip": [
+ "geoip:private",
+ "geoip:cn"
+ ]
+ },
+ {
+ "port": "0-65535",
+ "outboundTag": "proxy"
+ }
+]
\ No newline at end of file
diff --git a/v2rayN/v2rayN/v2rayN.csproj b/v2rayN/v2rayN/v2rayN.csproj
index 5776ed1f..c38e2c89 100644
--- a/v2rayN/v2rayN/v2rayN.csproj
+++ b/v2rayN/v2rayN/v2rayN.csproj
@@ -125,17 +125,17 @@
BaseServerForm.cs
-
+
Form
-
- RoutingSettingDetailsForm.cs
+
+ RoutingRuleSettingDetailsForm.cs
-
+
Form
-
- RoutingSubSettingForm.cs
+
+ RoutingRuleSettingForm.cs
@@ -196,6 +196,7 @@
+
@@ -307,19 +308,20 @@
QRCodeControl.cs
Designer
-
- RoutingSettingDetailsForm.cs
+
+ RoutingRuleSettingDetailsForm.cs
Designer
-
- RoutingSettingDetailsForm.cs
+
+ RoutingRuleSettingDetailsForm.cs
Designer
-
- RoutingSubSettingForm.cs
+
+ RoutingRuleSettingForm.cs
+ Designer
-
- RoutingSubSettingForm.cs
+
+ RoutingRuleSettingForm.cs
SubSettingControl.cs
@@ -384,7 +386,8 @@
-
+
+