From 3f1b21c4e58d853421cd48b740b06c26d033d429 Mon Sep 17 00:00:00 2001
From: ChsBuffer <33744752+chsbuffer@users.noreply.github.com>
Date: Mon, 12 Oct 2020 21:44:58 +0800
Subject: [PATCH] feat: VLESS support
---
Netch/Servers/VLESS/VLESS.cs | 46 +++++++++++++++++++
Netch/Servers/VLESS/VLESSController.cs | 36 +++++++++++++++
Netch/Servers/VLESS/VLESSForm/VLESSForm.cs | 46 +++++++++++++++++++
Netch/Servers/VLESS/VLESSUtil.cs | 53 ++++++++++++++++++++++
4 files changed, 181 insertions(+)
create mode 100644 Netch/Servers/VLESS/VLESS.cs
create mode 100644 Netch/Servers/VLESS/VLESSController.cs
create mode 100644 Netch/Servers/VLESS/VLESSForm/VLESSForm.cs
create mode 100644 Netch/Servers/VLESS/VLESSUtil.cs
diff --git a/Netch/Servers/VLESS/VLESS.cs b/Netch/Servers/VLESS/VLESS.cs
new file mode 100644
index 00000000..024a2bf0
--- /dev/null
+++ b/Netch/Servers/VLESS/VLESS.cs
@@ -0,0 +1,46 @@
+using System.Collections.Generic;
+using Netch.Models;
+using Netch.Servers.VMess;
+
+namespace Netch.Servers.VLESS
+{
+ public class VLESS : VMess.VMess
+ {
+ public VLESS()
+ {
+ Type = "VLESS";
+ }
+
+ ///
+ /// 加密方式
+ ///
+ public new string EncryptMethod { get; set; } = "none";
+
+ ///
+ /// 传输协议
+ ///
+ public new string TransferProtocol { get; set; } = VLESSGlobal.TransferProtocols[0];
+
+ ///
+ /// 伪装类型
+ ///
+ public new string FakeType { get; set; } = VLESSGlobal.FakeTypes[0];
+
+ ///
+ ///
+ ///
+ public string Flow { get; set; }
+ }
+
+ public class VLESSGlobal
+ {
+
+ public static List TransferProtocols => VMessGlobal.TransferProtocols;
+
+ public static readonly List FakeTypes = new List
+ {
+ "none",
+ "http"
+ };
+ }
+}
\ No newline at end of file
diff --git a/Netch/Servers/VLESS/VLESSController.cs b/Netch/Servers/VLESS/VLESSController.cs
new file mode 100644
index 00000000..215b75a2
--- /dev/null
+++ b/Netch/Servers/VLESS/VLESSController.cs
@@ -0,0 +1,36 @@
+using System.IO;
+using Netch.Controllers;
+using Netch.Models;
+
+namespace Netch.Servers.VLESS
+{
+ public class VLESSController : Guard, IServerController
+ {
+ public override string Name { get; protected set; } = "VLESS";
+ public override string MainFile { get; protected set; } = "v2ray.exe";
+
+ public int? Socks5LocalPort { get; set; }
+
+ public string LocalAddress { get; set; }
+
+ public bool Start(Server s, Mode mode)
+ {
+ var server = (VLESS) s;
+
+ File.WriteAllText("data\\last.json", VMess.Utils.V2rayConfigUtils.GenerateClientConfig(server, mode));
+
+ if (StartInstanceAuto("-config ..\\data\\last.json"))
+ {
+ if (File.Exists("data\\last.json")) File.Delete("data\\last.json");
+ return true;
+ }
+
+ return false;
+ }
+
+ public override void Stop()
+ {
+ StopInstance();
+ }
+ }
+}
\ No newline at end of file
diff --git a/Netch/Servers/VLESS/VLESSForm/VLESSForm.cs b/Netch/Servers/VLESS/VLESSForm/VLESSForm.cs
new file mode 100644
index 00000000..58c446f5
--- /dev/null
+++ b/Netch/Servers/VLESS/VLESSForm/VLESSForm.cs
@@ -0,0 +1,46 @@
+using Netch.Forms;
+
+namespace Netch.Servers.VLESS.VLESSForm
+{
+ class VLESSForm : ServerForm
+ {
+ protected override string TypeName { get; } = "VLESS";
+
+ public VLESSForm(VLESS server = default)
+ {
+ server ??= new VLESS();
+ Server = server;
+ CreateTextBox("UUID", "UUID",
+ s => true,
+ s => server.UserID = s,
+ server.UserID);
+ CreateTextBox("EncryptMethod", "Encrypt Method",
+ s => true,
+ s => server.EncryptMethod = !string.IsNullOrWhiteSpace(s) ? s : "none",
+ server.EncryptMethod);
+ CreateTextBox("Flow", "Flow",
+ s => true,
+ s => server.Flow = s,
+ server.Flow);
+ CreateComboBox("TransferProtocol", "Transfer Protocol",
+ VLESSGlobal.TransferProtocols,
+ s => server.TransferProtocol = s,
+ server.TransferProtocol);
+ CreateComboBox("FakeType", "Fake Type",
+ VLESSGlobal.FakeTypes,
+ s => server.FakeType = s,
+ server.FakeType);
+ CreateTextBox("Host", "Host",
+ s => true,
+ s => server.Host = s,
+ server.Host);
+ CreateTextBox("Path", "Path",
+ s => true,
+ s => server.Path = s,
+ server.Path);
+ CreateCheckBox("TLSSecure", "TLS Secure",
+ b => server.TLSSecure = b,
+ server.TLSSecure);
+ }
+ }
+}
\ No newline at end of file
diff --git a/Netch/Servers/VLESS/VLESSUtil.cs b/Netch/Servers/VLESS/VLESSUtil.cs
new file mode 100644
index 00000000..a7050609
--- /dev/null
+++ b/Netch/Servers/VLESS/VLESSUtil.cs
@@ -0,0 +1,53 @@
+using System.Collections.Generic;
+using Netch.Controllers;
+using Netch.Models;
+using Newtonsoft.Json.Linq;
+
+namespace Netch.Servers.VLESS
+{
+ public class VLESSUtil : IServerUtil
+ {
+ public ushort Priority { get; } = 2;
+ public string TypeName { get; } = "VLESS";
+ public string FullName { get; } = "VLESS";
+ public string ShortName { get; } = "VL";
+ public string[] UriScheme { get; } = { };
+
+ public Server ParseJObject(JObject j)
+ {
+ return j.ToObject();
+ }
+
+ public void Edit(Server s)
+ {
+ new VLESSForm.VLESSForm((VLESS) s).ShowDialog();
+ }
+
+ public void Create()
+ {
+ new VLESSForm.VLESSForm().ShowDialog();
+ }
+
+ public string GetShareLink(Server server)
+ {
+ // TODO
+ return "";
+ }
+
+ public IServerController GetController()
+ {
+ return new VLESSController();
+ }
+
+ public IEnumerable ParseUri(string text)
+ {
+ throw new System.NotImplementedException();
+ }
+
+ public bool CheckServer(Server s)
+ {
+ // TODO
+ return true;
+ }
+ }
+}
\ No newline at end of file