mirror of
https://github.com/2dust/v2rayN.git
synced 2025-11-29 03:02:53 +00:00
Compare commits
2 commits
6b87c09a96
...
34fc4de0c2
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
34fc4de0c2 | ||
|
|
91536d3923 |
4 changed files with 31 additions and 4 deletions
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -411,8 +411,6 @@ public class WsSettings4Ray
|
||||||
|
|
||||||
public class Headers4Ray
|
public class Headers4Ray
|
||||||
{
|
{
|
||||||
public string Host { get; set; }
|
|
||||||
|
|
||||||
[JsonPropertyName("User-Agent")]
|
[JsonPropertyName("User-Agent")]
|
||||||
public string UserAgent { get; set; }
|
public string UserAgent { get; set; }
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -364,7 +364,35 @@ 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 eh and ed parameters from path using regex
|
||||||
|
if (!wsPath.IsNullOrEmpty())
|
||||||
|
{
|
||||||
|
var edRegex = new Regex(@"[?&]ed=(\d+)");
|
||||||
|
var edMatch = edRegex.Match(wsPath);
|
||||||
|
if (edMatch.Success && int.TryParse(edMatch.Groups[1].Value, out var edValue))
|
||||||
|
{
|
||||||
|
transport.max_early_data = edValue;
|
||||||
|
transport.early_data_header_name = "Sec-WebSocket-Protocol";
|
||||||
|
|
||||||
|
wsPath = edRegex.Replace(wsPath, "");
|
||||||
|
wsPath = wsPath.Replace("?&", "?");
|
||||||
|
if (wsPath.EndsWith('?'))
|
||||||
|
{
|
||||||
|
wsPath = wsPath.TrimEnd('?');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var ehRegex = new Regex(@"[?&]eh=([^&]+)");
|
||||||
|
var ehMatch = ehRegex.Match(wsPath);
|
||||||
|
if (ehMatch.Success)
|
||||||
|
{
|
||||||
|
transport.early_data_header_name = Uri.UnescapeDataString(ehMatch.Groups[1].Value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
transport.path = wsPath.IsNullOrEmpty() ? null : wsPath;
|
||||||
if (node.RequestHost.IsNotEmpty())
|
if (node.RequestHost.IsNotEmpty())
|
||||||
{
|
{
|
||||||
transport.headers = new()
|
transport.headers = new()
|
||||||
|
|
|
||||||
|
|
@ -351,7 +351,6 @@ public partial class CoreConfigV2rayService
|
||||||
if (host.IsNotEmpty())
|
if (host.IsNotEmpty())
|
||||||
{
|
{
|
||||||
wsSettings.host = host;
|
wsSettings.host = host;
|
||||||
wsSettings.headers.Host = host;
|
|
||||||
}
|
}
|
||||||
if (path.IsNotEmpty())
|
if (path.IsNotEmpty())
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue