Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/MHSanaei/3x-ui.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMHSanaei <ho3ein.sanaei@gmail.com>2024-03-11 21:18:33 +0300
committerMHSanaei <ho3ein.sanaei@gmail.com>2024-03-11 21:18:33 +0300
commitf8be7a7649388647ac1fe1b1d5b707bb2e3dee9c (patch)
tree69e30e1ebab1699969444abff0ffd4a933bdfa9f
parent5b87b1253555b7e932f79bd86795e350f9f3de2e (diff)
[xray outbound] add mux
Co-Authored-By: Alireza Ahmadi <alireza7@gmail.com>
-rw-r--r--web/assets/js/model/outbound.js36
-rw-r--r--web/html/xui/form/outbound.html18
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">