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--sub/subService.go4
-rw-r--r--web/assets/js/model/inbound.js19
-rw-r--r--web/assets/js/model/outbound.js20
-rw-r--r--web/html/xui/form/outbound.html5
-rw-r--r--web/html/xui/form/stream/stream_splithttp.html6
-rw-r--r--web/html/xui/inbound_info_modal.html8
6 files changed, 57 insertions, 5 deletions
diff --git a/sub/subService.go b/sub/subService.go
index 2838e932..1659b98b 100644
--- a/sub/subService.go
+++ b/sub/subService.go
@@ -238,6 +238,7 @@ func (s *SubService) genVmessLink(inbound *model.Inbound, email string) string {
headers, _ := splithttp["headers"].(map[string]interface{})
obj["host"] = searchHost(headers)
}
+ obj["mode"] = splithttp["mode"].(string)
}
security, _ := stream["security"].(string)
obj["tls"] = security
@@ -389,6 +390,7 @@ func (s *SubService) genVlessLink(inbound *model.Inbound, email string) string {
headers, _ := splithttp["headers"].(map[string]interface{})
params["host"] = searchHost(headers)
}
+ params["mode"] = splithttp["mode"].(string)
}
security, _ := stream["security"].(string)
if security == "tls" {
@@ -586,6 +588,7 @@ func (s *SubService) genTrojanLink(inbound *model.Inbound, email string) string
headers, _ := splithttp["headers"].(map[string]interface{})
params["host"] = searchHost(headers)
}
+ params["mode"] = splithttp["mode"].(string)
}
security, _ := stream["security"].(string)
if security == "tls" {
@@ -783,6 +786,7 @@ func (s *SubService) genShadowsocksLink(inbound *model.Inbound, email string) st
headers, _ := splithttp["headers"].(map[string]interface{})
params["host"] = searchHost(headers)
}
+ params["mode"] = splithttp["mode"].(string)
}
security, _ := stream["security"].(string)
diff --git a/web/assets/js/model/inbound.js b/web/assets/js/model/inbound.js
index 41121b66..0e403fce 100644
--- a/web/assets/js/model/inbound.js
+++ b/web/assets/js/model/inbound.js
@@ -113,6 +113,12 @@ const USERS_SECURITY = {
ZERO: "zero",
};
+const MODE_OPTION = {
+ AUTO: "auto",
+ PACKET_UP: "packet-up",
+ STREAM_UP: "stream-up",
+};
+
Object.freeze(Protocols);
Object.freeze(SSMethods);
Object.freeze(TLS_FLOW_CONTROL);
@@ -125,6 +131,7 @@ Object.freeze(USAGE_OPTION);
Object.freeze(DOMAIN_STRATEGY_OPTION);
Object.freeze(TCP_CONGESTION_OPTION);
Object.freeze(USERS_SECURITY);
+Object.freeze(MODE_OPTION);
class XrayCommonClass {
@@ -528,7 +535,8 @@ class SplitHTTPStreamSettings extends XrayCommonClass {
maxConnections: 0,
cMaxReuseTimes: "64-128",
cMaxLifetimeMs: 0
- }
+ },
+ mode = MODE_OPTION.AUTO,
) {
super();
this.path = path;
@@ -540,6 +548,7 @@ class SplitHTTPStreamSettings extends XrayCommonClass {
this.noSSEHeader = noSSEHeader;
this.xPaddingBytes = xPaddingBytes;
this.xmux = xmux;
+ this.mode = mode;
}
addHeader(name, value) {
@@ -561,6 +570,7 @@ class SplitHTTPStreamSettings extends XrayCommonClass {
json.noSSEHeader,
json.xPaddingBytes,
json.xmux,
+ json.mode,
);
}
@@ -579,7 +589,8 @@ class SplitHTTPStreamSettings extends XrayCommonClass {
maxConnections: this.xmux.maxConnections,
cMaxReuseTimes: this.xmux.cMaxReuseTimes,
cMaxLifetimeMs: this.xmux.cMaxLifetimeMs
- }
+ },
+ mode: this.mode,
};
}
}
@@ -1329,6 +1340,7 @@ class Inbound extends XrayCommonClass {
const splithttp = this.stream.splithttp;
obj.path = splithttp.path;
obj.host = splithttp.host?.length > 0 ? splithttp.host : this.getHeader(splithttp, 'host');
+ obj.mode = splithttp.mode;
}
if (security === 'tls') {
@@ -1401,6 +1413,7 @@ class Inbound extends XrayCommonClass {
const splithttp = this.stream.splithttp;
params.set("path", splithttp.path);
params.set("host", splithttp.host?.length > 0 ? splithttp.host : this.getHeader(splithttp, 'host'));
+ params.set("mode", splithttp.mode);
break;
}
@@ -1504,6 +1517,7 @@ class Inbound extends XrayCommonClass {
const splithttp = this.stream.splithttp;
params.set("path", splithttp.path);
params.set("host", splithttp.host?.length > 0 ? splithttp.host : this.getHeader(splithttp, 'host'));
+ params.set("mode", splithttp.mode);
break;
}
@@ -1586,6 +1600,7 @@ class Inbound extends XrayCommonClass {
const splithttp = this.stream.splithttp;
params.set("path", splithttp.path);
params.set("host", splithttp.host?.length > 0 ? splithttp.host : this.getHeader(splithttp, 'host'));
+ params.set("mode", splithttp.mode);
break;
}
diff --git a/web/assets/js/model/outbound.js b/web/assets/js/model/outbound.js
index 78078dd6..35be85d8 100644
--- a/web/assets/js/model/outbound.js
+++ b/web/assets/js/model/outbound.js
@@ -77,6 +77,12 @@ const USERS_SECURITY = {
ZERO: "zero",
};
+const MODE_OPTION = {
+ AUTO: "auto",
+ PACKET_UP: "packet-up",
+ STREAM_UP: "stream-up",
+};
+
Object.freeze(Protocols);
Object.freeze(SSMethods);
Object.freeze(TLS_FLOW_CONTROL);
@@ -85,6 +91,7 @@ Object.freeze(ALPN_OPTION);
Object.freeze(OutboundDomainStrategies);
Object.freeze(WireguardDomainStrategy);
Object.freeze(USERS_SECURITY);
+Object.freeze(MODE_OPTION);
class CommonClass {
@@ -320,16 +327,22 @@ class HttpUpgradeStreamSettings extends CommonClass {
}
class SplitHTTPStreamSettings extends CommonClass {
- constructor(path = '/', host = '') {
+ constructor(
+ path = '/',
+ host = '',
+ mode = '',
+ ) {
super();
this.path = path;
this.host = host;
+ this.mode = mode;
}
static fromJson(json = {}) {
return new SplitHTTPStreamSettings(
json.path,
json.host,
+ json.mode,
);
}
@@ -337,6 +350,7 @@ class SplitHTTPStreamSettings extends CommonClass {
return {
path: this.path,
host: this.host,
+ mode: this.mode,
};
}
}
@@ -710,7 +724,7 @@ class Outbound extends CommonClass {
} else if (network === 'httpupgrade') {
stream.httpupgrade = new HttpUpgradeStreamSettings(json.path, json.host);
} else if (network === 'splithttp') {
- stream.splithttp = new SplitHTTPStreamSettings(json.path, json.host);
+ stream.splithttp = new SplitHTTPStreamSettings(json.path, json.host, json.mode);
}
if (json.tls && json.tls == 'tls') {
@@ -754,7 +768,7 @@ class Outbound extends CommonClass {
} else if (type === 'httpupgrade') {
stream.httpupgrade = new HttpUpgradeStreamSettings(path, host);
} else if (type === 'splithttp') {
- stream.splithttp = new SplitHTTPStreamSettings(path, host);
+ stream.splithttp = new SplitHTTPStreamSettings(path, host, mode);
}
if (security == 'tls') {
diff --git a/web/html/xui/form/outbound.html b/web/html/xui/form/outbound.html
index 2f5d8207..fde2f27c 100644
--- a/web/html/xui/form/outbound.html
+++ b/web/html/xui/form/outbound.html
@@ -380,6 +380,11 @@
<a-form-item label='{{ i18n "path" }}'>
<a-input v-model.trim="outbound.stream.splithttp.path"></a-input>
</a-form-item>
+ <a-form-item label='Mode'>
+ <a-select v-model="outbound.stream.splithttp.mode" :dropdown-class-name="themeSwitcher.currentTheme">
+ <a-select-option v-for="key in MODE_OPTION" :value="key">[[ key ]]</a-select-option>
+ </a-select>
+ </a-form-item>
</template>
</template>
diff --git a/web/html/xui/form/stream/stream_splithttp.html b/web/html/xui/form/stream/stream_splithttp.html
index 957720e9..12cd3cac 100644
--- a/web/html/xui/form/stream/stream_splithttp.html
+++ b/web/html/xui/form/stream/stream_splithttp.html
@@ -22,6 +22,12 @@
</a-input>
</a-input-group>
</a-form-item>
+ <a-form-item label='Mode'>
+ <a-select v-model="inbound.stream.splithttp.mode" style="width: 50%"
+ :dropdown-class-name="themeSwitcher.currentTheme">
+ <a-select-option v-for="key in MODE_OPTION" :value="key">[[ key ]]</a-select-option>
+ </a-select>
+ </a-form-item>
<a-form-item label="Max Concurrent Upload">
<a-input v-model.trim="inbound.stream.splithttp.scMaxConcurrentPosts"></a-input>
</a-form-item>
diff --git a/web/html/xui/inbound_info_modal.html b/web/html/xui/inbound_info_modal.html
index 36f165c6..0e0a18fc 100644
--- a/web/html/xui/inbound_info_modal.html
+++ b/web/html/xui/inbound_info_modal.html
@@ -58,6 +58,14 @@
</td>
</tr>
</template>
+ <template v-if="inbound.isSplithttp">
+ <tr>
+ <td>Mode</td>
+ <td>
+ <a-tag>[[ inbound.stream.splithttp.mode ]]</a-tag>
+ </td>
+ </tr>
+ </template>
<template v-if="inbound.isKcp">
<tr>
<td>kcp {{ i18n "encryption" }}</td>