mirror of
https://github.com/2dust/v2rayN.git
synced 2026-11-10 22:45:00 +03:00
customizable packet fragmentation settings (#9597)
* first changes * fix: use ItemsSource for fragment packets ComboBox so value saves correctly * feat: add customizable packet fragmentation for Xray-core - Add fragment settings in Core tab: Packets (dropdown), Length (range), Interval (range), MaxSplit (0-10000) - Support both 'from-to' (e.g., 50-100) and single value (e.g., 50) formats for Length, Interval, and MaxSplit - Validation with shortened error message: 'Invalid range format. Use from-to (e.g., 50-100).' - UI in PopupBox (materialDesign) visible only when EnableFragment is checked - Only Xray-core supported (Mihomo/sing-box fragment code removed) - Localization updated for 8 languages * fix: address 2dust review feedback - Move FragmentPacketsOptions to Global class - Remove default values from Fragment4RayItem model (set in ConfigHandler) - Fix Avalonia bindings: move ItemsSource and SelectedItem to code-behind - Update ViewModel to use Global.FragmentPacketsOptions - Remove defaults from model properties * Adjust ui --------- Co-authored-by: 2dust <31833384+2dust@users.noreply.github.com>
This commit is contained in:
@@ -576,6 +576,58 @@ public class Utils
|
||||
}
|
||||
}
|
||||
|
||||
public static bool TryParseRange(string? input, int min, int max, out int from, out int to)
|
||||
{
|
||||
from = to = 0;
|
||||
if (string.IsNullOrWhiteSpace(input))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
var parts = input.Split('-');
|
||||
if (parts.Length == 1)
|
||||
{
|
||||
if (!int.TryParse(parts[0], out from))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
to = from;
|
||||
return from >= min && to <= max;
|
||||
}
|
||||
if (parts.Length != 2
|
||||
|| !int.TryParse(parts[0], out from)
|
||||
|| !int.TryParse(parts[1], out to))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
return from >= min && to <= max && from <= to;
|
||||
}
|
||||
|
||||
public static bool TryParseMaxSplit(string? input, int min, int max, out int from, out int to)
|
||||
{
|
||||
from = to = 0;
|
||||
if (string.IsNullOrWhiteSpace(input))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
var parts = input.Split('-');
|
||||
if (parts.Length == 1)
|
||||
{
|
||||
if (!int.TryParse(parts[0], out from))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
to = from;
|
||||
return from >= min && to <= max;
|
||||
}
|
||||
if (parts.Length != 2
|
||||
|| !int.TryParse(parts[0], out from)
|
||||
|| !int.TryParse(parts[1], out to))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
return from >= min && to <= max && from <= to;
|
||||
}
|
||||
|
||||
public static bool IsPrivateNetwork(string ip)
|
||||
{
|
||||
if (IPAddress.TryParse(ip, out var address))
|
||||
|
||||
Reference in New Issue
Block a user