|
|
@@ -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;
|
|
|
}
|
|
|
}
|