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 @@ - + +