SplitHTTP - Mode

Co-Authored-By: MHSanaei <ho3ein.sanaei@gmail.com>
This commit is contained in:
Alireza Ahmadi
2024-11-16 15:41:42 +01:00
parent 31cec0280a
commit 2f61bbcfdd
6 changed files with 56 additions and 8 deletions

View File

@@ -69,12 +69,19 @@ const WireguardDomainStrategy = [
"ForceIPv6v4"
];
const MODE_OPTION = {
AUTO: "auto",
PACKET_UP: "packet-up",
STREAM_UP: "stream-up",
};
Object.freeze(Protocols);
Object.freeze(SSMethods);
Object.freeze(TLS_FLOW_CONTROL);
Object.freeze(ALPN_OPTION);
Object.freeze(OutboundDomainStrategies);
Object.freeze(WireguardDomainStrategy);
Object.freeze(MODE_OPTION);
class CommonClass {
@@ -272,16 +279,18 @@ 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,
);
}
@@ -289,6 +298,7 @@ class SplitHTTPStreamSettings extends CommonClass {
return {
path: this.path,
host: this.host,
mode: this.mode,
};
}
}
@@ -643,7 +653,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'){
@@ -687,7 +697,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'){

View File

@@ -79,6 +79,12 @@ const SNIFFING_OPTION = {
FAKEDNS: "fakedns"
};
const MODE_OPTION = {
AUTO: "auto",
PACKET_UP: "packet-up",
STREAM_UP: "stream-up",
};
Object.freeze(Protocols);
Object.freeze(SSMethods);
Object.freeze(TLS_FLOW_CONTROL);
@@ -87,6 +93,8 @@ Object.freeze(TLS_CIPHER_OPTION);
Object.freeze(UTLS_FINGERPRINT);
Object.freeze(ALPN_OPTION);
Object.freeze(SNIFFING_OPTION);
Object.freeze(MODE_OPTION);
class XrayCommonClass {
@@ -463,7 +471,8 @@ class SplitHTTPStreamSettings extends XrayCommonClass {
maxConnections: 0,
cMaxReuseTimes: "64-128",
cMaxLifetimeMs: 0
}
},
mode = MODE_OPTION.AUTO,
) {
super();
this.path = path;
@@ -474,7 +483,8 @@ class SplitHTTPStreamSettings extends XrayCommonClass {
this.scMinPostsIntervalMs = scMinPostsIntervalMs;
this.noSSEHeader = noSSEHeader;
this.xPaddingBytes = xPaddingBytes;
this.xmux = xmux;
this.xmux = xmux;
this.mode = mode;
}
addHeader(name, value) {
@@ -496,6 +506,7 @@ class SplitHTTPStreamSettings extends XrayCommonClass {
json.noSSEHeader,
json.xPaddingBytes,
json.xmux,
json.mode,
);
}
@@ -514,7 +525,8 @@ class SplitHTTPStreamSettings extends XrayCommonClass {
maxConnections: this.xmux.maxConnections,
cMaxReuseTimes: this.xmux.cMaxReuseTimes,
cMaxLifetimeMs: this.xmux.cMaxLifetimeMs
}
},
mode: this.mode,
};
}
}
@@ -1065,7 +1077,7 @@ class Inbound extends XrayCommonClass {
canEnableReality() {
if(![Protocols.VLESS, Protocols.TROJAN].includes(this.protocol)) return false;
return ["tcp", "http", "grpc"].includes(this.network);
return ["tcp", "http", "grpc", "splithttp"].includes(this.network);
}
canEnableStream() {
@@ -1133,6 +1145,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') {
@@ -1205,6 +1218,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;
}
@@ -1308,6 +1322,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;
}
@@ -1390,6 +1405,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;
}