From be3566df2f714ecfbb61169088def97ba92c57c4 Mon Sep 17 00:00:00 2001 From: DHR60 <192860629+DHR60@users.noreply.github.com> Date: Sat, 19 Sep 2026 09:38:51 +0000 Subject: [PATCH] Add finalMask parsing to Wireguard configuration handling (#10201) --- v2rayN/ServiceLib/Handler/Fmt/WireguardFmt.cs | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/v2rayN/ServiceLib/Handler/Fmt/WireguardFmt.cs b/v2rayN/ServiceLib/Handler/Fmt/WireguardFmt.cs index 431869c8..dfd0408b 100644 --- a/v2rayN/ServiceLib/Handler/Fmt/WireguardFmt.cs +++ b/v2rayN/ServiceLib/Handler/Fmt/WireguardFmt.cs @@ -24,6 +24,24 @@ public class WireguardFmt : BaseFmt var query = Utils.ParseQueryString(url.Query); + var finalmaskDecoded = GetQueryDecoded(query, "fm"); + if (finalmaskDecoded.IsNotEmpty()) + { + var node = JsonUtils.ParseJson(finalmaskDecoded); + item.Finalmask = node != null + ? JsonUtils.Serialize(node, new JsonSerializerOptions + { + WriteIndented = true, + DefaultIgnoreCondition = JsonIgnoreCondition.Never, + Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping + }) + : finalmaskDecoded; + } + else + { + item.Finalmask = string.Empty; + } + item.SetProtocolExtra(item.GetProtocolExtra() with { WgPublicKey = GetQueryDecoded(query, "publickey"), @@ -76,6 +94,19 @@ public class WireguardFmt : BaseFmt { dicQuery.Add("dns", Utils.UrlEncode(protoExtra.WgDns)); } + if (item.Finalmask.IsNotEmpty()) + { + var node = JsonUtils.ParseJson(item.Finalmask); + var finalmask = node != null + ? JsonUtils.Serialize(node, new JsonSerializerOptions + { + WriteIndented = false, + DefaultIgnoreCondition = JsonIgnoreCondition.Never, + Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping + }) + : item.Finalmask; + dicQuery.Add("fm", Utils.UrlEncode(finalmask)); + } return ToUri(EConfigType.WireGuard, item.Address, item.Port, item.Password, dicQuery, remark); }