From e86db631c50e0c35b2a14334cb76073455100e87 Mon Sep 17 00:00:00 2001 From: autumn Date: Wed, 23 Nov 2022 22:06:09 +0800 Subject: [PATCH] add quic --- ProxySuper.Core/Models/Projects/RayType.cs | 4 +- .../Models/Projects/V2raySettings.cs | 19 +- .../Models/Projects/V2raySettings_SS.cs | 3 + .../Models/Projects/V2raySettings_VLESS.cs | 34 +++ .../Models/Projects/V2raySettings_VMESS.cs | 31 +++ .../Models/Projects/XraySettings.cs | 3 + ProxySuper.Core/Services/ShareLink.cs | 5 +- ProxySuper.Core/Services/XrayConfigBuilder.cs | 6 +- .../ViewModels/V2rayEditorViewModel.cs | 189 +++++++++++--- .../ViewModels/XrayConfigViewModel.cs | 10 + .../ViewModels/XrayEditorViewModel.cs | 201 ++++++++++++--- .../Controls/V2raySettingsControl.xaml | 154 +++++++++++- .../Controls/VLESS_XTLS_Control.xaml | 7 +- .../Controls/XraySettingsControl.xaml | 234 +++++++++++++++--- ProxySuper.WPF/Resources/Languages/en.xaml | 13 + ProxySuper.WPF/Resources/Languages/tw_cn.xaml | 15 +- ProxySuper.WPF/Resources/Languages/zh_cn.xaml | 15 +- .../Views/Brook/BrookConfigView.xaml.cs | 7 +- .../Views/Brook/BrookEditorView.xaml | 87 ++++--- .../Views/Brook/BrookEditorView.xaml.cs | 5 +- .../Views/Brook/BrookInstallView.xaml.cs | 7 +- ProxySuper.WPF/Views/EnableRootView.xaml.cs | 7 +- .../MTProxyGo/MTProxyGoConfigView.xaml.cs | 7 +- .../Views/MTProxyGo/MTProxyGoEditorView.xaml | 61 ++--- .../MTProxyGo/MTProxyGoEditorView.xaml.cs | 7 +- .../MTProxyGo/MTProxyGoInstallView.xaml.cs | 7 +- .../NaiveProxy/NaiveProxyConfigView.xaml.cs | 7 +- .../NaiveProxy/NaiveProxyEditorView.xaml | 57 ++--- .../NaiveProxy/NaiveProxyEditorView.xaml.cs | 7 +- .../NaiveProxy/NaiveProxyInstallView.xaml.cs | 7 +- ProxySuper.WPF/Views/ShareLinkView.xaml.cs | 7 +- .../Views/TrojanGo/TrojanGoConfigView.xaml.cs | 7 +- .../Views/TrojanGo/TrojanGoEditorView.xaml | 1 - .../Views/TrojanGo/TrojanGoEditorView.xaml.cs | 5 +- .../TrojanGo/TrojanGoInstallView.xaml.cs | 7 +- .../Views/V2ray/V2rayConfigView.xaml.cs | 5 +- .../Views/V2ray/V2rayEditorView.xaml | 2 +- .../Views/V2ray/V2rayEditorView.xaml.cs | 3 - .../Views/V2ray/V2rayInstallView.xaml.cs | 7 +- .../Views/Xray/XrayConfigView.xaml.cs | 5 +- ProxySuper.WPF/Views/Xray/XrayEditorView.xaml | 2 +- .../Views/Xray/XrayEditorView.xaml.cs | 5 +- .../Views/Xray/XrayInstallView.xaml.cs | 5 +- 43 files changed, 984 insertions(+), 293 deletions(-) diff --git a/ProxySuper.Core/Models/Projects/RayType.cs b/ProxySuper.Core/Models/Projects/RayType.cs index 5f73e69..5ae31f4 100644 --- a/ProxySuper.Core/Models/Projects/RayType.cs +++ b/ProxySuper.Core/Models/Projects/RayType.cs @@ -10,6 +10,7 @@ VLESS_WS = 102, VLESS_H2 = 103, VLESS_KCP = 104, + VLESS_QUIC = 105, VLESS_gRPC = 110, // VMESS 201开头 @@ -17,6 +18,7 @@ VMESS_WS = 202, VMESS_H2 = 203, VMESS_KCP = 204, + VMESS_QUIC = 205, // Trojan 301开头 Trojan_TCP = 301, @@ -26,5 +28,5 @@ ShadowsocksAEAD = 401 } - + } diff --git a/ProxySuper.Core/Models/Projects/V2raySettings.cs b/ProxySuper.Core/Models/Projects/V2raySettings.cs index fa0bf1c..a57f250 100644 --- a/ProxySuper.Core/Models/Projects/V2raySettings.cs +++ b/ProxySuper.Core/Models/Projects/V2raySettings.cs @@ -9,6 +9,15 @@ namespace ProxySuper.Core.Models.Projects { public partial class V2raySettings : IProjectSettings { + public static List DisguiseTypes = new List { + "none", + "srtp", + "utp", + "wechat-video", + "dtls", + "wireguard", + }; + public V2raySettings() { WithTLS = true; @@ -16,8 +25,11 @@ namespace ProxySuper.Core.Models.Projects var guid = Guid.NewGuid().ToString(); Port = 443; VLESS_KCP_Port = 2001; - VLESS_gRPC_Port = 2002; + VLESS_QUIC_Port = 2002; + VLESS_gRPC_Port = 2003; + VMESS_KCP_Port = 3001; + VMESS_QUIC_Port = 3002; ShadowSocksPort = 4001; UUID = guid; @@ -26,12 +38,17 @@ namespace ProxySuper.Core.Models.Projects VLESS_WS_Path = "/" + Utils.RandomString(6); VLESS_KCP_Type = "none"; VLESS_KCP_Seed = guid; + VLESS_QUIC_Type = "none"; + VLESS_QUIC_Security = "none"; + VLESS_QUIC_Type = "none"; VLESS_gRPC_ServiceName = "/" + Utils.RandomString(7); VMESS_WS_Path = "/" + Utils.RandomString(8); VMESS_TCP_Path = "/" + Utils.RandomString(9); VMESS_KCP_Seed = guid; VMESS_KCP_Type = "none"; + VMESS_QUIC_Security = "none"; + VMESS_QUIC_Type = "none"; TrojanPassword = guid; diff --git a/ProxySuper.Core/Models/Projects/V2raySettings_SS.cs b/ProxySuper.Core/Models/Projects/V2raySettings_SS.cs index 945cadf..4ff476b 100644 --- a/ProxySuper.Core/Models/Projects/V2raySettings_SS.cs +++ b/ProxySuper.Core/Models/Projects/V2raySettings_SS.cs @@ -19,6 +19,9 @@ namespace ProxySuper.Core.Models.Projects /// public int ShadowSocksPort { get; set; } + /// + /// share link + /// public string ShadowSocksShareLink { get diff --git a/ProxySuper.Core/Models/Projects/V2raySettings_VLESS.cs b/ProxySuper.Core/Models/Projects/V2raySettings_VLESS.cs index 8bb677b..0d34927 100644 --- a/ProxySuper.Core/Models/Projects/V2raySettings_VLESS.cs +++ b/ProxySuper.Core/Models/Projects/V2raySettings_VLESS.cs @@ -1,4 +1,7 @@ using ProxySuper.Core.Services; +using System.Collections.Generic; +using System.Linq; +using System.Windows.Documents; namespace ProxySuper.Core.Models.Projects { @@ -57,6 +60,37 @@ namespace ProxySuper.Core.Models.Projects } } + /// + /// vless quic security + /// + public string VLESS_QUIC_Security { get; set; } + + /// + /// vless quic type + /// + public string VLESS_QUIC_Type { get; set; } + + /// + /// vless quic port + /// + public int VLESS_QUIC_Port { get; set; } + + /// + /// vless quic key + /// + public string VLESS_QUIC_Key { get; set; } + + /// + /// vless quic ShareLink + /// + public string VLESS_QUIC_ShareLink + { + get + { + return ShareLink.Build(RayType.VLESS_QUIC, this); + } + } + /// /// grpc port /// diff --git a/ProxySuper.Core/Models/Projects/V2raySettings_VMESS.cs b/ProxySuper.Core/Models/Projects/V2raySettings_VMESS.cs index d0e2e21..7475494 100644 --- a/ProxySuper.Core/Models/Projects/V2raySettings_VMESS.cs +++ b/ProxySuper.Core/Models/Projects/V2raySettings_VMESS.cs @@ -61,5 +61,36 @@ namespace ProxySuper.Core.Models.Projects return ShareLink.Build(RayType.VMESS_KCP, this); } } + + /// + /// vmess quic security + /// + public string VMESS_QUIC_Security { get; set; } + + /// + /// vmess quic type + /// + public string VMESS_QUIC_Type { get; set; } + + /// + /// vmess quic port + /// + public int VMESS_QUIC_Port { get; set; } + + /// + /// vmess quic key + /// + public string VMESS_QUIC_Key { get; set; } + + /// + /// vmess quic ShareLink + /// + public string VMESS_QUIC_ShareLink + { + get + { + return ShareLink.Build(RayType.VMESS_QUIC, this); + } + } } } diff --git a/ProxySuper.Core/Models/Projects/XraySettings.cs b/ProxySuper.Core/Models/Projects/XraySettings.cs index 50292a5..2abc078 100644 --- a/ProxySuper.Core/Models/Projects/XraySettings.cs +++ b/ProxySuper.Core/Models/Projects/XraySettings.cs @@ -9,10 +9,13 @@ namespace ProxySuper.Core.Models.Projects { public class XraySettings : V2raySettings { + public static List FlowList = new List { "xtls-rprx-origin", "xtls-rprx-origin-udp443", "xtls-rprx-direct", "xtls-rprx-direct-udp443", "xtls-rprx-splice", "xtls-rprx-splice-udp443" }; public static List UTLSList = new List { "", "chrome", "firefox", "safari", "randomized" }; public string UTLS { get; set; } = UTLSList[1]; + public string Flow { get; set; } = FlowList[2]; + /// /// vless xtls shareLink /// diff --git a/ProxySuper.Core/Services/ShareLink.cs b/ProxySuper.Core/Services/ShareLink.cs index b892100..326df69 100644 --- a/ProxySuper.Core/Services/ShareLink.cs +++ b/ProxySuper.Core/Services/ShareLink.cs @@ -222,9 +222,10 @@ namespace ProxySuper.Core.Services } // 4.4 TLS 相关段 - if (xrayType == RayType.VLESS_TCP_XTLS) + if (settings is XraySettings) { - parametersURL += "&flow=xtls-rprx-direct"; + var xraySettings = settings as XraySettings; + parametersURL += $"&flow={xraySettings.Flow}"; } diff --git a/ProxySuper.Core/Services/XrayConfigBuilder.cs b/ProxySuper.Core/Services/XrayConfigBuilder.cs index 752fdef..c7d5096 100644 --- a/ProxySuper.Core/Services/XrayConfigBuilder.cs +++ b/ProxySuper.Core/Services/XrayConfigBuilder.cs @@ -91,7 +91,7 @@ namespace ProxySuper.Core.Services return caddyStr; } - private static void SetClients(dynamic bound, List uuidList, bool withXtls = false) + private static void SetClients(dynamic bound, List uuidList, bool withXtls = false, string flow = "") { bound.settings.clients.Clear(); uuidList.ForEach(id => @@ -103,7 +103,7 @@ namespace ProxySuper.Core.Services } else { - obj = new { id = id, flow = "xtls-rprx-direct" }; + obj = new { id = id, flow = flow }; } bound.settings.clients.Add(JToken.FromObject(obj)); @@ -126,7 +126,7 @@ namespace ProxySuper.Core.Services dest = FullbackPort })); xrayConfig.inbounds.Add(baseBound); - SetClients(baseBound, uuidList, withXtls: true); + SetClients(baseBound, uuidList, withXtls: true, flow: parameters.Flow); #region Fullbacks diff --git a/ProxySuper.Core/ViewModels/V2rayEditorViewModel.cs b/ProxySuper.Core/ViewModels/V2rayEditorViewModel.cs index dc490d9..f0d0181 100644 --- a/ProxySuper.Core/ViewModels/V2rayEditorViewModel.cs +++ b/ProxySuper.Core/ViewModels/V2rayEditorViewModel.cs @@ -64,12 +64,34 @@ namespace ProxySuper.Core.ViewModels } } - - - - public partial class V2rayEditorViewModel { + public List KcpTypes => V2raySettings.DisguiseTypes; + + public List QuicTypes => V2raySettings.DisguiseTypes; + + /// + /// https://www.v2ray.com/chapter_02/transport/quic.html + /// + public List QuicSecurities => new List { + "none", + "aes-128-gcm", + "chacha20-poly1305" + }; + + /// + /// https://www.v2ray.com/chapter_02/protocols/shadowsocks.html + /// + public List ShadowSocksMethods => new List { + "aes-256-cfb", + "aes-128-cfb", + "chacha20", + "chacha20-ietf", + "aes-256-gcm", + "aes-128-gcm", + "chacha20-poly1305" + }; + public IMvxCommand RandomUuid => new MvxCommand(() => GetUuid()); public bool WithTLS @@ -112,17 +134,6 @@ namespace ProxySuper.Core.ViewModels } } - public int ShadowSocksPort - { - get => Settings.ShadowSocksPort; - set - { - Settings.ShadowSocksPort = value; - RaisePropertyChanged("ShadowSocksPort"); - } - } - - public string UUID { get => Settings.UUID; @@ -166,12 +177,12 @@ namespace ProxySuper.Core.ViewModels } } + #region Torjan public string TrojanPassword { get => Settings.TrojanPassword; set => Settings.TrojanPassword = value; } - public bool Checked_Trojan_TCP { get @@ -196,9 +207,18 @@ namespace ProxySuper.Core.ViewModels { get => ShareLink.Build(RayType.Trojan_TCP, Settings); } + #endregion - private List _ssMethods = new List { "aes-256-gcm", "aes-128-gcm", "chacha20-poly1305", "chacha20-ietf-poly1305" }; - public List ShadowSocksMethods => _ssMethods; + #region ShadowSocks + public int ShadowSocksPort + { + get => Settings.ShadowSocksPort; + set + { + Settings.ShadowSocksPort = value; + RaisePropertyChanged("ShadowSocksPort"); + } + } public bool CheckedShadowSocks { @@ -209,6 +229,7 @@ namespace ProxySuper.Core.ViewModels RaisePropertyChanged("CheckedShadowSocks"); } } + public string ShadowSocksPassword { get => Settings.ShadowSocksPassword; @@ -230,6 +251,7 @@ namespace ProxySuper.Core.ViewModels { get => ShareLink.Build(RayType.ShadowsocksAEAD, Settings); } + #endregion private void CheckBoxChanged(bool value, RayType type) @@ -258,11 +280,11 @@ namespace ProxySuper.Core.ViewModels } /// - /// VMESS + /// VMESS SETTINGS /// public partial class V2rayEditorViewModel { - // vmess tcp + #region VMESS TCP public bool Checked_VMESS_TCP { get => Settings.Types.Contains(RayType.VMESS_TCP); @@ -281,8 +303,9 @@ namespace ProxySuper.Core.ViewModels { get => ShareLink.Build(RayType.VMESS_TCP, Settings); } + #endregion - // vmess ws + #region VMESS WS public bool Checked_VMESS_WS { get => Settings.Types.Contains(RayType.VMESS_WS); @@ -301,8 +324,9 @@ namespace ProxySuper.Core.ViewModels { get => ShareLink.Build(RayType.VMESS_WS, Settings); } + #endregion - // vmess kcp + #region VMESS KCP public string VMESS_KCP_Seed { get => Settings.VMESS_KCP_Seed; @@ -333,18 +357,69 @@ namespace ProxySuper.Core.ViewModels { get => ShareLink.Build(RayType.VMESS_KCP, Settings); } + #endregion + #region VMESS QUIC + public bool Checked_VMESS_QUIC + { + get => Settings.Types.Contains(RayType.VMESS_QUIC); + set + { + CheckBoxChanged(value, RayType.VMESS_QUIC); + RaisePropertyChanged(nameof(Checked_VMESS_QUIC)); + } + } + public string VMESS_QUIC_Key + { + get => Settings.VMESS_QUIC_Key; + set + { + Settings.VMESS_QUIC_Key = value; + RaisePropertyChanged(nameof(VMESS_QUIC_Key)); + } + } + public string VMESS_QUIC_Security + { + get => Settings.VMESS_QUIC_Security; + set + { + Settings.VMESS_QUIC_Security = value; + RaisePropertyChanged(nameof(VMESS_QUIC_Security)); + } + } + public string VMESS_QUIC_Type + { + get => Settings.VMESS_QUIC_Type; + set + { + Settings.VMESS_QUIC_Type = value; + RaisePropertyChanged(nameof(VMESS_QUIC_Type)); + } + } + public int VMESS_QUIC_Port + { + get => Settings.VMESS_QUIC_Port; + set + { + Settings.VMESS_QUIC_Port = value; + RaisePropertyChanged(nameof(VMESS_QUIC_Port)); + } + } + public string VMESS_QUIC_ShareLink + { + get => ShareLink.Build(RayType.VMESS_QUIC, Settings); + } + #endregion - private List _kcpTypes = new List { "none", "srtp", "utp", "wechat-video", "dtls", "wireguard", }; - public List KcpTypes => _kcpTypes; } + /// - /// VLESS + /// VLESS SETTINGS /// public partial class V2rayEditorViewModel { - // vless tcp + #region VLESS TCP public bool Checked_VLESS_TCP { get => Settings.Types.Contains(RayType.VLESS_TCP); @@ -358,9 +433,9 @@ namespace ProxySuper.Core.ViewModels { get => ShareLink.Build(RayType.VLESS_TCP, Settings); } + #endregion - - // vless ws + #region VLESS WS public string VLESS_WS_Path { get => Settings.VLESS_WS_Path; @@ -382,8 +457,9 @@ namespace ProxySuper.Core.ViewModels { get => ShareLink.Build(RayType.VLESS_WS, Settings); } + #endregion - // vless kcp + #region VLESS KCP public string VLESS_KCP_Seed { get => Settings.VLESS_KCP_Seed; @@ -414,8 +490,60 @@ namespace ProxySuper.Core.ViewModels { get => ShareLink.Build(RayType.VLESS_KCP, Settings); } + #endregion - // vless grpc + #region VLESS QUIC + public bool Checked_VLESS_QUIC + { + get => Settings.Types.Contains(RayType.VLESS_QUIC); + set + { + CheckBoxChanged(value, RayType.VLESS_QUIC); + RaisePropertyChanged(nameof(Checked_VLESS_QUIC)); + } + } + public string VLESS_QUIC_Key + { + get => Settings.VLESS_QUIC_Key; set + { + Settings.VLESS_QUIC_Key = value; + RaisePropertyChanged(nameof(VLESS_QUIC_Key)); + } + } + public string VLESS_QUIC_Security + { + get => Settings.VLESS_QUIC_Security; + set + { + Settings.VLESS_QUIC_Security = value; + RaisePropertyChanged(nameof(VLESS_QUIC_Security)); + } + } + public string VLESS_QUIC_Type + { + get => Settings.VLESS_QUIC_Type; + set + { + Settings.VLESS_QUIC_Type = value; + RaisePropertyChanged(nameof(VLESS_QUIC_Type)); + } + } + public int VLESS_QUIC_Port + { + get => Settings.VLESS_QUIC_Port; + set + { + Settings.VLESS_QUIC_Port = value; + RaisePropertyChanged(nameof(VLESS_QUIC_Port)); + } + } + public string VLESS_QUIC_ShareLink + { + get => ShareLink.Build(RayType.VLESS_QUIC, Settings); + } + #endregion + + #region VLESS gRPC public string VLESS_gRPC_ServiceName { get => Settings.VLESS_gRPC_ServiceName; @@ -439,5 +567,6 @@ namespace ProxySuper.Core.ViewModels { get => ShareLink.Build(RayType.VLESS_gRPC, Settings); } + #endregion } } diff --git a/ProxySuper.Core/ViewModels/XrayConfigViewModel.cs b/ProxySuper.Core/ViewModels/XrayConfigViewModel.cs index 57d19aa..a12d890 100644 --- a/ProxySuper.Core/ViewModels/XrayConfigViewModel.cs +++ b/ProxySuper.Core/ViewModels/XrayConfigViewModel.cs @@ -13,6 +13,16 @@ namespace ProxySuper.Core.ViewModels Settings = parameter; } + public string Flow + { + get { return Settings.Flow; } + } + + public string UTLS + { + get { return Settings.UTLS; } + } + public bool Checked_VLESS_TCP_XTLS { get diff --git a/ProxySuper.Core/ViewModels/XrayEditorViewModel.cs b/ProxySuper.Core/ViewModels/XrayEditorViewModel.cs index 7b8e5a0..963dc91 100644 --- a/ProxySuper.Core/ViewModels/XrayEditorViewModel.cs +++ b/ProxySuper.Core/ViewModels/XrayEditorViewModel.cs @@ -65,6 +65,30 @@ namespace ProxySuper.Core.ViewModels public partial class XrayEditorViewModel { + public List UTLSList { get => XraySettings.UTLSList; } + + public List KcpTypes => V2raySettings.DisguiseTypes; + + public List QuicTypes => V2raySettings.DisguiseTypes; + + public List QuicSecurities => new List + { + "none", + "aes-128-gcm", + "chacha20-poly1305" + }; + + public List ShadowSocksMethods => new List + { + "2022-blake3-aes-128-gcm", + "2022-blake3-aes-256-gcm", + "2022-blake3-chacha20-poly1305", + "aes-256-gcm", + "aes-128-gcm", + "chacha20-poly1305", + "none" + }; + public IMvxCommand RandomUuid => new MvxCommand(() => GetUuid()); public bool WithTLS @@ -88,8 +112,6 @@ namespace ProxySuper.Core.ViewModels } - public List UTLSList { get => XraySettings.UTLSList; } - public string UTLS { get => Settings.UTLS; @@ -120,17 +142,6 @@ namespace ProxySuper.Core.ViewModels } } - public int ShadowSocksPort - { - get => Settings.ShadowSocksPort; - set - { - Settings.ShadowSocksPort = value; - RaisePropertyChanged("ShadowSocksPort"); - } - } - - public string UUID { get => Settings.UUID; @@ -174,6 +185,7 @@ namespace ProxySuper.Core.ViewModels } } + #region Trojan public string TrojanPassword { get => Settings.TrojanPassword; @@ -204,9 +216,18 @@ namespace ProxySuper.Core.ViewModels { get => ShareLink.Build(RayType.Trojan_TCP, Settings); } + #endregion - private List _ssMethods = new List { "aes-256-gcm", "aes-128-gcm", "chacha20-poly1305", "chacha20-ietf-poly1305" }; - public List ShadowSocksMethods => _ssMethods; + #region ShadowSocks + public int ShadowSocksPort + { + get => Settings.ShadowSocksPort; + set + { + Settings.ShadowSocksPort = value; + RaisePropertyChanged("ShadowSocksPort"); + } + } public bool CheckedShadowSocks { @@ -238,7 +259,7 @@ namespace ProxySuper.Core.ViewModels { get => ShareLink.Build(RayType.ShadowsocksAEAD, Settings); } - + #endregion private void CheckBoxChanged(bool value, RayType type) { @@ -255,8 +276,6 @@ namespace ProxySuper.Core.ViewModels } } - - private void GetUuid() { UUID = Guid.NewGuid().ToString(); @@ -270,7 +289,7 @@ namespace ProxySuper.Core.ViewModels /// public partial class XrayEditorViewModel { - // vmess tcp + #region VMESS TCP public bool Checked_VMESS_TCP { get => Settings.Types.Contains(RayType.VMESS_TCP); @@ -289,8 +308,9 @@ namespace ProxySuper.Core.ViewModels { get => ShareLink.Build(RayType.VMESS_TCP, Settings); } + #endregion - // vmess ws + #region VMESS WS public bool Checked_VMESS_WS { get => Settings.Types.Contains(RayType.VMESS_WS); @@ -309,8 +329,9 @@ namespace ProxySuper.Core.ViewModels { get => ShareLink.Build(RayType.VMESS_WS, Settings); } + #endregion - // vmess kcp + #region VMESS KCP public string VMESS_KCP_Seed { get => Settings.VMESS_KCP_Seed; @@ -341,10 +362,60 @@ namespace ProxySuper.Core.ViewModels { get => ShareLink.Build(RayType.VMESS_KCP, Settings); } + #endregion + #region VMESS QUIC + public bool Checked_VMESS_QUIC + { + get => Settings.Types.Contains(RayType.VMESS_QUIC); + set + { + CheckBoxChanged(value, RayType.VMESS_QUIC); + RaisePropertyChanged(nameof(Checked_VMESS_QUIC)); + } + } + public string VMESS_QUIC_Key + { + get => Settings.VMESS_QUIC_Key; + set + { + Settings.VMESS_QUIC_Key = value; + RaisePropertyChanged(nameof(VMESS_QUIC_Key)); + } + } + public string VMESS_QUIC_Security + { + get => Settings.VMESS_QUIC_Security; + set + { + Settings.VMESS_QUIC_Security = value; + RaisePropertyChanged(nameof(VMESS_QUIC_Security)); + } + } + public string VMESS_QUIC_Type + { + get => Settings.VMESS_QUIC_Type; + set + { + Settings.VMESS_QUIC_Type = value; + RaisePropertyChanged(nameof(VMESS_QUIC_Type)); + } + } + public int VMESS_QUIC_Port + { + get => Settings.VMESS_QUIC_Port; + set + { + Settings.VMESS_QUIC_Port = value; + RaisePropertyChanged(nameof(VMESS_QUIC_Port)); + } + } + public string VMESS_QUIC_ShareLink + { + get => ShareLink.Build(RayType.VMESS_QUIC, Settings); + } + #endregion - private List _kcpTypes = new List { "none", "srtp", "utp", "wechat-video", "dtls", "wireguard", }; - public List KcpTypes => _kcpTypes; } /// @@ -352,8 +423,19 @@ namespace ProxySuper.Core.ViewModels /// public partial class XrayEditorViewModel { + #region VLESS XTLS - // vless xtls + public List FlowList { get => XraySettings.FlowList; } + + public string Flow + { + get => Settings.Flow; + set + { + Settings.Flow = value; + RaisePropertyChanged(nameof(Flow)); + } + } public bool Checked_VLESS_TCP_XTLS { get => Settings.Types.Contains(RayType.VLESS_TCP_XTLS); @@ -367,8 +449,9 @@ namespace ProxySuper.Core.ViewModels { get => ShareLink.Build(RayType.VLESS_TCP_XTLS, Settings); } + #endregion - // vless tcp + #region VLESS TCP public bool Checked_VLESS_TCP { get => Settings.Types.Contains(RayType.VLESS_TCP); @@ -382,9 +465,9 @@ namespace ProxySuper.Core.ViewModels { get => ShareLink.Build(RayType.VLESS_TCP, Settings); } + #endregion - - // vless ws + #region VLESS WS public string VLESS_WS_Path { get => Settings.VLESS_WS_Path; @@ -406,12 +489,68 @@ namespace ProxySuper.Core.ViewModels { get => ShareLink.Build(RayType.VLESS_WS, Settings); } + #endregion - // vless kcp + #region VLESS QUIC + public string VLESS_QUIC_Key + { + get => Settings.VLESS_QUIC_Key; set + { + Settings.VLESS_QUIC_Key = value; + RaisePropertyChanged(nameof(VLESS_QUIC_Key)); + } + } + public bool Checked_VLESS_QUIC + { + get => Settings.Types.Contains(RayType.VLESS_QUIC); + set + { + CheckBoxChanged(value, RayType.VLESS_QUIC); + RaisePropertyChanged(nameof(Checked_VLESS_QUIC)); + } + } + public string VLESS_QUIC_Security + { + get => Settings.VLESS_QUIC_Security; + set + { + Settings.VLESS_QUIC_Security = value; + RaisePropertyChanged(nameof(VLESS_QUIC_Security)); + } + } + public string VLESS_QUIC_Type + { + get => Settings.VLESS_QUIC_Type; + set + { + Settings.VLESS_QUIC_Type = value; + RaisePropertyChanged(nameof(VLESS_QUIC_Type)); + } + } + public int VLESS_QUIC_Port + { + get => Settings.VLESS_QUIC_Port; + set + { + Settings.VLESS_QUIC_Port = value; + RaisePropertyChanged(nameof(VLESS_QUIC_Port)); + } + } + public string VLESS_QUIC_ShareLink + { + get => ShareLink.Build(RayType.VLESS_QUIC, Settings); + } + #endregion + + #region VLESS KCP public string VLESS_KCP_Seed { get => Settings.VLESS_KCP_Seed; - set => Settings.VLESS_KCP_Seed = value; + set + { + Settings.VLESS_KCP_Seed = value; + RaisePropertyChanged(nameof(VLESS_KCP_Seed)); + } } public string VLESS_KCP_Type { @@ -438,8 +577,9 @@ namespace ProxySuper.Core.ViewModels { get => ShareLink.Build(RayType.VLESS_KCP, Settings); } + #endregion - // vless grpc + #region VLESS gRPC public string VLESS_gRPC_ServiceName { get => Settings.VLESS_gRPC_ServiceName; @@ -463,6 +603,7 @@ namespace ProxySuper.Core.ViewModels { get => ShareLink.Build(RayType.VLESS_gRPC, Settings); } + #endregion } } diff --git a/ProxySuper.WPF/Controls/V2raySettingsControl.xaml b/ProxySuper.WPF/Controls/V2raySettingsControl.xaml index 270237a..3043116 100644 --- a/ProxySuper.WPF/Controls/V2raySettingsControl.xaml +++ b/ProxySuper.WPF/Controls/V2raySettingsControl.xaml @@ -15,6 +15,7 @@ + + + + + + + - + + + + + + + + @@ -87,6 +109,7 @@ + + @@ -119,6 +143,7 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + + @@ -314,6 +461,7 @@ + diff --git a/ProxySuper.WPF/Controls/VLESS_XTLS_Control.xaml b/ProxySuper.WPF/Controls/VLESS_XTLS_Control.xaml index 902dcf1..290e5e2 100644 --- a/ProxySuper.WPF/Controls/VLESS_XTLS_Control.xaml +++ b/ProxySuper.WPF/Controls/VLESS_XTLS_Control.xaml @@ -23,7 +23,12 @@ + + + diff --git a/ProxySuper.WPF/Controls/XraySettingsControl.xaml b/ProxySuper.WPF/Controls/XraySettingsControl.xaml index c7fb4a5..cabed7c 100644 --- a/ProxySuper.WPF/Controls/XraySettingsControl.xaml +++ b/ProxySuper.WPF/Controls/XraySettingsControl.xaml @@ -15,61 +15,82 @@ + + VerticalContentAlignment="Center" + IsChecked="{Binding Path=Checked_VLESS_TCP_XTLS}"> + VerticalContentAlignment="Center" + IsChecked="{Binding Path=Checked_VLESS_TCP}"> + VerticalContentAlignment="Center" + IsChecked="{Binding Path=Checked_VLESS_WS}"> + + + + + VerticalContentAlignment="Center" + Foreground="LimeGreen" + IsChecked="{Binding Path=Checked_VLESS_gRPC}"> + + - - + + + + + + - + + - - - - + - + + + + + + + + + + + @@ -151,18 +188,22 @@ + + + }"> + + + + + + + + + + + + + + + + + + + + + + + }"> @@ -215,11 +311,13 @@ Visibility="{ Binding Path=Checked_VLESS_gRPC, Converter={StaticResource VisibleConverter} - }"> + }"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -327,11 +486,12 @@ TextWrapping="Wrap" Width="260" /> - + + diff --git a/ProxySuper.WPF/Resources/Languages/en.xaml b/ProxySuper.WPF/Resources/Languages/en.xaml index c0bd5c3..ab1de59 100644 --- a/ProxySuper.WPF/Resources/Languages/en.xaml +++ b/ProxySuper.WPF/Resources/Languages/en.xaml @@ -75,8 +75,10 @@ VLESS WS VLESS gRPC VLESS mKCP + VLESS QUIC VMESS WS VMESS mKCP + VMESS QUIC ShadowSocks Trojan @@ -85,23 +87,34 @@ With TLS Unchecked means upload your own TLS. UUID + Flow + uTLS Multi User Multi Id split with "," VLESS WS Path VLESS KCP Seed VLESS KCP Type VLESS KCP Port + VLESS QUIC Port + VLESS QUIC Key + VLESS QUIC Security + VLESS QUIC Type gRPC Service Name gRPC Port VMESS WS Path VMESS KCP Seed VMESS KCP Type VMESS KCP Port + VMESS QUIC Key + VMESS QUIC Port + VMESS QUIC Security + VMESS QUIC Type SS Pwd SS Method SS Port Trojan Pwd Trojan Port + v2ray Port xray Port default port is 443 diff --git a/ProxySuper.WPF/Resources/Languages/tw_cn.xaml b/ProxySuper.WPF/Resources/Languages/tw_cn.xaml index 249cfa1..4bdf7b2 100644 --- a/ProxySuper.WPF/Resources/Languages/tw_cn.xaml +++ b/ProxySuper.WPF/Resources/Languages/tw_cn.xaml @@ -74,8 +74,10 @@ VLESS WS VLESS gRPC VLESS mKCP + VLESS QUIC VMESS WS VMESS mKCP + VMESS QUIC ShadowSocks Trojan @@ -85,24 +87,35 @@ 自動申請證書 如上傳自有證書,則取消對勾。 UUID + 流控 + uTLS 多用戶 多個UUID用“,”分隔 VLESS WS路徑 VLESS KCP Seed VLESS KCP偽裝 VLESS KCP端口 + VLESS QUIC Key + VLESS QUIC端口 + VLESS QUIC加密 + VLESS QUIC僞裝 gRPC路徑 gRPC端口 VMESS WS路徑 VMESS KCP Seed VMESS KCP偽裝 VMESS KCP端口 + VMESS QUIC Key + VMESS QUIC端口 + VMESS QUIC加密 + VMESS QUIC僞裝 SS密碼 SS加密方式 SS端口 Trojan密碼 Trojan端口 - xray端口 + V2ray端口 + XRAY端口 默認端口443,不建議修改 diff --git a/ProxySuper.WPF/Resources/Languages/zh_cn.xaml b/ProxySuper.WPF/Resources/Languages/zh_cn.xaml index 89dbfee..b1e6d5f 100644 --- a/ProxySuper.WPF/Resources/Languages/zh_cn.xaml +++ b/ProxySuper.WPF/Resources/Languages/zh_cn.xaml @@ -75,8 +75,10 @@ VLESS WS VLESS gRPC VLESS mKCP + VLESS QUIC VMESS WS VMESS mKCP + VMESS QUIC ShadowSocks Trojan @@ -86,24 +88,35 @@ 自动申请证书 如上传自有证书,则取消对勾。 UUID + 流控 + uTLS 多用户 多个UUID用“,”分隔 VLESS WS路径 VLESS KCP Seed VLESS KCP伪装 VLESS KCP端口 + VLESS QUIC Key + VLESS QUIC端口 + VLESS QUIC加密 + VLESS QUIC伪装 gRPC路径 gRPC端口 VMESS WS路径 VMESS KCP Seed VMESS KCP伪装 VMESS KCP端口 + VMESS QUIC Key + VMESS QUIC端口 + VMESS QUIC加密 + VMESS QUIC伪装 SS密码 SS加密方式 SS端口 Trojan密码 Trojan端口 - xray端口 + V2ray端口 + XRAY端口 默认端口443,不建议修改 diff --git a/ProxySuper.WPF/Views/Brook/BrookConfigView.xaml.cs b/ProxySuper.WPF/Views/Brook/BrookConfigView.xaml.cs index 67c7452..7847e25 100644 --- a/ProxySuper.WPF/Views/Brook/BrookConfigView.xaml.cs +++ b/ProxySuper.WPF/Views/Brook/BrookConfigView.xaml.cs @@ -1,10 +1,9 @@ -using MvvmCross.Platforms.Wpf.Views; +using MvvmCross.Platforms.Wpf.Presenters.Attributes; +using MvvmCross.Platforms.Wpf.Views; namespace ProxySuper.WPF.Views { - /// - /// BrookConfigView.xaml 的交互逻辑 - /// + [MvxWindowPresentation] public partial class BrookConfigView : MvxWindow { public BrookConfigView() diff --git a/ProxySuper.WPF/Views/Brook/BrookEditorView.xaml b/ProxySuper.WPF/Views/Brook/BrookEditorView.xaml index dacf2ed..c371f43 100644 --- a/ProxySuper.WPF/Views/Brook/BrookEditorView.xaml +++ b/ProxySuper.WPF/Views/Brook/BrookEditorView.xaml @@ -24,61 +24,60 @@ - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - +