mirror of
https://github.com/2dust/v2rayN.git
synced 2026-11-13 16:05:01 +03:00
fix: preserve inner KCP mask when adding a header (#10577)
This commit is contained in:
@@ -2,6 +2,38 @@ namespace ServiceLib.Tests.CoreConfig.V2ray;
|
|||||||
|
|
||||||
public class CoreConfigV2rayServiceTests
|
public class CoreConfigV2rayServiceTests
|
||||||
{
|
{
|
||||||
|
[Test]
|
||||||
|
[Arguments("demo-seed", "srtp", 2)]
|
||||||
|
[Arguments(null, "srtp", 2)]
|
||||||
|
[Arguments("demo-seed", "none", 1)]
|
||||||
|
[Arguments(null, "none", 1)]
|
||||||
|
public async Task GenerateClientConfigContent_KcpHeader_ShouldPreserveInnerMask(string? seed, string header, int expectedCount)
|
||||||
|
{
|
||||||
|
var config = CoreConfigTestFactory.CreateConfig(ECoreType.Xray);
|
||||||
|
CoreConfigTestFactory.BindAppManagerConfig(config);
|
||||||
|
var node = CoreConfigTestFactory.CreateVmessNode(ECoreType.Xray);
|
||||||
|
node.Network = nameof(ETransport.kcp);
|
||||||
|
node.SetTransportExtra(new TransportExtraItem { KcpSeed = seed, KcpHeaderType = header });
|
||||||
|
var context = CoreConfigTestFactory.CreateContext(config, node, ECoreType.Xray);
|
||||||
|
|
||||||
|
var result = new CoreConfigV2rayService(context).GenerateClientConfigContent();
|
||||||
|
|
||||||
|
await result.Success.Should().BeTrue();
|
||||||
|
var generatedConfig = JsonNode.Parse(result.Data!.ToString()!)!;
|
||||||
|
var proxy = generatedConfig["outbounds"]!.AsArray()
|
||||||
|
.First(outbound => outbound!["tag"]!.GetValue<string>() == Global.ProxyTag)!;
|
||||||
|
var masks = proxy["streamSettings"]!["finalmask"]!["udp"]!.AsArray();
|
||||||
|
await masks.Count.Should().BeEqualTo(expectedCount);
|
||||||
|
await masks[0]!["type"]!.GetValue<string>().Should().BeEqualTo("mkcp-legacy");
|
||||||
|
await (masks[0]!["settings"]?["value"]?.GetValue<string>()).Should().BeEqualTo(seed);
|
||||||
|
await (masks[0]!["settings"]?["header"]?.GetValue<string>()).Should().BeNull();
|
||||||
|
if (expectedCount == 2)
|
||||||
|
{
|
||||||
|
await masks[1]!["type"]!.GetValue<string>().Should().BeEqualTo("mkcp-legacy");
|
||||||
|
await masks[1]!["settings"]!["header"]!.GetValue<string>().Should().BeEqualTo(header);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
[Arguments(null)]
|
[Arguments(null)]
|
||||||
[Arguments("")]
|
[Arguments("")]
|
||||||
|
|||||||
@@ -412,14 +412,11 @@ public partial class CoreConfigV2rayService
|
|||||||
}
|
}
|
||||||
if (Global.KcpHeaderMaskMap.TryGetValue(headerType, out var header))
|
if (Global.KcpHeaderMaskMap.TryGetValue(headerType, out var header))
|
||||||
{
|
{
|
||||||
kcpFinalmask.udp =
|
kcpFinalmask.udp.Add(new Mask4Ray
|
||||||
[
|
|
||||||
new Mask4Ray
|
|
||||||
{
|
{
|
||||||
type = "mkcp-legacy",
|
type = "mkcp-legacy",
|
||||||
settings = new MaskSettings4Ray { header = header },
|
settings = new MaskSettings4Ray { header = header },
|
||||||
},
|
});
|
||||||
];
|
|
||||||
}
|
}
|
||||||
streamSettings.kcpSettings = kcpSettings;
|
streamSettings.kcpSettings = kcpSettings;
|
||||||
streamSettings.finalmask = (JsonObject)JsonUtils.SerializeToNode(kcpFinalmask);
|
streamSettings.finalmask = (JsonObject)JsonUtils.SerializeToNode(kcpFinalmask);
|
||||||
|
|||||||
Reference in New Issue
Block a user