|
@@ -90,6 +90,25 @@ const USAGE_OPTION = {
|
|
|
ISSUE: "issue",
|
|
|
};
|
|
|
|
|
|
+const DOMAIN_STRATEGY_OPTION = {
|
|
|
+ AS_IS: "AsIs",
|
|
|
+ USE_IP: "UseIP",
|
|
|
+ USE_IPV6V4: "UseIPv6v4",
|
|
|
+ USE_IPV6: "UseIPv6",
|
|
|
+ USE_IPV4V6: "UseIPv4v6",
|
|
|
+ USE_IPV4: "UseIPv4",
|
|
|
+ FORCE_IP: "ForceIP",
|
|
|
+ FORCE_IPV6V4: "ForceIPv6v4",
|
|
|
+ FORCE_IPV6: "ForceIPv6",
|
|
|
+ FORCE_IPV4V6: "ForceIPv4v6",
|
|
|
+ FORCE_IPV4: "ForceIPv4",
|
|
|
+};
|
|
|
+const TCP_CONGESTION_OPTION = {
|
|
|
+ BBR: "bbr",
|
|
|
+ CUBIC: "cubic",
|
|
|
+ RENO: "reno",
|
|
|
+};
|
|
|
+
|
|
|
Object.freeze(Protocols);
|
|
|
Object.freeze(SSMethods);
|
|
|
Object.freeze(XTLS_FLOW_CONTROL);
|
|
@@ -100,6 +119,8 @@ Object.freeze(UTLS_FINGERPRINT);
|
|
|
Object.freeze(ALPN_OPTION);
|
|
|
Object.freeze(SNIFFING_OPTION);
|
|
|
Object.freeze(USAGE_OPTION);
|
|
|
+Object.freeze(DOMAIN_STRATEGY_OPTION);
|
|
|
+Object.freeze(TCP_CONGESTION_OPTION);
|
|
|
|
|
|
class XrayCommonClass {
|
|
|
|
|
@@ -881,7 +902,24 @@ RealityStreamSettings.Settings = class extends XrayCommonClass {
|
|
|
};
|
|
|
|
|
|
class SockoptStreamSettings extends XrayCommonClass {
|
|
|
- constructor(acceptProxyProtocol = false, tcpFastOpen = false, mark = 0, tproxy="off", tcpMptcp = false, tcpNoDelay = false) {
|
|
|
+ constructor(
|
|
|
+ acceptProxyProtocol = false,
|
|
|
+ tcpFastOpen = false,
|
|
|
+ mark = 0,
|
|
|
+ tproxy="off",
|
|
|
+ tcpMptcp = false,
|
|
|
+ tcpNoDelay = false,
|
|
|
+ domainStrategy = DOMAIN_STRATEGY_OPTION.USE_IP,
|
|
|
+ tcpMaxSeg = 1440,
|
|
|
+ dialerProxy = "",
|
|
|
+ tcpKeepAliveInterval = 0,
|
|
|
+ tcpKeepAliveIdle = 300,
|
|
|
+ tcpUserTimeout = 10000,
|
|
|
+ tcpcongestion = TCP_CONGESTION_OPTION.BBR,
|
|
|
+ V6Only = false,
|
|
|
+ tcpWindowClamp = 600,
|
|
|
+ interfaceName = "",
|
|
|
+ ) {
|
|
|
super();
|
|
|
this.acceptProxyProtocol = acceptProxyProtocol;
|
|
|
this.tcpFastOpen = tcpFastOpen;
|
|
@@ -889,6 +927,16 @@ class SockoptStreamSettings extends XrayCommonClass {
|
|
|
this.tproxy = tproxy;
|
|
|
this.tcpMptcp = tcpMptcp;
|
|
|
this.tcpNoDelay = tcpNoDelay;
|
|
|
+ this.domainStrategy = domainStrategy;
|
|
|
+ this.tcpMaxSeg = tcpMaxSeg;
|
|
|
+ this.dialerProxy = dialerProxy;
|
|
|
+ this.tcpKeepAliveInterval = tcpKeepAliveInterval;
|
|
|
+ this.tcpKeepAliveIdle = tcpKeepAliveIdle;
|
|
|
+ this.tcpUserTimeout = tcpUserTimeout;
|
|
|
+ this.tcpcongestion = tcpcongestion;
|
|
|
+ this.V6Only = V6Only;
|
|
|
+ this.tcpWindowClamp = tcpWindowClamp;
|
|
|
+ this.interfaceName = interfaceName;
|
|
|
}
|
|
|
|
|
|
static fromJson(json = {}) {
|
|
@@ -900,6 +948,16 @@ class SockoptStreamSettings extends XrayCommonClass {
|
|
|
json.tproxy,
|
|
|
json.tcpMptcp,
|
|
|
json.tcpNoDelay,
|
|
|
+ json.domainStrategy,
|
|
|
+ json.tcpMaxSeg,
|
|
|
+ json.dialerProxy,
|
|
|
+ json.tcpKeepAliveInterval,
|
|
|
+ json.tcpKeepAliveIdle,
|
|
|
+ json.tcpUserTimeout,
|
|
|
+ json.tcpcongestion,
|
|
|
+ json.V6Only,
|
|
|
+ json.tcpWindowClamp,
|
|
|
+ json.interface,
|
|
|
);
|
|
|
}
|
|
|
|
|
@@ -911,6 +969,16 @@ class SockoptStreamSettings extends XrayCommonClass {
|
|
|
tproxy: this.tproxy,
|
|
|
tcpMptcp: this.tcpMptcp,
|
|
|
tcpNoDelay: this.tcpNoDelay,
|
|
|
+ domainStrategy: this.domainStrategy,
|
|
|
+ tcpMaxSeg: this.tcpMaxSeg,
|
|
|
+ dialerProxy: this.dialerProxy,
|
|
|
+ tcpKeepAliveInterval: this.tcpKeepAliveInterval,
|
|
|
+ tcpKeepAliveIdle: this.tcpKeepAliveIdle,
|
|
|
+ tcpUserTimeout: this.tcpUserTimeout,
|
|
|
+ tcpcongestion: this.tcpcongestion,
|
|
|
+ V6Only: this.V6Only,
|
|
|
+ tcpWindowClamp: this.tcpWindowClamp,
|
|
|
+ interface: this.interfaceName,
|
|
|
};
|
|
|
}
|
|
|
}
|