* Sync xray fragment

* Sync xray freedom domainStrategy

* Add Strategy4ProxyDial
This commit is contained in:
DHR60
2026-07-16 10:55:06 +00:00
committed by GitHub
parent 09ea4890a7
commit f55d8b2565
24 changed files with 217 additions and 111 deletions
@@ -13,6 +13,7 @@ public class DNSSettingViewModel : MyReactiveObject, ICloseable
[Reactive] public string? BootstrapDNS { get; set; }
[Reactive] public string? Strategy4Freedom { get; set; }
[Reactive] public string? Strategy4Proxy { get; set; }
[Reactive] public string? Strategy4ProxyDial { get; set; }
[Reactive] public string? Hosts { get; set; }
[Reactive] public string? DirectExpectedIPs { get; set; }
[Reactive] public bool? ParallelQuery { get; set; }
@@ -76,6 +77,7 @@ public class DNSSettingViewModel : MyReactiveObject, ICloseable
BootstrapDNS = item.BootstrapDNS;
Strategy4Freedom = item.Strategy4Freedom;
Strategy4Proxy = item.Strategy4Proxy;
Strategy4ProxyDial = item.Strategy4ProxyDial;
Hosts = item.Hosts;
DirectExpectedIPs = item.DirectExpectedIPs;
ParallelQuery = item.ParallelQuery;
@@ -108,6 +110,7 @@ public class DNSSettingViewModel : MyReactiveObject, ICloseable
_config.SimpleDNSItem.BootstrapDNS = BootstrapDNS;
_config.SimpleDNSItem.Strategy4Freedom = Strategy4Freedom;
_config.SimpleDNSItem.Strategy4Proxy = Strategy4Proxy;
_config.SimpleDNSItem.Strategy4ProxyDial = Strategy4ProxyDial;
_config.SimpleDNSItem.Hosts = Hosts;
_config.SimpleDNSItem.DirectExpectedIPs = DirectExpectedIPs;
_config.SimpleDNSItem.ParallelQuery = ParallelQuery;
@@ -29,8 +29,8 @@ public class OptionSettingViewModel : MyReactiveObject, ICloseable
[Reactive] public bool EnableFragment { get; set; }
[Reactive] public bool EnableFinalFragment { get; set; }
[Reactive] public string FragmentPackets { get; set; }
[Reactive] public string FragmentLength { get; set; }
[Reactive] public string FragmentInterval { get; set; }
[Reactive] public string FragmentLengths { get; set; }
[Reactive] public string FragmentDelays { get; set; }
[Reactive] public string FragmentMaxSplit { get; set; }
#endregion Core
@@ -168,8 +168,8 @@ public class OptionSettingViewModel : MyReactiveObject, ICloseable
EnableFragment = _config.CoreBasicItem.EnableFragment;
EnableFinalFragment = _config.CoreBasicItem.EnableFinalFragment;
FragmentPackets = _config.Fragment4RayItem?.Packets;
FragmentLength = _config.Fragment4RayItem?.Length;
FragmentInterval = _config.Fragment4RayItem?.Interval;
FragmentLengths = Utils.List2String(_config.Fragment4RayItem?.Lengths);
FragmentDelays = Utils.List2String(_config.Fragment4RayItem?.Delays);
FragmentMaxSplit = _config.Fragment4RayItem?.MaxSplit;
#endregion Core
@@ -309,6 +309,15 @@ public class OptionSettingViewModel : MyReactiveObject, ICloseable
NoticeManager.Instance.Enqueue(ResUI.FillLocalListeningPort);
return;
}
var fragmentLengths = Utils.String2List(FragmentLengths) ?? [];
var fragmentDelays = Utils.String2List(FragmentDelays) ?? [];
if (fragmentLengths.Any(item => !Utils.TryParseRange(item, 0, int.MaxValue, out _, out _))
|| fragmentDelays.Any(item => !Utils.TryParseRange(item, 0, int.MaxValue, out _, out _))
|| (FragmentMaxSplit.IsNotEmpty() && !Utils.TryParseMaxSplit(FragmentMaxSplit, 0, 10000, out _, out _)))
{
NoticeManager.Instance.Enqueue(ResUI.FillFragmentParameterError);
return;
}
var needReboot = EnableStatistics != _config.GuiItem.EnableStatistics
|| DisplayRealTimeSpeed != _config.GuiItem.DisplayRealTimeSpeed
|| EnableDragDropSort != _config.UiItem.EnableDragDropSort
@@ -351,30 +360,12 @@ public class OptionSettingViewModel : MyReactiveObject, ICloseable
_config.CoreBasicItem.EnableCacheFile4Sbox = EnableCacheFile4Sbox;
_config.HysteriaItem.UpMbps = HyUpMbps ?? 0;
_config.HysteriaItem.DownMbps = HyDownMbps ?? 0;
if (EnableFragment)
{
if (!Utils.TryParseRange(FragmentLength, 0, int.MaxValue, out _, out _))
{
NoticeManager.Instance.Enqueue(ResUI.FillFragmentParameterError);
return;
}
if (!Utils.TryParseRange(FragmentInterval, 1, 100, out _, out _))
{
NoticeManager.Instance.Enqueue(ResUI.FillFragmentParameterError);
return;
}
if (FragmentMaxSplit.IsNotEmpty()
&& !Utils.TryParseMaxSplit(FragmentMaxSplit, 0, 10000, out _, out _))
{
NoticeManager.Instance.Enqueue(ResUI.FillFragmentParameterError);
return;
}
}
_config.CoreBasicItem.EnableFragment = EnableFragment;
_config.CoreBasicItem.EnableFinalFragment = EnableFinalFragment;
_config.Fragment4RayItem ??= new();
_config.Fragment4RayItem.Packets = FragmentPackets;
_config.Fragment4RayItem.Length = FragmentLength;
_config.Fragment4RayItem.Interval = FragmentInterval;
_config.Fragment4RayItem.Lengths = fragmentLengths;
_config.Fragment4RayItem.Delays = fragmentDelays;
_config.Fragment4RayItem.MaxSplit = FragmentMaxSplit;
_config.GuiItem.AutoRun = AutoRun;