diff options
| author | MHSanaei <ho3ein.sanaei@gmail.com> | 2026-04-27 02:23:38 +0300 |
|---|---|---|
| committer | MHSanaei <ho3ein.sanaei@gmail.com> | 2026-04-27 02:28:06 +0300 |
| commit | 9791b05a4efd2e22621927b9e80d288386e510df (patch) | |
| tree | 1d9051f35c96795a2d7a41c32d619a8a33e21f7e /web/assets/js | |
| parent | 0aca2d3b3d7e54f0408670db5f7075eaee190066 (diff) | |
kcp: noise, header-custom, sudoku
Diffstat (limited to 'web/assets/js')
| -rw-r--r-- | web/assets/js/model/inbound.js | 41 | ||||
| -rw-r--r-- | web/assets/js/model/outbound.js | 41 | ||||
| -rw-r--r-- | web/assets/js/util/index.js | 6 |
3 files changed, 80 insertions, 8 deletions
diff --git a/web/assets/js/model/inbound.js b/web/assets/js/model/inbound.js index ef9ad19c..b5971a68 100644 --- a/web/assets/js/model/inbound.js +++ b/web/assets/js/model/inbound.js @@ -1085,11 +1085,23 @@ class UdpMask extends XrayCommonClass { case 'header-wireguard': return {}; case 'header-custom': - return { client: [], server: [] }; + return { + client: Array.isArray(settings.client) ? settings.client : [], + server: Array.isArray(settings.server) ? settings.server : [], + }; case 'noise': - return { reset: 0, noise: [] }; + return { + reset: settings.reset ?? 0, + noise: Array.isArray(settings.noise) ? settings.noise : [], + }; case 'sudoku': - return { ascii: '', customTable: '', customTables: [], paddingMin: 0, paddingMax: 0 }; + return { + ascii: settings.ascii || '', + customTable: settings.customTable || '', + customTables: settings.customTables ?? [], + paddingMin: settings.paddingMin ?? 0, + paddingMax: settings.paddingMax ?? 0, + }; default: return settings; } @@ -1103,9 +1115,30 @@ class UdpMask extends XrayCommonClass { } toJson() { + const cleanItem = item => { + const out = { ...item }; + if (out.type === 'array') { + delete out.packet; + } else { + out.rand = 0; + } + return out; + }; + + let settings = this.settings; + if (this.type === 'noise' && settings && Array.isArray(settings.noise)) { + settings = { ...settings, noise: settings.noise.map(cleanItem) }; + } else if (this.type === 'header-custom' && settings) { + settings = { + ...settings, + client: Array.isArray(settings.client) ? settings.client.map(cleanItem) : settings.client, + server: Array.isArray(settings.server) ? settings.server.map(cleanItem) : settings.server, + }; + } + return { type: this.type, - settings: (this.settings && Object.keys(this.settings).length > 0) ? this.settings : undefined + settings: (settings && Object.keys(settings).length > 0) ? settings : undefined }; } } diff --git a/web/assets/js/model/outbound.js b/web/assets/js/model/outbound.js index a84c0318..aa90d20d 100644 --- a/web/assets/js/model/outbound.js +++ b/web/assets/js/model/outbound.js @@ -655,11 +655,23 @@ class UdpMask extends CommonClass { case 'header-wireguard': return {}; // No settings needed case 'header-custom': - return { client: [], server: [] }; + return { + client: Array.isArray(settings.client) ? settings.client : [], + server: Array.isArray(settings.server) ? settings.server : [], + }; case 'noise': - return { reset: 0, noise: [] }; + return { + reset: settings.reset ?? 0, + noise: Array.isArray(settings.noise) ? settings.noise : [], + }; case 'sudoku': - return { ascii: '', customTable: '', customTables: [], paddingMin: 0, paddingMax: 0 }; + return { + ascii: settings.ascii || '', + customTable: settings.customTable || '', + customTables: Array.isArray(settings.customTables) ? settings.customTables : [], + paddingMin: settings.paddingMin ?? 0, + paddingMax: settings.paddingMax ?? 0 + }; default: return settings; } @@ -673,9 +685,30 @@ class UdpMask extends CommonClass { } toJson() { + const cleanItem = item => { + const out = { ...item }; + if (out.type === 'array') { + delete out.packet; + } else { + out.rand = 0; + } + return out; + }; + + let settings = this.settings; + if (this.type === 'noise' && settings && Array.isArray(settings.noise)) { + settings = { ...settings, noise: settings.noise.map(cleanItem) }; + } else if (this.type === 'header-custom' && settings) { + settings = { + ...settings, + client: Array.isArray(settings.client) ? settings.client.map(cleanItem) : settings.client, + server: Array.isArray(settings.server) ? settings.server.map(cleanItem) : settings.server, + }; + } + return { type: this.type, - settings: (this.settings && Object.keys(this.settings).length > 0) ? this.settings : undefined + settings: (settings && Object.keys(settings).length > 0) ? settings : undefined }; } } diff --git a/web/assets/js/util/index.js b/web/assets/js/util/index.js index cc7b9287..1f481c85 100644 --- a/web/assets/js/util/index.js +++ b/web/assets/js/util/index.js @@ -152,6 +152,12 @@ class RandomUtil { return Base64.alternativeEncode(String.fromCharCode(...array)); } + static randomBase64(length = 16) { + const array = new Uint8Array(length); + window.crypto.getRandomValues(array); + return Base64.alternativeEncode(String.fromCharCode(...array)); + } + static randomBase32String(length = 16) { const array = new Uint8Array(length); |
