diff options
| author | MHSanaei <ho3ein.sanaei@gmail.com> | 2024-03-11 21:18:33 +0300 |
|---|---|---|
| committer | MHSanaei <ho3ein.sanaei@gmail.com> | 2024-03-11 21:18:33 +0300 |
| commit | f8be7a7649388647ac1fe1b1d5b707bb2e3dee9c (patch) | |
| tree | 69e30e1ebab1699969444abff0ffd4a933bdfa9f | |
| parent | 5b87b1253555b7e932f79bd86795e350f9f3de2e (diff) | |
[xray outbound] add mux
Co-Authored-By: Alireza Ahmadi <alireza7@gmail.com>
| -rw-r--r-- | web/assets/js/model/outbound.js | 36 | ||||
| -rw-r--r-- | web/html/xui/form/outbound.html | 18 |
2 files changed, 52 insertions, 2 deletions
diff --git a/web/assets/js/model/outbound.js b/web/assets/js/model/outbound.js index 0b699f49..a4df7870 100644 --- a/web/assets/js/model/outbound.js +++ b/web/assets/js/model/outbound.js @@ -466,18 +466,49 @@ class StreamSettings extends CommonClass { } } +class Mux extends CommonClass { + constructor(enabled = false, concurrency = 8, xudpConcurrency = 16, xudpProxyUDP443 = "reject") { + super(); + this.enabled = enabled; + this.concurrency = concurrency; + this.xudpConcurrency = xudpConcurrency; + this.xudpProxyUDP443 = xudpProxyUDP443; + } + + static fromJson(json = {}) { + if (Object.keys(json).length === 0) return undefined; + return new SockoptStreamSettings( + json.enabled, + json.concurrency, + json.xudpConcurrency, + json.xudpProxyUDP443, + ); + } + + toJson() { + return { + enabled: this.enabled, + concurrency: this.concurrency, + xudpConcurrency: this.xudpConcurrency, + xudpProxyUDP443: this.xudpProxyUDP443, + }; + } +} + class Outbound extends CommonClass { constructor( tag='', protocol=Protocols.VMess, settings=null, streamSettings = new StreamSettings(), + mux = new Mux(), ) { super(); this.tag = tag; this._protocol = protocol; this.settings = settings == null ? Outbound.Settings.getSettings(protocol) : settings; this.stream = streamSettings; + this.mux = mux; } get protocol() { @@ -542,6 +573,7 @@ class Outbound extends CommonClass { json.protocol, Outbound.Settings.fromJson(json.protocol, json.settings), StreamSettings.fromJson(json.streamSettings), + Mux.fromJson(json.mux), ) } @@ -551,6 +583,7 @@ class Outbound extends CommonClass { protocol: this.protocol, settings: this.settings instanceof CommonClass ? this.settings.toJson() : this.settings, streamSettings: this.canEnableStream() ? this.stream.toJson() : undefined, + mux: this.mux?.enabled ? this.mux : undefined, }; } @@ -608,7 +641,6 @@ class Outbound extends CommonClass { json.allowInsecure); } - return new Outbound(json.ps, Protocols.VMess, new Outbound.VmessSettings(json.add, json.port, json.id), stream); } @@ -657,7 +689,7 @@ class Outbound extends CommonClass { let sni=url.searchParams.get('sni') ?? ''; let sid=url.searchParams.get('sid') ?? ''; let spx=url.searchParams.get('spx') ?? ''; - stream.reality = new RealityStreamSettings(pbk, fp, sni, sid, spx); + stream.reality = new RealityStreamSettings(pbk, fp, sni, sid, spx); } let data = link.split('?'); diff --git a/web/html/xui/form/outbound.html b/web/html/xui/form/outbound.html index 73568f26..6432dca7 100644 --- a/web/html/xui/form/outbound.html +++ b/web/html/xui/form/outbound.html @@ -421,6 +421,24 @@ </a-form-item> </template> +<!-- mux settings --> +<a-form-item label="Mux"> + <a-switch v-model="outbound.mux.enabled"></a-switch> +</a-form-item> +<template v-if="outbound.mux.enabled"> + <a-form-item label="Concurrency"> + <a-input-number v-model="outbound.mux.concurrency" :min="-1" :max="1024"></a-input-number> + </a-form-item> + <a-form-item label="xudp Concurrency"> + <a-input-number v-model="outbound.mux.xudpConcurrency" :min="-1" :max="1024"></a-input-number> + </a-form-item> + <a-form-item label="xudp UDP 443"> + <a-select v-model="outbound.mux.xudpProxyUDP443" :dropdown-class-name="themeSwitcher.currentTheme"> + <a-select-option v-for="c in ['reject', 'allow', 'skip']" :value="c">[[ c ]]</a-select-option> + </a-select> + </a-form-item> +</template> + </a-form> </a-tab-pane> <a-tab-pane key="2" tab="JSON" force-render="true"> |
