Compare commits

...

71 Commits
4.15 ... 4.33

Author SHA1 Message Date
2dust
b2d538d02a Update AssemblyInfo.cs 2022-02-23 18:59:11 +08:00
2dust
b9435a4b01 Automatically adjust column width after updating subscription 2022-02-23 17:31:32 +08:00
2dust
d27566686c add network data check 2022-02-23 10:01:35 +08:00
2dust
ca883c164d Update Subscription via proxy, add default user-agent 2022-02-20 15:16:00 +08:00
2dust
0f6cd76f28 Update AssemblyInfo.cs 2022-02-14 08:59:11 +08:00
2dust
7778af65aa re-add alterId 2022-02-14 08:58:43 +08:00
2dust
828246130b Update v2rayN.csproj 2022-02-12 19:54:48 +08:00
2dust
4eb1801f50 Update AssemblyInfo.cs 2022-02-12 19:53:41 +08:00
2dust
80b68dcf84 fix some bugs 2022-02-12 19:53:26 +08:00
2dust
685baa576b Update AssemblyInfo.cs 2022-02-03 20:57:29 +08:00
2dust
7cdead8cb1 Optimized config 2022-02-03 20:57:02 +08:00
2dust
f220825b80 add xtls Flows 2022-02-03 17:45:09 +08:00
2dust
2b00490dd6 re-add alterId 2022-02-03 17:19:53 +08:00
2dust
d361afa3f3 Improve server test 2022-01-28 21:07:07 +08:00
2dust
8d5bd5a80c Improve server test 2022-01-28 21:05:41 +08:00
2dust
002283899f add VmessItem indexId 2022-01-28 21:02:25 +08:00
2dust
206b440966 add vmess Securitys 2022-01-28 20:58:28 +08:00
2dust
b5b5eb25a1 Enhanced share link 2022-01-23 19:18:20 +08:00
2dust
f84e538b6a Update MainFormHandler.cs 2022-01-23 19:16:24 +08:00
2dust
5b9cdec156 remove alterId 2022-01-23 19:16:14 +08:00
2dust
cf0bd7f1e6 up 4.29 2022-01-12 21:06:32 +08:00
2dust
f3a86a2173 Added port in used check at speedtest 2022-01-12 21:06:22 +08:00
2dust
0a1d4d5193 Add tls13 settings in the registry 2022-01-12 21:05:03 +08:00
2dust
88e2288298 Added tls display to the main form 2022-01-12 21:04:10 +08:00
2dust
fec47d4b72 add alpn/userAgent/ 2022-01-08 20:27:36 +08:00
2dust
f7f23e7980 Update AssemblyInfo.cs 2021-12-26 17:44:53 +08:00
2dust
32100db3fc Some improvements 2021-12-26 17:44:36 +08:00
2dust
dd2bed49f1 Update AssemblyInfo.cs 2021-12-19 20:48:20 +08:00
2dust
6a427a2158 Join log4net 2021-12-19 20:47:58 +08:00
2dust
716029def8 DNS settings check 2021-12-19 20:47:19 +08:00
2dust
610a610ee0 Enhanced trojan settings 2021-12-19 20:46:54 +08:00
2dust
4fc0738dad Routing rule display 2021-12-02 19:39:02 +08:00
2dust
fe29771870 Routing rule add custom icon 2021-12-02 18:04:22 +08:00
2dust
19be43d2d9 Update AssemblyInfo.cs 2021-12-02 16:48:15 +08:00
2dust
cb01809093 Optimize Duplicate Server 2021-12-02 16:47:35 +08:00
2dust
1138d660b2 Routing rule add custom icon 2021-12-02 16:05:54 +08:00
2dust
c29ccf76d5 Update AssemblyInfo.cs 2021-11-17 20:54:40 +08:00
2dust
5907bf388c Speed test via memory storage 2021-11-17 20:54:19 +08:00
2dust
54adaffb92 Optimize performance 2021-11-17 20:52:45 +08:00
2dust
3bc7812e1a Update AssemblyInfo.cs 2021-10-16 20:50:27 +08:00
2dust
16cd9706f9 Automatically update the geo file time from minutes to hours 2021-10-16 20:49:28 +08:00
2dust
839d07870c Loading GUI configuration file is abnormal 2021-10-16 20:16:50 +08:00
2dust
933d3c2678 add auto update geo task 2021-10-10 20:16:30 +08:00
2dust
a29b744526 Merge branch 'master' of https://github.com/2dust/v2rayN 2021-10-10 11:04:53 +08:00
2dust
c4070b26ff add Blacklist rules 2021-10-10 11:04:50 +08:00
2dust
6d0b4e8c75 Update README.md 2021-10-10 07:40:48 +08:00
2dust
058e1aafd1 Automatically backup configuration files at startup 2021-10-04 20:14:18 +08:00
2dust
eac7361a0b rule add enabled 2021-10-03 20:19:54 +08:00
2dust
64e6d6d038 Upgrade .net framework version from 4.6 to 4.8 2021-10-03 16:41:07 +08:00
2dust
d613fe79af Upgrade .net framework version from 4.6 to 4.8 2021-10-03 16:39:57 +08:00
2dust
565a7b1680 Optimize storage performance 2021-10-03 16:36:48 +08:00
2dust
5076f45674 fix upgrade bug 2021-10-03 16:35:53 +08:00
2dust
dc72c949c3 Merge pull request #1754 from Yurunsoft/fix-autorun
Fix autorun
2021-09-29 20:10:34 +08:00
Yurun
c85e418afa Fix autorun 2021-08-23 08:46:31 +08:00
2dust
2fc3e846df up4.20 2021-07-07 20:41:13 +08:00
2dust
a665dc9db7 up 4.19 2021-07-03 16:34:41 +08:00
2dust
672eb4b365 Merge pull request #1647 from z0ow/master
使用正则表达式作为过滤器,增强实用性
2021-06-28 11:34:20 +08:00
Owen Chang
c9a150565d 使用正则表达式作为过滤器,增强实用性 2021-06-25 12:32:37 +08:00
2dust
5b271108c0 Update AssemblyInfo.cs 2021-05-23 20:38:28 +08:00
2dust
8b63a19161 add grpc mode 2021-05-23 20:25:22 +08:00
2dust
0d17a112a6 fix 2021-05-23 19:09:41 +08:00
2dust
d997633810 fix 2021-05-23 18:58:39 +08:00
2dust
446e981d0e Merge pull request #1594 from windfallw/dev
routing rule: add inboundTag
2021-05-23 18:39:36 +08:00
2dust
dabca02b18 Merge branch 'master' of https://github.com/2dust/v2rayN 2021-05-23 18:37:25 +08:00
2dust
790bd1217c add message filter 2021-05-23 18:34:30 +08:00
2dust
43d8515e23 remove something 2021-05-23 18:34:12 +08:00
windfallw
bcd051e5a3 routing rule: add inboundTag 2021-05-23 16:28:54 +08:00
2dust
1a1e08753f Merge pull request #1582 from pzhlkj6612/correct-geofile-download-progress-log-content
更正下载 GeoFile 之后的日志信息
2021-05-17 11:22:50 +08:00
Mozi
d46838eb55 Correct log info after downloading GeoFiles
They are not the Core.
2021-05-17 10:06:31 +08:00
2dust
a70b5eeef5 up4.17 2021-05-15 11:53:39 +08:00
2dust
7513ff860b up4.16 2021-05-13 20:51:20 +08:00
90 changed files with 10100 additions and 10226 deletions

View File

@@ -6,5 +6,5 @@
- Run v2rayN.exe
### Requirements
- Microsoft [.NET Framework 4.6](https://docs.microsoft.com/zh-cn/dotnet/framework/install/guide-for-developers) or higher
- Microsoft [.NET Framework 4.8](https://docs.microsoft.com/zh-cn/dotnet/framework/install/guide-for-developers)
- Project V core [https://github.com/v2fly/v2ray-core/releases](https://github.com/v2fly/v2ray-core/releases)

View File

@@ -45,25 +45,20 @@
this.panel2 = new System.Windows.Forms.Panel();
this.btnOK = new System.Windows.Forms.Button();
this.panel1 = new System.Windows.Forms.Panel();
this.menuServer = new System.Windows.Forms.MenuStrip();
this.MenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
this.menuItemImportClipboard = new System.Windows.Forms.ToolStripMenuItem();
this.groupBox1.SuspendLayout();
this.panel2.SuspendLayout();
this.menuServer.SuspendLayout();
this.SuspendLayout();
//
// btnClose
//
resources.ApplyResources(this.btnClose, "btnClose");
this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel;
resources.ApplyResources(this.btnClose, "btnClose");
this.btnClose.Name = "btnClose";
this.btnClose.UseVisualStyleBackColor = true;
this.btnClose.Click += new System.EventHandler(this.btnClose_Click);
//
// groupBox1
//
resources.ApplyResources(this.groupBox1, "groupBox1");
this.groupBox1.Controls.Add(this.label13);
this.groupBox1.Controls.Add(this.cmbSecurity);
this.groupBox1.Controls.Add(this.txtRemarks);
@@ -75,6 +70,7 @@
this.groupBox1.Controls.Add(this.label2);
this.groupBox1.Controls.Add(this.txtAddress);
this.groupBox1.Controls.Add(this.label1);
resources.ApplyResources(this.groupBox1, "groupBox1");
this.groupBox1.Name = "groupBox1";
this.groupBox1.TabStop = false;
//
@@ -85,16 +81,9 @@
//
// cmbSecurity
//
resources.ApplyResources(this.cmbSecurity, "cmbSecurity");
this.cmbSecurity.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cmbSecurity.FormattingEnabled = true;
this.cmbSecurity.Items.AddRange(new object[] {
resources.GetString("cmbSecurity.Items"),
resources.GetString("cmbSecurity.Items1"),
resources.GetString("cmbSecurity.Items2"),
resources.GetString("cmbSecurity.Items3"),
resources.GetString("cmbSecurity.Items4"),
resources.GetString("cmbSecurity.Items5")});
resources.ApplyResources(this.cmbSecurity, "cmbSecurity");
this.cmbSecurity.Name = "cmbSecurity";
//
// txtRemarks
@@ -144,9 +133,9 @@
//
// panel2
//
resources.ApplyResources(this.panel2, "panel2");
this.panel2.Controls.Add(this.btnClose);
this.panel2.Controls.Add(this.btnOK);
resources.ApplyResources(this.panel2, "panel2");
this.panel2.Name = "panel2";
//
// btnOK
@@ -161,26 +150,6 @@
resources.ApplyResources(this.panel1, "panel1");
this.panel1.Name = "panel1";
//
// menuServer
//
resources.ApplyResources(this.menuServer, "menuServer");
this.menuServer.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.MenuItem1});
this.menuServer.Name = "menuServer";
//
// MenuItem1
//
resources.ApplyResources(this.MenuItem1, "MenuItem1");
this.MenuItem1.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.menuItemImportClipboard});
this.MenuItem1.Name = "MenuItem1";
//
// menuItemImportClipboard
//
resources.ApplyResources(this.menuItemImportClipboard, "menuItemImportClipboard");
this.menuItemImportClipboard.Name = "menuItemImportClipboard";
this.menuItemImportClipboard.Click += new System.EventHandler(this.menuItemImportClipboard_Click);
//
// AddServer3Form
//
resources.ApplyResources(this, "$this");
@@ -189,7 +158,6 @@
this.Controls.Add(this.groupBox1);
this.Controls.Add(this.panel2);
this.Controls.Add(this.panel1);
this.Controls.Add(this.menuServer);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
this.MinimizeBox = true;
this.Name = "AddServer3Form";
@@ -197,10 +165,7 @@
this.groupBox1.ResumeLayout(false);
this.groupBox1.PerformLayout();
this.panel2.ResumeLayout(false);
this.menuServer.ResumeLayout(false);
this.menuServer.PerformLayout();
this.ResumeLayout(false);
this.PerformLayout();
}
@@ -222,8 +187,5 @@
private System.Windows.Forms.Panel panel1;
private System.Windows.Forms.Panel panel2;
private System.Windows.Forms.Label label13;
private System.Windows.Forms.MenuStrip menuServer;
private System.Windows.Forms.ToolStripMenuItem MenuItem1;
private System.Windows.Forms.ToolStripMenuItem menuItemImportClipboard;
}
}

View File

@@ -15,6 +15,7 @@ namespace v2rayN.Forms
private void AddServer3Form_Load(object sender, EventArgs e)
{
cmbSecurity.Items.AddRange(Global.ssSecuritys.ToArray());
if (EditIndex >= 0)
{
vmessItem = config.vmess[EditIndex];
@@ -100,41 +101,7 @@ namespace v2rayN.Forms
private void btnClose_Click(object sender, EventArgs e)
{
this.DialogResult = DialogResult.Cancel;
}
#region
/// <summary>
/// 从剪贴板导入URL
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void menuItemImportClipboard_Click(object sender, EventArgs e)
{
ImportConfig();
}
private void ImportConfig()
{
ClearServer();
VmessItem vmessItem = ShareHandler.ImportFromClipboardConfig(Utils.GetClipboardData(), out string msg);
if (vmessItem == null)
{
UI.ShowWarning(msg);
return;
}
txtAddress.Text = vmessItem.address;
txtPort.Text = vmessItem.port.ToString();
cmbSecurity.Text = vmessItem.security;
txtId.Text = vmessItem.id;
txtRemarks.Text = vmessItem.remarks;
}
#endregion
}
}
}

View File

@@ -118,486 +118,417 @@
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="label13.Size" type="System.Drawing.Size, System.Drawing">
<value>113, 12</value>
<data name="btnClose.Location" type="System.Drawing.Point, System.Drawing">
<value>396, 17</value>
</data>
<data name="label3.Size" type="System.Drawing.Size, System.Drawing">
<value>53, 12</value>
</data>
<data name="&gt;&gt;label6.Name" xml:space="preserve">
<value>label6</value>
</data>
<data name="&gt;&gt;cmbSecurity.Parent" xml:space="preserve">
<value>groupBox1</value>
</data>
<data name="&gt;&gt;label5.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="menuServer.Size" type="System.Drawing.Size, System.Drawing">
<value>547, 25</value>
<data name="btnClose.Size" type="System.Drawing.Size, System.Drawing">
<value>75, 23</value>
</data>
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="txtRemarks.TabIndex" type="System.Int32, mscorlib">
<value>11</value>
<data name="btnClose.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="btnClose.Text" xml:space="preserve">
<value>&amp;Cancel</value>
</data>
<data name="&gt;&gt;btnClose.Name" xml:space="preserve">
<value>btnClose</value>
</data>
<data name="&gt;&gt;btnClose.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;btnClose.Parent" xml:space="preserve">
<value>panel2</value>
</data>
<data name="&gt;&gt;btnClose.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="label13.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="label13.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="&gt;&gt;menuServer.Parent" xml:space="preserve">
<value>$this</value>
<data name="label13.Location" type="System.Drawing.Point, System.Drawing">
<value>426, 158</value>
</data>
<data name="label13.Size" type="System.Drawing.Size, System.Drawing">
<value>113, 12</value>
</data>
<data name="label13.TabIndex" type="System.Int32, mscorlib">
<value>22</value>
</data>
<data name="label13.Text" xml:space="preserve">
<value>* Fill in manually</value>
</data>
<data name="&gt;&gt;label13.Name" xml:space="preserve">
<value>label13</value>
</data>
<data name="&gt;&gt;label13.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;label13.Parent" xml:space="preserve">
<value>groupBox1</value>
</data>
<data name="label5.TabIndex" type="System.Int32, mscorlib">
<value>8</value>
<data name="&gt;&gt;label13.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="panel2.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Bottom</value>
<data name="cmbSecurity.Location" type="System.Drawing.Point, System.Drawing">
<value>127, 123</value>
</data>
<data name="MenuItem1.Text" xml:space="preserve">
<value>Import configuration file</value>
<data name="cmbSecurity.Size" type="System.Drawing.Size, System.Drawing">
<value>278, 20</value>
</data>
<data name="cmbSecurity.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
</data>
<data name="&gt;&gt;cmbSecurity.Name" xml:space="preserve">
<value>cmbSecurity</value>
</data>
<data name="&gt;&gt;cmbSecurity.Type" xml:space="preserve">
<value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;cmbSecurity.Parent" xml:space="preserve">
<value>groupBox1</value>
</data>
<data name="&gt;&gt;cmbSecurity.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="txtRemarks.Location" type="System.Drawing.Point, System.Drawing">
<value>127, 154</value>
</data>
<data name="txtRemarks.Size" type="System.Drawing.Size, System.Drawing">
<value>278, 21</value>
</data>
<data name="txtRemarks.TabIndex" type="System.Int32, mscorlib">
<value>4</value>
</data>
<data name="&gt;&gt;txtRemarks.Name" xml:space="preserve">
<value>txtRemarks</value>
</data>
<data name="&gt;&gt;txtRemarks.Type" xml:space="preserve">
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;txtRemarks.Parent" xml:space="preserve">
<value>groupBox1</value>
</data>
<data name="&gt;&gt;txtRemarks.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="label6.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="label6.Location" type="System.Drawing.Point, System.Drawing">
<value>12, 155</value>
</data>
<data name="label6.Size" type="System.Drawing.Size, System.Drawing">
<value>95, 12</value>
</data>
<data name="label6.TabIndex" type="System.Int32, mscorlib">
<value>10</value>
</data>
<data name="label6.Text" xml:space="preserve">
<value>Alias (remarks)</value>
</data>
<data name="groupBox1.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
<data name="&gt;&gt;label6.Name" xml:space="preserve">
<value>label6</value>
</data>
<data name="label3.Text" xml:space="preserve">
<value>Password</value>
</data>
<data name="&gt;&gt;label1.Type" xml:space="preserve">
<data name="&gt;&gt;label6.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;label6.Parent" xml:space="preserve">
<value>groupBox1</value>
</data>
<data name="&gt;&gt;label2.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<data name="&gt;&gt;label6.ZOrder" xml:space="preserve">
<value>3</value>
</data>
<data name="&gt;&gt;menuItemImportClipboard.Name" xml:space="preserve">
<value>menuItemImportClipboard</value>
<data name="label5.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="groupBox1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
<data name="label5.Location" type="System.Drawing.Point, System.Drawing">
<value>12, 124</value>
</data>
<data name="&gt;&gt;label3.Parent" xml:space="preserve">
<value>groupBox1</value>
<data name="label5.Size" type="System.Drawing.Size, System.Drawing">
<value>65, 12</value>
</data>
<data name="menuServer.TabIndex" type="System.Int32, mscorlib">
<data name="label5.TabIndex" type="System.Int32, mscorlib">
<value>8</value>
</data>
<data name="label1.Size" type="System.Drawing.Size, System.Drawing">
<value>89, 12</value>
</data>
<data name="txtAddress.Location" type="System.Drawing.Point, System.Drawing">
<value>127, 27</value>
</data>
<data name="&gt;&gt;menuServer.Type" xml:space="preserve">
<value>System.Windows.Forms.MenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;label13.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="cmbSecurity.Items" xml:space="preserve">
<value>aes-256-gcm</value>
</data>
<data name="cmbSecurity.TabIndex" type="System.Int32, mscorlib">
<value>6</value>
</data>
<data name="txtId.TabIndex" type="System.Int32, mscorlib">
<value>5</value>
</data>
<data name="btnOK.Location" type="System.Drawing.Point, System.Drawing">
<value>303, 17</value>
</data>
<data name="&gt;&gt;panel1.Type" xml:space="preserve">
<value>System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="label3.TabIndex" type="System.Int32, mscorlib">
<value>4</value>
</data>
<data name="&gt;&gt;MenuItem1.Name" xml:space="preserve">
<value>MenuItem1</value>
</data>
<data name="&gt;&gt;btnClose.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="txtAddress.Size" type="System.Drawing.Size, System.Drawing">
<value>359, 21</value>
</data>
<data name="&gt;&gt;txtAddress.Type" xml:space="preserve">
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="btnClose.Location" type="System.Drawing.Point, System.Drawing">
<value>396, 17</value>
</data>
<data name="&gt;&gt;label2.ZOrder" xml:space="preserve">
<value>8</value>
</data>
<data name="menuServer.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 0</value>
</data>
<data name="&gt;&gt;label1.Name" xml:space="preserve">
<value>label1</value>
</data>
<data name="panel2.Size" type="System.Drawing.Size, System.Drawing">
<value>547, 60</value>
</data>
<data name="panel1.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 25</value>
</data>
<data name="label5.Text" xml:space="preserve">
<value>Encryption</value>
</data>
<data name="&gt;&gt;txtRemarks.Parent" xml:space="preserve">
<value>groupBox1</value>
<data name="&gt;&gt;label5.Name" xml:space="preserve">
<value>label5</value>
</data>
<data name="label2.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="label13.TabIndex" type="System.Int32, mscorlib">
<value>22</value>
</data>
<data name="MenuItem1.Size" type="System.Drawing.Size, System.Drawing">
<value>162, 21</value>
</data>
<data name="cmbSecurity.Location" type="System.Drawing.Point, System.Drawing">
<value>127, 123</value>
</data>
<data name="txtId.Location" type="System.Drawing.Point, System.Drawing">
<value>127, 91</value>
<data name="&gt;&gt;label5.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;label5.Parent" xml:space="preserve">
<value>groupBox1</value>
</data>
<data name="&gt;&gt;btnOK.Parent" xml:space="preserve">
<value>panel2</value>
<data name="&gt;&gt;label5.ZOrder" xml:space="preserve">
<value>4</value>
</data>
<data name="btnOK.TabIndex" type="System.Int32, mscorlib">
<value>5</value>
<data name="txtId.Location" type="System.Drawing.Point, System.Drawing">
<value>127, 91</value>
</data>
<data name="&gt;&gt;panel1.ZOrder" xml:space="preserve">
<data name="txtId.Size" type="System.Drawing.Size, System.Drawing">
<value>278, 21</value>
</data>
<data name="txtId.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="&gt;&gt;txtId.Parent" xml:space="preserve">
<value>groupBox1</value>
</data>
<data name="label3.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="&gt;&gt;label5.Name" xml:space="preserve">
<value>label5</value>
</data>
<data name="&gt;&gt;txtId.Name" xml:space="preserve">
<value>txtId</value>
</data>
<data name="&gt;&gt;txtId.Type" xml:space="preserve">
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;txtRemarks.Type" xml:space="preserve">
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="label1.Location" type="System.Drawing.Point, System.Drawing">
<value>12, 31</value>
</data>
<data name="&gt;&gt;groupBox1.Name" xml:space="preserve">
<data name="&gt;&gt;txtId.Parent" xml:space="preserve">
<value>groupBox1</value>
</data>
<data name="&gt;&gt;btnOK.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>AddServer3Form</value>
</data>
<data name="txtRemarks.Size" type="System.Drawing.Size, System.Drawing">
<value>278, 21</value>
</data>
<data name="&gt;&gt;txtPort.Parent" xml:space="preserve">
<value>groupBox1</value>
</data>
<data name="txtPort.Location" type="System.Drawing.Point, System.Drawing">
<value>127, 59</value>
</data>
<data name="&gt;&gt;groupBox1.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="&gt;&gt;btnOK.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;btnOK.Name" xml:space="preserve">
<value>btnOK</value>
</data>
<data name="&gt;&gt;groupBox1.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="label2.Size" type="System.Drawing.Size, System.Drawing">
<value>71, 12</value>
</data>
<data name="&gt;&gt;MenuItem1.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;panel1.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="label5.Location" type="System.Drawing.Point, System.Drawing">
<value>12, 124</value>
</data>
<data name="label2.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="&gt;&gt;label2.Parent" xml:space="preserve">
<value>groupBox1</value>
</data>
<data name="&gt;&gt;txtPort.Name" xml:space="preserve">
<value>txtPort</value>
</data>
<data name="cmbSecurity.Items1" xml:space="preserve">
<value>aes-128-gcm</value>
</data>
<data name="&gt;&gt;txtPort.ZOrder" xml:space="preserve">
<value>7</value>
</data>
<data name="panel1.Size" type="System.Drawing.Size, System.Drawing">
<value>547, 10</value>
</data>
<data name="groupBox1.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 35</value>
</data>
<data name="&gt;&gt;txtId.ZOrder" xml:space="preserve">
<value>5</value>
</data>
<data name="menuItemImportClipboard.Size" type="System.Drawing.Size, System.Drawing">
<value>235, 22</value>
</data>
<data name="&gt;&gt;menuItemImportClipboard.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="$this.Text" xml:space="preserve">
<value>Edit or add a [Shadowsocks] server</value>
</data>
<data name="btnOK.Text" xml:space="preserve">
<value>&amp;OK</value>
</data>
<data name="cmbSecurity.Items2" xml:space="preserve">
<value>chacha20-poly1305</value>
</data>
<data name="&gt;&gt;cmbSecurity.Type" xml:space="preserve">
<value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="btnOK.Size" type="System.Drawing.Size, System.Drawing">
<value>75, 23</value>
</data>
<data name="&gt;&gt;btnClose.Name" xml:space="preserve">
<value>btnClose</value>
</data>
<data name="&gt;&gt;btnClose.Parent" xml:space="preserve">
<value>panel2</value>
</data>
<data name="label1.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="&gt;&gt;menuServer.ZOrder" xml:space="preserve">
<value>3</value>
<data name="label3.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="label3.Location" type="System.Drawing.Point, System.Drawing">
<value>12, 93</value>
</data>
<data name="cmbSecurity.Size" type="System.Drawing.Size, System.Drawing">
<value>278, 20</value>
<data name="label3.Size" type="System.Drawing.Size, System.Drawing">
<value>53, 12</value>
</data>
<data name="label6.TabIndex" type="System.Int32, mscorlib">
<value>10</value>
<data name="label3.TabIndex" type="System.Int32, mscorlib">
<value>4</value>
</data>
<data name="cmbSecurity.Items3" xml:space="preserve">
<value>chacha20-ietf-poly1305</value>
<data name="label3.Text" xml:space="preserve">
<value>Password</value>
</data>
<data name="label6.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
<data name="&gt;&gt;label3.Name" xml:space="preserve">
<value>label3</value>
</data>
<data name="&gt;&gt;panel2.Name" xml:space="preserve">
<value>panel2</value>
</data>
<data name="&gt;&gt;label13.Type" xml:space="preserve">
<data name="&gt;&gt;label3.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;label3.Parent" xml:space="preserve">
<value>groupBox1</value>
</data>
<data name="&gt;&gt;label3.ZOrder" xml:space="preserve">
<value>6</value>
</data>
<data name="txtPort.Location" type="System.Drawing.Point, System.Drawing">
<value>127, 59</value>
</data>
<data name="txtPort.Size" type="System.Drawing.Size, System.Drawing">
<value>194, 21</value>
</data>
<data name="txtAddress.TabIndex" type="System.Int32, mscorlib">
<data name="txtPort.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="&gt;&gt;btnClose.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<data name="&gt;&gt;txtPort.Name" xml:space="preserve">
<value>txtPort</value>
</data>
<data name="panel1.TabIndex" type="System.Int32, mscorlib">
<value>6</value>
<data name="&gt;&gt;txtPort.Type" xml:space="preserve">
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;panel2.ZOrder" xml:space="preserve">
<value>1</value>
<data name="&gt;&gt;txtPort.Parent" xml:space="preserve">
<value>groupBox1</value>
</data>
<data name="panel2.TabIndex" type="System.Int32, mscorlib">
<data name="&gt;&gt;txtPort.ZOrder" xml:space="preserve">
<value>7</value>
</data>
<data name="&gt;&gt;label13.Name" xml:space="preserve">
<value>label13</value>
<data name="label2.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="cmbSecurity.Items4" xml:space="preserve">
<value>none</value>
<data name="label2.Location" type="System.Drawing.Point, System.Drawing">
<value>12, 62</value>
</data>
<data name="&gt;&gt;label6.Type" xml:space="preserve">
<data name="label2.Size" type="System.Drawing.Size, System.Drawing">
<value>71, 12</value>
</data>
<data name="label2.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="label2.Text" xml:space="preserve">
<value>Server port</value>
</data>
<data name="&gt;&gt;label2.Name" xml:space="preserve">
<value>label2</value>
</data>
<data name="&gt;&gt;label2.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;label2.Parent" xml:space="preserve">
<value>groupBox1</value>
</data>
<data name="&gt;&gt;label2.ZOrder" xml:space="preserve">
<value>8</value>
</data>
<data name="txtAddress.Location" type="System.Drawing.Point, System.Drawing">
<value>127, 27</value>
</data>
<data name="txtAddress.Size" type="System.Drawing.Size, System.Drawing">
<value>359, 21</value>
</data>
<data name="txtAddress.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="&gt;&gt;txtAddress.Name" xml:space="preserve">
<value>txtAddress</value>
</data>
<data name="&gt;&gt;txtAddress.Type" xml:space="preserve">
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;txtAddress.Parent" xml:space="preserve">
<value>groupBox1</value>
</data>
<data name="&gt;&gt;txtAddress.ZOrder" xml:space="preserve">
<value>9</value>
</data>
<data name="label1.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="label1.Location" type="System.Drawing.Point, System.Drawing">
<value>12, 31</value>
</data>
<data name="label1.Size" type="System.Drawing.Size, System.Drawing">
<value>89, 12</value>
</data>
<data name="label1.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="label1.Text" xml:space="preserve">
<value>Server address</value>
</data>
<data name="&gt;&gt;label1.Name" xml:space="preserve">
<value>label1</value>
</data>
<data name="&gt;&gt;label1.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;label1.Parent" xml:space="preserve">
<value>groupBox1</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>v2rayN.Forms.BaseServerForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;label3.Name" xml:space="preserve">
<value>label3</value>
</data>
<data name="label2.Text" xml:space="preserve">
<value>Server port</value>
</data>
<data name="&gt;&gt;panel2.Type" xml:space="preserve">
<value>System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="panel1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Top</value>
</data>
<data name="panel2.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 231</value>
</data>
<data name="&gt;&gt;txtAddress.ZOrder" xml:space="preserve">
<value>9</value>
</data>
<data name="cmbSecurity.Items5" xml:space="preserve">
<value>plain</value>
</data>
<data name="&gt;&gt;label5.ZOrder" xml:space="preserve">
<value>4</value>
</data>
<data name="btnClose.Text" xml:space="preserve">
<value>&amp;Cancel</value>
</data>
<data name="label13.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
<value>6, 12</value>
</data>
<data name="label5.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="label1.Text" xml:space="preserve">
<value>Server address</value>
</data>
<data name="&gt;&gt;menuServer.Name" xml:space="preserve">
<value>menuServer</value>
</data>
<data name="&gt;&gt;txtPort.Type" xml:space="preserve">
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="txtRemarks.Location" type="System.Drawing.Point, System.Drawing">
<value>127, 154</value>
</data>
<data name="label6.Size" type="System.Drawing.Size, System.Drawing">
<value>95, 12</value>
</data>
<data name="&gt;&gt;label3.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="label13.Text" xml:space="preserve">
<value>* Fill in manually</value>
</data>
<data name="&gt;&gt;label1.ZOrder" xml:space="preserve">
<value>10</value>
</data>
<data name="&gt;&gt;label2.Name" xml:space="preserve">
<value>label2</value>
<data name="groupBox1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="&gt;&gt;panel1.Name" xml:space="preserve">
<value>panel1</value>
</data>
<data name="label2.Location" type="System.Drawing.Point, System.Drawing">
<value>12, 62</value>
</data>
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
<value>547, 291</value>
</data>
<data name="&gt;&gt;cmbSecurity.Name" xml:space="preserve">
<value>cmbSecurity</value>
</data>
<data name="&gt;&gt;panel2.Parent" xml:space="preserve">
<value>$this</value>
<data name="groupBox1.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 10</value>
</data>
<data name="groupBox1.Size" type="System.Drawing.Size, System.Drawing">
<value>547, 196</value>
<value>547, 221</value>
</data>
<data name="&gt;&gt;label6.ZOrder" xml:space="preserve">
<data name="groupBox1.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
</data>
<data name="btnClose.Size" type="System.Drawing.Size, System.Drawing">
<value>75, 23</value>
</data>
<data name="&gt;&gt;label3.ZOrder" xml:space="preserve">
<value>6</value>
</data>
<data name="label13.Location" type="System.Drawing.Point, System.Drawing">
<value>426, 158</value>
</data>
<data name="label5.Size" type="System.Drawing.Size, System.Drawing">
<value>65, 12</value>
</data>
<data name="btnClose.TabIndex" type="System.Int32, mscorlib">
<value>4</value>
</data>
<data name="&gt;&gt;txtRemarks.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="&gt;&gt;cmbSecurity.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="txtId.PasswordChar" type="System.Char, mscorlib" xml:space="preserve">
<value />
</data>
<data name="&gt;&gt;txtAddress.Name" xml:space="preserve">
<value>txtAddress</value>
</data>
<data name="menuItemImportClipboard.Text" xml:space="preserve">
<value>Import URL from clipboard</value>
</data>
<data name="&gt;&gt;txtAddress.Parent" xml:space="preserve">
<value>groupBox1</value>
</data>
<data name="groupBox1.Text" xml:space="preserve">
<value>Server</value>
</data>
<data name="&gt;&gt;txtRemarks.Name" xml:space="preserve">
<value>txtRemarks</value>
</data>
<data name="label6.Location" type="System.Drawing.Point, System.Drawing">
<value>12, 155</value>
</data>
<data name="label1.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="txtId.Size" type="System.Drawing.Size, System.Drawing">
<value>278, 21</value>
<data name="&gt;&gt;groupBox1.Name" xml:space="preserve">
<value>groupBox1</value>
</data>
<data name="&gt;&gt;groupBox1.Type" xml:space="preserve">
<value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="txtPort.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
<data name="&gt;&gt;groupBox1.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;groupBox1.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="btnOK.Location" type="System.Drawing.Point, System.Drawing">
<value>303, 17</value>
</data>
<data name="btnOK.Size" type="System.Drawing.Size, System.Drawing">
<value>75, 23</value>
</data>
<data name="btnOK.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="btnOK.Text" xml:space="preserve">
<value>&amp;OK</value>
</data>
<data name="&gt;&gt;btnOK.Name" xml:space="preserve">
<value>btnOK</value>
</data>
<data name="&gt;&gt;btnOK.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;btnOK.Parent" xml:space="preserve">
<value>panel2</value>
</data>
<data name="&gt;&gt;btnOK.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="panel2.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Bottom</value>
</data>
<data name="panel2.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 231</value>
</data>
<data name="panel2.Size" type="System.Drawing.Size, System.Drawing">
<value>547, 60</value>
</data>
<data name="panel2.TabIndex" type="System.Int32, mscorlib">
<value>7</value>
</data>
<data name="&gt;&gt;panel2.Name" xml:space="preserve">
<value>panel2</value>
</data>
<data name="&gt;&gt;panel2.Type" xml:space="preserve">
<value>System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;panel2.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;panel2.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="panel1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Top</value>
</data>
<data name="panel1.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 0</value>
</data>
<data name="panel1.Size" type="System.Drawing.Size, System.Drawing">
<value>547, 10</value>
</data>
<data name="panel1.TabIndex" type="System.Int32, mscorlib">
<value>6</value>
</data>
<data name="&gt;&gt;panel1.Name" xml:space="preserve">
<value>panel1</value>
</data>
<data name="&gt;&gt;panel1.Type" xml:space="preserve">
<value>System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;panel1.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;panel1.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="menuServer.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
<value>6, 12</value>
</data>
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
<value>547, 291</value>
</data>
<data name="$this.Text" xml:space="preserve">
<value>Edit or add a [Shadowsocks] server</value>
</data>
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>AddServer3Form</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>v2rayN.Forms.BaseServerForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
</root>

View File

@@ -45,25 +45,20 @@
this.panel2 = new System.Windows.Forms.Panel();
this.btnOK = new System.Windows.Forms.Button();
this.panel1 = new System.Windows.Forms.Panel();
this.menuServer = new System.Windows.Forms.MenuStrip();
this.MenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
this.menuItemImportClipboard = new System.Windows.Forms.ToolStripMenuItem();
this.groupBox1.SuspendLayout();
this.panel2.SuspendLayout();
this.menuServer.SuspendLayout();
this.SuspendLayout();
//
// btnClose
//
resources.ApplyResources(this.btnClose, "btnClose");
this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel;
resources.ApplyResources(this.btnClose, "btnClose");
this.btnClose.Name = "btnClose";
this.btnClose.UseVisualStyleBackColor = true;
this.btnClose.Click += new System.EventHandler(this.btnClose_Click);
//
// groupBox1
//
resources.ApplyResources(this.groupBox1, "groupBox1");
this.groupBox1.Controls.Add(this.txtSecurity);
this.groupBox1.Controls.Add(this.label4);
this.groupBox1.Controls.Add(this.txtId);
@@ -75,6 +70,7 @@
this.groupBox1.Controls.Add(this.label2);
this.groupBox1.Controls.Add(this.txtAddress);
this.groupBox1.Controls.Add(this.label1);
resources.ApplyResources(this.groupBox1, "groupBox1");
this.groupBox1.Name = "groupBox1";
this.groupBox1.TabStop = false;
//
@@ -135,9 +131,9 @@
//
// panel2
//
resources.ApplyResources(this.panel2, "panel2");
this.panel2.Controls.Add(this.btnClose);
this.panel2.Controls.Add(this.btnOK);
resources.ApplyResources(this.panel2, "panel2");
this.panel2.Name = "panel2";
//
// btnOK
@@ -152,26 +148,6 @@
resources.ApplyResources(this.panel1, "panel1");
this.panel1.Name = "panel1";
//
// menuServer
//
resources.ApplyResources(this.menuServer, "menuServer");
this.menuServer.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.MenuItem1});
this.menuServer.Name = "menuServer";
//
// MenuItem1
//
resources.ApplyResources(this.MenuItem1, "MenuItem1");
this.MenuItem1.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.menuItemImportClipboard});
this.MenuItem1.Name = "MenuItem1";
//
// menuItemImportClipboard
//
resources.ApplyResources(this.menuItemImportClipboard, "menuItemImportClipboard");
this.menuItemImportClipboard.Name = "menuItemImportClipboard";
this.menuItemImportClipboard.Click += new System.EventHandler(this.menuItemImportClipboard_Click);
//
// AddServer4Form
//
resources.ApplyResources(this, "$this");
@@ -180,7 +156,6 @@
this.Controls.Add(this.groupBox1);
this.Controls.Add(this.panel2);
this.Controls.Add(this.panel1);
this.Controls.Add(this.menuServer);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
this.MinimizeBox = true;
this.Name = "AddServer4Form";
@@ -188,10 +163,7 @@
this.groupBox1.ResumeLayout(false);
this.groupBox1.PerformLayout();
this.panel2.ResumeLayout(false);
this.menuServer.ResumeLayout(false);
this.menuServer.PerformLayout();
this.ResumeLayout(false);
this.PerformLayout();
}
@@ -209,9 +181,6 @@
private System.Windows.Forms.Panel panel1;
private System.Windows.Forms.Panel panel2;
private System.Windows.Forms.Label label13;
private System.Windows.Forms.MenuStrip menuServer;
private System.Windows.Forms.ToolStripMenuItem MenuItem1;
private System.Windows.Forms.ToolStripMenuItem menuItemImportClipboard;
private System.Windows.Forms.TextBox txtId;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.TextBox txtSecurity;

View File

@@ -90,40 +90,7 @@ namespace v2rayN.Forms
{
this.DialogResult = DialogResult.Cancel;
}
#region
/// <summary>
/// 从剪贴板导入URL
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void menuItemImportClipboard_Click(object sender, EventArgs e)
{
ImportConfig();
}
private void ImportConfig()
{
ClearServer();
VmessItem vmessItem = ShareHandler.ImportFromClipboardConfig(Utils.GetClipboardData(), out string msg);
if (vmessItem == null)
{
UI.ShowWarning(msg);
return;
}
txtAddress.Text = vmessItem.address;
txtPort.Text = vmessItem.port.ToString();
txtSecurity.Text = vmessItem.security;
txtId.Text = vmessItem.id;
txtRemarks.Text = vmessItem.remarks;
}
#endregion
}
}

View File

@@ -118,471 +118,420 @@
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="label13.Size" type="System.Drawing.Size, System.Drawing">
<value>113, 12</value>
</data>
<data name="label3.Size" type="System.Drawing.Size, System.Drawing">
<value>113, 12</value>
</data>
<data name="&gt;&gt;label6.Name" xml:space="preserve">
<value>label6</value>
</data>
<data name="&gt;&gt;txtSecurity.Parent" xml:space="preserve">
<value>groupBox1</value>
</data>
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="label6.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="&gt;&gt;groupBox1.Type" xml:space="preserve">
<value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;panel2.Name" xml:space="preserve">
<value>panel2</value>
</data>
<data name="menuServer.Size" type="System.Drawing.Size, System.Drawing">
<value>547, 25</value>
</data>
<data name="txtRemarks.TabIndex" type="System.Int32, mscorlib">
<value>11</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="panel2.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Bottom</value>
</data>
<data name="MenuItem1.Text" xml:space="preserve">
<value>Import configuration file</value>
</data>
<data name="&gt;&gt;panel1.Name" xml:space="preserve">
<value>panel1</value>
</data>
<data name="groupBox1.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
</data>
<data name="label3.Text" xml:space="preserve">
<value>Password(Optional)</value>
</data>
<data name="&gt;&gt;label1.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;label6.Parent" xml:space="preserve">
<value>groupBox1</value>
</data>
<data name="&gt;&gt;label2.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;menuItemImportClipboard.Name" xml:space="preserve">
<value>menuItemImportClipboard</value>
</data>
<data name="groupBox1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="&gt;&gt;label3.Parent" xml:space="preserve">
<value>groupBox1</value>
</data>
<data name="menuServer.TabIndex" type="System.Int32, mscorlib">
<value>8</value>
</data>
<data name="label1.Size" type="System.Drawing.Size, System.Drawing">
<value>89, 12</value>
</data>
<data name="txtAddress.Location" type="System.Drawing.Point, System.Drawing">
<value>127, 27</value>
</data>
<data name="&gt;&gt;menuServer.Type" xml:space="preserve">
<value>System.Windows.Forms.MenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;label13.ZOrder" xml:space="preserve">
<value>4</value>
</data>
<data name="$this.Text" xml:space="preserve">
<value>Edit or add a [Socks] server</value>
</data>
<data name="label3.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="&gt;&gt;label1.ZOrder" xml:space="preserve">
<value>10</value>
</data>
<data name="txtId.TabIndex" type="System.Int32, mscorlib">
<value>24</value>
</data>
<data name="menuItemImportClipboard.Text" xml:space="preserve">
<value>Import URL from clipboard</value>
</data>
<data name="btnOK.Location" type="System.Drawing.Point, System.Drawing">
<value>303, 17</value>
</data>
<data name="&gt;&gt;panel1.Type" xml:space="preserve">
<value>System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="label3.TabIndex" type="System.Int32, mscorlib">
<value>23</value>
</data>
<data name="&gt;&gt;MenuItem1.Name" xml:space="preserve">
<value>MenuItem1</value>
</data>
<data name="&gt;&gt;btnClose.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="txtAddress.Size" type="System.Drawing.Size, System.Drawing">
<value>359, 21</value>
</data>
<data name="&gt;&gt;txtAddress.Type" xml:space="preserve">
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="btnClose.Location" type="System.Drawing.Point, System.Drawing">
<value>396, 17</value>
</data>
<data name="&gt;&gt;label2.ZOrder" xml:space="preserve">
<value>8</value>
<data name="btnClose.Size" type="System.Drawing.Size, System.Drawing">
<value>75, 23</value>
</data>
<data name="menuServer.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 0</value>
</data>
<data name="&gt;&gt;label1.Name" xml:space="preserve">
<value>label1</value>
</data>
<data name="panel2.Size" type="System.Drawing.Size, System.Drawing">
<value>547, 60</value>
</data>
<data name="panel1.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 25</value>
</data>
<data name="&gt;&gt;txtRemarks.Parent" xml:space="preserve">
<value>groupBox1</value>
</data>
<data name="label2.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="label13.TabIndex" type="System.Int32, mscorlib">
<value>22</value>
</data>
<data name="MenuItem1.Size" type="System.Drawing.Size, System.Drawing">
<value>162, 21</value>
</data>
<data name="label3.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="txtId.Location" type="System.Drawing.Point, System.Drawing">
<value>127, 120</value>
</data>
<data name="&gt;&gt;btnOK.Parent" xml:space="preserve">
<value>panel2</value>
</data>
<data name="&gt;&gt;label1.Parent" xml:space="preserve">
<value>groupBox1</value>
</data>
<data name="btnOK.TabIndex" type="System.Int32, mscorlib">
<value>5</value>
</data>
<data name="&gt;&gt;panel1.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="txtSecurity.TabIndex" type="System.Int32, mscorlib">
<value>26</value>
</data>
<data name="&gt;&gt;txtId.Parent" xml:space="preserve">
<value>groupBox1</value>
</data>
<data name="&gt;&gt;menuServer.Name" xml:space="preserve">
<value>menuServer</value>
</data>
<data name="&gt;&gt;label13.Parent" xml:space="preserve">
<value>groupBox1</value>
</data>
<data name="&gt;&gt;label13.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="label4.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="&gt;&gt;txtId.Name" xml:space="preserve">
<value>txtId</value>
</data>
<data name="menuItemImportClipboard.Size" type="System.Drawing.Size, System.Drawing">
<value>235, 22</value>
</data>
<data name="label4.Location" type="System.Drawing.Point, System.Drawing">
<value>12, 93</value>
</data>
<data name="&gt;&gt;txtId.Type" xml:space="preserve">
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;txtRemarks.Type" xml:space="preserve">
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="label1.Location" type="System.Drawing.Point, System.Drawing">
<value>12, 31</value>
</data>
<data name="&gt;&gt;groupBox1.Name" xml:space="preserve">
<value>groupBox1</value>
</data>
<data name="&gt;&gt;btnOK.ZOrder" xml:space="preserve">
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="btnClose.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>AddServer4Form</value>
<data name="btnClose.Text" xml:space="preserve">
<value>&amp;Cancel</value>
</data>
<data name="txtRemarks.Size" type="System.Drawing.Size, System.Drawing">
<value>278, 21</value>
<data name="&gt;&gt;btnClose.Name" xml:space="preserve">
<value>btnClose</value>
</data>
<data name="&gt;&gt;label4.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;txtPort.Parent" xml:space="preserve">
<value>groupBox1</value>
</data>
<data name="txtPort.Location" type="System.Drawing.Point, System.Drawing">
<value>127, 58</value>
</data>
<data name="&gt;&gt;label4.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="&gt;&gt;groupBox1.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="&gt;&gt;btnOK.Type" xml:space="preserve">
<data name="&gt;&gt;btnClose.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;txtPort.Type" xml:space="preserve">
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;groupBox1.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="label2.Size" type="System.Drawing.Size, System.Drawing">
<value>71, 12</value>
</data>
<data name="&gt;&gt;MenuItem1.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;panel1.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;label2.Parent" xml:space="preserve">
<value>groupBox1</value>
</data>
<data name="&gt;&gt;txtPort.Name" xml:space="preserve">
<value>txtPort</value>
</data>
<data name="&gt;&gt;btnClose.Parent" xml:space="preserve">
<value>panel2</value>
</data>
<data name="panel1.Size" type="System.Drawing.Size, System.Drawing">
<value>547, 10</value>
<data name="&gt;&gt;btnClose.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="groupBox1.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 35</value>
<data name="txtSecurity.Location" type="System.Drawing.Point, System.Drawing">
<value>127, 89</value>
</data>
<data name="&gt;&gt;txtId.ZOrder" xml:space="preserve">
<data name="txtSecurity.Size" type="System.Drawing.Size, System.Drawing">
<value>278, 21</value>
</data>
<data name="txtSecurity.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="&gt;&gt;txtSecurity.Name" xml:space="preserve">
<value>txtSecurity</value>
</data>
<data name="&gt;&gt;menuServer.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;menuItemImportClipboard.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;label4.Name" xml:space="preserve">
<value>label4</value>
</data>
<data name="btnOK.Text" xml:space="preserve">
<value>&amp;OK</value>
</data>
<data name="&gt;&gt;btnClose.Name" xml:space="preserve">
<value>btnClose</value>
</data>
<data name="txtSecurity.Size" type="System.Drawing.Size, System.Drawing">
<value>278, 21</value>
</data>
<data name="label1.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="&gt;&gt;menuServer.ZOrder" xml:space="preserve">
<value>3</value>
</data>
<data name="label3.Location" type="System.Drawing.Point, System.Drawing">
<value>12, 124</value>
</data>
<data name="label2.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="label6.TabIndex" type="System.Int32, mscorlib">
<value>10</value>
</data>
<data name="&gt;&gt;btnOK.Name" xml:space="preserve">
<value>btnOK</value>
</data>
<data name="txtPort.Size" type="System.Drawing.Size, System.Drawing">
<value>194, 21</value>
</data>
<data name="txtAddress.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="&gt;&gt;btnClose.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="panel1.TabIndex" type="System.Int32, mscorlib">
<value>6</value>
</data>
<data name="&gt;&gt;panel2.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="panel2.TabIndex" type="System.Int32, mscorlib">
<value>7</value>
</data>
<data name="&gt;&gt;label13.Name" xml:space="preserve">
<value>label13</value>
</data>
<data name="&gt;&gt;label6.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;txtSecurity.Type" xml:space="preserve">
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>v2rayN.Forms.BaseServerForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;label3.Name" xml:space="preserve">
<value>label3</value>
</data>
<data name="label2.Text" xml:space="preserve">
<value>Server port</value>
</data>
<data name="&gt;&gt;panel2.Type" xml:space="preserve">
<value>System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="panel2.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 231</value>
</data>
<data name="&gt;&gt;txtAddress.ZOrder" xml:space="preserve">
<value>9</value>
</data>
<data name="btnClose.Text" xml:space="preserve">
<value>&amp;Cancel</value>
</data>
<data name="label13.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
<value>6, 12</value>
</data>
<data name="label1.Text" xml:space="preserve">
<value>Server address</value>
</data>
<data name="label4.TabIndex" type="System.Int32, mscorlib">
<value>25</value>
</data>
<data name="&gt;&gt;txtAddress.Name" xml:space="preserve">
<value>txtAddress</value>
</data>
<data name="txtRemarks.Location" type="System.Drawing.Point, System.Drawing">
<value>127, 151</value>
</data>
<data name="label6.Size" type="System.Drawing.Size, System.Drawing">
<value>95, 12</value>
</data>
<data name="&gt;&gt;label3.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="label6.Text" xml:space="preserve">
<value>Alias (remarks)</value>
</data>
<data name="label13.Text" xml:space="preserve">
<value>* Fill in manually</value>
</data>
<data name="&gt;&gt;txtPort.ZOrder" xml:space="preserve">
<value>7</value>
</data>
<data name="&gt;&gt;label2.Name" xml:space="preserve">
<value>label2</value>
</data>
<data name="label2.Location" type="System.Drawing.Point, System.Drawing">
<value>12, 62</value>
</data>
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
<value>547, 291</value>
</data>
<data name="&gt;&gt;panel2.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="groupBox1.Size" type="System.Drawing.Size, System.Drawing">
<value>547, 196</value>
</data>
<data name="&gt;&gt;label6.ZOrder" xml:space="preserve">
<value>6</value>
<data name="&gt;&gt;txtSecurity.Parent" xml:space="preserve">
<value>groupBox1</value>
</data>
<data name="&gt;&gt;txtSecurity.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="btnClose.Size" type="System.Drawing.Size, System.Drawing">
<value>75, 23</value>
</data>
<data name="&gt;&gt;label3.ZOrder" xml:space="preserve">
<value>3</value>
</data>
<data name="txtSecurity.Location" type="System.Drawing.Point, System.Drawing">
<value>127, 89</value>
</data>
<data name="label13.Location" type="System.Drawing.Point, System.Drawing">
<value>422, 155</value>
</data>
<data name="label1.AutoSize" type="System.Boolean, mscorlib">
<data name="label4.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="btnClose.TabIndex" type="System.Int32, mscorlib">
<value>4</value>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="label4.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="&gt;&gt;txtRemarks.ZOrder" xml:space="preserve">
<value>5</value>
</data>
<data name="txtId.PasswordChar" type="System.Char, mscorlib" xml:space="preserve">
<value />
</data>
<data name="btnOK.Size" type="System.Drawing.Size, System.Drawing">
<value>75, 23</value>
<data name="label4.Location" type="System.Drawing.Point, System.Drawing">
<value>12, 93</value>
</data>
<data name="label4.Size" type="System.Drawing.Size, System.Drawing">
<value>89, 12</value>
</data>
<data name="&gt;&gt;txtAddress.Parent" xml:space="preserve">
<value>groupBox1</value>
</data>
<data name="&gt;&gt;label4.Parent" xml:space="preserve">
<value>groupBox1</value>
</data>
<data name="groupBox1.Text" xml:space="preserve">
<value>Server</value>
</data>
<data name="&gt;&gt;txtRemarks.Name" xml:space="preserve">
<value>txtRemarks</value>
</data>
<data name="label6.Location" type="System.Drawing.Point, System.Drawing">
<value>12, 155</value>
</data>
<data name="label4.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
<data name="label4.TabIndex" type="System.Int32, mscorlib">
<value>25</value>
</data>
<data name="label4.Text" xml:space="preserve">
<value>User(Optional)</value>
</data>
<data name="&gt;&gt;label4.Name" xml:space="preserve">
<value>label4</value>
</data>
<data name="&gt;&gt;label4.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;label4.Parent" xml:space="preserve">
<value>groupBox1</value>
</data>
<data name="&gt;&gt;label4.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="txtId.Location" type="System.Drawing.Point, System.Drawing">
<value>127, 120</value>
</data>
<data name="txtId.Size" type="System.Drawing.Size, System.Drawing">
<value>278, 21</value>
</data>
<data name="txtId.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
</data>
<data name="&gt;&gt;txtId.Name" xml:space="preserve">
<value>txtId</value>
</data>
<data name="&gt;&gt;txtId.Type" xml:space="preserve">
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;txtId.Parent" xml:space="preserve">
<value>groupBox1</value>
</data>
<data name="&gt;&gt;txtId.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="label3.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="label3.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="label3.Location" type="System.Drawing.Point, System.Drawing">
<value>12, 124</value>
</data>
<data name="label3.Size" type="System.Drawing.Size, System.Drawing">
<value>113, 12</value>
</data>
<data name="label3.TabIndex" type="System.Int32, mscorlib">
<value>23</value>
</data>
<data name="label3.Text" xml:space="preserve">
<value>Password(Optional)</value>
</data>
<data name="&gt;&gt;label3.Name" xml:space="preserve">
<value>label3</value>
</data>
<data name="&gt;&gt;label3.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;label3.Parent" xml:space="preserve">
<value>groupBox1</value>
</data>
<data name="&gt;&gt;label3.ZOrder" xml:space="preserve">
<value>3</value>
</data>
<data name="label13.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="label13.Location" type="System.Drawing.Point, System.Drawing">
<value>422, 155</value>
</data>
<data name="label13.Size" type="System.Drawing.Size, System.Drawing">
<value>113, 12</value>
</data>
<data name="label13.TabIndex" type="System.Int32, mscorlib">
<value>22</value>
</data>
<data name="label13.Text" xml:space="preserve">
<value>* Fill in manually</value>
</data>
<data name="&gt;&gt;label13.Name" xml:space="preserve">
<value>label13</value>
</data>
<data name="&gt;&gt;label13.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;label13.Parent" xml:space="preserve">
<value>groupBox1</value>
</data>
<data name="&gt;&gt;label13.ZOrder" xml:space="preserve">
<value>4</value>
</data>
<data name="txtRemarks.Location" type="System.Drawing.Point, System.Drawing">
<value>127, 151</value>
</data>
<data name="txtRemarks.Size" type="System.Drawing.Size, System.Drawing">
<value>278, 21</value>
</data>
<data name="txtRemarks.TabIndex" type="System.Int32, mscorlib">
<value>4</value>
</data>
<data name="&gt;&gt;txtRemarks.Name" xml:space="preserve">
<value>txtRemarks</value>
</data>
<data name="&gt;&gt;txtRemarks.Type" xml:space="preserve">
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;txtRemarks.Parent" xml:space="preserve">
<value>groupBox1</value>
</data>
<data name="&gt;&gt;txtRemarks.ZOrder" xml:space="preserve">
<value>5</value>
</data>
<data name="label6.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="label6.Location" type="System.Drawing.Point, System.Drawing">
<value>12, 155</value>
</data>
<data name="label6.Size" type="System.Drawing.Size, System.Drawing">
<value>95, 12</value>
</data>
<data name="label6.TabIndex" type="System.Int32, mscorlib">
<value>10</value>
</data>
<data name="label6.Text" xml:space="preserve">
<value>Alias (remarks)</value>
</data>
<data name="&gt;&gt;label6.Name" xml:space="preserve">
<value>label6</value>
</data>
<data name="&gt;&gt;label6.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;label6.Parent" xml:space="preserve">
<value>groupBox1</value>
</data>
<data name="&gt;&gt;label6.ZOrder" xml:space="preserve">
<value>6</value>
</data>
<data name="txtPort.Location" type="System.Drawing.Point, System.Drawing">
<value>127, 58</value>
</data>
<data name="txtPort.Size" type="System.Drawing.Size, System.Drawing">
<value>194, 21</value>
</data>
<data name="txtPort.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="&gt;&gt;txtPort.Name" xml:space="preserve">
<value>txtPort</value>
</data>
<data name="&gt;&gt;txtPort.Type" xml:space="preserve">
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;txtPort.Parent" xml:space="preserve">
<value>groupBox1</value>
</data>
<data name="&gt;&gt;txtPort.ZOrder" xml:space="preserve">
<value>7</value>
</data>
<data name="label2.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="label2.Location" type="System.Drawing.Point, System.Drawing">
<value>12, 62</value>
</data>
<data name="label2.Size" type="System.Drawing.Size, System.Drawing">
<value>71, 12</value>
</data>
<data name="label2.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="label2.Text" xml:space="preserve">
<value>Server port</value>
</data>
<data name="&gt;&gt;label2.Name" xml:space="preserve">
<value>label2</value>
</data>
<data name="&gt;&gt;label2.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;label2.Parent" xml:space="preserve">
<value>groupBox1</value>
</data>
<data name="&gt;&gt;label2.ZOrder" xml:space="preserve">
<value>8</value>
</data>
<data name="txtAddress.Location" type="System.Drawing.Point, System.Drawing">
<value>127, 27</value>
</data>
<data name="txtAddress.Size" type="System.Drawing.Size, System.Drawing">
<value>359, 21</value>
</data>
<data name="txtAddress.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="&gt;&gt;txtAddress.Name" xml:space="preserve">
<value>txtAddress</value>
</data>
<data name="&gt;&gt;txtAddress.Type" xml:space="preserve">
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;txtAddress.Parent" xml:space="preserve">
<value>groupBox1</value>
</data>
<data name="&gt;&gt;txtAddress.ZOrder" xml:space="preserve">
<value>9</value>
</data>
<data name="label1.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="label1.Location" type="System.Drawing.Point, System.Drawing">
<value>12, 31</value>
</data>
<data name="label1.Size" type="System.Drawing.Size, System.Drawing">
<value>89, 12</value>
</data>
<data name="label1.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="label1.Text" xml:space="preserve">
<value>Server address</value>
</data>
<data name="&gt;&gt;label1.Name" xml:space="preserve">
<value>label1</value>
</data>
<data name="&gt;&gt;label1.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;label1.Parent" xml:space="preserve">
<value>groupBox1</value>
</data>
<data name="&gt;&gt;label1.ZOrder" xml:space="preserve">
<value>10</value>
</data>
<data name="groupBox1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="groupBox1.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 10</value>
</data>
<data name="groupBox1.Size" type="System.Drawing.Size, System.Drawing">
<value>547, 221</value>
</data>
<data name="groupBox1.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
</data>
<data name="groupBox1.Text" xml:space="preserve">
<value>Server</value>
</data>
<data name="&gt;&gt;groupBox1.Name" xml:space="preserve">
<value>groupBox1</value>
</data>
<data name="&gt;&gt;groupBox1.Type" xml:space="preserve">
<value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;groupBox1.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;groupBox1.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="btnOK.Location" type="System.Drawing.Point, System.Drawing">
<value>303, 17</value>
</data>
<data name="btnOK.Size" type="System.Drawing.Size, System.Drawing">
<value>75, 23</value>
</data>
<data name="btnOK.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="btnOK.Text" xml:space="preserve">
<value>&amp;OK</value>
</data>
<data name="&gt;&gt;btnOK.Name" xml:space="preserve">
<value>btnOK</value>
</data>
<data name="&gt;&gt;btnOK.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;btnOK.Parent" xml:space="preserve">
<value>panel2</value>
</data>
<data name="&gt;&gt;btnOK.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="panel2.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Bottom</value>
</data>
<data name="panel2.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 231</value>
</data>
<data name="panel2.Size" type="System.Drawing.Size, System.Drawing">
<value>547, 60</value>
</data>
<data name="panel2.TabIndex" type="System.Int32, mscorlib">
<value>7</value>
</data>
<data name="&gt;&gt;panel2.Name" xml:space="preserve">
<value>panel2</value>
</data>
<data name="&gt;&gt;panel2.Type" xml:space="preserve">
<value>System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;panel2.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;panel2.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="panel1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Top</value>
</data>
<data name="txtPort.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
<data name="panel1.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 0</value>
</data>
<data name="panel1.Size" type="System.Drawing.Size, System.Drawing">
<value>547, 10</value>
</data>
<data name="panel1.TabIndex" type="System.Int32, mscorlib">
<value>6</value>
</data>
<data name="&gt;&gt;panel1.Name" xml:space="preserve">
<value>panel1</value>
</data>
<data name="&gt;&gt;panel1.Type" xml:space="preserve">
<value>System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;panel1.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;panel1.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="menuServer.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
<value>6, 12</value>
</data>
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
<value>547, 291</value>
</data>
<data name="$this.Text" xml:space="preserve">
<value>Edit or add a [Socks] server</value>
</data>
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>AddServer4Form</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>v2rayN.Forms.BaseServerForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
</root>

View File

@@ -35,31 +35,6 @@
this.label4 = new System.Windows.Forms.Label();
this.btnGUID = new System.Windows.Forms.Button();
this.label13 = new System.Windows.Forms.Label();
this.groupBox2 = new System.Windows.Forms.GroupBox();
this.label24 = new System.Windows.Forms.Label();
this.label23 = new System.Windows.Forms.Label();
this.panTlsMore = new System.Windows.Forms.Panel();
this.txtSNI = new System.Windows.Forms.TextBox();
this.label22 = new System.Windows.Forms.Label();
this.label21 = new System.Windows.Forms.Label();
this.cmbAllowInsecure = new System.Windows.Forms.ComboBox();
this.label9 = new System.Windows.Forms.Label();
this.label20 = new System.Windows.Forms.Label();
this.txtPath = new System.Windows.Forms.TextBox();
this.cmbNetwork = new System.Windows.Forms.ComboBox();
this.label7 = new System.Windows.Forms.Label();
this.label19 = new System.Windows.Forms.Label();
this.label18 = new System.Windows.Forms.Label();
this.label17 = new System.Windows.Forms.Label();
this.label16 = new System.Windows.Forms.Label();
this.label14 = new System.Windows.Forms.Label();
this.label15 = new System.Windows.Forms.Label();
this.cmbStreamSecurity = new System.Windows.Forms.ComboBox();
this.label12 = new System.Windows.Forms.Label();
this.txtRequestHost = new System.Windows.Forms.TextBox();
this.label11 = new System.Windows.Forms.Label();
this.label10 = new System.Windows.Forms.Label();
this.cmbHeaderType = new System.Windows.Forms.ComboBox();
this.label8 = new System.Windows.Forms.Label();
this.cmbSecurity = new System.Windows.Forms.ComboBox();
this.txtRemarks = new System.Windows.Forms.TextBox();
@@ -74,18 +49,11 @@
this.panel2 = new System.Windows.Forms.Panel();
this.btnOK = new System.Windows.Forms.Button();
this.panel1 = new System.Windows.Forms.Panel();
this.menuServer = new System.Windows.Forms.MenuStrip();
this.MenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
this.MenuItemImportClient = new System.Windows.Forms.ToolStripMenuItem();
this.MenuItemImportServer = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
this.MenuItemImportClipboard = new System.Windows.Forms.ToolStripMenuItem();
this.label25 = new System.Windows.Forms.Label();
this.panel3 = new System.Windows.Forms.Panel();
this.transportControl = new v2rayN.Forms.ServerTransportControl();
this.groupBox1.SuspendLayout();
this.groupBox2.SuspendLayout();
this.panTlsMore.SuspendLayout();
this.panel2.SuspendLayout();
this.menuServer.SuspendLayout();
this.panel3.SuspendLayout();
this.SuspendLayout();
//
// btnClose
@@ -102,7 +70,6 @@
this.groupBox1.Controls.Add(this.label4);
this.groupBox1.Controls.Add(this.btnGUID);
this.groupBox1.Controls.Add(this.label13);
this.groupBox1.Controls.Add(this.groupBox2);
this.groupBox1.Controls.Add(this.label8);
this.groupBox1.Controls.Add(this.cmbSecurity);
this.groupBox1.Controls.Add(this.txtRemarks);
@@ -121,12 +88,6 @@
// cmbFlow
//
this.cmbFlow.FormattingEnabled = true;
this.cmbFlow.Items.AddRange(new object[] {
resources.GetString("cmbFlow.Items"),
resources.GetString("cmbFlow.Items1"),
resources.GetString("cmbFlow.Items2"),
resources.GetString("cmbFlow.Items3"),
resources.GetString("cmbFlow.Items4")});
resources.ApplyResources(this.cmbFlow, "cmbFlow");
this.cmbFlow.Name = "cmbFlow";
//
@@ -147,190 +108,6 @@
resources.ApplyResources(this.label13, "label13");
this.label13.Name = "label13";
//
// groupBox2
//
this.groupBox2.Controls.Add(this.label25);
this.groupBox2.Controls.Add(this.label24);
this.groupBox2.Controls.Add(this.label23);
this.groupBox2.Controls.Add(this.panTlsMore);
this.groupBox2.Controls.Add(this.label9);
this.groupBox2.Controls.Add(this.label20);
this.groupBox2.Controls.Add(this.txtPath);
this.groupBox2.Controls.Add(this.cmbNetwork);
this.groupBox2.Controls.Add(this.label7);
this.groupBox2.Controls.Add(this.label19);
this.groupBox2.Controls.Add(this.label18);
this.groupBox2.Controls.Add(this.label17);
this.groupBox2.Controls.Add(this.label16);
this.groupBox2.Controls.Add(this.label14);
this.groupBox2.Controls.Add(this.label15);
this.groupBox2.Controls.Add(this.cmbStreamSecurity);
this.groupBox2.Controls.Add(this.label12);
this.groupBox2.Controls.Add(this.txtRequestHost);
this.groupBox2.Controls.Add(this.label11);
this.groupBox2.Controls.Add(this.label10);
this.groupBox2.Controls.Add(this.cmbHeaderType);
resources.ApplyResources(this.groupBox2, "groupBox2");
this.groupBox2.Name = "groupBox2";
this.groupBox2.TabStop = false;
//
// label24
//
resources.ApplyResources(this.label24, "label24");
this.label24.Name = "label24";
//
// label23
//
resources.ApplyResources(this.label23, "label23");
this.label23.Name = "label23";
//
// panTlsMore
//
this.panTlsMore.Controls.Add(this.txtSNI);
this.panTlsMore.Controls.Add(this.label22);
this.panTlsMore.Controls.Add(this.label21);
this.panTlsMore.Controls.Add(this.cmbAllowInsecure);
resources.ApplyResources(this.panTlsMore, "panTlsMore");
this.panTlsMore.Name = "panTlsMore";
//
// txtSNI
//
resources.ApplyResources(this.txtSNI, "txtSNI");
this.txtSNI.Name = "txtSNI";
//
// label22
//
resources.ApplyResources(this.label22, "label22");
this.label22.Name = "label22";
//
// label21
//
resources.ApplyResources(this.label21, "label21");
this.label21.Name = "label21";
//
// cmbAllowInsecure
//
this.cmbAllowInsecure.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cmbAllowInsecure.FormattingEnabled = true;
this.cmbAllowInsecure.Items.AddRange(new object[] {
resources.GetString("cmbAllowInsecure.Items"),
resources.GetString("cmbAllowInsecure.Items1"),
resources.GetString("cmbAllowInsecure.Items2")});
resources.ApplyResources(this.cmbAllowInsecure, "cmbAllowInsecure");
this.cmbAllowInsecure.Name = "cmbAllowInsecure";
//
// label9
//
resources.ApplyResources(this.label9, "label9");
this.label9.Name = "label9";
//
// label20
//
resources.ApplyResources(this.label20, "label20");
this.label20.Name = "label20";
//
// txtPath
//
resources.ApplyResources(this.txtPath, "txtPath");
this.txtPath.Name = "txtPath";
//
// cmbNetwork
//
this.cmbNetwork.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cmbNetwork.FormattingEnabled = true;
this.cmbNetwork.Items.AddRange(new object[] {
resources.GetString("cmbNetwork.Items"),
resources.GetString("cmbNetwork.Items1"),
resources.GetString("cmbNetwork.Items2"),
resources.GetString("cmbNetwork.Items3"),
resources.GetString("cmbNetwork.Items4"),
resources.GetString("cmbNetwork.Items5")});
resources.ApplyResources(this.cmbNetwork, "cmbNetwork");
this.cmbNetwork.Name = "cmbNetwork";
this.cmbNetwork.SelectedIndexChanged += new System.EventHandler(this.cmbNetwork_SelectedIndexChanged);
//
// label7
//
resources.ApplyResources(this.label7, "label7");
this.label7.Name = "label7";
//
// label19
//
resources.ApplyResources(this.label19, "label19");
this.label19.Name = "label19";
//
// label18
//
resources.ApplyResources(this.label18, "label18");
this.label18.Name = "label18";
//
// label17
//
resources.ApplyResources(this.label17, "label17");
this.label17.Name = "label17";
//
// label16
//
resources.ApplyResources(this.label16, "label16");
this.label16.Name = "label16";
//
// label14
//
resources.ApplyResources(this.label14, "label14");
this.label14.Name = "label14";
//
// label15
//
resources.ApplyResources(this.label15, "label15");
this.label15.Name = "label15";
//
// cmbStreamSecurity
//
this.cmbStreamSecurity.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cmbStreamSecurity.FormattingEnabled = true;
this.cmbStreamSecurity.Items.AddRange(new object[] {
resources.GetString("cmbStreamSecurity.Items"),
resources.GetString("cmbStreamSecurity.Items1"),
resources.GetString("cmbStreamSecurity.Items2")});
resources.ApplyResources(this.cmbStreamSecurity, "cmbStreamSecurity");
this.cmbStreamSecurity.Name = "cmbStreamSecurity";
this.cmbStreamSecurity.SelectedIndexChanged += new System.EventHandler(this.cmbStreamSecurity_SelectedIndexChanged);
//
// label12
//
resources.ApplyResources(this.label12, "label12");
this.label12.Name = "label12";
//
// txtRequestHost
//
resources.ApplyResources(this.txtRequestHost, "txtRequestHost");
this.txtRequestHost.Name = "txtRequestHost";
//
// label11
//
resources.ApplyResources(this.label11, "label11");
this.label11.Name = "label11";
//
// label10
//
resources.ApplyResources(this.label10, "label10");
this.label10.Name = "label10";
//
// cmbHeaderType
//
this.cmbHeaderType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cmbHeaderType.FormattingEnabled = true;
this.cmbHeaderType.Items.AddRange(new object[] {
resources.GetString("cmbHeaderType.Items"),
resources.GetString("cmbHeaderType.Items1"),
resources.GetString("cmbHeaderType.Items2"),
resources.GetString("cmbHeaderType.Items3"),
resources.GetString("cmbHeaderType.Items4"),
resources.GetString("cmbHeaderType.Items5"),
resources.GetString("cmbHeaderType.Items6")});
resources.ApplyResources(this.cmbHeaderType, "cmbHeaderType");
this.cmbHeaderType.Name = "cmbHeaderType";
//
// label8
//
resources.ApplyResources(this.label8, "label8");
@@ -409,50 +186,17 @@
resources.ApplyResources(this.panel1, "panel1");
this.panel1.Name = "panel1";
//
// menuServer
// panel3
//
this.menuServer.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.MenuItem1});
resources.ApplyResources(this.menuServer, "menuServer");
this.menuServer.Name = "menuServer";
this.panel3.Controls.Add(this.transportControl);
resources.ApplyResources(this.panel3, "panel3");
this.panel3.Name = "panel3";
//
// MenuItem1
// transportControl
//
this.MenuItem1.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.MenuItemImportClient,
this.MenuItemImportServer,
this.toolStripSeparator1,
this.MenuItemImportClipboard});
this.MenuItem1.Name = "MenuItem1";
resources.ApplyResources(this.MenuItem1, "MenuItem1");
//
// MenuItemImportClient
//
this.MenuItemImportClient.Name = "MenuItemImportClient";
resources.ApplyResources(this.MenuItemImportClient, "MenuItemImportClient");
this.MenuItemImportClient.Click += new System.EventHandler(this.MenuItemImportClient_Click);
//
// MenuItemImportServer
//
this.MenuItemImportServer.Name = "MenuItemImportServer";
resources.ApplyResources(this.MenuItemImportServer, "MenuItemImportServer");
this.MenuItemImportServer.Click += new System.EventHandler(this.MenuItemImportServer_Click);
//
// toolStripSeparator1
//
this.toolStripSeparator1.Name = "toolStripSeparator1";
resources.ApplyResources(this.toolStripSeparator1, "toolStripSeparator1");
//
// MenuItemImportClipboard
//
this.MenuItemImportClipboard.Name = "MenuItemImportClipboard";
resources.ApplyResources(this.MenuItemImportClipboard, "MenuItemImportClipboard");
this.MenuItemImportClipboard.Click += new System.EventHandler(this.MenuItemImportClipboard_Click);
//
// label25
//
resources.ApplyResources(this.label25, "label25");
this.label25.Name = "label25";
this.transportControl.AllowXtls = false;
resources.ApplyResources(this.transportControl, "transportControl");
this.transportControl.Name = "transportControl";
//
// AddServer5Form
//
@@ -460,23 +204,17 @@
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.CancelButton = this.btnClose;
this.Controls.Add(this.groupBox1);
this.Controls.Add(this.panel3);
this.Controls.Add(this.panel2);
this.Controls.Add(this.panel1);
this.Controls.Add(this.menuServer);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
this.Name = "AddServer5Form";
this.Load += new System.EventHandler(this.AddServer5Form_Load);
this.groupBox1.ResumeLayout(false);
this.groupBox1.PerformLayout();
this.groupBox2.ResumeLayout(false);
this.groupBox2.PerformLayout();
this.panTlsMore.ResumeLayout(false);
this.panTlsMore.PerformLayout();
this.panel2.ResumeLayout(false);
this.menuServer.ResumeLayout(false);
this.menuServer.PerformLayout();
this.panel3.ResumeLayout(false);
this.ResumeLayout(false);
this.PerformLayout();
}
@@ -495,44 +233,14 @@
private System.Windows.Forms.TextBox txtAddress;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.ComboBox cmbSecurity;
private System.Windows.Forms.ComboBox cmbNetwork;
private System.Windows.Forms.Label label7;
private System.Windows.Forms.Label label9;
private System.Windows.Forms.Label label8;
private System.Windows.Forms.Panel panel1;
private System.Windows.Forms.Panel panel2;
private System.Windows.Forms.TextBox txtRequestHost;
private System.Windows.Forms.Label label10;
private System.Windows.Forms.Label label11;
private System.Windows.Forms.ComboBox cmbHeaderType;
private System.Windows.Forms.Label label12;
private System.Windows.Forms.GroupBox groupBox2;
private System.Windows.Forms.Label label13;
private System.Windows.Forms.MenuStrip menuServer;
private System.Windows.Forms.ToolStripMenuItem MenuItem1;
private System.Windows.Forms.ToolStripMenuItem MenuItemImportClient;
private System.Windows.Forms.ToolStripMenuItem MenuItemImportServer;
private System.Windows.Forms.Label label15;
private System.Windows.Forms.ComboBox cmbStreamSecurity;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;
private System.Windows.Forms.ToolStripMenuItem MenuItemImportClipboard;
private System.Windows.Forms.Button btnGUID;
private System.Windows.Forms.Label label16;
private System.Windows.Forms.Label label14;
private System.Windows.Forms.Label label17;
private System.Windows.Forms.Label label18;
private System.Windows.Forms.Label label19;
private System.Windows.Forms.TextBox txtPath;
private System.Windows.Forms.Label label20;
private System.Windows.Forms.Label label21;
private System.Windows.Forms.ComboBox cmbAllowInsecure;
private System.Windows.Forms.Panel panTlsMore;
private System.Windows.Forms.Label label24;
private System.Windows.Forms.Label label23;
private System.Windows.Forms.ComboBox cmbFlow;
private System.Windows.Forms.Label label4;
private System.Windows.Forms.TextBox txtSNI;
private System.Windows.Forms.Label label22;
private System.Windows.Forms.Label label25;
private System.Windows.Forms.Panel panel3;
private ServerTransportControl transportControl;
}
}

View File

@@ -15,6 +15,8 @@ namespace v2rayN.Forms
private void AddServer5Form_Load(object sender, EventArgs e)
{
cmbFlow.Items.AddRange(Global.xtlsFlows.ToArray());
transportControl.AllowXtls = true;
if (EditIndex >= 0)
{
vmessItem = config.vmess[EditIndex];
@@ -37,15 +39,9 @@ namespace v2rayN.Forms
txtId.Text = vmessItem.id;
cmbFlow.Text = vmessItem.flow;
cmbSecurity.Text = vmessItem.security;
cmbNetwork.Text = vmessItem.network;
txtRemarks.Text = vmessItem.remarks;
cmbHeaderType.Text = vmessItem.headerType;
txtRequestHost.Text = vmessItem.requestHost;
txtPath.Text = vmessItem.path;
cmbStreamSecurity.Text = vmessItem.streamSecurity;
cmbAllowInsecure.Text = vmessItem.allowInsecure;
txtSNI.Text = vmessItem.sni;
transportControl.BindingServer(vmessItem);
}
@@ -59,54 +55,9 @@ namespace v2rayN.Forms
txtId.Text = "";
cmbFlow.Text = "";
cmbSecurity.Text = Global.None;
cmbNetwork.Text = Global.DefaultNetwork;
txtRemarks.Text = "";
cmbHeaderType.Text = Global.None;
txtRequestHost.Text = "";
cmbStreamSecurity.Text = "";
cmbAllowInsecure.Text = "";
txtPath.Text = "";
txtSNI.Text = "";
}
private void cmbNetwork_SelectedIndexChanged(object sender, EventArgs e)
{
SetHeaderType();
}
/// <summary>
/// 设置伪装选项
/// </summary>
private void SetHeaderType()
{
cmbHeaderType.Items.Clear();
string network = cmbNetwork.Text;
if (Utils.IsNullOrEmpty(network))
{
cmbHeaderType.Items.Add(Global.None);
return;
}
cmbHeaderType.Items.Add(Global.None);
if (network.Equals(Global.DefaultNetwork))
{
cmbHeaderType.Items.Add(Global.TcpHeaderHttp);
}
else if (network.Equals("kcp") || network.Equals("quic"))
{
cmbHeaderType.Items.Add("srtp");
cmbHeaderType.Items.Add("utp");
cmbHeaderType.Items.Add("wechat-video");
cmbHeaderType.Items.Add("dtls");
cmbHeaderType.Items.Add("wireguard");
}
else
{
}
cmbHeaderType.Text = Global.None;
transportControl.ClearServer(vmessItem);
}
private void btnOK_Click(object sender, EventArgs e)
@@ -116,16 +67,8 @@ namespace v2rayN.Forms
string id = txtId.Text;
string flow = cmbFlow.Text;
string security = cmbSecurity.Text;
string network = cmbNetwork.Text;
string remarks = txtRemarks.Text;
string headerType = cmbHeaderType.Text;
string requestHost = txtRequestHost.Text;
string path = txtPath.Text;
string streamSecurity = cmbStreamSecurity.Text;
string allowInsecure = cmbAllowInsecure.Text;
string sni = txtSNI.Text;
if (Utils.IsNullOrEmpty(address))
{
UI.Show(UIRes.I18N("FillServerAddress"));
@@ -142,22 +85,15 @@ namespace v2rayN.Forms
return;
}
transportControl.EndBindingServer();
vmessItem.address = address;
vmessItem.port = Utils.ToInt(port);
vmessItem.id = id;
vmessItem.flow = flow;
vmessItem.security = security;
vmessItem.network = network;
vmessItem.remarks = remarks;
vmessItem.headerType = headerType;
vmessItem.requestHost = requestHost.Replace(" ", "");
vmessItem.path = path.Replace(" ", "");
vmessItem.streamSecurity = streamSecurity;
vmessItem.allowInsecure = allowInsecure;
vmessItem.sni = sni;
if (ConfigHandler.AddVlessServer(ref config, vmessItem, EditIndex) == 0)
{
this.DialogResult = DialogResult.OK;
@@ -177,114 +113,5 @@ namespace v2rayN.Forms
{
this.DialogResult = DialogResult.Cancel;
}
private void cmbStreamSecurity_SelectedIndexChanged(object sender, EventArgs e)
{
string security = cmbStreamSecurity.Text;
if (Utils.IsNullOrEmpty(security))
{
panTlsMore.Hide();
}
else
{
panTlsMore.Show();
}
}
#region /
/// <summary>
/// 导入客户端
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void MenuItemImportClient_Click(object sender, EventArgs e)
{
MenuItemImport(1);
}
/// <summary>
/// 导入服务端
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void MenuItemImportServer_Click(object sender, EventArgs e)
{
MenuItemImport(2);
}
private void MenuItemImport(int type)
{
ClearServer();
OpenFileDialog fileDialog = new OpenFileDialog
{
Multiselect = false,
Filter = "Config|*.json|All|*.*"
};
if (fileDialog.ShowDialog() != DialogResult.OK)
{
return;
}
string fileName = fileDialog.FileName;
if (Utils.IsNullOrEmpty(fileName))
{
return;
}
string msg;
VmessItem vmessItem;
if (type.Equals(1))
{
vmessItem = V2rayConfigHandler.ImportFromClientConfig(fileName, out msg);
}
else
{
vmessItem = V2rayConfigHandler.ImportFromServerConfig(fileName, out msg);
}
if (vmessItem == null)
{
UI.ShowWarning(msg);
return;
}
txtAddress.Text = vmessItem.address;
txtPort.Text = vmessItem.port.ToString();
txtId.Text = vmessItem.id;
txtRemarks.Text = vmessItem.remarks;
cmbNetwork.Text = vmessItem.network;
cmbHeaderType.Text = vmessItem.headerType;
txtRequestHost.Text = vmessItem.requestHost;
txtPath.Text = vmessItem.path;
cmbStreamSecurity.Text = vmessItem.streamSecurity;
}
/// <summary>
/// 从剪贴板导入URL
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void MenuItemImportClipboard_Click(object sender, EventArgs e)
{
ClearServer();
VmessItem vmessItem = ShareHandler.ImportFromClipboardConfig(Utils.GetClipboardData(), out string msg);
if (vmessItem == null)
{
UI.ShowWarning(msg);
return;
}
txtAddress.Text = vmessItem.address;
txtPort.Text = vmessItem.port.ToString();
txtId.Text = vmessItem.id;
txtRemarks.Text = vmessItem.remarks;
cmbNetwork.Text = vmessItem.network;
cmbHeaderType.Text = vmessItem.headerType;
txtRequestHost.Text = vmessItem.requestHost;
txtPath.Text = vmessItem.path;
cmbStreamSecurity.Text = vmessItem.streamSecurity;
}
#endregion
}
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -136,126 +136,6 @@
<data name="label13.Text" xml:space="preserve">
<value>*手填,方便识别管理</value>
</data>
<data name="label24.Size" type="System.Drawing.Size, System.Drawing">
<value>149, 12</value>
</data>
<data name="label24.Text" xml:space="preserve">
<value>3)QUIC 加密密钥/Kcp seed</value>
</data>
<data name="label23.Size" type="System.Drawing.Size, System.Drawing">
<value>95, 12</value>
</data>
<data name="label23.Text" xml:space="preserve">
<value>4)QUIC 加密方式</value>
</data>
<data name="label21.Size" type="System.Drawing.Size, System.Drawing">
<value>167, 12</value>
</data>
<data name="label21.Text" xml:space="preserve">
<value>跳过证书验证(allowInsecure)</value>
</data>
<data name="cmbAllowInsecure.Location" type="System.Drawing.Point, System.Drawing">
<value>181, 7</value>
</data>
<data name="label9.Location" type="System.Drawing.Point, System.Drawing">
<value>353, 36</value>
</data>
<data name="label9.Size" type="System.Drawing.Size, System.Drawing">
<value>143, 12</value>
</data>
<data name="label9.Text" xml:space="preserve">
<value>*默认tcp,选错会无法连接</value>
</data>
<data name="label20.Size" type="System.Drawing.Size, System.Drawing">
<value>149, 12</value>
</data>
<data name="label20.Text" xml:space="preserve">
<value>3)h2 host中间逗号(,)隔开</value>
</data>
<data name="txtPath.Location" type="System.Drawing.Point, System.Drawing">
<value>127, 168</value>
</data>
<data name="cmbNetwork.Location" type="System.Drawing.Point, System.Drawing">
<value>127, 32</value>
</data>
<data name="cmbNetwork.Size" type="System.Drawing.Size, System.Drawing">
<value>220, 20</value>
</data>
<data name="label7.Location" type="System.Drawing.Point, System.Drawing">
<value>9, 36</value>
</data>
<data name="label7.Size" type="System.Drawing.Size, System.Drawing">
<value>107, 12</value>
</data>
<data name="label7.Text" xml:space="preserve">
<value>传输协议(network)</value>
</data>
<data name="label19.Location" type="System.Drawing.Point, System.Drawing">
<value>9, 168</value>
</data>
<data name="label19.Size" type="System.Drawing.Size, System.Drawing">
<value>65, 12</value>
</data>
<data name="label19.Text" xml:space="preserve">
<value>路径(path)</value>
</data>
<data name="label14.Size" type="System.Drawing.Size, System.Drawing">
<value>161, 12</value>
</data>
<data name="label14.Text" xml:space="preserve">
<value>1)http host中间逗号(,)隔开</value>
</data>
<data name="label15.Location" type="System.Drawing.Point, System.Drawing">
<value>9, 241</value>
</data>
<data name="label15.Size" type="System.Drawing.Size, System.Drawing">
<value>107, 12</value>
</data>
<data name="label15.Text" xml:space="preserve">
<value>底层传输安全(tls)</value>
</data>
<data name="cmbStreamSecurity.Location" type="System.Drawing.Point, System.Drawing">
<value>127, 237</value>
</data>
<data name="label12.Location" type="System.Drawing.Point, System.Drawing">
<value>282, 71</value>
</data>
<data name="label12.Size" type="System.Drawing.Size, System.Drawing">
<value>197, 12</value>
</data>
<data name="label12.Text" xml:space="preserve">
<value>*tcp或kcp或QUIC伪装类型,默认none</value>
</data>
<data name="txtRequestHost.Location" type="System.Drawing.Point, System.Drawing">
<value>127, 102</value>
</data>
<data name="txtRequestHost.Size" type="System.Drawing.Size, System.Drawing">
<value>334, 51</value>
</data>
<data name="label11.Location" type="System.Drawing.Point, System.Drawing">
<value>9, 71</value>
</data>
<data name="label11.Size" type="System.Drawing.Size, System.Drawing">
<value>89, 12</value>
</data>
<data name="label11.Text" xml:space="preserve">
<value>伪装类型(type)</value>
</data>
<data name="label10.Location" type="System.Drawing.Point, System.Drawing">
<value>9, 102</value>
</data>
<data name="label10.Size" type="System.Drawing.Size, System.Drawing">
<value>89, 12</value>
</data>
<data name="label10.Text" xml:space="preserve">
<value>伪装域名(host)</value>
</data>
<data name="cmbHeaderType.Location" type="System.Drawing.Point, System.Drawing">
<value>127, 67</value>
</data>
<data name="groupBox2.Text" xml:space="preserve">
<value>底层传输方式(transport)</value>
</data>
<data name="label8.Location" type="System.Drawing.Point, System.Drawing">
<value>353, 158</value>
</data>
@@ -307,37 +187,6 @@
<data name="btnOK.Text" xml:space="preserve">
<value>确定(&amp;O)</value>
</data>
<data name="MenuItemImportClient.Size" type="System.Drawing.Size, System.Drawing">
<value>171, 22</value>
</data>
<data name="MenuItemImportClient.Text" xml:space="preserve">
<value>导入客户端配置</value>
</data>
<data name="MenuItemImportServer.Size" type="System.Drawing.Size, System.Drawing">
<value>171, 22</value>
</data>
<data name="MenuItemImportServer.Text" xml:space="preserve">
<value>导入服务端配置</value>
</data>
<data name="toolStripSeparator1.Size" type="System.Drawing.Size, System.Drawing">
<value>168, 6</value>
</data>
<data name="MenuItemImportClipboard.Size" type="System.Drawing.Size, System.Drawing">
<value>171, 22</value>
</data>
<data name="MenuItemImportClipboard.Text" xml:space="preserve">
<value>从剪贴板导入URL</value>
</data>
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="MenuItem1.Enabled" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="MenuItem1.Size" type="System.Drawing.Size, System.Drawing">
<value>92, 21</value>
</data>
<data name="MenuItem1.Text" xml:space="preserve">
<value>导入配置文件</value>
</data>
<data name="$this.Text" xml:space="preserve">
<value>编辑或添加[VLESS]服务器</value>
</data>

View File

@@ -31,12 +31,8 @@
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AddServer6Form));
this.btnClose = new System.Windows.Forms.Button();
this.groupBox1 = new System.Windows.Forms.GroupBox();
this.label21 = new System.Windows.Forms.Label();
this.cmbAllowInsecure = new System.Windows.Forms.ComboBox();
this.label15 = new System.Windows.Forms.Label();
this.cmbStreamSecurity = new System.Windows.Forms.ComboBox();
this.cmbFlow = new System.Windows.Forms.ComboBox();
this.label4 = new System.Windows.Forms.Label();
this.txtSNI = new System.Windows.Forms.TextBox();
this.label13 = new System.Windows.Forms.Label();
this.txtRemarks = new System.Windows.Forms.TextBox();
this.label6 = new System.Windows.Forms.Label();
@@ -46,10 +42,13 @@
this.label2 = new System.Windows.Forms.Label();
this.txtAddress = new System.Windows.Forms.TextBox();
this.label1 = new System.Windows.Forms.Label();
this.panel3 = new System.Windows.Forms.Panel();
this.transportControl = new v2rayN.Forms.ServerTransportControl();
this.panel2 = new System.Windows.Forms.Panel();
this.btnOK = new System.Windows.Forms.Button();
this.panel1 = new System.Windows.Forms.Panel();
this.groupBox1.SuspendLayout();
this.panel3.SuspendLayout();
this.panel2.SuspendLayout();
this.SuspendLayout();
//
@@ -63,12 +62,8 @@
//
// groupBox1
//
this.groupBox1.Controls.Add(this.label21);
this.groupBox1.Controls.Add(this.cmbAllowInsecure);
this.groupBox1.Controls.Add(this.label15);
this.groupBox1.Controls.Add(this.cmbStreamSecurity);
this.groupBox1.Controls.Add(this.cmbFlow);
this.groupBox1.Controls.Add(this.label4);
this.groupBox1.Controls.Add(this.txtSNI);
this.groupBox1.Controls.Add(this.label13);
this.groupBox1.Controls.Add(this.txtRemarks);
this.groupBox1.Controls.Add(this.label6);
@@ -82,47 +77,17 @@
this.groupBox1.Name = "groupBox1";
this.groupBox1.TabStop = false;
//
// label21
// cmbFlow
//
resources.ApplyResources(this.label21, "label21");
this.label21.Name = "label21";
//
// cmbAllowInsecure
//
this.cmbAllowInsecure.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cmbAllowInsecure.FormattingEnabled = true;
this.cmbAllowInsecure.Items.AddRange(new object[] {
resources.GetString("cmbAllowInsecure.Items"),
resources.GetString("cmbAllowInsecure.Items1"),
resources.GetString("cmbAllowInsecure.Items2")});
resources.ApplyResources(this.cmbAllowInsecure, "cmbAllowInsecure");
this.cmbAllowInsecure.Name = "cmbAllowInsecure";
//
// label15
//
resources.ApplyResources(this.label15, "label15");
this.label15.Name = "label15";
//
// cmbStreamSecurity
//
this.cmbStreamSecurity.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cmbStreamSecurity.FormattingEnabled = true;
this.cmbStreamSecurity.Items.AddRange(new object[] {
resources.GetString("cmbStreamSecurity.Items"),
resources.GetString("cmbStreamSecurity.Items1")});
resources.ApplyResources(this.cmbStreamSecurity, "cmbStreamSecurity");
this.cmbStreamSecurity.Name = "cmbStreamSecurity";
this.cmbFlow.FormattingEnabled = true;
resources.ApplyResources(this.cmbFlow, "cmbFlow");
this.cmbFlow.Name = "cmbFlow";
//
// label4
//
resources.ApplyResources(this.label4, "label4");
this.label4.Name = "label4";
//
// txtSNI
//
resources.ApplyResources(this.txtSNI, "txtSNI");
this.txtSNI.Name = "txtSNI";
//
// label13
//
resources.ApplyResources(this.label13, "label13");
@@ -168,6 +133,18 @@
resources.ApplyResources(this.label1, "label1");
this.label1.Name = "label1";
//
// panel3
//
this.panel3.Controls.Add(this.transportControl);
resources.ApplyResources(this.panel3, "panel3");
this.panel3.Name = "panel3";
//
// transportControl
//
this.transportControl.AllowXtls = false;
resources.ApplyResources(this.transportControl, "transportControl");
this.transportControl.Name = "transportControl";
//
// panel2
//
this.panel2.Controls.Add(this.btnClose);
@@ -193,6 +170,7 @@
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.CancelButton = this.btnClose;
this.Controls.Add(this.groupBox1);
this.Controls.Add(this.panel3);
this.Controls.Add(this.panel2);
this.Controls.Add(this.panel1);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
@@ -201,6 +179,7 @@
this.Load += new System.EventHandler(this.AddServer6Form_Load);
this.groupBox1.ResumeLayout(false);
this.groupBox1.PerformLayout();
this.panel3.ResumeLayout(false);
this.panel2.ResumeLayout(false);
this.ResumeLayout(false);
@@ -222,11 +201,9 @@
private System.Windows.Forms.Panel panel1;
private System.Windows.Forms.Panel panel2;
private System.Windows.Forms.Label label13;
private System.Windows.Forms.Panel panel3;
private ServerTransportControl transportControl;
private System.Windows.Forms.ComboBox cmbFlow;
private System.Windows.Forms.Label label4;
private System.Windows.Forms.TextBox txtSNI;
private System.Windows.Forms.Label label15;
private System.Windows.Forms.ComboBox cmbStreamSecurity;
private System.Windows.Forms.Label label21;
private System.Windows.Forms.ComboBox cmbAllowInsecure;
}
}

View File

@@ -14,6 +14,8 @@ namespace v2rayN.Forms
private void AddServer6Form_Load(object sender, EventArgs e)
{
cmbFlow.Items.AddRange(Global.xtlsFlows.ToArray());
transportControl.AllowXtls = true;
if (EditIndex >= 0)
{
vmessItem = config.vmess[EditIndex];
@@ -31,14 +33,13 @@ namespace v2rayN.Forms
/// </summary>
private void BindingServer()
{
txtAddress.Text = vmessItem.address;
txtPort.Text = vmessItem.port.ToString();
txtId.Text = vmessItem.id;
txtSNI.Text = vmessItem.sni;
cmbFlow.Text = vmessItem.flow;
txtRemarks.Text = vmessItem.remarks;
cmbStreamSecurity.Text = vmessItem.streamSecurity;
cmbAllowInsecure.Text = vmessItem.allowInsecure;
transportControl.BindingServer(vmessItem);
}
@@ -50,10 +51,10 @@ namespace v2rayN.Forms
txtAddress.Text = "";
txtPort.Text = "";
txtId.Text = "";
txtSNI.Text = "";
cmbFlow.Text = "";
txtRemarks.Text = "";
cmbStreamSecurity.Text = "tls";
cmbAllowInsecure.Text = "";
transportControl.ClearServer(vmessItem);
}
private void btnOK_Click(object sender, EventArgs e)
@@ -61,10 +62,8 @@ namespace v2rayN.Forms
string address = txtAddress.Text;
string port = txtPort.Text;
string id = txtId.Text;
string sni = txtSNI.Text;
string flow = cmbFlow.Text;
string remarks = txtRemarks.Text;
string streamSecurity = cmbStreamSecurity.Text;
string allowInsecure = cmbAllowInsecure.Text;
if (Utils.IsNullOrEmpty(address))
{
@@ -80,15 +79,15 @@ namespace v2rayN.Forms
{
UI.Show(UIRes.I18N("FillPassword"));
return;
}
}
transportControl.EndBindingServer();
vmessItem.address = address;
vmessItem.port = Utils.ToInt(port);
vmessItem.id = id;
vmessItem.sni = sni.Replace(" ", "");
vmessItem.flow = flow;
vmessItem.remarks = remarks;
vmessItem.streamSecurity = streamSecurity;
vmessItem.allowInsecure = allowInsecure;
if (ConfigHandler.AddTrojanServer(ref config, vmessItem, EditIndex) == 0)
{

View File

@@ -117,6 +117,10 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="btnClose.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="btnClose.Location" type="System.Drawing.Point, System.Drawing">
<value>396, 17</value>
@@ -143,124 +147,27 @@
<data name="&gt;&gt;btnClose.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="label21.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
<data name="cmbFlow.Location" type="System.Drawing.Point, System.Drawing">
<value>127, 123</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="label21.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
<data name="cmbFlow.Size" type="System.Drawing.Size, System.Drawing">
<value>211, 20</value>
</data>
<data name="label21.Location" type="System.Drawing.Point, System.Drawing">
<value>224, 189</value>
</data>
<data name="label21.Size" type="System.Drawing.Size, System.Drawing">
<value>83, 12</value>
</data>
<data name="label21.TabIndex" type="System.Int32, mscorlib">
<value>33</value>
</data>
<data name="label21.Text" xml:space="preserve">
<value>allowInsecure</value>
</data>
<data name="&gt;&gt;label21.Name" xml:space="preserve">
<value>label21</value>
</data>
<data name="&gt;&gt;label21.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;label21.Parent" xml:space="preserve">
<value>groupBox1</value>
</data>
<data name="&gt;&gt;label21.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="cmbAllowInsecure.Items" xml:space="preserve">
<value />
</data>
<data name="cmbAllowInsecure.Items1" xml:space="preserve">
<value>true</value>
</data>
<data name="cmbAllowInsecure.Items2" xml:space="preserve">
<value>false</value>
</data>
<data name="cmbAllowInsecure.Location" type="System.Drawing.Point, System.Drawing">
<value>312, 185</value>
</data>
<data name="cmbAllowInsecure.Size" type="System.Drawing.Size, System.Drawing">
<value>80, 20</value>
</data>
<data name="cmbAllowInsecure.TabIndex" type="System.Int32, mscorlib">
<value>32</value>
</data>
<data name="&gt;&gt;cmbAllowInsecure.Name" xml:space="preserve">
<value>cmbAllowInsecure</value>
</data>
<data name="&gt;&gt;cmbAllowInsecure.Type" xml:space="preserve">
<value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;cmbAllowInsecure.Parent" xml:space="preserve">
<value>groupBox1</value>
</data>
<data name="&gt;&gt;cmbAllowInsecure.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="label15.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="label15.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="label15.Location" type="System.Drawing.Point, System.Drawing">
<value>12, 189</value>
</data>
<data name="label15.Size" type="System.Drawing.Size, System.Drawing">
<value>23, 12</value>
</data>
<data name="label15.TabIndex" type="System.Int32, mscorlib">
<value>26</value>
</data>
<data name="label15.Text" xml:space="preserve">
<value>TLS</value>
</data>
<data name="&gt;&gt;label15.Name" xml:space="preserve">
<value>label15</value>
</data>
<data name="&gt;&gt;label15.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;label15.Parent" xml:space="preserve">
<value>groupBox1</value>
</data>
<data name="&gt;&gt;label15.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="cmbStreamSecurity.Items" xml:space="preserve">
<value>tls</value>
</data>
<data name="cmbStreamSecurity.Items1" xml:space="preserve">
<value>xtls</value>
</data>
<data name="cmbStreamSecurity.Location" type="System.Drawing.Point, System.Drawing">
<value>127, 185</value>
</data>
<data name="cmbStreamSecurity.Size" type="System.Drawing.Size, System.Drawing">
<value>60, 20</value>
</data>
<data name="cmbStreamSecurity.TabIndex" type="System.Int32, mscorlib">
<value>25</value>
</data>
<data name="&gt;&gt;cmbStreamSecurity.Name" xml:space="preserve">
<value>cmbStreamSecurity</value>
</data>
<data name="&gt;&gt;cmbStreamSecurity.Type" xml:space="preserve">
<value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;cmbStreamSecurity.Parent" xml:space="preserve">
<value>groupBox1</value>
</data>
<data name="&gt;&gt;cmbStreamSecurity.ZOrder" xml:space="preserve">
<data name="cmbFlow.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
</data>
<data name="&gt;&gt;cmbFlow.Name" xml:space="preserve">
<value>cmbFlow</value>
</data>
<data name="&gt;&gt;cmbFlow.Type" xml:space="preserve">
<value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;cmbFlow.Parent" xml:space="preserve">
<value>groupBox1</value>
</data>
<data name="&gt;&gt;cmbFlow.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="label4.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
@@ -268,16 +175,16 @@
<value>NoControl</value>
</data>
<data name="label4.Location" type="System.Drawing.Point, System.Drawing">
<value>12, 156</value>
<value>12, 127</value>
</data>
<data name="label4.Size" type="System.Drawing.Size, System.Drawing">
<value>23, 12</value>
<value>29, 12</value>
</data>
<data name="label4.TabIndex" type="System.Int32, mscorlib">
<value>24</value>
<value>27</value>
</data>
<data name="label4.Text" xml:space="preserve">
<value>SNI</value>
<value>Flow</value>
</data>
<data name="&gt;&gt;label4.Name" xml:space="preserve">
<value>label4</value>
@@ -289,34 +196,16 @@
<value>groupBox1</value>
</data>
<data name="&gt;&gt;label4.ZOrder" xml:space="preserve">
<value>4</value>
</data>
<data name="txtSNI.Location" type="System.Drawing.Point, System.Drawing">
<value>127, 152</value>
</data>
<data name="txtSNI.Size" type="System.Drawing.Size, System.Drawing">
<value>359, 21</value>
</data>
<data name="txtSNI.TabIndex" type="System.Int32, mscorlib">
<value>23</value>
</data>
<data name="&gt;&gt;txtSNI.Name" xml:space="preserve">
<value>txtSNI</value>
</data>
<data name="&gt;&gt;txtSNI.Type" xml:space="preserve">
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;txtSNI.Parent" xml:space="preserve">
<value>groupBox1</value>
</data>
<data name="&gt;&gt;txtSNI.ZOrder" xml:space="preserve">
<value>5</value>
<value>1</value>
</data>
<data name="label13.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="label13.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="label13.Location" type="System.Drawing.Point, System.Drawing">
<value>428, 124</value>
<value>428, 158</value>
</data>
<data name="label13.Size" type="System.Drawing.Size, System.Drawing">
<value>113, 12</value>
@@ -337,16 +226,16 @@
<value>groupBox1</value>
</data>
<data name="&gt;&gt;label13.ZOrder" xml:space="preserve">
<value>6</value>
<value>2</value>
</data>
<data name="txtRemarks.Location" type="System.Drawing.Point, System.Drawing">
<value>127, 121</value>
<value>127, 155</value>
</data>
<data name="txtRemarks.Size" type="System.Drawing.Size, System.Drawing">
<value>265, 21</value>
</data>
<data name="txtRemarks.TabIndex" type="System.Int32, mscorlib">
<value>11</value>
<value>4</value>
</data>
<data name="&gt;&gt;txtRemarks.Name" xml:space="preserve">
<value>txtRemarks</value>
@@ -358,13 +247,16 @@
<value>groupBox1</value>
</data>
<data name="&gt;&gt;txtRemarks.ZOrder" xml:space="preserve">
<value>7</value>
<value>3</value>
</data>
<data name="label6.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="label6.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="label6.Location" type="System.Drawing.Point, System.Drawing">
<value>12, 125</value>
<value>12, 159</value>
</data>
<data name="label6.Size" type="System.Drawing.Size, System.Drawing">
<value>95, 12</value>
@@ -385,7 +277,7 @@
<value>groupBox1</value>
</data>
<data name="&gt;&gt;label6.ZOrder" xml:space="preserve">
<value>8</value>
<value>4</value>
</data>
<data name="txtId.Location" type="System.Drawing.Point, System.Drawing">
<value>127, 91</value>
@@ -394,7 +286,7 @@
<value>265, 21</value>
</data>
<data name="txtId.TabIndex" type="System.Int32, mscorlib">
<value>5</value>
<value>2</value>
</data>
<data name="&gt;&gt;txtId.Name" xml:space="preserve">
<value>txtId</value>
@@ -406,11 +298,14 @@
<value>groupBox1</value>
</data>
<data name="&gt;&gt;txtId.ZOrder" xml:space="preserve">
<value>9</value>
<value>5</value>
</data>
<data name="label3.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="label3.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="label3.Location" type="System.Drawing.Point, System.Drawing">
<value>12, 93</value>
</data>
@@ -433,7 +328,7 @@
<value>groupBox1</value>
</data>
<data name="&gt;&gt;label3.ZOrder" xml:space="preserve">
<value>10</value>
<value>6</value>
</data>
<data name="txtPort.Location" type="System.Drawing.Point, System.Drawing">
<value>127, 59</value>
@@ -442,7 +337,7 @@
<value>194, 21</value>
</data>
<data name="txtPort.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
<value>1</value>
</data>
<data name="&gt;&gt;txtPort.Name" xml:space="preserve">
<value>txtPort</value>
@@ -454,11 +349,14 @@
<value>groupBox1</value>
</data>
<data name="&gt;&gt;txtPort.ZOrder" xml:space="preserve">
<value>11</value>
<value>7</value>
</data>
<data name="label2.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="label2.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="label2.Location" type="System.Drawing.Point, System.Drawing">
<value>12, 62</value>
</data>
@@ -481,7 +379,7 @@
<value>groupBox1</value>
</data>
<data name="&gt;&gt;label2.ZOrder" xml:space="preserve">
<value>12</value>
<value>8</value>
</data>
<data name="txtAddress.Location" type="System.Drawing.Point, System.Drawing">
<value>127, 27</value>
@@ -490,7 +388,7 @@
<value>359, 21</value>
</data>
<data name="txtAddress.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
<value>0</value>
</data>
<data name="&gt;&gt;txtAddress.Name" xml:space="preserve">
<value>txtAddress</value>
@@ -502,11 +400,14 @@
<value>groupBox1</value>
</data>
<data name="&gt;&gt;txtAddress.ZOrder" xml:space="preserve">
<value>13</value>
<value>9</value>
</data>
<data name="label1.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="label1.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="label1.Location" type="System.Drawing.Point, System.Drawing">
<value>12, 31</value>
</data>
@@ -529,7 +430,7 @@
<value>groupBox1</value>
</data>
<data name="&gt;&gt;label1.ZOrder" xml:space="preserve">
<value>14</value>
<value>10</value>
</data>
<data name="groupBox1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
@@ -538,7 +439,7 @@
<value>0, 10</value>
</data>
<data name="groupBox1.Size" type="System.Drawing.Size, System.Drawing">
<value>547, 221</value>
<value>707, 191</value>
</data>
<data name="groupBox1.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
@@ -558,6 +459,57 @@
<data name="&gt;&gt;groupBox1.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="transportControl.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="transportControl.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 0</value>
</data>
<data name="transportControl.Size" type="System.Drawing.Size, System.Drawing">
<value>707, 230</value>
</data>
<data name="transportControl.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="&gt;&gt;transportControl.Name" xml:space="preserve">
<value>transportControl</value>
</data>
<data name="&gt;&gt;transportControl.Type" xml:space="preserve">
<value>v2rayN.Forms.ServerTransportControl, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;transportControl.Parent" xml:space="preserve">
<value>panel3</value>
</data>
<data name="&gt;&gt;transportControl.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="panel3.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Bottom</value>
</data>
<data name="panel3.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 201</value>
</data>
<data name="panel3.Size" type="System.Drawing.Size, System.Drawing">
<value>707, 230</value>
</data>
<data name="panel3.TabIndex" type="System.Int32, mscorlib">
<value>8</value>
</data>
<data name="&gt;&gt;panel3.Name" xml:space="preserve">
<value>panel3</value>
</data>
<data name="&gt;&gt;panel3.Type" xml:space="preserve">
<value>System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;panel3.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;panel3.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="btnOK.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="btnOK.Location" type="System.Drawing.Point, System.Drawing">
<value>303, 17</value>
</data>
@@ -586,10 +538,10 @@
<value>Bottom</value>
</data>
<data name="panel2.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 231</value>
<value>0, 431</value>
</data>
<data name="panel2.Size" type="System.Drawing.Size, System.Drawing">
<value>547, 60</value>
<value>707, 60</value>
</data>
<data name="panel2.TabIndex" type="System.Int32, mscorlib">
<value>7</value>
@@ -604,7 +556,7 @@
<value>$this</value>
</data>
<data name="&gt;&gt;panel2.ZOrder" xml:space="preserve">
<value>1</value>
<value>2</value>
</data>
<data name="panel1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Top</value>
@@ -613,7 +565,7 @@
<value>0, 0</value>
</data>
<data name="panel1.Size" type="System.Drawing.Size, System.Drawing">
<value>547, 10</value>
<value>707, 10</value>
</data>
<data name="panel1.TabIndex" type="System.Int32, mscorlib">
<value>6</value>
@@ -628,7 +580,7 @@
<value>$this</value>
</data>
<data name="&gt;&gt;panel1.ZOrder" xml:space="preserve">
<value>2</value>
<value>3</value>
</data>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
@@ -637,7 +589,7 @@
<value>6, 12</value>
</data>
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
<value>547, 291</value>
<value>707, 491</value>
</data>
<data name="$this.Text" xml:space="preserve">
<value>Edit or add a [Trojan] server</value>

View File

@@ -121,24 +121,11 @@
<value>取消(&amp;C)</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="label21.Size" type="System.Drawing.Size, System.Drawing">
<value>167, 12</value>
<data name="label4.Size" type="System.Drawing.Size, System.Drawing">
<value>65, 12</value>
</data>
<data name="label21.Text" xml:space="preserve">
<value>跳过证书验证(allowInsecure)</value>
</data>
<data name="cmbAllowInsecure.Location" type="System.Drawing.Point, System.Drawing">
<value>406, 185</value>
</data>
<data name="label15.Size" type="System.Drawing.Size, System.Drawing">
<value>107, 12</value>
</data>
<data name="label15.Text" xml:space="preserve">
<value>底层传输安全(tls)</value>
</data>
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="cmbStreamSecurity.Enabled" type="System.Boolean, mscorlib">
<value>False</value>
<data name="label4.Text" xml:space="preserve">
<value>流控(flow)</value>
</data>
<data name="label13.Text" xml:space="preserve">
<value>*手填,方便识别管理</value>

View File

@@ -33,32 +33,6 @@
this.groupBox1 = new System.Windows.Forms.GroupBox();
this.btnGUID = new System.Windows.Forms.Button();
this.label13 = new System.Windows.Forms.Label();
this.groupBox2 = new System.Windows.Forms.GroupBox();
this.label25 = new System.Windows.Forms.Label();
this.label24 = new System.Windows.Forms.Label();
this.label23 = new System.Windows.Forms.Label();
this.panTlsMore = new System.Windows.Forms.Panel();
this.txtSNI = new System.Windows.Forms.TextBox();
this.label22 = new System.Windows.Forms.Label();
this.label21 = new System.Windows.Forms.Label();
this.cmbAllowInsecure = new System.Windows.Forms.ComboBox();
this.label9 = new System.Windows.Forms.Label();
this.label20 = new System.Windows.Forms.Label();
this.txtPath = new System.Windows.Forms.TextBox();
this.cmbNetwork = new System.Windows.Forms.ComboBox();
this.label7 = new System.Windows.Forms.Label();
this.label19 = new System.Windows.Forms.Label();
this.label18 = new System.Windows.Forms.Label();
this.label17 = new System.Windows.Forms.Label();
this.label16 = new System.Windows.Forms.Label();
this.label14 = new System.Windows.Forms.Label();
this.label15 = new System.Windows.Forms.Label();
this.cmbStreamSecurity = new System.Windows.Forms.ComboBox();
this.label12 = new System.Windows.Forms.Label();
this.txtRequestHost = new System.Windows.Forms.TextBox();
this.label11 = new System.Windows.Forms.Label();
this.label10 = new System.Windows.Forms.Label();
this.cmbHeaderType = new System.Windows.Forms.ComboBox();
this.label8 = new System.Windows.Forms.Label();
this.cmbSecurity = new System.Windows.Forms.ComboBox();
this.txtRemarks = new System.Windows.Forms.TextBox();
@@ -81,11 +55,12 @@
this.MenuItemImportServer = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
this.MenuItemImportClipboard = new System.Windows.Forms.ToolStripMenuItem();
this.panel3 = new System.Windows.Forms.Panel();
this.transportControl = new v2rayN.Forms.ServerTransportControl();
this.groupBox1.SuspendLayout();
this.groupBox2.SuspendLayout();
this.panTlsMore.SuspendLayout();
this.panel2.SuspendLayout();
this.menuServer.SuspendLayout();
this.panel3.SuspendLayout();
this.SuspendLayout();
//
// btnClose
@@ -100,7 +75,6 @@
//
this.groupBox1.Controls.Add(this.btnGUID);
this.groupBox1.Controls.Add(this.label13);
this.groupBox1.Controls.Add(this.groupBox2);
this.groupBox1.Controls.Add(this.label8);
this.groupBox1.Controls.Add(this.cmbSecurity);
this.groupBox1.Controls.Add(this.txtRemarks);
@@ -130,194 +104,6 @@
resources.ApplyResources(this.label13, "label13");
this.label13.Name = "label13";
//
// groupBox2
//
this.groupBox2.Controls.Add(this.label25);
this.groupBox2.Controls.Add(this.label24);
this.groupBox2.Controls.Add(this.label23);
this.groupBox2.Controls.Add(this.panTlsMore);
this.groupBox2.Controls.Add(this.label9);
this.groupBox2.Controls.Add(this.label20);
this.groupBox2.Controls.Add(this.txtPath);
this.groupBox2.Controls.Add(this.cmbNetwork);
this.groupBox2.Controls.Add(this.label7);
this.groupBox2.Controls.Add(this.label19);
this.groupBox2.Controls.Add(this.label18);
this.groupBox2.Controls.Add(this.label17);
this.groupBox2.Controls.Add(this.label16);
this.groupBox2.Controls.Add(this.label14);
this.groupBox2.Controls.Add(this.label15);
this.groupBox2.Controls.Add(this.cmbStreamSecurity);
this.groupBox2.Controls.Add(this.label12);
this.groupBox2.Controls.Add(this.txtRequestHost);
this.groupBox2.Controls.Add(this.label11);
this.groupBox2.Controls.Add(this.label10);
this.groupBox2.Controls.Add(this.cmbHeaderType);
resources.ApplyResources(this.groupBox2, "groupBox2");
this.groupBox2.Name = "groupBox2";
this.groupBox2.TabStop = false;
//
// label25
//
resources.ApplyResources(this.label25, "label25");
this.label25.Name = "label25";
//
// label24
//
resources.ApplyResources(this.label24, "label24");
this.label24.Name = "label24";
//
// label23
//
resources.ApplyResources(this.label23, "label23");
this.label23.Name = "label23";
//
// panTlsMore
//
this.panTlsMore.Controls.Add(this.txtSNI);
this.panTlsMore.Controls.Add(this.label22);
this.panTlsMore.Controls.Add(this.label21);
this.panTlsMore.Controls.Add(this.cmbAllowInsecure);
resources.ApplyResources(this.panTlsMore, "panTlsMore");
this.panTlsMore.Name = "panTlsMore";
//
// txtSNI
//
resources.ApplyResources(this.txtSNI, "txtSNI");
this.txtSNI.Name = "txtSNI";
//
// label22
//
resources.ApplyResources(this.label22, "label22");
this.label22.Name = "label22";
//
// label21
//
resources.ApplyResources(this.label21, "label21");
this.label21.Name = "label21";
//
// cmbAllowInsecure
//
this.cmbAllowInsecure.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cmbAllowInsecure.FormattingEnabled = true;
this.cmbAllowInsecure.Items.AddRange(new object[] {
resources.GetString("cmbAllowInsecure.Items"),
resources.GetString("cmbAllowInsecure.Items1"),
resources.GetString("cmbAllowInsecure.Items2")});
resources.ApplyResources(this.cmbAllowInsecure, "cmbAllowInsecure");
this.cmbAllowInsecure.Name = "cmbAllowInsecure";
//
// label9
//
resources.ApplyResources(this.label9, "label9");
this.label9.Name = "label9";
//
// label20
//
resources.ApplyResources(this.label20, "label20");
this.label20.Name = "label20";
//
// txtPath
//
resources.ApplyResources(this.txtPath, "txtPath");
this.txtPath.Name = "txtPath";
//
// cmbNetwork
//
this.cmbNetwork.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cmbNetwork.FormattingEnabled = true;
this.cmbNetwork.Items.AddRange(new object[] {
resources.GetString("cmbNetwork.Items"),
resources.GetString("cmbNetwork.Items1"),
resources.GetString("cmbNetwork.Items2"),
resources.GetString("cmbNetwork.Items3"),
resources.GetString("cmbNetwork.Items4"),
resources.GetString("cmbNetwork.Items5")});
resources.ApplyResources(this.cmbNetwork, "cmbNetwork");
this.cmbNetwork.Name = "cmbNetwork";
this.cmbNetwork.SelectedIndexChanged += new System.EventHandler(this.cmbNetwork_SelectedIndexChanged);
//
// label7
//
resources.ApplyResources(this.label7, "label7");
this.label7.Name = "label7";
//
// label19
//
resources.ApplyResources(this.label19, "label19");
this.label19.Name = "label19";
//
// label18
//
resources.ApplyResources(this.label18, "label18");
this.label18.Name = "label18";
//
// label17
//
resources.ApplyResources(this.label17, "label17");
this.label17.Name = "label17";
//
// label16
//
resources.ApplyResources(this.label16, "label16");
this.label16.Name = "label16";
//
// label14
//
resources.ApplyResources(this.label14, "label14");
this.label14.Name = "label14";
//
// label15
//
resources.ApplyResources(this.label15, "label15");
this.label15.Name = "label15";
//
// cmbStreamSecurity
//
this.cmbStreamSecurity.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cmbStreamSecurity.FormattingEnabled = true;
this.cmbStreamSecurity.Items.AddRange(new object[] {
resources.GetString("cmbStreamSecurity.Items"),
resources.GetString("cmbStreamSecurity.Items1")});
resources.ApplyResources(this.cmbStreamSecurity, "cmbStreamSecurity");
this.cmbStreamSecurity.Name = "cmbStreamSecurity";
this.cmbStreamSecurity.SelectedIndexChanged += new System.EventHandler(this.cmbStreamSecurity_SelectedIndexChanged);
//
// label12
//
resources.ApplyResources(this.label12, "label12");
this.label12.Name = "label12";
//
// txtRequestHost
//
resources.ApplyResources(this.txtRequestHost, "txtRequestHost");
this.txtRequestHost.Name = "txtRequestHost";
//
// label11
//
resources.ApplyResources(this.label11, "label11");
this.label11.Name = "label11";
//
// label10
//
resources.ApplyResources(this.label10, "label10");
this.label10.Name = "label10";
//
// cmbHeaderType
//
this.cmbHeaderType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cmbHeaderType.FormattingEnabled = true;
this.cmbHeaderType.Items.AddRange(new object[] {
resources.GetString("cmbHeaderType.Items"),
resources.GetString("cmbHeaderType.Items1"),
resources.GetString("cmbHeaderType.Items2"),
resources.GetString("cmbHeaderType.Items3"),
resources.GetString("cmbHeaderType.Items4"),
resources.GetString("cmbHeaderType.Items5"),
resources.GetString("cmbHeaderType.Items6")});
resources.ApplyResources(this.cmbHeaderType, "cmbHeaderType");
this.cmbHeaderType.Name = "cmbHeaderType";
//
// label8
//
resources.ApplyResources(this.label8, "label8");
@@ -327,12 +113,6 @@
//
this.cmbSecurity.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cmbSecurity.FormattingEnabled = true;
this.cmbSecurity.Items.AddRange(new object[] {
resources.GetString("cmbSecurity.Items"),
resources.GetString("cmbSecurity.Items1"),
resources.GetString("cmbSecurity.Items2"),
resources.GetString("cmbSecurity.Items3"),
resources.GetString("cmbSecurity.Items4")});
resources.ApplyResources(this.cmbSecurity, "cmbSecurity");
this.cmbSecurity.Name = "cmbSecurity";
//
@@ -450,12 +230,25 @@
resources.ApplyResources(this.MenuItemImportClipboard, "MenuItemImportClipboard");
this.MenuItemImportClipboard.Click += new System.EventHandler(this.MenuItemImportClipboard_Click);
//
// panel3
//
this.panel3.Controls.Add(this.transportControl);
resources.ApplyResources(this.panel3, "panel3");
this.panel3.Name = "panel3";
//
// transportControl
//
this.transportControl.AllowXtls = false;
resources.ApplyResources(this.transportControl, "transportControl");
this.transportControl.Name = "transportControl";
//
// AddServerForm
//
resources.ApplyResources(this, "$this");
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.CancelButton = this.btnClose;
this.Controls.Add(this.groupBox1);
this.Controls.Add(this.panel3);
this.Controls.Add(this.panel2);
this.Controls.Add(this.panel1);
this.Controls.Add(this.menuServer);
@@ -464,13 +257,10 @@
this.Load += new System.EventHandler(this.AddServerForm_Load);
this.groupBox1.ResumeLayout(false);
this.groupBox1.PerformLayout();
this.groupBox2.ResumeLayout(false);
this.groupBox2.PerformLayout();
this.panTlsMore.ResumeLayout(false);
this.panTlsMore.PerformLayout();
this.panel2.ResumeLayout(false);
this.menuServer.ResumeLayout(false);
this.menuServer.PerformLayout();
this.panel3.ResumeLayout(false);
this.ResumeLayout(false);
this.PerformLayout();
@@ -493,42 +283,18 @@
private System.Windows.Forms.TextBox txtAddress;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.ComboBox cmbSecurity;
private System.Windows.Forms.ComboBox cmbNetwork;
private System.Windows.Forms.Label label7;
private System.Windows.Forms.Label label9;
private System.Windows.Forms.Label label8;
private System.Windows.Forms.Panel panel1;
private System.Windows.Forms.Panel panel2;
private System.Windows.Forms.TextBox txtRequestHost;
private System.Windows.Forms.Label label10;
private System.Windows.Forms.Label label11;
private System.Windows.Forms.ComboBox cmbHeaderType;
private System.Windows.Forms.Label label12;
private System.Windows.Forms.GroupBox groupBox2;
private System.Windows.Forms.Label label13;
private System.Windows.Forms.MenuStrip menuServer;
private System.Windows.Forms.ToolStripMenuItem MenuItem1;
private System.Windows.Forms.ToolStripMenuItem MenuItemImportClient;
private System.Windows.Forms.ToolStripMenuItem MenuItemImportServer;
private System.Windows.Forms.Label label15;
private System.Windows.Forms.ComboBox cmbStreamSecurity;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;
private System.Windows.Forms.ToolStripMenuItem MenuItemImportClipboard;
private System.Windows.Forms.Button btnGUID;
private System.Windows.Forms.Label label16;
private System.Windows.Forms.Label label14;
private System.Windows.Forms.Label label17;
private System.Windows.Forms.Label label18;
private System.Windows.Forms.Label label19;
private System.Windows.Forms.TextBox txtPath;
private System.Windows.Forms.Label label20;
private System.Windows.Forms.Label label21;
private System.Windows.Forms.ComboBox cmbAllowInsecure;
private System.Windows.Forms.Panel panTlsMore;
private System.Windows.Forms.Label label24;
private System.Windows.Forms.Label label23;
private System.Windows.Forms.Label label22;
private System.Windows.Forms.TextBox txtSNI;
private System.Windows.Forms.Label label25;
private System.Windows.Forms.Panel panel3;
private ServerTransportControl transportControl;
}
}

View File

@@ -6,7 +6,7 @@ using v2rayN.Mode;
namespace v2rayN.Forms
{
public partial class AddServerForm : BaseServerForm
{
{
public AddServerForm()
{
@@ -15,6 +15,7 @@ namespace v2rayN.Forms
private void AddServerForm_Load(object sender, EventArgs e)
{
cmbSecurity.Items.AddRange(Global.vmessSecuritys.ToArray());
if (EditIndex >= 0)
{
vmessItem = config.vmess[EditIndex];
@@ -37,15 +38,9 @@ namespace v2rayN.Forms
txtId.Text = vmessItem.id;
txtAlterId.Text = vmessItem.alterId.ToString();
cmbSecurity.Text = vmessItem.security;
cmbNetwork.Text = vmessItem.network;
txtRemarks.Text = vmessItem.remarks;
cmbHeaderType.Text = vmessItem.headerType;
txtRequestHost.Text = vmessItem.requestHost;
txtPath.Text = vmessItem.path;
cmbStreamSecurity.Text = vmessItem.streamSecurity;
cmbAllowInsecure.Text = vmessItem.allowInsecure;
txtSNI.Text = vmessItem.sni;
transportControl.BindingServer(vmessItem);
}
@@ -59,56 +54,11 @@ namespace v2rayN.Forms
txtId.Text = "";
txtAlterId.Text = "0";
cmbSecurity.Text = Global.DefaultSecurity;
cmbNetwork.Text = Global.DefaultNetwork;
txtRemarks.Text = "";
cmbHeaderType.Text = Global.None;
txtRequestHost.Text = "";
cmbStreamSecurity.Text = "";
cmbAllowInsecure.Text = "";
txtPath.Text = "";
txtSNI.Text = "";
transportControl.ClearServer(vmessItem);
}
private void cmbNetwork_SelectedIndexChanged(object sender, EventArgs e)
{
SetHeaderType();
}
/// <summary>
/// 设置伪装选项
/// </summary>
private void SetHeaderType()
{
cmbHeaderType.Items.Clear();
string network = cmbNetwork.Text;
if (Utils.IsNullOrEmpty(network))
{
cmbHeaderType.Items.Add(Global.None);
return;
}
cmbHeaderType.Items.Add(Global.None);
if (network.Equals(Global.DefaultNetwork))
{
cmbHeaderType.Items.Add(Global.TcpHeaderHttp);
}
else if (network.Equals("kcp") || network.Equals("quic"))
{
cmbHeaderType.Items.Add("srtp");
cmbHeaderType.Items.Add("utp");
cmbHeaderType.Items.Add("wechat-video");
cmbHeaderType.Items.Add("dtls");
cmbHeaderType.Items.Add("wireguard");
}
else
{
}
cmbHeaderType.Text = Global.None;
}
private void btnOK_Click(object sender, EventArgs e)
{
string address = txtAddress.Text;
@@ -116,16 +66,8 @@ namespace v2rayN.Forms
string id = txtId.Text;
string alterId = txtAlterId.Text;
string security = cmbSecurity.Text;
string network = cmbNetwork.Text;
string remarks = txtRemarks.Text;
string headerType = cmbHeaderType.Text;
string requestHost = txtRequestHost.Text;
string path = txtPath.Text;
string streamSecurity = cmbStreamSecurity.Text;
string allowInsecure = cmbAllowInsecure.Text;
string sni = txtSNI.Text;
if (Utils.IsNullOrEmpty(address))
{
UI.Show(UIRes.I18N("FillServerAddress"));
@@ -141,27 +83,16 @@ namespace v2rayN.Forms
UI.Show(UIRes.I18N("FillUUID"));
return;
}
if (Utils.IsNullOrEmpty(alterId) || !Utils.IsNumberic(alterId))
{
UI.Show(UIRes.I18N("FillCorrectAlterId"));
return;
}
transportControl.EndBindingServer();
vmessItem.address = address;
vmessItem.port = Utils.ToInt(port);
vmessItem.id = id;
vmessItem.alterId = Utils.ToInt(alterId);
vmessItem.security = security;
vmessItem.network = network;
vmessItem.remarks = remarks;
vmessItem.headerType = headerType;
vmessItem.requestHost = requestHost.Replace(" ", "");
vmessItem.path = path.Replace(" ", "");
vmessItem.streamSecurity = streamSecurity;
vmessItem.allowInsecure = allowInsecure;
vmessItem.sni = sni;
if (ConfigHandler.AddServer(ref config, vmessItem, EditIndex) == 0)
{
this.DialogResult = DialogResult.OK;
@@ -182,19 +113,6 @@ namespace v2rayN.Forms
this.DialogResult = DialogResult.Cancel;
}
private void cmbStreamSecurity_SelectedIndexChanged(object sender, EventArgs e)
{
string security = cmbStreamSecurity.Text;
if (Utils.IsNullOrEmpty(security))
{
panTlsMore.Hide();
}
else
{
panTlsMore.Show();
}
}
#region /
/// <summary>
@@ -236,31 +154,29 @@ namespace v2rayN.Forms
return;
}
string msg;
VmessItem vmessItem;
VmessItem vmessItemTemp;
if (type.Equals(1))
{
vmessItem = V2rayConfigHandler.ImportFromClientConfig(fileName, out msg);
vmessItemTemp = V2rayConfigHandler.ImportFromClientConfig(fileName, out msg);
}
else
{
vmessItem = V2rayConfigHandler.ImportFromServerConfig(fileName, out msg);
vmessItemTemp = V2rayConfigHandler.ImportFromServerConfig(fileName, out msg);
}
if (vmessItem == null)
if (vmessItemTemp == null)
{
UI.ShowWarning(msg);
return;
}
vmessItem = vmessItemTemp;
txtAddress.Text = vmessItem.address;
txtPort.Text = vmessItem.port.ToString();
txtId.Text = vmessItem.id;
txtAlterId.Text = vmessItem.alterId.ToString();
txtRemarks.Text = vmessItem.remarks;
cmbNetwork.Text = vmessItem.network;
cmbHeaderType.Text = vmessItem.headerType;
txtRequestHost.Text = vmessItem.requestHost;
txtPath.Text = vmessItem.path;
cmbStreamSecurity.Text = vmessItem.streamSecurity;
transportControl.BindingServer(vmessItem);
}
/// <summary>
@@ -272,23 +188,21 @@ namespace v2rayN.Forms
{
ClearServer();
VmessItem vmessItem = ShareHandler.ImportFromClipboardConfig(Utils.GetClipboardData(), out string msg);
if (vmessItem == null)
VmessItem vmessItemTemp = ShareHandler.ImportFromClipboardConfig(Utils.GetClipboardData(), out string msg);
if (vmessItemTemp == null)
{
UI.ShowWarning(msg);
return;
}
vmessItem = vmessItemTemp;
txtAddress.Text = vmessItem.address;
txtPort.Text = vmessItem.port.ToString();
txtId.Text = vmessItem.id;
txtAlterId.Text = vmessItem.alterId.ToString();
txtRemarks.Text = vmessItem.remarks;
cmbNetwork.Text = vmessItem.network;
cmbHeaderType.Text = vmessItem.headerType;
txtRequestHost.Text = vmessItem.requestHost;
txtPath.Text = vmessItem.path;
cmbStreamSecurity.Text = vmessItem.streamSecurity;
transportControl.BindingServer(vmessItem);
}
#endregion

File diff suppressed because it is too large Load Diff

View File

@@ -130,21 +130,12 @@
<data name="label24.Size" type="System.Drawing.Size, System.Drawing">
<value>149, 12</value>
</data>
<data name="label24.Text" xml:space="preserve">
<value>3)QUIC 加密密钥/Kcp seed</value>
</data>
<data name="label23.Size" type="System.Drawing.Size, System.Drawing">
<value>95, 12</value>
</data>
<data name="label23.Text" xml:space="preserve">
<value>4)QUIC 加密方式</value>
</data>
<data name="label21.Size" type="System.Drawing.Size, System.Drawing">
<value>167, 12</value>
</data>
<data name="label21.Text" xml:space="preserve">
<value>跳过证书验证(allowInsecure)</value>
</data>
<data name="cmbAllowInsecure.Location" type="System.Drawing.Point, System.Drawing">
<value>180, 7</value>
</data>
@@ -154,15 +145,9 @@
<data name="label9.Size" type="System.Drawing.Size, System.Drawing">
<value>143, 12</value>
</data>
<data name="label9.Text" xml:space="preserve">
<value>*默认tcp,选错会无法连接</value>
</data>
<data name="label20.Size" type="System.Drawing.Size, System.Drawing">
<value>149, 12</value>
</data>
<data name="label20.Text" xml:space="preserve">
<value>3)h2 host中间逗号(,)隔开</value>
</data>
<data name="txtPath.Location" type="System.Drawing.Point, System.Drawing">
<value>127, 168</value>
</data>
@@ -178,33 +163,21 @@
<data name="label7.Size" type="System.Drawing.Size, System.Drawing">
<value>107, 12</value>
</data>
<data name="label7.Text" xml:space="preserve">
<value>传输协议(network)</value>
</data>
<data name="label19.Location" type="System.Drawing.Point, System.Drawing">
<value>9, 168</value>
</data>
<data name="label19.Size" type="System.Drawing.Size, System.Drawing">
<value>65, 12</value>
</data>
<data name="label19.Text" xml:space="preserve">
<value>路径(path)</value>
</data>
<data name="label14.Size" type="System.Drawing.Size, System.Drawing">
<value>161, 12</value>
</data>
<data name="label14.Text" xml:space="preserve">
<value>1)http host中间逗号(,)隔开</value>
</data>
<data name="label15.Location" type="System.Drawing.Point, System.Drawing">
<value>9, 237</value>
</data>
<data name="label15.Size" type="System.Drawing.Size, System.Drawing">
<value>107, 12</value>
</data>
<data name="label15.Text" xml:space="preserve">
<value>底层传输安全(tls)</value>
</data>
<data name="cmbStreamSecurity.Location" type="System.Drawing.Point, System.Drawing">
<value>127, 237</value>
</data>
@@ -214,9 +187,6 @@
<data name="label12.Size" type="System.Drawing.Size, System.Drawing">
<value>197, 12</value>
</data>
<data name="label12.Text" xml:space="preserve">
<value>*tcp或kcp或QUIC伪装类型,默认none</value>
</data>
<data name="txtRequestHost.Location" type="System.Drawing.Point, System.Drawing">
<value>127, 102</value>
</data>
@@ -229,24 +199,15 @@
<data name="label11.Size" type="System.Drawing.Size, System.Drawing">
<value>89, 12</value>
</data>
<data name="label11.Text" xml:space="preserve">
<value>伪装类型(type)</value>
</data>
<data name="label10.Location" type="System.Drawing.Point, System.Drawing">
<value>9, 102</value>
</data>
<data name="label10.Size" type="System.Drawing.Size, System.Drawing">
<value>89, 12</value>
</data>
<data name="label10.Text" xml:space="preserve">
<value>伪装域名(host)</value>
</data>
<data name="cmbHeaderType.Location" type="System.Drawing.Point, System.Drawing">
<value>127, 67</value>
</data>
<data name="groupBox2.Text" xml:space="preserve">
<value>底层传输方式(transport)</value>
</data>
<data name="label8.Size" type="System.Drawing.Size, System.Drawing">
<value>113, 12</value>
</data>

View File

@@ -36,7 +36,6 @@
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(292, 273);
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "BaseServerForm";

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -11,6 +11,7 @@ using v2rayN.Tool;
using System.Diagnostics;
using System.Drawing;
using System.Net;
using System.Text.RegularExpressions;
namespace v2rayN.Forms
{
@@ -19,6 +20,7 @@ namespace v2rayN.Forms
private V2rayHandler v2rayHandler;
private List<int> lvSelecteds = new List<int>();
private StatisticsHandler statistics = null;
private string MsgFilter = string.Empty;
#region Window
@@ -33,14 +35,20 @@ namespace v2rayN.Forms
Application.ApplicationExit += (sender, args) =>
{
MyAppExit();
MyAppExit(false);
};
}
private void MainForm_Load(object sender, EventArgs e)
{
ConfigHandler.LoadConfig(ref config);
if (ConfigHandler.LoadConfig(ref config) != 0)
{
UI.ShowWarning($"Loading GUI configuration file is abnormal,please restart the application{Environment.NewLine}加载GUI配置文件异常,请重启应用");
Environment.Exit(0);
return;
}
ConfigHandler.InitBuiltinRouting(ref config);
MainFormHandler.Instance.BackupGuiNConfig(config, true);
v2rayHandler = new V2rayHandler();
v2rayHandler.ProcessEvent += v2rayHandler_ProcessEvent;
@@ -48,6 +56,7 @@ namespace v2rayN.Forms
{
statistics = new StatisticsHandler(config, UpdateStatisticsHandler);
}
MainFormHandler.Instance.UpdateTask(config, UpdateTaskHandler);
}
private void MainForm_VisibleChanged(object sender, EventArgs e)
@@ -88,8 +97,10 @@ namespace v2rayN.Forms
case CloseReason.ApplicationExitCall:
case CloseReason.FormOwnerClosing:
case CloseReason.TaskManagerClosing:
MyAppExit(false);
break;
case CloseReason.WindowsShutDown:
MyAppExit();
MyAppExit(true);
break;
}
}
@@ -105,14 +116,21 @@ namespace v2rayN.Forms
//}
}
private void MyAppExit()
private void MyAppExit(bool blWindowsShutDown)
{
try
{
v2rayHandler.V2rayStop();
//HttpProxyHandle.CloseHttpAgent(config);
HttpProxyHandle.UpdateSysProxy(config, true);
if (blWindowsShutDown)
{
HttpProxyHandle.ResetIEProxy4WindowsShutDown();
}
else
{
HttpProxyHandle.UpdateSysProxy(config, true);
}
ConfigHandler.SaveConfig(ref config);
statistics?.SaveToFile();
@@ -181,11 +199,12 @@ namespace v2rayN.Forms
lvServers.Columns.Add(UIRes.I18N("LvServiceType"), 80);
lvServers.Columns.Add(UIRes.I18N("LvAlias"), 100);
lvServers.Columns.Add(UIRes.I18N("LvAddress"), 120);
lvServers.Columns.Add(UIRes.I18N("LvPort"), 50);
lvServers.Columns.Add(UIRes.I18N("LvEncryptionMethod"), 90);
lvServers.Columns.Add(UIRes.I18N("LvTransportProtocol"), 70);
lvServers.Columns.Add(UIRes.I18N("LvSubscription"), 50);
lvServers.Columns.Add(UIRes.I18N("LvTestResults"), 70, HorizontalAlignment.Right);
lvServers.Columns.Add(UIRes.I18N("LvPort"), 100);
lvServers.Columns.Add(UIRes.I18N("LvEncryptionMethod"), 120);
lvServers.Columns.Add(UIRes.I18N("LvTransportProtocol"), 120);
lvServers.Columns.Add(UIRes.I18N("LvTLS"), 100);
lvServers.Columns.Add(UIRes.I18N("LvSubscription"), 100);
lvServers.Columns.Add(UIRes.I18N("LvTestResults"), 120, HorizontalAlignment.Right);
if (statistics != null && statistics.Enable)
{
@@ -240,6 +259,7 @@ namespace v2rayN.Forms
Utils.AddSubItem(lvItem, EServerColName.port.ToString(), item.port.ToString());
Utils.AddSubItem(lvItem, EServerColName.security.ToString(), item.security);
Utils.AddSubItem(lvItem, EServerColName.network.ToString(), item.network);
Utils.AddSubItem(lvItem, EServerColName.streamSecurity.ToString(), item.streamSecurity);
Utils.AddSubItem(lvItem, EServerColName.subRemarks.ToString(), item.getSubRemarks(config));
Utils.AddSubItem(lvItem, EServerColName.testResult.ToString(), item.testResult);
if (stats)
@@ -278,25 +298,56 @@ namespace v2rayN.Forms
private void RefreshServersMenu()
{
menuServers.DropDownItems.Clear();
menuServers2.SelectedIndexChanged -= MenuServers2_SelectedIndexChanged;
menuServers2.Items.Clear();
menuServers.Visible = false;
menuServers2.Visible = false;
List<ToolStripMenuItem> lst = new List<ToolStripMenuItem>();
for (int k = 0; k < config.vmess.Count; k++)
if (config.vmess.Count > 20)
{
VmessItem item = config.vmess[k];
string name = item.getSummary();
for (int k = 0; k < config.vmess.Count; k++)
{
VmessItem item = config.vmess[k];
string name = item.getSummary();
if (config.index.Equals(k))
{
name = $"√ {name}";
}
menuServers2.Items.Add(name);
ToolStripMenuItem ts = new ToolStripMenuItem(name)
{
Tag = k
};
if (config.index.Equals(k))
{
ts.Checked = true;
}
ts.Click += new EventHandler(ts_Click);
lst.Add(ts);
menuServers2.SelectedIndex = config.index;
menuServers2.SelectedIndexChanged += MenuServers2_SelectedIndexChanged;
menuServers2.Visible = true;
}
menuServers.DropDownItems.AddRange(lst.ToArray());
else
{
List<ToolStripMenuItem> lst = new List<ToolStripMenuItem>();
for (int k = 0; k < config.vmess.Count; k++)
{
VmessItem item = config.vmess[k];
string name = item.getSummary();
ToolStripMenuItem ts = new ToolStripMenuItem(name)
{
Tag = k
};
if (config.index.Equals(k))
{
ts.Checked = true;
}
ts.Click += new EventHandler(ts_Click);
lst.Add(ts);
}
menuServers.DropDownItems.AddRange(lst.ToArray());
menuServers.Visible = true;
}
}
private void MenuServers2_SelectedIndexChanged(object sender, EventArgs e)
{
SetDefaultServer(((ToolStripComboBox)sender).SelectedIndex);
}
private void ts_Click(object sender, EventArgs e)
@@ -334,8 +385,8 @@ namespace v2rayN.Forms
private void DisplayToolStatus()
{
toolSslSocksPort.Text = $"{Global.Loopback}:{config.inbound[0].localPort}";
toolSslHttpPort.Text = $"{Global.Loopback}:{Global.httpPort}";
toolSslInboundInfo.Text = $"{Global.InboundSocks} {Global.Loopback}:{config.inbound[0].localPort} | "
+ $"{ Global.InboundHttp} { Global.Loopback}:{Global.httpPort}";
notifyMain.Icon = MainFormHandler.Instance.GetNotifyIcon(config, this.Icon);
}
@@ -356,6 +407,15 @@ namespace v2rayN.Forms
try
{
if ((EServerColName)e.Column == EServerColName.def)
{
foreach (ColumnHeader it in lvServers.Columns)
{
it.Width = -2;
}
return;
}
var tag = lvServers.Columns[e.Column].Tag?.ToString();
bool asc = Utils.IsNullOrEmpty(tag) ? true : !Convert.ToBoolean(tag);
if (ConfigHandler.SortServers(ref config, (EServerColName)e.Column, asc) != 0)
@@ -409,7 +469,7 @@ namespace v2rayN.Forms
ConfigHandler.SaveConfig(ref config, false);
statistics?.SaveToFile();
ChangePACButtonStatus(0);
ChangePACButtonStatus(ESysProxyType.ForcedClear);
v2rayHandler.V2rayStop();
}
@@ -560,24 +620,18 @@ namespace v2rayN.Forms
{
return;
}
for (int k = lvSelecteds.Count - 1; k >= 0; k--)
{
ConfigHandler.RemoveServer(ref config, lvSelecteds[k]);
}
ConfigHandler.RemoveServer(ref config, lvSelecteds);
RefreshServers();
LoadV2ray();
}
private void menuRemoveDuplicateServer_Click(object sender, EventArgs e)
{
Utils.DedupServerList(config.vmess, out List<VmessItem> servers, config.keepOlderDedupl);
int oldCount = config.vmess.Count;
int newCount = servers.Count;
if (servers != null)
{
config.vmess = servers;
}
ConfigHandler.DedupServerList(ref config);
int newCount = config.vmess.Count;
RefreshServers();
LoadV2ray();
UI.Show(string.Format(UIRes.I18N("RemoveDuplicateServerResult"), oldCount, newCount));
@@ -650,7 +704,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 +717,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();
@@ -875,7 +924,11 @@ namespace v2rayN.Forms
private void menuUpdateSubscriptions_Click(object sender, EventArgs e)
{
UpdateSubscriptionProcess();
UpdateSubscriptionProcess(false);
}
private void menuUpdateSubViaProxy_Click(object sender, EventArgs e)
{
UpdateSubscriptionProcess(true);
}
private void tsbBackupGuiNConfig_Click(object sender, EventArgs e)
@@ -921,6 +974,13 @@ namespace v2rayN.Forms
}
else
{
if (!Utils.IsNullOrEmpty(MsgFilter))
{
if (!Regex.IsMatch(text, MsgFilter))
{
return;
}
}
//this.txtMsgBox.AppendText(text);
ShowMsg(text);
}
@@ -948,7 +1008,10 @@ namespace v2rayN.Forms
/// </summary>
private void ClearMsg()
{
this.txtMsgBox.Clear();
txtMsgBox.Invoke((Action)delegate
{
txtMsgBox.Clear();
});
}
/// <summary>
@@ -1071,6 +1134,15 @@ namespace v2rayN.Forms
}
}
private void UpdateTaskHandler(bool success, string msg)
{
AppendText(false, msg);
if (success)
{
Global.reloadV2ray = true;
LoadV2ray();
}
}
#endregion
#region
@@ -1143,14 +1215,6 @@ namespace v2rayN.Forms
private void ChangePACButtonStatus(ESysProxyType type)
{
HttpProxyHandle.UpdateSysProxy(config, false);
//if (type != ListenerType.noHttpProxy)
//{
// HttpProxyHandle.RestartHttpAgent(config, false);
//}
//else
//{
// HttpProxyHandle.CloseHttpAgent(config);
//}
for (int k = 0; k < menuSysAgentMode.DropDownItems.Count; k++)
{
@@ -1167,88 +1231,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 +1256,51 @@ 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 = Utils.GetPath(Utils.GetDownloadFileName(msg));
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
@@ -1389,23 +1366,36 @@ namespace v2rayN.Forms
private void tsbSubUpdate_Click(object sender, EventArgs e)
{
UpdateSubscriptionProcess();
UpdateSubscriptionProcess(false);
}
private void tsbSubUpdateViaProxy_Click(object sender, EventArgs e)
{
UpdateSubscriptionProcess(true);
}
/// <summary>
/// the subscription update process
/// </summary>
private void UpdateSubscriptionProcess()
private void UpdateSubscriptionProcess(bool blProxy)
{
void _updateUI(bool refresh, string msg)
void _updateUI(bool success, string msg)
{
AppendText(false, msg);
if (refresh)
if (success)
{
RefreshServers();
if (config.uiItem.enableAutoAdjustMainLvColWidth)
{
foreach (ColumnHeader it in lvServers.Columns)
{
it.Width = -2;
}
}
}
};
MainFormHandler.Instance.UpdateSubscriptionProcess(config, _updateUI);
(new UpdateHandle()).UpdateSubscriptionProcess(config, blProxy, _updateUI);
}
private void tsbQRCodeSwitch_CheckedChanged(object sender, EventArgs e)
@@ -1449,6 +1439,7 @@ namespace v2rayN.Forms
menuRoutings.Visible = config.enableRoutingAdvanced;
if (!config.enableRoutingAdvanced)
{
toolSslRoutingRule.Text = string.Empty;
return;
}
@@ -1471,6 +1462,7 @@ namespace v2rayN.Forms
if (config.routingIndex.Equals(k))
{
ts.Checked = true;
toolSslRoutingRule.Text = item.remarks;
}
ts.Click += new EventHandler(ts_Routing_Click);
lst.Add(ts);
@@ -1515,6 +1507,10 @@ namespace v2rayN.Forms
var data = this.txtMsgBox.Text;
Utils.SetClipboardData(data);
}
private void menuMsgBoxClear_Click(object sender, EventArgs e)
{
this.txtMsgBox.Clear();
}
private void menuMsgBoxAddRoutingRule_Click(object sender, EventArgs e)
{
menuMsgBoxCopy_Click(null, null);
@@ -1541,7 +1537,16 @@ namespace v2rayN.Forms
}
}
private void menuMsgBoxFilter_Click(object sender, EventArgs e)
{
var fm = new MsgFilterSetForm();
fm.MsgFilter = MsgFilter;
if (fm.ShowDialog() == DialogResult.OK)
{
MsgFilter = fm.MsgFilter;
gbMsgTitle.Text = string.Format(UIRes.I18N("MsgInformationTitle"), MsgFilter);
}
}
#endregion
}

File diff suppressed because it is too large Load Diff

View File

@@ -318,84 +318,9 @@
ZW0uRHJhd2luZy5HcmFwaGljc1VuaXQBAAAAB3ZhbHVlX18ACAMAAAADAAAACw==
</value>
</data>
<data name="cmsMain.Size" type="System.Drawing.Size, System.Drawing">
<value>196, 170</value>
</data>
<data name="menuSysAgentMode.Size" type="System.Drawing.Size, System.Drawing">
<value>195, 22</value>
</data>
<data name="menuSysAgentMode.Text" xml:space="preserve">
<value>系统代理</value>
</data>
<data name="menuKeepClear.Size" type="System.Drawing.Size, System.Drawing">
<value>172, 22</value>
</data>
<data name="menuKeepClear.Text" xml:space="preserve">
<value>清除系统代理</value>
</data>
<data name="menuGlobal.Size" type="System.Drawing.Size, System.Drawing">
<value>172, 22</value>
</data>
<data name="menuGlobal.Text" xml:space="preserve">
<value>自动配置系统代理</value>
</data>
<data name="menuKeepNothing.Size" type="System.Drawing.Size, System.Drawing">
<value>172, 22</value>
</data>
<data name="menuKeepNothing.Text" xml:space="preserve">
<value>不改变系统代理</value>
</data>
<data name="menuRoutings.Size" type="System.Drawing.Size, System.Drawing">
<value>195, 22</value>
</data>
<data name="menuRoutings.Text" xml:space="preserve">
<value>路由</value>
</data>
<data name="menuServers.Size" type="System.Drawing.Size, System.Drawing">
<value>195, 22</value>
</data>
<data name="menuServers.Text" xml:space="preserve">
<value>服务器</value>
</data>
<data name="toolStripSeparator13.Size" type="System.Drawing.Size, System.Drawing">
<value>192, 6</value>
</data>
<data name="menuAddServers2.Size" type="System.Drawing.Size, System.Drawing">
<value>195, 22</value>
</data>
<data name="menuAddServers2.Text" xml:space="preserve">
<value>从剪贴板导入批量URL</value>
</data>
<data name="menuScanScreen2.Size" type="System.Drawing.Size, System.Drawing">
<value>195, 22</value>
</data>
<data name="menuScanScreen2.Text" xml:space="preserve">
<value>扫描屏幕上的二维码</value>
</data>
<data name="menuUpdateSubscriptions.Size" type="System.Drawing.Size, System.Drawing">
<value>195, 22</value>
</data>
<data name="menuUpdateSubscriptions.Text" xml:space="preserve">
<value>更新订阅</value>
</data>
<data name="toolStripSeparator2.Size" type="System.Drawing.Size, System.Drawing">
<value>192, 6</value>
</data>
<data name="menuExit.Size" type="System.Drawing.Size, System.Drawing">
<value>195, 22</value>
</data>
<data name="menuExit.Text" xml:space="preserve">
<value>退出</value>
</data>
<data name="groupBox1.Text" xml:space="preserve">
<value>服务器列表</value>
</data>
<data name="groupBox2.Text" xml:space="preserve">
<value>信息</value>
</data>
<data name="cmsMsgBox.Size" type="System.Drawing.Size, System.Drawing">
<value>222, 92</value>
</data>
<data name="menuMsgBoxSelectAll.Size" type="System.Drawing.Size, System.Drawing">
<value>221, 22</value>
</data>
@@ -420,9 +345,117 @@
<data name="menuMsgBoxAddRoutingRule.Text" xml:space="preserve">
<value>快速添加路由规则 (Ctrl+V)</value>
</data>
<data name="menuMsgBoxFilter.Size" type="System.Drawing.Size, System.Drawing">
<value>221, 22</value>
</data>
<data name="menuMsgBoxFilter.Text" xml:space="preserve">
<value>设置信息过滤器</value>
</data>
<data name="cmsMsgBox.Size" type="System.Drawing.Size, System.Drawing">
<value>222, 114</value>
</data>
<data name="toolSslServerSpeed.Text" xml:space="preserve">
<value>网速显示未启用</value>
</data>
<data name="gbMsgTitle.Text" xml:space="preserve">
<value>信息</value>
</data>
<data name="menuKeepClear.Size" type="System.Drawing.Size, System.Drawing">
<value>172, 22</value>
</data>
<data name="menuKeepClear.Text" xml:space="preserve">
<value>清除系统代理</value>
</data>
<data name="menuGlobal.Size" type="System.Drawing.Size, System.Drawing">
<value>172, 22</value>
</data>
<data name="menuGlobal.Text" xml:space="preserve">
<value>自动配置系统代理</value>
</data>
<data name="menuKeepNothing.Size" type="System.Drawing.Size, System.Drawing">
<value>172, 22</value>
</data>
<data name="menuKeepNothing.Text" xml:space="preserve">
<value>不改变系统代理</value>
</data>
<data name="menuSysAgentMode.Size" type="System.Drawing.Size, System.Drawing">
<value>260, 22</value>
</data>
<data name="menuSysAgentMode.Text" xml:space="preserve">
<value>系统代理</value>
</data>
<data name="menuRoutings.Size" type="System.Drawing.Size, System.Drawing">
<value>260, 22</value>
</data>
<data name="menuRoutings.Text" xml:space="preserve">
<value>路由</value>
</data>
<data name="menuServers.Size" type="System.Drawing.Size, System.Drawing">
<value>260, 22</value>
</data>
<data name="menuServers.Text" xml:space="preserve">
<value>服务器</value>
</data>
<data name="menuServers2.ToolTipText" xml:space="preserve">
<value>服务器</value>
</data>
<data name="toolStripSeparator13.Size" type="System.Drawing.Size, System.Drawing">
<value>257, 6</value>
</data>
<data name="menuAddServers2.Size" type="System.Drawing.Size, System.Drawing">
<value>260, 22</value>
</data>
<data name="menuAddServers2.Text" xml:space="preserve">
<value>从剪贴板导入批量URL</value>
</data>
<data name="menuScanScreen2.Size" type="System.Drawing.Size, System.Drawing">
<value>260, 22</value>
</data>
<data name="menuScanScreen2.Text" xml:space="preserve">
<value>扫描屏幕上的二维码</value>
</data>
<data name="menuUpdateSubscriptions.Size" type="System.Drawing.Size, System.Drawing">
<value>260, 22</value>
</data>
<data name="menuUpdateSubscriptions.Text" xml:space="preserve">
<value>更新订阅</value>
</data>
<data name="menuUpdateSubViaProxy.Size" type="System.Drawing.Size, System.Drawing">
<value>260, 22</value>
</data>
<data name="menuUpdateSubViaProxy.Text" xml:space="preserve">
<value>更新订阅(通过代理)</value>
</data>
<data name="toolStripSeparator2.Size" type="System.Drawing.Size, System.Drawing">
<value>257, 6</value>
</data>
<data name="menuExit.Size" type="System.Drawing.Size, System.Drawing">
<value>260, 22</value>
</data>
<data name="menuExit.Text" xml:space="preserve">
<value>退出</value>
</data>
<data name="cmsMain.Size" type="System.Drawing.Size, System.Drawing">
<value>261, 227</value>
</data>
<data name="tsbSubSetting.Size" type="System.Drawing.Size, System.Drawing">
<value>180, 22</value>
</data>
<data name="tsbSubSetting.Text" xml:space="preserve">
<value>订阅设置</value>
</data>
<data name="tsbSubUpdate.Size" type="System.Drawing.Size, System.Drawing">
<value>180, 22</value>
</data>
<data name="tsbSubUpdate.Text" xml:space="preserve">
<value>更新订阅</value>
</data>
<data name="tsbSubUpdateViaProxy.Size" type="System.Drawing.Size, System.Drawing">
<value>180, 22</value>
</data>
<data name="tsbSubUpdateViaProxy.Text" xml:space="preserve">
<value>更新订阅(通过代理)</value>
</data>
<data name="tsbSub.Size" type="System.Drawing.Size, System.Drawing">
<value>61, 53</value>
</data>
@@ -435,12 +468,21 @@
<data name="tsbQRCodeSwitch.Text" xml:space="preserve">
<value> 分享 </value>
</data>
<data name="tsbOptionSetting.Size" type="System.Drawing.Size, System.Drawing">
<value>189, 22</value>
</data>
<data name="tsbOptionSetting.Text" xml:space="preserve">
<value>参数设置</value>
</data>
<data name="tsbRoutingSetting.Size" type="System.Drawing.Size, System.Drawing">
<value>189, 22</value>
</data>
<data name="tsbRoutingSetting.Text" xml:space="preserve">
<value>路由设置</value>
</data>
<data name="toolStripSeparator14.Size" type="System.Drawing.Size, System.Drawing">
<value>186, 6</value>
</data>
<data name="tsbBackupGuiNConfig.Size" type="System.Drawing.Size, System.Drawing">
<value>189, 22</value>
</data>
@@ -470,12 +512,45 @@
<data name="tsbReload.Text" xml:space="preserve">
<value> 重启服务 </value>
</data>
<data name="tsbCheckUpdateN.Size" type="System.Drawing.Size, System.Drawing">
<value>168, 22</value>
</data>
<data name="tsbCheckUpdateN.Text" xml:space="preserve">
<value>v2rayN</value>
</data>
<data name="tsbCheckUpdateCore.Size" type="System.Drawing.Size, System.Drawing">
<value>168, 22</value>
</data>
<data name="tsbCheckUpdateCore.Text" xml:space="preserve">
<value>v2fly-Core</value>
</data>
<data name="tsbCheckUpdateXrayCore.Size" type="System.Drawing.Size, System.Drawing">
<value>168, 22</value>
</data>
<data name="tsbCheckUpdateXrayCore.Text" xml:space="preserve">
<value>Xray-Core</value>
</data>
<data name="toolStripSeparator15.Size" type="System.Drawing.Size, System.Drawing">
<value>165, 6</value>
</data>
<data name="tsbCheckUpdateGeoSite.Size" type="System.Drawing.Size, System.Drawing">
<value>168, 22</value>
</data>
<data name="tsbCheckUpdateGeoIP.Size" type="System.Drawing.Size, System.Drawing">
<value>168, 22</value>
</data>
<data name="tsbCheckUpdate.Size" type="System.Drawing.Size, System.Drawing">
<value>85, 53</value>
</data>
<data name="tsbCheckUpdate.Text" xml:space="preserve">
<value> 检查更新 </value>
</data>
<data name="tsbAbout.Text" xml:space="preserve">
<value>v2rayN 项目</value>
</data>
<data name="tsbV2rayWebsite.Text" xml:space="preserve">
<value>V2Ray 官网</value>
</data>
<data name="tsbHelp.Size" type="System.Drawing.Size, System.Drawing">
<value>69, 53</value>
</data>
@@ -501,40 +576,4 @@
<data name="tsbClose.Text" xml:space="preserve">
<value> 关闭窗口 </value>
</data>
<data name="tsbSubSetting.Size" type="System.Drawing.Size, System.Drawing">
<value>124, 22</value>
</data>
<data name="tsbSubSetting.Text" xml:space="preserve">
<value>订阅设置</value>
</data>
<data name="tsbSubUpdate.Size" type="System.Drawing.Size, System.Drawing">
<value>124, 22</value>
</data>
<data name="tsbSubUpdate.Text" xml:space="preserve">
<value>更新订阅</value>
</data>
<data name="tsbCheckUpdateN.Size" type="System.Drawing.Size, System.Drawing">
<value>135, 22</value>
</data>
<data name="tsbCheckUpdateN.Text" xml:space="preserve">
<value>v2rayN</value>
</data>
<data name="tsbCheckUpdateCore.Size" type="System.Drawing.Size, System.Drawing">
<value>135, 22</value>
</data>
<data name="tsbCheckUpdateCore.Text" xml:space="preserve">
<value>v2fly-Core</value>
</data>
<data name="tsbCheckUpdateXrayCore.Size" type="System.Drawing.Size, System.Drawing">
<value>135, 22</value>
</data>
<data name="tsbCheckUpdateXrayCore.Text" xml:space="preserve">
<value>Xray-Core</value>
</data>
<data name="tsbAbout.Text" xml:space="preserve">
<value>v2rayN 项目</value>
</data>
<data name="tsbV2rayWebsite.Text" xml:space="preserve">
<value>V2Ray 官网</value>
</data>
</root>

View File

@@ -0,0 +1,98 @@
namespace v2rayN.Forms
{
partial class MsgFilterSetForm
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MsgFilterSetForm));
this.groupBox1 = new System.Windows.Forms.GroupBox();
this.txtMsgFilter = new System.Windows.Forms.TextBox();
this.panel2 = new System.Windows.Forms.Panel();
this.btnClose = new System.Windows.Forms.Button();
this.btnOK = new System.Windows.Forms.Button();
this.groupBox1.SuspendLayout();
this.panel2.SuspendLayout();
this.SuspendLayout();
//
// groupBox1
//
resources.ApplyResources(this.groupBox1, "groupBox1");
this.groupBox1.Controls.Add(this.txtMsgFilter);
this.groupBox1.Name = "groupBox1";
this.groupBox1.TabStop = false;
//
// txtMsgFilter
//
resources.ApplyResources(this.txtMsgFilter, "txtMsgFilter");
this.txtMsgFilter.Name = "txtMsgFilter";
//
// panel2
//
resources.ApplyResources(this.panel2, "panel2");
this.panel2.Controls.Add(this.btnClose);
this.panel2.Controls.Add(this.btnOK);
this.panel2.Name = "panel2";
//
// btnClose
//
resources.ApplyResources(this.btnClose, "btnClose");
this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.btnClose.Name = "btnClose";
this.btnClose.UseVisualStyleBackColor = true;
this.btnClose.Click += new System.EventHandler(this.btnClose_Click);
//
// btnOK
//
resources.ApplyResources(this.btnOK, "btnOK");
this.btnOK.Name = "btnOK";
this.btnOK.UseVisualStyleBackColor = true;
this.btnOK.Click += new System.EventHandler(this.btnOK_Click);
//
// MsgFilterSetForm
//
resources.ApplyResources(this, "$this");
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.groupBox1);
this.Controls.Add(this.panel2);
this.Name = "MsgFilterSetForm";
this.Load += new System.EventHandler(this.MsgFilterSetForm_Load);
this.groupBox1.ResumeLayout(false);
this.groupBox1.PerformLayout();
this.panel2.ResumeLayout(false);
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.GroupBox groupBox1;
private System.Windows.Forms.TextBox txtMsgFilter;
private System.Windows.Forms.Panel panel2;
private System.Windows.Forms.Button btnClose;
private System.Windows.Forms.Button btnOK;
}
}

View File

@@ -0,0 +1,38 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace v2rayN.Forms
{
public partial class MsgFilterSetForm : BaseForm
{
public string MsgFilter { get; set; }
public MsgFilterSetForm()
{
InitializeComponent();
}
private void MsgFilterSetForm_Load(object sender, EventArgs e)
{
txtMsgFilter.Text = MsgFilter;
}
private void btnOK_Click(object sender, EventArgs e)
{
MsgFilter = txtMsgFilter.Text;
this.DialogResult = DialogResult.OK;
}
private void btnClose_Click(object sender, EventArgs e)
{
this.DialogResult = DialogResult.Cancel;
}
}
}

View File

@@ -0,0 +1,267 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="groupBox1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="&gt;&gt;txtMsgFilter.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="&gt;&gt;txtMsgFilter.Name" xml:space="preserve">
<value>txtMsgFilter</value>
</data>
<data name="btnOK.Text" xml:space="preserve">
<value>&amp;OK</value>
</data>
<data name="btnClose.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="btnClose.Text" xml:space="preserve">
<value>&amp;Cancel</value>
</data>
<data name="&gt;&gt;txtMsgFilter.Parent" xml:space="preserve">
<value>groupBox1</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="txtMsgFilter.Location" type="System.Drawing.Point, System.Drawing">
<value>41, 29</value>
</data>
<data name="panel2.Size" type="System.Drawing.Size, System.Drawing">
<value>490, 60</value>
</data>
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="txtMsgFilter.TabIndex" type="System.Int32, mscorlib">
<value>11</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>v2rayN.Forms.BaseForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;panel2.Name" xml:space="preserve">
<value>panel2</value>
</data>
<data name="&gt;&gt;groupBox1.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;btnOK.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="btnClose.Location" type="System.Drawing.Point, System.Drawing">
<value>396, 17</value>
</data>
<data name="&gt;&gt;btnClose.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="&gt;&gt;panel2.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="&gt;&gt;groupBox1.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="btnOK.Size" type="System.Drawing.Size, System.Drawing">
<value>75, 23</value>
</data>
<data name="panel2.TabIndex" type="System.Int32, mscorlib">
<value>9</value>
</data>
<data name="btnOK.TabIndex" type="System.Int32, mscorlib">
<value>5</value>
</data>
<data name="&gt;&gt;groupBox1.Name" xml:space="preserve">
<value>groupBox1</value>
</data>
<data name="groupBox1.TabIndex" type="System.Int32, mscorlib">
<value>8</value>
</data>
<data name="&gt;&gt;btnOK.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;panel2.Type" xml:space="preserve">
<value>System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="btnOK.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="&gt;&gt;btnClose.Parent" xml:space="preserve">
<value>panel2</value>
</data>
<data name="btnClose.TabIndex" type="System.Int32, mscorlib">
<value>4</value>
</data>
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>MsgFilterSetForm</value>
</data>
<data name="txtMsgFilter.Size" type="System.Drawing.Size, System.Drawing">
<value>409, 21</value>
</data>
<data name="&gt;&gt;groupBox1.Type" xml:space="preserve">
<value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="groupBox1.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 0</value>
</data>
<data name="panel2.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 76</value>
</data>
<data name="&gt;&gt;txtMsgFilter.Type" xml:space="preserve">
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="panel2.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Bottom</value>
</data>
<data name="groupBox1.Size" type="System.Drawing.Size, System.Drawing">
<value>490, 76</value>
</data>
<data name="&gt;&gt;btnClose.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;btnClose.Name" xml:space="preserve">
<value>btnClose</value>
</data>
<data name="&gt;&gt;btnOK.Parent" xml:space="preserve">
<value>panel2</value>
</data>
<data name="groupBox1.Text" xml:space="preserve">
<value>Filter</value>
</data>
<data name="&gt;&gt;btnOK.Name" xml:space="preserve">
<value>btnOK</value>
</data>
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
<value>490, 136</value>
</data>
<data name="btnClose.Size" type="System.Drawing.Size, System.Drawing">
<value>75, 23</value>
</data>
<data name="btnOK.Location" type="System.Drawing.Point, System.Drawing">
<value>303, 17</value>
</data>
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
<value>6, 12</value>
</data>
<data name="&gt;&gt;panel2.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="$this.Text" xml:space="preserve">
<value>MsgFilterSetForm</value>
</data>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
</root>

View File

@@ -0,0 +1,132 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="groupBox1.Text" xml:space="preserve">
<value>过滤器</value>
</data>
<data name="btnClose.Text" xml:space="preserve">
<value>取消(&amp;C)</value>
</data>
<data name="btnOK.Text" xml:space="preserve">
<value>确定(&amp;O)</value>
</data>
<data name="$this.Text" xml:space="preserve">
<value>设置过滤器</value>
</data>
</root>

View File

@@ -69,6 +69,10 @@
this.txtKcpmtu = new System.Windows.Forms.TextBox();
this.label6 = new System.Windows.Forms.Label();
this.tabPage7 = new System.Windows.Forms.TabPage();
this.chkEnableAutoAdjustMainLvColWidth = new System.Windows.Forms.CheckBox();
this.btnSetLoopback = new System.Windows.Forms.Button();
this.txtautoUpdateInterval = new System.Windows.Forms.TextBox();
this.label15 = new System.Windows.Forms.Label();
this.chkIgnoreGeoUpdateCore = new System.Windows.Forms.CheckBox();
this.cmbCoreType = new System.Windows.Forms.ComboBox();
this.label4 = new System.Windows.Forms.Label();
@@ -78,6 +82,11 @@
this.chkEnableStatistics = new System.Windows.Forms.CheckBox();
this.chkAllowLANConn = new System.Windows.Forms.CheckBox();
this.chkAutoRun = new System.Windows.Forms.CheckBox();
this.tabPage3 = new System.Windows.Forms.TabPage();
this.groupBox2 = new System.Windows.Forms.GroupBox();
this.label13 = new System.Windows.Forms.Label();
this.label12 = new System.Windows.Forms.Label();
this.txtsystemProxyExceptions = new System.Windows.Forms.TextBox();
this.panel2 = new System.Windows.Forms.Panel();
this.btnOK = new System.Windows.Forms.Button();
this.panel1 = new System.Windows.Forms.Panel();
@@ -87,6 +96,8 @@
this.tabPage2.SuspendLayout();
this.tabPage6.SuspendLayout();
this.tabPage7.SuspendLayout();
this.tabPage3.SuspendLayout();
this.groupBox2.SuspendLayout();
this.panel2.SuspendLayout();
this.SuspendLayout();
//
@@ -105,6 +116,7 @@
this.tabControl1.Controls.Add(this.tabPage2);
this.tabControl1.Controls.Add(this.tabPage6);
this.tabControl1.Controls.Add(this.tabPage7);
this.tabControl1.Controls.Add(this.tabPage3);
this.tabControl1.Name = "tabControl1";
this.tabControl1.SelectedIndex = 0;
//
@@ -364,6 +376,10 @@
// tabPage7
//
resources.ApplyResources(this.tabPage7, "tabPage7");
this.tabPage7.Controls.Add(this.chkEnableAutoAdjustMainLvColWidth);
this.tabPage7.Controls.Add(this.btnSetLoopback);
this.tabPage7.Controls.Add(this.txtautoUpdateInterval);
this.tabPage7.Controls.Add(this.label15);
this.tabPage7.Controls.Add(this.chkIgnoreGeoUpdateCore);
this.tabPage7.Controls.Add(this.cmbCoreType);
this.tabPage7.Controls.Add(this.label4);
@@ -376,6 +392,29 @@
this.tabPage7.Name = "tabPage7";
this.tabPage7.UseVisualStyleBackColor = true;
//
// chkEnableAutoAdjustMainLvColWidth
//
resources.ApplyResources(this.chkEnableAutoAdjustMainLvColWidth, "chkEnableAutoAdjustMainLvColWidth");
this.chkEnableAutoAdjustMainLvColWidth.Name = "chkEnableAutoAdjustMainLvColWidth";
this.chkEnableAutoAdjustMainLvColWidth.UseVisualStyleBackColor = true;
//
// btnSetLoopback
//
resources.ApplyResources(this.btnSetLoopback, "btnSetLoopback");
this.btnSetLoopback.Name = "btnSetLoopback";
this.btnSetLoopback.UseVisualStyleBackColor = true;
this.btnSetLoopback.Click += new System.EventHandler(this.btnSetLoopback_Click);
//
// txtautoUpdateInterval
//
resources.ApplyResources(this.txtautoUpdateInterval, "txtautoUpdateInterval");
this.txtautoUpdateInterval.Name = "txtautoUpdateInterval";
//
// label15
//
resources.ApplyResources(this.label15, "label15");
this.label15.Name = "label15";
//
// chkIgnoreGeoUpdateCore
//
resources.ApplyResources(this.chkIgnoreGeoUpdateCore, "chkIgnoreGeoUpdateCore");
@@ -433,6 +472,37 @@
this.chkAutoRun.Name = "chkAutoRun";
this.chkAutoRun.UseVisualStyleBackColor = true;
//
// tabPage3
//
resources.ApplyResources(this.tabPage3, "tabPage3");
this.tabPage3.Controls.Add(this.groupBox2);
this.tabPage3.Name = "tabPage3";
this.tabPage3.UseVisualStyleBackColor = true;
//
// groupBox2
//
resources.ApplyResources(this.groupBox2, "groupBox2");
this.groupBox2.Controls.Add(this.label13);
this.groupBox2.Controls.Add(this.label12);
this.groupBox2.Controls.Add(this.txtsystemProxyExceptions);
this.groupBox2.Name = "groupBox2";
this.groupBox2.TabStop = false;
//
// label13
//
resources.ApplyResources(this.label13, "label13");
this.label13.Name = "label13";
//
// label12
//
resources.ApplyResources(this.label12, "label12");
this.label12.Name = "label12";
//
// txtsystemProxyExceptions
//
resources.ApplyResources(this.txtsystemProxyExceptions, "txtsystemProxyExceptions");
this.txtsystemProxyExceptions.Name = "txtsystemProxyExceptions";
//
// panel2
//
resources.ApplyResources(this.panel2, "panel2");
@@ -473,6 +543,9 @@
this.tabPage6.PerformLayout();
this.tabPage7.ResumeLayout(false);
this.tabPage7.PerformLayout();
this.tabPage3.ResumeLayout(false);
this.groupBox2.ResumeLayout(false);
this.groupBox2.PerformLayout();
this.panel2.ResumeLayout(false);
this.ResumeLayout(false);
@@ -532,5 +605,14 @@
private System.Windows.Forms.ComboBox cmbCoreType;
private System.Windows.Forms.Label label4;
private System.Windows.Forms.CheckBox chkIgnoreGeoUpdateCore;
private System.Windows.Forms.TabPage tabPage3;
private System.Windows.Forms.TextBox txtsystemProxyExceptions;
private System.Windows.Forms.Label label12;
private System.Windows.Forms.GroupBox groupBox2;
private System.Windows.Forms.Label label13;
private System.Windows.Forms.TextBox txtautoUpdateInterval;
private System.Windows.Forms.Label label15;
private System.Windows.Forms.Button btnSetLoopback;
private System.Windows.Forms.CheckBox chkEnableAutoAdjustMainLvColWidth;
}
}

View File

@@ -5,6 +5,7 @@ using v2rayN.Handler;
using v2rayN.Base;
using v2rayN.HttpProxyHandler;
using v2rayN.Mode;
using System.Diagnostics;
namespace v2rayN.Forms
{
@@ -65,8 +66,9 @@ namespace v2rayN.Forms
//remoteDNS
txtremoteDNS.Text = config.remoteDNS;
chkdefAllowInsecure.Checked = config.defAllowInsecure;
txtsystemProxyExceptions.Text = config.systemProxyExceptions;
}
@@ -122,6 +124,8 @@ namespace v2rayN.Forms
chkIgnoreGeoUpdateCore.Checked = config.ignoreGeoUpdateCore;
cmbCoreType.SelectedIndex = (int)config.coreType;
txtautoUpdateInterval.Text = config.autoUpdateInterval.ToString();
chkEnableAutoAdjustMainLvColWidth.Checked = config.uiItem.enableAutoAdjustMainLvColWidth;
}
private void btnOK_Click(object sender, EventArgs e)
{
@@ -179,6 +183,21 @@ namespace v2rayN.Forms
UI.Show(UIRes.I18N("PleaseSelectProtocol"));
return -1;
}
var remoteDNS = txtremoteDNS.Text.TrimEx();
var obj = Utils.ParseJson(remoteDNS);
if (obj != null && obj.ContainsKey("servers"))
{
}
else
{
if (remoteDNS.Contains("{") || remoteDNS.Contains("}"))
{
UI.Show(UIRes.I18N("FillCorrectDNSText"));
return -1;
}
}
config.inbound[0].localPort = Utils.ToInt(localPort);
config.inbound[0].protocol = protocol;
config.inbound[0].udpEnabled = udpEnabled;
@@ -225,12 +244,13 @@ namespace v2rayN.Forms
//Mux
config.muxEnabled = muxEnabled;
//remoteDNS
//remoteDNS
config.remoteDNS = txtremoteDNS.Text.TrimEx();
config.defAllowInsecure = chkdefAllowInsecure.Checked;
config.systemProxyExceptions = txtsystemProxyExceptions.Text.TrimEx();
return 0;
}
@@ -288,6 +308,8 @@ namespace v2rayN.Forms
config.ignoreGeoUpdateCore = chkIgnoreGeoUpdateCore.Checked;
config.coreType = (ECoreType)cmbCoreType.SelectedIndex;
config.autoUpdateInterval = Utils.ToInt(txtautoUpdateInterval.Text);
config.uiItem.enableAutoAdjustMainLvColWidth = chkEnableAutoAdjustMainLvColWidth.Checked;
return 0;
}
@@ -311,7 +333,12 @@ namespace v2rayN.Forms
private void linkDnsObjectDoc_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
System.Diagnostics.Process.Start("https://www.v2fly.org/config/dns.html#dnsobject");
Process.Start("https://www.v2fly.org/config/dns.html#dnsobject");
}
private void btnSetLoopback_Click(object sender, EventArgs e)
{
Process.Start(Utils.GetPath("EnableLoopback.exe"));
}
}
}

View File

@@ -133,9 +133,13 @@
<data name="chkKeepOlderDedupl.Text" xml:space="preserve">
<value>Keep older when deduplication</value>
</data>
<data name="&gt;&gt;label4.ZOrder" xml:space="preserve">
<data name="&gt;&gt;txtautoUpdateInterval.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="label13.Location" type="System.Drawing.Point, System.Drawing">
<value>6, 283</value>
</data>
<data name="chklogEnabled.Text" xml:space="preserve">
<value>Record local logs</value>
</data>
@@ -155,7 +159,7 @@
<value>groupBox1</value>
</data>
<data name="&gt;&gt;lbFreshrate.ZOrder" xml:space="preserve">
<value>5</value>
<value>9</value>
</data>
<data name="label7.Text" xml:space="preserve">
<value>tti</value>
@@ -181,7 +185,12 @@
<data name="&gt;&gt;chkudpEnabled.Parent" xml:space="preserve">
<value>groupBox1</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="&gt;&gt;label15.Name" xml:space="preserve">
<value>label15</value>
</data>
<data name="&gt;&gt;txtautoUpdateInterval.Name" xml:space="preserve">
<value>txtautoUpdateInterval</value>
</data>
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
<value>662, 523</value>
</data>
@@ -207,9 +216,15 @@
<data name="label10.TabIndex" type="System.Int32, mscorlib">
<value>14</value>
</data>
<data name="chkEnableAutoAdjustMainLvColWidth.TabIndex" type="System.Int32, mscorlib">
<value>40</value>
</data>
<data name="&gt;&gt;label6.ZOrder" xml:space="preserve">
<value>12</value>
</data>
<data name="tabPage3.TabIndex" type="System.Int32, mscorlib">
<value>5</value>
</data>
<data name="lbFreshrate.Location" type="System.Drawing.Point, System.Drawing">
<value>30, 88</value>
</data>
@@ -237,6 +252,9 @@
<data name="chksniffingEnabled.Size" type="System.Drawing.Size, System.Drawing">
<value>120, 16</value>
</data>
<data name="&gt;&gt;label13.Name" xml:space="preserve">
<value>label13</value>
</data>
<data name="chksniffingEnabled2.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
@@ -249,18 +267,21 @@
<data name="&gt;&gt;chksniffingEnabled2.Type" xml:space="preserve">
<value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="chkIgnoreGeoUpdateCore.TabIndex" type="System.Int32, mscorlib">
<value>36</value>
<data name="&gt;&gt;btnSetLoopback.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="&gt;&gt;txtKcpuplinkCapacity.ZOrder" xml:space="preserve">
<value>7</value>
</data>
<data name="&gt;&gt;chkAutoRun.Parent" xml:space="preserve">
<value>tabPage7</value>
<data name="chkKeepOlderDedupl.TabIndex" type="System.Int32, mscorlib">
<value>33</value>
</data>
<data name="label11.TabIndex" type="System.Int32, mscorlib">
<value>12</value>
</data>
<data name="panel2.Size" type="System.Drawing.Size, System.Drawing">
<value>662, 60</value>
</data>
<data name="&gt;&gt;label7.Name" xml:space="preserve">
<value>label7</value>
</data>
@@ -285,6 +306,15 @@
<data name="&gt;&gt;txtKcpdownlinkCapacity.Parent" xml:space="preserve">
<value>tabPage6</value>
</data>
<data name="tabPage3.Size" type="System.Drawing.Size, System.Drawing">
<value>654, 427</value>
</data>
<data name="btnSetLoopback.TabIndex" type="System.Int32, mscorlib">
<value>39</value>
</data>
<data name="label12.Size" type="System.Drawing.Size, System.Drawing">
<value>317, 12</value>
</data>
<data name="chkAllowIn2.Location" type="System.Drawing.Point, System.Drawing">
<value>15, 63</value>
</data>
@@ -306,6 +336,12 @@
<data name="txtKcpuplinkCapacity.Location" type="System.Drawing.Point, System.Drawing">
<value>111, 62</value>
</data>
<data name="groupBox2.Size" type="System.Drawing.Size, System.Drawing">
<value>654, 427</value>
</data>
<data name="&gt;&gt;txtautoUpdateInterval.Type" xml:space="preserve">
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;label5.Parent" xml:space="preserve">
<value>groupBox1</value>
</data>
@@ -315,8 +351,14 @@
<data name="panel1.Size" type="System.Drawing.Size, System.Drawing">
<value>662, 10</value>
</data>
<data name="$this.Text" xml:space="preserve">
<value>Settings</value>
<data name="chkAllowLANConn.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="chkEnableAutoAdjustMainLvColWidth.Location" type="System.Drawing.Point, System.Drawing">
<value>15, 189</value>
</data>
<data name="chkIgnoreGeoUpdateCore.Location" type="System.Drawing.Point, System.Drawing">
<value>15, 132</value>
</data>
<data name="&gt;&gt;chkAllowIn2.Type" xml:space="preserve">
<value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
@@ -324,6 +366,9 @@
<data name="&gt;&gt;label4.Name" xml:space="preserve">
<value>label4</value>
</data>
<data name="groupBox2.TabIndex" type="System.Int32, mscorlib">
<value>42</value>
</data>
<data name="&gt;&gt;txtKcpmtu.Name" xml:space="preserve">
<value>txtKcpmtu</value>
</data>
@@ -333,8 +378,8 @@
<data name="&gt;&gt;chklogEnabled.ZOrder" xml:space="preserve">
<value>12</value>
</data>
<data name="&gt;&gt;cmbCoreType.Type" xml:space="preserve">
<value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<data name="chkEnableAutoAdjustMainLvColWidth.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="&gt;&gt;label11.Name" xml:space="preserve">
<value>label11</value>
@@ -363,14 +408,14 @@
<data name="&gt;&gt;chksniffingEnabled.Parent" xml:space="preserve">
<value>groupBox1</value>
</data>
<data name="&gt;&gt;tabControl1.Parent" xml:space="preserve">
<value>$this</value>
<data name="btnSetLoopback.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="&gt;&gt;chkmuxEnabled.ZOrder" xml:space="preserve">
<value>3</value>
</data>
<data name="&gt;&gt;chkAllowLANConn.ZOrder" xml:space="preserve">
<value>7</value>
<value>11</value>
</data>
<data name="&gt;&gt;label7.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
@@ -381,11 +426,14 @@
<data name="&gt;&gt;lbFreshrate.Parent" xml:space="preserve">
<value>tabPage7</value>
</data>
<data name="&gt;&gt;groupBox2.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="chkAllowIn2.TabIndex" type="System.Int32, mscorlib">
<value>19</value>
</data>
<data name="panel2.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Bottom</value>
<data name="groupBox2.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="chkEnableStatistics.Size" type="System.Drawing.Size, System.Drawing">
<value>576, 16</value>
@@ -408,6 +456,9 @@
<data name="chkdefAllowInsecure.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="&gt;&gt;btnOK.Parent" xml:space="preserve">
<value>panel2</value>
</data>
<data name="&gt;&gt;btnClose.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
@@ -498,8 +549,11 @@
<data name="tabPage7.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
</data>
<data name="tabControl1.Size" type="System.Drawing.Size, System.Drawing">
<value>662, 453</value>
<data name="&gt;&gt;txtsystemProxyExceptions.Type" xml:space="preserve">
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="txtsystemProxyExceptions.Multiline" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="label2.Location" type="System.Drawing.Point, System.Drawing">
<value>33, 29</value>
@@ -522,6 +576,9 @@
<data name="label4.Size" type="System.Drawing.Size, System.Drawing">
<value>59, 12</value>
</data>
<data name="&gt;&gt;cmbCoreType.Name" xml:space="preserve">
<value>cmbCoreType</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>v2rayN.Forms.BaseForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
@@ -531,8 +588,8 @@
<data name="&gt;&gt;label14.Parent" xml:space="preserve">
<value>tabPage2</value>
</data>
<data name="&gt;&gt;btnOK.Parent" xml:space="preserve">
<value>panel2</value>
<data name="&gt;&gt;tabPage3.ZOrder" xml:space="preserve">
<value>4</value>
</data>
<data name="lbFreshrate.Text" xml:space="preserve">
<value>Statistics freshrate</value>
@@ -582,12 +639,18 @@
<data name="&gt;&gt;label11.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;label15.Parent" xml:space="preserve">
<value>tabPage7</value>
</data>
<data name="chkmuxEnabled.TabIndex" type="System.Int32, mscorlib">
<value>20</value>
</data>
<data name="chkAllowLANConn.TabIndex" type="System.Int32, mscorlib">
<value>29</value>
</data>
<data name="&gt;&gt;btnSetLoopback.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;tabPage1.Type" xml:space="preserve">
<value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
@@ -597,12 +660,21 @@
<data name="&gt;&gt;txtKcpdownlinkCapacity.ZOrder" xml:space="preserve">
<value>5</value>
</data>
<data name="&gt;&gt;label12.Name" xml:space="preserve">
<value>label12</value>
</data>
<data name="tabPage3.Location" type="System.Drawing.Point, System.Drawing">
<value>4, 22</value>
</data>
<data name="label4.Text" xml:space="preserve">
<value>Core Type</value>
</data>
<data name="label8.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="label12.Location" type="System.Drawing.Point, System.Drawing">
<value>8, 28</value>
</data>
<data name="&gt;&gt;chksniffingEnabled.Name" xml:space="preserve">
<value>chksniffingEnabled</value>
</data>
@@ -619,7 +691,7 @@
<value>groupBox1</value>
</data>
<data name="&gt;&gt;chkIgnoreGeoUpdateCore.ZOrder" xml:space="preserve">
<value>0</value>
<value>4</value>
</data>
<data name="label11.Location" type="System.Drawing.Point, System.Drawing">
<value>18, 104</value>
@@ -630,6 +702,9 @@
<data name="label6.Text" xml:space="preserve">
<value>mtu</value>
</data>
<data name="btnSetLoopback.Size" type="System.Drawing.Size, System.Drawing">
<value>282, 23</value>
</data>
<data name="cmbprotocol2.Items" xml:space="preserve">
<value>socks</value>
</data>
@@ -682,7 +757,10 @@
<value>chkudpEnabled</value>
</data>
<data name="&gt;&gt;cmbCoreType.ZOrder" xml:space="preserve">
<value>1</value>
<value>5</value>
</data>
<data name="chkAllowLANConn.Text" xml:space="preserve">
<value>Allow connections from the LAN</value>
</data>
<data name="label10.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
@@ -693,6 +771,9 @@
<data name="&gt;&gt;label9.Name" xml:space="preserve">
<value>label9</value>
</data>
<data name="&gt;&gt;btnSetLoopback.Parent" xml:space="preserve">
<value>tabPage7</value>
</data>
<data name="&gt;&gt;txtKcpreadBufferSize.Parent" xml:space="preserve">
<value>tabPage6</value>
</data>
@@ -723,9 +804,15 @@
<data name="&gt;&gt;txtlocalPort.Name" xml:space="preserve">
<value>txtlocalPort</value>
</data>
<data name="&gt;&gt;tabPage3.Parent" xml:space="preserve">
<value>tabControl1</value>
</data>
<data name="&gt;&gt;cbFreshrate.Parent" xml:space="preserve">
<value>tabPage7</value>
</data>
<data name="&gt;&gt;txtautoUpdateInterval.Parent" xml:space="preserve">
<value>tabPage7</value>
</data>
<data name="&gt;&gt;lbFreshrate.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
@@ -747,6 +834,9 @@
<data name="label1.Text" xml:space="preserve">
<value>protocol</value>
</data>
<data name="label13.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="label6.Size" type="System.Drawing.Size, System.Drawing">
<value>23, 12</value>
</data>
@@ -759,6 +849,9 @@
<data name="groupBox1.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 3</value>
</data>
<data name="&gt;&gt;label13.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;chkAllowLANConn.Name" xml:space="preserve">
<value>chkAllowLANConn</value>
</data>
@@ -780,6 +873,9 @@
<data name="&gt;&gt;chksniffingEnabled2.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="&gt;&gt;label12.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="chkudpEnabled.TabIndex" type="System.Int32, mscorlib">
<value>10</value>
</data>
@@ -792,17 +888,20 @@
<data name="&gt;&gt;cmbprotocol.ZOrder" xml:space="preserve">
<value>9</value>
</data>
<data name="tabPage3.Text" xml:space="preserve">
<value>System proxy settings</value>
</data>
<data name="&gt;&gt;chkmuxEnabled.Parent" xml:space="preserve">
<value>groupBox1</value>
</data>
<data name="&gt;&gt;label7.ZOrder" xml:space="preserve">
<value>10</value>
</data>
<data name="label4.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<data name="chkEnableAutoAdjustMainLvColWidth.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="&gt;&gt;chkEnableStatistics.Name" xml:space="preserve">
<value>chkEnableStatistics</value>
<data name="chkKeepOlderDedupl.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="&gt;&gt;chkAllowIn2.ZOrder" xml:space="preserve">
<value>4</value>
@@ -816,12 +915,15 @@
<data name="label5.Location" type="System.Drawing.Point, System.Drawing">
<value>193, 162</value>
</data>
<data name="chkKeepOlderDedupl.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
<data name="&gt;&gt;btnSetLoopback.Name" xml:space="preserve">
<value>btnSetLoopback</value>
</data>
<data name="chkudpEnabled.Location" type="System.Drawing.Point, System.Drawing">
<value>369, 27</value>
</data>
<data name="&gt;&gt;label12.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="&gt;&gt;txtKcpuplinkCapacity.Type" xml:space="preserve">
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
@@ -831,8 +933,8 @@
<data name="&gt;&gt;label2.Name" xml:space="preserve">
<value>label2</value>
</data>
<data name="chkIgnoreGeoUpdateCore.Location" type="System.Drawing.Point, System.Drawing">
<value>15, 132</value>
<data name="btnSetLoopback.Text" xml:space="preserve">
<value>Set Windows10 UWP Loopback </value>
</data>
<data name="txtlocalPort2.Visible" type="System.Boolean, mscorlib">
<value>False</value>
@@ -853,7 +955,10 @@
<value>101, 12</value>
</data>
<data name="&gt;&gt;chkEnableStatistics.ZOrder" xml:space="preserve">
<value>6</value>
<value>10</value>
</data>
<data name="&gt;&gt;chkEnableAutoAdjustMainLvColWidth.Parent" xml:space="preserve">
<value>tabPage7</value>
</data>
<data name="cmbprotocol.TabIndex" type="System.Int32, mscorlib">
<value>12</value>
@@ -864,15 +969,24 @@
<data name="&gt;&gt;cmbprotocol.Name" xml:space="preserve">
<value>cmbprotocol</value>
</data>
<data name="&gt;&gt;txtsystemProxyExceptions.Parent" xml:space="preserve">
<value>groupBox2</value>
</data>
<data name="chkEnableStatistics.Text" xml:space="preserve">
<value>Enable Statistics (Realtime netspeed and traffic records. Require restart the v2rayN client)</value>
</data>
<data name="chkIgnoreGeoUpdateCore.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="label13.Size" type="System.Drawing.Size, System.Drawing">
<value>107, 12</value>
</data>
<data name="chkAllowLANConn.Size" type="System.Drawing.Size, System.Drawing">
<value>204, 16</value>
</data>
<data name="tabControl1.Size" type="System.Drawing.Size, System.Drawing">
<value>662, 453</value>
</data>
<data name="&gt;&gt;panel1.Parent" xml:space="preserve">
<value>$this</value>
</data>
@@ -888,6 +1002,12 @@
<data name="&gt;&gt;cbFreshrate.Type" xml:space="preserve">
<value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="txtsystemProxyExceptions.TabIndex" type="System.Int32, mscorlib">
<value>41</value>
</data>
<data name="&gt;&gt;tabPage3.Name" xml:space="preserve">
<value>tabPage3</value>
</data>
<data name="cmbprotocol2.Location" type="System.Drawing.Point, System.Drawing">
<value>257, 60</value>
</data>
@@ -906,6 +1026,9 @@
<data name="&gt;&gt;cmbprotocol2.Name" xml:space="preserve">
<value>cmbprotocol2</value>
</data>
<data name="label15.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="&gt;&gt;chkKeepOlderDedupl.Name" xml:space="preserve">
<value>chkKeepOlderDedupl</value>
</data>
@@ -942,6 +1065,9 @@
<data name="&gt;&gt;tabPage2.Parent" xml:space="preserve">
<value>tabControl1</value>
</data>
<data name="btnSetLoopback.Location" type="System.Drawing.Point, System.Drawing">
<value>30, 376</value>
</data>
<data name="chkAllowIn2.Text" xml:space="preserve">
<value>listening port 2</value>
</data>
@@ -954,20 +1080,26 @@
<data name="&gt;&gt;tabControl1.Type" xml:space="preserve">
<value>System.Windows.Forms.TabControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;groupBox2.Parent" xml:space="preserve">
<value>tabPage3</value>
</data>
<data name="&gt;&gt;panel2.Type" xml:space="preserve">
<value>System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="chkAllowLANConn.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
<data name="chkEnableAutoAdjustMainLvColWidth.Text" xml:space="preserve">
<value>Automatically adjust column width after updating subscription</value>
</data>
<data name="chklogEnabled.Location" type="System.Drawing.Point, System.Drawing">
<value>15, 160</value>
</data>
<data name="txtsystemProxyExceptions.ScrollBars" type="System.Windows.Forms.ScrollBars, System.Windows.Forms">
<value>Vertical</value>
</data>
<data name="label14.TabIndex" type="System.Int32, mscorlib">
<value>38</value>
</data>
<data name="chkKeepOlderDedupl.TabIndex" type="System.Int32, mscorlib">
<value>33</value>
<data name="label15.Text" xml:space="preserve">
<value>Automatic update interval of Geo(hours)</value>
</data>
<data name="tabPage1.Location" type="System.Drawing.Point, System.Drawing">
<value>4, 22</value>
@@ -993,9 +1125,15 @@
<data name="cmbloglevel.Items3" xml:space="preserve">
<value>error</value>
</data>
<data name="label15.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="label5.Size" type="System.Drawing.Size, System.Drawing">
<value>59, 12</value>
</data>
<data name="txtautoUpdateInterval.TabIndex" type="System.Int32, mscorlib">
<value>38</value>
</data>
<data name="&gt;&gt;chkEnableStatistics.Type" xml:space="preserve">
<value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
@@ -1029,6 +1167,9 @@
<data name="tabPage7.Size" type="System.Drawing.Size, System.Drawing">
<value>654, 427</value>
</data>
<data name="label13.TabIndex" type="System.Int32, mscorlib">
<value>42</value>
</data>
<data name="chkKeepOlderDedupl.Location" type="System.Drawing.Point, System.Drawing">
<value>15, 108</value>
</data>
@@ -1047,8 +1188,8 @@
<data name="&gt;&gt;chkIgnoreGeoUpdateCore.Name" xml:space="preserve">
<value>chkIgnoreGeoUpdateCore</value>
</data>
<data name="chkAllowLANConn.Text" xml:space="preserve">
<value>Allow connections from the LAN</value>
<data name="&gt;&gt;chkEnableAutoAdjustMainLvColWidth.Name" xml:space="preserve">
<value>chkEnableAutoAdjustMainLvColWidth</value>
</data>
<data name="&gt;&gt;tabPage1.Name" xml:space="preserve">
<value>tabPage1</value>
@@ -1059,9 +1200,15 @@
<data name="&gt;&gt;chkKcpcongestion.Parent" xml:space="preserve">
<value>tabPage6</value>
</data>
<data name="&gt;&gt;chkEnableAutoAdjustMainLvColWidth.Type" xml:space="preserve">
<value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;chksniffingEnabled.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="&gt;&gt;label12.Parent" xml:space="preserve">
<value>groupBox2</value>
</data>
<data name="&gt;&gt;btnClose.Parent" xml:space="preserve">
<value>panel2</value>
</data>
@@ -1077,6 +1224,9 @@
<data name="&gt;&gt;tabPage6.Type" xml:space="preserve">
<value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;label15.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;txtKcpreadBufferSize.Name" xml:space="preserve">
<value>txtKcpreadBufferSize</value>
</data>
@@ -1108,7 +1258,10 @@
<value>15, 64</value>
</data>
<data name="&gt;&gt;chkAutoRun.ZOrder" xml:space="preserve">
<value>8</value>
<value>12</value>
</data>
<data name="&gt;&gt;label13.Parent" xml:space="preserve">
<value>groupBox2</value>
</data>
<data name="&gt;&gt;chkudpEnabled.Type" xml:space="preserve">
<value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
@@ -1116,6 +1269,9 @@
<data name="&gt;&gt;chkudpEnabled2.ZOrder" xml:space="preserve">
<value>5</value>
</data>
<data name="&gt;&gt;tabControl1.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="txtKcpreadBufferSize.TabIndex" type="System.Int32, mscorlib">
<value>13</value>
</data>
@@ -1125,6 +1281,15 @@
<data name="&gt;&gt;linkDnsObjectDoc.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="&gt;&gt;label15.ZOrder" xml:space="preserve">
<value>3</value>
</data>
<data name="&gt;&gt;chkEnableStatistics.Name" xml:space="preserve">
<value>chkEnableStatistics</value>
</data>
<data name="txtsystemProxyExceptions.Location" type="System.Drawing.Point, System.Drawing">
<value>8, 52</value>
</data>
<data name="label11.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
@@ -1149,6 +1314,9 @@
<data name="&gt;&gt;label9.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="txtsystemProxyExceptions.Size" type="System.Drawing.Size, System.Drawing">
<value>638, 219</value>
</data>
<data name="label7.Size" type="System.Drawing.Size, System.Drawing">
<value>23, 12</value>
</data>
@@ -1158,6 +1326,12 @@
<data name="label5.TabIndex" type="System.Int32, mscorlib">
<value>8</value>
</data>
<data name="groupBox2.Text" xml:space="preserve">
<value>Exception</value>
</data>
<data name="label15.TabIndex" type="System.Int32, mscorlib">
<value>37</value>
</data>
<data name="&gt;&gt;tabControl1.Name" xml:space="preserve">
<value>tabControl1</value>
</data>
@@ -1188,21 +1362,36 @@
<data name="&gt;&gt;cmbprotocol2.ZOrder" xml:space="preserve">
<value>6</value>
</data>
<data name="&gt;&gt;label13.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="panel2.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 463</value>
</data>
<data name="&gt;&gt;chkAutoRun.Parent" xml:space="preserve">
<value>tabPage7</value>
</data>
<data name="&gt;&gt;chksniffingEnabled2.Parent" xml:space="preserve">
<value>groupBox1</value>
</data>
<data name="&gt;&gt;txtKcpreadBufferSize.ZOrder" xml:space="preserve">
<value>3</value>
</data>
<data name="label12.Text" xml:space="preserve">
<value>Do not use proxy server for addresses beginning with</value>
</data>
<data name="&gt;&gt;cbFreshrate.ZOrder" xml:space="preserve">
<value>8</value>
</data>
<data name="cmbprotocol.Items1" xml:space="preserve">
<value>http</value>
</data>
<data name="&gt;&gt;btnClose.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="label13.Text" xml:space="preserve">
<value>Use semicolon (;)</value>
</data>
<data name="cmbprotocol2.Size" type="System.Drawing.Size, System.Drawing">
<value>97, 20</value>
</data>
@@ -1251,12 +1440,24 @@
<data name="&gt;&gt;tabPage7.Name" xml:space="preserve">
<value>tabPage7</value>
</data>
<data name="&gt;&gt;txtsystemProxyExceptions.Name" xml:space="preserve">
<value>txtsystemProxyExceptions</value>
</data>
<data name="&gt;&gt;tabPage3.Type" xml:space="preserve">
<value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;groupBox2.Name" xml:space="preserve">
<value>groupBox2</value>
</data>
<data name="tabPage2.Location" type="System.Drawing.Point, System.Drawing">
<value>4, 22</value>
</data>
<data name="&gt;&gt;panel2.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="label12.TabIndex" type="System.Int32, mscorlib">
<value>40</value>
</data>
<data name="&gt;&gt;label5.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
@@ -1287,8 +1488,11 @@
<data name="lbFreshrate.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="chkIgnoreGeoUpdateCore.TabIndex" type="System.Int32, mscorlib">
<value>36</value>
</data>
<data name="&gt;&gt;chkKeepOlderDedupl.ZOrder" xml:space="preserve">
<value>3</value>
<value>7</value>
</data>
<data name="&gt;&gt;label9.ZOrder" xml:space="preserve">
<value>8</value>
@@ -1296,6 +1500,9 @@
<data name="&gt;&gt;txtremoteDNS.Name" xml:space="preserve">
<value>txtremoteDNS</value>
</data>
<data name="groupBox2.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 0</value>
</data>
<data name="label2.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
@@ -1341,6 +1548,9 @@
<data name="&gt;&gt;txtKcpdownlinkCapacity.Type" xml:space="preserve">
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="label4.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="txtKcptti.Location" type="System.Drawing.Point, System.Drawing">
<value>345, 24</value>
</data>
@@ -1383,18 +1593,30 @@
<data name="&gt;&gt;txtKcpdownlinkCapacity.Name" xml:space="preserve">
<value>txtKcpdownlinkCapacity</value>
</data>
<data name="panel2.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Bottom</value>
</data>
<data name="chkdefAllowInsecure.TabIndex" type="System.Int32, mscorlib">
<value>35</value>
</data>
<data name="cmbloglevel.TabIndex" type="System.Int32, mscorlib">
<value>6</value>
</data>
<data name="&gt;&gt;cbFreshrate.ZOrder" xml:space="preserve">
<value>4</value>
<data name="&gt;&gt;chkEnableAutoAdjustMainLvColWidth.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="$this.Text" xml:space="preserve">
<value>Settings</value>
</data>
<data name="&gt;&gt;label4.ZOrder" xml:space="preserve">
<value>6</value>
</data>
<data name="tabPage6.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 3, 3, 3</value>
</data>
<data name="txtautoUpdateInterval.Size" type="System.Drawing.Size, System.Drawing">
<value>97, 21</value>
</data>
<data name="linkDnsObjectDoc.Size" type="System.Drawing.Size, System.Drawing">
<value>107, 12</value>
</data>
@@ -1428,6 +1650,9 @@
<data name="chkAllowIn2.Visible" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="&gt;&gt;cmbCoreType.Type" xml:space="preserve">
<value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="label4.Location" type="System.Drawing.Point, System.Drawing">
<value>253, 134</value>
</data>
@@ -1437,8 +1662,8 @@
<data name="chkudpEnabled.Text" xml:space="preserve">
<value>Enable UDP</value>
</data>
<data name="&gt;&gt;cmbCoreType.Name" xml:space="preserve">
<value>cmbCoreType</value>
<data name="chkEnableAutoAdjustMainLvColWidth.Size" type="System.Drawing.Size, System.Drawing">
<value>390, 16</value>
</data>
<data name="tabPage7.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 3, 3, 3</value>
@@ -1452,9 +1677,15 @@
<data name="btnOK.Location" type="System.Drawing.Point, System.Drawing">
<value>267, 16</value>
</data>
<data name="&gt;&gt;groupBox2.Type" xml:space="preserve">
<value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="btnClose.Size" type="System.Drawing.Size, System.Drawing">
<value>75, 23</value>
</data>
<data name="label15.Size" type="System.Drawing.Size, System.Drawing">
<value>239, 12</value>
</data>
<data name="&gt;&gt;chkAllowIn2.Parent" xml:space="preserve">
<value>groupBox1</value>
</data>
@@ -1482,6 +1713,9 @@
<data name="txtlocalPort.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
</data>
<data name="label15.Location" type="System.Drawing.Point, System.Drawing">
<value>30, 162</value>
</data>
<data name="label14.Text" xml:space="preserve">
<value>Custom DNS (multiple, separated by commas (,))</value>
</data>
@@ -1509,6 +1743,9 @@
<data name="&gt;&gt;chkKcpcongestion.Type" xml:space="preserve">
<value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;txtsystemProxyExceptions.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="chkmuxEnabled.Text" xml:space="preserve">
<value>Turn on Mux Multiplexing </value>
</data>
@@ -1521,11 +1758,20 @@
<data name="txtKcpmtu.Location" type="System.Drawing.Point, System.Drawing">
<value>111, 24</value>
</data>
<data name="label12.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="label6.TabIndex" type="System.Int32, mscorlib">
<value>4</value>
</data>
<data name="panel2.Size" type="System.Drawing.Size, System.Drawing">
<value>662, 60</value>
<data name="label13.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="label12.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="txtautoUpdateInterval.Location" type="System.Drawing.Point, System.Drawing">
<value>325, 156</value>
</data>
<data name="&gt;&gt;label14.Name" xml:space="preserve">
<value>label14</value>

View File

@@ -122,10 +122,10 @@
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="chkdefAllowInsecure.Size" type="System.Drawing.Size, System.Drawing">
<value>336, 16</value>
<value>324, 16</value>
</data>
<data name="chkdefAllowInsecure.Text" xml:space="preserve">
<value>底层传输安全选tls时默认跳过证书验证(allowInsecure)</value>
<value>传输安全选tls时默认跳过证书验证(allowInsecure)</value>
</data>
<data name="chksniffingEnabled2.Size" type="System.Drawing.Size, System.Drawing">
<value>96, 16</value>
@@ -226,6 +226,24 @@
<data name="tabPage6.Text" xml:space="preserve">
<value> Core:KCP设置 </value>
</data>
<data name="chkEnableAutoAdjustMainLvColWidth.Size" type="System.Drawing.Size, System.Drawing">
<value>204, 16</value>
</data>
<data name="chkEnableAutoAdjustMainLvColWidth.Text" xml:space="preserve">
<value>自动调整服务器列宽在更新订阅后</value>
</data>
<data name="btnSetLoopback.Text" xml:space="preserve">
<value>解除Windows10 UWP应用回环代理限制</value>
</data>
<data name="txtautoUpdateInterval.Location" type="System.Drawing.Point, System.Drawing">
<value>255, 156</value>
</data>
<data name="label15.Size" type="System.Drawing.Size, System.Drawing">
<value>191, 12</value>
</data>
<data name="label15.Text" xml:space="preserve">
<value>自动更新Geo文件的间隔(单位小时)</value>
</data>
<data name="chkIgnoreGeoUpdateCore.Size" type="System.Drawing.Size, System.Drawing">
<value>150, 16</value>
</data>
@@ -274,6 +292,30 @@
<data name="tabPage7.Text" xml:space="preserve">
<value> v2rayN设置 </value>
</data>
<data name="label13.Size" type="System.Drawing.Size, System.Drawing">
<value>95, 12</value>
</data>
<data name="label13.Text" xml:space="preserve">
<value>使用分号(;)分隔</value>
</data>
<data name="label12.Size" type="System.Drawing.Size, System.Drawing">
<value>239, 12</value>
</data>
<data name="label12.Text" xml:space="preserve">
<value>对于下列字符开头的地址不使用代理服务器:</value>
</data>
<data name="groupBox2.Size" type="System.Drawing.Size, System.Drawing">
<value>654, 443</value>
</data>
<data name="groupBox2.Text" xml:space="preserve">
<value>例外</value>
</data>
<data name="tabPage3.Size" type="System.Drawing.Size, System.Drawing">
<value>654, 443</value>
</data>
<data name="tabPage3.Text" xml:space="preserve">
<value> 系统代理设置 </value>
</data>
<data name="tabControl1.Size" type="System.Drawing.Size, System.Drawing">
<value>662, 469</value>
</data>

View File

@@ -31,6 +31,9 @@
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(RoutingRuleSettingDetailsForm));
this.panel1 = new System.Windows.Forms.Panel();
this.panel3 = new System.Windows.Forms.Panel();
this.chkEnabled = new System.Windows.Forms.CheckBox();
this.clbInboundTag = new System.Windows.Forms.CheckedListBox();
this.label2 = new System.Windows.Forms.Label();
this.clbProtocol = new System.Windows.Forms.CheckedListBox();
this.label3 = new System.Windows.Forms.Label();
this.txtPort = new System.Windows.Forms.TextBox();
@@ -61,6 +64,9 @@
// panel3
//
resources.ApplyResources(this.panel3, "panel3");
this.panel3.Controls.Add(this.chkEnabled);
this.panel3.Controls.Add(this.clbInboundTag);
this.panel3.Controls.Add(this.label2);
this.panel3.Controls.Add(this.clbProtocol);
this.panel3.Controls.Add(this.label3);
this.panel3.Controls.Add(this.txtPort);
@@ -70,6 +76,28 @@
this.panel3.Controls.Add(this.cmbOutboundTag);
this.panel3.Name = "panel3";
//
// chkEnabled
//
resources.ApplyResources(this.chkEnabled, "chkEnabled");
this.chkEnabled.Name = "chkEnabled";
this.chkEnabled.UseVisualStyleBackColor = true;
//
// clbInboundTag
//
resources.ApplyResources(this.clbInboundTag, "clbInboundTag");
this.clbInboundTag.CheckOnClick = true;
this.clbInboundTag.FormattingEnabled = true;
this.clbInboundTag.Items.AddRange(new object[] {
resources.GetString("clbInboundTag.Items"),
resources.GetString("clbInboundTag.Items1")});
this.clbInboundTag.MultiColumn = true;
this.clbInboundTag.Name = "clbInboundTag";
//
// label2
//
resources.ApplyResources(this.label2, "label2");
this.label2.Name = "label2";
//
// clbProtocol
//
resources.ApplyResources(this.clbProtocol, "clbProtocol");
@@ -214,5 +242,8 @@
private System.Windows.Forms.TextBox txtPort;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.CheckedListBox clbProtocol;
private System.Windows.Forms.CheckedListBox clbInboundTag;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.CheckBox chkEnabled;
}
}

View File

@@ -36,6 +36,16 @@ namespace v2rayN.Forms
if (rulesItem != null)
{
rulesItem.port = txtPort.Text.TrimEx();
var inboundTag = new List<String>();
for (int i = 0; i < clbInboundTag.Items.Count; i++)
{
if (clbInboundTag.GetItemChecked(i))
{
inboundTag.Add(clbInboundTag.Items[i].ToString());
}
}
rulesItem.inboundTag = inboundTag;
rulesItem.outboundTag = cmbOutboundTag.Text;
rulesItem.domain = Utils.String2List(txtDomain.Text);
rulesItem.ip = Utils.String2List(txtIP.Text);
@@ -49,6 +59,7 @@ namespace v2rayN.Forms
}
}
rulesItem.protocol = protocol;
rulesItem.enabled = chkEnabled.Checked;
}
}
private void BindingData()
@@ -60,6 +71,17 @@ namespace v2rayN.Forms
txtDomain.Text = Utils.List2String(rulesItem.domain, true);
txtIP.Text = Utils.List2String(rulesItem.ip, true);
if (rulesItem.inboundTag != null)
{
for (int i = 0; i < clbInboundTag.Items.Count; i++)
{
if (rulesItem.inboundTag.Contains(clbInboundTag.Items[i].ToString()))
{
clbInboundTag.SetItemChecked(i, true);
}
}
}
if (rulesItem.protocol != null)
{
for (int i = 0; i < clbProtocol.Items.Count; i++)
@@ -70,6 +92,7 @@ namespace v2rayN.Forms
}
}
}
chkEnabled.Checked = rulesItem.enabled;
}
}
private void ClearBind()
@@ -78,6 +101,7 @@ namespace v2rayN.Forms
cmbOutboundTag.Text = Global.agentTag;
txtDomain.Text = string.Empty;
txtIP.Text = string.Empty;
chkEnabled.Checked = true;
}
private void btnOK_Click(object sender, EventArgs e)
{

View File

@@ -121,8 +121,8 @@
<data name="label3.Size" type="System.Drawing.Size, System.Drawing">
<value>53, 12</value>
</data>
<data name="&gt;&gt;groupBox1.Type" xml:space="preserve">
<value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<data name="&gt;&gt;clbInboundTag.Type" xml:space="preserve">
<value>System.Windows.Forms.CheckedListBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="label4.TabIndex" type="System.Int32, mscorlib">
@@ -131,8 +131,8 @@
<data name="clbProtocol.Size" type="System.Drawing.Size, System.Drawing">
<value>245, 20</value>
</data>
<data name="cmbOutboundTag.Items1" xml:space="preserve">
<value>direct</value>
<data name="clbProtocol.ColumnWidth" type="System.Int32, mscorlib">
<value>80</value>
</data>
<data name="cmbOutboundTag.TabIndex" type="System.Int32, mscorlib">
<value>31</value>
@@ -140,10 +140,10 @@
<data name="cmbOutboundTag.Items" xml:space="preserve">
<value>proxy</value>
</data>
<data name="cmbOutboundTag.Location" type="System.Drawing.Point, System.Drawing">
<value>107, 16</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="$this.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>4, 4, 4, 4</value>
</data>
<data name="panel2.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
@@ -156,26 +156,32 @@
<data name="&gt;&gt;clbProtocol.Name" xml:space="preserve">
<value>clbProtocol</value>
</data>
<data name="label3.Text" xml:space="preserve">
<value>Protocol</value>
</data>
<data name="&gt;&gt;label1.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;labRoutingTips.ZOrder" xml:space="preserve">
<value>4</value>
<value>7</value>
</data>
<data name="label1.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="txtDomain.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 17</value>
<data name="&gt;&gt;label2.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="label4.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="&gt;&gt;clbProtocol.ZOrder" xml:space="preserve">
<value>0</value>
<value>3</value>
</data>
<data name="groupBox1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Left</value>
</data>
<data name="&gt;&gt;label3.Parent" xml:space="preserve">
<value>panel3</value>
<data name="clbInboundTag.ColumnWidth" type="System.Int32, mscorlib">
<value>80</value>
</data>
<data name="label4.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
@@ -186,8 +192,11 @@
<data name="label1.Size" type="System.Drawing.Size, System.Drawing">
<value>29, 12</value>
</data>
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
<value>742, 576</value>
<data name="&gt;&gt;clbInboundTag.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="clbInboundTag.Items1" xml:space="preserve">
<value>http</value>
</data>
<data name="&gt;&gt;groupBox2.Parent" xml:space="preserve">
<value>panel2</value>
@@ -201,11 +210,11 @@
<data name="label3.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="txtIP.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
<data name="&gt;&gt;clbProtocol.Type" xml:space="preserve">
<value>System.Windows.Forms.CheckedListBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;label1.ZOrder" xml:space="preserve">
<value>3</value>
<value>6</value>
</data>
<data name="groupBox2.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
@@ -222,6 +231,9 @@
<data name="label3.TabIndex" type="System.Int32, mscorlib">
<value>36</value>
</data>
<data name="panel4.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Bottom</value>
</data>
<data name="&gt;&gt;btnClose.ZOrder" xml:space="preserve">
<value>0</value>
</data>
@@ -243,8 +255,11 @@
<data name="labRoutingTips.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="panel2.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 121</value>
<data name="&gt;&gt;label2.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="&gt;&gt;txtPort.ZOrder" xml:space="preserve">
<value>5</value>
</data>
<data name="&gt;&gt;label1.Name" xml:space="preserve">
<value>label1</value>
@@ -252,11 +267,17 @@
<data name="panel2.Size" type="System.Drawing.Size, System.Drawing">
<value>742, 395</value>
</data>
<data name="label3.Text" xml:space="preserve">
<value>Protocol</value>
<data name="panel1.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 0</value>
</data>
<data name="&gt;&gt;cmbOutboundTag.ZOrder" xml:space="preserve">
<value>6</value>
<value>9</value>
</data>
<data name="label2.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="&gt;&gt;chkEnabled.Type" xml:space="preserve">
<value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;panel3.Name" xml:space="preserve">
<value>panel3</value>
@@ -276,18 +297,30 @@
<data name="clbProtocol.Items2" xml:space="preserve">
<value>bittorrent</value>
</data>
<data name="&gt;&gt;btnOK.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="clbInboundTag.Items" xml:space="preserve">
<value>socks</value>
</data>
<data name="&gt;&gt;chkEnabled.Parent" xml:space="preserve">
<value>panel3</value>
</data>
<data name="labRoutingTips.Location" type="System.Drawing.Point, System.Drawing">
<value>19, 82</value>
</data>
<data name="txtIP.TabIndex" type="System.Int32, mscorlib">
<value>25</value>
</data>
<data name="clbInboundTag.Location" type="System.Drawing.Point, System.Drawing">
<value>347, 16</value>
</data>
<data name="txtDomain.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 17</value>
</data>
<data name="&gt;&gt;labRoutingTips.Parent" xml:space="preserve">
<value>panel3</value>
</data>
<data name="panel1.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 0</value>
</data>
<data name="label4.Location" type="System.Drawing.Point, System.Drawing">
<value>19, 20</value>
</data>
@@ -300,8 +333,8 @@
<data name="clbProtocol.TabIndex" type="System.Int32, mscorlib">
<value>39</value>
</data>
<data name="txtDomain.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
<data name="&gt;&gt;groupBox1.Name" xml:space="preserve">
<value>groupBox1</value>
</data>
<data name="&gt;&gt;btnOK.ZOrder" xml:space="preserve">
<value>1</value>
@@ -325,10 +358,10 @@
<value>groupBox2</value>
</data>
<data name="&gt;&gt;label4.ZOrder" xml:space="preserve">
<value>5</value>
<value>8</value>
</data>
<data name="panel4.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Bottom</value>
<data name="&gt;&gt;groupBox1.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="txtDomain.Size" type="System.Drawing.Size, System.Drawing">
<value>386, 375</value>
@@ -336,24 +369,18 @@
<data name="&gt;&gt;cmbOutboundTag.Parent" xml:space="preserve">
<value>panel3</value>
</data>
<data name="groupBox2.Location" type="System.Drawing.Point, System.Drawing">
<value>392, 0</value>
</data>
<data name="panel3.TabIndex" type="System.Int32, mscorlib">
<value>8</value>
</data>
<data name="&gt;&gt;cmbOutboundTag.Type" xml:space="preserve">
<value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;groupBox1.Parent" xml:space="preserve">
<value>panel2</value>
</data>
<data name="txtIP.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="&gt;&gt;panel4.Name" xml:space="preserve">
<value>panel4</value>
</data>
<data name="&gt;&gt;clbProtocol.Type" xml:space="preserve">
<value>System.Windows.Forms.CheckedListBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="btnClose.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
@@ -363,9 +390,18 @@
<data name="&gt;&gt;panel1.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="chkEnabled.TabIndex" type="System.Int32, mscorlib">
<value>42</value>
</data>
<data name="&gt;&gt;txtIP.Parent" xml:space="preserve">
<value>groupBox2</value>
</data>
<data name="&gt;&gt;label2.Parent" xml:space="preserve">
<value>panel3</value>
</data>
<data name="&gt;&gt;label4.Parent" xml:space="preserve">
<value>panel3</value>
</data>
<data name="&gt;&gt;panel4.Type" xml:space="preserve">
<value>System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
@@ -390,14 +426,14 @@
<data name="groupBox1.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 0</value>
</data>
<data name="&gt;&gt;groupBox1.Name" xml:space="preserve">
<value>groupBox1</value>
</data>
<data name="txtDomain.TabIndex" type="System.Int32, mscorlib">
<value>24</value>
</data>
<data name="panel2.TabIndex" type="System.Int32, mscorlib">
<value>11</value>
<data name="label1.Text" xml:space="preserve">
<value>Port</value>
</data>
<data name="chkEnabled.Text" xml:space="preserve">
<value>Enable</value>
</data>
<data name="&gt;&gt;label4.Name" xml:space="preserve">
<value>label4</value>
@@ -408,9 +444,6 @@
<data name="btnOK.Size" type="System.Drawing.Size, System.Drawing">
<value>75, 23</value>
</data>
<data name="&gt;&gt;btnClose.Name" xml:space="preserve">
<value>btnClose</value>
</data>
<data name="&gt;&gt;labRoutingTips.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
@@ -423,21 +456,24 @@
<data name="label3.Location" type="System.Drawing.Point, System.Drawing">
<value>274, 47</value>
</data>
<data name="label2.TabIndex" type="System.Int32, mscorlib">
<value>40</value>
</data>
<data name="cmbOutboundTag.Items2" xml:space="preserve">
<value>block</value>
</data>
<data name="labRoutingTips.TabIndex" type="System.Int32, mscorlib">
<value>33</value>
</data>
<data name="&gt;&gt;groupBox1.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="clbProtocol.Location" type="System.Drawing.Point, System.Drawing">
<value>347, 43</value>
</data>
<data name="&gt;&gt;txtDomain.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="&gt;&gt;label3.Parent" xml:space="preserve">
<value>panel3</value>
</data>
<data name="&gt;&gt;groupBox2.Type" xml:space="preserve">
<value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
@@ -459,8 +495,8 @@
<data name="&gt;&gt;panel2.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="&gt;&gt;label3.Name" xml:space="preserve">
<value>label3</value>
<data name="panel2.TabIndex" type="System.Int32, mscorlib">
<value>11</value>
</data>
<data name="&gt;&gt;txtIP.ZOrder" xml:space="preserve">
<value>0</value>
@@ -468,33 +504,45 @@
<data name="&gt;&gt;label1.Parent" xml:space="preserve">
<value>panel3</value>
</data>
<data name="&gt;&gt;clbProtocol.Parent" xml:space="preserve">
<value>panel3</value>
<data name="panel3.TabIndex" type="System.Int32, mscorlib">
<value>8</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>v2rayN.Forms.BaseForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="panel3.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 10</value>
<data name="&gt;&gt;label3.Name" xml:space="preserve">
<value>label3</value>
</data>
<data name="clbProtocol.ColumnWidth" type="System.Int32, mscorlib">
<value>80</value>
<data name="label2.Text" xml:space="preserve">
<value>inboundTag</value>
</data>
<data name="panel1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Top</value>
</data>
<data name="panel4.Size" type="System.Drawing.Size, System.Drawing">
<value>742, 60</value>
</data>
<data name="&gt;&gt;btnOK.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<data name="panel2.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 121</value>
</data>
<data name="&gt;&gt;panel4.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="btnClose.Text" xml:space="preserve">
<value>&amp;Cancel</value>
</data>
<data name="labRoutingTips.Text" xml:space="preserve">
<value>*Set the rules, separated by commas (,); The comma in the regular is replaced by &lt;COMMA&gt;</value>
</data>
<data name="clbInboundTag.Size" type="System.Drawing.Size, System.Drawing">
<value>245, 20</value>
</data>
<data name="label2.Size" type="System.Drawing.Size, System.Drawing">
<value>65, 12</value>
</data>
<data name="&gt;&gt;btnClose.Name" xml:space="preserve">
<value>btnClose</value>
</data>
<data name="groupBox2.Location" type="System.Drawing.Point, System.Drawing">
<value>392, 0</value>
</data>
<data name="panel3.Size" type="System.Drawing.Size, System.Drawing">
<value>742, 111</value>
</data>
@@ -504,8 +552,14 @@
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
<value>6, 12</value>
</data>
<data name="label1.Text" xml:space="preserve">
<value>Port</value>
<data name="&gt;&gt;chkEnabled.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="chkEnabled.Location" type="System.Drawing.Point, System.Drawing">
<value>617, 19</value>
</data>
<data name="panel3.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 10</value>
</data>
<data name="&gt;&gt;txtPort.Type" xml:space="preserve">
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
@@ -513,26 +567,41 @@
<data name="&gt;&gt;txtDomain.Type" xml:space="preserve">
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="chkEnabled.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="&gt;&gt;label3.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;txtIP.Name" xml:space="preserve">
<value>txtIP</value>
</data>
<data name="&gt;&gt;txtPort.ZOrder" xml:space="preserve">
<value>2</value>
<data name="cmbOutboundTag.Items1" xml:space="preserve">
<value>direct</value>
</data>
<data name="&gt;&gt;label2.Name" xml:space="preserve">
<value>label2</value>
</data>
<data name="chkEnabled.Size" type="System.Drawing.Size, System.Drawing">
<value>60, 16</value>
</data>
<data name="&gt;&gt;cmbOutboundTag.Name" xml:space="preserve">
<value>cmbOutboundTag</value>
</data>
<data name="&gt;&gt;chkEnabled.Name" xml:space="preserve">
<value>chkEnabled</value>
</data>
<data name="txtDomain.Multiline" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="label2.Location" type="System.Drawing.Point, System.Drawing">
<value>274, 20</value>
</data>
<data name="btnOK.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="groupBox1.Text" xml:space="preserve">
<value>Domain</value>
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
<value>742, 576</value>
</data>
<data name="panel4.TabIndex" type="System.Int32, mscorlib">
<value>10</value>
@@ -546,8 +615,20 @@
<data name="btnClose.Size" type="System.Drawing.Size, System.Drawing">
<value>75, 23</value>
</data>
<data name="&gt;&gt;clbInboundTag.Name" xml:space="preserve">
<value>clbInboundTag</value>
</data>
<data name="&gt;&gt;label3.ZOrder" xml:space="preserve">
<value>1</value>
<value>4</value>
</data>
<data name="btnClose.Text" xml:space="preserve">
<value>&amp;Cancel</value>
</data>
<data name="chkEnabled.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="label2.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="label1.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
@@ -558,9 +639,15 @@
<data name="&gt;&gt;txtDomain.Name" xml:space="preserve">
<value>txtDomain</value>
</data>
<data name="clbInboundTag.TabIndex" type="System.Int32, mscorlib">
<value>41</value>
</data>
<data name="groupBox2.Text" xml:space="preserve">
<value>IP</value>
</data>
<data name="&gt;&gt;clbInboundTag.Parent" xml:space="preserve">
<value>panel3</value>
</data>
<data name="&gt;&gt;panel3.Type" xml:space="preserve">
<value>System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
@@ -576,20 +663,26 @@
<data name="groupBox2.Size" type="System.Drawing.Size, System.Drawing">
<value>350, 395</value>
</data>
<data name="&gt;&gt;label4.Parent" xml:space="preserve">
<data name="&gt;&gt;clbProtocol.Parent" xml:space="preserve">
<value>panel3</value>
</data>
<data name="groupBox1.Text" xml:space="preserve">
<value>Domain</value>
</data>
<data name="txtDomain.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="btnClose.Location" type="System.Drawing.Point, System.Drawing">
<value>504, 15</value>
</data>
<data name="label4.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
<data name="cmbOutboundTag.Location" type="System.Drawing.Point, System.Drawing">
<value>107, 16</value>
</data>
<data name="label4.Text" xml:space="preserve">
<value>outboundTag</value>
</data>
<data name="panel1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Top</value>
<data name="&gt;&gt;groupBox1.Type" xml:space="preserve">
<value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="txtPort.TabIndex" type="System.Int32, mscorlib">
<value>35</value>
@@ -597,7 +690,4 @@
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="$this.Language" type="System.Globalization.CultureInfo, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>zh-Hans</value>
</metadata>
</root>

View File

@@ -117,12 +117,43 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="chkEnabled.Location" type="System.Drawing.Point, System.Drawing">
<value>670, 18</value>
</data>
<data name="clbInboundTag.Location" type="System.Drawing.Point, System.Drawing">
<value>372, 16</value>
</data>
<data name="clbInboundTag.Size" type="System.Drawing.Size, System.Drawing">
<value>272, 20</value>
</data>
<data name="label2.Location" type="System.Drawing.Point, System.Drawing">
<value>279, 20</value>
</data>
<data name="clbProtocol.Location" type="System.Drawing.Point, System.Drawing">
<value>372, 46</value>
</data>
<data name="clbProtocol.Size" type="System.Drawing.Size, System.Drawing">
<value>272, 20</value>
</data>
<data name="label3.Location" type="System.Drawing.Point, System.Drawing">
<value>279, 50</value>
</data>
<data name="txtPort.Location" type="System.Drawing.Point, System.Drawing">
<value>120, 46</value>
</data>
<data name="label1.Location" type="System.Drawing.Point, System.Drawing">
<value>19, 50</value>
</data>
<data name="labRoutingTips.Text" xml:space="preserve">
<value>*设置的路由规则,用逗号(,)分隔;正则中的逗号用&lt;COMMA&gt;替代</value>
</data>
<data name="label4.Text" xml:space="preserve">
<value>OutboundTag</value>
</data>
<data name="cmbOutboundTag.Location" type="System.Drawing.Point, System.Drawing">
<value>120, 16</value>
</data>
<data name="btnClose.Text" xml:space="preserve">
<value>取消(&amp;C)</value>
</data>

View File

@@ -34,6 +34,10 @@
this.panel2 = new System.Windows.Forms.Panel();
this.btnOK = new System.Windows.Forms.Button();
this.panel1 = new System.Windows.Forms.Panel();
this.label5 = new System.Windows.Forms.Label();
this.btnBrowse = new System.Windows.Forms.Button();
this.txtCustomIcon = new System.Windows.Forms.TextBox();
this.label4 = new System.Windows.Forms.Label();
this.label1 = new System.Windows.Forms.Label();
this.txtUrl = new System.Windows.Forms.TextBox();
this.label3 = new System.Windows.Forms.Label();
@@ -68,17 +72,17 @@
//
// btnClose
//
this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel;
resources.ApplyResources(this.btnClose, "btnClose");
this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.btnClose.Name = "btnClose";
this.btnClose.UseVisualStyleBackColor = true;
this.btnClose.Click += new System.EventHandler(this.btnClose_Click);
//
// panel2
//
resources.ApplyResources(this.panel2, "panel2");
this.panel2.Controls.Add(this.btnClose);
this.panel2.Controls.Add(this.btnOK);
resources.ApplyResources(this.panel2, "panel2");
this.panel2.Name = "panel2";
//
// btnOK
@@ -90,14 +94,40 @@
//
// panel1
//
resources.ApplyResources(this.panel1, "panel1");
this.panel1.Controls.Add(this.label5);
this.panel1.Controls.Add(this.btnBrowse);
this.panel1.Controls.Add(this.txtCustomIcon);
this.panel1.Controls.Add(this.label4);
this.panel1.Controls.Add(this.label1);
this.panel1.Controls.Add(this.txtUrl);
this.panel1.Controls.Add(this.label3);
this.panel1.Controls.Add(this.txtRemarks);
this.panel1.Controls.Add(this.label2);
resources.ApplyResources(this.panel1, "panel1");
this.panel1.Name = "panel1";
//
// label5
//
resources.ApplyResources(this.label5, "label5");
this.label5.Name = "label5";
//
// btnBrowse
//
resources.ApplyResources(this.btnBrowse, "btnBrowse");
this.btnBrowse.Name = "btnBrowse";
this.btnBrowse.UseVisualStyleBackColor = true;
this.btnBrowse.Click += new System.EventHandler(this.btnBrowse_Click);
//
// txtCustomIcon
//
resources.ApplyResources(this.txtCustomIcon, "txtCustomIcon");
this.txtCustomIcon.Name = "txtCustomIcon";
//
// label4
//
resources.ApplyResources(this.label4, "label4");
this.label4.Name = "label4";
//
// label1
//
resources.ApplyResources(this.label1, "label1");
@@ -125,8 +155,8 @@
//
// lvRoutings
//
this.lvRoutings.ContextMenuStrip = this.cmsLv;
resources.ApplyResources(this.lvRoutings, "lvRoutings");
this.lvRoutings.ContextMenuStrip = this.cmsLv;
this.lvRoutings.FullRowSelect = true;
this.lvRoutings.GridLines = true;
this.lvRoutings.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable;
@@ -142,6 +172,7 @@
//
// cmsLv
//
resources.ApplyResources(this.cmsLv, "cmsLv");
this.cmsLv.ImageScalingSize = new System.Drawing.Size(20, 20);
this.cmsLv.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.menuAdd,
@@ -155,114 +186,113 @@
this.menuMoveBottom});
this.cmsLv.Name = "cmsLv";
this.cmsLv.OwnerItem = this.MenuItem1;
resources.ApplyResources(this.cmsLv, "cmsLv");
//
// menuAdd
//
this.menuAdd.Name = "menuAdd";
resources.ApplyResources(this.menuAdd, "menuAdd");
this.menuAdd.Name = "menuAdd";
this.menuAdd.Click += new System.EventHandler(this.menuAdd_Click);
//
// menuRemove
//
this.menuRemove.Name = "menuRemove";
resources.ApplyResources(this.menuRemove, "menuRemove");
this.menuRemove.Name = "menuRemove";
this.menuRemove.Click += new System.EventHandler(this.menuRemove_Click);
//
// menuSelectAll
//
this.menuSelectAll.Name = "menuSelectAll";
resources.ApplyResources(this.menuSelectAll, "menuSelectAll");
this.menuSelectAll.Name = "menuSelectAll";
this.menuSelectAll.Click += new System.EventHandler(this.menuSelectAll_Click);
//
// menuExportSelectedRules
//
this.menuExportSelectedRules.Name = "menuExportSelectedRules";
resources.ApplyResources(this.menuExportSelectedRules, "menuExportSelectedRules");
this.menuExportSelectedRules.Name = "menuExportSelectedRules";
this.menuExportSelectedRules.Click += new System.EventHandler(this.menuExportSelectedRules_Click);
//
// toolStripSeparator3
//
this.toolStripSeparator3.Name = "toolStripSeparator3";
resources.ApplyResources(this.toolStripSeparator3, "toolStripSeparator3");
this.toolStripSeparator3.Name = "toolStripSeparator3";
//
// menuMoveTop
//
this.menuMoveTop.Name = "menuMoveTop";
resources.ApplyResources(this.menuMoveTop, "menuMoveTop");
this.menuMoveTop.Name = "menuMoveTop";
this.menuMoveTop.Click += new System.EventHandler(this.menuMoveTop_Click);
//
// menuMoveUp
//
this.menuMoveUp.Name = "menuMoveUp";
resources.ApplyResources(this.menuMoveUp, "menuMoveUp");
this.menuMoveUp.Name = "menuMoveUp";
this.menuMoveUp.Click += new System.EventHandler(this.menuMoveUp_Click);
//
// menuMoveDown
//
this.menuMoveDown.Name = "menuMoveDown";
resources.ApplyResources(this.menuMoveDown, "menuMoveDown");
this.menuMoveDown.Name = "menuMoveDown";
this.menuMoveDown.Click += new System.EventHandler(this.menuMoveDown_Click);
//
// menuMoveBottom
//
this.menuMoveBottom.Name = "menuMoveBottom";
resources.ApplyResources(this.menuMoveBottom, "menuMoveBottom");
this.menuMoveBottom.Name = "menuMoveBottom";
this.menuMoveBottom.Click += new System.EventHandler(this.menuMoveBottom_Click);
//
// MenuItem1
//
resources.ApplyResources(this.MenuItem1, "MenuItem1");
this.MenuItem1.DropDown = this.cmsLv;
this.MenuItem1.Name = "MenuItem1";
resources.ApplyResources(this.MenuItem1, "MenuItem1");
//
// tabControl2
//
this.tabControl2.Controls.Add(this.tabPage2);
resources.ApplyResources(this.tabControl2, "tabControl2");
this.tabControl2.Controls.Add(this.tabPage2);
this.tabControl2.Name = "tabControl2";
this.tabControl2.SelectedIndex = 0;
//
// tabPage2
//
this.tabPage2.Controls.Add(this.lvRoutings);
resources.ApplyResources(this.tabPage2, "tabPage2");
this.tabPage2.Controls.Add(this.lvRoutings);
this.tabPage2.Name = "tabPage2";
this.tabPage2.UseVisualStyleBackColor = true;
//
// menuServer
//
resources.ApplyResources(this.menuServer, "menuServer");
this.menuServer.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.MenuItem1,
this.toolStripMenuItem1});
resources.ApplyResources(this.menuServer, "menuServer");
this.menuServer.Name = "menuServer";
//
// toolStripMenuItem1
//
resources.ApplyResources(this.toolStripMenuItem1, "toolStripMenuItem1");
this.toolStripMenuItem1.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.menuImportRulesFromFile,
this.menuImportRulesFromClipboard,
this.menuImportRulesFromUrl});
this.toolStripMenuItem1.Name = "toolStripMenuItem1";
resources.ApplyResources(this.toolStripMenuItem1, "toolStripMenuItem1");
//
// menuImportRulesFromFile
//
this.menuImportRulesFromFile.Name = "menuImportRulesFromFile";
resources.ApplyResources(this.menuImportRulesFromFile, "menuImportRulesFromFile");
this.menuImportRulesFromFile.Name = "menuImportRulesFromFile";
this.menuImportRulesFromFile.Click += new System.EventHandler(this.menuImportRulesFromFile_Click);
//
// menuImportRulesFromClipboard
//
this.menuImportRulesFromClipboard.Name = "menuImportRulesFromClipboard";
resources.ApplyResources(this.menuImportRulesFromClipboard, "menuImportRulesFromClipboard");
this.menuImportRulesFromClipboard.Name = "menuImportRulesFromClipboard";
this.menuImportRulesFromClipboard.Click += new System.EventHandler(this.menuImportRulesFromClipboard_Click);
//
// menuImportRulesFromUrl
//
this.menuImportRulesFromUrl.Name = "menuImportRulesFromUrl";
resources.ApplyResources(this.menuImportRulesFromUrl, "menuImportRulesFromUrl");
this.menuImportRulesFromUrl.Name = "menuImportRulesFromUrl";
this.menuImportRulesFromUrl.Click += new System.EventHandler(this.menuImportRulesFromUrl_Click);
//
// RoutingRuleSettingForm
@@ -319,5 +349,9 @@
private System.Windows.Forms.TextBox txtUrl;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.TextBox txtCustomIcon;
private System.Windows.Forms.Label label4;
private System.Windows.Forms.Button btnBrowse;
private System.Windows.Forms.Label label5;
}
}

View File

@@ -38,6 +38,7 @@ namespace v2rayN.Forms
txtRemarks.Text = routingItem.remarks ?? string.Empty;
txtUrl.Text = routingItem.url ?? string.Empty;
txtCustomIcon.Text = routingItem.customIcon ?? string.Empty;
InitRoutingsView();
RefreshRoutingsView();
@@ -57,9 +58,11 @@ namespace v2rayN.Forms
lvRoutings.Columns.Add("", 30);
lvRoutings.Columns.Add("outboundTag", 80);
lvRoutings.Columns.Add("port", 80);
lvRoutings.Columns.Add("protocol", 100);
lvRoutings.Columns.Add("protocol", 80);
lvRoutings.Columns.Add("inboundTag", 80);
lvRoutings.Columns.Add("domain", 160);
lvRoutings.Columns.Add("ip", 160);
lvRoutings.Columns.Add("ip", 160);
lvRoutings.Columns.Add("enable", 60);
lvRoutings.EndUpdate();
}
@@ -77,8 +80,10 @@ namespace v2rayN.Forms
Utils.AddSubItem(lvItem, "outboundTag", item.outboundTag);
Utils.AddSubItem(lvItem, "port", item.port);
Utils.AddSubItem(lvItem, "protocol", Utils.List2String(item.protocol));
Utils.AddSubItem(lvItem, "inboundTag", Utils.List2String(item.inboundTag));
Utils.AddSubItem(lvItem, "domain", Utils.List2String(item.domain));
Utils.AddSubItem(lvItem, "ip", Utils.List2String(item.ip));
Utils.AddSubItem(lvItem, "enable", item.enabled.ToString());
if (lvItem != null) lvRoutings.Items.Add(lvItem);
}
@@ -89,6 +94,7 @@ namespace v2rayN.Forms
{
routingItem.remarks = txtRemarks.Text.Trim();
routingItem.url = txtUrl.Text.Trim();
routingItem.customIcon = txtCustomIcon.Text.Trim();
if (ConfigHandler.AddRoutingItem(ref config, routingItem, EditIndex) == 0)
{
@@ -104,6 +110,14 @@ namespace v2rayN.Forms
{
this.DialogResult = DialogResult.Cancel;
}
private void btnBrowse_Click(object sender, EventArgs e)
{
OpenFileDialog openFileDialog1 = new OpenFileDialog();
openFileDialog1.Filter = "PNG|*.png";
openFileDialog1.ShowDialog();
txtCustomIcon.Text = openFileDialog1.FileName;
}
private void lvRoutings_DoubleClick(object sender, EventArgs e)
{
@@ -336,8 +350,9 @@ namespace v2rayN.Forms
return ConfigHandler.AddBatchRoutingRules(ref routingItem, clipboardData, blReplace);
}
#endregion
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -120,16 +120,34 @@
<data name="btnClose.Text" xml:space="preserve">
<value>取消(&amp;C)</value>
</data>
<data name="btnOK.Text" xml:space="preserve">
<value>确定(&amp;O)</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="panel2.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 613</value>
<value>0, 501</value>
</data>
<data name="panel2.Size" type="System.Drawing.Size, System.Drawing">
<value>785, 60</value>
</data>
<data name="btnOK.Text" xml:space="preserve">
<value>确定(&amp;O)</value>
</data>
<data name="panel1.Size" type="System.Drawing.Size, System.Drawing">
<value>785, 147</value>
</data>
<data name="btnBrowse.Location" type="System.Drawing.Point, System.Drawing">
<value>670, 104</value>
</data>
<data name="btnBrowse.Text" xml:space="preserve">
<value>浏览(&amp;B)</value>
</data>
<data name="txtCustomIcon.Location" type="System.Drawing.Point, System.Drawing">
<value>101, 105</value>
</data>
<data name="label4.Size" type="System.Drawing.Size, System.Drawing">
<value>65, 12</value>
</data>
<data name="label4.Text" xml:space="preserve">
<value>自定义图标</value>
</data>
<data name="label1.Size" type="System.Drawing.Size, System.Drawing">
<value>29, 12</value>
</data>
@@ -154,9 +172,6 @@
<data name="label2.Text" xml:space="preserve">
<value>别名</value>
</data>
<data name="panel1.Size" type="System.Drawing.Size, System.Drawing">
<value>785, 109</value>
</data>
<data name="menuAdd.Size" type="System.Drawing.Size, System.Drawing">
<value>196, 22</value>
</data>
@@ -235,19 +250,28 @@
</value>
</data>
<data name="lvRoutings.Size" type="System.Drawing.Size, System.Drawing">
<value>771, 447</value>
<value>771, 297</value>
</data>
<data name="tabControl2.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 172</value>
</data>
<data name="tabControl2.Size" type="System.Drawing.Size, System.Drawing">
<value>785, 329</value>
</data>
<data name="tabPage2.Size" type="System.Drawing.Size, System.Drawing">
<value>777, 453</value>
<value>777, 303</value>
</data>
<data name="tabPage2.Text" xml:space="preserve">
<value>规则列表</value>
</data>
<data name="tabControl2.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 134</value>
<data name="menuServer.Size" type="System.Drawing.Size, System.Drawing">
<value>785, 25</value>
</data>
<data name="tabControl2.Size" type="System.Drawing.Size, System.Drawing">
<value>785, 479</value>
<data name="toolStripMenuItem1.Size" type="System.Drawing.Size, System.Drawing">
<value>68, 21</value>
</data>
<data name="toolStripMenuItem1.Text" xml:space="preserve">
<value>导入规则</value>
</data>
<data name="menuImportRulesFromFile.Size" type="System.Drawing.Size, System.Drawing">
<value>189, 22</value>
@@ -267,17 +291,8 @@
<data name="menuImportRulesFromUrl.Text" xml:space="preserve">
<value>从订阅Url中导入规则</value>
</data>
<data name="toolStripMenuItem1.Size" type="System.Drawing.Size, System.Drawing">
<value>68, 21</value>
</data>
<data name="toolStripMenuItem1.Text" xml:space="preserve">
<value>导入规则</value>
</data>
<data name="menuServer.Size" type="System.Drawing.Size, System.Drawing">
<value>785, 25</value>
</data>
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
<value>785, 673</value>
<value>785, 561</value>
</data>
<data name="$this.Text" xml:space="preserve">
<value>规则集设置</value>

View File

@@ -35,6 +35,8 @@
this.labRoutingTips = new System.Windows.Forms.Label();
this.btnOK = new System.Windows.Forms.Button();
this.panel1 = new System.Windows.Forms.Panel();
this.cmbdomainMatcher = new System.Windows.Forms.ComboBox();
this.label6 = new System.Windows.Forms.Label();
this.chkenableRoutingAdvanced = new System.Windows.Forms.CheckBox();
this.linkLabelRoutingDoc = new System.Windows.Forms.LinkLabel();
this.cmbdomainStrategy = new System.Windows.Forms.ComboBox();
@@ -90,24 +92,24 @@
//
// btnClose
//
this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel;
resources.ApplyResources(this.btnClose, "btnClose");
this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.btnClose.Name = "btnClose";
this.btnClose.UseVisualStyleBackColor = true;
this.btnClose.Click += new System.EventHandler(this.btnClose_Click);
//
// panel2
//
resources.ApplyResources(this.panel2, "panel2");
this.panel2.Controls.Add(this.labRoutingTips);
this.panel2.Controls.Add(this.btnClose);
this.panel2.Controls.Add(this.btnOK);
resources.ApplyResources(this.panel2, "panel2");
this.panel2.Name = "panel2";
//
// labRoutingTips
//
this.labRoutingTips.ForeColor = System.Drawing.Color.Brown;
resources.ApplyResources(this.labRoutingTips, "labRoutingTips");
this.labRoutingTips.ForeColor = System.Drawing.Color.Brown;
this.labRoutingTips.Name = "labRoutingTips";
//
// btnOK
@@ -119,12 +121,29 @@
//
// panel1
//
resources.ApplyResources(this.panel1, "panel1");
this.panel1.Controls.Add(this.cmbdomainMatcher);
this.panel1.Controls.Add(this.label6);
this.panel1.Controls.Add(this.chkenableRoutingAdvanced);
this.panel1.Controls.Add(this.linkLabelRoutingDoc);
this.panel1.Controls.Add(this.cmbdomainStrategy);
resources.ApplyResources(this.panel1, "panel1");
this.panel1.Name = "panel1";
//
// cmbdomainMatcher
//
resources.ApplyResources(this.cmbdomainMatcher, "cmbdomainMatcher");
this.cmbdomainMatcher.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cmbdomainMatcher.FormattingEnabled = true;
this.cmbdomainMatcher.Items.AddRange(new object[] {
resources.GetString("cmbdomainMatcher.Items"),
resources.GetString("cmbdomainMatcher.Items1")});
this.cmbdomainMatcher.Name = "cmbdomainMatcher";
//
// label6
//
resources.ApplyResources(this.label6, "label6");
this.label6.Name = "label6";
//
// chkenableRoutingAdvanced
//
resources.ApplyResources(this.chkenableRoutingAdvanced, "chkenableRoutingAdvanced");
@@ -141,17 +160,18 @@
//
// cmbdomainStrategy
//
resources.ApplyResources(this.cmbdomainStrategy, "cmbdomainStrategy");
this.cmbdomainStrategy.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cmbdomainStrategy.FormattingEnabled = true;
this.cmbdomainStrategy.Items.AddRange(new object[] {
resources.GetString("cmbdomainStrategy.Items"),
resources.GetString("cmbdomainStrategy.Items1"),
resources.GetString("cmbdomainStrategy.Items2")});
resources.ApplyResources(this.cmbdomainStrategy, "cmbdomainStrategy");
this.cmbdomainStrategy.Name = "cmbdomainStrategy";
//
// cmsLv
//
resources.ApplyResources(this.cmsLv, "cmsLv");
this.cmsLv.ImageScalingSize = new System.Drawing.Size(20, 20);
this.cmsLv.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.menuAdd,
@@ -160,88 +180,87 @@
this.menuSetDefaultRouting});
this.cmsLv.Name = "cmsLv";
this.cmsLv.OwnerItem = this.MenuItemAdvanced;
resources.ApplyResources(this.cmsLv, "cmsLv");
//
// menuAdd
//
this.menuAdd.Name = "menuAdd";
resources.ApplyResources(this.menuAdd, "menuAdd");
this.menuAdd.Name = "menuAdd";
this.menuAdd.Click += new System.EventHandler(this.menuAdd_Click);
//
// menuRemove
//
this.menuRemove.Name = "menuRemove";
resources.ApplyResources(this.menuRemove, "menuRemove");
this.menuRemove.Name = "menuRemove";
this.menuRemove.Click += new System.EventHandler(this.menuRemove_Click);
//
// menuSelectAll
//
this.menuSelectAll.Name = "menuSelectAll";
resources.ApplyResources(this.menuSelectAll, "menuSelectAll");
this.menuSelectAll.Name = "menuSelectAll";
this.menuSelectAll.Click += new System.EventHandler(this.menuSelectAll_Click);
//
// menuSetDefaultRouting
//
this.menuSetDefaultRouting.Name = "menuSetDefaultRouting";
resources.ApplyResources(this.menuSetDefaultRouting, "menuSetDefaultRouting");
this.menuSetDefaultRouting.Name = "menuSetDefaultRouting";
this.menuSetDefaultRouting.Click += new System.EventHandler(this.menuSetDefaultRouting_Click);
//
// MenuItemAdvanced
//
resources.ApplyResources(this.MenuItemAdvanced, "MenuItemAdvanced");
this.MenuItemAdvanced.DropDown = this.cmsLv;
this.MenuItemAdvanced.Name = "MenuItemAdvanced";
resources.ApplyResources(this.MenuItemAdvanced, "MenuItemAdvanced");
//
// menuServer
//
resources.ApplyResources(this.menuServer, "menuServer");
this.menuServer.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.MenuItemBasic,
this.MenuItemAdvanced});
resources.ApplyResources(this.menuServer, "menuServer");
this.menuServer.Name = "menuServer";
//
// MenuItemBasic
//
resources.ApplyResources(this.MenuItemBasic, "MenuItemBasic");
this.MenuItemBasic.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.menuImportBasicRules});
this.MenuItemBasic.Name = "MenuItemBasic";
resources.ApplyResources(this.MenuItemBasic, "MenuItemBasic");
//
// menuImportBasicRules
//
this.menuImportBasicRules.Name = "menuImportBasicRules";
resources.ApplyResources(this.menuImportBasicRules, "menuImportBasicRules");
this.menuImportBasicRules.Name = "menuImportBasicRules";
this.menuImportBasicRules.Click += new System.EventHandler(this.menuImportBasicRules_Click);
//
// tabNormal
//
resources.ApplyResources(this.tabNormal, "tabNormal");
this.tabNormal.Controls.Add(this.tabPageProxy);
this.tabNormal.Controls.Add(this.tabPageDirect);
this.tabNormal.Controls.Add(this.tabPageBlock);
this.tabNormal.Controls.Add(this.tabPageRuleList);
resources.ApplyResources(this.tabNormal, "tabNormal");
this.tabNormal.Name = "tabNormal";
this.tabNormal.SelectedIndex = 0;
this.tabNormal.Selecting += new System.Windows.Forms.TabControlCancelEventHandler(this.tabNormal_Selecting);
//
// tabPageProxy
//
this.tabPageProxy.Controls.Add(this.panel5);
resources.ApplyResources(this.tabPageProxy, "tabPageProxy");
this.tabPageProxy.Controls.Add(this.panel5);
this.tabPageProxy.Name = "tabPageProxy";
this.tabPageProxy.UseVisualStyleBackColor = true;
//
// panel5
//
resources.ApplyResources(this.panel5, "panel5");
this.panel5.Controls.Add(this.groupBox5);
this.panel5.Controls.Add(this.groupBox6);
resources.ApplyResources(this.panel5, "panel5");
this.panel5.Name = "panel5";
//
// groupBox5
//
this.groupBox5.Controls.Add(this.txtProxyIp);
resources.ApplyResources(this.groupBox5, "groupBox5");
this.groupBox5.Controls.Add(this.txtProxyIp);
this.groupBox5.Name = "groupBox5";
this.groupBox5.TabStop = false;
//
@@ -252,8 +271,8 @@
//
// groupBox6
//
this.groupBox6.Controls.Add(this.txtProxyDomain);
resources.ApplyResources(this.groupBox6, "groupBox6");
this.groupBox6.Controls.Add(this.txtProxyDomain);
this.groupBox6.Name = "groupBox6";
this.groupBox6.TabStop = false;
//
@@ -264,22 +283,22 @@
//
// tabPageDirect
//
this.tabPageDirect.Controls.Add(this.panel4);
resources.ApplyResources(this.tabPageDirect, "tabPageDirect");
this.tabPageDirect.Controls.Add(this.panel4);
this.tabPageDirect.Name = "tabPageDirect";
this.tabPageDirect.UseVisualStyleBackColor = true;
//
// panel4
//
resources.ApplyResources(this.panel4, "panel4");
this.panel4.Controls.Add(this.groupBox3);
this.panel4.Controls.Add(this.groupBox4);
resources.ApplyResources(this.panel4, "panel4");
this.panel4.Name = "panel4";
//
// groupBox3
//
this.groupBox3.Controls.Add(this.txtDirectIp);
resources.ApplyResources(this.groupBox3, "groupBox3");
this.groupBox3.Controls.Add(this.txtDirectIp);
this.groupBox3.Name = "groupBox3";
this.groupBox3.TabStop = false;
//
@@ -290,8 +309,8 @@
//
// groupBox4
//
this.groupBox4.Controls.Add(this.txtDirectDomain);
resources.ApplyResources(this.groupBox4, "groupBox4");
this.groupBox4.Controls.Add(this.txtDirectDomain);
this.groupBox4.Name = "groupBox4";
this.groupBox4.TabStop = false;
//
@@ -302,22 +321,22 @@
//
// tabPageBlock
//
this.tabPageBlock.Controls.Add(this.panel3);
resources.ApplyResources(this.tabPageBlock, "tabPageBlock");
this.tabPageBlock.Controls.Add(this.panel3);
this.tabPageBlock.Name = "tabPageBlock";
this.tabPageBlock.UseVisualStyleBackColor = true;
//
// panel3
//
resources.ApplyResources(this.panel3, "panel3");
this.panel3.Controls.Add(this.groupBox2);
this.panel3.Controls.Add(this.groupBox1);
resources.ApplyResources(this.panel3, "panel3");
this.panel3.Name = "panel3";
//
// groupBox2
//
this.groupBox2.Controls.Add(this.txtBlockIp);
resources.ApplyResources(this.groupBox2, "groupBox2");
this.groupBox2.Controls.Add(this.txtBlockIp);
this.groupBox2.Name = "groupBox2";
this.groupBox2.TabStop = false;
//
@@ -328,8 +347,8 @@
//
// groupBox1
//
this.groupBox1.Controls.Add(this.txtBlockDomain);
resources.ApplyResources(this.groupBox1, "groupBox1");
this.groupBox1.Controls.Add(this.txtBlockDomain);
this.groupBox1.Name = "groupBox1";
this.groupBox1.TabStop = false;
//
@@ -340,15 +359,15 @@
//
// tabPageRuleList
//
this.tabPageRuleList.Controls.Add(this.lvRoutings);
resources.ApplyResources(this.tabPageRuleList, "tabPageRuleList");
this.tabPageRuleList.Controls.Add(this.lvRoutings);
this.tabPageRuleList.Name = "tabPageRuleList";
this.tabPageRuleList.UseVisualStyleBackColor = true;
//
// lvRoutings
//
this.lvRoutings.ContextMenuStrip = this.cmsLv;
resources.ApplyResources(this.lvRoutings, "lvRoutings");
this.lvRoutings.ContextMenuStrip = this.cmsLv;
this.lvRoutings.FullRowSelect = true;
this.lvRoutings.GridLines = true;
this.lvRoutings.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable;
@@ -443,5 +462,7 @@
private System.Windows.Forms.CheckBox chkenableRoutingAdvanced;
private System.Windows.Forms.ToolStripMenuItem MenuItemBasic;
private System.Windows.Forms.ToolStripMenuItem menuImportBasicRules;
private System.Windows.Forms.ComboBox cmbdomainMatcher;
private System.Windows.Forms.Label label6;
}
}

View File

@@ -22,6 +22,7 @@ namespace v2rayN.Forms
cmbdomainStrategy.Text = config.domainStrategy;
chkenableRoutingAdvanced.Checked = config.enableRoutingAdvanced;
cmbdomainMatcher.Text = config.domainMatcher;
if (config.routings == null)
{
@@ -50,6 +51,8 @@ namespace v2rayN.Forms
{
config.domainStrategy = cmbdomainStrategy.Text;
config.enableRoutingAdvanced = chkenableRoutingAdvanced.Checked;
config.domainMatcher = cmbdomainMatcher.Text;
EndBindingLockedData();
if (ConfigHandler.SaveRouting(ref config) == 0)
@@ -144,6 +147,7 @@ namespace v2rayN.Forms
lvRoutings.Columns.Add(UIRes.I18N("LvAlias"), 200);
lvRoutings.Columns.Add(UIRes.I18N("LvCount"), 60);
lvRoutings.Columns.Add(UIRes.I18N("LvUrl"), 240);
lvRoutings.Columns.Add(UIRes.I18N("LvCustomIcon"), 240);
lvRoutings.EndUpdate();
}
@@ -171,6 +175,7 @@ namespace v2rayN.Forms
Utils.AddSubItem(lvItem, "remarks", item.remarks);
Utils.AddSubItem(lvItem, "count", item.rules.Count.ToString());
Utils.AddSubItem(lvItem, "url", item.url);
Utils.AddSubItem(lvItem, "customIcon", item.customIcon);
if (lvItem != null) lvRoutings.Items.Add(lvItem);
}
@@ -295,6 +300,8 @@ namespace v2rayN.Forms
txtDirectIp.Text = "geoip:private,geoip:cn";
txtBlockDomain.Text = "geosite:category-ads-all";
UI.Show(UIRes.I18N("OperationSuccess"));
}
#endregion

File diff suppressed because it is too large Load Diff

View File

@@ -124,12 +124,6 @@
<data name="btnClose.Text" xml:space="preserve">
<value>取消(&amp;C)</value>
</data>
<data name="panel2.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 545</value>
</data>
<data name="panel2.Size" type="System.Drawing.Size, System.Drawing">
<value>817, 60</value>
</data>
<data name="labRoutingTips.Size" type="System.Drawing.Size, System.Drawing">
<value>518, 16</value>
</data>
@@ -142,8 +136,17 @@
<data name="btnOK.Text" xml:space="preserve">
<value>确定(&amp;O)</value>
</data>
<data name="panel1.Size" type="System.Drawing.Size, System.Drawing">
<value>817, 51</value>
<data name="panel2.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 545</value>
</data>
<data name="panel2.Size" type="System.Drawing.Size, System.Drawing">
<value>817, 60</value>
</data>
<data name="label6.Size" type="System.Drawing.Size, System.Drawing">
<value>77, 12</value>
</data>
<data name="label6.Text" xml:space="preserve">
<value>域名匹配算法</value>
</data>
<data name="chkenableRoutingAdvanced.Size" type="System.Drawing.Size, System.Drawing">
<value>120, 16</value>
@@ -157,8 +160,8 @@
<data name="linkLabelRoutingDoc.Text" xml:space="preserve">
<value>域名解析策略</value>
</data>
<data name="cmsLv.Size" type="System.Drawing.Size, System.Drawing">
<value>149, 92</value>
<data name="panel1.Size" type="System.Drawing.Size, System.Drawing">
<value>817, 51</value>
</data>
<data name="menuAdd.Size" type="System.Drawing.Size, System.Drawing">
<value>148, 22</value>
@@ -190,8 +193,14 @@
<data name="MenuItemAdvanced.Text" xml:space="preserve">
<value>高级功能</value>
</data>
<data name="menuServer.Size" type="System.Drawing.Size, System.Drawing">
<value>817, 25</value>
<data name="cmsLv.Size" type="System.Drawing.Size, System.Drawing">
<value>149, 92</value>
</data>
<data name="menuImportBasicRules.Size" type="System.Drawing.Size, System.Drawing">
<value>172, 22</value>
</data>
<data name="menuImportBasicRules.Text" xml:space="preserve">
<value>一键导入基础规则</value>
</data>
<data name="MenuItemBasic.Size" type="System.Drawing.Size, System.Drawing">
<value>68, 21</value>
@@ -199,14 +208,23 @@
<data name="MenuItemBasic.Text" xml:space="preserve">
<value>基础功能</value>
</data>
<data name="menuImportBasicRules.Size" type="System.Drawing.Size, System.Drawing">
<value>180, 22</value>
<data name="menuServer.Size" type="System.Drawing.Size, System.Drawing">
<value>817, 25</value>
</data>
<data name="menuImportBasicRules.Text" xml:space="preserve">
<value>一键导入基础规则</value>
<data name="txtProxyIp.Size" type="System.Drawing.Size, System.Drawing">
<value>405, 417</value>
</data>
<data name="tabNormal.Size" type="System.Drawing.Size, System.Drawing">
<value>817, 469</value>
<data name="groupBox5.Size" type="System.Drawing.Size, System.Drawing">
<value>411, 437</value>
</data>
<data name="txtProxyDomain.Size" type="System.Drawing.Size, System.Drawing">
<value>386, 417</value>
</data>
<data name="groupBox6.Size" type="System.Drawing.Size, System.Drawing">
<value>392, 437</value>
</data>
<data name="panel5.Size" type="System.Drawing.Size, System.Drawing">
<value>803, 437</value>
</data>
<data name="tabPageProxy.Size" type="System.Drawing.Size, System.Drawing">
<value>809, 443</value>
@@ -214,20 +232,20 @@
<data name="tabPageProxy.Text" xml:space="preserve">
<value> 1.代理的Domain或IP </value>
</data>
<data name="panel5.Size" type="System.Drawing.Size, System.Drawing">
<value>803, 437</value>
</data>
<data name="groupBox5.Size" type="System.Drawing.Size, System.Drawing">
<value>411, 437</value>
</data>
<data name="txtProxyIp.Size" type="System.Drawing.Size, System.Drawing">
<data name="txtDirectIp.Size" type="System.Drawing.Size, System.Drawing">
<value>405, 417</value>
</data>
<data name="groupBox6.Size" type="System.Drawing.Size, System.Drawing">
<data name="groupBox3.Size" type="System.Drawing.Size, System.Drawing">
<value>411, 437</value>
</data>
<data name="txtDirectDomain.Size" type="System.Drawing.Size, System.Drawing">
<value>386, 417</value>
</data>
<data name="groupBox4.Size" type="System.Drawing.Size, System.Drawing">
<value>392, 437</value>
</data>
<data name="txtProxyDomain.Size" type="System.Drawing.Size, System.Drawing">
<value>386, 417</value>
<data name="panel4.Size" type="System.Drawing.Size, System.Drawing">
<value>803, 437</value>
</data>
<data name="tabPageDirect.Size" type="System.Drawing.Size, System.Drawing">
<value>809, 443</value>
@@ -235,20 +253,20 @@
<data name="tabPageDirect.Text" xml:space="preserve">
<value> 2.直连的Domain或IP </value>
</data>
<data name="panel4.Size" type="System.Drawing.Size, System.Drawing">
<value>803, 437</value>
</data>
<data name="groupBox3.Size" type="System.Drawing.Size, System.Drawing">
<value>411, 437</value>
</data>
<data name="txtDirectIp.Size" type="System.Drawing.Size, System.Drawing">
<data name="txtBlockIp.Size" type="System.Drawing.Size, System.Drawing">
<value>405, 417</value>
</data>
<data name="groupBox4.Size" type="System.Drawing.Size, System.Drawing">
<data name="groupBox2.Size" type="System.Drawing.Size, System.Drawing">
<value>411, 437</value>
</data>
<data name="txtBlockDomain.Size" type="System.Drawing.Size, System.Drawing">
<value>386, 417</value>
</data>
<data name="groupBox1.Size" type="System.Drawing.Size, System.Drawing">
<value>392, 437</value>
</data>
<data name="txtDirectDomain.Size" type="System.Drawing.Size, System.Drawing">
<value>386, 417</value>
<data name="panel3.Size" type="System.Drawing.Size, System.Drawing">
<value>803, 437</value>
</data>
<data name="tabPageBlock.Size" type="System.Drawing.Size, System.Drawing">
<value>809, 443</value>
@@ -256,27 +274,6 @@
<data name="tabPageBlock.Text" xml:space="preserve">
<value> 3.阻止的Domain或IP </value>
</data>
<data name="panel3.Size" type="System.Drawing.Size, System.Drawing">
<value>803, 437</value>
</data>
<data name="groupBox2.Size" type="System.Drawing.Size, System.Drawing">
<value>411, 437</value>
</data>
<data name="txtBlockIp.Size" type="System.Drawing.Size, System.Drawing">
<value>405, 417</value>
</data>
<data name="groupBox1.Size" type="System.Drawing.Size, System.Drawing">
<value>392, 437</value>
</data>
<data name="txtBlockDomain.Size" type="System.Drawing.Size, System.Drawing">
<value>386, 417</value>
</data>
<data name="tabPageRuleList.Size" type="System.Drawing.Size, System.Drawing">
<value>809, 443</value>
</data>
<data name="tabPageRuleList.Text" xml:space="preserve">
<value> 预定义规则集列表</value>
</data>
<data name="lvRoutings.Items" mimetype="application/x-microsoft.net.object.binary.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
@@ -297,6 +294,15 @@
<data name="lvRoutings.Size" type="System.Drawing.Size, System.Drawing">
<value>803, 437</value>
</data>
<data name="tabPageRuleList.Size" type="System.Drawing.Size, System.Drawing">
<value>809, 443</value>
</data>
<data name="tabPageRuleList.Text" xml:space="preserve">
<value> 预定义规则集列表</value>
</data>
<data name="tabNormal.Size" type="System.Drawing.Size, System.Drawing">
<value>817, 469</value>
</data>
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
<value>817, 605</value>
</data>

View File

@@ -0,0 +1,250 @@
namespace v2rayN.Forms
{
partial class ServerTransportControl
{
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
/// <param name="disposing">如果应释放托管资源,为 true否则为 false。</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region
/// <summary>
/// 设计器支持所需的方法 - 不要修改
/// 使用代码编辑器修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ServerTransportControl));
this.gbTransport = new System.Windows.Forms.GroupBox();
this.panTlsMore = new System.Windows.Forms.Panel();
this.clbAlpn = new System.Windows.Forms.CheckedListBox();
this.label1 = new System.Windows.Forms.Label();
this.txtSNI = new System.Windows.Forms.TextBox();
this.labSNI = new System.Windows.Forms.Label();
this.labAllowInsecure = new System.Windows.Forms.Label();
this.cmbAllowInsecure = new System.Windows.Forms.ComboBox();
this.tipNetwork = new System.Windows.Forms.Label();
this.txtPath = new System.Windows.Forms.TextBox();
this.cmbNetwork = new System.Windows.Forms.ComboBox();
this.labNetwork = new System.Windows.Forms.Label();
this.labPath = new System.Windows.Forms.Label();
this.tipPath = new System.Windows.Forms.Label();
this.tipRequestHost = new System.Windows.Forms.Label();
this.labStreamSecurity = new System.Windows.Forms.Label();
this.cmbStreamSecurity = new System.Windows.Forms.ComboBox();
this.tipHeaderType = new System.Windows.Forms.Label();
this.txtRequestHost = new System.Windows.Forms.TextBox();
this.labHeaderType = new System.Windows.Forms.Label();
this.labRequestHost = new System.Windows.Forms.Label();
this.cmbHeaderType = new System.Windows.Forms.ComboBox();
this.gbTransport.SuspendLayout();
this.panTlsMore.SuspendLayout();
this.SuspendLayout();
//
// gbTransport
//
this.gbTransport.Controls.Add(this.panTlsMore);
this.gbTransport.Controls.Add(this.tipNetwork);
this.gbTransport.Controls.Add(this.txtPath);
this.gbTransport.Controls.Add(this.cmbNetwork);
this.gbTransport.Controls.Add(this.labNetwork);
this.gbTransport.Controls.Add(this.labPath);
this.gbTransport.Controls.Add(this.tipPath);
this.gbTransport.Controls.Add(this.tipRequestHost);
this.gbTransport.Controls.Add(this.labStreamSecurity);
this.gbTransport.Controls.Add(this.cmbStreamSecurity);
this.gbTransport.Controls.Add(this.tipHeaderType);
this.gbTransport.Controls.Add(this.txtRequestHost);
this.gbTransport.Controls.Add(this.labHeaderType);
this.gbTransport.Controls.Add(this.labRequestHost);
this.gbTransport.Controls.Add(this.cmbHeaderType);
resources.ApplyResources(this.gbTransport, "gbTransport");
this.gbTransport.Name = "gbTransport";
this.gbTransport.TabStop = false;
//
// panTlsMore
//
this.panTlsMore.Controls.Add(this.clbAlpn);
this.panTlsMore.Controls.Add(this.label1);
this.panTlsMore.Controls.Add(this.txtSNI);
this.panTlsMore.Controls.Add(this.labSNI);
this.panTlsMore.Controls.Add(this.labAllowInsecure);
this.panTlsMore.Controls.Add(this.cmbAllowInsecure);
resources.ApplyResources(this.panTlsMore, "panTlsMore");
this.panTlsMore.Name = "panTlsMore";
//
// clbAlpn
//
this.clbAlpn.CheckOnClick = true;
resources.ApplyResources(this.clbAlpn, "clbAlpn");
this.clbAlpn.FormattingEnabled = true;
this.clbAlpn.Items.AddRange(new object[] {
resources.GetString("clbAlpn.Items"),
resources.GetString("clbAlpn.Items1")});
this.clbAlpn.MultiColumn = true;
this.clbAlpn.Name = "clbAlpn";
//
// label1
//
resources.ApplyResources(this.label1, "label1");
this.label1.Name = "label1";
//
// txtSNI
//
resources.ApplyResources(this.txtSNI, "txtSNI");
this.txtSNI.Name = "txtSNI";
//
// labSNI
//
resources.ApplyResources(this.labSNI, "labSNI");
this.labSNI.Name = "labSNI";
//
// labAllowInsecure
//
resources.ApplyResources(this.labAllowInsecure, "labAllowInsecure");
this.labAllowInsecure.Name = "labAllowInsecure";
//
// cmbAllowInsecure
//
this.cmbAllowInsecure.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cmbAllowInsecure.FormattingEnabled = true;
this.cmbAllowInsecure.Items.AddRange(new object[] {
resources.GetString("cmbAllowInsecure.Items"),
resources.GetString("cmbAllowInsecure.Items1"),
resources.GetString("cmbAllowInsecure.Items2")});
resources.ApplyResources(this.cmbAllowInsecure, "cmbAllowInsecure");
this.cmbAllowInsecure.Name = "cmbAllowInsecure";
//
// tipNetwork
//
resources.ApplyResources(this.tipNetwork, "tipNetwork");
this.tipNetwork.Name = "tipNetwork";
//
// txtPath
//
resources.ApplyResources(this.txtPath, "txtPath");
this.txtPath.Name = "txtPath";
//
// cmbNetwork
//
this.cmbNetwork.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cmbNetwork.FormattingEnabled = true;
resources.ApplyResources(this.cmbNetwork, "cmbNetwork");
this.cmbNetwork.Name = "cmbNetwork";
this.cmbNetwork.SelectedIndexChanged += new System.EventHandler(this.cmbNetwork_SelectedIndexChanged);
//
// labNetwork
//
resources.ApplyResources(this.labNetwork, "labNetwork");
this.labNetwork.Name = "labNetwork";
//
// labPath
//
resources.ApplyResources(this.labPath, "labPath");
this.labPath.Name = "labPath";
//
// tipPath
//
resources.ApplyResources(this.tipPath, "tipPath");
this.tipPath.Name = "tipPath";
//
// tipRequestHost
//
resources.ApplyResources(this.tipRequestHost, "tipRequestHost");
this.tipRequestHost.Name = "tipRequestHost";
//
// labStreamSecurity
//
resources.ApplyResources(this.labStreamSecurity, "labStreamSecurity");
this.labStreamSecurity.Name = "labStreamSecurity";
//
// cmbStreamSecurity
//
this.cmbStreamSecurity.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cmbStreamSecurity.FormattingEnabled = true;
resources.ApplyResources(this.cmbStreamSecurity, "cmbStreamSecurity");
this.cmbStreamSecurity.Name = "cmbStreamSecurity";
this.cmbStreamSecurity.SelectedIndexChanged += new System.EventHandler(this.cmbStreamSecurity_SelectedIndexChanged);
//
// tipHeaderType
//
resources.ApplyResources(this.tipHeaderType, "tipHeaderType");
this.tipHeaderType.Name = "tipHeaderType";
//
// txtRequestHost
//
resources.ApplyResources(this.txtRequestHost, "txtRequestHost");
this.txtRequestHost.Name = "txtRequestHost";
//
// labHeaderType
//
resources.ApplyResources(this.labHeaderType, "labHeaderType");
this.labHeaderType.Name = "labHeaderType";
//
// labRequestHost
//
resources.ApplyResources(this.labRequestHost, "labRequestHost");
this.labRequestHost.Name = "labRequestHost";
//
// cmbHeaderType
//
this.cmbHeaderType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cmbHeaderType.FormattingEnabled = true;
resources.ApplyResources(this.cmbHeaderType, "cmbHeaderType");
this.cmbHeaderType.Name = "cmbHeaderType";
//
// ServerTransportControl
//
resources.ApplyResources(this, "$this");
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.gbTransport);
this.Name = "ServerTransportControl";
this.Load += new System.EventHandler(this.ServerTransportControl_Load);
this.gbTransport.ResumeLayout(false);
this.gbTransport.PerformLayout();
this.panTlsMore.ResumeLayout(false);
this.panTlsMore.PerformLayout();
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.GroupBox gbTransport;
private System.Windows.Forms.Panel panTlsMore;
private System.Windows.Forms.TextBox txtSNI;
private System.Windows.Forms.Label labSNI;
private System.Windows.Forms.Label labAllowInsecure;
private System.Windows.Forms.ComboBox cmbAllowInsecure;
private System.Windows.Forms.Label tipNetwork;
private System.Windows.Forms.TextBox txtPath;
private System.Windows.Forms.ComboBox cmbNetwork;
private System.Windows.Forms.Label labNetwork;
private System.Windows.Forms.Label labPath;
private System.Windows.Forms.Label tipPath;
private System.Windows.Forms.Label tipRequestHost;
private System.Windows.Forms.Label labStreamSecurity;
private System.Windows.Forms.ComboBox cmbStreamSecurity;
private System.Windows.Forms.Label tipHeaderType;
private System.Windows.Forms.TextBox txtRequestHost;
private System.Windows.Forms.Label labHeaderType;
private System.Windows.Forms.Label labRequestHost;
private System.Windows.Forms.ComboBox cmbHeaderType;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.CheckedListBox clbAlpn;
}
}

View File

@@ -0,0 +1,204 @@
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using v2rayN.Mode;
namespace v2rayN.Forms
{
public partial class ServerTransportControl : UserControl
{
public bool AllowXtls { get; set; }
private VmessItem vmessItem = null;
public ServerTransportControl()
{
InitializeComponent();
}
private void ServerTransportControl_Load(object sender, EventArgs e)
{
}
private void Init(VmessItem item)
{
vmessItem = item;
cmbNetwork.Items.AddRange(Global.networks.ToArray());
cmbStreamSecurity.Items.Clear();
cmbStreamSecurity.Items.Add(string.Empty);
cmbStreamSecurity.Items.Add(Global.StreamSecurity);
if (AllowXtls)
{
cmbStreamSecurity.Items.Add(Global.StreamSecurityX);
}
}
public void BindingServer(VmessItem item)
{
Init(item);
cmbNetwork.Text = vmessItem.network;
cmbHeaderType.Text = vmessItem.headerType;
txtRequestHost.Text = vmessItem.requestHost;
txtPath.Text = vmessItem.path;
cmbStreamSecurity.Text = vmessItem.streamSecurity;
cmbAllowInsecure.Text = vmessItem.allowInsecure;
txtSNI.Text = vmessItem.sni;
if (vmessItem.alpn != null)
{
for (int i = 0; i < clbAlpn.Items.Count; i++)
{
if (vmessItem.alpn.Contains(clbAlpn.Items[i].ToString()))
{
clbAlpn.SetItemChecked(i, true);
}
}
}
}
public void ClearServer(VmessItem item)
{
Init(item);
cmbNetwork.Text = Global.DefaultNetwork;
cmbHeaderType.Text = Global.None;
txtRequestHost.Text = "";
cmbStreamSecurity.Text = "";
cmbAllowInsecure.Text = "";
txtPath.Text = "";
txtSNI.Text = "";
for (int i = 0; i < clbAlpn.Items.Count; i++)
{
clbAlpn.SetItemChecked(i, false);
}
}
public void EndBindingServer()
{
string network = cmbNetwork.Text;
string headerType = cmbHeaderType.Text;
string requestHost = txtRequestHost.Text;
string path = txtPath.Text;
string streamSecurity = cmbStreamSecurity.Text;
string allowInsecure = cmbAllowInsecure.Text;
string sni = txtSNI.Text;
vmessItem.network = network;
vmessItem.headerType = headerType;
vmessItem.requestHost = requestHost.Replace(" ", "");
vmessItem.path = path.Replace(" ", "");
vmessItem.streamSecurity = streamSecurity;
vmessItem.allowInsecure = allowInsecure;
vmessItem.sni = sni;
var alpn = new List<string>();
for (int i = 0; i < clbAlpn.Items.Count; i++)
{
if (clbAlpn.GetItemChecked(i))
{
alpn.Add(clbAlpn.Items[i].ToString());
}
}
vmessItem.alpn = alpn;
}
private void cmbNetwork_SelectedIndexChanged(object sender, EventArgs e)
{
SetHeaderType();
SetTips();
}
private void SetHeaderType()
{
cmbHeaderType.Items.Clear();
string network = cmbNetwork.Text;
if (Utils.IsNullOrEmpty(network))
{
cmbHeaderType.Items.Add(Global.None);
return;
}
if (network.Equals(Global.DefaultNetwork))
{
cmbHeaderType.Items.Add(Global.None);
cmbHeaderType.Items.Add(Global.TcpHeaderHttp);
}
else if (network.Equals("kcp") || network.Equals("quic"))
{
cmbHeaderType.Items.Add(Global.None);
cmbHeaderType.Items.AddRange(Global.kcpHeaderTypes.ToArray());
}
else if (network.Equals("grpc"))
{
cmbHeaderType.Items.Add(Global.GrpcgunMode);
cmbHeaderType.Items.Add(Global.GrpcmultiMode);
}
else
{
cmbHeaderType.Items.Add(Global.None);
}
cmbHeaderType.SelectedIndex = 0;
}
private void SetTips()
{
string network = cmbNetwork.Text;
if (Utils.IsNullOrEmpty(network))
{
network = Global.DefaultNetwork;
}
labHeaderType.Visible = true;
tipRequestHost.Text =
tipPath.Text =
tipHeaderType.Text = string.Empty;
if (network.Equals(Global.DefaultNetwork))
{
tipRequestHost.Text = UIRes.I18N("TransportRequestHostTip1");
tipHeaderType.Text = UIRes.I18N("TransportHeaderTypeTip1");
}
else if (network.Equals("kcp"))
{
tipHeaderType.Text = UIRes.I18N("TransportHeaderTypeTip2");
tipPath.Text = UIRes.I18N("TransportPathTip5");
}
else if (network.Equals("ws"))
{
tipRequestHost.Text = UIRes.I18N("TransportRequestHostTip2");
tipPath.Text = UIRes.I18N("TransportPathTip1");
}
else if (network.Equals("h2"))
{
tipRequestHost.Text = UIRes.I18N("TransportRequestHostTip3");
tipPath.Text = UIRes.I18N("TransportPathTip2");
}
else if (network.Equals("quic"))
{
tipRequestHost.Text = UIRes.I18N("TransportRequestHostTip4");
tipPath.Text = UIRes.I18N("TransportPathTip3");
tipHeaderType.Text = UIRes.I18N("TransportHeaderTypeTip3");
}
else if (network.Equals("grpc"))
{
tipPath.Text = UIRes.I18N("TransportPathTip4");
tipHeaderType.Text = UIRes.I18N("TransportHeaderTypeTip4");
labHeaderType.Visible = false;
}
}
private void cmbStreamSecurity_SelectedIndexChanged(object sender, EventArgs e)
{
string security = cmbStreamSecurity.Text;
if (Utils.IsNullOrEmpty(security))
{
panTlsMore.Hide();
}
else
{
panTlsMore.Show();
}
}
}
}

View File

@@ -0,0 +1,738 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="clbAlpn.ColumnWidth" type="System.Int32, mscorlib">
<value>70</value>
</data>
<data name="clbAlpn.Items" xml:space="preserve">
<value>h2</value>
</data>
<data name="clbAlpn.Items1" xml:space="preserve">
<value>http/1.1</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="clbAlpn.Location" type="System.Drawing.Point, System.Drawing">
<value>313, 7</value>
</data>
<data name="clbAlpn.Size" type="System.Drawing.Size, System.Drawing">
<value>172, 20</value>
</data>
<data name="clbAlpn.TabIndex" type="System.Int32, mscorlib">
<value>44</value>
</data>
<data name="&gt;&gt;clbAlpn.Name" xml:space="preserve">
<value>clbAlpn</value>
</data>
<data name="&gt;&gt;clbAlpn.Type" xml:space="preserve">
<value>System.Windows.Forms.CheckedListBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;clbAlpn.Parent" xml:space="preserve">
<value>panTlsMore</value>
</data>
<data name="&gt;&gt;clbAlpn.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="label1.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="label1.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="label1.Location" type="System.Drawing.Point, System.Drawing">
<value>241, 11</value>
</data>
<data name="label1.Size" type="System.Drawing.Size, System.Drawing">
<value>29, 12</value>
</data>
<data name="label1.TabIndex" type="System.Int32, mscorlib">
<value>43</value>
</data>
<data name="label1.Text" xml:space="preserve">
<value>alpn</value>
</data>
<data name="&gt;&gt;label1.Name" xml:space="preserve">
<value>label1</value>
</data>
<data name="&gt;&gt;label1.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;label1.Parent" xml:space="preserve">
<value>panTlsMore</value>
</data>
<data name="&gt;&gt;label1.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="txtSNI.Location" type="System.Drawing.Point, System.Drawing">
<value>100, 39</value>
</data>
<data name="txtSNI.Size" type="System.Drawing.Size, System.Drawing">
<value>385, 21</value>
</data>
<data name="txtSNI.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="&gt;&gt;txtSNI.Name" xml:space="preserve">
<value>txtSNI</value>
</data>
<data name="&gt;&gt;txtSNI.Type" xml:space="preserve">
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;txtSNI.Parent" xml:space="preserve">
<value>panTlsMore</value>
</data>
<data name="&gt;&gt;txtSNI.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="labSNI.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="labSNI.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="labSNI.Location" type="System.Drawing.Point, System.Drawing">
<value>12, 43</value>
</data>
<data name="labSNI.Size" type="System.Drawing.Size, System.Drawing">
<value>23, 12</value>
</data>
<data name="labSNI.TabIndex" type="System.Int32, mscorlib">
<value>32</value>
</data>
<data name="labSNI.Text" xml:space="preserve">
<value>SNI</value>
</data>
<data name="&gt;&gt;labSNI.Name" xml:space="preserve">
<value>labSNI</value>
</data>
<data name="&gt;&gt;labSNI.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;labSNI.Parent" xml:space="preserve">
<value>panTlsMore</value>
</data>
<data name="&gt;&gt;labSNI.ZOrder" xml:space="preserve">
<value>3</value>
</data>
<data name="labAllowInsecure.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="labAllowInsecure.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="labAllowInsecure.Location" type="System.Drawing.Point, System.Drawing">
<value>12, 11</value>
</data>
<data name="labAllowInsecure.Size" type="System.Drawing.Size, System.Drawing">
<value>83, 12</value>
</data>
<data name="labAllowInsecure.TabIndex" type="System.Int32, mscorlib">
<value>31</value>
</data>
<data name="labAllowInsecure.Text" xml:space="preserve">
<value>allowInsecure</value>
</data>
<data name="&gt;&gt;labAllowInsecure.Name" xml:space="preserve">
<value>labAllowInsecure</value>
</data>
<data name="&gt;&gt;labAllowInsecure.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;labAllowInsecure.Parent" xml:space="preserve">
<value>panTlsMore</value>
</data>
<data name="&gt;&gt;labAllowInsecure.ZOrder" xml:space="preserve">
<value>4</value>
</data>
<data name="cmbAllowInsecure.Items" xml:space="preserve">
<value />
</data>
<data name="cmbAllowInsecure.Items1" xml:space="preserve">
<value>true</value>
</data>
<data name="cmbAllowInsecure.Items2" xml:space="preserve">
<value>false</value>
</data>
<data name="cmbAllowInsecure.Location" type="System.Drawing.Point, System.Drawing">
<value>100, 7</value>
</data>
<data name="cmbAllowInsecure.Size" type="System.Drawing.Size, System.Drawing">
<value>80, 20</value>
</data>
<data name="cmbAllowInsecure.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="&gt;&gt;cmbAllowInsecure.Name" xml:space="preserve">
<value>cmbAllowInsecure</value>
</data>
<data name="&gt;&gt;cmbAllowInsecure.Type" xml:space="preserve">
<value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;cmbAllowInsecure.Parent" xml:space="preserve">
<value>panTlsMore</value>
</data>
<data name="&gt;&gt;cmbAllowInsecure.ZOrder" xml:space="preserve">
<value>5</value>
</data>
<data name="panTlsMore.Location" type="System.Drawing.Point, System.Drawing">
<value>200, 149</value>
</data>
<data name="panTlsMore.Size" type="System.Drawing.Size, System.Drawing">
<value>500, 71</value>
</data>
<data name="panTlsMore.TabIndex" type="System.Int32, mscorlib">
<value>33</value>
</data>
<data name="&gt;&gt;panTlsMore.Name" xml:space="preserve">
<value>panTlsMore</value>
</data>
<data name="&gt;&gt;panTlsMore.Type" xml:space="preserve">
<value>System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;panTlsMore.Parent" xml:space="preserve">
<value>gbTransport</value>
</data>
<data name="&gt;&gt;panTlsMore.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="tipNetwork.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="tipNetwork.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="tipNetwork.Location" type="System.Drawing.Point, System.Drawing">
<value>350, 32</value>
</data>
<data name="tipNetwork.Size" type="System.Drawing.Size, System.Drawing">
<value>113, 12</value>
</data>
<data name="tipNetwork.TabIndex" type="System.Int32, mscorlib">
<value>15</value>
</data>
<data name="tipNetwork.Text" xml:space="preserve">
<value>*Default value tcp</value>
</data>
<data name="&gt;&gt;tipNetwork.Name" xml:space="preserve">
<value>tipNetwork</value>
</data>
<data name="&gt;&gt;tipNetwork.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;tipNetwork.Parent" xml:space="preserve">
<value>gbTransport</value>
</data>
<data name="&gt;&gt;tipNetwork.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="txtPath.Location" type="System.Drawing.Point, System.Drawing">
<value>127, 124</value>
</data>
<data name="txtPath.Multiline" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="txtPath.Size" type="System.Drawing.Size, System.Drawing">
<value>396, 20</value>
</data>
<data name="txtPath.TabIndex" type="System.Int32, mscorlib">
<value>4</value>
</data>
<data name="&gt;&gt;txtPath.Name" xml:space="preserve">
<value>txtPath</value>
</data>
<data name="&gt;&gt;txtPath.Type" xml:space="preserve">
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;txtPath.Parent" xml:space="preserve">
<value>gbTransport</value>
</data>
<data name="&gt;&gt;txtPath.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="cmbNetwork.Location" type="System.Drawing.Point, System.Drawing">
<value>192, 28</value>
</data>
<data name="cmbNetwork.Size" type="System.Drawing.Size, System.Drawing">
<value>143, 20</value>
</data>
<data name="cmbNetwork.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="&gt;&gt;cmbNetwork.Name" xml:space="preserve">
<value>cmbNetwork</value>
</data>
<data name="&gt;&gt;cmbNetwork.Type" xml:space="preserve">
<value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;cmbNetwork.Parent" xml:space="preserve">
<value>gbTransport</value>
</data>
<data name="&gt;&gt;cmbNetwork.ZOrder" xml:space="preserve">
<value>3</value>
</data>
<data name="labNetwork.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="labNetwork.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="labNetwork.Location" type="System.Drawing.Point, System.Drawing">
<value>9, 32</value>
</data>
<data name="labNetwork.Size" type="System.Drawing.Size, System.Drawing">
<value>167, 12</value>
</data>
<data name="labNetwork.TabIndex" type="System.Int32, mscorlib">
<value>13</value>
</data>
<data name="labNetwork.Text" xml:space="preserve">
<value>Transport protocol(network)</value>
</data>
<data name="&gt;&gt;labNetwork.Name" xml:space="preserve">
<value>labNetwork</value>
</data>
<data name="&gt;&gt;labNetwork.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;labNetwork.Parent" xml:space="preserve">
<value>gbTransport</value>
</data>
<data name="&gt;&gt;labNetwork.ZOrder" xml:space="preserve">
<value>4</value>
</data>
<data name="labPath.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="labPath.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="labPath.Location" type="System.Drawing.Point, System.Drawing">
<value>9, 128</value>
</data>
<data name="labPath.Size" type="System.Drawing.Size, System.Drawing">
<value>29, 12</value>
</data>
<data name="labPath.TabIndex" type="System.Int32, mscorlib">
<value>27</value>
</data>
<data name="labPath.Text" xml:space="preserve">
<value>Path</value>
</data>
<data name="&gt;&gt;labPath.Name" xml:space="preserve">
<value>labPath</value>
</data>
<data name="&gt;&gt;labPath.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;labPath.Parent" xml:space="preserve">
<value>gbTransport</value>
</data>
<data name="&gt;&gt;labPath.ZOrder" xml:space="preserve">
<value>5</value>
</data>
<data name="tipPath.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="tipPath.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="tipPath.Location" type="System.Drawing.Point, System.Drawing">
<value>529, 128</value>
</data>
<data name="tipPath.Size" type="System.Drawing.Size, System.Drawing">
<value>11, 12</value>
</data>
<data name="tipPath.TabIndex" type="System.Int32, mscorlib">
<value>24</value>
</data>
<data name="tipPath.Text" xml:space="preserve">
<value>*</value>
</data>
<data name="&gt;&gt;tipPath.Name" xml:space="preserve">
<value>tipPath</value>
</data>
<data name="&gt;&gt;tipPath.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;tipPath.Parent" xml:space="preserve">
<value>gbTransport</value>
</data>
<data name="&gt;&gt;tipPath.ZOrder" xml:space="preserve">
<value>6</value>
</data>
<data name="tipRequestHost.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="tipRequestHost.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="tipRequestHost.Location" type="System.Drawing.Point, System.Drawing">
<value>464, 96</value>
</data>
<data name="tipRequestHost.Size" type="System.Drawing.Size, System.Drawing">
<value>11, 12</value>
</data>
<data name="tipRequestHost.TabIndex" type="System.Int32, mscorlib">
<value>23</value>
</data>
<data name="tipRequestHost.Text" xml:space="preserve">
<value>*</value>
</data>
<data name="&gt;&gt;tipRequestHost.Name" xml:space="preserve">
<value>tipRequestHost</value>
</data>
<data name="&gt;&gt;tipRequestHost.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;tipRequestHost.Parent" xml:space="preserve">
<value>gbTransport</value>
</data>
<data name="&gt;&gt;tipRequestHost.ZOrder" xml:space="preserve">
<value>7</value>
</data>
<data name="labStreamSecurity.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="labStreamSecurity.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="labStreamSecurity.Location" type="System.Drawing.Point, System.Drawing">
<value>9, 160</value>
</data>
<data name="labStreamSecurity.Size" type="System.Drawing.Size, System.Drawing">
<value>23, 12</value>
</data>
<data name="labStreamSecurity.TabIndex" type="System.Int32, mscorlib">
<value>22</value>
</data>
<data name="labStreamSecurity.Text" xml:space="preserve">
<value>TLS</value>
</data>
<data name="&gt;&gt;labStreamSecurity.Name" xml:space="preserve">
<value>labStreamSecurity</value>
</data>
<data name="&gt;&gt;labStreamSecurity.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;labStreamSecurity.Parent" xml:space="preserve">
<value>gbTransport</value>
</data>
<data name="&gt;&gt;labStreamSecurity.ZOrder" xml:space="preserve">
<value>8</value>
</data>
<data name="cmbStreamSecurity.Location" type="System.Drawing.Point, System.Drawing">
<value>127, 156</value>
</data>
<data name="cmbStreamSecurity.Size" type="System.Drawing.Size, System.Drawing">
<value>60, 20</value>
</data>
<data name="cmbStreamSecurity.TabIndex" type="System.Int32, mscorlib">
<value>5</value>
</data>
<data name="&gt;&gt;cmbStreamSecurity.Name" xml:space="preserve">
<value>cmbStreamSecurity</value>
</data>
<data name="&gt;&gt;cmbStreamSecurity.Type" xml:space="preserve">
<value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;cmbStreamSecurity.Parent" xml:space="preserve">
<value>gbTransport</value>
</data>
<data name="&gt;&gt;cmbStreamSecurity.ZOrder" xml:space="preserve">
<value>9</value>
</data>
<data name="tipHeaderType.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="tipHeaderType.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="tipHeaderType.Location" type="System.Drawing.Point, System.Drawing">
<value>282, 64</value>
</data>
<data name="tipHeaderType.Size" type="System.Drawing.Size, System.Drawing">
<value>11, 12</value>
</data>
<data name="tipHeaderType.TabIndex" type="System.Int32, mscorlib">
<value>20</value>
</data>
<data name="tipHeaderType.Text" xml:space="preserve">
<value>*</value>
</data>
<data name="&gt;&gt;tipHeaderType.Name" xml:space="preserve">
<value>tipHeaderType</value>
</data>
<data name="&gt;&gt;tipHeaderType.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;tipHeaderType.Parent" xml:space="preserve">
<value>gbTransport</value>
</data>
<data name="&gt;&gt;tipHeaderType.ZOrder" xml:space="preserve">
<value>10</value>
</data>
<data name="txtRequestHost.Location" type="System.Drawing.Point, System.Drawing">
<value>158, 92</value>
</data>
<data name="txtRequestHost.Multiline" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="txtRequestHost.Size" type="System.Drawing.Size, System.Drawing">
<value>300, 20</value>
</data>
<data name="txtRequestHost.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
</data>
<data name="&gt;&gt;txtRequestHost.Name" xml:space="preserve">
<value>txtRequestHost</value>
</data>
<data name="&gt;&gt;txtRequestHost.Type" xml:space="preserve">
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;txtRequestHost.Parent" xml:space="preserve">
<value>gbTransport</value>
</data>
<data name="&gt;&gt;txtRequestHost.ZOrder" xml:space="preserve">
<value>11</value>
</data>
<data name="labHeaderType.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="labHeaderType.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="labHeaderType.Location" type="System.Drawing.Point, System.Drawing">
<value>9, 64</value>
</data>
<data name="labHeaderType.Size" type="System.Drawing.Size, System.Drawing">
<value>95, 12</value>
</data>
<data name="labHeaderType.TabIndex" type="System.Int32, mscorlib">
<value>19</value>
</data>
<data name="labHeaderType.Text" xml:space="preserve">
<value>Camouflage type</value>
</data>
<data name="&gt;&gt;labHeaderType.Name" xml:space="preserve">
<value>labHeaderType</value>
</data>
<data name="&gt;&gt;labHeaderType.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;labHeaderType.Parent" xml:space="preserve">
<value>gbTransport</value>
</data>
<data name="&gt;&gt;labHeaderType.ZOrder" xml:space="preserve">
<value>12</value>
</data>
<data name="labRequestHost.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="labRequestHost.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="labRequestHost.Location" type="System.Drawing.Point, System.Drawing">
<value>9, 96</value>
</data>
<data name="labRequestHost.Size" type="System.Drawing.Size, System.Drawing">
<value>143, 12</value>
</data>
<data name="labRequestHost.TabIndex" type="System.Int32, mscorlib">
<value>17</value>
</data>
<data name="labRequestHost.Text" xml:space="preserve">
<value>Camouflage domain(host)</value>
</data>
<data name="&gt;&gt;labRequestHost.Name" xml:space="preserve">
<value>labRequestHost</value>
</data>
<data name="&gt;&gt;labRequestHost.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;labRequestHost.Parent" xml:space="preserve">
<value>gbTransport</value>
</data>
<data name="&gt;&gt;labRequestHost.ZOrder" xml:space="preserve">
<value>13</value>
</data>
<data name="cmbHeaderType.Location" type="System.Drawing.Point, System.Drawing">
<value>127, 60</value>
</data>
<data name="cmbHeaderType.Size" type="System.Drawing.Size, System.Drawing">
<value>143, 20</value>
</data>
<data name="cmbHeaderType.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="&gt;&gt;cmbHeaderType.Name" xml:space="preserve">
<value>cmbHeaderType</value>
</data>
<data name="&gt;&gt;cmbHeaderType.Type" xml:space="preserve">
<value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;cmbHeaderType.Parent" xml:space="preserve">
<value>gbTransport</value>
</data>
<data name="&gt;&gt;cmbHeaderType.ZOrder" xml:space="preserve">
<value>14</value>
</data>
<data name="gbTransport.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="gbTransport.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 0</value>
</data>
<data name="gbTransport.Size" type="System.Drawing.Size, System.Drawing">
<value>723, 223</value>
</data>
<data name="gbTransport.TabIndex" type="System.Int32, mscorlib">
<value>22</value>
</data>
<data name="gbTransport.Text" xml:space="preserve">
<value>Transport</value>
</data>
<data name="&gt;&gt;gbTransport.Name" xml:space="preserve">
<value>gbTransport</value>
</data>
<data name="&gt;&gt;gbTransport.Type" xml:space="preserve">
<value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;gbTransport.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;gbTransport.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
<value>6, 12</value>
</data>
<data name="$this.Size" type="System.Drawing.Size, System.Drawing">
<value>723, 223</value>
</data>
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>ServerTransportControl</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>System.Windows.Forms.UserControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
</root>

View File

@@ -0,0 +1,193 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="tipNetwork.Size" type="System.Drawing.Size, System.Drawing">
<value>143, 12</value>
</data>
<data name="tipNetwork.Text" xml:space="preserve">
<value>*默认tcp,选错会无法连接</value>
</data>
<data name="cmbNetwork.Location" type="System.Drawing.Point, System.Drawing">
<value>127, 28</value>
</data>
<data name="cmbNetwork.Size" type="System.Drawing.Size, System.Drawing">
<value>208, 20</value>
</data>
<data name="labNetwork.Size" type="System.Drawing.Size, System.Drawing">
<value>107, 12</value>
</data>
<data name="labNetwork.Text" xml:space="preserve">
<value>传输协议(network)</value>
</data>
<data name="labPath.Size" type="System.Drawing.Size, System.Drawing">
<value>65, 12</value>
</data>
<data name="labPath.Text" xml:space="preserve">
<value>路径(path)</value>
</data>
<data name="labStreamSecurity.Size" type="System.Drawing.Size, System.Drawing">
<value>107, 12</value>
</data>
<data name="labStreamSecurity.Text" xml:space="preserve">
<value>传输层安全(tls)</value>
</data>
<data name="txtRequestHost.Location" type="System.Drawing.Point, System.Drawing">
<value>127, 92</value>
</data>
<data name="txtRequestHost.Size" type="System.Drawing.Size, System.Drawing">
<value>331, 20</value>
</data>
<data name="labHeaderType.Size" type="System.Drawing.Size, System.Drawing">
<value>89, 12</value>
</data>
<data name="labHeaderType.Text" xml:space="preserve">
<value>伪装类型(type)</value>
</data>
<data name="labRequestHost.Size" type="System.Drawing.Size, System.Drawing">
<value>89, 12</value>
</data>
<data name="labRequestHost.Text" xml:space="preserve">
<value>伪装域名(host)</value>
</data>
<data name="gbTransport.Text" xml:space="preserve">
<value>底层传输方式(transport)</value>
</data>
<data name="label1.Location" type="System.Drawing.Point, System.Drawing">
<value>282, 11</value>
</data>
<data name="clbAlpn.Location" type="System.Drawing.Point, System.Drawing">
<value>331, 7</value>
</data>
<data name="clbAlpn.Size" type="System.Drawing.Size, System.Drawing">
<value>160, 20</value>
</data>
<data name="txtSNI.Size" type="System.Drawing.Size, System.Drawing">
<value>391, 21</value>
</data>
<data name="labAllowInsecure.Size" type="System.Drawing.Size, System.Drawing">
<value>167, 12</value>
</data>
<data name="labAllowInsecure.Text" xml:space="preserve">
<value>跳过证书验证(allowInsecure)</value>
</data>
<data name="cmbAllowInsecure.Location" type="System.Drawing.Point, System.Drawing">
<value>183, 7</value>
</data>
</root>

View File

@@ -30,6 +30,8 @@
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SubSettingControl));
this.grbMain = new System.Windows.Forms.GroupBox();
this.txtUserAgent = new System.Windows.Forms.TextBox();
this.label1 = new System.Windows.Forms.Label();
this.btnShare = new System.Windows.Forms.Button();
this.chkEnabled = new System.Windows.Forms.CheckBox();
this.btnRemove = new System.Windows.Forms.Button();
@@ -44,6 +46,9 @@
//
// grbMain
//
resources.ApplyResources(this.grbMain, "grbMain");
this.grbMain.Controls.Add(this.txtUserAgent);
this.grbMain.Controls.Add(this.label1);
this.grbMain.Controls.Add(this.btnShare);
this.grbMain.Controls.Add(this.chkEnabled);
this.grbMain.Controls.Add(this.btnRemove);
@@ -51,10 +56,20 @@
this.grbMain.Controls.Add(this.txtRemarks);
this.grbMain.Controls.Add(this.label2);
this.grbMain.Controls.Add(this.label3);
resources.ApplyResources(this.grbMain, "grbMain");
this.grbMain.Name = "grbMain";
this.grbMain.TabStop = false;
//
// txtUserAgent
//
resources.ApplyResources(this.txtUserAgent, "txtUserAgent");
this.txtUserAgent.Name = "txtUserAgent";
this.txtUserAgent.Leave += new System.EventHandler(this.txtRemarks_Leave);
//
// label1
//
resources.ApplyResources(this.label1, "label1");
this.label1.Name = "label1";
//
// btnShare
//
resources.ApplyResources(this.btnShare, "btnShare");
@@ -130,5 +145,7 @@
private System.Windows.Forms.CheckBox chkEnabled;
private System.Windows.Forms.Button btnShare;
private System.Windows.Forms.PictureBox picQRCode;
private System.Windows.Forms.TextBox txtUserAgent;
private System.Windows.Forms.Label label1;
}
}

View File

@@ -35,6 +35,7 @@ namespace v2rayN.Forms
txtRemarks.Text = subItem.remarks.ToString();
txtUrl.Text = subItem.url.ToString();
chkEnabled.Checked = subItem.enabled;
txtUserAgent.Text = subItem.userAgent;
}
}
private void EndBindingSub()
@@ -44,6 +45,7 @@ namespace v2rayN.Forms
subItem.remarks = txtRemarks.Text.TrimEx();
subItem.url = txtUrl.Text.TrimEx();
subItem.enabled = chkEnabled.Checked;
subItem.userAgent = txtUserAgent.Text.TrimEx();
}
}
private void txtRemarks_Leave(object sender, EventArgs e)

View File

@@ -117,215 +117,305 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="label1.Text" xml:space="preserve">
<value>User Agent(optional)</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="btnShare.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<data name="label2.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="btnShare.Location" type="System.Drawing.Point, System.Drawing">
<value>434, 21</value>
</data>
<data name="btnShare.Size" type="System.Drawing.Size, System.Drawing">
<value>75, 23</value>
</data>
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="btnShare.TabIndex" type="System.Int32, mscorlib">
<value>26</value>
</data>
<data name="btnShare.Text" xml:space="preserve">
<value>Share</value>
</data>
<data name="&gt;&gt;btnShare.Name" xml:space="preserve">
<value>btnShare</value>
</data>
<data name="&gt;&gt;btnShare.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;btnShare.Parent" xml:space="preserve">
<data name="&gt;&gt;txtUrl.Parent" xml:space="preserve">
<value>grbMain</value>
</data>
<data name="&gt;&gt;btnShare.ZOrder" xml:space="preserve">
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="picQRCode.Size" type="System.Drawing.Size, System.Drawing">
<value>619, 162</value>
</data>
<data name="&gt;&gt;txtUserAgent.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="chkEnabled.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="chkEnabled.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="chkEnabled.Location" type="System.Drawing.Point, System.Drawing">
<value>368, 23</value>
</data>
<data name="chkEnabled.Size" type="System.Drawing.Size, System.Drawing">
<value>60, 16</value>
</data>
<data name="chkEnabled.TabIndex" type="System.Int32, mscorlib">
<data name="&gt;&gt;txtUrl.Name" xml:space="preserve">
<value>txtUrl</value>
</data>
<data name="&gt;&gt;label3.ZOrder" xml:space="preserve">
<value>8</value>
</data>
<data name="&gt;&gt;picQRCode.Name" xml:space="preserve">
<value>picQRCode</value>
</data>
<data name="&gt;&gt;btnShare.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="btnRemove.Text" xml:space="preserve">
<value>Remove</value>
</data>
<data name="btnRemove.Location" type="System.Drawing.Point, System.Drawing">
<value>525, 21</value>
</data>
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="btnRemove.TabIndex" type="System.Int32, mscorlib">
<value>24</value>
</data>
<data name="&gt;&gt;txtUserAgent.Type" xml:space="preserve">
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="txtUserAgent.Location" type="System.Drawing.Point, System.Drawing">
<value>127, 111</value>
</data>
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>SubSettingControl</value>
</data>
<data name="&gt;&gt;label1.Name" xml:space="preserve">
<value>label1</value>
</data>
<data name="grbMain.Text" xml:space="preserve">
<value>Subscription details</value>
</data>
<data name="btnShare.TabIndex" type="System.Int32, mscorlib">
<value>26</value>
</data>
<data name="&gt;&gt;txtRemarks.Type" xml:space="preserve">
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="txtUrl.Multiline" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="&gt;&gt;txtRemarks.Parent" xml:space="preserve">
<value>grbMain</value>
</data>
<data name="btnShare.Location" type="System.Drawing.Point, System.Drawing">
<value>434, 21</value>
</data>
<data name="label3.Size" type="System.Drawing.Size, System.Drawing">
<value>83, 12</value>
</data>
<data name="txtRemarks.Size" type="System.Drawing.Size, System.Drawing">
<value>232, 21</value>
</data>
<data name="grbMain.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Top</value>
</data>
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
<value>6, 12</value>
</data>
<data name="&gt;&gt;label3.Name" xml:space="preserve">
<value>label3</value>
</data>
<data name="txtRemarks.Location" type="System.Drawing.Point, System.Drawing">
<value>127, 21</value>
</data>
<data name="btnShare.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="btnShare.Text" xml:space="preserve">
<value>Share</value>
</data>
<data name="&gt;&gt;label1.Parent" xml:space="preserve">
<value>grbMain</value>
</data>
<data name="&gt;&gt;chkEnabled.ZOrder" xml:space="preserve">
<value>3</value>
</data>
<data name="label3.Location" type="System.Drawing.Point, System.Drawing">
<value>12, 53</value>
</data>
<data name="&gt;&gt;label1.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="picQRCode.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="label1.TabIndex" type="System.Int32, mscorlib">
<value>27</value>
</data>
<data name="label2.TabIndex" type="System.Int32, mscorlib">
<value>10</value>
</data>
<data name="label1.Size" type="System.Drawing.Size, System.Drawing">
<value>125, 12</value>
</data>
<data name="picQRCode.TabIndex" type="System.Int32, mscorlib">
<value>25</value>
</data>
<data name="txtUrl.Location" type="System.Drawing.Point, System.Drawing">
<value>127, 53</value>
</data>
<data name="txtUserAgent.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
</data>
<data name="&gt;&gt;label2.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;txtUrl.ZOrder" xml:space="preserve">
<value>5</value>
</data>
<data name="picQRCode.SizeMode" type="System.Windows.Forms.PictureBoxSizeMode, System.Windows.Forms">
<value>Zoom</value>
</data>
<data name="txtRemarks.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="label2.Size" type="System.Drawing.Size, System.Drawing">
<value>47, 12</value>
</data>
<data name="txtUrl.ScrollBars" type="System.Windows.Forms.ScrollBars, System.Windows.Forms">
<value>Vertical</value>
</data>
<data name="&gt;&gt;btnRemove.Name" xml:space="preserve">
<value>btnRemove</value>
</data>
<data name="&gt;&gt;txtUrl.Type" xml:space="preserve">
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="chkEnabled.Text" xml:space="preserve">
<value>Enable</value>
</data>
<data name="&gt;&gt;chkEnabled.Name" xml:space="preserve">
<value>chkEnabled</value>
</data>
<data name="&gt;&gt;chkEnabled.Type" xml:space="preserve">
<value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;chkEnabled.Parent" xml:space="preserve">
<value>grbMain</value>
</data>
<data name="&gt;&gt;chkEnabled.ZOrder" xml:space="preserve">
<value>1</value>
<data name="&gt;&gt;txtRemarks.ZOrder" xml:space="preserve">
<value>6</value>
</data>
<data name="btnRemove.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="btnRemove.Location" type="System.Drawing.Point, System.Drawing">
<value>525, 21</value>
</data>
<data name="btnRemove.Size" type="System.Drawing.Size, System.Drawing">
<value>75, 23</value>
</data>
<data name="btnRemove.TabIndex" type="System.Int32, mscorlib">
<value>24</value>
</data>
<data name="btnRemove.Text" xml:space="preserve">
<value>Remove</value>
</data>
<data name="&gt;&gt;btnRemove.Name" xml:space="preserve">
<value>btnRemove</value>
</data>
<data name="&gt;&gt;btnRemove.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;btnRemove.Parent" xml:space="preserve">
<value>grbMain</value>
</data>
<data name="&gt;&gt;btnRemove.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="txtUrl.Location" type="System.Drawing.Point, System.Drawing">
<value>127, 55</value>
</data>
<data name="txtUrl.Multiline" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="txtUrl.ScrollBars" type="System.Windows.Forms.ScrollBars, System.Windows.Forms">
<value>Vertical</value>
</data>
<data name="txtUrl.Size" type="System.Drawing.Size, System.Drawing">
<value>473, 46</value>
</data>
<data name="txtUrl.TabIndex" type="System.Int32, mscorlib">
<value>23</value>
</data>
<data name="&gt;&gt;txtUrl.Name" xml:space="preserve">
<value>txtUrl</value>
</data>
<data name="&gt;&gt;txtUrl.Type" xml:space="preserve">
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;txtUrl.Parent" xml:space="preserve">
<value>grbMain</value>
</data>
<data name="&gt;&gt;txtUrl.ZOrder" xml:space="preserve">
<value>3</value>
</data>
<data name="txtRemarks.Location" type="System.Drawing.Point, System.Drawing">
<value>127, 21</value>
</data>
<data name="txtRemarks.Size" type="System.Drawing.Size, System.Drawing">
<value>232, 21</value>
</data>
<data name="txtRemarks.TabIndex" type="System.Int32, mscorlib">
<value>11</value>
</data>
<data name="&gt;&gt;txtRemarks.Name" xml:space="preserve">
<value>txtRemarks</value>
</data>
<data name="&gt;&gt;txtRemarks.Type" xml:space="preserve">
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<data name="label1.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="&gt;&gt;txtRemarks.Parent" xml:space="preserve">
<value>grbMain</value>
<data name="picQRCode.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 148</value>
</data>
<data name="&gt;&gt;txtRemarks.ZOrder" xml:space="preserve">
<data name="btnShare.Size" type="System.Drawing.Size, System.Drawing">
<value>75, 23</value>
</data>
<data name="&gt;&gt;btnRemove.ZOrder" xml:space="preserve">
<value>4</value>
</data>
<data name="label2.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="label2.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="label2.Location" type="System.Drawing.Point, System.Drawing">
<value>12, 25</value>
</data>
<data name="label2.Size" type="System.Drawing.Size, System.Drawing">
<value>47, 12</value>
</data>
<data name="label2.TabIndex" type="System.Int32, mscorlib">
<value>10</value>
</data>
<data name="label2.Text" xml:space="preserve">
<value>Remarks</value>
</data>
<data name="&gt;&gt;label2.Name" xml:space="preserve">
<value>label2</value>
</data>
<data name="&gt;&gt;label2.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;label2.Parent" xml:space="preserve">
<data name="&gt;&gt;btnShare.Parent" xml:space="preserve">
<value>grbMain</value>
</data>
<data name="&gt;&gt;label2.ZOrder" xml:space="preserve">
<value>5</value>
<data name="chkEnabled.TabIndex" type="System.Int32, mscorlib">
<value>25</value>
</data>
<data name="label3.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="label3.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="label3.Location" type="System.Drawing.Point, System.Drawing">
<value>12, 55</value>
</data>
<data name="label3.Size" type="System.Drawing.Size, System.Drawing">
<value>83, 12</value>
</data>
<data name="label3.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="label3.Text" xml:space="preserve">
<value>Address (url)</value>
</data>
<data name="&gt;&gt;label3.Name" xml:space="preserve">
<value>label3</value>
</data>
<data name="&gt;&gt;label3.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;label3.Parent" xml:space="preserve">
<data name="&gt;&gt;txtUserAgent.Parent" xml:space="preserve">
<value>grbMain</value>
</data>
<data name="&gt;&gt;label3.ZOrder" xml:space="preserve">
<value>6</value>
</data>
<data name="grbMain.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Top</value>
</data>
<data name="grbMain.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 0</value>
</data>
<data name="grbMain.Size" type="System.Drawing.Size, System.Drawing">
<value>619, 110</value>
</data>
<data name="grbMain.TabIndex" type="System.Int32, mscorlib">
<value>10</value>
</data>
<data name="grbMain.Text" xml:space="preserve">
<value>Subscription details</value>
<data name="txtUrl.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="&gt;&gt;label2.Parent" xml:space="preserve">
<value>grbMain</value>
</data>
<data name="txtUserAgent.Size" type="System.Drawing.Size, System.Drawing">
<value>473, 21</value>
</data>
<data name="chkEnabled.Location" type="System.Drawing.Point, System.Drawing">
<value>368, 23</value>
</data>
<data name="label2.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="chkEnabled.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="grbMain.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 0</value>
</data>
<data name="label3.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="&gt;&gt;btnRemove.Parent" xml:space="preserve">
<value>grbMain</value>
</data>
<data name="label1.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="&gt;&gt;picQRCode.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="label3.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="&gt;&gt;label2.Name" xml:space="preserve">
<value>label2</value>
</data>
<data name="&gt;&gt;grbMain.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;label3.Parent" xml:space="preserve">
<value>grbMain</value>
</data>
<data name="grbMain.Size" type="System.Drawing.Size, System.Drawing">
<value>619, 148</value>
</data>
<data name="&gt;&gt;btnShare.Name" xml:space="preserve">
<value>btnShare</value>
</data>
<data name="&gt;&gt;btnShare.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="&gt;&gt;label2.ZOrder" xml:space="preserve">
<value>7</value>
</data>
<data name="chkEnabled.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="label1.Location" type="System.Drawing.Point, System.Drawing">
<value>12, 115</value>
</data>
<data name="$this.Size" type="System.Drawing.Size, System.Drawing">
<value>619, 310</value>
</data>
<data name="&gt;&gt;txtUserAgent.Name" xml:space="preserve">
<value>txtUserAgent</value>
</data>
<data name="label2.Text" xml:space="preserve">
<value>Remarks</value>
</data>
<data name="label3.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="picQRCode.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="txtUrl.Size" type="System.Drawing.Size, System.Drawing">
<value>473, 46</value>
</data>
<data name="label2.Location" type="System.Drawing.Point, System.Drawing">
<value>12, 25</value>
</data>
<data name="btnRemove.Size" type="System.Drawing.Size, System.Drawing">
<value>75, 23</value>
</data>
<data name="&gt;&gt;chkEnabled.Parent" xml:space="preserve">
<value>grbMain</value>
</data>
<data name="&gt;&gt;grbMain.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="label3.Text" xml:space="preserve">
<value>Address (url)</value>
</data>
<data name="&gt;&gt;picQRCode.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;btnRemove.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>System.Windows.Forms.UserControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;picQRCode.Type" xml:space="preserve">
<value>System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;grbMain.Name" xml:space="preserve">
<value>grbMain</value>
@@ -333,55 +423,16 @@
<data name="&gt;&gt;grbMain.Type" xml:space="preserve">
<value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;grbMain.Parent" xml:space="preserve">
<value>$this</value>
<data name="&gt;&gt;label1.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;grbMain.ZOrder" xml:space="preserve">
<value>1</value>
<data name="&gt;&gt;chkEnabled.Type" xml:space="preserve">
<value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="picQRCode.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="picQRCode.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="picQRCode.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 110</value>
</data>
<data name="picQRCode.Size" type="System.Drawing.Size, System.Drawing">
<value>619, 200</value>
</data>
<data name="picQRCode.SizeMode" type="System.Windows.Forms.PictureBoxSizeMode, System.Windows.Forms">
<value>Zoom</value>
</data>
<data name="picQRCode.TabIndex" type="System.Int32, mscorlib">
<value>25</value>
</data>
<data name="&gt;&gt;picQRCode.Name" xml:space="preserve">
<value>picQRCode</value>
</data>
<data name="&gt;&gt;picQRCode.Type" xml:space="preserve">
<value>System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;picQRCode.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;picQRCode.ZOrder" xml:space="preserve">
<value>0</value>
<data name="&gt;&gt;label3.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
<value>6, 12</value>
</data>
<data name="$this.Size" type="System.Drawing.Size, System.Drawing">
<value>619, 310</value>
</data>
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>SubSettingControl</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>System.Windows.Forms.UserControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
</root>

View File

@@ -117,10 +117,16 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="label1.Size" type="System.Drawing.Size, System.Drawing">
<value>101, 12</value>
</data>
<data name="label1.Text" xml:space="preserve">
<value>User Agent(可选)</value>
</data>
<data name="btnShare.Text" xml:space="preserve">
<value>分享</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="chkEnabled.Size" type="System.Drawing.Size, System.Drawing">
<value>48, 16</value>
</data>

View File

@@ -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";
@@ -21,7 +21,6 @@ namespace v2rayN
/// </summary>
public const string SpeedTestUrl = @"http://cachefly.cachefly.net/10mb.test";
public const string SpeedPingTestUrl = @"https://www.google.com/generate_204";
public const string AvailabilityTestUrl = @"https://www.google.com/generate_204";
/// <summary>
/// CustomRoutingListUrl
@@ -177,6 +176,10 @@ namespace v2rayN
/// </summary>
public const string MyRegKeyLanguage = "CurrentLanguage";
/// <summary>
///
/// </summary>
public const string MyRegKeySecurityProtocolTls13 = "SecurityProtocolTls13";
/// <summary>
/// Icon
/// </summary>
public const string CustomIconName = "v2rayN.ico";
@@ -193,7 +196,15 @@ namespace v2rayN
public const string RoutingRuleComma = "<COMMA>";
public static readonly IEnumerable<string> ssSecuritys = new HashSet<string> { "aes-256-gcm", "aes-128-gcm", "chacha20-poly1305", "chacha20-ietf-poly1305", "none", "plain" };
public static readonly List<string> vmessSecuritys = new List<string> { "aes-128-gcm", "chacha20-poly1305", "auto", "none", "zero" };
public static readonly List<string> ssSecuritys = new List<string> { "aes-256-gcm", "aes-128-gcm", "chacha20-poly1305", "chacha20-ietf-poly1305", "none", "plain" };
public static readonly List<string> xtlsFlows = new List<string> { "", "xtls-rprx-origin", "xtls-rprx-origin-udp443", "xtls-rprx-direct", "xtls-rprx-direct-udp443" };
public static readonly List<string> networks = new List<string> { "tcp", "kcp", "ws", "h2", "quic", "grpc" };
public static readonly List<string> kcpHeaderTypes = new List<string> { "srtp", "utp", "wechat-video", "dtls", "wireguard" };
public const string GrpcgunMode = "gun";
public const string GrpcmultiMode = "multi";
#endregion
#region

View File

@@ -32,6 +32,15 @@ namespace v2rayN.Handler
//转成Json
config = Utils.FromJson<Config>(result);
}
else
{
if (File.Exists(Utils.GetPath(configRes)))
{
Utils.SaveLog("LoadConfig Exception");
return -1;
}
}
if (config == null)
{
config = new Config
@@ -51,7 +60,9 @@ namespace v2rayN.Handler
enableStatistics = false,
// 默认中等刷新率
statisticsFreshRate = (int)Global.StatisticsFreshRate.medium
statisticsFreshRate = (int)Global.StatisticsFreshRate.medium,
enableRoutingAdvanced = true
};
}
@@ -89,6 +100,10 @@ namespace v2rayN.Handler
{
config.domainStrategy = "IPIfNonMatch";
}
if (Utils.IsNullOrEmpty(config.domainMatcher))
{
config.domainMatcher = "linear";
}
//kcp
if (config.kcpItem == null)
@@ -106,25 +121,32 @@ namespace v2rayN.Handler
}
if (config.uiItem == null)
{
config.uiItem = new UIItem();
config.uiItem = new UIItem()
{
enableAutoAdjustMainLvColWidth = true
};
}
if (config.uiItem.mainLvColWidth == null)
{
config.uiItem.mainLvColWidth = new Dictionary<string, int>();
}
//// 如果是用户升级首次会有端口号为0的情况不可用这里处理
//if (config.pacPort == 0)
//{
// config.pacPort = 8888;
//}
if (Utils.IsNullOrEmpty(config.speedTestUrl))
if (config.constItem == null)
{
config.speedTestUrl = Global.SpeedTestUrl;
config.constItem = new ConstItem();
}
if (Utils.IsNullOrEmpty(config.speedPingTestUrl))
if (Utils.IsNullOrEmpty(config.constItem.speedTestUrl))
{
config.speedPingTestUrl = Global.SpeedPingTestUrl;
config.constItem.speedTestUrl = Global.SpeedTestUrl;
}
if (Utils.IsNullOrEmpty(config.constItem.speedPingTestUrl))
{
config.constItem.speedPingTestUrl = Global.SpeedPingTestUrl;
}
if (Utils.IsNullOrEmpty(config.constItem.defIEProxyExceptions))
{
config.constItem.defIEProxyExceptions = Global.IEProxyExceptions;
}
//if (Utils.IsNullOrEmpty(config.remoteDNS))
//{
@@ -153,6 +175,11 @@ namespace v2rayN.Handler
{
VmessItem vmessItem = config.vmess[i];
UpgradeServerVersion(ref vmessItem);
if (string.IsNullOrEmpty(vmessItem.indexId))
{
vmessItem.indexId = Utils.GetGUID(false);
}
}
}
@@ -170,9 +197,8 @@ namespace v2rayN.Handler
/// <param name="vmessItem"></param>
/// <param name="index"></param>
/// <returns></returns>
public static int AddServer(ref Config config, VmessItem vmessItem, int index)
public static int AddServer(ref Config config, VmessItem vmessItem, int index, bool toFile = true)
{
vmessItem.configVersion = 2;
vmessItem.configType = (int)EConfigType.Vmess;
vmessItem.address = vmessItem.address.TrimEx();
@@ -184,6 +210,11 @@ namespace v2rayN.Handler
vmessItem.path = vmessItem.path.TrimEx();
vmessItem.streamSecurity = vmessItem.streamSecurity.TrimEx();
if (!Global.vmessSecuritys.Contains(vmessItem.security))
{
return -1;
}
if (index >= 0)
{
//修改
@@ -195,21 +226,13 @@ namespace v2rayN.Handler
}
else
{
//添加
if (Utils.IsNullOrEmpty(vmessItem.allowInsecure))
{
vmessItem.allowInsecure = config.defAllowInsecure.ToString();
}
config.vmess.Add(vmessItem);
if (config.vmess.Count == 1)
{
config.index = 0;
Global.reloadV2ray = true;
}
AddServerCommon(ref config, vmessItem);
}
ToJsonFile(config);
if (toFile)
{
ToJsonFile(config);
}
return 0;
}
@@ -219,36 +242,23 @@ namespace v2rayN.Handler
/// <param name="config"></param>
/// <param name="index"></param>
/// <returns></returns>
public static int RemoveServer(ref Config config, int index)
public static int RemoveServer(ref Config config, List<int> indexs)
{
if (index < 0 || index > config.vmess.Count - 1)
var indexId = config.indexId();
for (int k = indexs.Count - 1; k >= 0; k--)
{
return -1;
}
//删除
config.vmess.RemoveAt(index);
//移除的是活动的
if (config.index.Equals(index))
{
if (config.vmess.Count > 0)
var index = indexs[k];
if (index < 0 || index > config.vmess.Count - 1)
{
config.index = 0;
continue;
}
else
{
config.index = -1;
}
Global.reloadV2ray = true;
}
else if (index < config.index)//移除活动之前的
{
config.index--;
Global.reloadV2ray = true;
config.vmess.RemoveAt(index);
}
SetIndex(ref config, indexId);
ToJsonFile(config);
return 0;
@@ -520,9 +530,8 @@ namespace v2rayN.Handler
/// <param name="vmessItem"></param>
/// <param name="index"></param>
/// <returns></returns>
public static int AddShadowsocksServer(ref Config config, VmessItem vmessItem, int index)
public static int AddShadowsocksServer(ref Config config, VmessItem vmessItem, int index, bool toFile = true)
{
vmessItem.configVersion = 2;
vmessItem.configType = (int)EConfigType.Shadowsocks;
vmessItem.address = vmessItem.address.TrimEx();
@@ -545,16 +554,13 @@ namespace v2rayN.Handler
}
else
{
//添加
config.vmess.Add(vmessItem);
if (config.vmess.Count == 1)
{
config.index = 0;
Global.reloadV2ray = true;
}
AddServerCommon(ref config, vmessItem);
}
ToJsonFile(config);
if (toFile)
{
ToJsonFile(config);
}
return 0;
}
@@ -566,9 +572,8 @@ namespace v2rayN.Handler
/// <param name="vmessItem"></param>
/// <param name="index"></param>
/// <returns></returns>
public static int AddSocksServer(ref Config config, VmessItem vmessItem, int index)
public static int AddSocksServer(ref Config config, VmessItem vmessItem, int index, bool toFile = true)
{
vmessItem.configVersion = 2;
vmessItem.configType = (int)EConfigType.Socks;
vmessItem.address = vmessItem.address.TrimEx();
@@ -584,16 +589,13 @@ namespace v2rayN.Handler
}
else
{
//添加
config.vmess.Add(vmessItem);
if (config.vmess.Count == 1)
{
config.index = 0;
Global.reloadV2ray = true;
}
AddServerCommon(ref config, vmessItem);
}
ToJsonFile(config);
if (toFile)
{
ToJsonFile(config);
}
return 0;
}
@@ -606,15 +608,16 @@ namespace v2rayN.Handler
/// <param name="vmessItem"></param>
/// <param name="index"></param>
/// <returns></returns>
public static int AddTrojanServer(ref Config config, VmessItem vmessItem, int index)
public static int AddTrojanServer(ref Config config, VmessItem vmessItem, int index, bool toFile = true)
{
vmessItem.configVersion = 2;
vmessItem.configType = (int)EConfigType.Trojan;
vmessItem.address = vmessItem.address.TrimEx();
vmessItem.id = vmessItem.id.TrimEx();
vmessItem.streamSecurity = Global.StreamSecurity;
if (Utils.IsNullOrEmpty(vmessItem.streamSecurity))
{
vmessItem.streamSecurity = Global.StreamSecurity;
}
if (Utils.IsNullOrEmpty(vmessItem.allowInsecure))
{
vmessItem.allowInsecure = config.defAllowInsecure.ToString();
@@ -631,16 +634,13 @@ namespace v2rayN.Handler
}
else
{
//添加
config.vmess.Add(vmessItem);
if (config.vmess.Count == 1)
{
config.index = 0;
Global.reloadV2ray = true;
}
AddServerCommon(ref config, vmessItem);
}
ToJsonFile(config);
if (toFile)
{
ToJsonFile(config);
}
return 0;
}
@@ -734,7 +734,7 @@ namespace v2rayN.Handler
foreach (string str in arrData)
{
//maybe sub
if (str.StartsWith(Global.httpsProtocol) || str.StartsWith(Global.httpProtocol))
if (string.IsNullOrEmpty(subid) && (str.StartsWith(Global.httpsProtocol) || str.StartsWith(Global.httpProtocol)))
{
if (AddSubItem(ref config, str) == 0)
{
@@ -750,40 +750,41 @@ namespace v2rayN.Handler
vmessItem.subid = subid;
if (vmessItem.configType == (int)EConfigType.Vmess)
{
if (AddServer(ref config, vmessItem, -1) == 0)
if (AddServer(ref config, vmessItem, -1, false) == 0)
{
countServers++;
}
}
else if (vmessItem.configType == (int)EConfigType.Shadowsocks)
{
if (AddShadowsocksServer(ref config, vmessItem, -1) == 0)
if (AddShadowsocksServer(ref config, vmessItem, -1, false) == 0)
{
countServers++;
}
}
else if (vmessItem.configType == (int)EConfigType.Socks)
{
if (AddSocksServer(ref config, vmessItem, -1) == 0)
if (AddSocksServer(ref config, vmessItem, -1, false) == 0)
{
countServers++;
}
}
else if (vmessItem.configType == (int)EConfigType.Trojan)
{
if (AddTrojanServer(ref config, vmessItem, -1) == 0)
if (AddTrojanServer(ref config, vmessItem, -1, false) == 0)
{
countServers++;
}
}
else if (vmessItem.configType == (int)EConfigType.VLESS)
{
if (AddVlessServer(ref config, vmessItem, -1) == 0)
if (AddVlessServer(ref config, vmessItem, -1, false) == 0)
{
countServers++;
}
}
}
ToJsonFile(config);
return countServers;
}
@@ -796,12 +797,9 @@ namespace v2rayN.Handler
public static int AddSubItem(ref Config config, string url)
{
//already exists
foreach (SubItem sub in config.subItem)
if (config.subItem.FindIndex(e => e.url == url) >= 0)
{
if (url == sub.url)
{
return 0;
}
return 0;
}
SubItem subItem = new SubItem
@@ -831,7 +829,7 @@ namespace v2rayN.Handler
{
if (Utils.IsNullOrEmpty(sub.id))
{
sub.id = Utils.GetGUID();
sub.id = Utils.GetGUID(false);
}
}
@@ -847,6 +845,7 @@ namespace v2rayN.Handler
/// <returns></returns>
public static int RemoveServerViaSubid(ref Config config, string subid)
{
var indexId = config.indexId();
if (Utils.IsNullOrEmpty(subid) || config.vmess.Count <= 0)
{
return -1;
@@ -859,6 +858,8 @@ namespace v2rayN.Handler
}
}
SetIndex(ref config, indexId);
ToJsonFile(config);
return 0;
}
@@ -869,6 +870,7 @@ namespace v2rayN.Handler
{
return -1;
}
var propertyName = string.Empty;
switch (name)
{
case EServerColName.configType:
@@ -877,28 +879,30 @@ namespace v2rayN.Handler
case EServerColName.port:
case EServerColName.security:
case EServerColName.network:
case EServerColName.streamSecurity:
case EServerColName.testResult:
propertyName = name.ToString();
break;
case EServerColName.subRemarks:
propertyName = "subid";
break;
default:
return -1;
}
string itemId = config.getItemId();
var indexId = config.indexId();
var items = config.vmess.AsQueryable();
if (asc)
{
config.vmess = items.OrderBy(name.ToString()).ToList();
config.vmess = items.OrderBy(propertyName).ToList();
}
else
{
config.vmess = items.OrderByDescending(name.ToString()).ToList();
config.vmess = items.OrderByDescending(propertyName).ToList();
}
var index_ = config.vmess.FindIndex(it => it.getItemId() == itemId);
if (index_ >= 0)
{
config.index = index_;
}
SetIndex(ref config, indexId);
ToJsonFile(config);
return 0;
@@ -911,9 +915,8 @@ namespace v2rayN.Handler
/// <param name="vmessItem"></param>
/// <param name="index"></param>
/// <returns></returns>
public static int AddVlessServer(ref Config config, VmessItem vmessItem, int index)
public static int AddVlessServer(ref Config config, VmessItem vmessItem, int index, bool toFile = true)
{
vmessItem.configVersion = 2;
vmessItem.configType = (int)EConfigType.VLESS;
vmessItem.address = vmessItem.address.TrimEx();
@@ -936,24 +939,107 @@ namespace v2rayN.Handler
}
else
{
//添加
if (Utils.IsNullOrEmpty(vmessItem.allowInsecure))
{
vmessItem.allowInsecure = config.defAllowInsecure.ToString();
}
config.vmess.Add(vmessItem);
if (config.vmess.Count == 1)
{
config.index = 0;
Global.reloadV2ray = true;
}
AddServerCommon(ref config, vmessItem);
}
ToJsonFile(config);
if (toFile)
{
ToJsonFile(config);
}
return 0;
}
public static int DedupServerList(ref Config config)
{
var indexId = config.indexId();
List<Mode.VmessItem> source = config.vmess;
bool keepOlder = config.keepOlderDedupl;
List<Mode.VmessItem> list = new List<Mode.VmessItem>();
if (!keepOlder) source.Reverse(); // Remove the early items first
bool _isAdded(Mode.VmessItem o, Mode.VmessItem n)
{
return o.configVersion == n.configVersion &&
o.configType == n.configType &&
o.address == n.address &&
o.port == n.port &&
o.id == n.id &&
o.alterId == n.alterId &&
o.security == n.security &&
o.network == n.network &&
o.headerType == n.headerType &&
o.requestHost == n.requestHost &&
o.path == n.path &&
o.streamSecurity == n.streamSecurity;
// skip (will remove) different remarks
}
foreach (Mode.VmessItem item in source)
{
if (!list.Exists(i => _isAdded(i, item)))
{
list.Add(item);
}
}
if (!keepOlder) list.Reverse();
config.vmess = list;
SetIndex(ref config, indexId);
return 0;
}
public static int AddServerCommon(ref Config config, VmessItem vmessItem)
{
vmessItem.indexId = Utils.GetGUID(false);
vmessItem.configVersion = 2;
if (Utils.IsNullOrEmpty(vmessItem.allowInsecure))
{
vmessItem.allowInsecure = config.defAllowInsecure.ToString();
}
if (!Utils.IsNullOrEmpty(vmessItem.network) && !Global.networks.Contains(vmessItem.network))
{
vmessItem.network = Global.DefaultNetwork;
}
config.vmess.Add(vmessItem);
if (config.vmess.Count == 1)
{
config.index = 0;
Global.reloadV2ray = true;
}
return 0;
}
public static int SetIndex(ref Config config, string indexId)
{
var index_ = config.FindIndexId(indexId);
if (config.index == index_)
{
return 0;
}
else if (index_ >= 0)
{
config.index = index_;
}
else
{
if (config.vmess.Count > 0)
{
config.index = 0;
}
else
{
config.index = -1;
}
}
Global.reloadV2ray = true;
return 0;
}
#endregion
#region UI
@@ -1033,6 +1119,13 @@ namespace v2rayN.Handler
else
{
config.routings.Add(item);
int indexLocked = config.routings.FindIndex(it => it.locked == true);
if (indexLocked != -1)
{
var itemLocked = Utils.DeepCopy(config.routings[indexLocked]);
config.routings.RemoveAt(indexLocked);
config.routings.Add(itemLocked);
}
}
ToJsonFile(config);
@@ -1057,6 +1150,10 @@ namespace v2rayN.Handler
{
return -1;
}
if (routingItem.rules == null)
{
routingItem.rules = new List<RulesItem>();
}
if (blReplace)
{
routingItem.rules.Clear();
@@ -1167,36 +1264,45 @@ namespace v2rayN.Handler
if (config.routings.Count(it => it.locked != true) <= 0)
{
//Global
var item1 = new RoutingItem();
item1.remarks = "全局(Global)";
item1.url = string.Empty;
item1.rules = new List<RulesItem>();
string result1 = Utils.GetEmbedText(Global.CustomRoutingFileName + "global");
AddBatchRoutingRules(ref item1, result1);
config.routings.Add(item1);
//Bypass the mainland
var item2 = new RoutingItem();
item2.remarks = "绕过大陆(Whitelist)";
item2.url = string.Empty;
item2.rules = new List<RulesItem>();
string result2 = Utils.GetEmbedText(Global.CustomRoutingFileName + "white");
AddBatchRoutingRules(ref item2, result2);
var item2 = new RoutingItem()
{
remarks = "绕过大陆(Whitelist)",
url = string.Empty,
};
AddBatchRoutingRules(ref item2, Utils.GetEmbedText(Global.CustomRoutingFileName + "white"));
config.routings.Add(item2);
//Blacklist
var item3 = new RoutingItem()
{
remarks = "黑名单(Blacklist)",
url = string.Empty,
};
AddBatchRoutingRules(ref item3, Utils.GetEmbedText(Global.CustomRoutingFileName + "black"));
config.routings.Add(item3);
//Global
var item1 = new RoutingItem()
{
remarks = "全局(Global)",
url = string.Empty,
};
AddBatchRoutingRules(ref item1, Utils.GetEmbedText(Global.CustomRoutingFileName + "global"));
config.routings.Add(item1);
config.routingIndex = 0;
}
if (GetLockedRoutingItem(ref config) == null)
{
var item1 = new RoutingItem();
item1.remarks = "locked";
item1.url = string.Empty;
item1.rules = new List<RulesItem>();
item1.locked = true;
string result1 = Utils.GetEmbedText(Global.CustomRoutingFileName + "locked");
AddBatchRoutingRules(ref item1, result1);
var item1 = new RoutingItem()
{
remarks = "locked",
url = string.Empty,
locked = true,
};
AddBatchRoutingRules(ref item1, Utils.GetEmbedText(Global.CustomRoutingFileName + "locked"));
config.routings.Add(item1);
}

View File

@@ -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
/// </summary>
class DownloadHandle
{
public event EventHandler<ResultEventArgs> AbsoluteCompleted;
public event EventHandler<ResultEventArgs> UpdateCompleted;
public event ErrorEventHandler Error;
public string DownloadFileName
{
get
{
return "v2ray-windows.zip";
}
}
public class ResultEventArgs : EventArgs
{
@@ -50,154 +32,6 @@ namespace v2rayN.Handler
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;
}
}
/// <summary>
/// 获取V2RayCore版本
/// </summary>
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(Utils.GetDownloadFileName(url)));
}
catch (Exception ex)
{
@@ -274,7 +108,7 @@ namespace v2rayN.Handler
if (e.Error == null
|| Utils.IsNullOrEmpty(e.Error.ToString()))
{
((WebClientEx)sender).Dispose();
TimeSpan ts = (DateTime.Now - totalDatetime);
string speed = string.Format("{0} M/s", (totalBytesToReceive / ts.TotalMilliseconds / 1000).ToString("#0.0"));
UpdateCompleted(this, new ResultEventArgs(true, speed.PadLeft(8, ' ')));
@@ -297,7 +131,7 @@ namespace v2rayN.Handler
/// DownloadString
/// </summary>
/// <param name="url"></param>
public void WebDownloadString(string url)
public void WebDownloadString(string url, WebProxy webProxy, string userAgent)
{
string source = string.Empty;
try
@@ -305,6 +139,17 @@ namespace v2rayN.Handler
Utils.SetSecurityProtocol();
WebClientEx ws = new WebClientEx();
if (webProxy != null)
{
ws.Proxy = webProxy;
}
if (Utils.IsNullOrEmpty(userAgent))
{
userAgent = $"{Utils.GetVersion(false)}";
}
ws.Headers.Add("user-agent", userAgent);
ws.DownloadStringCompleted += Ws_DownloadStringCompleted;
ws.DownloadStringAsync(new Uri(url));
}
@@ -354,7 +199,35 @@ namespace v2rayN.Handler
return string.Empty;
}
}
#endregion
public WebClientEx DownloadDataAsync(string url, WebProxy webProxy, int downloadTimeout)
{
WebClientEx ws = new WebClientEx();
try
{
Utils.SetSecurityProtocol();
UpdateCompleted?.Invoke(this, new ResultEventArgs(false, UIRes.I18N("Downloading")));
progressPercentage = -1;
totalBytesToReceive = 0;
DownloadTimeout = downloadTimeout;
if (webProxy != null)
{
ws.Proxy = webProxy;
}
ws.DownloadProgressChanged += ws_DownloadProgressChanged;
ws.DownloadDataCompleted += ws_DownloadFileCompleted;
ws.DownloadDataAsync(new Uri(url));
}
catch (Exception ex)
{
Utils.SaveLog(ex.Message, ex);
Error?.Invoke(this, new ErrorEventArgs(ex));
}
return ws;
}
}
}

View File

@@ -1,5 +1,8 @@
using System;
using System.Drawing;
using System.IO;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using v2rayN.Base;
using v2rayN.Mode;
@@ -9,7 +12,7 @@ namespace v2rayN.Handler
class MainFormHandler
{
private static MainFormHandler instance;
Action<bool, string> updateUI;
Action<bool, string> _updateUI;
//private DownloadHandle downloadHandle2;
//private Config _config;
@@ -48,9 +51,23 @@ namespace v2rayN.Handler
Graphics graphics = Graphics.FromImage(bitmap);
SolidBrush drawBrush = new SolidBrush(color);
graphics.FillEllipse(drawBrush, new Rectangle(0, 0, width, height));
int zoom = 16;
graphics.DrawImage(new Bitmap(Properties.Resources.notify, width - zoom, width - zoom), zoom / 2, zoom / 2);
var customIcon = false;
if (config.enableRoutingAdvanced)
{
var item = config.routings[config.routingIndex];
if (!Utils.IsNullOrEmpty(item.customIcon) && File.Exists(item.customIcon))
{
graphics.FillRectangle(drawBrush, new Rectangle(0, 0, width, height));
graphics.DrawImage(new Bitmap(item.customIcon), 0, 0);
customIcon = true;
}
}
if (!customIcon)
{
graphics.FillEllipse(drawBrush, new Rectangle(0, 0, width, height));
int zoom = 16;
graphics.DrawImage(new Bitmap(Properties.Resources.notify, width - zoom, width - zoom), zoom / 2, zoom / 2);
}
Icon createdIcon = Icon.FromHandle(bitmap.GetHicon());
@@ -166,103 +183,83 @@ namespace v2rayN.Handler
return counter;
}
public void UpdateSubscriptionProcess(Config config, Action<bool, string> update)
public void BackupGuiNConfig(Config config, bool auto = false)
{
updateUI = update;
updateUI(false, UIRes.I18N("MsgUpdateSubscriptionStart"));
if (config.subItem == null || config.subItem.Count <= 0)
string fileName = $"guiNConfig_{DateTime.Now.ToString("yyyy_MM_dd_HH_mm_ss_fff")}.json";
if (auto)
{
updateUI(false, UIRes.I18N("MsgNoValidSubscription"));
return;
fileName = Utils.GetTempPath(fileName);
}
for (int k = 1; k <= config.subItem.Count; k++)
else
{
string id = config.subItem[k - 1].id.TrimEx();
string url = config.subItem[k - 1].url.TrimEx();
string hashCode = $"{k}->";
if (config.subItem[k - 1].enabled == false)
SaveFileDialog fileDialog = new SaveFileDialog
{
continue;
}
if (Utils.IsNullOrEmpty(id) || Utils.IsNullOrEmpty(url))
{
updateUI(false, $"{hashCode}{UIRes.I18N("MsgNoValidSubscription")}");
continue;
}
DownloadHandle downloadHandle3 = new DownloadHandle();
downloadHandle3.UpdateCompleted += (sender2, args) =>
{
if (args.Success)
{
updateUI(false, $"{hashCode}{UIRes.I18N("MsgGetSubscriptionSuccessfully")}");
string result = Utils.Base64Decode(args.Msg);
if (Utils.IsNullOrEmpty(result))
{
updateUI(false, $"{hashCode}{UIRes.I18N("MsgSubscriptionDecodingFailed")}");
return;
}
ConfigHandler.RemoveServerViaSubid(ref config, id);
updateUI(false, $"{hashCode}{UIRes.I18N("MsgClearSubscription")}");
// RefreshServers();
int ret = MainFormHandler.Instance.AddBatchServers(config, result, id);
if (ret > 0)
{
// RefreshServers();
}
else
{
updateUI(false, $"{hashCode}{UIRes.I18N("MsgFailedImportSubscription")}");
}
updateUI(true, $"{hashCode}{UIRes.I18N("MsgUpdateSubscriptionEnd")}");
}
else
{
updateUI(false, args.Msg);
}
FileName = fileName,
Filter = "guiNConfig|*.json",
FilterIndex = 2,
RestoreDirectory = true
};
downloadHandle3.Error += (sender2, args) =>
if (fileDialog.ShowDialog() != DialogResult.OK)
{
updateUI(false, args.GetException().Message);
};
downloadHandle3.WebDownloadString(url);
updateUI(false, $"{hashCode}{UIRes.I18N("MsgStartGettingSubscriptions")}");
return;
}
fileName = fileDialog.FileName;
}
}
public void BackupGuiNConfig(Config config)
{
SaveFileDialog fileDialog = new SaveFileDialog
{
Filter = "guiNConfig|*.json",
FilterIndex = 2,
RestoreDirectory = true
};
if (fileDialog.ShowDialog() != DialogResult.OK)
{
return;
}
string fileName = fileDialog.FileName;
if (Utils.IsNullOrEmpty(fileName))
{
return;
}
if (Utils.ToJsonFile(config, fileName) == 0)
var ret = Utils.ToJsonFile(config, fileName);
if (!auto)
{
UI.Show(UIRes.I18N("OperationSuccess"));
}
else
{
UI.ShowWarning(UIRes.I18N("OperationFailed"));
if (ret == 0)
{
UI.Show(UIRes.I18N("OperationSuccess"));
}
else
{
UI.ShowWarning(UIRes.I18N("OperationFailed"));
}
}
}
public void UpdateTask(Config config, Action<bool, string> update)
{
_updateUI = update;
Task.Run(() => UpdateTaskRun(config));
}
private void UpdateTaskRun(Config config)
{
var updateHandle = new UpdateHandle();
while (true)
{
Utils.SaveLog("UpdateTaskRun");
Thread.Sleep(60000);
if (config.autoUpdateInterval <= 0)
{
continue;
}
updateHandle.UpdateGeoFile("geosite", config, (bool success, string msg) =>
{
_updateUI(false, msg);
if (success)
Utils.SaveLog("geosite" + msg);
});
Thread.Sleep(60000);
updateHandle.UpdateGeoFile("geoip", config, (bool success, string msg) =>
{
_updateUI(false, msg);
if (success)
Utils.SaveLog("geoip" + msg);
});
Thread.Sleep(1000 * 3600 * config.autoUpdateInterval);
}
}
}
}
}

View File

@@ -30,203 +30,25 @@ namespace v2rayN.Handler
string url = string.Empty;
VmessItem item = config.vmess[index];
if (item.configType == (int)EConfigType.Vmess)
{
VmessQRCode vmessQRCode = new VmessQRCode
{
v = item.configVersion.ToString(),
ps = item.remarks.TrimEx(), //备注也许很长 ;
add = item.address,
port = item.port.ToString(),
id = item.id,
aid = item.alterId.ToString(),
scy = item.security,
net = item.network,
type = item.headerType,
host = item.requestHost,
path = item.path,
tls = item.streamSecurity,
sni = item.sni
};
url = Utils.ToJson(vmessQRCode);
url = Utils.Base64Encode(url);
url = string.Format("{0}{1}", Global.vmessProtocol, url);
}
else if (item.configType == (int)EConfigType.Shadowsocks)
{
string remark = string.Empty;
if (!Utils.IsNullOrEmpty(item.remarks))
{
remark = "#" + Utils.UrlEncode(item.remarks);
}
url = string.Format("{0}:{1}@{2}:{3}",
item.security,
item.id,
item.address,
item.port);
url = Utils.Base64Encode(url);
url = string.Format("{0}{1}{2}", Global.ssProtocol, url, remark);
}
else if (item.configType == (int)EConfigType.Socks)
{
string remark = string.Empty;
if (!Utils.IsNullOrEmpty(item.remarks))
{
remark = "#" + Utils.UrlEncode(item.remarks);
}
url = string.Format("{0}:{1}@{2}:{3}",
item.security,
item.id,
item.address,
item.port);
url = Utils.Base64Encode(url);
url = string.Format("{0}{1}{2}", Global.socksProtocol, url, remark);
}
else if (item.configType == (int)EConfigType.Trojan)
{
string remark = string.Empty;
if (!Utils.IsNullOrEmpty(item.remarks))
{
remark = "#" + Utils.UrlEncode(item.remarks);
}
string query = string.Empty;
if (!Utils.IsNullOrEmpty(item.sni))
{
query = string.Format("?sni={0}", Utils.UrlEncode(item.sni));
}
url = string.Format("{0}@{1}:{2}",
item.id,
GetIpv6(item.address),
item.port);
url = string.Format("{0}{1}{2}{3}", Global.trojanProtocol, url, query, remark);
}
else if (item.configType == (int)EConfigType.VLESS)
{
string remark = string.Empty;
if (!Utils.IsNullOrEmpty(item.remarks))
{
remark = "#" + Utils.UrlEncode(item.remarks);
}
var dicQuery = new Dictionary<string, string>();
if (!Utils.IsNullOrEmpty(item.flow))
{
dicQuery.Add("flow", item.flow);
}
if (!Utils.IsNullOrEmpty(item.security))
{
dicQuery.Add("encryption", item.security);
}
else
{
dicQuery.Add("encryption", "none");
}
if (!Utils.IsNullOrEmpty(item.streamSecurity))
{
dicQuery.Add("security", item.streamSecurity);
}
else
{
dicQuery.Add("security", "none");
}
if (!Utils.IsNullOrEmpty(item.sni))
{
dicQuery.Add("sni", item.sni);
}
if (!Utils.IsNullOrEmpty(item.network))
{
dicQuery.Add("type", item.network);
}
else
{
dicQuery.Add("type", "tcp");
}
switch (item.network)
{
case "tcp":
if (!Utils.IsNullOrEmpty(item.headerType))
{
dicQuery.Add("headerType", item.headerType);
}
else
{
dicQuery.Add("headerType", "none");
}
if (!Utils.IsNullOrEmpty(item.requestHost))
{
dicQuery.Add("host", Utils.UrlEncode(item.requestHost));
}
break;
case "kcp":
if (!Utils.IsNullOrEmpty(item.headerType))
{
dicQuery.Add("headerType", item.headerType);
}
else
{
dicQuery.Add("headerType", "none");
}
if (!Utils.IsNullOrEmpty(item.path))
{
dicQuery.Add("seed", Utils.UrlEncode(item.path));
}
break;
case "ws":
if (!Utils.IsNullOrEmpty(item.requestHost))
{
dicQuery.Add("host", Utils.UrlEncode(item.requestHost));
}
if (!Utils.IsNullOrEmpty(item.path))
{
dicQuery.Add("path", Utils.UrlEncode(item.path));
}
break;
case "http":
case "h2":
dicQuery["type"] = "http";
if (!Utils.IsNullOrEmpty(item.requestHost))
{
dicQuery.Add("host", Utils.UrlEncode(item.requestHost));
}
if (!Utils.IsNullOrEmpty(item.path))
{
dicQuery.Add("path", Utils.UrlEncode(item.path));
}
break;
case "quic":
if (!Utils.IsNullOrEmpty(item.headerType))
{
dicQuery.Add("headerType", item.headerType);
}
else
{
dicQuery.Add("headerType", "none");
}
dicQuery.Add("quicSecurity", Utils.UrlEncode(item.requestHost));
dicQuery.Add("key", Utils.UrlEncode(item.path));
break;
case "grpc":
if (!Utils.IsNullOrEmpty(item.path))
{
dicQuery.Add("serviceName", Utils.UrlEncode(item.path));
}
break;
}
string query = "?" + string.Join("&", dicQuery.Select(x => x.Key + "=" + x.Value).ToArray());
url = string.Format("{0}@{1}:{2}",
item.id,
GetIpv6(item.address),
item.port);
url = string.Format("{0}{1}{2}{3}", Global.vlessProtocol, url, query, remark);
}
else
switch (item.configType)
{
case (int)EConfigType.Vmess:
url = ShareVmess(item);
break;
case (int)EConfigType.Shadowsocks:
url = ShareShadowsocks(item);
break;
case (int)EConfigType.Socks:
url = ShareSocks(item);
break;
case (int)EConfigType.Trojan:
url = ShareTrojan(item);
break;
case (int)EConfigType.VLESS:
url = ShareVLESS(item);
break;
default:
break;
}
return url;
}
@@ -236,10 +58,246 @@ namespace v2rayN.Handler
}
}
private static string ShareVmess(VmessItem item)
{
string url = string.Empty;
VmessQRCode vmessQRCode = new VmessQRCode
{
v = item.configVersion.ToString(),
ps = item.remarks.TrimEx(), //备注也许很长 ;
add = item.address,
port = item.port.ToString(),
id = item.id,
aid = item.alterId.ToString(),
scy = item.security,
net = item.network,
type = item.headerType,
host = item.requestHost,
path = item.path,
tls = item.streamSecurity,
sni = item.sni,
alpn = Utils.List2String(item.alpn)
};
url = Utils.ToJson(vmessQRCode);
url = Utils.Base64Encode(url);
url = string.Format("{0}{1}", Global.vmessProtocol, url);
return url;
}
private static string ShareShadowsocks(VmessItem item)
{
string url = string.Empty;
string remark = string.Empty;
if (!Utils.IsNullOrEmpty(item.remarks))
{
remark = "#" + Utils.UrlEncode(item.remarks);
}
//url = string.Format("{0}:{1}@{2}:{3}",
// item.security,
// item.id,
// item.address,
// item.port);
//url = Utils.Base64Encode(url);
//new Sip002
var pw = Utils.Base64Encode($"{item.security}:{item.id}");
url = $"{pw}@{GetIpv6(item.address)}:{ item.port}";
url = string.Format("{0}{1}{2}", Global.ssProtocol, url, remark);
return url;
}
private static string ShareSocks(VmessItem item)
{
string url = string.Empty;
string remark = string.Empty;
if (!Utils.IsNullOrEmpty(item.remarks))
{
remark = "#" + Utils.UrlEncode(item.remarks);
}
//url = string.Format("{0}:{1}@{2}:{3}",
// item.security,
// item.id,
// item.address,
// item.port);
//url = Utils.Base64Encode(url);
//new
var pw = Utils.Base64Encode($"{item.security}:{item.id}");
url = $"{pw}@{GetIpv6(item.address)}:{ item.port}";
url = string.Format("{0}{1}{2}", Global.socksProtocol, url, remark);
return url;
}
private static string ShareTrojan(VmessItem item)
{
string url = string.Empty;
string remark = string.Empty;
if (!Utils.IsNullOrEmpty(item.remarks))
{
remark = "#" + Utils.UrlEncode(item.remarks);
}
var dicQuery = new Dictionary<string, string>();
GetStdTransport(item, null, ref dicQuery);
string query = "?" + string.Join("&", dicQuery.Select(x => x.Key + "=" + x.Value).ToArray());
url = string.Format("{0}@{1}:{2}",
item.id,
GetIpv6(item.address),
item.port);
url = string.Format("{0}{1}{2}{3}", Global.trojanProtocol, url, query, remark);
return url;
}
private static string ShareVLESS(VmessItem item)
{
string url = string.Empty;
string remark = string.Empty;
if (!Utils.IsNullOrEmpty(item.remarks))
{
remark = "#" + Utils.UrlEncode(item.remarks);
}
var dicQuery = new Dictionary<string, string>();
if (!Utils.IsNullOrEmpty(item.security))
{
dicQuery.Add("encryption", item.security);
}
else
{
dicQuery.Add("encryption", "none");
}
GetStdTransport(item, "none", ref dicQuery);
string query = "?" + string.Join("&", dicQuery.Select(x => x.Key + "=" + x.Value).ToArray());
url = string.Format("{0}@{1}:{2}",
item.id,
GetIpv6(item.address),
item.port);
url = string.Format("{0}{1}{2}{3}", Global.vlessProtocol, url, query, remark);
return url;
}
private static string GetIpv6(string address)
{
return Utils.IsIpv6(address) ? $"[{address}]" : address;
}
private static int GetStdTransport(VmessItem item, string securityDef, ref Dictionary<string, string> dicQuery)
{
if (!Utils.IsNullOrEmpty(item.flow))
{
dicQuery.Add("flow", item.flow);
}
if (!Utils.IsNullOrEmpty(item.streamSecurity))
{
dicQuery.Add("security", item.streamSecurity);
}
else
{
if (securityDef != null)
{
dicQuery.Add("security", securityDef);
}
}
if (!Utils.IsNullOrEmpty(item.sni))
{
dicQuery.Add("sni", item.sni);
}
if (item.alpn != null && item.alpn.Count > 0)
{
dicQuery.Add("alpn", Utils.UrlEncode(Utils.List2String(item.alpn)));
}
if (!Utils.IsNullOrEmpty(item.network))
{
dicQuery.Add("type", item.network);
}
else
{
dicQuery.Add("type", "tcp");
}
switch (item.network)
{
case "tcp":
if (!Utils.IsNullOrEmpty(item.headerType))
{
dicQuery.Add("headerType", item.headerType);
}
else
{
dicQuery.Add("headerType", "none");
}
if (!Utils.IsNullOrEmpty(item.requestHost))
{
dicQuery.Add("host", Utils.UrlEncode(item.requestHost));
}
break;
case "kcp":
if (!Utils.IsNullOrEmpty(item.headerType))
{
dicQuery.Add("headerType", item.headerType);
}
else
{
dicQuery.Add("headerType", "none");
}
if (!Utils.IsNullOrEmpty(item.path))
{
dicQuery.Add("seed", Utils.UrlEncode(item.path));
}
break;
case "ws":
if (!Utils.IsNullOrEmpty(item.requestHost))
{
dicQuery.Add("host", Utils.UrlEncode(item.requestHost));
}
if (!Utils.IsNullOrEmpty(item.path))
{
dicQuery.Add("path", Utils.UrlEncode(item.path));
}
break;
case "http":
case "h2":
dicQuery["type"] = "http";
if (!Utils.IsNullOrEmpty(item.requestHost))
{
dicQuery.Add("host", Utils.UrlEncode(item.requestHost));
}
if (!Utils.IsNullOrEmpty(item.path))
{
dicQuery.Add("path", Utils.UrlEncode(item.path));
}
break;
case "quic":
if (!Utils.IsNullOrEmpty(item.headerType))
{
dicQuery.Add("headerType", item.headerType);
}
else
{
dicQuery.Add("headerType", "none");
}
dicQuery.Add("quicSecurity", Utils.UrlEncode(item.requestHost));
dicQuery.Add("key", Utils.UrlEncode(item.path));
break;
case "grpc":
if (!Utils.IsNullOrEmpty(item.path))
{
dicQuery.Add("serviceName", Utils.UrlEncode(item.path));
if (item.headerType == Global.GrpcgunMode || item.headerType == Global.GrpcmultiMode)
{
dicQuery.Add("mode", Utils.UrlEncode(item.headerType));
}
}
break;
}
return 0;
}
#endregion
#region ImportShareUrl
@@ -275,50 +333,7 @@ namespace v2rayN.Handler
}
else
{
vmessItem.configType = (int)EConfigType.Vmess;
result = result.Substring(Global.vmessProtocol.Length);
result = Utils.Base64Decode(result);
//转成Json
VmessQRCode vmessQRCode = Utils.FromJson<VmessQRCode>(result);
if (vmessQRCode == null)
{
msg = UIRes.I18N("FailedConversionConfiguration");
return null;
}
vmessItem.network = Global.DefaultNetwork;
vmessItem.headerType = Global.None;
vmessItem.configVersion = Utils.ToInt(vmessQRCode.v);
vmessItem.remarks = Utils.ToString(vmessQRCode.ps);
vmessItem.address = Utils.ToString(vmessQRCode.add);
vmessItem.port = Utils.ToInt(vmessQRCode.port);
vmessItem.id = Utils.ToString(vmessQRCode.id);
vmessItem.alterId = Utils.ToInt(vmessQRCode.aid);
vmessItem.security = Utils.ToString(vmessQRCode.scy);
if (!Utils.IsNullOrEmpty(vmessQRCode.scy))
{
vmessItem.security = vmessQRCode.scy;
}
else
{
vmessItem.security = Global.DefaultSecurity;
}
if (!Utils.IsNullOrEmpty(vmessQRCode.net))
{
vmessItem.network = vmessQRCode.net;
}
if (!Utils.IsNullOrEmpty(vmessQRCode.type))
{
vmessItem.headerType = vmessQRCode.type;
}
vmessItem.requestHost = Utils.ToString(vmessQRCode.host);
vmessItem.path = Utils.ToString(vmessQRCode.path);
vmessItem.streamSecurity = Utils.ToString(vmessQRCode.tls);
vmessItem.sni = Utils.ToString(vmessQRCode.sni);
vmessItem = ResolveVmess(result, out msg);
}
ConfigHandler.UpgradeServerVersion(ref vmessItem);
@@ -347,69 +362,27 @@ namespace v2rayN.Handler
{
msg = UIRes.I18N("ConfigurationFormatIncorrect");
vmessItem.configType = (int)EConfigType.Socks;
result = result.Substring(Global.socksProtocol.Length);
//remark
int indexRemark = result.IndexOf("#");
if (indexRemark > 0)
vmessItem = ResolveSocksNew(result);
if (vmessItem == null)
{
try
{
vmessItem.remarks = Utils.UrlDecode(result.Substring(indexRemark + 1, result.Length - indexRemark - 1));
}
catch { }
result = result.Substring(0, indexRemark);
vmessItem = ResolveSocks(result);
}
//part decode
int indexS = result.IndexOf("@");
if (indexS > 0)
if (vmessItem == null)
{
return null;
}
else
if (vmessItem.address.Length == 0 || vmessItem.port == 0)
{
result = Utils.Base64Decode(result);
return null;
}
string[] arr1 = result.Split('@');
if (arr1.Length != 2)
{
return null;
}
string[] arr21 = arr1[0].Split(':');
//string[] arr22 = arr1[1].Split(':');
int indexPort = arr1[1].LastIndexOf(":");
if (arr21.Length != 2 || indexPort < 0)
{
return null;
}
vmessItem.address = arr1[1].Substring(0, indexPort);
vmessItem.port = Utils.ToInt(arr1[1].Substring(indexPort + 1, arr1[1].Length - (indexPort + 1)));
vmessItem.security = arr21[0];
vmessItem.id = arr21[1];
vmessItem.configType = (int)EConfigType.Socks;
}
else if (result.StartsWith(Global.trojanProtocol))
{
msg = UIRes.I18N("ConfigurationFormatIncorrect");
vmessItem.configType = (int)EConfigType.Trojan;
Uri uri = new Uri(result);
vmessItem.address = uri.IdnHost;
vmessItem.port = uri.Port;
vmessItem.id = uri.UserInfo;
var qurery = HttpUtility.ParseQueryString(uri.Query);
vmessItem.sni = qurery["sni"] ?? "";
var remarks = uri.Fragment.Replace("#", "");
if (Utils.IsNullOrEmpty(remarks))
{
vmessItem.remarks = "NONE";
}
else
{
vmessItem.remarks = Utils.UrlDecode(remarks);
}
vmessItem = ResolveTrojan(result);
}
else if (result.StartsWith(Global.vlessProtocol))
{
@@ -432,6 +405,59 @@ namespace v2rayN.Handler
return vmessItem;
}
private static VmessItem ResolveVmess(string result, out string msg)
{
msg = string.Empty;
VmessItem vmessItem = new VmessItem();
vmessItem.configType = (int)EConfigType.Vmess;
result = result.Substring(Global.vmessProtocol.Length);
result = Utils.Base64Decode(result);
//转成Json
VmessQRCode vmessQRCode = Utils.FromJson<VmessQRCode>(result);
if (vmessQRCode == null)
{
msg = UIRes.I18N("FailedConversionConfiguration");
return null;
}
vmessItem.network = Global.DefaultNetwork;
vmessItem.headerType = Global.None;
vmessItem.configVersion = Utils.ToInt(vmessQRCode.v);
vmessItem.remarks = Utils.ToString(vmessQRCode.ps);
vmessItem.address = Utils.ToString(vmessQRCode.add);
vmessItem.port = Utils.ToInt(vmessQRCode.port);
vmessItem.id = Utils.ToString(vmessQRCode.id);
vmessItem.alterId = Utils.ToInt(vmessQRCode.aid);
vmessItem.security = Utils.ToString(vmessQRCode.scy);
if (!Utils.IsNullOrEmpty(vmessQRCode.scy))
{
vmessItem.security = vmessQRCode.scy;
}
else
{
vmessItem.security = Global.DefaultSecurity;
}
if (!Utils.IsNullOrEmpty(vmessQRCode.net))
{
vmessItem.network = vmessQRCode.net;
}
if (!Utils.IsNullOrEmpty(vmessQRCode.type))
{
vmessItem.headerType = vmessQRCode.type;
}
vmessItem.requestHost = Utils.ToString(vmessQRCode.host);
vmessItem.path = Utils.ToString(vmessQRCode.path);
vmessItem.streamSecurity = Utils.ToString(vmessQRCode.tls);
vmessItem.sni = Utils.ToString(vmessQRCode.sni);
vmessItem.alpn = Utils.String2List(vmessQRCode.alpn);
return vmessItem;
}
private static VmessItem ResolveVmess4Kitsunebi(string result)
{
@@ -467,98 +493,10 @@ namespace v2rayN.Handler
vmessItem.network = Global.DefaultNetwork;
vmessItem.headerType = Global.None;
vmessItem.remarks = "Alien";
vmessItem.alterId = 0;
return vmessItem;
}
private static VmessItem ResolveSip002(string result)
{
Uri parsedUrl;
try
{
parsedUrl = new Uri(result);
}
catch (UriFormatException)
{
return null;
}
VmessItem server = new VmessItem
{
remarks = parsedUrl.GetComponents(UriComponents.Fragment, UriFormat.Unescaped),
address = parsedUrl.IdnHost,
port = parsedUrl.Port,
};
// parse base64 UserInfo
string rawUserInfo = parsedUrl.GetComponents(UriComponents.UserInfo, UriFormat.Unescaped);
string base64 = rawUserInfo.Replace('-', '+').Replace('_', '/'); // Web-safe base64 to normal base64
string userInfo;
try
{
userInfo = Encoding.UTF8.GetString(Convert.FromBase64String(
base64.PadRight(base64.Length + (4 - base64.Length % 4) % 4, '=')));
}
catch (FormatException)
{
return null;
}
string[] userInfoParts = userInfo.Split(new char[] { ':' }, 2);
if (userInfoParts.Length != 2)
{
return null;
}
server.security = userInfoParts[0];
server.id = userInfoParts[1];
NameValueCollection queryParameters = HttpUtility.ParseQueryString(parsedUrl.Query);
if (queryParameters["plugin"] != null)
{
return null;
}
return server;
}
private static readonly Regex UrlFinder = new Regex(@"ss://(?<base64>[A-Za-z0-9+-/=_]+)(?:#(?<tag>\S+))?", RegexOptions.IgnoreCase);
private static readonly Regex DetailsParser = new Regex(@"^((?<method>.+?):(?<password>.*)@(?<hostname>.+?):(?<port>\d+?))$", RegexOptions.IgnoreCase);
private static VmessItem ResolveSSLegacy(string result)
{
var match = UrlFinder.Match(result);
if (!match.Success)
return null;
VmessItem server = new VmessItem();
var base64 = match.Groups["base64"].Value.TrimEnd('/');
var tag = match.Groups["tag"].Value;
if (!Utils.IsNullOrEmpty(tag))
{
server.remarks = Utils.UrlDecode(tag);
}
Match details;
try
{
details = DetailsParser.Match(Encoding.UTF8.GetString(Convert.FromBase64String(
base64.PadRight(base64.Length + (4 - base64.Length % 4) % 4, '='))));
}
catch (FormatException)
{
return null;
}
if (!details.Success)
return null;
server.security = details.Groups["method"].Value;
server.id = details.Groups["password"].Value;
server.address = details.Groups["hostname"].Value;
server.port = int.Parse(details.Groups["port"].Value);
return server;
}
private static readonly Regex StdVmessUserInfo = new Regex(
@"^(?<network>[a-z]+)(\+(?<streamSecurity>[a-z]+))?:(?<id>[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})-(?<alterId>[0-9]+)$");
private static VmessItem ResolveStdVmess(string result)
{
VmessItem i = new VmessItem
@@ -571,18 +509,13 @@ namespace v2rayN.Handler
i.address = u.IdnHost;
i.port = u.Port;
i.remarks = u.GetComponents(UriComponents.Fragment, UriFormat.Unescaped);
i.remarks = Utils.UrlDecode(u.GetComponents(UriComponents.Fragment, UriFormat.Unescaped));
var q = HttpUtility.ParseQueryString(u.Query);
var m = StdVmessUserInfo.Match(u.UserInfo);
if (!m.Success) return null;
i.id = m.Groups["id"].Value;
if (!int.TryParse(m.Groups["alterId"].Value, out int aid))
{
return null;
}
i.alterId = aid;
if (m.Groups["streamSecurity"].Success)
{
@@ -645,6 +578,178 @@ namespace v2rayN.Handler
return i;
}
private static VmessItem ResolveSip002(string result)
{
Uri parsedUrl;
try
{
parsedUrl = new Uri(result);
}
catch (UriFormatException)
{
return null;
}
VmessItem server = new VmessItem
{
remarks = Utils.UrlDecode(parsedUrl.GetComponents(UriComponents.Fragment, UriFormat.Unescaped)),
address = parsedUrl.IdnHost,
port = parsedUrl.Port,
};
// parse base64 UserInfo
string rawUserInfo = parsedUrl.GetComponents(UriComponents.UserInfo, UriFormat.Unescaped);
string userInfo = Utils.Base64Decode(rawUserInfo);
string[] userInfoParts = userInfo.Split(new char[] { ':' }, 2);
if (userInfoParts.Length != 2)
{
return null;
}
server.security = userInfoParts[0];
server.id = userInfoParts[1];
NameValueCollection queryParameters = HttpUtility.ParseQueryString(parsedUrl.Query);
if (queryParameters["plugin"] != null)
{
return null;
}
return server;
}
private static readonly Regex UrlFinder = new Regex(@"ss://(?<base64>[A-Za-z0-9+-/=_]+)(?:#(?<tag>\S+))?", RegexOptions.IgnoreCase);
private static readonly Regex DetailsParser = new Regex(@"^((?<method>.+?):(?<password>.*)@(?<hostname>.+?):(?<port>\d+?))$", RegexOptions.IgnoreCase);
private static VmessItem ResolveSSLegacy(string result)
{
var match = UrlFinder.Match(result);
if (!match.Success)
return null;
VmessItem server = new VmessItem();
var base64 = match.Groups["base64"].Value.TrimEnd('/');
var tag = match.Groups["tag"].Value;
if (!Utils.IsNullOrEmpty(tag))
{
server.remarks = Utils.UrlDecode(tag);
}
Match details;
try
{
details = DetailsParser.Match(Utils.Base64Decode(base64));
}
catch (FormatException)
{
return null;
}
if (!details.Success)
return null;
server.security = details.Groups["method"].Value;
server.id = details.Groups["password"].Value;
server.address = details.Groups["hostname"].Value;
server.port = int.Parse(details.Groups["port"].Value);
return server;
}
private static readonly Regex StdVmessUserInfo = new Regex(
@"^(?<network>[a-z]+)(\+(?<streamSecurity>[a-z]+))?:(?<id>[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})$");
private static VmessItem ResolveSocks(string result)
{
VmessItem vmessItem = new VmessItem();
vmessItem.configType = (int)EConfigType.Socks;
result = result.Substring(Global.socksProtocol.Length);
//remark
int indexRemark = result.IndexOf("#");
if (indexRemark > 0)
{
try
{
vmessItem.remarks = Utils.UrlDecode(result.Substring(indexRemark + 1, result.Length - indexRemark - 1));
}
catch { }
result = result.Substring(0, indexRemark);
}
//part decode
int indexS = result.IndexOf("@");
if (indexS > 0)
{
}
else
{
result = Utils.Base64Decode(result);
}
string[] arr1 = result.Split('@');
if (arr1.Length != 2)
{
return null;
}
string[] arr21 = arr1[0].Split(':');
//string[] arr22 = arr1[1].Split(':');
int indexPort = arr1[1].LastIndexOf(":");
if (arr21.Length != 2 || indexPort < 0)
{
return null;
}
vmessItem.address = arr1[1].Substring(0, indexPort);
vmessItem.port = Utils.ToInt(arr1[1].Substring(indexPort + 1, arr1[1].Length - (indexPort + 1)));
vmessItem.security = arr21[0];
vmessItem.id = arr21[1];
return vmessItem;
}
private static VmessItem ResolveSocksNew(string result)
{
Uri parsedUrl;
try
{
parsedUrl = new Uri(result);
}
catch (UriFormatException)
{
return null;
}
VmessItem server = new VmessItem
{
remarks = Utils.UrlDecode(parsedUrl.GetComponents(UriComponents.Fragment, UriFormat.Unescaped)),
address = parsedUrl.IdnHost,
port = parsedUrl.Port,
};
// parse base64 UserInfo
string rawUserInfo = parsedUrl.GetComponents(UriComponents.UserInfo, UriFormat.Unescaped);
string userInfo = Utils.Base64Decode(rawUserInfo);
string[] userInfoParts = userInfo.Split(new char[] { ':' }, 2);
if (userInfoParts.Length == 2)
{
server.security = userInfoParts[0];
server.id = userInfoParts[1];
}
return server;
}
private static VmessItem ResolveTrojan(string result)
{
VmessItem item = new VmessItem
{
configType = (int)EConfigType.Trojan
};
Uri url = new Uri(result);
item.address = url.IdnHost;
item.port = url.Port;
item.remarks = Utils.UrlDecode(url.GetComponents(UriComponents.Fragment, UriFormat.Unescaped));
item.id = url.UserInfo;
var query = HttpUtility.ParseQueryString(url.Query);
ResolveStdTransport(query, ref item);
return item;
}
private static VmessItem ResolveStdVLESS(string result)
{
VmessItem item = new VmessItem
@@ -657,15 +762,23 @@ namespace v2rayN.Handler
item.address = url.IdnHost;
item.port = url.Port;
item.remarks = url.GetComponents(UriComponents.Fragment, UriFormat.Unescaped);
item.remarks = Utils.UrlDecode(url.GetComponents(UriComponents.Fragment, UriFormat.Unescaped));
item.id = url.UserInfo;
var query = HttpUtility.ParseQueryString(url.Query);
item.flow = query["flow"] ?? "";
item.security = query["encryption"] ?? "none";
item.streamSecurity = query["security"] ?? "";
ResolveStdTransport(query, ref item);
return item;
}
private static int ResolveStdTransport(NameValueCollection query, ref VmessItem item)
{
item.flow = query["flow"] ?? "";
item.streamSecurity = query["security"] ?? "";
item.sni = query["sni"] ?? "";
item.alpn = Utils.String2List(Utils.UrlDecode(query["alpn"] ?? ""));
item.network = query["type"] ?? "tcp";
switch (item.network)
{
@@ -698,12 +811,12 @@ namespace v2rayN.Handler
break;
case "grpc":
item.path = Utils.UrlDecode(query["serviceName"] ?? "");
item.headerType = Utils.UrlDecode(query["mode"] ?? Global.GrpcgunMode);
break;
default:
return null;
break;
}
return item;
return 0;
}
#endregion

View File

@@ -13,17 +13,34 @@ namespace v2rayN.Handler
{
private Config _config;
private V2rayHandler _v2rayHandler;
private List<int> _selecteds;
private List<ServerTestItem> _selecteds;
Action<int, string> _updateFunc;
public SpeedtestHandler(ref Config config)
{
_config = config;
}
public SpeedtestHandler(ref Config config, ref V2rayHandler v2rayHandler, List<int> selecteds, string actionType, Action<int, string> update)
{
_config = config;
_v2rayHandler = v2rayHandler;
_selecteds = Utils.DeepCopy(selecteds);
//_selecteds = Utils.DeepCopy(selecteds);
_updateFunc = update;
_selecteds = new List<ServerTestItem>();
foreach (var it in selecteds)
{
_selecteds.Add(new ServerTestItem()
{
selected = it,
indexId = config.vmess[it].indexId,
address = config.vmess[it].address,
port = config.vmess[it].port,
configType = config.vmess[it].configType
});
}
if (actionType == "ping")
{
Task.Run(() => RunPing());
@@ -42,19 +59,19 @@ namespace v2rayN.Handler
}
}
private void RunPingSub(Action<int> updateFun)
private void RunPingSub(Action<ServerTestItem> updateFun)
{
try
{
foreach (int index in _selecteds)
foreach (var it in _selecteds)
{
if (_config.vmess[index].configType == (int)EConfigType.Custom)
if (it.configType == (int)EConfigType.Custom)
{
continue;
}
try
{
updateFun(index);
updateFun(it);
}
catch (Exception ex)
{
@@ -73,18 +90,22 @@ namespace v2rayN.Handler
private void RunPing()
{
RunPingSub((int index) =>
RunPingSub((ServerTestItem it) =>
{
long time = Utils.Ping(_config.vmess[index].address);
long time = Utils.Ping(it.address);
var index = _config.FindIndexId(it.indexId);
if (index < 0) return;
_updateFunc(index, FormatOut(time, "ms"));
});
}
private void RunTcping()
{
RunPingSub((int index) =>
RunPingSub((ServerTestItem it) =>
{
int time = GetTcpingTime(_config.vmess[index].address, _config.vmess[index].port);
int time = GetTcpingTime(it.address, it.port);
var index = _config.FindIndexId(it.indexId);
if (index < 0) return;
_updateFunc(index, FormatOut(time, "ms"));
});
}
@@ -99,16 +120,19 @@ namespace v2rayN.Handler
pid = _v2rayHandler.LoadV2rayConfigString(_config, _selecteds);
if (pid < 0)
{
_updateFunc(_selecteds[0], UIRes.I18N("OperationFailed"));
_updateFunc(_selecteds[0].selected, UIRes.I18N("OperationFailed"));
return;
}
//Thread.Sleep(5000);
int httpPort = _config.GetLocalPort("speedtest");
List<Task> tasks = new List<Task>();
foreach (int itemIndex in _selecteds)
foreach (var it in _selecteds)
{
if (_config.vmess[itemIndex].configType == (int)EConfigType.Custom)
if (it.configType == (int)EConfigType.Custom)
{
continue;
}
if (it.port <= 0)
{
continue;
}
@@ -116,11 +140,13 @@ namespace v2rayN.Handler
{
try
{
WebProxy webProxy = new WebProxy(Global.Loopback, httpPort + itemIndex);
WebProxy webProxy = new WebProxy(Global.Loopback, it.port);
int responseTime = -1;
string status = GetRealPingTime(_config.speedPingTestUrl, webProxy, out responseTime);
string output = Utils.IsNullOrEmpty(status) ? FormatOut(responseTime, "ms") : FormatOut(status, "");
_updateFunc(itemIndex, output);
string status = GetRealPingTime(_config.constItem.speedPingTestUrl, webProxy, out responseTime);
string output = Utils.IsNullOrEmpty(status) ? FormatOut(responseTime, "ms") : status;
var index = _config.FindIndexId(it.indexId);
if (index < 0) return;
_updateFunc(index, output);
}
catch (Exception ex)
{
@@ -153,7 +179,7 @@ namespace v2rayN.Handler
{
WebProxy webProxy = new WebProxy(Global.Loopback, httpPort);
int responseTime = -1;
string status = GetRealPingTime(Global.AvailabilityTestUrl, webProxy, out responseTime);
string status = GetRealPingTime(Global.SpeedPingTestUrl, webProxy, out responseTime);
bool noError = Utils.IsNullOrEmpty(status);
return noError ? responseTime : -1;
}
@@ -174,7 +200,7 @@ namespace v2rayN.Handler
private void RunSpeedTest()
{
int testCounter = 0;
string testIndexId = string.Empty;
int pid = -1;
if (_config.vmess.Count <= 0)
@@ -185,42 +211,46 @@ namespace v2rayN.Handler
pid = _v2rayHandler.LoadV2rayConfigString(_config, _selecteds);
if (pid < 0)
{
_updateFunc(_selecteds[0], UIRes.I18N("OperationFailed"));
_updateFunc(_selecteds[0].selected, UIRes.I18N("OperationFailed"));
return;
}
string url = _config.speedTestUrl;
string url = _config.constItem.speedTestUrl;
DownloadHandle downloadHandle2 = new DownloadHandle();
downloadHandle2.UpdateCompleted += (sender2, args) =>
{
_updateFunc(testCounter, args.Msg);
var index = _config.FindIndexId(testIndexId);
if (index < 0) return;
_updateFunc(index, args.Msg);
};
downloadHandle2.Error += (sender2, args) =>
{
_updateFunc(testCounter, args.GetException().Message);
var index = _config.FindIndexId(testIndexId);
if (index < 0) return;
_updateFunc(index, args.GetException().Message);
};
var timeout = 10;
foreach (int itemIndex in _selecteds)
foreach (var it in _selecteds)
{
if (itemIndex >= _config.vmess.Count)
{
break;
}
if (_config.vmess[itemIndex].configType == (int)EConfigType.Custom)
if (it.configType == (int)EConfigType.Custom)
{
continue;
}
testCounter = itemIndex;
int httpPort = _config.GetLocalPort("speedtest");
WebProxy webProxy = new WebProxy(Global.Loopback, httpPort + itemIndex);
var ws = downloadHandle2.DownloadFileAsync(url, webProxy, timeout - 2);
if (it.port <= 0)
{
continue;
}
testIndexId = it.indexId;
if (_config.FindIndexId(it.indexId) < 0) continue;
WebProxy webProxy = new WebProxy(Global.Loopback, it.port);
var ws = downloadHandle2.DownloadDataAsync(url, webProxy, timeout - 2);
Thread.Sleep(1000 * timeout);
ws.CancelAsync();
ws.Dispose();
Thread.Sleep(1000 * 2);
}

View File

@@ -0,0 +1,477 @@
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<bool, string> _updateFunc;
private Config _config;
public event EventHandler<ResultEventArgs> 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<bool, string> update)
{
_config = config;
_updateFunc = update;
var url = string.Empty;
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(Utils.GetDownloadFileName(url));
fileName = Utils.UrlEncode(fileName);
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"));
url = args.Msg;
askToDownload(downloadHandle, url, true);
}
else
{
_updateFunc(false, args.Msg);
}
};
_updateFunc(false, string.Format(UIRes.I18N("MsgStartUpdating"), "v2rayN"));
CheckUpdateAsync("v2rayN");
}
public void CheckUpdateCore(string type, Config config, Action<bool, string> update)
{
_config = config;
_updateFunc = update;
var url = string.Empty;
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, url);
}
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"));
url = args.Msg;
askToDownload(downloadHandle, url, true);
}
else
{
_updateFunc(false, args.Msg);
}
};
_updateFunc(false, string.Format(UIRes.I18N("MsgStartUpdating"), "Core"));
CheckUpdateAsync(type);
}
public void UpdateSubscriptionProcess(Config config, bool blProxy, Action<bool, string> 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 userAgent = config.subItem[k - 1].userAgent.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);
};
WebProxy webProxy = blProxy ? new WebProxy(Global.Loopback, _config.GetLocalPort(Global.InboundHttp)) : null;
downloadHandle3.WebDownloadString(url, webProxy, userAgent);
_updateFunc(false, $"{hashCode}{UIRes.I18N("MsgStartGettingSubscriptions")}");
}
}
public void UpdateGeoFile(string geoName, Config config, Action<bool, string> update)
{
_config = config;
_updateFunc = update;
var url = string.Format(geoUrl, geoName);
DownloadHandle downloadHandle = null;
if (downloadHandle == null)
{
downloadHandle = new DownloadHandle();
downloadHandle.UpdateCompleted += (sender2, args) =>
{
if (args.Success)
{
_updateFunc(false, string.Format(UIRes.I18N("MsgDownloadGeoFileSuccessfully"), geoName));
try
{
string fileName = Utils.GetPath(Utils.GetDownloadFileName(url));
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);
};
}
askToDownload(downloadHandle, url, false);
}
#region private
private async void CheckUpdateAsync(string type)
{
try
{
Utils.SetSecurityProtocol();
WebRequestHandler webRequestHandler = new WebRequestHandler
{
AllowAutoRedirect = false
};
if (httpProxyTest() > 0)
{
int httpPort = _config.GetLocalPort(Global.InboundHttp);
WebProxy webProxy = new WebProxy(Global.Loopback, httpPort);
webRequestHandler.Proxy = webProxy;
}
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);
}
}
/// <summary>
/// 获取V2RayCore版本
/// </summary>
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, bool blAsk)
{
bool blDownload = false;
if (blAsk)
{
if (UI.ShowYesNo(string.Format(UIRes.I18N("DownloadYesNo"), url)) == DialogResult.Yes)
{
blDownload = true;
}
}
else
{
blDownload = true;
}
if (blDownload)
{
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
}
}

View File

@@ -2,6 +2,8 @@
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.NetworkInformation;
using v2rayN.Mode;
namespace v2rayN.Handler
@@ -189,6 +191,7 @@ namespace v2rayN.Handler
&& v2rayConfig.routing.rules != null)
{
v2rayConfig.routing.domainStrategy = config.domainStrategy;
v2rayConfig.routing.domainMatcher = config.domainMatcher;
if (config.enableRoutingAdvanced)
{
@@ -196,7 +199,10 @@ namespace v2rayN.Handler
{
foreach (var item in config.routings[config.routingIndex].rules)
{
routingUserRule(item, ref v2rayConfig);
if (item.enabled)
{
routingUserRule(item, ref v2rayConfig);
}
}
}
}
@@ -249,8 +255,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))
@@ -355,7 +365,14 @@ namespace v2rayN.Handler
usersItem.id = config.id();
usersItem.alterId = config.alterId();
usersItem.email = Global.userEMail;
usersItem.security = config.security();
if (Global.vmessSecuritys.Contains(config.security()))
{
usersItem.security = config.security();
}
else
{
usersItem.security = Global.DefaultSecurity;
}
//Mux
outbound.mux.enabled = config.muxEnabled;
@@ -469,7 +486,6 @@ namespace v2rayN.Handler
}
//远程服务器用户ID
usersItem.id = config.id();
usersItem.alterId = 0;
usersItem.flow = string.Empty;
usersItem.email = Global.userEMail;
usersItem.encryption = config.security();
@@ -487,7 +503,7 @@ namespace v2rayN.Handler
{
if (Utils.IsNullOrEmpty(config.flow()))
{
usersItem.flow = "xtls-rprx-origin";
usersItem.flow = Global.xtlsFlows[1];
}
else
{
@@ -517,10 +533,27 @@ namespace v2rayN.Handler
serversItem.address = config.address();
serversItem.port = config.port();
serversItem.password = config.id();
serversItem.flow = string.Empty;
serversItem.ota = false;
serversItem.level = 1;
//if xtls
if (config.streamSecurity() == Global.StreamSecurityX)
{
if (Utils.IsNullOrEmpty(config.flow()))
{
serversItem.flow = Global.xtlsFlows[1];
}
else
{
serversItem.flow = config.flow().Replace("splice", "direct");
}
outbound.mux.enabled = false;
outbound.mux.concurrency = -1;
}
outbound.mux.enabled = false;
outbound.mux.concurrency = -1;
@@ -562,7 +595,8 @@ namespace v2rayN.Handler
TlsSettings tlsSettings = new TlsSettings
{
allowInsecure = config.allowInsecure()
allowInsecure = config.allowInsecure(),
alpn = config.alpn()
};
if (!string.IsNullOrWhiteSpace(sni))
{
@@ -582,7 +616,8 @@ namespace v2rayN.Handler
TlsSettings xtlsSettings = new TlsSettings
{
allowInsecure = config.allowInsecure()
allowInsecure = config.allowInsecure(),
alpn = config.alpn()
};
if (!string.IsNullOrWhiteSpace(sni))
{
@@ -704,8 +739,9 @@ namespace v2rayN.Handler
break;
case "grpc":
var grpcSettings = new GrpcSettings();
grpcSettings.serviceName = config.path();
grpcSettings.multiMode = (config.headerType() == Global.GrpcmultiMode ? true : false);
streamSettings.grpcSettings = grpcSettings;
break;
default:
@@ -1001,7 +1037,6 @@ namespace v2rayN.Handler
else if (config.configType() == (int)EConfigType.VLESS)
{
inbound.protocol = Global.vlessProtocolLite;
usersItem.alterId = 0;
usersItem.flow = config.flow();
inbound.settings.decryption = config.security();
}
@@ -1359,7 +1394,7 @@ namespace v2rayN.Handler
#region Gen speedtest config
public static string GenerateClientSpeedtestConfigString(Config config, List<int> selecteds, out string msg)
public static string GenerateClientSpeedtestConfigString(Config config, List<ServerTestItem> selecteds, out string msg)
{
try
{
@@ -1390,6 +1425,12 @@ namespace v2rayN.Handler
msg = UIRes.I18N("FailedGenDefaultConfiguration");
return "";
}
List<IPEndPoint> lstIpEndPoints = null;
try
{
lstIpEndPoints = new List<IPEndPoint>(IPGlobalProperties.GetIPGlobalProperties().GetActiveTcpListeners());
}
catch { }
log(configCopy, ref v2rayConfig, false);
//routing(config, ref v2rayConfig);
@@ -1398,19 +1439,44 @@ namespace v2rayN.Handler
v2rayConfig.inbounds.Clear(); // Remove "proxy" service for speedtest, avoiding port conflicts.
int httpPort = configCopy.GetLocalPort("speedtest");
foreach (int index in selecteds)
foreach (var it in selecteds)
{
if (configCopy.vmess[index].configType == (int)EConfigType.Custom)
if (it.configType == (int)EConfigType.Custom)
{
continue;
}
if (it.port <= 0)
{
continue;
}
configCopy.index = index;
//find unuse port
var port = httpPort;
for (int k = httpPort; k < 65536; k++)
{
if (lstIpEndPoints != null && lstIpEndPoints.FindIndex(_it => _it.Port == k) >= 0)
{
continue;
}
//found
port = k;
httpPort = port + 1;
break;
}
//Port In Used
if (lstIpEndPoints != null && lstIpEndPoints.FindIndex(_it => _it.Port == port) >= 0)
{
continue;
}
configCopy.index = it.selected;
it.port = port;
Inbounds inbound = new Inbounds
{
listen = Global.Loopback,
port = httpPort + index,
port = port,
protocol = Global.InboundHttp
};
inbound.tag = Global.InboundHttp + inbound.port.ToString();

View File

@@ -73,7 +73,7 @@ namespace v2rayN.Handler
/// 新建进程载入V2ray配置文件字符串
/// 返回新进程pid。
/// </summary>
public int LoadV2rayConfigString(Config config, List<int> _selecteds)
public int LoadV2rayConfigString(Config config, List<ServerTestItem> _selecteds)
{
int pid = -1;
string configStr = V2rayConfigHandler.GenerateClientSpeedtestConfigString(config, _selecteds, out string msg);

View File

@@ -166,12 +166,11 @@ namespace v2rayN.HttpProxyHandler
}
if (type == ESysProxyType.ForcedChange)
{
SysProxyHandle.SetIEProxy(true, true, $"{Global.Loopback}:{port}");
var strExceptions = $"{config.constItem.defIEProxyExceptions};{config.systemProxyExceptions}";
SysProxyHandle.SetIEProxy(true, $"{Global.Loopback}:{port}", strExceptions);
}
else if (type == ESysProxyType.ForcedClear)
{
//TODO To be verified
Utils.RegWriteValue(@"Software\Microsoft\Windows\CurrentVersion\Internet Settings", "ProxyEnable", 0);
SysProxyHandle.ResetIEProxy();
}
else if (type == ESysProxyType.Unchanged)
@@ -184,5 +183,17 @@ namespace v2rayN.HttpProxyHandler
}
return true;
}
public static void ResetIEProxy4WindowsShutDown()
{
try
{
//TODO To be verified
Utils.RegWriteValue(@"Software\Microsoft\Windows\CurrentVersion\Internet Settings", "ProxyEnable", 0);
}
catch
{
}
}
}
}

View File

@@ -82,6 +82,16 @@ namespace v2rayN.HttpProxyHandler
ExecSysproxy(arguments);
}
public static void SetIEProxy(bool global, string strProxy, string strExceptions)
{
string arguments = global
? $"global {strProxy} {strExceptions}"
: $"pac {strProxy}";
ExecSysproxy(arguments);
}
// set system proxy to 1 (null) (null) (null)
public static bool ResetIEProxy()
{

View File

@@ -76,21 +76,6 @@ namespace v2rayN.Mode
get; set;
}
/// <summary>
/// 自定义服务器下载测速url
/// </summary>
public string speedTestUrl
{
get; set;
}
/// <summary>
/// 自定义“服务器真连接延迟”测试url
/// </summary>
public string speedPingTestUrl
{
get; set;
}
/// <summary>
/// 允许来自局域网的连接
/// </summary>
@@ -161,6 +146,10 @@ namespace v2rayN.Mode
{
get; set;
}
public string domainMatcher
{
get; set;
}
public int routingIndex
{
get; set;
@@ -183,6 +172,23 @@ namespace v2rayN.Mode
get; set;
}
/// <summary>
/// systemProxyExceptions
/// </summary>
public string systemProxyExceptions
{
get; set;
}
public int autoUpdateInterval
{
get; set;
} = 0;
public ConstItem constItem
{
get; set;
}
#region
public string address()
@@ -240,7 +246,7 @@ namespace v2rayN.Mode
}
public string network()
{
if (index < 0 || Utils.IsNullOrEmpty(vmess[index].network))
if (index < 0 || Utils.IsNullOrEmpty(vmess[index].network) || !Global.networks.Contains(vmess[index].network))
{
return Global.DefaultNetwork;
}
@@ -354,6 +360,37 @@ namespace v2rayN.Mode
}
return vmess[index].sni.TrimEx();
}
public List<string> alpn()
{
if (index < 0)
{
return null;
}
if (vmess[index].alpn != null && vmess[index].alpn.Count > 0)
{
return vmess[index].alpn;
}
else
{
return null;
}
}
public string indexId()
{
if (index < 0)
{
return string.Empty;
}
return vmess[index].indexId.TrimEx();
}
public int FindIndexId(string indexId)
{
if (string.IsNullOrEmpty(indexId))
{
return -1;
}
return vmess.FindIndex(it => it.indexId == indexId);
}
#endregion
}
@@ -363,6 +400,7 @@ namespace v2rayN.Mode
{
public VmessItem()
{
indexId = string.Empty;
configVersion = 1;
address = string.Empty;
port = 0;
@@ -449,6 +487,10 @@ namespace v2rayN.Mode
itemId = Utils.Base64Encode(itemId);
return itemId;
}
public string indexId
{
get; set;
}
/// <summary>
/// 版本(现在=2)
@@ -533,7 +575,7 @@ namespace v2rayN.Mode
}
/// <summary>
/// 底层传输安全
/// 传输安全
/// </summary>
public string streamSecurity
{
@@ -587,6 +629,13 @@ namespace v2rayN.Mode
{
get; set;
}
/// <summary>
/// tls alpn
/// </summary>
public List<string> alpn
{
get; set;
}
}
[Serializable]
@@ -708,12 +757,23 @@ namespace v2rayN.Mode
/// enable
/// </summary>
public bool enabled { get; set; } = true;
/// <summary>
///
/// </summary>
public string userAgent
{
get; set;
} = string.Empty;
}
[Serializable]
public class UIItem
{
public bool enableAutoAdjustMainLvColWidth
{
get; set;
}
public System.Drawing.Size mainSize
{
@@ -725,4 +785,27 @@ namespace v2rayN.Mode
get; set;
}
}
[Serializable]
public class ConstItem
{
/// <summary>
/// 自定义服务器下载测速url
/// </summary>
public string speedTestUrl
{
get; set;
}
/// <summary>
/// 自定义“服务器真连接延迟”测试url
/// </summary>
public string speedPingTestUrl
{
get; set;
}
public string defIEProxyExceptions
{
get; set;
}
}
}

View File

@@ -10,6 +10,7 @@ namespace v2rayN.Mode
port,
security,
network,
streamSecurity,
subRemarks,
testResult,

View File

@@ -27,6 +27,9 @@ namespace v2rayN.Mode
{
get; set;
}
public string customIcon
{
get; set;
}
}
}

View File

@@ -19,7 +19,9 @@ namespace v2rayN.Mode
public List<string> domain { get; set; }
public List<string> protocol { get; set; }
public bool enabled { get; set; } = true;
}
}

View File

@@ -0,0 +1,29 @@
using System;
namespace v2rayN.Mode
{
[Serializable]
class ServerTestItem
{
public int selected
{
get; set;
}
public string indexId
{
get; set;
}
public string address
{
get; set;
}
public int port
{
get; set;
}
public int configType
{
get; set;
}
}
}

View File

@@ -25,7 +25,7 @@ namespace v2rayN.Mode
/// 统计需要, 空对象
/// </summary>
public Stats stats { get; set; }
/// </summary>
public API api { get; set; }
@@ -133,14 +133,14 @@ namespace v2rayN.Mode
/// </summary>
public List<UsersItem> clients { get; set; }
/// <summary>
/// VLESS
/// </summary>
public string decryption { get; set; }
public bool allowTransparent { get; set; }
}
public class UsersItem
@@ -170,7 +170,7 @@ namespace v2rayN.Mode
/// <summary>
/// VLESS
/// </summary>
public string flow { get; set; }
public string flow { get; set; }
}
public class Sniffing
{
@@ -271,6 +271,11 @@ namespace v2rayN.Mode
/// </summary>
public int level { get; set; }
/// <summary>
/// trojan
/// </summary>
public string flow { get; set; }
/// <summary>
///
/// </summary>
@@ -332,6 +337,10 @@ namespace v2rayN.Mode
/// <summary>
///
/// </summary>
public string domainMatcher { get; set; }
/// <summary>
///
/// </summary>
public List<RulesItem> rules { get; set; }
}
@@ -395,10 +404,17 @@ namespace v2rayN.Mode
///
/// </summary>
public string serverName { get; set; }
/// <summary>
///
/// </summary>
public List<string> alpn
{
get; set;
}
}
public class TcpSettings
{
{
/// <summary>
/// 数据包头部伪装设置
/// </summary>
@@ -462,7 +478,7 @@ namespace v2rayN.Mode
}
public class WsSettings
{
{
/// <summary>
///
/// </summary>
@@ -518,6 +534,10 @@ namespace v2rayN.Mode
///
/// </summary>
public string serviceName { get; set; }
/// <summary>
///
/// </summary>
public bool multiMode { get; set; }
}
}

View File

@@ -2,61 +2,68 @@
namespace v2rayN.Mode
{
/// <summary>
/// https://github.com/2dust/v2rayN/wiki/
/// </summary>
[Serializable]
class VmessQRCode
{
/// <summary>
/// 版本
///
/// </summary>
public string v { get; set; } = string.Empty;
/// <summary>
/// 备注
///
/// </summary>
public string ps { get; set; } = string.Empty;
/// <summary>
/// VMess 远程服务器地址
///
/// </summary>
public string add { get; set; } = string.Empty;
/// <summary>
/// VMess 远程服务器端口
///
/// </summary>
public string port { get; set; } = string.Empty;
/// <summary>
/// VMess 远程服务器ID
///
/// </summary>
public string id { get; set; } = string.Empty;
/// <summary>
/// VMess 远程服务器额外ID
///
/// </summary>
public string aid { get; set; } = string.Empty;
/// <summary>
/// VMess Security
///
/// </summary>
public string scy { get; set; } = string.Empty;
/// <summary>
/// 传输协议tcp,kcp,ws
///
/// </summary>
public string net { get; set; } = string.Empty;
/// <summary>
/// 伪装类型
///
/// </summary>
public string type { get; set; } = string.Empty;
/// <summary>
/// 伪装的域名
///
/// </summary>
public string host { get; set; } = string.Empty;
/// <summary>
/// path
///
/// </summary>
public string path { get; set; } = string.Empty;
/// <summary>
/// 底层传输安全
/// TLS
/// </summary>
public string tls { get; set; } = string.Empty;
/// <summary>
/// SNI
/// TLS SNI
/// </summary>
public string sni { get; set; } = string.Empty;
/// <summary>
/// TLS alpn
/// </summary>
public string alpn { get; set; } = string.Empty;
}
}

View File

@@ -33,8 +33,8 @@ namespace v2rayN
if (!IsDuplicateInstance())
{
Utils.SaveLog("v2rayN start up " + Utils.GetVersion());
Logging.Setup();
Utils.SaveLog($"v2rayN start up | {Utils.GetVersion()} | {Utils.GetExePath()}");
//设置语言环境
string lang = Utils.RegReadValue(Global.MyRegPath, Global.MyRegKeyLanguage, "zh-Hans");
@@ -81,7 +81,7 @@ namespace v2rayN
string name = Utils.GetExePath(); // Allow different locations to run
name = name.Replace("\\", "/"); // https://stackoverflow.com/questions/20714120/could-not-find-a-part-of-the-path-error-while-creating-mutex
Global.mutexObj = new Mutex(false, name, out bool bCreatedNew);
return !bCreatedNew;
}

View File

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

View File

@@ -12,7 +12,7 @@ namespace v2rayN.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "14.0.0.0")]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.3.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));

View File

@@ -47,8 +47,8 @@ namespace v2rayN.Resx {
}
/// <summary>
/// 重写当前线程的 CurrentUICulture 属性
/// 重写当前线程的 CurrentUICulture 属性
/// 重写当前线程的 CurrentUICulture 属性,对
/// 使用此强类型资源类的所有资源查找执行重写
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
@@ -187,11 +187,11 @@ namespace v2rayN.Resx {
}
/// <summary>
/// 查找类似 Please fill in the correct format extra ID 的本地化字符串。
/// 查找类似 Please fill in the correct custom DNS 的本地化字符串。
/// </summary>
internal static string FillCorrectAlterId {
internal static string FillCorrectDNSText {
get {
return ResourceManager.GetString("FillCorrectAlterId", resourceCulture);
return ResourceManager.GetString("FillCorrectDNSText", resourceCulture);
}
}
@@ -330,6 +330,15 @@ namespace v2rayN.Resx {
}
}
/// <summary>
/// 查找类似 Custom Icon 的本地化字符串。
/// </summary>
internal static string LvCustomIcon {
get {
return ResourceManager.GetString("LvCustomIcon", resourceCulture);
}
}
/// <summary>
/// 查找类似 Security 的本地化字符串。
/// </summary>
@@ -384,6 +393,15 @@ namespace v2rayN.Resx {
}
}
/// <summary>
/// 查找类似 TLS 的本地化字符串。
/// </summary>
internal static string LvTLS {
get {
return ResourceManager.GetString("LvTLS", resourceCulture);
}
}
/// <summary>
/// 查找类似 Today download traffic 的本地化字符串。
/// </summary>
@@ -456,6 +474,15 @@ namespace v2rayN.Resx {
}
}
/// <summary>
/// 查找类似 Download GeoFile: {0} successfully 的本地化字符串。
/// </summary>
internal static string MsgDownloadGeoFileSuccessfully {
get {
return ResourceManager.GetString("MsgDownloadGeoFileSuccessfully", resourceCulture);
}
}
/// <summary>
/// 查找类似 Download Core successfully 的本地化字符串。
/// </summary>
@@ -483,6 +510,15 @@ namespace v2rayN.Resx {
}
}
/// <summary>
/// 查找类似 Informations (Filter : {0}) 的本地化字符串。
/// </summary>
internal static string MsgInformationTitle {
get {
return ResourceManager.GetString("MsgInformationTitle", resourceCulture);
}
}
/// <summary>
/// 查找类似 Please fill in the address (Url) 的本地化字符串。
/// </summary>
@@ -870,5 +906,122 @@ namespace v2rayN.Resx {
return ResourceManager.GetString("TestMeOutput", resourceCulture);
}
}
/// <summary>
/// 查找类似 *tcp camouflage type 的本地化字符串。
/// </summary>
internal static string TransportHeaderTypeTip1 {
get {
return ResourceManager.GetString("TransportHeaderTypeTip1", resourceCulture);
}
}
/// <summary>
/// 查找类似 *kcp camouflage type 的本地化字符串。
/// </summary>
internal static string TransportHeaderTypeTip2 {
get {
return ResourceManager.GetString("TransportHeaderTypeTip2", resourceCulture);
}
}
/// <summary>
/// 查找类似 *QUIC camouflage type 的本地化字符串。
/// </summary>
internal static string TransportHeaderTypeTip3 {
get {
return ResourceManager.GetString("TransportHeaderTypeTip3", resourceCulture);
}
}
/// <summary>
/// 查找类似 *grpc mode 的本地化字符串。
/// </summary>
internal static string TransportHeaderTypeTip4 {
get {
return ResourceManager.GetString("TransportHeaderTypeTip4", resourceCulture);
}
}
/// <summary>
/// 查找类似 *ws path 的本地化字符串。
/// </summary>
internal static string TransportPathTip1 {
get {
return ResourceManager.GetString("TransportPathTip1", resourceCulture);
}
}
/// <summary>
/// 查找类似 *h2 path 的本地化字符串。
/// </summary>
internal static string TransportPathTip2 {
get {
return ResourceManager.GetString("TransportPathTip2", resourceCulture);
}
}
/// <summary>
/// 查找类似 *QUIC key/Kcp seed 的本地化字符串。
/// </summary>
internal static string TransportPathTip3 {
get {
return ResourceManager.GetString("TransportPathTip3", resourceCulture);
}
}
/// <summary>
/// 查找类似 *grpc serviceName 的本地化字符串。
/// </summary>
internal static string TransportPathTip4 {
get {
return ResourceManager.GetString("TransportPathTip4", resourceCulture);
}
}
/// <summary>
/// 查找类似 *Kcp seed 的本地化字符串。
/// </summary>
internal static string TransportPathTip5 {
get {
return ResourceManager.GetString("TransportPathTip5", resourceCulture);
}
}
/// <summary>
/// 查找类似 *http host Separated by commas (,) 的本地化字符串。
/// </summary>
internal static string TransportRequestHostTip1 {
get {
return ResourceManager.GetString("TransportRequestHostTip1", resourceCulture);
}
}
/// <summary>
/// 查找类似 *ws host 的本地化字符串。
/// </summary>
internal static string TransportRequestHostTip2 {
get {
return ResourceManager.GetString("TransportRequestHostTip2", resourceCulture);
}
}
/// <summary>
/// 查找类似 *h2 host Separated by commas (,) 的本地化字符串。
/// </summary>
internal static string TransportRequestHostTip3 {
get {
return ResourceManager.GetString("TransportRequestHostTip3", resourceCulture);
}
}
/// <summary>
/// 查找类似 *QUIC securty 的本地化字符串。
/// </summary>
internal static string TransportRequestHostTip4 {
get {
return ResourceManager.GetString("TransportRequestHostTip4", resourceCulture);
}
}
}
}

View File

@@ -156,9 +156,6 @@
<data name="FailedReadConfiguration" xml:space="preserve">
<value>Failed to read configuration file</value>
</data>
<data name="FillCorrectAlterId" xml:space="preserve">
<value>Please fill in the correct format extra ID</value>
</data>
<data name="FillCorrectServerPort" xml:space="preserve">
<value>Please fill in the correct format server port</value>
</data>
@@ -388,4 +385,58 @@
<data name="AddBatchRoutingRulesYesNo" xml:space="preserve">
<value>Do you want to append rules? Choose yes to append, choose otherwise to replace</value>
</data>
<data name="MsgDownloadGeoFileSuccessfully" xml:space="preserve">
<value>Download GeoFile: {0} successfully</value>
</data>
<data name="MsgInformationTitle" xml:space="preserve">
<value>Informations (Filter : {0})</value>
</data>
<data name="LvCustomIcon" xml:space="preserve">
<value>Custom Icon</value>
</data>
<data name="FillCorrectDNSText" xml:space="preserve">
<value>Please fill in the correct custom DNS</value>
</data>
<data name="TransportPathTip1" xml:space="preserve">
<value>*ws path</value>
</data>
<data name="TransportPathTip2" xml:space="preserve">
<value>*h2 path</value>
</data>
<data name="TransportPathTip3" xml:space="preserve">
<value>*QUIC key/Kcp seed</value>
</data>
<data name="TransportPathTip4" xml:space="preserve">
<value>*grpc serviceName</value>
</data>
<data name="TransportRequestHostTip1" xml:space="preserve">
<value>*http host Separated by commas (,)</value>
</data>
<data name="TransportRequestHostTip2" xml:space="preserve">
<value>*ws host</value>
</data>
<data name="TransportRequestHostTip3" xml:space="preserve">
<value>*h2 host Separated by commas (,)</value>
</data>
<data name="TransportRequestHostTip4" xml:space="preserve">
<value>*QUIC securty</value>
</data>
<data name="TransportHeaderTypeTip1" xml:space="preserve">
<value>*tcp camouflage type</value>
</data>
<data name="TransportHeaderTypeTip2" xml:space="preserve">
<value>*kcp camouflage type</value>
</data>
<data name="TransportHeaderTypeTip3" xml:space="preserve">
<value>*QUIC camouflage type</value>
</data>
<data name="TransportHeaderTypeTip4" xml:space="preserve">
<value>*grpc mode</value>
</data>
<data name="LvTLS" xml:space="preserve">
<value>TLS</value>
</data>
<data name="TransportPathTip5" xml:space="preserve">
<value>*Kcp seed</value>
</data>
</root>

View File

@@ -156,9 +156,6 @@
<data name="FailedReadConfiguration" xml:space="preserve">
<value>读取配置文件失败</value>
</data>
<data name="FillCorrectAlterId" xml:space="preserve">
<value>请填写正确格式额外ID</value>
</data>
<data name="FillCorrectServerPort" xml:space="preserve">
<value>请填写正确格式服务器端口</value>
</data>
@@ -388,4 +385,58 @@
<data name="AddBatchRoutingRulesYesNo" xml:space="preserve">
<value>是否追加规则?选择是则追加,选择否则替换</value>
</data>
<data name="MsgDownloadGeoFileSuccessfully" xml:space="preserve">
<value>下载 GeoFile: {0} 成功</value>
</data>
<data name="MsgInformationTitle" xml:space="preserve">
<value>信息 (过滤器 : {0})</value>
</data>
<data name="LvCustomIcon" xml:space="preserve">
<value>自定义图标</value>
</data>
<data name="FillCorrectDNSText" xml:space="preserve">
<value>请填写正确的自定义DNS</value>
</data>
<data name="TransportPathTip1" xml:space="preserve">
<value>*ws path</value>
</data>
<data name="TransportPathTip2" xml:space="preserve">
<value>*h2 path</value>
</data>
<data name="TransportPathTip3" xml:space="preserve">
<value>*QUIC 加密密钥</value>
</data>
<data name="TransportPathTip4" xml:space="preserve">
<value>*grpc serviceName</value>
</data>
<data name="TransportRequestHostTip1" xml:space="preserve">
<value>*http host中间逗号(,)隔开</value>
</data>
<data name="TransportRequestHostTip2" xml:space="preserve">
<value>*ws host</value>
</data>
<data name="TransportRequestHostTip3" xml:space="preserve">
<value>*h2 host中间逗号(,)隔开</value>
</data>
<data name="TransportRequestHostTip4" xml:space="preserve">
<value>*QUIC 加密方式</value>
</data>
<data name="TransportHeaderTypeTip1" xml:space="preserve">
<value>*tcp伪装类型</value>
</data>
<data name="TransportHeaderTypeTip2" xml:space="preserve">
<value>*kcp伪装类型</value>
</data>
<data name="TransportHeaderTypeTip3" xml:space="preserve">
<value>*QUIC伪装类型</value>
</data>
<data name="TransportHeaderTypeTip4" xml:space="preserve">
<value>*grpc 模式</value>
</data>
<data name="LvTLS" xml:space="preserve">
<value>传输层安全</value>
</data>
<data name="TransportPathTip5" xml:space="preserve">
<value>*Kcp seed</value>
</data>
</root>

View File

@@ -47,7 +47,6 @@
"port": 10086,
"users": [{
"id": "a3482e88-686a-4a58-8126-99c9df64b7bf",
"alterId": 64,
"security": "auto"
}]
}],

View File

@@ -11,7 +11,6 @@
"clients": [{
"id": "23ad6b10-8d1a-40f7-8ad0-e3e35cd38297",
"level": 1,
"alterId": 64,
"email": "t@t.tt"
}]
},

View File

@@ -0,0 +1,29 @@
[
{
"outboundTag": "direct",
"protocol": [
"bittorrent"
]
},
{
"outboundTag": "block",
"domain": [
"geosite:category-ads-all"
]
},
{
"outboundTag": "proxy",
"ip": [
"geoip:telegram"
],
"domain": [
"geosite:gfw",
"geosite:greatfire",
"geosite:tld-!cn"
]
},
{
"port": "0-65535",
"outboundTag": "direct"
}
]

View File

@@ -0,0 +1,37 @@
using log4net;
using log4net.Appender;
using log4net.Core;
using log4net.Layout;
using log4net.Repository.Hierarchy;
namespace v2rayN.Tool
{
public class Logging
{
public static void Setup()
{
Hierarchy hierarchy = (Hierarchy)LogManager.GetRepository();
PatternLayout patternLayout = new PatternLayout();
patternLayout.ConversionPattern = "%date [%thread] %-5level %logger - %message%newline";
patternLayout.ActivateOptions();
RollingFileAppender roller = new RollingFileAppender();
roller.AppendToFile = true;
roller.RollingStyle = RollingFileAppender.RollingMode.Date;
roller.DatePattern = "yyyy-MM-dd'.txt'";
roller.File = Utils.GetPath(@"guiLogs\");
roller.Layout = patternLayout;
roller.StaticLogFileName = false;
roller.ActivateOptions();
hierarchy.Root.AddAppender(roller);
MemoryAppender memory = new MemoryAppender();
memory.ActivateOptions();
hierarchy.Root.AddAppender(memory);
hierarchy.Root.Level = Level.Info;
hierarchy.Configured = true;
}
}
}

View File

@@ -21,6 +21,7 @@ using System.Security.Principal;
using v2rayN.Base;
using Newtonsoft.Json.Linq;
using System.Web;
using log4net;
namespace v2rayN
{
@@ -47,8 +48,9 @@ namespace v2rayN
result = reader.ReadToEnd();
}
}
catch
catch (Exception ex)
{
SaveLog(ex.Message, ex);
}
return result;
}
@@ -69,8 +71,9 @@ namespace v2rayN
result = reader.ReadToEnd();
}
}
catch
catch (Exception ex)
{
SaveLog(ex.Message, ex);
}
return result;
}
@@ -108,8 +111,9 @@ namespace v2rayN
Formatting.Indented,
new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore });
}
catch
catch (Exception ex)
{
SaveLog(ex.Message, ex);
}
return result;
}
@@ -141,8 +145,9 @@ namespace v2rayN
}
result = 0;
}
catch
catch (Exception ex)
{
SaveLog(ex.Message, ex);
result = -1;
}
return result;
@@ -155,8 +160,10 @@ namespace v2rayN
JObject obj = JObject.Parse(strJson);
return obj;
}
catch
catch (Exception ex)
{
SaveLog(ex.Message, ex);
return null;
}
}
@@ -173,6 +180,10 @@ namespace v2rayN
{
try
{
if (lst == null)
{
return string.Empty;
}
if (wrap)
{
return string.Join("," + Environment.NewLine, lst.ToArray());
@@ -182,8 +193,9 @@ namespace v2rayN
return string.Join(",", lst.ToArray());
}
}
catch
catch (Exception ex)
{
SaveLog(ex.Message, ex);
return string.Empty;
}
}
@@ -199,8 +211,9 @@ namespace v2rayN
str = str.Replace(Environment.NewLine, "");
return new List<string>(str.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries));
}
catch
catch (Exception ex)
{
SaveLog(ex.Message, ex);
return new List<string>();
}
}
@@ -265,8 +278,9 @@ namespace v2rayN
{
return Convert.ToInt32(obj);
}
catch
catch (Exception ex)
{
SaveLog(ex.Message, ex);
return 0;
}
}
@@ -277,8 +291,9 @@ namespace v2rayN
{
return (obj == null ? string.Empty : obj.ToString());
}
catch
catch (Exception ex)
{
SaveLog(ex.Message, ex);
return string.Empty;
}
}
@@ -338,37 +353,7 @@ namespace v2rayN
return $"{string.Format("{0:f1}", result)} {unit}";
}
public static void DedupServerList(List<Mode.VmessItem> source, out List<Mode.VmessItem> result, bool keepOlder)
{
List<Mode.VmessItem> list = new List<Mode.VmessItem>();
if (!keepOlder) source.Reverse(); // Remove the early items first
bool _isAdded(Mode.VmessItem o, Mode.VmessItem n)
{
return o.configVersion == n.configVersion &&
o.configType == n.configType &&
o.address == n.address &&
o.port == n.port &&
o.id == n.id &&
o.alterId == n.alterId &&
o.security == n.security &&
o.network == n.network &&
o.headerType == n.headerType &&
o.requestHost == n.requestHost &&
o.path == n.path &&
o.streamSecurity == n.streamSecurity;
// skip (will remove) different remarks
}
foreach (Mode.VmessItem item in source)
{
if (!list.Exists(i => _isAdded(i, item)))
{
list.Add(item);
}
}
if (!keepOlder) list.Reverse();
result = list;
}
public static string UrlEncode(string url)
{
@@ -395,8 +380,9 @@ namespace v2rayN
int var1 = ToInt(oText);
return true;
}
catch
catch (Exception ex)
{
SaveLog(ex.Message, ex);
return false;
}
}
@@ -536,10 +522,11 @@ namespace v2rayN
try
{
string exePath = GetExePath();
RegWriteValue(autoRunRegPath, autoRunName, run ? exePath : "");
RegWriteValue(autoRunRegPath, autoRunName, run ? $"\"{exePath}\"" : "");
}
catch
catch (Exception ex)
{
SaveLog(ex.Message, ex);
}
}
@@ -553,13 +540,14 @@ namespace v2rayN
{
string value = RegReadValue(autoRunRegPath, autoRunName, "");
string exePath = GetExePath();
if (value?.Equals(exePath) == true)
if (value?.Equals(exePath) == true || value?.Equals($"\"{exePath}\"") == true)
{
return true;
}
}
catch
catch (Exception ex)
{
SaveLog(ex.Message, ex);
}
return false;
}
@@ -608,8 +596,9 @@ namespace v2rayN
return value;
}
}
catch
catch (Exception ex)
{
SaveLog(ex.Message, ex);
}
finally
{
@@ -633,14 +622,35 @@ namespace v2rayN
regKey?.SetValue(name, value);
}
}
catch
catch (Exception ex)
{
SaveLog(ex.Message, ex);
}
finally
{
regKey?.Close();
}
}
/// <summary>
/// 判断.Net Framework的Release是否符合
/// (.Net Framework 版本在4.0及以上)
/// </summary>
/// <param name="release">需要的版本4.6.2=394802;4.8=528040</param>
/// <returns></returns>
public static bool GetDotNetRelease(int release)
{
const string subkey = @"SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full\";
using (RegistryKey ndpKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32).OpenSubKey(subkey))
{
if (ndpKey != null && ndpKey.GetValue("Release") != null)
{
return (int)ndpKey.GetValue("Release") >= release ? true : false;
}
return false;
}
}
#endregion
#region
@@ -674,8 +684,9 @@ namespace v2rayN
}
}
}
catch
catch (Exception ex)
{
SaveLog(ex.Message, ex);
return -1;
}
return roundtripTime;
@@ -697,20 +708,54 @@ namespace v2rayN
lstIPAddress.Add(ipa.ToString());
}
}
catch
catch (Exception ex)
{
SaveLog(ex.Message, ex);
}
return lstIPAddress;
}
public static void SetSecurityProtocol()
{
ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3
| SecurityProtocolType.Tls
| SecurityProtocolType.Tls11
| SecurityProtocolType.Tls12;
string securityProtocolTls13 = RegReadValue(Global.MyRegPath, Global.MyRegKeySecurityProtocolTls13, "0");
if (securityProtocolTls13.Equals("1"))
{
ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3
| SecurityProtocolType.Tls
| SecurityProtocolType.Tls11
| SecurityProtocolType.Tls12
| SecurityProtocolType.Tls13;
}
else
{
ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3
| SecurityProtocolType.Tls
| SecurityProtocolType.Tls11
| SecurityProtocolType.Tls12;
}
ServicePointManager.DefaultConnectionLimit = 256;
}
public static bool PortInUse(int port)
{
bool inUse = false;
IPGlobalProperties ipProperties = IPGlobalProperties.GetIPGlobalProperties();
IPEndPoint[] ipEndPoints = ipProperties.GetActiveTcpListeners();
var lstIpEndPoints = new List<IPEndPoint>(IPGlobalProperties.GetIPGlobalProperties().GetActiveTcpListeners());
foreach (IPEndPoint endPoint in ipEndPoints)
{
if (endPoint.Port == port)
{
inUse = true;
break;
}
}
return inUse;
}
#endregion
#region
@@ -719,17 +764,26 @@ namespace v2rayN
/// 取得版本
/// </summary>
/// <returns></returns>
public static string GetVersion()
public static string GetVersion(bool blFull = true)
{
try
{
string location = GetExePath();
return string.Format("v2rayN - V{0} - {1}",
FileVersionInfo.GetVersionInfo(location).FileVersion.ToString(),
File.GetLastWriteTime(location).ToString("yyyy/MM/dd"));
if (blFull)
{
return string.Format("v2rayN - V{0} - {1}",
FileVersionInfo.GetVersionInfo(location).FileVersion.ToString(),
File.GetLastWriteTime(location).ToString("yyyy/MM/dd"));
}
else
{
return string.Format("v2rayN/{0}",
FileVersionInfo.GetVersionInfo(location).FileVersion.ToString());
}
}
catch
catch (Exception ex)
{
SaveLog(ex.Message, ex);
return string.Empty;
}
}
@@ -766,14 +820,15 @@ 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;
}
catch
catch (Exception ex)
{
SaveLog(ex.Message, ex);
}
return strData;
}
@@ -797,14 +852,22 @@ namespace v2rayN
/// 取得GUID
/// </summary>
/// <returns></returns>
public static string GetGUID()
public static string GetGUID(bool full = true)
{
try
{
return Guid.NewGuid().ToString("D");
if (full)
{
return Guid.NewGuid().ToString("D");
}
else
{
return BitConverter.ToInt64(Guid.NewGuid().ToByteArray(), 0).ToString();
}
}
catch
catch (Exception ex)
{
SaveLog(ex.Message, ex);
}
return string.Empty;
}
@@ -822,8 +885,9 @@ namespace v2rayN
//WindowsBuiltInRole可以枚举出很多权限例如系统用户、User、Guest等等
return windowsPrincipal.IsInRole(WindowsBuiltInRole.Administrator);
}
catch
catch (Exception ex)
{
SaveLog(ex.Message, ex);
return false;
}
}
@@ -832,6 +896,14 @@ namespace v2rayN
{
i.SubItems.Add(new ListViewItem.ListViewSubItem() { Name = name, Text = text });
}
public static string GetDownloadFileName(string url)
{
var fileName = System.IO.Path.GetFileName(url);
fileName += "_temp";
return fileName;
}
#endregion
#region TempPath
@@ -870,37 +942,14 @@ namespace v2rayN
public static void SaveLog(string strContent)
{
SaveLog("info", new Exception(strContent));
var logger = LogManager.GetLogger("Log1");
logger.Info(strContent);
}
public static void SaveLog(string strTitle, Exception ex)
{
try
{
string path = Path.Combine(StartupPath(), "guiLogs");
string FilePath = Path.Combine(path, DateTime.Now.ToString("yyyyMMdd") + ".txt");
if (!Directory.Exists(path))
{
Directory.CreateDirectory(path);
}
if (!File.Exists(FilePath))
{
FileStream FsCreate = new FileStream(FilePath, FileMode.Create);
FsCreate.Close();
FsCreate.Dispose();
}
FileStream FsWrite = new FileStream(FilePath, FileMode.Append, FileAccess.Write);
StreamWriter SwWrite = new StreamWriter(FsWrite);
string strContent = ex.ToString();
SwWrite.WriteLine(string.Format("{0}{1}[{2}]{3}", "--------------------------------", strTitle, DateTime.Now.ToString("HH:mm:ss"), "--------------------------------"));
SwWrite.Write(strContent);
SwWrite.WriteLine(Environment.NewLine);
SwWrite.WriteLine(" ");
SwWrite.Flush();
SwWrite.Close();
}
catch { }
var logger = LogManager.GetLogger("Log2");
logger.Debug(strTitle);
logger.Debug(ex);
}
#endregion
@@ -954,7 +1003,10 @@ namespace v2rayN
}
}
}
catch { }
catch (Exception ex)
{
SaveLog(ex.Message, ex);
}
return string.Empty;
}

View File

@@ -1,7 +1,7 @@
<?xml version="1.0"?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6"/>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8"/>
</startup>
</configuration>

View File

@@ -9,7 +9,7 @@
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>v2rayN</RootNamespace>
<AssemblyName>v2rayN</AssemblyName>
<TargetFrameworkVersion>v4.6</TargetFrameworkVersion>
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<TargetFrameworkProfile />
<IsWebBootstrapper>false</IsWebBootstrapper>
@@ -125,6 +125,12 @@
<Compile Include="Forms\BaseServerForm.Designer.cs">
<DependentUpon>BaseServerForm.cs</DependentUpon>
</Compile>
<Compile Include="Forms\MsgFilterSetForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Forms\MsgFilterSetForm.Designer.cs">
<DependentUpon>MsgFilterSetForm.cs</DependentUpon>
</Compile>
<Compile Include="Forms\RoutingRuleSettingDetailsForm.cs">
<SubType>Form</SubType>
</Compile>
@@ -137,7 +143,14 @@
<Compile Include="Forms\RoutingRuleSettingForm.Designer.cs">
<DependentUpon>RoutingRuleSettingForm.cs</DependentUpon>
</Compile>
<Compile Include="Forms\ServerTransportControl.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="Forms\ServerTransportControl.Designer.cs">
<DependentUpon>ServerTransportControl.cs</DependentUpon>
</Compile>
<Compile Include="Handler\ShareHandler.cs" />
<Compile Include="Handler\UpdateHandle.cs" />
<Compile Include="Mode\ComboItem.cs" />
<Compile Include="Forms\MainForm.cs">
<SubType>Form</SubType>
@@ -201,6 +214,7 @@
<Compile Include="Mode\ServerStatistics.cs" />
<Compile Include="Mode\SysproxyConfig.cs" />
<Compile Include="Mode\EConfigType.cs" />
<Compile Include="Mode\ServerTestItem.cs" />
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
@@ -249,6 +263,7 @@
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Tool\FileManager.cs" />
<Compile Include="Tool\Job.cs" />
<Compile Include="Tool\Logging.cs" />
<Compile Include="Tool\QueryableExtension.cs" />
<Compile Include="Tool\UIRes.cs" />
<Compile Include="Tool\UI.cs" />
@@ -292,6 +307,7 @@
</EmbeddedResource>
<EmbeddedResource Include="Forms\BaseServerForm.resx">
<DependentUpon>BaseServerForm.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="Forms\MainForm.resx">
<DependentUpon>MainForm.cs</DependentUpon>
@@ -301,6 +317,12 @@
<DependentUpon>MainForm.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="Forms\MsgFilterSetForm.resx">
<DependentUpon>MsgFilterSetForm.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Forms\MsgFilterSetForm.zh-Hans.resx">
<DependentUpon>MsgFilterSetForm.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Forms\OptionSettingForm.zh-Hans.resx">
<DependentUpon>OptionSettingForm.cs</DependentUpon>
</EmbeddedResource>
@@ -323,6 +345,12 @@
<EmbeddedResource Include="Forms\RoutingRuleSettingForm.zh-Hans.resx">
<DependentUpon>RoutingRuleSettingForm.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Forms\ServerTransportControl.resx">
<DependentUpon>ServerTransportControl.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Forms\ServerTransportControl.zh-Hans.resx">
<DependentUpon>ServerTransportControl.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Forms\SubSettingControl.resx">
<DependentUpon>SubSettingControl.cs</DependentUpon>
<SubType>Designer</SubType>
@@ -389,6 +417,7 @@
<EmbeddedResource Include="Sample\custom_routing_white" />
<EmbeddedResource Include="Sample\custom_routing_global" />
<EmbeddedResource Include="Sample\custom_routing_locked" />
<EmbeddedResource Include="Sample\custom_routing_black" />
<Protobuf Include="Protos\Statistics.proto" />
</ItemGroup>
<ItemGroup>
@@ -460,21 +489,24 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Google.Protobuf">
<Version>3.11.4</Version>
<Version>3.19.4</Version>
</PackageReference>
<PackageReference Include="Grpc.Core">
<Version>2.27.0</Version>
<Version>2.43.0</Version>
</PackageReference>
<PackageReference Include="Grpc.Tools">
<Version>2.27.0</Version>
<Version>2.43.0</Version>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="log4net">
<Version>2.0.14</Version>
</PackageReference>
<PackageReference Include="Newtonsoft.Json">
<Version>12.0.3</Version>
<Version>13.0.1</Version>
</PackageReference>
<PackageReference Include="ZXing.Net">
<Version>0.16.5</Version>
<Version>0.16.8</Version>
</PackageReference>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6"/>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8"/>
</startup>
</configuration>

View File

@@ -3,6 +3,7 @@ using System.Diagnostics;
using System.IO;
using System.IO.Compression;
using System.Text;
using System.Web;
using System.Windows.Forms;
namespace v2rayUpgrade
@@ -17,7 +18,8 @@ namespace v2rayUpgrade
InitializeComponent();
if (args.Length > 0)
{
fileName = args[0];
fileName = string.Join(" ", args);
fileName = HttpUtility.UrlDecode(fileName);
}
}
private void showWarn(string message)

View File

@@ -19,7 +19,7 @@ namespace v2rayUpgrade.Properties {
// 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。
// 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen
// (以 /str 作为命令选项),或重新生成 VS 项目。
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {

View File

@@ -12,7 +12,7 @@ namespace v2rayUpgrade.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.9.0.0")]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.3.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));

View File

@@ -8,7 +8,7 @@
<OutputType>WinExe</OutputType>
<RootNamespace>v2rayUpgrade</RootNamespace>
<AssemblyName>v2rayUpgrade</AssemblyName>
<TargetFrameworkVersion>v4.6</TargetFrameworkVersion>
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<Deterministic>true</Deterministic>
@@ -39,6 +39,7 @@
<Reference Include="System.Core" />
<Reference Include="System.IO.Compression" />
<Reference Include="System.IO.Compression.FileSystem" />
<Reference Include="System.Web" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />

View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|AnyCPU'">
<StartArguments>D:\Github\v2rayN\v2rayN\v2rayUpgrade\bin\Debug\v2ray-windows.zip</StartArguments>
<StartArguments>C:\Githubb\v2rayN\v2rayN\v2rayUpgrade\bin\Debug\v2ray-windows.zip</StartArguments>
</PropertyGroup>
</Project>