diff --git a/web/assets/js/model/outbound.js b/web/assets/js/model/outbound.js index af4e512c..f62b06b9 100644 --- a/web/assets/js/model/outbound.js +++ b/web/assets/js/model/outbound.js @@ -356,6 +356,34 @@ class RealityStreamSettings extends CommonClass { }; } }; +class SockoptStreamSettings extends CommonClass { + constructor(dialerProxy = "", tcpFastOpen = false, tcpKeepAliveInterval = 0, tcpNoDelay = false) { + super(); + this.dialerProxy = dialerProxy; + this.tcpFastOpen = tcpFastOpen; + this.tcpKeepAliveInterval = tcpKeepAliveInterval; + this.tcpNoDelay = tcpNoDelay; + } + + static fromJson(json = {}) { + if (Object.keys(json).length === 0) return undefined; + return new SockoptStreamSettings( + json.dialerProxy, + json.tcpFastOpen, + json.tcpKeepAliveInterval, + json.tcpNoDelay, + ); + } + + toJson() { + return { + dialerProxy: this.dialerProxy, + tcpFastOpen: this.tcpFastOpen, + tcpKeepAliveInterval: this.tcpKeepAliveInterval, + tcpNoDelay: this.tcpNoDelay, + }; + } +} class StreamSettings extends CommonClass { constructor(network='tcp', @@ -392,6 +420,14 @@ class StreamSettings extends CommonClass { return this.security === "reality"; } + get sockoptSwitch() { + return this.sockopt != undefined; + } + + set sockoptSwitch(value) { + this.sockopt = value ? new SockoptStreamSettings() : undefined; + } + static fromJson(json={}) { return new StreamSettings( json.network, @@ -422,6 +458,7 @@ class StreamSettings extends CommonClass { quicSettings: network === 'quic' ? this.quic.toJson() : undefined, grpcSettings: network === 'grpc' ? this.grpc.toJson() : undefined, httpupgradeSettings: network === 'httpupgrade' ? this.httpupgrade.toJson() : undefined, + sockopt: this.sockopt != undefined ? this.sockopt.toJson() : undefined, }; } } diff --git a/web/html/xui/form/outbound.html b/web/html/xui/form/outbound.html index b6874240..2f2a5215 100644 --- a/web/html/xui/form/outbound.html +++ b/web/html/xui/form/outbound.html @@ -351,7 +351,7 @@ {{ i18n "none" }} TLS - REALITY + Reality + + + +