Browse Source

[xray outbound] add mux

Co-Authored-By: Alireza Ahmadi <[email protected]>
MHSanaei 1 year ago
parent
commit
f8be7a7649
2 changed files with 52 additions and 2 deletions
  1. 34 2
      web/assets/js/model/outbound.js
  2. 18 0
      web/html/xui/form/outbound.html

+ 34 - 2
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('?');

+ 18 - 0
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">