diff --git a/v2rayN/v2rayN/Forms/AddServer3Form.resx b/v2rayN/v2rayN/Forms/AddServer3Form.resx
index 11e4d167..0f5bdcb4 100644
--- a/v2rayN/v2rayN/Forms/AddServer3Form.resx
+++ b/v2rayN/v2rayN/Forms/AddServer3Form.resx
@@ -126,7 +126,7 @@
- 4
+ 1
&Cancel
@@ -199,7 +199,7 @@
278, 20
- 6
+ 3
cmbSecurity
@@ -220,7 +220,7 @@
278, 21
- 11
+ 4
txtRemarks
@@ -295,7 +295,7 @@
278, 21
- 5
+ 2
txtId
@@ -343,7 +343,7 @@
194, 21
- 3
+ 1
txtPort
@@ -391,7 +391,7 @@
359, 21
- 1
+ 0
txtAddress
@@ -466,7 +466,7 @@
75, 23
- 5
+ 0
&OK
diff --git a/v2rayN/v2rayN/Forms/AddServer4Form.resx b/v2rayN/v2rayN/Forms/AddServer4Form.resx
index e70189c3..45725ec7 100644
--- a/v2rayN/v2rayN/Forms/AddServer4Form.resx
+++ b/v2rayN/v2rayN/Forms/AddServer4Form.resx
@@ -126,7 +126,7 @@
- 4
+ 1
&Cancel
@@ -150,7 +150,7 @@
278, 21
- 26
+ 2
txtSecurity
@@ -202,7 +202,7 @@
278, 21
- 24
+ 3
txtId
@@ -280,7 +280,7 @@
278, 21
- 11
+ 4
txtRemarks
@@ -328,7 +328,7 @@
194, 21
- 3
+ 1
txtPort
@@ -376,7 +376,7 @@
359, 21
- 1
+ 0
txtAddress
@@ -451,7 +451,7 @@
75, 23
- 5
+ 0
&OK
diff --git a/v2rayN/v2rayN/Forms/AddServer5Form.Designer.cs b/v2rayN/v2rayN/Forms/AddServer5Form.Designer.cs
index bd68c62f..44915372 100644
--- a/v2rayN/v2rayN/Forms/AddServer5Form.Designer.cs
+++ b/v2rayN/v2rayN/Forms/AddServer5Form.Designer.cs
@@ -35,32 +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.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();
@@ -75,10 +49,11 @@
this.panel2 = new System.Windows.Forms.Panel();
this.btnOK = new System.Windows.Forms.Button();
this.panel1 = new System.Windows.Forms.Panel();
+ 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.panel3.SuspendLayout();
this.SuspendLayout();
//
// btnClose
@@ -95,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);
@@ -140,195 +114,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.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");
@@ -407,12 +192,25 @@
resources.ApplyResources(this.panel1, "panel1");
this.panel1.Name = "panel1";
//
+ // 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";
+ //
// AddServer5Form
//
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.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
@@ -420,11 +218,8 @@
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.panel3.ResumeLayout(false);
this.ResumeLayout(false);
}
@@ -444,38 +239,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.Label label15;
- private System.Windows.Forms.ComboBox cmbStreamSecurity;
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;
}
}
\ No newline at end of file
diff --git a/v2rayN/v2rayN/Forms/AddServer5Form.cs b/v2rayN/v2rayN/Forms/AddServer5Form.cs
index 9c2f350a..43d52751 100644
--- a/v2rayN/v2rayN/Forms/AddServer5Form.cs
+++ b/v2rayN/v2rayN/Forms/AddServer5Form.cs
@@ -15,6 +15,7 @@ namespace v2rayN.Forms
private void AddServer5Form_Load(object sender, EventArgs e)
{
+ transportControl.AllowXtls = true;
if (EditIndex >= 0)
{
vmessItem = config.vmess[EditIndex];
@@ -37,15 +38,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,62 +54,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();
- }
-
-
- ///
- /// 设置伪装选项
- ///
- 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.Add("srtp");
- cmbHeaderType.Items.Add("utp");
- cmbHeaderType.Items.Add("wechat-video");
- cmbHeaderType.Items.Add("dtls");
- cmbHeaderType.Items.Add("wireguard");
- }
- else if (network.Equals("grpc"))
- {
- cmbHeaderType.Items.Add(Global.GrpcgunMode);
- cmbHeaderType.Items.Add(Global.GrpcmultiMode);
- }
- else
- {
- cmbHeaderType.Items.Add(Global.None);
- }
- cmbHeaderType.SelectedIndex = 0;
+ transportControl.ClearServer(vmessItem);
}
private void btnOK_Click(object sender, EventArgs e)
@@ -124,16 +66,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"));
@@ -150,22 +84,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;
@@ -185,18 +112,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();
- }
- }
}
-}
+}
\ No newline at end of file
diff --git a/v2rayN/v2rayN/Forms/AddServer5Form.resx b/v2rayN/v2rayN/Forms/AddServer5Form.resx
index b86110a6..d8a0fd00 100644
--- a/v2rayN/v2rayN/Forms/AddServer5Form.resx
+++ b/v2rayN/v2rayN/Forms/AddServer5Form.resx
@@ -165,7 +165,7 @@
211, 20
- 24
+ 3
cmbFlow
@@ -261,738 +261,6 @@
3
-
- True
-
-
- NoControl
-
-
- 529, 210
-
-
- 113, 12
-
-
- 37
-
-
- 4)grpc serviceName
-
-
- label25
-
-
- System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- groupBox2
-
-
- 0
-
-
- True
-
-
- NoControl
-
-
- 529, 197
-
-
- 119, 12
-
-
- 35
-
-
- 3)QUIC key/Kcp seed
-
-
- label24
-
-
- System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- groupBox2
-
-
- 1
-
-
- True
-
-
- NoControl
-
-
- 465, 140
-
-
- 89, 12
-
-
- 34
-
-
- 4)QUIC securty
-
-
- label23
-
-
- System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- groupBox2
-
-
- 2
-
-
- 297, 7
-
-
- 200, 21
-
-
- 35
-
-
- txtSNI
-
-
- System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- panTlsMore
-
-
- 0
-
-
- True
-
-
- NoControl
-
-
- 267, 11
-
-
- 23, 12
-
-
- 34
-
-
- SNI
-
-
- label22
-
-
- System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- panTlsMore
-
-
- 1
-
-
- True
-
-
- NoControl
-
-
- 12, 11
-
-
- 83, 12
-
-
- 31
-
-
- allowInsecure
-
-
- label21
-
-
- System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- panTlsMore
-
-
- 2
-
-
-
-
-
- true
-
-
- false
-
-
- 100, 7
-
-
- 80, 20
-
-
- 30
-
-
- cmbAllowInsecure
-
-
- System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- panTlsMore
-
-
- 3
-
-
- 200, 232
-
-
- 500, 35
-
-
- 33
-
-
- panTlsMore
-
-
- System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- groupBox2
-
-
- 3
-
-
- True
-
-
- 353, 32
-
-
- 113, 12
-
-
- 15
-
-
- *Default value tcp
-
-
- label9
-
-
- System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- groupBox2
-
-
- 4
-
-
- True
-
-
- 464, 124
-
-
- 203, 12
-
-
- 29
-
-
- 3)h2 host Separated by commas (,)
-
-
- label20
-
-
- System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- groupBox2
-
-
- 5
-
-
- 127, 169
-
-
- True
-
-
- 396, 54
-
-
- 28
-
-
- txtPath
-
-
- System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- groupBox2
-
-
- 6
-
-
- tcp
-
-
- kcp
-
-
- ws
-
-
- h2
-
-
- quic
-
-
- grpc
-
-
- 192, 28
-
-
- 143, 20
-
-
- 12
-
-
- cmbNetwork
-
-
- System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- groupBox2
-
-
- 7
-
-
- True
-
-
- 9, 32
-
-
- 167, 12
-
-
- 13
-
-
- Transport protocol(network)
-
-
- label7
-
-
- System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- groupBox2
-
-
- 8
-
-
- True
-
-
- 9, 169
-
-
- 29, 12
-
-
- 27
-
-
- Path
-
-
- label19
-
-
- System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- groupBox2
-
-
- 9
-
-
- True
-
-
- 529, 183
-
-
- 59, 12
-
-
- 26
-
-
- 2)h2 path
-
-
- label18
-
-
- System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- groupBox2
-
-
- 10
-
-
- True
-
-
- 464, 109
-
-
- 59, 12
-
-
- 25
-
-
- 2)ws host
-
-
- label17
-
-
- System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- groupBox2
-
-
- 11
-
-
- True
-
-
- 529, 169
-
-
- 59, 12
-
-
- 24
-
-
- 1)ws path
-
-
- label16
-
-
- System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- groupBox2
-
-
- 12
-
-
- True
-
-
- 464, 94
-
-
- 215, 12
-
-
- 23
-
-
- 1)http host Separated by commas (,)
-
-
- label14
-
-
- System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- groupBox2
-
-
- 13
-
-
- True
-
-
- 9, 243
-
-
- 23, 12
-
-
- 22
-
-
- TLS
-
-
- label15
-
-
- System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- groupBox2
-
-
- 14
-
-
-
-
-
- tls
-
-
- xtls
-
-
- 127, 239
-
-
- 60, 20
-
-
- 21
-
-
- cmbStreamSecurity
-
-
- System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- groupBox2
-
-
- 15
-
-
- True
-
-
- 282, 68
-
-
- 293, 12
-
-
- 20
-
-
- *tcp or kcp or QUIC camouflage type or grpc mode
-
-
- label12
-
-
- System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- groupBox2
-
-
- 16
-
-
- 158, 100
-
-
- True
-
-
- 300, 53
-
-
- 16
-
-
- txtRequestHost
-
-
- System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- groupBox2
-
-
- 17
-
-
- True
-
-
- 9, 68
-
-
- 95, 12
-
-
- 19
-
-
- Camouflage type
-
-
- label11
-
-
- System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- groupBox2
-
-
- 18
-
-
- True
-
-
- 9, 100
-
-
- 143, 12
-
-
- 17
-
-
- Camouflage domain(host)
-
-
- label10
-
-
- System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- groupBox2
-
-
- 19
-
-
- none
-
-
- http
-
-
- srtp
-
-
- utp
-
-
- wechat-video
-
-
- dtls
-
-
- wireguard
-
-
- 127, 64
-
-
- 143, 20
-
-
- 18
-
-
- cmbHeaderType
-
-
- System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- groupBox2
-
-
- 20
-
-
- Bottom
-
-
- 3, 240
-
-
- 723, 281
-
-
- 21
-
-
- Transport
-
-
- groupBox2
-
-
- System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- groupBox1
-
-
- 4
-
True
@@ -1021,7 +289,7 @@
groupBox1
- 5
+ 4
none
@@ -1033,7 +301,7 @@
211, 20
- 6
+ 4
cmbSecurity
@@ -1045,7 +313,7 @@
groupBox1
- 6
+ 5
127, 185
@@ -1054,7 +322,7 @@
211, 21
- 11
+ 5
txtRemarks
@@ -1066,7 +334,7 @@
groupBox1
- 7
+ 6
True
@@ -1093,7 +361,7 @@
groupBox1
- 8
+ 7
True
@@ -1120,7 +388,7 @@
groupBox1
- 9
+ 8
127, 91
@@ -1129,7 +397,7 @@
278, 21
- 5
+ 2
txtId
@@ -1141,7 +409,7 @@
groupBox1
- 10
+ 9
True
@@ -1168,7 +436,7 @@
groupBox1
- 11
+ 10
127, 59
@@ -1177,7 +445,7 @@
143, 21
- 3
+ 1
txtPort
@@ -1189,7 +457,7 @@
groupBox1
- 12
+ 11
True
@@ -1216,7 +484,7 @@
groupBox1
- 13
+ 12
127, 27
@@ -1225,7 +493,7 @@
359, 21
- 1
+ 0
txtAddress
@@ -1237,7 +505,7 @@
groupBox1
- 14
+ 13
True
@@ -1264,7 +532,7 @@
groupBox1
- 15
+ 14
Fill
@@ -1273,7 +541,7 @@
0, 10
- 729, 524
+ 729, 226
3
@@ -1321,7 +589,7 @@
Bottom
- 0, 534
+ 0, 456
729, 60
@@ -1339,7 +607,7 @@
$this
- 1
+ 2
Top
@@ -1363,7 +631,55 @@
$this
- 2
+ 3
+
+
+ Fill
+
+
+ 0, 0
+
+
+ 729, 220
+
+
+ 0
+
+
+ transportControl
+
+
+ v2rayN.Forms.ServerTransportControl, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
+
+
+ panel3
+
+
+ 0
+
+
+ Bottom
+
+
+ 0, 236
+
+
+ 729, 220
+
+
+ 9
+
+
+ panel3
+
+
+ System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ $this
+
+
+ 1
True
@@ -1375,7 +691,7 @@
6, 12
- 729, 594
+ 729, 516
Edit or add a [VLESS] server
diff --git a/v2rayN/v2rayN/Forms/AddServer5Form.zh-Hans.resx b/v2rayN/v2rayN/Forms/AddServer5Form.zh-Hans.resx
index bd048332..3d03d416 100644
--- a/v2rayN/v2rayN/Forms/AddServer5Form.zh-Hans.resx
+++ b/v2rayN/v2rayN/Forms/AddServer5Form.zh-Hans.resx
@@ -136,126 +136,6 @@
*手填,方便识别管理
-
- 149, 12
-
-
- 3)QUIC 加密密钥/Kcp seed
-
-
- 95, 12
-
-
- 4)QUIC 加密方式
-
-
- 167, 12
-
-
- 跳过证书验证(allowInsecure)
-
-
- 181, 7
-
-
- 353, 36
-
-
- 143, 12
-
-
- *默认tcp,选错会无法连接
-
-
- 149, 12
-
-
- 3)h2 host中间逗号(,)隔开
-
-
- 127, 168
-
-
- 127, 32
-
-
- 220, 20
-
-
- 9, 36
-
-
- 107, 12
-
-
- 传输协议(network)
-
-
- 9, 168
-
-
- 65, 12
-
-
- 路径(path)
-
-
- 161, 12
-
-
- 1)http host中间逗号(,)隔开
-
-
- 9, 241
-
-
- 107, 12
-
-
- 底层传输安全(tls)
-
-
- 127, 237
-
-
- 282, 71
-
-
- 197, 12
-
-
- *tcp或kcp或QUIC伪装类型或grpc模式
-
-
- 127, 102
-
-
- 334, 51
-
-
- 9, 71
-
-
- 89, 12
-
-
- 伪装类型(type)
-
-
- 9, 102
-
-
- 89, 12
-
-
- 伪装域名(host)
-
-
- 127, 67
-
-
- 底层传输方式(transport)
-
353, 158
@@ -307,37 +187,6 @@
确定(&O)
-
- 171, 22
-
-
- 导入客户端配置
-
-
- 171, 22
-
-
- 导入服务端配置
-
-
- 168, 6
-
-
- 171, 22
-
-
- 从剪贴板导入URL
-
-
-
- False
-
-
- 92, 21
-
-
- 导入配置文件
-
编辑或添加[VLESS]服务器
diff --git a/v2rayN/v2rayN/Forms/AddServer6Form.Designer.cs b/v2rayN/v2rayN/Forms/AddServer6Form.Designer.cs
index a50084f4..6ad64150 100644
--- a/v2rayN/v2rayN/Forms/AddServer6Form.Designer.cs
+++ b/v2rayN/v2rayN/Forms/AddServer6Form.Designer.cs
@@ -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,23 @@
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;
+ 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";
//
// 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 +139,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 +176,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 +185,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 +207,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;
}
}
\ No newline at end of file
diff --git a/v2rayN/v2rayN/Forms/AddServer6Form.cs b/v2rayN/v2rayN/Forms/AddServer6Form.cs
index e7d35165..beab1dc7 100644
--- a/v2rayN/v2rayN/Forms/AddServer6Form.cs
+++ b/v2rayN/v2rayN/Forms/AddServer6Form.cs
@@ -14,6 +14,7 @@ namespace v2rayN.Forms
private void AddServer6Form_Load(object sender, EventArgs e)
{
+ transportControl.AllowXtls = true;
if (EditIndex >= 0)
{
vmessItem = config.vmess[EditIndex];
@@ -31,14 +32,13 @@ namespace v2rayN.Forms
///
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 +50,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 +61,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 +78,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)
{
diff --git a/v2rayN/v2rayN/Forms/AddServer6Form.resx b/v2rayN/v2rayN/Forms/AddServer6Form.resx
index 37224494..245e7469 100644
--- a/v2rayN/v2rayN/Forms/AddServer6Form.resx
+++ b/v2rayN/v2rayN/Forms/AddServer6Form.resx
@@ -117,6 +117,10 @@
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ NoControl
+
396, 17
@@ -143,124 +147,42 @@
0
-
- True
-
-
-
- NoControl
-
-
- 224, 189
-
-
- 83, 12
-
-
- 33
-
-
- allowInsecure
-
-
- label21
-
-
- System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- groupBox1
-
-
- 0
-
-
+
-
- true
+
+ xtls-rprx-origin
-
- false
+
+ xtls-rprx-origin-udp443
-
- 312, 185
+
+ xtls-rprx-direct
-
- 80, 20
+
+ xtls-rprx-direct-udp443
-
- 32
+
+ 127, 123
-
- cmbAllowInsecure
+
+ 211, 20
-
- System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- groupBox1
-
-
- 1
-
-
- True
-
-
- NoControl
-
-
- 12, 189
-
-
- 23, 12
-
-
- 26
-
-
- TLS
-
-
- label15
-
-
- System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- groupBox1
-
-
- 2
-
-
- tls
-
-
- xtls
-
-
- 127, 185
-
-
- 60, 20
-
-
- 25
-
-
- cmbStreamSecurity
-
-
- System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- groupBox1
-
-
+
3
+
+ cmbFlow
+
+
+ System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ groupBox1
+
+
+ 0
+
True
@@ -268,16 +190,16 @@
NoControl
- 12, 156
+ 12, 127
- 23, 12
+ 29, 12
- 24
+ 27
- SNI
+ Flow
label4
@@ -289,34 +211,16 @@
groupBox1
- 4
-
-
- 127, 152
-
-
- 359, 21
-
-
- 23
-
-
- txtSNI
-
-
- System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- groupBox1
-
-
- 5
+ 1
True
+
+ NoControl
+
- 428, 124
+ 428, 158
113, 12
@@ -337,16 +241,16 @@
groupBox1
- 6
+ 2
- 127, 121
+ 127, 155
265, 21
- 11
+ 4
txtRemarks
@@ -358,13 +262,16 @@
groupBox1
- 7
+ 3
True
+
+ NoControl
+
- 12, 125
+ 12, 159
95, 12
@@ -385,7 +292,7 @@
groupBox1
- 8
+ 4
127, 91
@@ -394,7 +301,7 @@
265, 21
- 5
+ 2
txtId
@@ -406,11 +313,14 @@
groupBox1
- 9
+ 5
True
+
+ NoControl
+
12, 93
@@ -433,7 +343,7 @@
groupBox1
- 10
+ 6
127, 59
@@ -442,7 +352,7 @@
194, 21
- 3
+ 1
txtPort
@@ -454,11 +364,14 @@
groupBox1
- 11
+ 7
True
+
+ NoControl
+
12, 62
@@ -481,7 +394,7 @@
groupBox1
- 12
+ 8
127, 27
@@ -490,7 +403,7 @@
359, 21
- 1
+ 0
txtAddress
@@ -502,11 +415,14 @@
groupBox1
- 13
+ 9
True
+
+ NoControl
+
12, 31
@@ -529,7 +445,7 @@
groupBox1
- 14
+ 10
Fill
@@ -538,7 +454,7 @@
0, 10
- 547, 221
+ 707, 195
3
@@ -558,6 +474,57 @@
0
+
+ Fill
+
+
+ 0, 0
+
+
+ 707, 220
+
+
+ 0
+
+
+ transportControl
+
+
+ v2rayN.Forms.ServerTransportControl, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
+
+
+ panel3
+
+
+ 0
+
+
+ Bottom
+
+
+ 0, 205
+
+
+ 707, 220
+
+
+ 8
+
+
+ panel3
+
+
+ System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ $this
+
+
+ 1
+
+
+ NoControl
+
303, 17
@@ -586,10 +553,10 @@
Bottom
- 0, 231
+ 0, 425
- 547, 60
+ 707, 60
7
@@ -604,7 +571,7 @@
$this
- 1
+ 2
Top
@@ -613,7 +580,7 @@
0, 0
- 547, 10
+ 707, 10
6
@@ -628,7 +595,7 @@
$this
- 2
+ 3
True
@@ -637,7 +604,180 @@
6, 12
- 547, 291
+ 707, 485
+
+
+
+ AAABAAYAICAQAAAAAADoAgAAZgAAABAQEAAAAAAAKAEAAE4DAAAgIAAAAQAIAKgIAAB2BAAAEBAAAAEA
+ CABoBQAAHg0AACAgAAABACAAqBAAAIYSAAAQEAAAAQAgAGgEAAAuIwAAKAAAACAAAABAAAAAAQAEAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACAgACAAAAAgACAAICAAACAgIAAwMDAAAAA
+ /wAA/wAAAP//AP8AAAD/AP8A//8AAP///wAiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIoiI
+ iIiIiIiIiIiIiIiIiIiCIigiIiIozMzMzMzMyCIogiIoIiIiKM7m5ubm5sgiKIIiKCIiIijObm5ubm7I
+ IiiCIigiIiIozubm5ubmyCIogiIoIiIiKM5ubm5ubsgiKIIiKCIiIijO5ubm5ubIIiiIiIiIiIiIzm5u
+ bm5uyCIogRERERERGM7u7u7u7sgiKIHZWVlZWRjMzMzMzMzIIiiB1ZWVlZUYiIiIiIiIiIiIgdlZWVlZ
+ GDMzMzMzMzMzOIHVlZWVlRg/uLi4uLi4uDiB2VlZWVkYP7uLi4uLi4s4gdWVlZWVGD+4uLi4uLi4OIHZ
+ WVlZWRg/u4uLi4uLiziB1ZWVlZUYP7i4uLi4uLg4gdlZWVlZGD+7i4uLi4uLOIHVlZWVlRg/uLi4uLi4
+ uDiB3d3d3d0YP7uLi4uLi4s4gRERERERGD+4uLi4uLi4OIiIiIiIiIg/u4uLi4uLiziCIiIiIiIoP7i4
+ uLi4uLg4giIiIiIiKD+7i4uLi4uLOIIiIiIiIig/uLi4uLi4uDiCIiIiIiIoP7u7u7u7u7s4giIiIiIi
+ KD//////////OIIiIiIiIigzMzMzMzMzMziIiIiIiIiIiIiIiIiIiIiIIiIiIiIiIiIiIiIiIiIiIv//
+ ////////AAAAAHv4AA57+AAOe/gADnv4AA57+AAOe/gADgAAAA4AAAAOAAAADgAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH/4AAB/+AAAf/gAAH/4AAB/+AAAf/gAAAAA
+ AAD/////KAAAABAAAAAgAAAAAQAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACA
+ gACAAAAAgACAAICAAACAgIAAwMDAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8AAP///wAiIiIiIiIiIoiI
+ iIiIiIiIgigijMzMyCiCKCKM5mbIKIiIiIzu7sgogRERjMzMyCiB2ZGIiIiIiIHZkYMzMzM4gdmRg/u7
+ uziB3dGD+7u7OIEREYP7u7s4iIiIg/u7uziCIiKD+7u7OIIiIoP///84giIigzMzMziIiIiIiIiIiP//
+ KCIAACjObALm5mwCIigAAoiIAAKIzgAAbm4AACIoAAAREQAAGM4AAO7uAAAiKHwAWVl8ABjMfADMzAAA
+ IigoAAAAIAAAAEAAAAABAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAAICAAIAA
+ AACAAIAAgIAAAICAgADA3MAA8MqmAKo/KgD/PyoAAF8qAFVfKgCqXyoA/18qAAB/KgBVfyoAqn8qAP9/
+ KgAAnyoAVZ8qAKqfKgD/nyoAAL8qAFW/KgCqvyoA/78qAADfKgBV3yoAqt8qAP/fKgAA/yoAVf8qAKr/
+ KgD//yoAAABVAFUAVQCqAFUA/wBVAAAfVQBVH1UAqh9VAP8fVQAAP1UAVT9VAKo/VQD/P1UAAF9VAFVf
+ VQCqX1UA/19VAAB/VQBVf1UAqn9VAP9/VQAAn1UAVZ9VAKqfVQD/n1UAAL9VAFW/VQCqv1UA/79VAADf
+ VQBV31UAqt9VAP/fVQAA/1UAVf9VAKr/VQD//1UAAAB/AFUAfwCqAH8A/wB/AAAffwBVH38Aqh9/AP8f
+ fwAAP38AVT9/AKo/fwD/P38AAF9/AFVffwCqX38A/19/AAB/fwBVf38Aqn9/AP9/fwAAn38AVZ9/AKqf
+ fwD/n38AAL9/AFW/fwCqv38A/79/AADffwBV338Aqt9/AP/ffwAA/38AVf9/AKr/fwD//38AAACqAFUA
+ qgCqAKoA/wCqAAAfqgBVH6oAqh+qAP8fqgAAP6oAVT+qAKo/qgD/P6oAAF+qAFVfqgCqX6oA/1+qAAB/
+ qgBVf6oAqn+qAP9/qgAAn6oAVZ+qAKqfqgD/n6oAAL+qAFW/qgCqv6oA/7+qAADfqgBV36oAqt+qAP/f
+ qgAA/6oAVf+qAKr/qgD//6oAAADUAFUA1ACqANQA/wDUAAAf1ABVH9QAqh/UAP8f1AAAP9QAVT/UAKo/
+ 1AD/P9QAAF/UAFVf1ACqX9QA/1/UAAB/1ABVf9QAqn/UAP9/1AAAn9QAVZ/UAKqf1AD/n9QAAL/UAFW/
+ 1ACqv9QA/7/UAADf1ABV39QAqt/UAP/f1AAA/9QAVf/UAKr/1AD//9QAVQD/AKoA/wAAH/8AVR//AKof
+ /wD/H/8AAD//AFU//wCqP/8A/z//AABf/wBVX/8Aql//AP9f/wAAf/8AVX//AKp//wD/f/8AAJ//AFWf
+ /wCqn/8A/5//AAC//wBVv/8Aqr//AP+//wAA3/8AVd//AKrf/wD/3/8AVf//AKr//wD/zMwA/8z/AP//
+ MwD//2YA//+ZAP//zAAAfwAAVX8AAKp/AAD/fwAAAJ8AAFWfAACqnwAA/58AAAC/AABVvwAAqr8AAP+/
+ AAAA3wAAVd8AAKrfAAD/3wAAVf8AAKr/AAAAACoAVQAqAKoAKgD/ACoAAB8qAFUfKgCqHyoA/x8qAAA/
+ KgBVPyoA8Pv/AKSgoACAgIAAAAD/AAD/AAAA//8A/wAAAAAAAAD//wAA////AP39/f39/f39/f39/f39
+ /f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39
+ /f39/f39/f39/f39/f39/f39/f39/f39qoYIqoYIhqoIqgiqCaoIqgiqhqqGhoYIhoYIqv39/f0I/f39
+ /ar9/f39/YY2Ng4yDg4ODgoOCgoKCgqG/f39/Yb9/f39CP39/f39qjY7Ozs3Nzc3NjMSMjIOCqr9/f39
+ qv39/f2G/f39/f0IN19fOzs3Nzc3NjcODg4KCP39/f0I/f39/ar9/f39/ao6X19fXzs7Ozc3NzY3NgqG
+ /f39/Yb9/f39CP39/f39hl9jY19jX187Ozs7Nzc3Dqr9/f39qv39/f2G/f39/f0IOodjh19jX19fXztf
+ OzcOCP39/f0ICAmqCAiqCKoICapfCYdjh2ODY19fXzs7Ow6q/f39/QhITEwoSCUoKSQoqmMJCYcJCWNj
+ Y2NfY19fNgj9/f39qkyZmZmYmJRwlCmqX19fXl9fX186WzY3Njc2gv39/f0JcJ2dmZmZlJmUJAmqCaoJ
+ hggIqggICKoIqggI/f39/YZwnp2dnZmZmJVMqnx8fHx8fFR8VHhUVFRUVKr9/f39CHChoZ2dnZ2ZmUwJ
+ fKSkxqSkxqSkpKSkpKBUCP39/f2qcKLDoqGdnZ2ZTKp8ysakxqSkxqSkxqSkpFSq/f39/QiUpqbDoqHE
+ nZ1Mq3ykqMakyqSkxqSkpKSkVAj9/f39hpTIyKbHoqGhoXAIfMrLpMqkxqSkxqTGpKRUqv39/f0IlMym
+ yKbIpcShcAh8y6jKpMqkxsqkpKSkxlQI/f39/aqUzMzMyKbIpqJwqnzLy8qpxsqkpMakxqSkeAj9/f39
+ CJSUlJSUlJSUlJQJgMupy8qpysqkyqSkxqRUqv39/f2GCKoIqgiqCKoIhgigrcvPqcuoy8qkxsqkxnyG
+ /f39/ar9/f39/f39/f39qnzPz6nLy8uoyqnKpKTKVAj9/f39CP39/f39/f39/f0IfNDPz8+py8upyqjG
+ yqR8hv39/f2G/f39/f39/f39/Qik0K7P0M+ty8vLy6jKpXyq/f39/ar9/f39/f39/f39CHzQ09Ctz8/P
+ qcupy6jKeAj9/f39CP39/f39/f39/f2qoNPQ0NPQ0M/Qz8vLy6l8CP39/f2G/f39/f39/f39/QmkfKR8
+ oHx8fHx8fHx8fHyG/f39/aoIqgiqCKoIqgiqCKoIqgiqCKoIqgiqCKoIqgj9/f39/f39/f39/f39/f39
+ /f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f3/////////////
+ ///AAAAD3vgAA974AAPe+AAD3vgAA974AAPe+AADwAAAA8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA8AA
+ AAPAAAADwAAAA8AAAAPAAAADwAAAA9/4AAPf+AAD3/gAA9/4AAPf+AAD3/gAA8AAAAP//////////ygA
+ AAAQAAAAIAAAAAEACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAgIAAgAAAAIAA
+ gACAgAAAgICAAMDcwADwyqYAqj8qAP8/KgAAXyoAVV8qAKpfKgD/XyoAAH8qAFV/KgCqfyoA/38qAACf
+ KgBVnyoAqp8qAP+fKgAAvyoAVb8qAKq/KgD/vyoAAN8qAFXfKgCq3yoA/98qAAD/KgBV/yoAqv8qAP//
+ KgAAAFUAVQBVAKoAVQD/AFUAAB9VAFUfVQCqH1UA/x9VAAA/VQBVP1UAqj9VAP8/VQAAX1UAVV9VAKpf
+ VQD/X1UAAH9VAFV/VQCqf1UA/39VAACfVQBVn1UAqp9VAP+fVQAAv1UAVb9VAKq/VQD/v1UAAN9VAFXf
+ VQCq31UA/99VAAD/VQBV/1UAqv9VAP//VQAAAH8AVQB/AKoAfwD/AH8AAB9/AFUffwCqH38A/x9/AAA/
+ fwBVP38Aqj9/AP8/fwAAX38AVV9/AKpffwD/X38AAH9/AFV/fwCqf38A/39/AACffwBVn38Aqp9/AP+f
+ fwAAv38AVb9/AKq/fwD/v38AAN9/AFXffwCq338A/99/AAD/fwBV/38Aqv9/AP//fwAAAKoAVQCqAKoA
+ qgD/AKoAAB+qAFUfqgCqH6oA/x+qAAA/qgBVP6oAqj+qAP8/qgAAX6oAVV+qAKpfqgD/X6oAAH+qAFV/
+ qgCqf6oA/3+qAACfqgBVn6oAqp+qAP+fqgAAv6oAVb+qAKq/qgD/v6oAAN+qAFXfqgCq36oA/9+qAAD/
+ qgBV/6oAqv+qAP//qgAAANQAVQDUAKoA1AD/ANQAAB/UAFUf1ACqH9QA/x/UAAA/1ABVP9QAqj/UAP8/
+ 1AAAX9QAVV/UAKpf1AD/X9QAAH/UAFV/1ACqf9QA/3/UAACf1ABVn9QAqp/UAP+f1AAAv9QAVb/UAKq/
+ 1AD/v9QAAN/UAFXf1ACq39QA/9/UAAD/1ABV/9QAqv/UAP//1ABVAP8AqgD/AAAf/wBVH/8Aqh//AP8f
+ /wAAP/8AVT//AKo//wD/P/8AAF//AFVf/wCqX/8A/1//AAB//wBVf/8Aqn//AP9//wAAn/8AVZ//AKqf
+ /wD/n/8AAL//AFW//wCqv/8A/7//AADf/wBV3/8Aqt//AP/f/wBV//8Aqv//AP/MzAD/zP8A//8zAP//
+ ZgD//5kA///MAAB/AABVfwAAqn8AAP9/AAAAnwAAVZ8AAKqfAAD/nwAAAL8AAFW/AACqvwAA/78AAADf
+ AABV3wAAqt8AAP/fAABV/wAAqv8AAAAAKgBVACoAqgAqAP8AKgAAHyoAVR8qAKofKgD/HyoAAD8qAFU/
+ KgDw+/8ApKCgAICAgAAAAP8AAP8AAAD//wD/AAAAAAAAAP//AAD///8A/f39/f39/f39/f39/f39/f0I
+ hgiqCKoICKoICKaGCP39qv39hv2GNg4ODjII/ar9/Yb9/ar9qjdjXzsOCP2G/f0IhquGCAleCWNfNob9
+ qv39qkxMTEgIX19fX18I/Qj9/QhwnZlMqoYIqggIqgiG/f2qcKadcAl8fFQDVFQDqv39CHDMpnCqfMvL
+ ysrKVAj9/QiUlHBwCYDPy8/LylSG/f2GqoYIqgig0M/Py8t8qv39CP39/f2GpNDQ0M/PfAn9/ar9/f39
+ qqT20NDQ0Hyq/f2G/f39/QmkpKSloKR8CP39CKoIhgiqCIYIqgiGCKr9/f39/f39/f39/f39/f39/f//
+ hv2AAf0ItAX9/bQFX2OABWNfgAU7O4ABNzeAAf39gAGq/YAB/YaAAf39vAE6h7wBX2O8AV9fgAE7N///
+ /f0oAAAAIAAAAEAAAAABACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAADCv8H/wr/B/8K/wf/Cv8H/wr/B/8K/wf/Cv8H/wr/B/8K/wf/Cv8H/wr/B/8K/
+ wf/Cv8H/wr/B/8K/wf/Cv8H/wr/B/8K/wf/Cv8H/wr/B/8K/wf/Cv8H/wr/B/8K/wf/Cv8H/wr/B/8K/
+ wf/Cv8H/AAAAAAAAAAAAAAAAAAAAAMK/wf8AAAAAAAAAAAAAAAAAAAAAwr/B/wAAAAAAAAAAAAAAAAAA
+ AAAAAAAAwr/B/7Z3Sf+zckT/rm0//6toO/+nYjb/pF4y/6BZLv+dVCr/mlEn/5dNI/+VSiH/kkce/5FE
+ HP+RRBz/kUUb/8K/wf8AAAAAAAAAAAAAAAAAAAAAwr/B/wAAAAAAAAAAAAAAAAAAAADCv8H/AAAAAAAA
+ AAAAAAAAAAAAAAAAAADCv8H/v4JS//+aZv//lWD/+5Bc//WLV//uh1P/54FO/997S//Wdkb/zXBD/8Vr
+ QP+9Zj3/tGI5/65dN/+RRRz/wr/B/wAAAAAAAAAAAAAAAAAAAADCv8H/AAAAAAAAAAAAAAAAAAAAAMK/
+ wf8AAAAAAAAAAAAAAAAAAAAAAAAAAMK/wf/GjFv//6Rz//+fbf//m2f//5Zh//yRXf/3jVj/8IhV/+mD
+ UP/hfUz/2HhI/9ByRP/HbED/v2c9/5VJIf/Cv8H/AAAAAAAAAAAAAAAAAAAAAMK/wf8AAAAAAAAAAAAA
+ AAAAAAAAwr/B/wAAAAAAAAAAAAAAAAAAAAAAAAAAwr/B/86WZP//r4L//6p7//+mdf//oW7//5xo//+X
+ Yv/9kl7/+I5a//KJVf/rhFH/4n5N/9t4SP/Sc0X/mlEm/8K/wf8AAAAAAAAAAAAAAAAAAAAAwr/B/wAA
+ AAAAAAAAAAAAAAAAAADCv8H/AAAAAAAAAAAAAAAAAAAAAAAAAADCv8H/1J9s//+4kf//tIv//6+E//+r
+ ff//p3f//6Jw//+eav//mWT//pRf//qQWv/0i1b/7IVS/+V/Tv+gWC7/wr/B/wAAAAAAAAAAAAAAAAAA
+ AADCv8H/AAAAAAAAAAAAAAAAAAAAAMK/wf8AAAAAAAAAAAAAAAAAAAAAAAAAAMK/wf/apnP//7+d//+7
+ mP//uJL//7WM//+whv//rH///6d4//+jcf//n2v//5ll//+VYP/6kVv/9YxY/6diN//Cv8H/AAAAAAAA
+ AAAAAAAAAAAAAMK/wf/Cv8H/wr/B/8K/wf/Cv8H/wr/B/8K/wf/Cv8H/wr/B/8K/wf/Cv8H/wr/B/96t
+ eP//wqL//8Gi//+/nv//vJn//7mT//+2jv//sYj//66A//+pev//pHP//6Bt//+bZ///l2L/r20//8K/
+ wf8AAAAAAAAAAAAAAAAAAAAAwr/B/xYXev8XF3b/GBVx/xkUbf8ZFGr/GhNm/xoSY/8bEV//HBFd/xwQ
+ W//Cv8H/4K96///Cov//wqL//8Ki///Cov//wJ///72b//+6lf//t4///7KJ//+ugv//qnv//6V0//+h
+ bv+3d0n/wr/B/wAAAAAAAAAAAAAAAAAAAADCv8H/FRqE/0dN1v8/RNL/Nz3Q/y40zv8nLcz/ISfK/xwh
+ yf8WHMf/GxJh/8K/wf/gr3r/4K96/+Cvev/gr3r/3614/9yqdf/apnL/16Nw/9Sea//Rmmj/zZZk/8qR
+ X//GjFz/w4dW/7+CUv/Cv8H/AAAAAAAAAAAAAAAAAAAAAMK/wf8SHZD/WF3a/05U1/9FS9X/PUPS/zU7
+ 0P8uM83/JyzL/yAmyf8aFGn/wr/B/8K/wf/Cv8H/wr/B/8K/wf/Cv8H/wr/B/8K/wf/Cv8H/wr/B/8K/
+ wf/Cv8H/wr/B/8K/wf/Cv8H/wr/B/8K/wf8AAAAAAAAAAAAAAAAAAAAAwr/B/xAfnP9obt7/YGTc/1Zb
+ 2f9NU9f/RUrU/ztB0v80OdD/LDHO/xgWcv/Cv8H/Dn+n/w18pP8MeqH/DHie/wt1m/8Kc5j/CXGV/wlv
+ k/8JbJD/CGqN/wdpi/8HZ4j/BmWH/wZkhf8GYoP/wr/B/wAAAAAAAAAAAAAAAAAAAADCv8H/DiKp/3l+
+ 4/9vdeH/Zmze/11i2/9UWtn/S1HW/0NI1P86P9H/Fhh9/8K/wf8Ogar/Barp/wGo6P8Apef/AKPm/wCi
+ 5P8An+L/AJ7h/wCd3/8AnN7/AJnc/wCY2/8AmNn/AJbX/wZjhP/Cv8H/AAAAAAAAAAAAAAAAAAAAAMK/
+ wf8MJbX/iI7n/4CF5v93fOP/bnPg/2Vr3f9bYdv/UljY/0lP1v8UGoj/wr/B/w+Erf8Lrur/Bqvq/wOo
+ 6f8Apuf/AKTm/wCi5f8AoOT/AJ/i/wCd4f8AnN//AJrd/wCZ2/8AmNr/BmWH/8K/wf8AAAAAAAAAAAAA
+ AAAAAAAAwr/B/wkowP+WnOz/jpTq/4aL6P9+hOX/dXri/2xx4P9jaN3/WV/b/xEek//Cv8H/EIaw/xay
+ 7P8Or+z/Cavr/wWq6v8Bp+j/AKbn/wCj5f8AoeT/AJ/j/wCe4f8AnOD/AJve/wCa3f8HZ4n/wr/B/wAA
+ AAAAAAAAAAAAAAAAAADCv8H/CCrK/6Ko7/+coe7/lZrr/42T6f+Fiub/fIHl/3N54v9rcN//ECGg/8K/
+ wf8QiLP/I7nu/xq07f8Ssez/C63r/war6v8Cqen/AKbo/wCk5v8AouX/AKHk/wCf4f8AneH/AJzf/who
+ i//Cv8H/AAAAAAAAAAAAAAAAAAAAAMK/wf8GLNP/q7Hy/6as8P+hpu//mp/u/5OY6/+LkOj/g4nm/3qA
+ 5P8NI6z/wr/B/xCKtv8xvvD/J7rv/x627f8Vsuz/Dq/s/wmr6/8Equn/Aafo/wCl5/8Ao+X/AKHk/wCf
+ 4v8AnuH/CGqO/8K/wf8AAAAAAAAAAAAAAAAAAAAAwr/B/wUu2/+vtPP/r7Tz/6qv8v+mq/D/oKXv/5me
+ 7f+Sl+v/io/p/wsmt//Cv8H/Eo24/0HF8f82wfD/LLzv/yK47v8atO3/EbHs/wut6/8Gq+r/A6np/wCm
+ 6P8Apeb/AKLl/wCh5P8IbJD/wr/B/wAAAAAAAAAAAAAAAAAAAADCv8H/BC/h/wQv3/8FL9z/BS3Z/wYt
+ 1v8GLNL/ByvP/wgqy/8IKcb/CSnC/8K/wf8Sjrv/Uszy/0fH8f87w/H/Mb7v/ye67/8et+7/FbPt/w6v
+ 6/8IrOv/BKnp/wGo6P8Apef/AKPl/wluk//Cv8H/AAAAAAAAAAAAAAAAAAAAAMK/wf/Cv8H/wr/B/8K/
+ wf/Cv8H/wr/B/8K/wf/Cv8H/wr/B/8K/wf/Cv8H/wr/B/xKRvf9j0/P/WM/z/0zK8f9BxfH/N8Hw/yy8
+ 7/8iuO7/GbTt/xGx7P8Lruv/Bqrq/wOo6f8Apuf/CnGV/8K/wf8AAAAAAAAAAAAAAAAAAAAAwr/B/wAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADCv8H/E5LA/3Ta8/9q1fP/XtHz/1LM
+ 8v9Hx/H/O8Pw/zG+7/8nu+//Hrbt/xay7f8Or+v/CKzq/wSq6f8Kc5j/wr/B/wAAAAAAAAAAAAAAAAAA
+ AADCv8H/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMK/wf8UlMH/hOD1/3rc
+ 9f9v2PP/ZNTy/1jO8v9NyvH/Qsbx/zbB8P8svO//I7ju/xm07f8SsOz/C67r/wt2m//Cv8H/AAAAAAAA
+ AAAAAAAAAAAAAMK/wf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwr/B/xSW
+ w/+T5vb/iuL1/3/e9P912vT/adbz/13R8/9SzPL/R8jx/zzD8P8xvvD/J7rv/x627v8Vsuz/C3ie/8K/
+ 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
+
Edit or add a [Trojan] server
diff --git a/v2rayN/v2rayN/Forms/AddServerForm.Designer.cs b/v2rayN/v2rayN/Forms/AddServerForm.Designer.cs
index 3f862d35..d6393c60 100644
--- a/v2rayN/v2rayN/Forms/AddServerForm.Designer.cs
+++ b/v2rayN/v2rayN/Forms/AddServerForm.Designer.cs
@@ -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");
@@ -450,12 +236,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 +263,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 +289,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;
}
}
\ No newline at end of file
diff --git a/v2rayN/v2rayN/Forms/AddServerForm.cs b/v2rayN/v2rayN/Forms/AddServerForm.cs
index a7de10ad..fe344d8e 100644
--- a/v2rayN/v2rayN/Forms/AddServerForm.cs
+++ b/v2rayN/v2rayN/Forms/AddServerForm.cs
@@ -37,15 +37,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,63 +53,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();
- }
-
- ///
- /// 设置伪装选项
- ///
- 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.Add("srtp");
- cmbHeaderType.Items.Add("utp");
- cmbHeaderType.Items.Add("wechat-video");
- cmbHeaderType.Items.Add("dtls");
- cmbHeaderType.Items.Add("wireguard");
- }
- 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 btnOK_Click(object sender, EventArgs e)
{
string address = txtAddress.Text;
@@ -123,16 +65,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"));
@@ -154,21 +88,15 @@ namespace v2rayN.Forms
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;
@@ -189,19 +117,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 导入客户端/服务端配置
///
@@ -243,31 +158,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);
}
///
@@ -279,23 +192,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
diff --git a/v2rayN/v2rayN/Forms/AddServerForm.resx b/v2rayN/v2rayN/Forms/AddServerForm.resx
index a13e5ab4..82469f68 100644
--- a/v2rayN/v2rayN/Forms/AddServerForm.resx
+++ b/v2rayN/v2rayN/Forms/AddServerForm.resx
@@ -194,733 +194,6 @@
1
-
- True
-
-
-
- NoControl
-
-
- 529, 211
-
-
- 113, 12
-
-
- 36
-
-
- 4)grpc serviceName
-
-
- label25
-
-
- System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- groupBox2
-
-
- 0
-
-
- True
-
-
- NoControl
-
-
- 529, 197
-
-
- 119, 12
-
-
- 35
-
-
- 3)QUIC key/Kcp seed
-
-
- label24
-
-
- System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- groupBox2
-
-
- 1
-
-
- True
-
-
- NoControl
-
-
- 465, 146
-
-
- 89, 12
-
-
- 34
-
-
- 4)QUIC securty
-
-
- label23
-
-
- System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- groupBox2
-
-
- 2
-
-
- 300, 7
-
-
- 197, 21
-
-
- 33
-
-
- txtSNI
-
-
- System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- panTlsMore
-
-
- 0
-
-
- True
-
-
- NoControl
-
-
- 270, 11
-
-
- 23, 12
-
-
- 32
-
-
- SNI
-
-
- label22
-
-
- System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- panTlsMore
-
-
- 1
-
-
- True
-
-
- 12, 11
-
-
- 83, 12
-
-
- 31
-
-
- allowInsecure
-
-
- label21
-
-
- System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- panTlsMore
-
-
- 2
-
-
-
-
-
- true
-
-
- false
-
-
- 100, 7
-
-
- 80, 20
-
-
- 30
-
-
- cmbAllowInsecure
-
-
- System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- panTlsMore
-
-
- 3
-
-
- 200, 234
-
-
- 500, 35
-
-
- 33
-
-
- panTlsMore
-
-
- System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- groupBox2
-
-
- 3
-
-
- True
-
-
- 350, 32
-
-
- 113, 12
-
-
- 15
-
-
- *Default value tcp
-
-
- label9
-
-
- System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- groupBox2
-
-
- 4
-
-
- True
-
-
- 464, 130
-
-
- 203, 12
-
-
- 29
-
-
- 3)h2 host Separated by commas (,)
-
-
- label20
-
-
- System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- groupBox2
-
-
- 5
-
-
- 127, 169
-
-
- True
-
-
- 396, 54
-
-
- 28
-
-
- txtPath
-
-
- System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- groupBox2
-
-
- 6
-
-
- tcp
-
-
- kcp
-
-
- ws
-
-
- h2
-
-
- quic
-
-
- grpc
-
-
- 192, 28
-
-
- 143, 20
-
-
- 12
-
-
- cmbNetwork
-
-
- System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- groupBox2
-
-
- 7
-
-
- True
-
-
- 9, 32
-
-
- 167, 12
-
-
- 13
-
-
- Transport protocol(network)
-
-
- label7
-
-
- System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- groupBox2
-
-
- 8
-
-
- True
-
-
- 9, 169
-
-
- 29, 12
-
-
- 27
-
-
- Path
-
-
- label19
-
-
- System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- groupBox2
-
-
- 9
-
-
- True
-
-
- 529, 183
-
-
- 59, 12
-
-
- 26
-
-
- 2)h2 path
-
-
- label18
-
-
- System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- groupBox2
-
-
- 10
-
-
- True
-
-
- 464, 115
-
-
- 59, 12
-
-
- 25
-
-
- 2)ws host
-
-
- label17
-
-
- System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- groupBox2
-
-
- 11
-
-
- True
-
-
- 529, 169
-
-
- 59, 12
-
-
- 24
-
-
- 1)ws path
-
-
- label16
-
-
- System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- groupBox2
-
-
- 12
-
-
- True
-
-
- 464, 100
-
-
- 215, 12
-
-
- 23
-
-
- 1)http host Separated by commas (,)
-
-
- label14
-
-
- System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- groupBox2
-
-
- 13
-
-
- True
-
-
- 9, 243
-
-
- 23, 12
-
-
- 22
-
-
- TLS
-
-
- label15
-
-
- System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- groupBox2
-
-
- 14
-
-
-
-
-
- tls
-
-
- 127, 239
-
-
- 60, 20
-
-
- 21
-
-
- cmbStreamSecurity
-
-
- System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- groupBox2
-
-
- 15
-
-
- True
-
-
- 282, 66
-
-
- 293, 12
-
-
- 20
-
-
- *tcp or kcp or QUIC camouflage type or grpc mode
-
-
- label12
-
-
- System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- groupBox2
-
-
- 16
-
-
- 158, 100
-
-
- True
-
-
- 300, 53
-
-
- 16
-
-
- txtRequestHost
-
-
- System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- groupBox2
-
-
- 17
-
-
- True
-
-
- 9, 66
-
-
- 95, 12
-
-
- 19
-
-
- Camouflage type
-
-
- label11
-
-
- System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- groupBox2
-
-
- 18
-
-
- True
-
-
- 9, 100
-
-
- 143, 12
-
-
- 17
-
-
- Camouflage domain(host)
-
-
- label10
-
-
- System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- groupBox2
-
-
- 19
-
-
- none
-
-
- http
-
-
- srtp
-
-
- utp
-
-
- wechat-video
-
-
- dtls
-
-
- wireguard
-
-
- 127, 64
-
-
- 143, 20
-
-
- 18
-
-
- cmbHeaderType
-
-
- System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- groupBox2
-
-
- 20
-
-
- Bottom
-
-
- 3, 215
-
-
- 723, 281
-
-
- 21
-
-
- Transport
-
-
- groupBox2
-
-
- System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- groupBox1
-
-
- 2
-
True
@@ -946,7 +219,7 @@
groupBox1
- 3
+ 2
aes-128-gcm
@@ -970,7 +243,7 @@
210, 20
- 6
+ 4
cmbSecurity
@@ -982,7 +255,7 @@
groupBox1
- 4
+ 3
127, 171
@@ -991,7 +264,7 @@
278, 21
- 11
+ 5
txtRemarks
@@ -1003,7 +276,7 @@
groupBox1
- 5
+ 4
True
@@ -1030,7 +303,7 @@
groupBox1
- 6
+ 5
True
@@ -1057,7 +330,7 @@
groupBox1
- 7
+ 6
127, 114
@@ -1066,7 +339,7 @@
143, 21
- 7
+ 3
txtAlterId
@@ -1078,7 +351,7 @@
groupBox1
- 8
+ 7
True
@@ -1105,7 +378,7 @@
groupBox1
- 9
+ 8
127, 85
@@ -1114,7 +387,7 @@
278, 21
- 5
+ 2
txtId
@@ -1126,7 +399,7 @@
groupBox1
- 10
+ 9
True
@@ -1153,7 +426,7 @@
groupBox1
- 11
+ 10
127, 56
@@ -1162,7 +435,7 @@
143, 21
- 3
+ 1
txtPort
@@ -1174,7 +447,7 @@
groupBox1
- 12
+ 11
True
@@ -1201,7 +474,7 @@
groupBox1
- 13
+ 12
127, 27
@@ -1210,7 +483,7 @@
359, 21
- 1
+ 0
txtAddress
@@ -1222,7 +495,7 @@
groupBox1
- 14
+ 13
True
@@ -1249,8 +522,9 @@
groupBox1
- 15
+ 14
+
Fill
@@ -1258,7 +532,7 @@
0, 35
- 729, 499
+ 729, 219
3
@@ -1306,7 +580,7 @@
Bottom
- 0, 534
+ 0, 474
729, 60
@@ -1324,7 +598,7 @@
$this
- 1
+ 2
Top
@@ -1348,7 +622,7 @@
$this
- 2
+ 3
17, 17
@@ -1399,7 +673,55 @@
$this
- 3
+ 4
+
+
+ Fill
+
+
+ 0, 0
+
+
+ 729, 220
+
+
+ 0
+
+
+ transportControl
+
+
+ v2rayN.Forms.ServerTransportControl, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
+
+
+ panel3
+
+
+ 0
+
+
+ Bottom
+
+
+ 0, 254
+
+
+ 729, 220
+
+
+ 9
+
+
+ panel3
+
+
+ System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ $this
+
+
+ 1
True
@@ -1411,7 +733,7 @@
6, 12
- 729, 594
+ 729, 534
Edit or add a [VMess] server
diff --git a/v2rayN/v2rayN/Forms/AddServerForm.zh-Hans.resx b/v2rayN/v2rayN/Forms/AddServerForm.zh-Hans.resx
index a8f9b0ae..47b4d4cd 100644
--- a/v2rayN/v2rayN/Forms/AddServerForm.zh-Hans.resx
+++ b/v2rayN/v2rayN/Forms/AddServerForm.zh-Hans.resx
@@ -130,21 +130,12 @@
149, 12
-
- 3)QUIC 加密密钥/Kcp seed
-
95, 12
-
- 4)QUIC 加密方式
-
167, 12
-
- 跳过证书验证(allowInsecure)
-
180, 7
@@ -154,15 +145,9 @@
143, 12
-
- *默认tcp,选错会无法连接
-
149, 12
-
- 3)h2 host中间逗号(,)隔开
-
127, 168
@@ -178,33 +163,21 @@
107, 12
-
- 传输协议(network)
-
9, 168
65, 12
-
- 路径(path)
-
161, 12
-
- 1)http host中间逗号(,)隔开
-
9, 237
107, 12
-
- 底层传输安全(tls)
-
127, 237
@@ -214,9 +187,6 @@
197, 12
-
- *tcp或kcp或QUIC伪装类型或grpc模式
-
127, 102
@@ -229,24 +199,15 @@
89, 12
-
- 伪装类型(type)
-
9, 102
89, 12
-
- 伪装域名(host)
-
127, 67
-
- 底层传输方式(transport)
-
113, 12
diff --git a/v2rayN/v2rayN/Forms/RoutingRuleSettingForm.resx b/v2rayN/v2rayN/Forms/RoutingRuleSettingForm.resx
index caef34ad..481e5f26 100644
--- a/v2rayN/v2rayN/Forms/RoutingRuleSettingForm.resx
+++ b/v2rayN/v2rayN/Forms/RoutingRuleSettingForm.resx
@@ -171,8 +171,8 @@
panel1
-
- $this
+
+ 3
75, 23
@@ -267,8 +267,8 @@
System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
- 47, 12
+
+ 8
txtCustomIcon
@@ -292,7 +292,7 @@
95, 21
- 128*128
+ PNG(128*128)
panel1
@@ -324,8 +324,8 @@
cmsLv
-
- 8
+
+ 5
Add
@@ -342,8 +342,8 @@
tabPage2
-
- toolStripMenuItem1
+
+ 644, 48
menuMoveBottom
@@ -375,8 +375,8 @@
RoutingRuleSettingForm
-
- panel2
+
+ 166, 21
System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
@@ -390,6 +390,9 @@
System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+ menuServer
+
System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
@@ -402,6 +405,9 @@
System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+ btnClose
+
Up (U)
@@ -411,9 +417,6 @@
btnOK
-
- 53, 12
-
47, 12
@@ -432,14 +435,11 @@
$this
-
- panel2
-
3, 3
- 18, 117
+ 10, 117
menuImportRulesFromClipboard
@@ -480,6 +480,9 @@
660, 104
+
+ $this
+
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
@@ -500,14 +503,11 @@
34
-
- 36
-
2
-
- 247, 22
+
+ 1
label4
@@ -521,8 +521,8 @@
True
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+ 247, 22
panel2
@@ -545,18 +545,15 @@
91, 45
-
- 166, 21
-
System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
- 644, 48
-
menuMoveDown
+
+ panel2
+
202, 22
@@ -575,8 +572,8 @@
11
-
- 3
+
+ panel2
7
@@ -590,9 +587,6 @@
System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
- 5
-
panel1
@@ -620,6 +614,9 @@
RuleList
+
+ toolStripMenuItem1
+
563, 21
@@ -629,8 +626,8 @@
Select All (Ctrl+A)
-
- btnClose
+
+ 53, 12
Fill
@@ -653,8 +650,8 @@
Export Selected Rules
-
- menuServer
+
+ 36
91, 13
@@ -728,6 +725,9 @@
NoControl
+
+ 77, 12
+
0
@@ -755,8 +755,8 @@
txtRemarks
-
- 1
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
True
diff --git a/v2rayN/v2rayN/Forms/RoutingRuleSettingForm.zh-Hans.resx b/v2rayN/v2rayN/Forms/RoutingRuleSettingForm.zh-Hans.resx
index d6544331..6c7dcd5f 100644
--- a/v2rayN/v2rayN/Forms/RoutingRuleSettingForm.zh-Hans.resx
+++ b/v2rayN/v2rayN/Forms/RoutingRuleSettingForm.zh-Hans.resx
@@ -136,6 +136,9 @@
670, 104
+
+ 浏览(&B)
+
101, 105
diff --git a/v2rayN/v2rayN/Forms/ServerTransportControl.Designer.cs b/v2rayN/v2rayN/Forms/ServerTransportControl.Designer.cs
new file mode 100644
index 00000000..db395e1e
--- /dev/null
+++ b/v2rayN/v2rayN/Forms/ServerTransportControl.Designer.cs
@@ -0,0 +1,243 @@
+namespace v2rayN.Forms
+{
+ partial class ServerTransportControl
+ {
+ ///
+ /// 必需的设计器变量。
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// 清理所有正在使用的资源。
+ ///
+ /// 如果应释放托管资源,为 true;否则为 false。
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region 组件设计器生成的代码
+
+ ///
+ /// 设计器支持所需的方法 - 不要修改
+ /// 使用代码编辑器修改此方法的内容。
+ ///
+ 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.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.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";
+ //
+ // 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;
+ 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);
+ //
+ // 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;
+ 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";
+ //
+ // 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;
+ }
+}
diff --git a/v2rayN/v2rayN/Forms/ServerTransportControl.cs b/v2rayN/v2rayN/Forms/ServerTransportControl.cs
new file mode 100644
index 00000000..40c6a9c5
--- /dev/null
+++ b/v2rayN/v2rayN/Forms/ServerTransportControl.cs
@@ -0,0 +1,179 @@
+using System;
+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;
+
+ 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;
+ }
+
+ 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 = "";
+ }
+
+ 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;
+ }
+
+ 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.Add("srtp");
+ cmbHeaderType.Items.Add("utp");
+ cmbHeaderType.Items.Add("wechat-video");
+ cmbHeaderType.Items.Add("dtls");
+ cmbHeaderType.Items.Add("wireguard");
+ }
+ 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");
+ }
+ 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();
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/v2rayN/v2rayN/Forms/ServerTransportControl.resx b/v2rayN/v2rayN/Forms/ServerTransportControl.resx
new file mode 100644
index 00000000..32e2e234
--- /dev/null
+++ b/v2rayN/v2rayN/Forms/ServerTransportControl.resx
@@ -0,0 +1,717 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+
+ 300, 7
+
+
+ 197, 21
+
+
+
+ 1
+
+
+ txtSNI
+
+
+ System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ panTlsMore
+
+
+ 0
+
+
+ True
+
+
+
+ NoControl
+
+
+ 270, 11
+
+
+ 23, 12
+
+
+ 32
+
+
+ SNI
+
+
+ labSNI
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ panTlsMore
+
+
+ 1
+
+
+ True
+
+
+ NoControl
+
+
+ 12, 11
+
+
+ 83, 12
+
+
+ 31
+
+
+ allowInsecure
+
+
+ labAllowInsecure
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ panTlsMore
+
+
+ 2
+
+
+
+
+
+ true
+
+
+ false
+
+
+ 100, 7
+
+
+ 80, 20
+
+
+ 0
+
+
+ cmbAllowInsecure
+
+
+ System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ panTlsMore
+
+
+ 3
+
+
+ 200, 171
+
+
+ 500, 35
+
+
+ 33
+
+
+ panTlsMore
+
+
+ System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ gbTransport
+
+
+ 0
+
+
+ True
+
+
+ NoControl
+
+
+ 350, 32
+
+
+ 113, 12
+
+
+ 15
+
+
+ *Default value tcp
+
+
+ tipNetwork
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ gbTransport
+
+
+ 1
+
+
+ 127, 136
+
+
+ True
+
+
+ 396, 20
+
+
+ 4
+
+
+ txtPath
+
+
+ System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ gbTransport
+
+
+ 2
+
+
+ tcp
+
+
+ kcp
+
+
+ ws
+
+
+ h2
+
+
+ quic
+
+
+ grpc
+
+
+ 192, 28
+
+
+ 143, 20
+
+
+ 1
+
+
+ cmbNetwork
+
+
+ System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ gbTransport
+
+
+ 3
+
+
+ True
+
+
+ NoControl
+
+
+ 9, 32
+
+
+ 167, 12
+
+
+ 13
+
+
+ Transport protocol(network)
+
+
+ labNetwork
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ gbTransport
+
+
+ 4
+
+
+ True
+
+
+ NoControl
+
+
+ 9, 140
+
+
+ 29, 12
+
+
+ 27
+
+
+ Path
+
+
+ labPath
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ gbTransport
+
+
+ 5
+
+
+ True
+
+
+ NoControl
+
+
+ 529, 140
+
+
+ 11, 12
+
+
+ 24
+
+
+ *
+
+
+ tipPath
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ gbTransport
+
+
+ 6
+
+
+ True
+
+
+ NoControl
+
+
+ 464, 104
+
+
+ 11, 12
+
+
+ 23
+
+
+ *
+
+
+ tipRequestHost
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ gbTransport
+
+
+ 7
+
+
+ True
+
+
+ NoControl
+
+
+ 9, 182
+
+
+ 23, 12
+
+
+ 22
+
+
+ TLS
+
+
+ labStreamSecurity
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ gbTransport
+
+
+ 8
+
+
+ 127, 178
+
+
+ 60, 20
+
+
+ 5
+
+
+ cmbStreamSecurity
+
+
+ System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ gbTransport
+
+
+ 9
+
+
+ True
+
+
+ NoControl
+
+
+ 282, 66
+
+
+ 11, 12
+
+
+ 20
+
+
+ *
+
+
+ tipHeaderType
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ gbTransport
+
+
+ 10
+
+
+ 158, 100
+
+
+ True
+
+
+ 300, 20
+
+
+ 3
+
+
+ txtRequestHost
+
+
+ System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ gbTransport
+
+
+ 11
+
+
+ True
+
+
+ NoControl
+
+
+ 9, 66
+
+
+ 95, 12
+
+
+ 19
+
+
+ Camouflage type
+
+
+ labHeaderType
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ gbTransport
+
+
+ 12
+
+
+ True
+
+
+ NoControl
+
+
+ 9, 104
+
+
+ 143, 12
+
+
+ 17
+
+
+ Camouflage domain(host)
+
+
+ labRequestHost
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ gbTransport
+
+
+ 13
+
+
+ none
+
+
+ http
+
+
+ srtp
+
+
+ utp
+
+
+ wechat-video
+
+
+ dtls
+
+
+ wireguard
+
+
+ 127, 64
+
+
+ 143, 20
+
+
+ 2
+
+
+ cmbHeaderType
+
+
+ System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ gbTransport
+
+
+ 14
+
+
+ Fill
+
+
+ 0, 0
+
+
+ 723, 220
+
+
+ 22
+
+
+ Transport
+
+
+ gbTransport
+
+
+ System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ $this
+
+
+ 0
+
+
+ True
+
+
+ 6, 12
+
+
+ 723, 220
+
+
+ ServerTransportControl
+
+
+ System.Windows.Forms.UserControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/v2rayN/v2rayN/Forms/ServerTransportControl.zh-Hans.resx b/v2rayN/v2rayN/Forms/ServerTransportControl.zh-Hans.resx
new file mode 100644
index 00000000..a70f28e7
--- /dev/null
+++ b/v2rayN/v2rayN/Forms/ServerTransportControl.zh-Hans.resx
@@ -0,0 +1,184 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+
+ 167, 12
+
+
+ 跳过证书验证(allowInsecure)
+
+
+ 183, 7
+
+
+ 143, 12
+
+
+ *默认tcp,选错会无法连接
+
+
+ 127, 28
+
+
+ 208, 20
+
+
+ 107, 12
+
+
+ 传输协议(network)
+
+
+ 65, 12
+
+
+ 路径(path)
+
+
+ 107, 12
+
+
+ 底层传输安全(tls)
+
+
+ 203, 12
+
+
+ 127, 100
+
+
+ 331, 20
+
+
+ 89, 12
+
+
+ 伪装类型(type)
+
+
+ 89, 12
+
+
+ 伪装域名(host)
+
+
+ 底层传输方式(transport)
+
+
\ No newline at end of file
diff --git a/v2rayN/v2rayN/Handler/ConfigHandler.cs b/v2rayN/v2rayN/Handler/ConfigHandler.cs
index 739d8d3b..a9f2eb65 100644
--- a/v2rayN/v2rayN/Handler/ConfigHandler.cs
+++ b/v2rayN/v2rayN/Handler/ConfigHandler.cs
@@ -639,8 +639,10 @@ namespace v2rayN.Handler
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();
diff --git a/v2rayN/v2rayN/Handler/ShareHandler.cs b/v2rayN/v2rayN/Handler/ShareHandler.cs
index 325b6654..65756763 100644
--- a/v2rayN/v2rayN/Handler/ShareHandler.cs
+++ b/v2rayN/v2rayN/Handler/ShareHandler.cs
@@ -30,207 +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();
- 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));
- if (item.headerType == Global.GrpcgunMode || item.headerType == Global.GrpcmultiMode)
- {
- dicQuery.Add("mode", Utils.UrlEncode(item.headerType));
- }
- }
- 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;
}
@@ -240,6 +58,224 @@ 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
+ };
+
+ 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
+ //var pw = Utils.Base64Encode($"{item.security}:{item.id}");
+ //url = $"{pw}@{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);
+ 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);
+ }
+ 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);
+ 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();
+ 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));
+ if (item.headerType == Global.GrpcgunMode || item.headerType == Global.GrpcmultiMode)
+ {
+ dicQuery.Add("mode", Utils.UrlEncode(item.headerType));
+ }
+ }
+ 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);
+ return url;
+ }
private static string GetIpv6(string address)
{
return Utils.IsIpv6(address) ? $"[{address}]" : address;
@@ -279,50 +315,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(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);
@@ -351,69 +344,13 @@ 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)
- {
- 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];
+ vmessItem = ResolveSocks(result);
}
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))
{
@@ -436,6 +373,58 @@ 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(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);
+
+ return vmessItem;
+ }
private static VmessItem ResolveVmess4Kitsunebi(string result)
{
@@ -476,6 +465,92 @@ namespace v2rayN.Handler
return vmessItem;
}
+ private static VmessItem ResolveStdVmess(string result)
+ {
+ VmessItem i = new VmessItem
+ {
+ configType = (int)EConfigType.Vmess,
+ security = "auto"
+ };
+
+ Uri u = new Uri(result);
+
+ i.address = u.IdnHost;
+ i.port = u.Port;
+ i.remarks = 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)
+ {
+ i.streamSecurity = m.Groups["streamSecurity"].Value;
+ }
+ switch (i.streamSecurity)
+ {
+ case "tls":
+ // TODO tls config
+ break;
+ default:
+ if (!string.IsNullOrWhiteSpace(i.streamSecurity))
+ return null;
+ break;
+ }
+
+ i.network = m.Groups["network"].Value;
+ switch (i.network)
+ {
+ case "tcp":
+ string t1 = q["type"] ?? "none";
+ i.headerType = t1;
+ // TODO http option
+
+ break;
+ case "kcp":
+ i.headerType = q["type"] ?? "none";
+ // TODO kcp seed
+ break;
+
+ case "ws":
+ string p1 = q["path"] ?? "/";
+ string h1 = q["host"] ?? "";
+ i.requestHost = Utils.UrlDecode(h1);
+ i.path = p1;
+ break;
+
+ case "http":
+ case "h2":
+ i.network = "h2";
+ string p2 = q["path"] ?? "/";
+ string h2 = q["host"] ?? "";
+ i.requestHost = Utils.UrlDecode(h2);
+ i.path = p2;
+ break;
+
+ case "quic":
+ string s = q["security"] ?? "none";
+ string k = q["key"] ?? "";
+ string t3 = q["type"] ?? "none";
+ i.headerType = t3;
+ i.requestHost = Utils.UrlDecode(s);
+ i.path = k;
+ break;
+
+ default:
+ return null;
+ }
+
+ return i;
+ }
+
private static VmessItem ResolveSip002(string result)
{
Uri parsedUrl;
@@ -563,92 +638,77 @@ namespace v2rayN.Handler
private static readonly Regex StdVmessUserInfo = new Regex(
@"^(?[a-z]+)(\+(?[a-z]+))?:(?[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})-(?[0-9]+)$");
- private static VmessItem ResolveStdVmess(string result)
+ private static VmessItem ResolveSocks(string result)
{
- VmessItem i = new VmessItem
+ VmessItem vmessItem = new VmessItem();
+ vmessItem.configType = (int)EConfigType.Socks;
+ result = result.Substring(Global.socksProtocol.Length);
+ //remark
+ int indexRemark = result.IndexOf("#");
+ if (indexRemark > 0)
{
- configType = (int)EConfigType.Vmess,
- security = "auto"
- };
+ 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);
+ }
- Uri u = new Uri(result);
-
- i.address = u.IdnHost;
- i.port = u.Port;
- i.remarks = 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))
+ string[] arr1 = result.Split('@');
+ if (arr1.Length != 2)
{
return null;
}
- i.alterId = aid;
-
- if (m.Groups["streamSecurity"].Success)
+ string[] arr21 = arr1[0].Split(':');
+ //string[] arr22 = arr1[1].Split(':');
+ int indexPort = arr1[1].LastIndexOf(":");
+ if (arr21.Length != 2 || indexPort < 0)
{
- i.streamSecurity = m.Groups["streamSecurity"].Value;
- }
- switch (i.streamSecurity)
- {
- case "tls":
- // TODO tls config
- break;
- default:
- if (!string.IsNullOrWhiteSpace(i.streamSecurity))
- return null;
- break;
+ 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];
- i.network = m.Groups["network"].Value;
- switch (i.network)
- {
- case "tcp":
- string t1 = q["type"] ?? "none";
- i.headerType = t1;
- // TODO http option
-
- break;
- case "kcp":
- i.headerType = q["type"] ?? "none";
- // TODO kcp seed
- break;
-
- case "ws":
- string p1 = q["path"] ?? "/";
- string h1 = q["host"] ?? "";
- i.requestHost = Utils.UrlDecode(h1);
- i.path = p1;
- break;
-
- case "http":
- case "h2":
- i.network = "h2";
- string p2 = q["path"] ?? "/";
- string h2 = q["host"] ?? "";
- i.requestHost = Utils.UrlDecode(h2);
- i.path = p2;
- break;
-
- case "quic":
- string s = q["security"] ?? "none";
- string k = q["key"] ?? "";
- string t3 = q["type"] ?? "none";
- i.headerType = t3;
- i.requestHost = Utils.UrlDecode(s);
- i.path = k;
- break;
-
- default:
- return null;
- }
-
- return i;
+ return vmessItem;
}
+ private static VmessItem ResolveTrojan(string result)
+ {
+ VmessItem vmessItem = new VmessItem();
+
+ 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);
+ }
+ return vmessItem;
+ }
private static VmessItem ResolveStdVLESS(string result)
{
VmessItem item = new VmessItem
@@ -702,7 +762,7 @@ namespace v2rayN.Handler
break;
case "grpc":
item.path = Utils.UrlDecode(query["serviceName"] ?? "");
- item.headerType= Utils.UrlDecode(query["mode"] ?? Global.GrpcgunMode);
+ item.headerType = Utils.UrlDecode(query["mode"] ?? Global.GrpcgunMode);
break;
default:
return null;
diff --git a/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs b/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs
index 61df26d0..972c8309 100644
--- a/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs
+++ b/v2rayN/v2rayN/Handler/V2rayConfigHandler.cs
@@ -525,9 +525,26 @@ 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 = "xtls-rprx-origin";
+ }
+ else
+ {
+ serversItem.flow = config.flow().Replace("splice", "direct");
+ }
+
+ outbound.mux.enabled = false;
+ outbound.mux.concurrency = -1;
+ }
outbound.mux.enabled = false;
outbound.mux.concurrency = -1;
diff --git a/v2rayN/v2rayN/Mode/V2rayConfig.cs b/v2rayN/v2rayN/Mode/V2rayConfig.cs
index 3cbd5c9a..b2680243 100644
--- a/v2rayN/v2rayN/Mode/V2rayConfig.cs
+++ b/v2rayN/v2rayN/Mode/V2rayConfig.cs
@@ -25,7 +25,7 @@ namespace v2rayN.Mode
/// 统计需要, 空对象
///
public Stats stats { get; set; }
-
+
///
public API api { get; set; }
@@ -133,14 +133,14 @@ namespace v2rayN.Mode
///
public List clients { get; set; }
-
+
///
/// VLESS
///
public string decryption { get; set; }
public bool allowTransparent { get; set; }
-
+
}
public class UsersItem
@@ -170,7 +170,7 @@ namespace v2rayN.Mode
///
/// VLESS
///
- public string flow { get; set; }
+ public string flow { get; set; }
}
public class Sniffing
{
@@ -271,6 +271,11 @@ namespace v2rayN.Mode
///
public int level { get; set; }
+ ///
+ /// trojan
+ ///
+ public string flow { get; set; }
+
///
///
///
@@ -402,7 +407,7 @@ namespace v2rayN.Mode
}
public class TcpSettings
- {
+ {
///
/// 数据包头部伪装设置
///
@@ -466,7 +471,7 @@ namespace v2rayN.Mode
}
public class WsSettings
- {
+ {
///
///
///
diff --git a/v2rayN/v2rayN/Resx/ResUI.Designer.cs b/v2rayN/v2rayN/Resx/ResUI.Designer.cs
index 2145ed2a..e46c2dff 100644
--- a/v2rayN/v2rayN/Resx/ResUI.Designer.cs
+++ b/v2rayN/v2rayN/Resx/ResUI.Designer.cs
@@ -195,6 +195,15 @@ namespace v2rayN.Resx {
}
}
+ ///
+ /// 查找类似 Please fill in the correct custom DNS 的本地化字符串。
+ ///
+ internal static string FillCorrectDNSText {
+ get {
+ return ResourceManager.GetString("FillCorrectDNSText", resourceCulture);
+ }
+ }
+
///
/// 查找类似 Please fill in the correct format server port 的本地化字符串。
///
@@ -897,5 +906,113 @@ namespace v2rayN.Resx {
return ResourceManager.GetString("TestMeOutput", resourceCulture);
}
}
+
+ ///
+ /// 查找类似 1)tcp camouflage type 的本地化字符串。
+ ///
+ internal static string TransportHeaderTypeTip1 {
+ get {
+ return ResourceManager.GetString("TransportHeaderTypeTip1", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 2)kcp camouflage type 的本地化字符串。
+ ///
+ internal static string TransportHeaderTypeTip2 {
+ get {
+ return ResourceManager.GetString("TransportHeaderTypeTip2", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 3)QUIC camouflage type 的本地化字符串。
+ ///
+ internal static string TransportHeaderTypeTip3 {
+ get {
+ return ResourceManager.GetString("TransportHeaderTypeTip3", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 4)grpc mode 的本地化字符串。
+ ///
+ internal static string TransportHeaderTypeTip4 {
+ get {
+ return ResourceManager.GetString("TransportHeaderTypeTip4", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 1)ws path 的本地化字符串。
+ ///
+ internal static string TransportPathTip1 {
+ get {
+ return ResourceManager.GetString("TransportPathTip1", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 2)h2 path 的本地化字符串。
+ ///
+ internal static string TransportPathTip2 {
+ get {
+ return ResourceManager.GetString("TransportPathTip2", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 3)QUIC key/Kcp seed 的本地化字符串。
+ ///
+ internal static string TransportPathTip3 {
+ get {
+ return ResourceManager.GetString("TransportPathTip3", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 4)grpc serviceName 的本地化字符串。
+ ///
+ internal static string TransportPathTip4 {
+ get {
+ return ResourceManager.GetString("TransportPathTip4", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 1)http host Separated by commas (,) 的本地化字符串。
+ ///
+ internal static string TransportRequestHostTip1 {
+ get {
+ return ResourceManager.GetString("TransportRequestHostTip1", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 2)ws host 的本地化字符串。
+ ///
+ internal static string TransportRequestHostTip2 {
+ get {
+ return ResourceManager.GetString("TransportRequestHostTip2", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 3)h2 host Separated by commas (,) 的本地化字符串。
+ ///
+ internal static string TransportRequestHostTip3 {
+ get {
+ return ResourceManager.GetString("TransportRequestHostTip3", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 4)QUIC securty 的本地化字符串。
+ ///
+ internal static string TransportRequestHostTip4 {
+ get {
+ return ResourceManager.GetString("TransportRequestHostTip4", resourceCulture);
+ }
+ }
}
}
diff --git a/v2rayN/v2rayN/Resx/ResUI.resx b/v2rayN/v2rayN/Resx/ResUI.resx
index b58ee145..1bf358cb 100644
--- a/v2rayN/v2rayN/Resx/ResUI.resx
+++ b/v2rayN/v2rayN/Resx/ResUI.resx
@@ -397,4 +397,43 @@
Custom Icon
+
+ Please fill in the correct custom DNS
+
+
+ 1)ws path
+
+
+ 2)h2 path
+
+
+ 3)QUIC key/Kcp seed
+
+
+ 4)grpc serviceName
+
+
+ 1)http host Separated by commas (,)
+
+
+ 2)ws host
+
+
+ 3)h2 host Separated by commas (,)
+
+
+ 4)QUIC securty
+
+
+ 1)tcp camouflage type
+
+
+ 2)kcp camouflage type
+
+
+ 3)QUIC camouflage type
+
+
+ 4)grpc mode
+
\ No newline at end of file
diff --git a/v2rayN/v2rayN/Resx/ResUI.zh-Hans.resx b/v2rayN/v2rayN/Resx/ResUI.zh-Hans.resx
index 64ca6267..2bf6f56e 100644
--- a/v2rayN/v2rayN/Resx/ResUI.zh-Hans.resx
+++ b/v2rayN/v2rayN/Resx/ResUI.zh-Hans.resx
@@ -397,4 +397,43 @@
自定义图标
+
+ 请填写正确的自定义DNS
+
+
+ 1)ws path
+
+
+ 2)h2 path
+
+
+ 3)QUIC 加密密钥/Kcp seed
+
+
+ 4)grpc serviceName
+
+
+ 1)http host中间逗号(,)隔开
+
+
+ 2)ws host
+
+
+ 3)h2 host中间逗号(,)隔开
+
+
+ 4)QUIC 加密方式
+
+
+ 1)tcp伪装类型
+
+
+ 2)kcp伪装类型
+
+
+ 3)QUIC伪装类型
+
+
+ 4)grpc 模式
+
\ No newline at end of file
diff --git a/v2rayN/v2rayN/v2rayN.csproj b/v2rayN/v2rayN/v2rayN.csproj
index 98fc93a2..b2601936 100644
--- a/v2rayN/v2rayN/v2rayN.csproj
+++ b/v2rayN/v2rayN/v2rayN.csproj
@@ -143,6 +143,12 @@
RoutingRuleSettingForm.cs
+
+ UserControl
+
+
+ ServerTransportControl.cs
+
@@ -256,6 +262,7 @@
+
@@ -336,6 +343,12 @@
RoutingRuleSettingForm.cs
+
+ ServerTransportControl.cs
+
+
+ ServerTransportControl.cs
+
SubSettingControl.cs
Designer
@@ -484,6 +497,9 @@
runtime; build; native; contentfiles; analyzers; buildtransitive
all
+
+ 2.0.13
+
12.0.3