Fix sing-box ws

This commit is contained in:
DHR60 2025-11-22 15:29:43 +08:00
parent 6b87c09a96
commit 4b79799175
2 changed files with 26 additions and 1 deletions

View file

@ -216,6 +216,8 @@ public class Transport4Sbox
public string? idle_timeout { get; set; } public string? idle_timeout { get; set; }
public string? ping_timeout { get; set; } public string? ping_timeout { get; set; }
public bool? permit_without_stream { get; set; } public bool? permit_without_stream { get; set; }
public int? max_early_data { get; set; }
public string? early_data_header_name { get; set; }
} }
public class Headers4Sbox public class Headers4Sbox

View file

@ -364,7 +364,30 @@ public partial class CoreConfigSingboxService
case nameof(ETransport.ws): case nameof(ETransport.ws):
transport.type = nameof(ETransport.ws); transport.type = nameof(ETransport.ws);
transport.path = node.Path.IsNullOrEmpty() ? null : node.Path; var wsPath = node.Path;
// Parse ed parameter from path using regex
if (!wsPath.IsNullOrEmpty())
{
var regex = new Regex(@"[?&]ed=(\d+)");
var match = regex.Match(wsPath);
if (match.Success && int.TryParse(match.Groups[1].Value, out var edValue))
{
transport.max_early_data = edValue;
transport.early_data_header_name = "Sec-WebSocket-Protocol";
// Remove ed parameter from path
wsPath = regex.Replace(wsPath, "");
// Clean up any leftover & at the beginning of query string
wsPath = wsPath.Replace("?&", "?");
// Remove trailing ? if no parameters left
if (wsPath.EndsWith("?"))
{
wsPath = wsPath.TrimEnd('?');
}
}
}
transport.path = wsPath.IsNullOrEmpty() ? null : wsPath;
if (node.RequestHost.IsNotEmpty()) if (node.RequestHost.IsNotEmpty())
{ {
transport.headers = new() transport.headers = new()