diff --git a/v2rayN/v2rayN/Forms/MainForm.Designer.cs b/v2rayN/v2rayN/Forms/MainForm.Designer.cs
index 15a2db24..ea1413a1 100644
--- a/v2rayN/v2rayN/Forms/MainForm.Designer.cs
+++ b/v2rayN/v2rayN/Forms/MainForm.Designer.cs
@@ -129,6 +129,9 @@
this.tsbPromotion = new System.Windows.Forms.ToolStripButton();
this.toolStripSeparator11 = new System.Windows.Forms.ToolStripSeparator();
this.tsbClose = new System.Windows.Forms.ToolStripButton();
+ this.tsbCheckUpdateGeoSite = new System.Windows.Forms.ToolStripMenuItem();
+ this.tsbCheckUpdateGeoIP = new System.Windows.Forms.ToolStripMenuItem();
+ this.toolStripSeparator15 = new System.Windows.Forms.ToolStripSeparator();
((System.ComponentModel.ISupportInitialize)(this.scMain)).BeginInit();
this.scMain.Panel1.SuspendLayout();
this.scMain.Panel2.SuspendLayout();
@@ -150,19 +153,17 @@
//
// 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
//
- resources.ApplyResources(this.lvServers, "lvServers");
this.lvServers.ContextMenuStrip = this.cmsLv;
+ resources.ApplyResources(this.lvServers, "lvServers");
this.lvServers.FullRowSelect = true;
this.lvServers.GridLines = true;
this.lvServers.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable;
@@ -181,7 +182,6 @@
//
// 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,
@@ -217,194 +217,195 @@
this.menuExport2SubContent});
this.cmsLv.Name = "cmsLv";
this.cmsLv.OwnerItem = this.tsbServer;
+ resources.ApplyResources(this.cmsLv, "cmsLv");
//
// menuAddVmessServer
//
- resources.ApplyResources(this.menuAddVmessServer, "menuAddVmessServer");
this.menuAddVmessServer.Name = "menuAddVmessServer";
+ resources.ApplyResources(this.menuAddVmessServer, "menuAddVmessServer");
this.menuAddVmessServer.Click += new System.EventHandler(this.menuAddVmessServer_Click);
//
// menuAddVlessServer
//
- resources.ApplyResources(this.menuAddVlessServer, "menuAddVlessServer");
this.menuAddVlessServer.Name = "menuAddVlessServer";
+ resources.ApplyResources(this.menuAddVlessServer, "menuAddVlessServer");
this.menuAddVlessServer.Click += new System.EventHandler(this.menuAddVlessServer_Click);
//
// menuAddShadowsocksServer
//
- resources.ApplyResources(this.menuAddShadowsocksServer, "menuAddShadowsocksServer");
this.menuAddShadowsocksServer.Name = "menuAddShadowsocksServer";
+ resources.ApplyResources(this.menuAddShadowsocksServer, "menuAddShadowsocksServer");
this.menuAddShadowsocksServer.Click += new System.EventHandler(this.menuAddShadowsocksServer_Click);
//
// menuAddSocksServer
//
- resources.ApplyResources(this.menuAddSocksServer, "menuAddSocksServer");
this.menuAddSocksServer.Name = "menuAddSocksServer";
+ resources.ApplyResources(this.menuAddSocksServer, "menuAddSocksServer");
this.menuAddSocksServer.Click += new System.EventHandler(this.menuAddSocksServer_Click);
//
// menuAddTrojanServer
//
- resources.ApplyResources(this.menuAddTrojanServer, "menuAddTrojanServer");
this.menuAddTrojanServer.Name = "menuAddTrojanServer";
+ resources.ApplyResources(this.menuAddTrojanServer, "menuAddTrojanServer");
this.menuAddTrojanServer.Click += new System.EventHandler(this.menuAddTrojanServer_Click);
//
// menuAddCustomServer
//
- resources.ApplyResources(this.menuAddCustomServer, "menuAddCustomServer");
this.menuAddCustomServer.Name = "menuAddCustomServer";
+ resources.ApplyResources(this.menuAddCustomServer, "menuAddCustomServer");
this.menuAddCustomServer.Click += new System.EventHandler(this.menuAddCustomServer_Click);
//
// menuAddServers
//
- resources.ApplyResources(this.menuAddServers, "menuAddServers");
this.menuAddServers.Name = "menuAddServers";
+ resources.ApplyResources(this.menuAddServers, "menuAddServers");
this.menuAddServers.Click += new System.EventHandler(this.menuAddServers_Click);
//
// menuScanScreen
//
- resources.ApplyResources(this.menuScanScreen, "menuScanScreen");
this.menuScanScreen.Name = "menuScanScreen";
+ resources.ApplyResources(this.menuScanScreen, "menuScanScreen");
this.menuScanScreen.Click += new System.EventHandler(this.menuScanScreen_Click);
//
// toolStripSeparator1
//
- resources.ApplyResources(this.toolStripSeparator1, "toolStripSeparator1");
this.toolStripSeparator1.Name = "toolStripSeparator1";
+ resources.ApplyResources(this.toolStripSeparator1, "toolStripSeparator1");
//
// menuRemoveServer
//
- resources.ApplyResources(this.menuRemoveServer, "menuRemoveServer");
this.menuRemoveServer.Name = "menuRemoveServer";
+ resources.ApplyResources(this.menuRemoveServer, "menuRemoveServer");
this.menuRemoveServer.Click += new System.EventHandler(this.menuRemoveServer_Click);
//
// menuRemoveDuplicateServer
//
- resources.ApplyResources(this.menuRemoveDuplicateServer, "menuRemoveDuplicateServer");
this.menuRemoveDuplicateServer.Name = "menuRemoveDuplicateServer";
+ resources.ApplyResources(this.menuRemoveDuplicateServer, "menuRemoveDuplicateServer");
this.menuRemoveDuplicateServer.Click += new System.EventHandler(this.menuRemoveDuplicateServer_Click);
//
// menuCopyServer
//
- resources.ApplyResources(this.menuCopyServer, "menuCopyServer");
this.menuCopyServer.Name = "menuCopyServer";
+ resources.ApplyResources(this.menuCopyServer, "menuCopyServer");
this.menuCopyServer.Click += new System.EventHandler(this.menuCopyServer_Click);
//
// menuSetDefaultServer
//
- resources.ApplyResources(this.menuSetDefaultServer, "menuSetDefaultServer");
this.menuSetDefaultServer.Name = "menuSetDefaultServer";
+ resources.ApplyResources(this.menuSetDefaultServer, "menuSetDefaultServer");
this.menuSetDefaultServer.Click += new System.EventHandler(this.menuSetDefaultServer_Click);
//
// toolStripSeparator3
//
- resources.ApplyResources(this.toolStripSeparator3, "toolStripSeparator3");
this.toolStripSeparator3.Name = "toolStripSeparator3";
+ resources.ApplyResources(this.toolStripSeparator3, "toolStripSeparator3");
//
// menuMoveTop
//
- resources.ApplyResources(this.menuMoveTop, "menuMoveTop");
this.menuMoveTop.Name = "menuMoveTop";
+ resources.ApplyResources(this.menuMoveTop, "menuMoveTop");
this.menuMoveTop.Click += new System.EventHandler(this.menuMoveTop_Click);
//
// menuMoveUp
//
- resources.ApplyResources(this.menuMoveUp, "menuMoveUp");
this.menuMoveUp.Name = "menuMoveUp";
+ resources.ApplyResources(this.menuMoveUp, "menuMoveUp");
this.menuMoveUp.Click += new System.EventHandler(this.menuMoveUp_Click);
//
// menuMoveDown
//
- resources.ApplyResources(this.menuMoveDown, "menuMoveDown");
this.menuMoveDown.Name = "menuMoveDown";
+ resources.ApplyResources(this.menuMoveDown, "menuMoveDown");
this.menuMoveDown.Click += new System.EventHandler(this.menuMoveDown_Click);
//
// menuMoveBottom
//
- resources.ApplyResources(this.menuMoveBottom, "menuMoveBottom");
this.menuMoveBottom.Name = "menuMoveBottom";
+ resources.ApplyResources(this.menuMoveBottom, "menuMoveBottom");
this.menuMoveBottom.Click += new System.EventHandler(this.menuMoveBottom_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);
//
// toolStripSeparator9
//
- resources.ApplyResources(this.toolStripSeparator9, "toolStripSeparator9");
this.toolStripSeparator9.Name = "toolStripSeparator9";
+ resources.ApplyResources(this.toolStripSeparator9, "toolStripSeparator9");
//
// menuPingServer
//
- resources.ApplyResources(this.menuPingServer, "menuPingServer");
this.menuPingServer.Name = "menuPingServer";
+ resources.ApplyResources(this.menuPingServer, "menuPingServer");
this.menuPingServer.Click += new System.EventHandler(this.menuPingServer_Click);
//
// menuTcpingServer
//
- resources.ApplyResources(this.menuTcpingServer, "menuTcpingServer");
this.menuTcpingServer.Name = "menuTcpingServer";
+ resources.ApplyResources(this.menuTcpingServer, "menuTcpingServer");
this.menuTcpingServer.Click += new System.EventHandler(this.menuTcpingServer_Click);
//
// menuRealPingServer
//
- resources.ApplyResources(this.menuRealPingServer, "menuRealPingServer");
this.menuRealPingServer.Name = "menuRealPingServer";
+ resources.ApplyResources(this.menuRealPingServer, "menuRealPingServer");
this.menuRealPingServer.Click += new System.EventHandler(this.menuRealPingServer_Click);
//
// menuSpeedServer
//
- resources.ApplyResources(this.menuSpeedServer, "menuSpeedServer");
this.menuSpeedServer.Name = "menuSpeedServer";
+ resources.ApplyResources(this.menuSpeedServer, "menuSpeedServer");
this.menuSpeedServer.Click += new System.EventHandler(this.menuSpeedServer_Click);
//
// tsbTestMe
//
- resources.ApplyResources(this.tsbTestMe, "tsbTestMe");
this.tsbTestMe.Name = "tsbTestMe";
+ resources.ApplyResources(this.tsbTestMe, "tsbTestMe");
this.tsbTestMe.Click += new System.EventHandler(this.tsbTestMe_Click);
//
// menuClearServerStatistics
//
- resources.ApplyResources(this.menuClearServerStatistics, "menuClearServerStatistics");
this.menuClearServerStatistics.Name = "menuClearServerStatistics";
+ resources.ApplyResources(this.menuClearServerStatistics, "menuClearServerStatistics");
this.menuClearServerStatistics.Click += new System.EventHandler(this.menuClearStatistic_Click);
//
// toolStripSeparator6
//
- resources.ApplyResources(this.toolStripSeparator6, "toolStripSeparator6");
this.toolStripSeparator6.Name = "toolStripSeparator6";
+ resources.ApplyResources(this.toolStripSeparator6, "toolStripSeparator6");
//
// menuExport2ClientConfig
//
- resources.ApplyResources(this.menuExport2ClientConfig, "menuExport2ClientConfig");
this.menuExport2ClientConfig.Name = "menuExport2ClientConfig";
+ resources.ApplyResources(this.menuExport2ClientConfig, "menuExport2ClientConfig");
this.menuExport2ClientConfig.Click += new System.EventHandler(this.menuExport2ClientConfig_Click);
//
// menuExport2ServerConfig
//
- resources.ApplyResources(this.menuExport2ServerConfig, "menuExport2ServerConfig");
this.menuExport2ServerConfig.Name = "menuExport2ServerConfig";
+ resources.ApplyResources(this.menuExport2ServerConfig, "menuExport2ServerConfig");
this.menuExport2ServerConfig.Click += new System.EventHandler(this.menuExport2ServerConfig_Click);
//
// menuExport2ShareUrl
//
- resources.ApplyResources(this.menuExport2ShareUrl, "menuExport2ShareUrl");
this.menuExport2ShareUrl.Name = "menuExport2ShareUrl";
+ resources.ApplyResources(this.menuExport2ShareUrl, "menuExport2ShareUrl");
this.menuExport2ShareUrl.Click += new System.EventHandler(this.menuExport2ShareUrl_Click);
//
// menuExport2SubContent
//
- resources.ApplyResources(this.menuExport2SubContent, "menuExport2SubContent");
this.menuExport2SubContent.Name = "menuExport2SubContent";
+ resources.ApplyResources(this.menuExport2SubContent, "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
@@ -414,14 +415,14 @@
//
// notifyMain
//
- resources.ApplyResources(this.notifyMain, "notifyMain");
this.notifyMain.ContextMenuStrip = this.cmsMain;
+ resources.ApplyResources(this.notifyMain, "notifyMain");
this.notifyMain.MouseClick += new System.Windows.Forms.MouseEventHandler(this.notifyMain_MouseClick);
//
// cmsMain
//
- resources.ApplyResources(this.cmsMain, "cmsMain");
this.cmsMain.ImageScalingSize = new System.Drawing.Size(20, 20);
+ resources.ApplyResources(this.cmsMain, "cmsMain");
this.cmsMain.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.menuSysAgentMode,
this.menuRoutings,
@@ -439,73 +440,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
//
- resources.ApplyResources(this.menuKeepClear, "menuKeepClear");
this.menuKeepClear.Name = "menuKeepClear";
+ resources.ApplyResources(this.menuKeepClear, "menuKeepClear");
this.menuKeepClear.Click += new System.EventHandler(this.menuKeepClear_Click);
//
// menuGlobal
//
- resources.ApplyResources(this.menuGlobal, "menuGlobal");
this.menuGlobal.Name = "menuGlobal";
+ resources.ApplyResources(this.menuGlobal, "menuGlobal");
this.menuGlobal.Click += new System.EventHandler(this.menuGlobal_Click);
//
// menuKeepNothing
//
- resources.ApplyResources(this.menuKeepNothing, "menuKeepNothing");
this.menuKeepNothing.Name = "menuKeepNothing";
+ resources.ApplyResources(this.menuKeepNothing, "menuKeepNothing");
this.menuKeepNothing.Click += new System.EventHandler(this.menuKeepNothing_Click);
//
// menuRoutings
//
- resources.ApplyResources(this.menuRoutings, "menuRoutings");
this.menuRoutings.Name = "menuRoutings";
+ resources.ApplyResources(this.menuRoutings, "menuRoutings");
//
// menuServers
//
- resources.ApplyResources(this.menuServers, "menuServers");
this.menuServers.Name = "menuServers";
+ resources.ApplyResources(this.menuServers, "menuServers");
//
// toolStripSeparator13
//
- resources.ApplyResources(this.toolStripSeparator13, "toolStripSeparator13");
this.toolStripSeparator13.Name = "toolStripSeparator13";
+ resources.ApplyResources(this.toolStripSeparator13, "toolStripSeparator13");
//
// menuAddServers2
//
- resources.ApplyResources(this.menuAddServers2, "menuAddServers2");
this.menuAddServers2.Name = "menuAddServers2";
+ resources.ApplyResources(this.menuAddServers2, "menuAddServers2");
this.menuAddServers2.Click += new System.EventHandler(this.menuAddServers_Click);
//
// menuScanScreen2
//
- resources.ApplyResources(this.menuScanScreen2, "menuScanScreen2");
this.menuScanScreen2.Name = "menuScanScreen2";
+ resources.ApplyResources(this.menuScanScreen2, "menuScanScreen2");
this.menuScanScreen2.Click += new System.EventHandler(this.menuScanScreen_Click);
//
// menuUpdateSubscriptions
//
- resources.ApplyResources(this.menuUpdateSubscriptions, "menuUpdateSubscriptions");
this.menuUpdateSubscriptions.Name = "menuUpdateSubscriptions";
+ resources.ApplyResources(this.menuUpdateSubscriptions, "menuUpdateSubscriptions");
this.menuUpdateSubscriptions.Click += new System.EventHandler(this.menuUpdateSubscriptions_Click);
//
// toolStripSeparator2
//
- resources.ApplyResources(this.toolStripSeparator2, "toolStripSeparator2");
this.toolStripSeparator2.Name = "toolStripSeparator2";
+ resources.ApplyResources(this.toolStripSeparator2, "toolStripSeparator2");
//
// menuExit
//
- resources.ApplyResources(this.menuExit, "menuExit");
this.menuExit.Name = "menuExit";
+ resources.ApplyResources(this.menuExit, "menuExit");
this.menuExit.Click += new System.EventHandler(this.menuExit_Click);
//
// bgwScan
@@ -516,25 +517,25 @@
//
// groupBox1
//
- resources.ApplyResources(this.groupBox1, "groupBox1");
this.groupBox1.Controls.Add(this.scMain);
+ resources.ApplyResources(this.groupBox1, "groupBox1");
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;
this.txtMsgBox.ContextMenuStrip = this.cmsMsgBox;
+ 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;
@@ -542,41 +543,40 @@
//
// cmsMsgBox
//
- resources.ApplyResources(this.cmsMsgBox, "cmsMsgBox");
this.cmsMsgBox.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.menuMsgBoxSelectAll,
this.menuMsgBoxCopy,
this.menuMsgBoxCopyAll,
this.menuMsgBoxAddRoutingRule});
this.cmsMsgBox.Name = "cmsMsgBox";
+ resources.ApplyResources(this.cmsMsgBox, "cmsMsgBox");
//
// menuMsgBoxSelectAll
//
- resources.ApplyResources(this.menuMsgBoxSelectAll, "menuMsgBoxSelectAll");
this.menuMsgBoxSelectAll.Name = "menuMsgBoxSelectAll";
+ resources.ApplyResources(this.menuMsgBoxSelectAll, "menuMsgBoxSelectAll");
this.menuMsgBoxSelectAll.Click += new System.EventHandler(this.menuMsgBoxSelectAll_Click);
//
// menuMsgBoxCopy
//
- resources.ApplyResources(this.menuMsgBoxCopy, "menuMsgBoxCopy");
this.menuMsgBoxCopy.Name = "menuMsgBoxCopy";
+ resources.ApplyResources(this.menuMsgBoxCopy, "menuMsgBoxCopy");
this.menuMsgBoxCopy.Click += new System.EventHandler(this.menuMsgBoxCopy_Click);
//
// menuMsgBoxCopyAll
//
- resources.ApplyResources(this.menuMsgBoxCopyAll, "menuMsgBoxCopyAll");
this.menuMsgBoxCopyAll.Name = "menuMsgBoxCopyAll";
+ resources.ApplyResources(this.menuMsgBoxCopyAll, "menuMsgBoxCopyAll");
this.menuMsgBoxCopyAll.Click += new System.EventHandler(this.menuMsgBoxCopyAll_Click);
//
// menuMsgBoxAddRoutingRule
//
- resources.ApplyResources(this.menuMsgBoxAddRoutingRule, "menuMsgBoxAddRoutingRule");
this.menuMsgBoxAddRoutingRule.Name = "menuMsgBoxAddRoutingRule";
+ resources.ApplyResources(this.menuMsgBoxAddRoutingRule, "menuMsgBoxAddRoutingRule");
this.menuMsgBoxAddRoutingRule.Click += new System.EventHandler(this.menuMsgBoxAddRoutingRule_Click);
//
// 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,
@@ -588,6 +588,7 @@
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);
//
@@ -598,8 +599,8 @@
//
// toolSslSocksPort
//
- resources.ApplyResources(this.toolSslSocksPort, "toolSslSocksPort");
this.toolSslSocksPort.Name = "toolSslSocksPort";
+ resources.ApplyResources(this.toolSslSocksPort, "toolSslSocksPort");
//
// toolSslBlank1
//
@@ -614,8 +615,8 @@
//
// toolSslHttpPort
//
- resources.ApplyResources(this.toolSslHttpPort, "toolSslHttpPort");
this.toolSslHttpPort.Name = "toolSslHttpPort";
+ resources.ApplyResources(this.toolSslHttpPort, "toolSslHttpPort");
//
// toolSslBlank2
//
@@ -637,8 +638,8 @@
//
// toolSslBlank4
//
- resources.ApplyResources(this.toolSslBlank4, "toolSslBlank4");
this.toolSslBlank4.Name = "toolSslBlank4";
+ resources.ApplyResources(this.toolSslBlank4, "toolSslBlank4");
//
// panel1
//
@@ -647,7 +648,6 @@
//
// 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,
@@ -665,87 +665,88 @@
this.tsbPromotion,
this.toolStripSeparator11,
this.tsbClose});
+ resources.ApplyResources(this.tsMain, "tsMain");
this.tsMain.Name = "tsMain";
this.tsMain.TabStop = true;
//
// toolStripSeparator4
//
- resources.ApplyResources(this.toolStripSeparator4, "toolStripSeparator4");
this.toolStripSeparator4.Name = "toolStripSeparator4";
+ resources.ApplyResources(this.toolStripSeparator4, "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
//
- resources.ApplyResources(this.tsbSubSetting, "tsbSubSetting");
this.tsbSubSetting.Name = "tsbSubSetting";
+ resources.ApplyResources(this.tsbSubSetting, "tsbSubSetting");
this.tsbSubSetting.Click += new System.EventHandler(this.tsbSubSetting_Click);
//
// tsbSubUpdate
//
- resources.ApplyResources(this.tsbSubUpdate, "tsbSubUpdate");
this.tsbSubUpdate.Name = "tsbSubUpdate";
+ resources.ApplyResources(this.tsbSubUpdate, "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
//
- resources.ApplyResources(this.toolStripSeparator8, "toolStripSeparator8");
this.toolStripSeparator8.Name = "toolStripSeparator8";
+ resources.ApplyResources(this.toolStripSeparator8, "toolStripSeparator8");
//
// tsbSetting
//
- resources.ApplyResources(this.tsbSetting, "tsbSetting");
this.tsbSetting.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.tsbOptionSetting,
this.tsbRoutingSetting,
this.toolStripSeparator14,
this.tsbBackupGuiNConfig});
this.tsbSetting.Image = global::v2rayN.Properties.Resources.option;
+ resources.ApplyResources(this.tsbSetting, "tsbSetting");
this.tsbSetting.Name = "tsbSetting";
//
// tsbOptionSetting
//
- resources.ApplyResources(this.tsbOptionSetting, "tsbOptionSetting");
this.tsbOptionSetting.Name = "tsbOptionSetting";
+ resources.ApplyResources(this.tsbOptionSetting, "tsbOptionSetting");
this.tsbOptionSetting.Click += new System.EventHandler(this.tsbOptionSetting_Click);
//
// tsbRoutingSetting
//
- resources.ApplyResources(this.tsbRoutingSetting, "tsbRoutingSetting");
this.tsbRoutingSetting.Name = "tsbRoutingSetting";
+ resources.ApplyResources(this.tsbRoutingSetting, "tsbRoutingSetting");
this.tsbRoutingSetting.Click += new System.EventHandler(this.tsbRoutingSetting_Click);
//
// toolStripSeparator14
//
- resources.ApplyResources(this.toolStripSeparator14, "toolStripSeparator14");
this.toolStripSeparator14.Name = "toolStripSeparator14";
+ resources.ApplyResources(this.toolStripSeparator14, "toolStripSeparator14");
//
// tsbBackupGuiNConfig
//
- resources.ApplyResources(this.tsbBackupGuiNConfig, "tsbBackupGuiNConfig");
this.tsbBackupGuiNConfig.Name = "tsbBackupGuiNConfig";
+ resources.ApplyResources(this.tsbBackupGuiNConfig, "tsbBackupGuiNConfig");
this.tsbBackupGuiNConfig.Click += new System.EventHandler(this.tsbBackupGuiNConfig_Click);
//
// toolStripSeparator5
//
- resources.ApplyResources(this.toolStripSeparator5, "toolStripSeparator5");
this.toolStripSeparator5.Name = "toolStripSeparator5";
+ resources.ApplyResources(this.toolStripSeparator5, "toolStripSeparator5");
//
// tsbReload
//
@@ -755,45 +756,47 @@
//
// toolStripSeparator7
//
- resources.ApplyResources(this.toolStripSeparator7, "toolStripSeparator7");
this.toolStripSeparator7.Name = "toolStripSeparator7";
+ resources.ApplyResources(this.toolStripSeparator7, "toolStripSeparator7");
//
// tsbCheckUpdate
//
- resources.ApplyResources(this.tsbCheckUpdate, "tsbCheckUpdate");
this.tsbCheckUpdate.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.tsbCheckUpdateN,
this.tsbCheckUpdateCore,
- this.tsbCheckUpdateXrayCore});
+ this.tsbCheckUpdateXrayCore,
+ this.toolStripSeparator15,
+ this.tsbCheckUpdateGeoSite,
+ this.tsbCheckUpdateGeoIP});
this.tsbCheckUpdate.Image = global::v2rayN.Properties.Resources.checkupdate;
+ resources.ApplyResources(this.tsbCheckUpdate, "tsbCheckUpdate");
this.tsbCheckUpdate.Name = "tsbCheckUpdate";
//
// tsbCheckUpdateN
//
- resources.ApplyResources(this.tsbCheckUpdateN, "tsbCheckUpdateN");
this.tsbCheckUpdateN.Name = "tsbCheckUpdateN";
+ resources.ApplyResources(this.tsbCheckUpdateN, "tsbCheckUpdateN");
this.tsbCheckUpdateN.Click += new System.EventHandler(this.tsbCheckUpdateN_Click);
//
// tsbCheckUpdateCore
//
- resources.ApplyResources(this.tsbCheckUpdateCore, "tsbCheckUpdateCore");
this.tsbCheckUpdateCore.Name = "tsbCheckUpdateCore";
+ resources.ApplyResources(this.tsbCheckUpdateCore, "tsbCheckUpdateCore");
this.tsbCheckUpdateCore.Click += new System.EventHandler(this.tsbCheckUpdateCore_Click);
//
// tsbCheckUpdateXrayCore
//
- resources.ApplyResources(this.tsbCheckUpdateXrayCore, "tsbCheckUpdateXrayCore");
this.tsbCheckUpdateXrayCore.Name = "tsbCheckUpdateXrayCore";
+ resources.ApplyResources(this.tsbCheckUpdateXrayCore, "tsbCheckUpdateXrayCore");
this.tsbCheckUpdateXrayCore.Click += new System.EventHandler(this.tsbCheckUpdateXrayCore_Click);
//
// toolStripSeparator10
//
- resources.ApplyResources(this.toolStripSeparator10, "toolStripSeparator10");
this.toolStripSeparator10.Name = "toolStripSeparator10";
+ resources.ApplyResources(this.toolStripSeparator10, "toolStripSeparator10");
//
// tsbHelp
//
- resources.ApplyResources(this.tsbHelp, "tsbHelp");
this.tsbHelp.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.tsbAbout,
this.tsbV2rayWebsite,
@@ -801,49 +804,50 @@
this.tsbLanguageDef,
this.tsbLanguageZhHans});
this.tsbHelp.Image = global::v2rayN.Properties.Resources.help;
+ resources.ApplyResources(this.tsbHelp, "tsbHelp");
this.tsbHelp.Name = "tsbHelp";
//
// tsbAbout
//
- resources.ApplyResources(this.tsbAbout, "tsbAbout");
this.tsbAbout.Name = "tsbAbout";
+ resources.ApplyResources(this.tsbAbout, "tsbAbout");
this.tsbAbout.Click += new System.EventHandler(this.tsbAbout_Click);
//
// tsbV2rayWebsite
//
- resources.ApplyResources(this.tsbV2rayWebsite, "tsbV2rayWebsite");
this.tsbV2rayWebsite.Name = "tsbV2rayWebsite";
+ resources.ApplyResources(this.tsbV2rayWebsite, "tsbV2rayWebsite");
this.tsbV2rayWebsite.Click += new System.EventHandler(this.tsbV2rayWebsite_Click);
//
// toolStripSeparator12
//
- resources.ApplyResources(this.toolStripSeparator12, "toolStripSeparator12");
this.toolStripSeparator12.Name = "toolStripSeparator12";
+ resources.ApplyResources(this.toolStripSeparator12, "toolStripSeparator12");
//
// tsbLanguageDef
//
- resources.ApplyResources(this.tsbLanguageDef, "tsbLanguageDef");
this.tsbLanguageDef.Name = "tsbLanguageDef";
+ resources.ApplyResources(this.tsbLanguageDef, "tsbLanguageDef");
this.tsbLanguageDef.Click += new System.EventHandler(this.tsbLanguageDef_Click);
//
// tsbLanguageZhHans
//
- resources.ApplyResources(this.tsbLanguageZhHans, "tsbLanguageZhHans");
this.tsbLanguageZhHans.Name = "tsbLanguageZhHans";
+ resources.ApplyResources(this.tsbLanguageZhHans, "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
//
- resources.ApplyResources(this.toolStripSeparator11, "toolStripSeparator11");
this.toolStripSeparator11.Name = "toolStripSeparator11";
+ resources.ApplyResources(this.toolStripSeparator11, "toolStripSeparator11");
//
// tsbClose
//
@@ -851,6 +855,23 @@
this.tsbClose.Name = "tsbClose";
this.tsbClose.Click += new System.EventHandler(this.tsbClose_Click);
//
+ // tsbCheckUpdateGeoSite
+ //
+ this.tsbCheckUpdateGeoSite.Name = "tsbCheckUpdateGeoSite";
+ resources.ApplyResources(this.tsbCheckUpdateGeoSite, "tsbCheckUpdateGeoSite");
+ this.tsbCheckUpdateGeoSite.Click += new System.EventHandler(this.tsbCheckUpdateGeoSite_Click);
+ //
+ // tsbCheckUpdateGeoIP
+ //
+ this.tsbCheckUpdateGeoIP.Name = "tsbCheckUpdateGeoIP";
+ resources.ApplyResources(this.tsbCheckUpdateGeoIP, "tsbCheckUpdateGeoIP");
+ this.tsbCheckUpdateGeoIP.Click += new System.EventHandler(this.tsbCheckUpdateGeoIP_Click);
+ //
+ // toolStripSeparator15
+ //
+ this.toolStripSeparator15.Name = "toolStripSeparator15";
+ resources.ApplyResources(this.toolStripSeparator15, "toolStripSeparator15");
+ //
// MainForm
//
resources.ApplyResources(this, "$this");
@@ -987,6 +1008,9 @@
private System.Windows.Forms.ToolStripMenuItem menuMsgBoxCopyAll;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator14;
private System.Windows.Forms.ToolStripMenuItem tsbBackupGuiNConfig;
+ private System.Windows.Forms.ToolStripSeparator toolStripSeparator15;
+ private System.Windows.Forms.ToolStripMenuItem tsbCheckUpdateGeoSite;
+ private System.Windows.Forms.ToolStripMenuItem tsbCheckUpdateGeoIP;
}
}
diff --git a/v2rayN/v2rayN/Forms/MainForm.cs b/v2rayN/v2rayN/Forms/MainForm.cs
index fb38528e..cabc221d 100644
--- a/v2rayN/v2rayN/Forms/MainForm.cs
+++ b/v2rayN/v2rayN/Forms/MainForm.cs
@@ -650,7 +650,8 @@ namespace v2rayN.Forms
private void tsbTestMe_Click(object sender, EventArgs e)
{
- string result = httpProxyTest() + "ms";
+ SpeedtestHandler statistics = new SpeedtestHandler(ref config);
+ string result = statistics.RunAvailabilityCheck() + "ms";
AppendText(false, string.Format(UIRes.I18N("TestMeOutput"), result));
}
@@ -662,12 +663,6 @@ namespace v2rayN.Forms
}
}
- private int httpProxyTest()
- {
- SpeedtestHandler statistics = new SpeedtestHandler(ref config, ref v2rayHandler, lvSelecteds, "", UpdateSpeedtestHandler);
- return statistics.RunAvailabilityCheck();
- }
-
private void menuExport2ClientConfig_Click(object sender, EventArgs e)
{
int index = GetLvSelectedIndex();
@@ -1167,88 +1162,17 @@ namespace v2rayN.Forms
#region CheckUpdate
- private void askToDownload(DownloadHandle downloadHandle, string url)
- {
- if (UI.ShowYesNo(string.Format(UIRes.I18N("DownloadYesNo"), url)) == DialogResult.Yes)
- {
- if (httpProxyTest() > 0)
- {
- int httpPort = config.GetLocalPort(Global.InboundHttp);
- WebProxy webProxy = new WebProxy(Global.Loopback, httpPort);
- downloadHandle.DownloadFileAsync(url, webProxy, 600);
- }
- else
- {
- downloadHandle.DownloadFileAsync(url, null, 600);
- }
- }
- }
private void tsbCheckUpdateN_Click(object sender, EventArgs e)
{
- //System.Diagnostics.Process.Start(Global.UpdateUrl);
- DownloadHandle downloadHandle = null;
- if (downloadHandle == null)
+ void _updateUI(bool success, string msg)
{
- downloadHandle = new DownloadHandle();
- downloadHandle.AbsoluteCompleted += (sender2, args) =>
+ AppendText(false, msg);
+ if (success)
{
- if (args.Success)
- {
- AppendText(false, string.Format(UIRes.I18N("MsgParsingSuccessfully"), "v2rayN"));
-
- string url = args.Msg;
- this.Invoke((MethodInvoker)(delegate
- {
- askToDownload(downloadHandle, url);
- }));
- }
- else
- {
- AppendText(false, args.Msg);
- }
- };
- downloadHandle.UpdateCompleted += (sender2, args) =>
- {
- if (args.Success)
- {
- AppendText(false, UIRes.I18N("MsgDownloadV2rayCoreSuccessfully"));
-
- try
- {
- string fileName = Utils.GetPath(downloadHandle.DownloadFileName);
- Process process = new Process
- {
- StartInfo = new ProcessStartInfo
- {
- FileName = "v2rayUpgrade.exe",
- Arguments = "\"" + fileName + "\"",
- WorkingDirectory = Utils.StartupPath()
- }
- };
- process.Start();
- if (process.Id > 0)
- {
- menuExit_Click(null, null);
- }
- }
- catch (Exception ex)
- {
- AppendText(false, ex.Message);
- }
- }
- else
- {
- AppendText(false, args.Msg);
- }
- };
- downloadHandle.Error += (sender2, args) =>
- {
- AppendText(true, args.GetException().Message);
- };
- }
-
- AppendText(false, string.Format(UIRes.I18N("MsgStartUpdating"), "v2rayN"));
- downloadHandle.CheckUpdateAsync("v2rayN");
+ menuExit_Click(null, null);
+ }
+ };
+ (new UpdateHandle()).CheckUpdateGuiN(config, _updateUI);
}
private void tsbCheckUpdateCore_Click(object sender, EventArgs e)
@@ -1263,67 +1187,52 @@ namespace v2rayN.Forms
private void CheckUpdateCore(string type)
{
- DownloadHandle downloadHandle = null;
- if (downloadHandle == null)
+ void _updateUI(bool success, string msg)
{
- downloadHandle = new DownloadHandle();
- downloadHandle.AbsoluteCompleted += (sender2, args) =>
+ AppendText(false, msg);
+ if (success)
{
- if (args.Success)
- {
- AppendText(false, string.Format(UIRes.I18N("MsgParsingSuccessfully"), "Core"));
+ CloseV2ray();
- string url = args.Msg;
- this.Invoke((MethodInvoker)(delegate
- {
- askToDownload(downloadHandle, url);
- }));
- }
- else
- {
- AppendText(false, args.Msg);
- }
- };
- downloadHandle.UpdateCompleted += (sender2, args) =>
+ string fileName = Global.DownloadFileName;
+ fileName = Utils.GetPath(fileName);
+ FileManager.ZipExtractToFile(fileName, config.ignoreGeoUpdateCore ? "geo" : "");
+
+ AppendText(false, UIRes.I18N("MsgUpdateV2rayCoreSuccessfullyMore"));
+
+ Global.reloadV2ray = true;
+ LoadV2ray();
+
+ AppendText(false, UIRes.I18N("MsgUpdateV2rayCoreSuccessfully"));
+ }
+ };
+ (new UpdateHandle()).CheckUpdateCore(type, config, _updateUI);
+ }
+
+ private void tsbCheckUpdateGeoSite_Click(object sender, EventArgs e)
+ {
+ (new UpdateHandle()).UpdateGeoFile("geosite", config, (bool success, string msg) =>
+ {
+ AppendText(false, msg);
+ if (success)
{
- if (args.Success)
- {
- AppendText(false, UIRes.I18N("MsgDownloadV2rayCoreSuccessfully"));
- AppendText(false, UIRes.I18N("MsgUnpacking"));
+ Global.reloadV2ray = true;
+ LoadV2ray();
+ }
+ });
+ }
- try
- {
- CloseV2ray();
-
- string fileName = downloadHandle.DownloadFileName;
- fileName = Utils.GetPath(fileName);
- FileManager.ZipExtractToFile(fileName, config.ignoreGeoUpdateCore ? "geo" : "");
-
- AppendText(false, UIRes.I18N("MsgUpdateV2rayCoreSuccessfullyMore"));
-
- Global.reloadV2ray = true;
- LoadV2ray();
-
- AppendText(false, UIRes.I18N("MsgUpdateV2rayCoreSuccessfully"));
- }
- catch (Exception ex)
- {
- AppendText(false, ex.Message);
- }
- }
- else
- {
- AppendText(false, args.Msg);
- }
- };
- downloadHandle.Error += (sender2, args) =>
+ private void tsbCheckUpdateGeoIP_Click(object sender, EventArgs e)
+ {
+ (new UpdateHandle()).UpdateGeoFile("geoip", config, (bool success, string msg) =>
+ {
+ AppendText(false, msg);
+ if (success)
{
- AppendText(true, args.GetException().Message);
- };
- }
-
- AppendText(false, string.Format(UIRes.I18N("MsgStartUpdating"), "Core"));
- downloadHandle.CheckUpdateAsync(type);
+ Global.reloadV2ray = true;
+ LoadV2ray();
+ }
+ });
}
#endregion
@@ -1397,15 +1306,16 @@ namespace v2rayN.Forms
///
private void UpdateSubscriptionProcess()
{
- void _updateUI(bool refresh, string msg)
+ void _updateUI(bool success, string msg)
{
AppendText(false, msg);
- if (refresh)
+ if (success)
{
RefreshServers();
}
};
- MainFormHandler.Instance.UpdateSubscriptionProcess(config, _updateUI);
+
+ (new UpdateHandle()).UpdateSubscriptionProcess(config, _updateUI);
}
private void tsbQRCodeSwitch_CheckedChanged(object sender, EventArgs e)
diff --git a/v2rayN/v2rayN/Forms/MainForm.resx b/v2rayN/v2rayN/Forms/MainForm.resx
index 63c24d03..9c5d5251 100644
--- a/v2rayN/v2rayN/Forms/MainForm.resx
+++ b/v2rayN/v2rayN/Forms/MainForm.resx
@@ -117,724 +117,214 @@
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
- Remove duplicate servers
+
+
+ Fill
-
+
+ 3, 17
+
+
+ 327, 17
+
+
355, 22
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+ Add [VMess] server
-
+
355, 22
-
- 97, 53
-
-
- groupBox2
-
Add [VLESS] server
-
- 3
+
+ 355, 22
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+ Add [Shadowsocks] server
-
- Restart service
-
-
- tsbSubSetting
-
-
- 264, 22
-
-
- groupBox2
-
-
- menuMoveUp
+
+ 355, 22
Add [Socks] server
-
- System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+ 355, 22
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+ Add [Trojan] server
-
-
- ImageAboveText
+
+ 355, 22
-
- 227, 22
+
+ Add a custom configuration server
-
- 语言-[中文简体]
+
+ 355, 22
-
- NoControl
+
+ Import bulk URL from clipboard (Ctrl+V)
-
- Settings
+
+ 355, 22
-
- tsbHelp
+
+ Scan QR code on the screen (Ctrl+S)
-
-
- 0
-
-
- False
-
-
- toolStripSeparator6
-
-
- 99, 53
-
-
- Update subscriptions
-
-
- System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- 187, 22
-
-
- tsbSetting
-
-
- toolSslBlank2
-
-
- menuAddVmessServer
+
+ 352, 6
355, 22
-
+
+ Remove selected servers (Delete)
+
+
355, 22
-
- tsbCheckUpdateN
-
-
- 45, 53
-
-
- Do not change system proxy
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- toolStripSeparator7
-
-
- Update v2flyCore
-
-
- Magenta
-
-
- menuMsgBoxAddRoutingRule
+
+ Remove duplicate servers
355, 22
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+ Clone selected server
-
- menuExport2SubContent
+
+ 355, 22
-
- 52, 21
+
+ Set as active server (Enter)
-
- Share
-
-
- 227, 22
-
-
- tsbQRCodeSwitch
-
-
- Add Routing Rule (Ctrl+V)
+
+ 352, 6
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
-
- tsbRoutingSetting
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- Copy All
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- 227, 22
+
+ 355, 22
Export selected server for server configuration
-
- ImageAboveText
-
-
- 952, 56
-
-
- System.Windows.Forms.SplitContainer, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- 0
-
-
- menuRealPingServer
-
-
- Test servers real delay (Ctrl+R)
-
-
- menuTcpingServer
-
-
- 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
-
-
- 356, 622
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- v2rayN
-
-
+
355, 22
-
- toolStripSeparator1
+
+ Export share URLs to clipboard (Ctrl+C)
-
- 3
+
+ 355, 22
-
- System.Windows.Forms.ToolStripDropDownButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+ Export subscription (base64) share to clipboard
-
- 203, 22
+
+ Magenta
-
- System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- menuMsgBoxCopy
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- tsbClose
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- menuPingServer
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- tsbLanguageDef
-
-
-
- iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
- wwAADsMBx2+oZAAAATdJREFUWEftloENAiEMRW8ER3AEN9ANdARHcAPdwBF0A91AN9INtC+5JvUCJwWM
- mvCTFw3QUiiU65qa/lUTYT6Ato9rJZyERwT6GFNdU+EihCYNwVhsqmgm3AR1fheOAitd9PCfNvp0HDbY
- FolV2MmZZCzX9J0FG0TRTlwFdbahIVE7Qe1IR5bYVnXCyr2yO5F1MNUBec25YtjomcCXSxhr9DmrV2Gr
- flyL4GSrYcm9tmnEZ7JsAC7DgWr5ydbXA8hOAcVjG8FTD6ocQgvXKrW8MqFWUfc1DAXgmRwVFaJQAHsh
- VbYUU87diqWA934sl/TZ7wV2Lesx0gBwsO5/1Sl5PQhLQb+G+E+bfTm9KXsRAVgHrMK+jO9gbNEzzMSh
- 6DlM9nANoa+kdCeLXLNLFtc9b2r6EXXdE4e4mdByNuG1AAAAAElFTkSuQmCC
-
+
+ 64, 53
Servers
-
- 4
-
-
- Bottom
-
-
- 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
-
-
- Import bulk URL from clipboard
-
-
- 243, 22
-
-
- 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
-
-
- 180, 22
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- 3, 17
-
-
- System.Windows.Forms.ToolStripSeparator, 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
-
-
- scMain.Panel2
-
-
- System.Windows.Forms.ToolStripDropDownButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- 39, 21
-
-
- menuAddServers2
-
-
- Fill
-
-
- tsbServer
-
-
- Add [VMess] server
-
-
- System.Windows.Forms.SplitterPanel, 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
-
-
- 256, 307
-
-
- 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
-
-
- 6, 56
-
-
- System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- groupBox1
-
-
- 206, 21
-
-
- 2
-
-
- 125, 22
-
-
- Clear all service statistics
-
-
- scMain.Panel2
-
-
- menuRoutings
-
-
- 180, 22
-
-
- 355, 22
-
-
- 187, 22
-
-
- 6, 56
-
-
- Test servers download speed (Ctrl+T)
-
-
- ssMain
-
-
- 686
-
-
- 265, 170
-
-
- 355, 22
-
-
- $this
-
-
- menuUpdateSubscriptions
-
-
- scMain
-
-
- Check for updates
-
-
- tsbCheckUpdateXrayCore
-
-
- 0, 21
-
-
- toolSslServerSpeed
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- 5
-
-
- 125, 22
-
-
- scMain
-
-
- 203, 22
-
-
- HTTP:
-
-
- tsbReload
-
-
- 0
-
-
- Help
-
-
- menuMsgBoxSelectAll
-
-
- menuSelectAll
-
-
- Move to top (T)
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- Vertical
-
-
- 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
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+ 356, 622
-
- Promotion
-
-
- System.Windows.Forms.ToolStripDropDownButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- 355, 22
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- tsbLanguageZhHans
-
-
- menuRemoveDuplicateServer
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- BottomCenter
-
-
- menuExport2ShareUrl
-
-
- 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
-
-
- 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
-
-
- Server
-
-
- v2rayN.Base.ListViewFlickerFree, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
-
-
- menuAddShadowsocksServer
-
-
- txtMsgBox
-
-
- toolSslBlank4
-
-
- menuAddTrojanServer
-
-
- 261, 6
-
-
- v2rayN
-
-
- Language-[English]
-
-
- 264, 22
-
-
- 0
-
-
- Fill
-
-
- Routing
-
-
- 128, 53
-
-
- Add [Trojan] server
-
-
- 180, 22
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- toolStripSeparator11
+
+ cmsLv
System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
- 0, 393
-
-
- 352, 6
-
-
- System.Windows.Forms.ContextMenuStrip, 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
-
-
- V2Ray Website
-
-
- menuKeepClear
-
-
- No
-
-
- 1
-
-
- cmsMsgBox
-
-
- System.Windows.Forms.SplitterPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- OptionSetting
-
-
- menuMoveTop
-
-
- Copy (Ctrl+C)
+
+ Fill
@@ -853,710 +343,1277 @@
ZW0uRHJhd2luZy5HcmFwaGljc1VuaXQBAAAAB3ZhbHVlX18ACAMAAAADAAAACw==
-
- 952, 327
+
+ 0, 0
-
- menuScanScreen
+
+ 686, 307
-
- ImageAboveText
-
-
- cmsLv
-
-
- toolStripSeparator12
-
-
- 6, 56
-
-
- Fill
-
-
- toolSslBlank1
-
-
- tsbSubUpdate
-
-
- tsMain
-
-
- System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- SPEED Disabled
-
-
- 355, 22
-
-
- 67, 53
-
-
- menuSysAgentMode
-
-
- menuKeepNothing
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- ImageAboveText
-
-
- 187, 22
-
-
- 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
-
-
- $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
-
-
- 0, 21
-
-
- 3, 171
-
-
- True
-
-
- 355, 22
-
-
- Subscriptions
-
-
- 952, 10
-
-
- System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- Updates
-
-
- 264, 22
-
-
- toolStripSeparator14
-
-
+
+
0
-
- toolStripSeparator8
-
-
- menuMsgBoxCopyAll
-
-
- 89, 53
-
-
- 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
-
-
- Top
-
-
- menuSetDefaultServer
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- Settings
-
-
- menuCopyServer
-
-
- Http proxy
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- 355, 22
-
-
- groupBox1
-
-
- MainForm
-
-
- 微软雅黑, 8pt
-
-
- menuExit
-
-
- 227, 22
-
-
- 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
+
+ v2rayN.Base.ListViewFlickerFree, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
+
scMain.Panel1
-
- Magenta
-
-
- System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- menuGlobal
-
-
- System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- 2
-
-
- Magenta
-
-
- 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
-
-
- 3
-
-
- 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
-
-
- tsbCheckUpdateCore
-
-
- menuSpeedServer
-
-
- 355, 22
-
-
- menuRemoveServer
-
-
- tsbBackupGuiNConfig
-
-
- tsbTestMe
-
-
- 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
-
-
- Remove selected servers (Delete)
-
-
- 355, 22
-
-
- tsbSub
-
-
- Magenta
-
-
- ImageAboveText
-
-
- Clone selected server
-
-
- 0, 0
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- 355, 22
-
-
- 1
-
-
- 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
-
-
- 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
-
-
- Export share URLs to clipboard (Ctrl+C)
-
-
- 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
-
-
- System.Windows.Forms.ToolStripMenuItem, 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
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- ImageAboveText
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- 203, 22
-
-
- 184, 6
-
-
- 355, 22
-
-
- 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
-
-
- Select All (Ctrl+A)
-
-
- tsbOptionSetting
-
-
- 100
-
-
- System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- menuAddSocksServer
-
scMain.Panel1
-
- 微软雅黑, 8pt
+
+ System.Windows.Forms.SplitterPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
- 64, 53
+
+ scMain
-
- 228, 92
+
+ 0
-
- 946, 26
+
+ Fill
-
- 6
+
+ 0, 0
-
- 355, 22
+
+ 4, 4, 4, 4
-
- Set as active server (Enter)
+
+ 256, 307
-
- menuAddVlessServer
+
+ 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
-
- 6, 56
+
+ 686
-
- Add [Shadowsocks] server
-
-
- 261, 6
-
-
- 微软雅黑, 8pt
-
-
- 952, 593
-
-
- Test current service status
-
-
- 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
+
+ scMain
+
+
+ System.Windows.Forms.SplitContainer, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ groupBox1
+
+
+ 0
+
+
+ 17, 17
+
+
+ 137, 17
+
+
+ NoControl
+
+
+ 265, 170
+
+
+ cmsMain
+
+
+ System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ v2rayN
+
+
+ True
+
+
+ 264, 22
+
+
+ Http proxy
+
+
+ 243, 22
+
+
+ Clear system proxy
+
+
+ 243, 22
+
+
+ Set system proxy
+
+
+ 243, 22
+
+
+ Do not change system proxy
264, 22
+
+ Routing
+
+
+ 264, 22
+
+
+ Server
+
+
+ 261, 6
+
+
+ 264, 22
+
+
+ Import bulk URL from clipboard
+
+
+ 264, 22
+
+
+ Scan QR code on the screen
+
+
+ 264, 22
+
+
+ Update subscriptions
+
+
+ 261, 6
+
+
+ 264, 22
+
+
+ Exit
+
+
+ 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
+
+
+ 3
+
+
+ 228, 18
+
+
+ txtMsgBox
+
+
+ System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ groupBox2
+
+
+ 0
+
+
+ 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
+
+
+ 4
+
+
+ 603, 17
+
+
+ 228, 92
+
+
+ cmsMsgBox
+
+
+ System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 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
+
+
+ 227, 22
+
+
+ Select All (Ctrl+A)
+
+
+ 227, 22
+
+
+ Copy (Ctrl+C)
+
+
+ 227, 22
+
+
+ Copy All
+
+
+ 227, 22
+
+
+ Add Routing Rule (Ctrl+V)
+
+
+ 228, 18
+
+
+ 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
+
+
+ 微软雅黑, 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
+
+
+ Top
+
+
+ 0, 56
+
+
+ 952, 10
+
+
+ 2
+
+
+ panel1
+
+
+ System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ $this
+
+
+ 5
+
+
+ 409, 17
+
+
+ 6, 56
+
+
+ Magenta
+
+
+ 99, 53
+
+
+ Subscriptions
+
+
+ ImageAboveText
+
+
+ Magenta
+
+
+ 45, 53
+
+
+ Share
+
+
+ BottomCenter
+
+
+ ImageAboveText
+
+
+ 6, 56
+
+
+ Magenta
+
+
+ 67, 53
+
+
+ Settings
+
+
+ ImageAboveText
+
+
+ 6, 56
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+ YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAE3SURBVFhH7ZaBDQIhDEVvBEdwBDfQDXQER3AD3cARdAPd
+ QDfSDbQvuSb1AicFjJrwkxcN0FIolOuamv5VE2E+gLaPayWchEcE+hhTXVPhIoQmDcFYbKpoJtwEdX4X
+ jgIrXfTwnzb6dBw22BaJVdjJmWQs1/SdBRtE0U5cBXW2oSFRO0HtSEeW2FZ1wsq9sjuRdTDVAXnNuWLY
+ 6JnAl0sYa/Q5q1dhq35ci+Bkq2HJvbZpxGeybAAuw4Fq+cnW1wPITgHFYxvBUw+qHEIL1yq1vDKhVlH3
+ NQwF4JkcFRWiUAB7IVW2FFPO3YqlgPd+LJf02e8Fdi3rMdIAcLDuf9UpeT0IS0G/hvhPm305vSl7EQFY
+ B6zCvozvYGzRM8zEoeg5TPZwDaGvpHQni1yzSxbXPW9q+hF13ROHuJnQcjbhtQAAAABJRU5ErkJggg==
+
+
+
+ BottomCenter
+
+
+ Magenta
+
+
+ 97, 53
+
+
+ Restart service
+
+
+ ImageAboveText
+
+
+ 6, 56
+
+
+ 203, 22
+
+
+ v2rayN (this software)
+
+
+ 203, 22
+
+
+ Update v2flyCore
+
+
+ 203, 22
+
+
+ Update XrayCore
+
+
+ 200, 6
+
+
+ 203, 22
+
+
+ Update GeoSite
+
+
+ 203, 22
+
+
+ Update GeoIP
+
+
+ Magenta
+
+
+ 128, 53
+
+
+ Check for updates
+
+
+ ImageAboveText
+
+
+ 6, 56
+
+
+ Magenta
+
+
+ 48, 53
+
+
+ Help
+
+
+ ImageAboveText
+
+
+ Magenta
+
+
+ 89, 53
+
+
+ Promotion
+
+
+ ImageAboveText
+
6, 56
-
- toolStripSeparator9
+
+
+ iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+ YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAySURBVFhH7c6xDQAgCEVBRnVTHU2ZABuMxV3yOvJDAAA/
+ GqfZVG6X8mg1dfUAAPBQxAZd0SJruVXHWwAAAABJRU5ErkJggg==
+
-
- System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
+
Magenta
52, 53
-
- ImageAboveText
-
-
- menuAddServers
-
-
- 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
-
-
- Scan QR code on the screen
-
-
- 0, 56
-
Close
-
- 264, 22
+
+ ImageAboveText
-
- 0, 21
+
+ 0, 0
-
- 0
+
+ 952, 56
-
- Import bulk URL from clipboard (Ctrl+V)
+
+ 1
+
+
+ tsMain
+
+
+ System.Windows.Forms.ToolStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
$this
-
- Update XrayCore
+
+ 6
-
- toolStripSeparator2
+
+ 125, 22
-
- toolSslSocksPortLab
+
+ Settings
-
- Add a custom configuration server
+
+ 125, 22
+
+
+ Updates
+
+
+ 176, 22
+
+
+ OptionSetting
+
+
+ 176, 22
+
+
+ RoutingSetting
- 177, 6
+ 173, 6
-
- toolSslHttpPort
-
-
- bgwScan
-
-
- System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- 352, 6
-
-
- 3, 17
-
-
- 952, 200
-
-
- statusStrip1
-
-
- System.Windows.Forms.ToolStripDropDownButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- 0, 0
-
-
- Fill
-
-
- tsbV2rayWebsite
-
-
- toolStripSeparator3
+
+ 176, 22
BackupGuiConfig
-
-
- iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
- wwAADsMBx2+oZAAAADJJREFUWEftzrENACAIRUFGdVMdTZkAG4zFXfI68kMAAD8ap9lUbpfyaDV19QAA
- 8FDEBl3RImu5VcdbAAAAAElFTkSuQmCC
-
+
+ 187, 22
-
- 355, 22
+
+ v2rayN Project
-
- 355, 22
+
+ 187, 22
-
- System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+ V2Ray Website
-
- ImageAboveText
+
+ 184, 6
-
- System.Windows.Forms.StatusStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+ 187, 22
+
+
+ Language-[English]
+
+
+ 187, 22
+
+
+ 语言-[中文简体]
-
- 228, 18
-
-
- 603, 17
-
-
- zh-Hans
-
True
65
-
- 137, 17
-
-
- 498, 17
-
-
- 17, 17
-
-
- 409, 17
-
-
- 327, 17
-
+
+ 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
+
+
+ menuRoutings
+
+
+ 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
+
+
+ toolStripSeparator13
+
+
+ System.Windows.Forms.ToolStripSeparator, 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
+
+
+ menuMsgBoxSelectAll
+
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ menuMsgBoxCopy
+
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ menuMsgBoxCopyAll
+
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ menuMsgBoxAddRoutingRule
+
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, 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
+
+
+ toolStripSeparator14
+
+
+ System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ tsbBackupGuiNConfig
+
+
+ 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
+
+
+ tsbCheckUpdateGeoSite
+
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ tsbCheckUpdateGeoIP
+
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ toolStripSeparator15
+
+
+ System.Windows.Forms.ToolStripSeparator, 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
+
\ 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 b51b78f3..8ba53acb 100644
--- a/v2rayN/v2rayN/Forms/MainForm.zh-Hans.resx
+++ b/v2rayN/v2rayN/Forms/MainForm.zh-Hans.resx
@@ -318,15 +318,6 @@
ZW0uRHJhd2luZy5HcmFwaGljc1VuaXQBAAAAB3ZhbHVlX18ACAMAAAADAAAACw==
-
- 196, 170
-
-
- 195, 22
-
-
- 系统代理
-
172, 22
@@ -345,6 +336,12 @@
不改变系统代理
+
+ 195, 22
+
+
+ 系统代理
+
195, 22
@@ -387,15 +384,12 @@
退出
+
+ 196, 170
+
服务器列表
-
- 信息
-
-
- 222, 92
-
221, 22
@@ -420,9 +414,27 @@
快速添加路由规则 (Ctrl+V)
+
+ 222, 92
+
网速显示未启用
+
+ 信息
+
+
+ 124, 22
+
+
+ 订阅设置
+
+
+ 124, 22
+
+
+ 更新订阅
+
61, 53
@@ -435,12 +447,21 @@
分享
+
+ 189, 22
+
参数设置
+
+ 189, 22
+
路由设置
+
+ 186, 6
+
189, 22
@@ -470,12 +491,36 @@
重启服务
+
+ 135, 22
+
+
+ v2rayN
+
+
+ 135, 22
+
+
+ v2fly-Core
+
+
+ 135, 22
+
+
+ Xray-Core
+
85, 53
检查更新
+
+ v2rayN 项目
+
+
+ V2Ray 官网
+
69, 53
@@ -501,40 +546,4 @@
关闭窗口
-
- 124, 22
-
-
- 订阅设置
-
-
- 124, 22
-
-
- 更新订阅
-
-
- 135, 22
-
-
- v2rayN
-
-
- 135, 22
-
-
- v2fly-Core
-
-
- 135, 22
-
-
- Xray-Core
-
-
- v2rayN 项目
-
-
- V2Ray 官网
-
\ No newline at end of file
diff --git a/v2rayN/v2rayN/Global.cs b/v2rayN/v2rayN/Global.cs
index 5fbf1fdc..e5c50c12 100644
--- a/v2rayN/v2rayN/Global.cs
+++ b/v2rayN/v2rayN/Global.cs
@@ -7,7 +7,7 @@ namespace v2rayN
{
#region 常量
-
+ public const string DownloadFileName = "v2ray-windows.zip";
public const string v2rayWebsiteUrl = @"https://www.v2fly.org/";
public const string AboutUrl = @"https://github.com/2dust/v2rayN";
public const string UpdateUrl = AboutUrl + @"/releases";
diff --git a/v2rayN/v2rayN/Handler/DownloadHandle.cs b/v2rayN/v2rayN/Handler/DownloadHandle.cs
index 66612ac8..0bdde6c2 100644
--- a/v2rayN/v2rayN/Handler/DownloadHandle.cs
+++ b/v2rayN/v2rayN/Handler/DownloadHandle.cs
@@ -1,16 +1,7 @@
-using Newtonsoft.Json;
-using System;
-using System.Collections.Generic;
-using System.Diagnostics;
+using System;
using System.IO;
using System.Net;
-using System.Net.Http;
-using System.Text;
-using System.Text.RegularExpressions;
-using System.Threading.Tasks;
using v2rayN.Base;
-using v2rayN.Mode;
-using v2rayN.Properties;
namespace v2rayN.Handler
{
@@ -19,19 +10,10 @@ namespace v2rayN.Handler
///
class DownloadHandle
{
- public event EventHandler AbsoluteCompleted;
-
public event EventHandler UpdateCompleted;
public event ErrorEventHandler Error;
-
- public string DownloadFileName
- {
- get
- {
- return "v2ray-windows.zip";
- }
- }
+
public class ResultEventArgs : EventArgs
{
@@ -49,155 +31,7 @@ namespace v2rayN.Handler
private long totalBytesToReceive = 0;
private DateTime totalDatetime = new DateTime();
private int DownloadTimeout = -1;
-
- #region Check for updates
-
- private readonly string nLatestUrl = Global.NUrl + "/latest";
- private const string nUrl = Global.NUrl + "/download/{0}/v2rayN.zip";
- private readonly string v2flyCoreLatestUrl = Global.v2flyCoreUrl + "/latest";
- private const string v2flyCoreUrl = Global.v2flyCoreUrl + "/download/{0}/v2ray-windows-{1}.zip";
- private readonly string xrayCoreLatestUrl = Global.xrayCoreUrl + "/latest";
- private const string xrayCoreUrl = Global.xrayCoreUrl + "/download/{0}/Xray-windows-{1}.zip";
-
- public async void CheckUpdateAsync(string type)
- {
- Utils.SetSecurityProtocol();
- WebRequestHandler webRequestHandler = new WebRequestHandler
- {
- AllowAutoRedirect = false
- };
- HttpClient httpClient = new HttpClient(webRequestHandler);
-
- string url;
- if (type == "v2fly")
- {
- url = v2flyCoreLatestUrl;
- }
- else if (type == "xray")
- {
- url = xrayCoreLatestUrl;
- }
- else if (type == "v2rayN")
- {
- url = nLatestUrl;
- }
- else
- {
- throw new ArgumentException("Type");
- }
- HttpResponseMessage response = await httpClient.GetAsync(url);
- if (response.StatusCode.ToString() == "Redirect")
- {
- responseHandler(type, response.Headers.Location.ToString());
- }
- else
- {
- Utils.SaveLog("StatusCode error: " + url);
- return;
- }
- }
-
- ///
- /// 获取V2RayCore版本
- ///
- public string getCoreVersion(string type)
- {
- try
- {
- var core = string.Empty;
- var match = string.Empty;
- if (type == "v2fly")
- {
- core = "v2ray.exe";
- match = "V2Ray";
- }
- else if (type == "xray")
- {
- core = "xray.exe";
- match = "Xray";
- }
- string filePath = Utils.GetPath(core);
- if (!File.Exists(filePath))
- {
- string msg = string.Format(UIRes.I18N("NotFoundCore"), @"");
- //ShowMsg(true, msg);
- return "";
- }
-
- Process p = new Process();
- p.StartInfo.FileName = filePath;
- p.StartInfo.Arguments = "-version";
- p.StartInfo.WorkingDirectory = Utils.StartupPath();
- p.StartInfo.UseShellExecute = false;
- p.StartInfo.RedirectStandardOutput = true;
- p.StartInfo.CreateNoWindow = true;
- p.StartInfo.StandardOutputEncoding = Encoding.UTF8;
- p.Start();
- p.WaitForExit(5000);
- string echo = p.StandardOutput.ReadToEnd();
- string version = Regex.Match(echo, $"{match} ([0-9.]+) \\(").Groups[1].Value;
- return version;
- }
- catch (Exception ex)
- {
- Utils.SaveLog(ex.Message, ex);
- return "";
- }
- }
- private void responseHandler(string type, string redirectUrl)
- {
- try
- {
- string version = redirectUrl.Substring(redirectUrl.LastIndexOf("/", StringComparison.Ordinal) + 1);
-
- string curVersion;
- string message;
- string url;
- if (type == "v2fly")
- {
- curVersion = "v" + getCoreVersion(type);
- message = string.Format(UIRes.I18N("IsLatestCore"), curVersion);
- string osBit = Environment.Is64BitProcess ? "64" : "32";
- url = string.Format(v2flyCoreUrl, version, osBit);
- }
- else if (type == "xray")
- {
- curVersion = "v" + getCoreVersion(type);
- message = string.Format(UIRes.I18N("IsLatestCore"), curVersion);
- string osBit = Environment.Is64BitProcess ? "64" : "32";
- url = string.Format(xrayCoreUrl, version, osBit);
- }
- else if (type == "v2rayN")
- {
- curVersion = FileVersionInfo.GetVersionInfo(Utils.GetExePath()).FileVersion.ToString();
- message = string.Format(UIRes.I18N("IsLatestN"), curVersion);
- url = string.Format(nUrl, version);
- }
- else
- {
- throw new ArgumentException("Type");
- }
-
- if (curVersion == version)
- {
- AbsoluteCompleted?.Invoke(this, new ResultEventArgs(false, message));
- return;
- }
-
- AbsoluteCompleted?.Invoke(this, new ResultEventArgs(true, url));
- }
- catch (Exception ex)
- {
- Utils.SaveLog(ex.Message, ex);
-
- Error?.Invoke(this, new ErrorEventArgs(ex));
- }
- }
-
- #endregion
-
- #region Download
-
+
public WebClientEx DownloadFileAsync(string url, WebProxy webProxy, int downloadTimeout)
{
WebClientEx ws = new WebClientEx();
@@ -218,7 +52,7 @@ namespace v2rayN.Handler
ws.DownloadFileCompleted += ws_DownloadFileCompleted;
ws.DownloadProgressChanged += ws_DownloadProgressChanged;
- ws.DownloadFileAsync(new Uri(url), Utils.GetPath(DownloadFileName));
+ ws.DownloadFileAsync(new Uri(url), Utils.GetPath(Global.DownloadFileName));
}
catch (Exception ex)
{
@@ -354,7 +188,6 @@ namespace v2rayN.Handler
return string.Empty;
}
}
- #endregion
}
}
diff --git a/v2rayN/v2rayN/Handler/SpeedtestHandler.cs b/v2rayN/v2rayN/Handler/SpeedtestHandler.cs
index 8532fea4..09fc71e7 100644
--- a/v2rayN/v2rayN/Handler/SpeedtestHandler.cs
+++ b/v2rayN/v2rayN/Handler/SpeedtestHandler.cs
@@ -16,6 +16,10 @@ namespace v2rayN.Handler
private List _selecteds;
Action _updateFunc;
+ public SpeedtestHandler(ref Config config)
+ {
+ _config = config;
+ }
public SpeedtestHandler(ref Config config, ref V2rayHandler v2rayHandler, List selecteds, string actionType, Action update)
{
diff --git a/v2rayN/v2rayN/Handler/UpdateHandle.cs b/v2rayN/v2rayN/Handler/UpdateHandle.cs
new file mode 100644
index 00000000..8b3dd7c6
--- /dev/null
+++ b/v2rayN/v2rayN/Handler/UpdateHandle.cs
@@ -0,0 +1,453 @@
+using System;
+using System.Diagnostics;
+using System.IO;
+using System.Net;
+using System.Net.Http;
+using System.Text;
+using System.Text.RegularExpressions;
+using System.Windows.Forms;
+using v2rayN.Mode;
+
+namespace v2rayN.Handler
+{
+ class UpdateHandle
+ {
+ Action _updateFunc;
+ private Config _config;
+
+ public event EventHandler AbsoluteCompleted;
+
+ public class ResultEventArgs : EventArgs
+ {
+ public bool Success;
+ public string Msg;
+
+ public ResultEventArgs(bool success, string msg)
+ {
+ this.Success = success;
+ this.Msg = msg;
+ }
+ }
+
+ private readonly string nLatestUrl = Global.NUrl + "/latest";
+ private const string nUrl = Global.NUrl + "/download/{0}/v2rayN.zip";
+ private readonly string v2flyCoreLatestUrl = Global.v2flyCoreUrl + "/latest";
+ private const string v2flyCoreUrl = Global.v2flyCoreUrl + "/download/{0}/v2ray-windows-{1}.zip";
+ private readonly string xrayCoreLatestUrl = Global.xrayCoreUrl + "/latest";
+ private const string xrayCoreUrl = Global.xrayCoreUrl + "/download/{0}/Xray-windows-{1}.zip";
+ private const string geoUrl = "https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/{0}.dat";
+
+ public void CheckUpdateGuiN(Config config, Action update)
+ {
+ _config = config;
+ _updateFunc = update;
+
+ DownloadHandle downloadHandle = null;
+ if (downloadHandle == null)
+ {
+ downloadHandle = new DownloadHandle();
+
+ downloadHandle.UpdateCompleted += (sender2, args) =>
+ {
+ if (args.Success)
+ {
+ _updateFunc(false, UIRes.I18N("MsgDownloadV2rayCoreSuccessfully"));
+
+ try
+ {
+ string fileName = Utils.GetPath(Global.DownloadFileName);
+ Process process = new Process
+ {
+ StartInfo = new ProcessStartInfo
+ {
+ FileName = "v2rayUpgrade.exe",
+ Arguments = "\"" + fileName + "\"",
+ WorkingDirectory = Utils.StartupPath()
+ }
+ };
+ process.Start();
+ if (process.Id > 0)
+ {
+ _updateFunc(true, "");
+ }
+ }
+ catch (Exception ex)
+ {
+ _updateFunc(false, ex.Message);
+ }
+ }
+ else
+ {
+ _updateFunc(false, args.Msg);
+ }
+ };
+ downloadHandle.Error += (sender2, args) =>
+ {
+ _updateFunc(false, args.GetException().Message);
+ };
+ }
+ AbsoluteCompleted += (sender2, args) =>
+ {
+ if (args.Success)
+ {
+ _updateFunc(false, string.Format(UIRes.I18N("MsgParsingSuccessfully"), "v2rayN"));
+
+ string url = args.Msg;
+ askToDownload(downloadHandle, url);
+ }
+ else
+ {
+ _updateFunc(false, args.Msg);
+ }
+ };
+ _updateFunc(false, string.Format(UIRes.I18N("MsgStartUpdating"), "v2rayN"));
+ CheckUpdateAsync("v2rayN");
+ }
+
+
+ public void CheckUpdateCore(string type, Config config, Action update)
+ {
+ _config = config;
+ _updateFunc = update;
+
+ DownloadHandle downloadHandle = null;
+ if (downloadHandle == null)
+ {
+ downloadHandle = new DownloadHandle();
+ downloadHandle.UpdateCompleted += (sender2, args) =>
+ {
+ if (args.Success)
+ {
+ _updateFunc(false, UIRes.I18N("MsgDownloadV2rayCoreSuccessfully"));
+ _updateFunc(false, UIRes.I18N("MsgUnpacking"));
+
+ try
+ {
+ _updateFunc(true, "");
+ }
+ catch (Exception ex)
+ {
+ _updateFunc(false, ex.Message);
+ }
+ }
+ else
+ {
+ _updateFunc(false, args.Msg);
+ }
+ };
+ downloadHandle.Error += (sender2, args) =>
+ {
+ _updateFunc(true, args.GetException().Message);
+ };
+ }
+
+ AbsoluteCompleted += (sender2, args) =>
+ {
+ if (args.Success)
+ {
+ _updateFunc(false, string.Format(UIRes.I18N("MsgParsingSuccessfully"), "Core"));
+ string url = args.Msg;
+ askToDownload(downloadHandle, url);
+ }
+ else
+ {
+ _updateFunc(false, args.Msg);
+ }
+ };
+ _updateFunc(false, string.Format(UIRes.I18N("MsgStartUpdating"), "Core"));
+ CheckUpdateAsync(type);
+ }
+
+
+ public void UpdateSubscriptionProcess(Config config, Action update)
+ {
+ _config = config;
+ _updateFunc = update;
+
+ _updateFunc(false, UIRes.I18N("MsgUpdateSubscriptionStart"));
+
+ if (config.subItem == null || config.subItem.Count <= 0)
+ {
+ _updateFunc(false, UIRes.I18N("MsgNoValidSubscription"));
+ return;
+ }
+
+ for (int k = 1; k <= config.subItem.Count; k++)
+ {
+ string id = config.subItem[k - 1].id.Trim();
+ string url = config.subItem[k - 1].url.Trim();
+ string hashCode = $"{k}->";
+ if (config.subItem[k - 1].enabled == false)
+ {
+ continue;
+ }
+ if (Utils.IsNullOrEmpty(id) || Utils.IsNullOrEmpty(url))
+ {
+ _updateFunc(false, $"{hashCode}{UIRes.I18N("MsgNoValidSubscription")}");
+ continue;
+ }
+
+ DownloadHandle downloadHandle3 = new DownloadHandle();
+ downloadHandle3.UpdateCompleted += (sender2, args) =>
+ {
+ if (args.Success)
+ {
+ _updateFunc(false, $"{hashCode}{UIRes.I18N("MsgGetSubscriptionSuccessfully")}");
+ string result = Utils.Base64Decode(args.Msg);
+ if (Utils.IsNullOrEmpty(result))
+ {
+ _updateFunc(false, $"{hashCode}{UIRes.I18N("MsgSubscriptionDecodingFailed")}");
+ return;
+ }
+
+ ConfigHandler.RemoveServerViaSubid(ref config, id);
+ _updateFunc(false, $"{hashCode}{UIRes.I18N("MsgClearSubscription")}");
+ // RefreshServers();
+ int ret = MainFormHandler.Instance.AddBatchServers(config, result, id);
+ if (ret > 0)
+ {
+ // RefreshServers();
+ }
+ else
+ {
+ _updateFunc(false, $"{hashCode}{UIRes.I18N("MsgFailedImportSubscription")}");
+ }
+ _updateFunc(true, $"{hashCode}{UIRes.I18N("MsgUpdateSubscriptionEnd")}");
+ }
+ else
+ {
+ _updateFunc(false, args.Msg);
+ }
+ };
+ downloadHandle3.Error += (sender2, args) =>
+ {
+ _updateFunc(false, args.GetException().Message);
+ };
+
+ downloadHandle3.WebDownloadString(url);
+ _updateFunc(false, $"{hashCode}{UIRes.I18N("MsgStartGettingSubscriptions")}");
+ }
+
+ }
+
+
+ public void UpdateGeoFile(string geoName, Config config, Action update)
+ {
+ _config = config;
+ _updateFunc = update;
+
+ DownloadHandle downloadHandle = null;
+ if (downloadHandle == null)
+ {
+ downloadHandle = new DownloadHandle();
+
+ downloadHandle.UpdateCompleted += (sender2, args) =>
+ {
+ if (args.Success)
+ {
+ _updateFunc(false, UIRes.I18N("MsgDownloadV2rayCoreSuccessfully"));
+
+ try
+ {
+ string fileName = Utils.GetPath(Global.DownloadFileName);
+ if (File.Exists(fileName))
+ {
+ string targetPath = Utils.GetPath($"{geoName}.dat");
+ if (File.Exists(targetPath))
+ {
+ File.Delete(targetPath);
+ }
+ File.Move(fileName, targetPath);
+ _updateFunc(true, "");
+ }
+ }
+ catch (Exception ex)
+ {
+ _updateFunc(false, ex.Message);
+ }
+ }
+ else
+ {
+ _updateFunc(false, args.Msg);
+ }
+ };
+ downloadHandle.Error += (sender2, args) =>
+ {
+ _updateFunc(false, args.GetException().Message);
+ };
+ }
+
+ var url = string.Format(geoUrl, geoName);
+ askToDownload(downloadHandle, url);
+ }
+
+ #region private
+
+ private async void CheckUpdateAsync(string type)
+ {
+ try
+ {
+ Utils.SetSecurityProtocol();
+ WebRequestHandler webRequestHandler = new WebRequestHandler
+ {
+ AllowAutoRedirect = false
+ };
+ HttpClient httpClient = new HttpClient(webRequestHandler);
+
+ string url;
+ if (type == "v2fly")
+ {
+ url = v2flyCoreLatestUrl;
+ }
+ else if (type == "xray")
+ {
+ url = xrayCoreLatestUrl;
+ }
+ else if (type == "v2rayN")
+ {
+ url = nLatestUrl;
+ }
+ else
+ {
+ throw new ArgumentException("Type");
+ }
+ HttpResponseMessage response = await httpClient.GetAsync(url);
+ if (response.StatusCode.ToString() == "Redirect")
+ {
+ responseHandler(type, response.Headers.Location.ToString());
+ }
+ else
+ {
+ Utils.SaveLog("StatusCode error: " + url);
+ return;
+ }
+ }
+ catch (Exception ex)
+ {
+ Utils.SaveLog(ex.Message, ex);
+ _updateFunc(false, ex.Message);
+ }
+ }
+
+ ///
+ /// 获取V2RayCore版本
+ ///
+ private string getCoreVersion(string type)
+ {
+ try
+ {
+ var core = string.Empty;
+ var match = string.Empty;
+ if (type == "v2fly")
+ {
+ core = "v2ray.exe";
+ match = "V2Ray";
+ }
+ else if (type == "xray")
+ {
+ core = "xray.exe";
+ match = "Xray";
+ }
+ string filePath = Utils.GetPath(core);
+ if (!File.Exists(filePath))
+ {
+ string msg = string.Format(UIRes.I18N("NotFoundCore"), @"");
+ //ShowMsg(true, msg);
+ return "";
+ }
+
+ Process p = new Process();
+ p.StartInfo.FileName = filePath;
+ p.StartInfo.Arguments = "-version";
+ p.StartInfo.WorkingDirectory = Utils.StartupPath();
+ p.StartInfo.UseShellExecute = false;
+ p.StartInfo.RedirectStandardOutput = true;
+ p.StartInfo.CreateNoWindow = true;
+ p.StartInfo.StandardOutputEncoding = Encoding.UTF8;
+ p.Start();
+ p.WaitForExit(5000);
+ string echo = p.StandardOutput.ReadToEnd();
+ string version = Regex.Match(echo, $"{match} ([0-9.]+) \\(").Groups[1].Value;
+ return version;
+ }
+ catch (Exception ex)
+ {
+ Utils.SaveLog(ex.Message, ex);
+ _updateFunc(false, ex.Message);
+ return "";
+ }
+ }
+ private void responseHandler(string type, string redirectUrl)
+ {
+ try
+ {
+ string version = redirectUrl.Substring(redirectUrl.LastIndexOf("/", StringComparison.Ordinal) + 1);
+
+ string curVersion;
+ string message;
+ string url;
+ if (type == "v2fly")
+ {
+ curVersion = "v" + getCoreVersion(type);
+ message = string.Format(UIRes.I18N("IsLatestCore"), curVersion);
+ string osBit = Environment.Is64BitProcess ? "64" : "32";
+ url = string.Format(v2flyCoreUrl, version, osBit);
+ }
+ else if (type == "xray")
+ {
+ curVersion = "v" + getCoreVersion(type);
+ message = string.Format(UIRes.I18N("IsLatestCore"), curVersion);
+ string osBit = Environment.Is64BitProcess ? "64" : "32";
+ url = string.Format(xrayCoreUrl, version, osBit);
+ }
+ else if (type == "v2rayN")
+ {
+ curVersion = FileVersionInfo.GetVersionInfo(Utils.GetExePath()).FileVersion.ToString();
+ message = string.Format(UIRes.I18N("IsLatestN"), curVersion);
+ url = string.Format(nUrl, version);
+ }
+ else
+ {
+ throw new ArgumentException("Type");
+ }
+
+ if (curVersion == version)
+ {
+ AbsoluteCompleted?.Invoke(this, new ResultEventArgs(false, message));
+ return;
+ }
+
+ AbsoluteCompleted?.Invoke(this, new ResultEventArgs(true, url));
+ }
+ catch (Exception ex)
+ {
+ Utils.SaveLog(ex.Message, ex);
+ _updateFunc(false, ex.Message);
+ }
+ }
+
+ private void askToDownload(DownloadHandle downloadHandle, string url)
+ {
+ if (UI.ShowYesNo(string.Format(UIRes.I18N("DownloadYesNo"), url)) == DialogResult.Yes)
+ {
+ if (httpProxyTest() > 0)
+ {
+ int httpPort = _config.GetLocalPort(Global.InboundHttp);
+ WebProxy webProxy = new WebProxy(Global.Loopback, httpPort);
+ downloadHandle.DownloadFileAsync(url, webProxy, 600);
+ }
+ else
+ {
+ downloadHandle.DownloadFileAsync(url, null, 600);
+ }
+ }
+ }
+
+ private int httpProxyTest()
+ {
+ SpeedtestHandler statistics = new SpeedtestHandler(ref _config);
+ return statistics.RunAvailabilityCheck();
+ }
+ #endregion
+ }
+}
diff --git a/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs b/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs
index bd4da3f0..0e9ba524 100644
--- a/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs
+++ b/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs
@@ -249,8 +249,12 @@ namespace v2rayN.Handler
var it = Utils.DeepCopy(rules);
it.ip = null;
it.type = "field";
- for (int k = 0; k < it.domain.Count; k++)
+ for (int k = it.domain.Count - 1; k >= 0; k--)
{
+ if (it.domain[k].StartsWith("#"))
+ {
+ it.domain.RemoveAt(k);
+ }
it.domain[k] = it.domain[k].Replace(Global.RoutingRuleComma, ",");
}
//if (Utils.IsNullOrEmpty(it.port))
@@ -704,7 +708,7 @@ namespace v2rayN.Handler
break;
case "grpc":
var grpcSettings = new GrpcSettings();
-
+
grpcSettings.serviceName = config.path();
streamSettings.grpcSettings = grpcSettings;
break;
diff --git a/v2rayN/v2rayN/Properties/AssemblyInfo.cs b/v2rayN/v2rayN/Properties/AssemblyInfo.cs
index 8b248492..d4384b65 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.15")]
+[assembly: AssemblyFileVersion("4.16")]
diff --git a/v2rayN/v2rayN/Tool/Utils.cs b/v2rayN/v2rayN/Tool/Utils.cs
index 4731aba3..522db7c8 100644
--- a/v2rayN/v2rayN/Tool/Utils.cs
+++ b/v2rayN/v2rayN/Tool/Utils.cs
@@ -766,9 +766,9 @@ namespace v2rayN
try
{
IDataObject data = Clipboard.GetDataObject();
- if (data.GetDataPresent(DataFormats.Text))
+ if (data.GetDataPresent(DataFormats.UnicodeText))
{
- strData = data.GetData(DataFormats.Text).ToString();
+ strData = data.GetData(DataFormats.UnicodeText).ToString();
}
return strData;
}
diff --git a/v2rayN/v2rayN/v2rayN.csproj b/v2rayN/v2rayN/v2rayN.csproj
index 2f87020d..41818af2 100644
--- a/v2rayN/v2rayN/v2rayN.csproj
+++ b/v2rayN/v2rayN/v2rayN.csproj
@@ -138,6 +138,7 @@
RoutingRuleSettingForm.cs
+
Form