From 88dafa6cdf6fbd13c2ea842ee403330a043ce8ff Mon Sep 17 00:00:00 2001 From: MHSanaei Date: Mon, 20 Apr 2026 19:09:45 +0200 Subject: [PATCH] XDNS finalmask: Support resolvers (client) and domains (server) Treat the xdns mask type as a multi-value setting and update forms accordingly. Inbound/outbound UdpMask models now return arrays for xdns (inbound: settings.domains, outbound: settings.resolvers) using Array.isArray checks. UI templates were split so 'header-dns' still uses a single domain string, while 'xdns' renders a tags-style for multiple entries (domains/resolvers). Conditionals were made explicit (mask.type === ...) instead of using includes(). Changed files: web/assets/js/model/inbound.js, web/assets/js/model/outbound.js, web/html/form/outbound.html, web/html/form/stream/stream_finalmask.html. --- web/assets/js/model/inbound.js | 3 ++- web/assets/js/model/outbound.js | 3 ++- web/html/form/outbound.html | 16 ++++++++++++---- web/html/form/stream/stream_finalmask.html | 16 ++++++++++++---- 4 files changed, 28 insertions(+), 10 deletions(-) diff --git a/web/assets/js/model/inbound.js b/web/assets/js/model/inbound.js index d4df6d36..5d167ead 100644 --- a/web/assets/js/model/inbound.js +++ b/web/assets/js/model/inbound.js @@ -1073,8 +1073,9 @@ class UdpMask extends XrayCommonClass { case 'mkcp-aes128gcm': return { password: settings.password || '' }; case 'header-dns': - case 'xdns': return { domain: settings.domain || '' }; + case 'xdns': + return { domains: Array.isArray(settings.domains) ? settings.domains : [] }; case 'xicmp': return { ip: settings.ip || '', id: settings.id ?? 0 }; case 'mkcp-original': diff --git a/web/assets/js/model/outbound.js b/web/assets/js/model/outbound.js index c0808c1d..9a26a954 100644 --- a/web/assets/js/model/outbound.js +++ b/web/assets/js/model/outbound.js @@ -573,8 +573,9 @@ class UdpMask extends CommonClass { case 'mkcp-aes128gcm': return { password: settings.password || '' }; case 'header-dns': - case 'xdns': return { domain: settings.domain || '' }; + case 'xdns': + return { resolvers: Array.isArray(settings.resolvers) ? settings.resolvers : [] }; case 'xicmp': return { ip: settings.ip || '', id: settings.id ?? 0 }; case 'mkcp-original': diff --git a/web/html/form/outbound.html b/web/html/form/outbound.html index f4cb6467..7bac266f 100644 --- a/web/html/form/outbound.html +++ b/web/html/form/outbound.html @@ -886,15 +886,23 @@ placeholder="Obfuscation password" > - + +