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:
-rw-r--r--web/assets/js/model/inbound.js12
-rw-r--r--web/assets/js/model/outbound.js48
-rw-r--r--web/html/form/outbound.html34
-rw-r--r--web/html/form/stream/stream_finalmask.html26
4 files changed, 78 insertions, 42 deletions
diff --git a/web/assets/js/model/inbound.js b/web/assets/js/model/inbound.js
index 9531f19b..af663923 100644
--- a/web/assets/js/model/inbound.js
+++ b/web/assets/js/model/inbound.js
@@ -1207,15 +1207,15 @@ class QuicParams extends XrayCommonClass {
constructor(
congestion = 'bbr',
debug = false,
- brutalUp = '',
- brutalDown = '',
+ brutalUp = 65537,
+ brutalDown = 65537,
udpHop = undefined,
initStreamReceiveWindow = 8388608,
maxStreamReceiveWindow = 8388608,
initConnectionReceiveWindow = 20971520,
maxConnectionReceiveWindow = 20971520,
maxIdleTimeout = 30,
- keepAlivePeriod = 0,
+ keepAlivePeriod = 5,
disablePathMTUDiscovery = false,
maxIncomingStreams = 1024,
) {
@@ -1265,8 +1265,10 @@ class QuicParams extends XrayCommonClass {
toJson() {
const result = { congestion: this.congestion };
if (this.debug) result.debug = this.debug;
- if (this.brutalUp) result.brutalUp = this.brutalUp;
- if (this.brutalDown) result.brutalDown = this.brutalDown;
+ if (['brutal', 'force-brutal'].includes(this.congestion)) {
+ if (this.brutalUp) result.brutalUp = this.brutalUp;
+ if (this.brutalDown) result.brutalDown = this.brutalDown;
+ }
if (this.udpHop) result.udpHop = { ports: this.udpHop.ports, interval: this.udpHop.interval };
if (this.initStreamReceiveWindow > 0) result.initStreamReceiveWindow = this.initStreamReceiveWindow;
if (this.maxStreamReceiveWindow > 0) result.maxStreamReceiveWindow = this.maxStreamReceiveWindow;
diff --git a/web/assets/js/model/outbound.js b/web/assets/js/model/outbound.js
index 5bcc8550..1c2d67d9 100644
--- a/web/assets/js/model/outbound.js
+++ b/web/assets/js/model/outbound.js
@@ -6,10 +6,10 @@ const Protocols = {
VLESS: "vless",
Trojan: "trojan",
Shadowsocks: "shadowsocks",
+ Wireguard: "wireguard",
+ Hysteria: "hysteria",
Socks: "socks",
HTTP: "http",
- Wireguard: "wireguard",
- Hysteria: "hysteria"
};
const SSMethods = {
@@ -500,7 +500,7 @@ class HysteriaStreamSettings extends CommonClass {
initConnectionReceiveWindow = 20971520,
maxConnectionReceiveWindow = 20971520,
maxIdleTimeout = 30,
- keepAlivePeriod = 0,
+ keepAlivePeriod = 2,
disablePathMTUDiscovery = false
) {
super();
@@ -789,9 +789,17 @@ class QuicParams extends CommonClass {
constructor(
congestion = 'bbr',
debug = false,
- brutalUp = '',
- brutalDown = '',
+ brutalUp = 65537,
+ brutalDown = 65537,
udpHop = undefined,
+ initStreamReceiveWindow = 8388608,
+ maxStreamReceiveWindow = 8388608,
+ initConnectionReceiveWindow = 20971520,
+ maxConnectionReceiveWindow = 20971520,
+ maxIdleTimeout = 30,
+ keepAlivePeriod = 5,
+ disablePathMTUDiscovery = false,
+ maxIncomingStreams = 1024,
) {
super();
this.congestion = congestion;
@@ -799,6 +807,14 @@ class QuicParams extends CommonClass {
this.brutalUp = brutalUp;
this.brutalDown = brutalDown;
this.udpHop = udpHop;
+ this.initStreamReceiveWindow = initStreamReceiveWindow;
+ this.maxStreamReceiveWindow = maxStreamReceiveWindow;
+ this.initConnectionReceiveWindow = initConnectionReceiveWindow;
+ this.maxConnectionReceiveWindow = maxConnectionReceiveWindow;
+ this.maxIdleTimeout = maxIdleTimeout;
+ this.keepAlivePeriod = keepAlivePeriod;
+ this.disablePathMTUDiscovery = disablePathMTUDiscovery;
+ this.maxIncomingStreams = maxIncomingStreams;
}
get hasUdpHop() {
@@ -817,15 +833,33 @@ class QuicParams extends CommonClass {
json.brutalUp,
json.brutalDown,
json.udpHop ? { ports: json.udpHop.ports, interval: json.udpHop.interval } : undefined,
+ json.initStreamReceiveWindow,
+ json.maxStreamReceiveWindow,
+ json.initConnectionReceiveWindow,
+ json.maxConnectionReceiveWindow,
+ json.maxIdleTimeout,
+ json.keepAlivePeriod,
+ json.disablePathMTUDiscovery,
+ json.maxIncomingStreams,
);
}
toJson() {
const result = { congestion: this.congestion };
if (this.debug) result.debug = this.debug;
- if (this.brutalUp) result.brutalUp = this.brutalUp;
- if (this.brutalDown) result.brutalDown = this.brutalDown;
+ if (['brutal', 'force-brutal'].includes(this.congestion)) {
+ if (this.brutalUp) result.brutalUp = this.brutalUp;
+ if (this.brutalDown) result.brutalDown = this.brutalDown;
+ }
if (this.udpHop) result.udpHop = { ports: this.udpHop.ports, interval: this.udpHop.interval };
+ if (this.initStreamReceiveWindow > 0) result.initStreamReceiveWindow = this.initStreamReceiveWindow;
+ if (this.maxStreamReceiveWindow > 0) result.maxStreamReceiveWindow = this.maxStreamReceiveWindow;
+ if (this.initConnectionReceiveWindow > 0) result.initConnectionReceiveWindow = this.initConnectionReceiveWindow;
+ if (this.maxConnectionReceiveWindow > 0) result.maxConnectionReceiveWindow = this.maxConnectionReceiveWindow;
+ if (this.maxIdleTimeout !== 30 && this.maxIdleTimeout > 0) result.maxIdleTimeout = this.maxIdleTimeout;
+ if (this.keepAlivePeriod > 0) result.keepAlivePeriod = this.keepAlivePeriod;
+ if (this.disablePathMTUDiscovery) result.disablePathMTUDiscovery = this.disablePathMTUDiscovery;
+ if (this.maxIncomingStreams > 0) result.maxIncomingStreams = this.maxIncomingStreams;
return result;
}
}
diff --git a/web/html/form/outbound.html b/web/html/form/outbound.html
index 90eb24c9..519c4cbc 100644
--- a/web/html/form/outbound.html
+++ b/web/html/form/outbound.html
@@ -579,23 +579,23 @@
<a-input-number v-model.number="outbound.stream.hysteria.udphopIntervalMax" :min="5"></a-input-number>
</a-form-item>
<a-form-item label="Init Stream Receive">
- <a-input-number v-model.number="outbound.stream.hysteria.initStreamReceiveWindow"></a-input-number>
+ <a-input-number v-model.number="outbound.stream.hysteria.initStreamReceiveWindow" :min="16384"></a-input-number>
</a-form-item>
<a-form-item label="Max Stream Receive">
- <a-input-number v-model.number="outbound.stream.hysteria.maxStreamReceiveWindow"></a-input-number>
+ <a-input-number v-model.number="outbound.stream.hysteria.maxStreamReceiveWindow" :min="16384"></a-input-number>
</a-form-item>
<a-form-item label="Init Connection Receive">
- <a-input-number v-model.number="outbound.stream.hysteria.initConnectionReceiveWindow"></a-input-number>
+ <a-input-number v-model.number="outbound.stream.hysteria.initConnectionReceiveWindow" :min="16384"></a-input-number>
</a-form-item>
<a-form-item label="Max Connection Receive">
- <a-input-number v-model.number="outbound.stream.hysteria.maxConnectionReceiveWindow"></a-input-number>
+ <a-input-number v-model.number="outbound.stream.hysteria.maxConnectionReceiveWindow" :min="16384"></a-input-number>
</a-form-item>
<a-form-item label="Max Idle Timeout (s)">
<a-input-number v-model.number="outbound.stream.hysteria.maxIdleTimeout" :min="4"
:max="120"></a-input-number>
</a-form-item>
<a-form-item label="Keep Alive Period (s)">
- <a-input-number v-model.number="outbound.stream.hysteria.keepAlivePeriod" :min="0"
+ <a-input-number v-model.number="outbound.stream.hysteria.keepAlivePeriod" :min="2"
:max="60"></a-input-number>
</a-form-item>
<a-form-item label="Disable Path MTU Dis">
@@ -934,10 +934,10 @@
</a-form-item>
<template v-if="['brutal','force-brutal'].includes(outbound.stream.finalmask.quicParams.congestion)">
<a-form-item label="Brutal Up">
- <a-input v-model.trim="outbound.stream.finalmask.quicParams.brutalUp" placeholder="e.g. 60 mbps" />
+ <a-input v-model.trim="outbound.stream.finalmask.quicParams.brutalUp" :min="65537"placeholder="65537" />
</a-form-item>
<a-form-item label="Brutal Down">
- <a-input v-model.trim="outbound.stream.finalmask.quicParams.brutalDown" placeholder="e.g. 60 mbps" />
+ <a-input v-model.trim="outbound.stream.finalmask.quicParams.brutalDown" :min="65537" placeholder="65537" />
</a-form-item>
</template>
<a-form-item label="UDP Hop">
@@ -964,24 +964,24 @@
<a-switch v-model="outbound.stream.finalmask.quicParams.disablePathMTUDiscovery"></a-switch>
</a-form-item>
<a-form-item label="Max Incoming Streams">
- <a-input-number v-model.number="outbound.stream.finalmask.quicParams.maxIncomingStreams" :min="0"
- placeholder="0 = default" />
+ <a-input-number v-model.number="outbound.stream.finalmask.quicParams.maxIncomingStreams" :min="8"
+ placeholder="8 = default" />
</a-form-item>
<a-form-item label="Init Stream Window">
- <a-input-number v-model.number="outbound.stream.finalmask.quicParams.initStreamReceiveWindow" :min="0"
- placeholder="0 = default" />
+ <a-input-number v-model.number="outbound.stream.finalmask.quicParams.initStreamReceiveWindow" :min="16384"
+ placeholder="8388608 = default" />
</a-form-item>
<a-form-item label="Max Stream Window">
- <a-input-number v-model.number="outbound.stream.finalmask.quicParams.maxStreamReceiveWindow" :min="0"
- placeholder="0 = default" />
+ <a-input-number v-model.number="outbound.stream.finalmask.quicParams.maxStreamReceiveWindow" :min="16384"
+ placeholder="8388608 = default" />
</a-form-item>
<a-form-item label="Init Conn Window">
- <a-input-number v-model.number="outbound.stream.finalmask.quicParams.initConnectionReceiveWindow" :min="0"
- placeholder="0 = default" />
+ <a-input-number v-model.number="outbound.stream.finalmask.quicParams.initConnectionReceiveWindow" :min="16384"
+ placeholder="20971520 = default" />
</a-form-item>
<a-form-item label="Max Conn Window">
- <a-input-number v-model.number="outbound.stream.finalmask.quicParams.maxConnectionReceiveWindow" :min="0"
- placeholder="0 = default" />
+ <a-input-number v-model.number="outbound.stream.finalmask.quicParams.maxConnectionReceiveWindow" :min="16384"
+ placeholder="20971520 = default" />
</a-form-item>
</template>
</template>
diff --git a/web/html/form/stream/stream_finalmask.html b/web/html/form/stream/stream_finalmask.html
index 1259b660..0e28b476 100644
--- a/web/html/form/stream/stream_finalmask.html
+++ b/web/html/form/stream/stream_finalmask.html
@@ -356,10 +356,10 @@
</a-form-item>
<template v-if="['brutal','force-brutal'].includes(inbound.stream.finalmask.quicParams.congestion)">
<a-form-item label="Brutal Up">
- <a-input v-model.trim="inbound.stream.finalmask.quicParams.brutalUp" placeholder="e.g. 60 mbps" />
+ <a-input v-model.trim="inbound.stream.finalmask.quicParams.brutalUp" :min="65537" placeholder="65537" />
</a-form-item>
<a-form-item label="Brutal Down">
- <a-input v-model.trim="inbound.stream.finalmask.quicParams.brutalDown" placeholder="e.g. 60 mbps" />
+ <a-input v-model.trim="inbound.stream.finalmask.quicParams.brutalDown" :min="65537" placeholder="65537" />
</a-form-item>
</template>
<a-form-item label="UDP Hop">
@@ -377,30 +377,30 @@
<a-input-number v-model.number="inbound.stream.finalmask.quicParams.maxIdleTimeout" :min="4" :max="120" />
</a-form-item>
<a-form-item label="Keep Alive Period (s)">
- <a-input-number v-model.number="inbound.stream.finalmask.quicParams.keepAlivePeriod" :min="0" :max="60" />
+ <a-input-number v-model.number="inbound.stream.finalmask.quicParams.keepAlivePeriod" :min="2" :max="60" />
</a-form-item>
<a-form-item label="Disable Path MTU Dis">
<a-switch v-model="inbound.stream.finalmask.quicParams.disablePathMTUDiscovery"></a-switch>
</a-form-item>
<a-form-item label="Max Incoming Streams">
- <a-input-number v-model.number="inbound.stream.finalmask.quicParams.maxIncomingStreams" :min="0"
- placeholder="0 = default" />
+ <a-input-number v-model.number="inbound.stream.finalmask.quicParams.maxIncomingStreams" :min="8"
+ placeholder="1024 = default" />
</a-form-item>
<a-form-item label="Init Stream Window">
- <a-input-number v-model.number="inbound.stream.finalmask.quicParams.initStreamReceiveWindow" :min="0"
- placeholder="0 = default" />
+ <a-input-number v-model.number="inbound.stream.finalmask.quicParams.initStreamReceiveWindow" :min="16384"
+ placeholder="8388608 = default" />
</a-form-item>
<a-form-item label="Max Stream Window">
- <a-input-number v-model.number="inbound.stream.finalmask.quicParams.maxStreamReceiveWindow" :min="0"
- placeholder="0 = default" />
+ <a-input-number v-model.number="inbound.stream.finalmask.quicParams.maxStreamReceiveWindow" :min="16384"
+ placeholder="8388608 = default" />
</a-form-item>
<a-form-item label="Init Conn Window">
- <a-input-number v-model.number="inbound.stream.finalmask.quicParams.initConnectionReceiveWindow" :min="0"
- placeholder="0 = default" />
+ <a-input-number v-model.number="inbound.stream.finalmask.quicParams.initConnectionReceiveWindow" :min="16384"
+ placeholder="20971520 = default" />
</a-form-item>
<a-form-item label="Max Conn Window">
- <a-input-number v-model.number="inbound.stream.finalmask.quicParams.maxConnectionReceiveWindow" :min="0"
- placeholder="0 = default" />
+ <a-input-number v-model.number="inbound.stream.finalmask.quicParams.maxConnectionReceiveWindow" :min="16384"
+ placeholder="20971520 = default" />
</a-form-item>
</template>
</template>