diff --git a/v2rayN/v2rayN/Forms/AddServer5Form.Designer.cs b/v2rayN/v2rayN/Forms/AddServer5Form.Designer.cs
index f290e0d9..2e457125 100644
--- a/v2rayN/v2rayN/Forms/AddServer5Form.Designer.cs
+++ b/v2rayN/v2rayN/Forms/AddServer5Form.Designer.cs
@@ -31,6 +31,8 @@
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AddServer5Form));
this.btnClose = new System.Windows.Forms.Button();
this.groupBox1 = new System.Windows.Forms.GroupBox();
+ this.cmbFlow = new System.Windows.Forms.ComboBox();
+ 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();
@@ -94,6 +96,8 @@
// groupBox1
//
resources.ApplyResources(this.groupBox1, "groupBox1");
+ this.groupBox1.Controls.Add(this.cmbFlow);
+ this.groupBox1.Controls.Add(this.label4);
this.groupBox1.Controls.Add(this.btnGUID);
this.groupBox1.Controls.Add(this.label13);
this.groupBox1.Controls.Add(this.groupBox2);
@@ -111,6 +115,22 @@
this.groupBox1.Name = "groupBox1";
this.groupBox1.TabStop = false;
//
+ // cmbFlow
+ //
+ resources.ApplyResources(this.cmbFlow, "cmbFlow");
+ this.cmbFlow.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+ this.cmbFlow.FormattingEnabled = true;
+ this.cmbFlow.Items.AddRange(new object[] {
+ resources.GetString("cmbFlow.Items"),
+ resources.GetString("cmbFlow.Items1"),
+ resources.GetString("cmbFlow.Items2")});
+ this.cmbFlow.Name = "cmbFlow";
+ //
+ // label4
+ //
+ resources.ApplyResources(this.label4, "label4");
+ this.label4.Name = "label4";
+ //
// btnGUID
//
resources.ApplyResources(this.btnGUID, "btnGUID");
@@ -253,7 +273,8 @@
this.cmbStreamSecurity.FormattingEnabled = true;
this.cmbStreamSecurity.Items.AddRange(new object[] {
resources.GetString("cmbStreamSecurity.Items"),
- resources.GetString("cmbStreamSecurity.Items1")});
+ resources.GetString("cmbStreamSecurity.Items1"),
+ resources.GetString("cmbStreamSecurity.Items2")});
this.cmbStreamSecurity.Name = "cmbStreamSecurity";
this.cmbStreamSecurity.SelectedIndexChanged += new System.EventHandler(this.cmbStreamSecurity_SelectedIndexChanged);
//
@@ -485,5 +506,7 @@
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;
}
}
\ No newline at end of file
diff --git a/v2rayN/v2rayN/Forms/AddServer5Form.cs b/v2rayN/v2rayN/Forms/AddServer5Form.cs
index b11974e5..43ef11ea 100644
--- a/v2rayN/v2rayN/Forms/AddServer5Form.cs
+++ b/v2rayN/v2rayN/Forms/AddServer5Form.cs
@@ -36,7 +36,8 @@ namespace v2rayN.Forms
{
txtAddress.Text = vmessItem.address;
txtPort.Text = vmessItem.port.ToString();
- txtId.Text = vmessItem.id;
+ txtId.Text = vmessItem.id;
+ cmbFlow.Text = vmessItem.flow;
cmbSecurity.Text = vmessItem.security;
cmbNetwork.Text = vmessItem.network;
txtRemarks.Text = vmessItem.remarks;
@@ -57,6 +58,7 @@ namespace v2rayN.Forms
txtAddress.Text = "";
txtPort.Text = "";
txtId.Text = "";
+ cmbFlow.Text = "";
cmbSecurity.Text = Global.None;
cmbNetwork.Text = Global.DefaultNetwork;
txtRemarks.Text = "";
@@ -112,6 +114,7 @@ namespace v2rayN.Forms
string address = txtAddress.Text;
string port = txtPort.Text;
string id = txtId.Text;
+ string flow = cmbFlow.Text;
string security = cmbSecurity.Text;
string network = cmbNetwork.Text;
string remarks = txtRemarks.Text;
@@ -137,11 +140,12 @@ namespace v2rayN.Forms
UI.Show(UIRes.I18N("FillUUID"));
return;
}
-
+
vmessItem.address = address;
vmessItem.port = Utils.ToInt(port);
vmessItem.id = id;
+ vmessItem.flow = flow;
vmessItem.security = security;
vmessItem.network = network;
vmessItem.remarks = remarks;
diff --git a/v2rayN/v2rayN/Forms/AddServer5Form.resx b/v2rayN/v2rayN/Forms/AddServer5Form.resx
index 3c01ce5a..e83bbdee 100644
--- a/v2rayN/v2rayN/Forms/AddServer5Form.resx
+++ b/v2rayN/v2rayN/Forms/AddServer5Form.resx
@@ -118,12 +118,15 @@
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
- 4
+ 6
113, 12
+
+ 1
+
285, 179
@@ -131,7 +134,7 @@
124, 62
- 6
+ 8
Path
@@ -143,16 +146,16 @@
Transport protocol(network)
- 7
+ 9
panTlsMore
-
- groupBox1
+
+ 4
-
- 1
+
+ 6, 12
label15
@@ -166,9 +169,6 @@
3)h2 host Separated by commas (,)
-
- none
-
Top
@@ -198,6 +198,9 @@
System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+ 127, 117
+
6
@@ -262,10 +265,13 @@
panTlsMore
- 8
+ 10
-
- cmbAllowInsecure
+
+ none
+
+
+ groupBox1
127, 85
@@ -273,6 +279,9 @@
16
+
+ utp
+
12, 179
@@ -318,6 +327,9 @@
158, 90
+
+ 0
+
2
@@ -333,6 +345,12 @@
237, 22
+
+ 12
+
+
+ TLS
+
3)QUIC key/Kcp seed
@@ -346,7 +364,7 @@
txtPort
- 2
+ 4
groupBox2
@@ -382,19 +400,19 @@
ws
- 11
+ 13
9, 66
- 13
+ 15
Import server configuration
-
- 6, 12
+
+ 137, 12
1
@@ -405,6 +423,9 @@
15
+
+ xtls-rprx-origin-udp443
+
label17
@@ -417,6 +438,9 @@
groupBox2
+
+ 5
+
215, 12
@@ -447,6 +471,9 @@
txtRemarks
+
+ 29, 12
+
v2rayN.Forms.BaseForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
@@ -471,8 +498,8 @@
95, 12
-
- NoControl
+
+ 1
350, 32
@@ -480,15 +507,21 @@
System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+ 22
-
- groupBox1
+
+ 526, 179
+
+
+ 211, 20
True
+
+ groupBox2
+
groupBox2
@@ -498,6 +531,9 @@
label12
+
+ Flow
+
True
@@ -513,8 +549,8 @@
label23
-
- groupBox1
+
+ allowInsecure
143, 20
@@ -543,11 +579,11 @@
0
-
- 2
+
+ xtls
-
- System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+ 47, 12
label8
@@ -562,7 +598,7 @@
System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
- 0
+ 2
35
@@ -585,6 +621,9 @@
label9
+
+ cmbFlow
+
label20
@@ -600,24 +639,27 @@
MenuItem1
-
- label1
+
+ groupBox1
13
-
- 34
-
-
- 22
+
+ label7
177, 20
+
+ groupBox1
+
groupBox2
+
+ True
+
btnClose
@@ -645,9 +687,6 @@
729, 60
-
- allowInsecure
-
True
@@ -672,6 +711,9 @@
7
+
+ NoControl
+
143, 21
@@ -705,6 +747,9 @@
119, 12
+
+ 278, 21
+
True
@@ -739,7 +784,7 @@
Fill
- 10
+ 12
groupBox2
@@ -780,9 +825,6 @@
161, 143
-
- 4
-
groupBox1
@@ -798,9 +840,6 @@
1
-
- 6
-
10
@@ -828,6 +867,9 @@
729, 10
+
+ 107, 7
+
470, 131
@@ -840,8 +882,8 @@
22
-
- 396, 54
+
+
300, 53
@@ -861,12 +903,12 @@
dtls
-
- 47, 12
-
MenuItemImportServer
+
+ System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
groupBox2
@@ -894,6 +936,9 @@
+
+ 124, 242
+
Server
@@ -909,8 +954,8 @@
groupBox1
-
- txtAddress
+
+ 6
True
@@ -945,8 +990,8 @@
System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
- 12
+
+ 396, 54
True
@@ -958,7 +1003,7 @@
System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
- 1
+ 3
119, 12
@@ -984,9 +1029,6 @@
groupBox2
-
- label7
-
4
@@ -1005,11 +1047,14 @@
http
+
+ label1
+
True
-
- 526, 179
+
+ 34
9
@@ -1026,14 +1071,14 @@
20
-
- TLS
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
1
- 3
+ 5
UUID(id)
@@ -1053,6 +1098,9 @@
groupBox1
+
+ cmbAllowInsecure
+
237, 22
@@ -1065,8 +1113,11 @@
8
-
- Camouflage domain(host)
+
+ 24
+
+
+ 15
0
@@ -1086,29 +1137,32 @@
203, 12
-
- utp
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
- 124, 242
+
+ txtAddress
30
- 12
+ 14
System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+ 469, 100
+
359, 21
29
-
- 469, 100
+
+ groupBox1
2
@@ -1123,7 +1177,7 @@
srtp
- 5
+ 7
System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
@@ -1137,8 +1191,8 @@
75, 23
-
- 137, 12
+
+ Camouflage domain(host)
*Default value tcp
@@ -1149,8 +1203,8 @@
729, 594
-
- 5
+
+ label4
31
@@ -1197,17 +1251,20 @@
28
-
- 107, 7
+
+ groupBox1
groupBox2
+
+ xtls-rprx-origin
+
Import client configuration
-
- 15
+
+ 12, 121
4)QUIC securty
@@ -1215,14 +1272,17 @@
0, 25
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
cmbSecurity
tcp
-
- groupBox2
+
+ 25
btnGUID
@@ -1248,8 +1308,8 @@
groupBox2
-
- 278, 21
+
+ NoControl
9, 32
@@ -1264,7 +1324,7 @@
panel2
- 9
+ 11
groupBox2
@@ -1296,6 +1356,9 @@
526, 197
+
+ 2
+
53, 12
diff --git a/v2rayN/v2rayN/Forms/AddServer5Form.zh-Hans.resx b/v2rayN/v2rayN/Forms/AddServer5Form.zh-Hans.resx
index 4e3deccf..61459587 100644
--- a/v2rayN/v2rayN/Forms/AddServer5Form.zh-Hans.resx
+++ b/v2rayN/v2rayN/Forms/AddServer5Form.zh-Hans.resx
@@ -123,6 +123,13 @@
服务器
+
+
+ 65, 12
+
+
+ 流控(Flow)
+
生成(&G)
@@ -132,7 +139,6 @@
底层传输方式(transport)
-
149, 12
diff --git a/v2rayN/v2rayN/Global.cs b/v2rayN/v2rayN/Global.cs
index 487b307d..bc7c5d8d 100644
--- a/v2rayN/v2rayN/Global.cs
+++ b/v2rayN/v2rayN/Global.cs
@@ -103,6 +103,7 @@ namespace v2rayN
///
///
public const string StreamSecurity = "tls";
+ public const string StreamSecurityX = "xtls";
public const string InboundSocks = "socks";
public const string InboundHttp = "http";
diff --git a/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs b/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs
index 356acb8e..fb9d53ce 100644
--- a/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs
+++ b/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs
@@ -467,6 +467,7 @@ namespace v2rayN.Handler
//远程服务器用户ID
usersItem.id = config.id();
usersItem.alterId = 0;
+ usersItem.flow = config.flow();
usersItem.email = Global.userEMail;
usersItem.encryption = config.security();
@@ -518,6 +519,22 @@ namespace v2rayN.Handler
streamSettings.tlsSettings = tlsSettings;
}
+ //if xtls
+ if (config.streamSecurity() == Global.StreamSecurityX)
+ {
+ streamSettings.security = config.streamSecurity();
+
+ TlsSettings xtlsSettings = new TlsSettings
+ {
+ allowInsecure = config.allowInsecure()
+ };
+ if (!string.IsNullOrWhiteSpace(host))
+ {
+ xtlsSettings.serverName = host;
+ }
+ streamSettings.xtlsSettings = xtlsSettings;
+ }
+
//streamSettings
switch (config.network())
{
@@ -905,6 +922,7 @@ namespace v2rayN.Handler
{
inbound.protocol = Global.vlessProtocolLite;
usersItem.alterId = 0;
+ usersItem.flow = config.flow();
inbound.settings.decryption = config.security();
}
diff --git a/v2rayN/v2rayN/Mode/Config.cs b/v2rayN/v2rayN/Mode/Config.cs
index 90d4eb9c..eac745fd 100644
--- a/v2rayN/v2rayN/Mode/Config.cs
+++ b/v2rayN/v2rayN/Mode/Config.cs
@@ -365,7 +365,14 @@ namespace v2rayN.Mode
return vmess[index].getItemId();
}
-
+ public string flow()
+ {
+ if (index < 0)
+ {
+ return string.Empty;
+ }
+ return vmess[index].flow.TrimEx();
+ }
#endregion
}
@@ -391,6 +398,7 @@ namespace v2rayN.Mode
configType = (int)EConfigType.Vmess;
testResult = string.Empty;
subid = string.Empty;
+ flow = string.Empty;
}
public string getSummary()
@@ -582,6 +590,14 @@ namespace v2rayN.Mode
{
get; set;
}
+
+ ///
+ /// VLESS flow
+ ///
+ public string flow
+ {
+ get; set;
+ }
}
[Serializable]
diff --git a/v2rayN/v2rayN/Mode/V2rayConfig.cs b/v2rayN/v2rayN/Mode/V2rayConfig.cs
index dd0bc7ca..9f0cbf1f 100644
--- a/v2rayN/v2rayN/Mode/V2rayConfig.cs
+++ b/v2rayN/v2rayN/Mode/V2rayConfig.cs
@@ -164,6 +164,11 @@ namespace v2rayN.Mode
/// VLESS
///
public string encryption { get; set; }
+
+ ///
+ /// VLESS
+ ///
+ public string flow { get; set; }
}
public class Sniffing
{
@@ -393,7 +398,12 @@ namespace v2rayN.Mode
/// QUIC
///
public QuicSettings quicSettings { get; set; }
-
+
+ ///
+ /// VLESS xtls
+ ///
+ public TlsSettings xtlsSettings { get; set; }
+
}
public class TlsSettings
diff --git a/v2rayN/v2rayN/Properties/AssemblyInfo.cs b/v2rayN/v2rayN/Properties/AssemblyInfo.cs
index c68ef520..275106c7 100644
--- a/v2rayN/v2rayN/Properties/AssemblyInfo.cs
+++ b/v2rayN/v2rayN/Properties/AssemblyInfo.cs
@@ -32,4 +32,4 @@ using System.Runtime.InteropServices;
// 方法是按如下所示使用“*”:
//[assembly: AssemblyVersion("1.0.*")]
//[assembly: AssemblyVersion("1.0.0")]
-[assembly: AssemblyFileVersion("3.23")]
+[assembly: AssemblyFileVersion("3.24")]