From 6066edd510d69b2e92b830ad177b88ae083697d4 Mon Sep 17 00:00:00 2001 From: MHSanaei Date: Sat, 29 Jul 2023 15:52:02 +0330 Subject: [PATCH] sockopt acceptProxyProtocol for h2 , gRPC #773 --- web/assets/js/model/xray.js | 41 +++++++++++++++++++---- web/html/xui/form/stream/stream_grpc.html | 2 +- web/html/xui/form/stream/stream_http.html | 2 +- 3 files changed, 37 insertions(+), 8 deletions(-) diff --git a/web/assets/js/model/xray.js b/web/assets/js/model/xray.js index 462cc125..94dc4eaa 100644 --- a/web/assets/js/model/xray.js +++ b/web/assets/js/model/xray.js @@ -387,12 +387,10 @@ class HttpStreamSettings extends XrayCommonClass { constructor( path='/', host=[''], - sockopt={acceptProxyProtocol: false} ) { super(); this.path = path; this.host = host.length === 0 ? [''] : host; - this.sockopt = sockopt; } addHost(host) { @@ -417,7 +415,6 @@ class HttpStreamSettings extends XrayCommonClass { return { path: this.path, host: host, - sockopt: this.sockopt, } } } @@ -455,12 +452,10 @@ class GrpcStreamSettings extends XrayCommonClass { constructor( serviceName="", multiMode=false, - sockopt={acceptProxyProtocol: false} ) { super(); this.serviceName = serviceName; this.multiMode = multiMode; - this.sockopt = sockopt; } static fromJson(json={}) { @@ -475,7 +470,6 @@ class GrpcStreamSettings extends XrayCommonClass { return { serviceName: this.serviceName, multiMode: this.multiMode, - sockopt: this.sockopt } } } @@ -807,6 +801,27 @@ RealityStreamSettings.Settings = class extends XrayCommonClass { } }; +class SockoptStreamSettings extends XrayCommonClass { + constructor( + acceptProxyProtocol = false, + ) { + super(); + this.acceptProxyProtocol = acceptProxyProtocol; + } + + static fromJson(json = {}) { + return new SockoptStreamSettings( + json.acceptProxyProtocol, + ); + } + + toJson() { + return { + acceptProxyProtocol: this.acceptProxyProtocol, + }; + } +} + class StreamSettings extends XrayCommonClass { constructor(network='tcp', security='none', @@ -819,6 +834,7 @@ class StreamSettings extends XrayCommonClass { httpSettings=new HttpStreamSettings(), quicSettings=new QuicStreamSettings(), grpcSettings=new GrpcStreamSettings(), + sockopt = new SockoptStreamSettings(), ) { super(); this.network = network; @@ -832,6 +848,7 @@ class StreamSettings extends XrayCommonClass { this.http = httpSettings; this.quic = quicSettings; this.grpc = grpcSettings; + this.sockopt = sockopt; } get isTls() { @@ -871,6 +888,16 @@ class StreamSettings extends XrayCommonClass { } } + get isSockopt() { + return ['http', 'grpc'].indexOf(this.network) !== -1; + } + + set isSockopt(isSockopt) { + if (isSockopt) { + return ['http', 'grpc'].indexOf(this.network) !== -1; + } + } + static fromJson(json={}) { return new StreamSettings( @@ -885,6 +912,7 @@ class StreamSettings extends XrayCommonClass { HttpStreamSettings.fromJson(json.httpSettings), QuicStreamSettings.fromJson(json.quicSettings), GrpcStreamSettings.fromJson(json.grpcSettings), + SockoptStreamSettings.fromJson(json.sockopt), ); } @@ -902,6 +930,7 @@ class StreamSettings extends XrayCommonClass { httpSettings: network === 'http' ? this.http.toJson() : undefined, quicSettings: network === 'quic' ? this.quic.toJson() : undefined, grpcSettings: network === 'grpc' ? this.grpc.toJson() : undefined, + sockopt: this.isSockopt ? this.sockopt.toJson() : undefined, }; } } diff --git a/web/html/xui/form/stream/stream_grpc.html b/web/html/xui/form/stream/stream_grpc.html index f34a3457..1ee57bbf 100644 --- a/web/html/xui/form/stream/stream_grpc.html +++ b/web/html/xui/form/stream/stream_grpc.html @@ -1,7 +1,7 @@ {{define "form/streamGRPC"}} - +
diff --git a/web/html/xui/form/stream/stream_http.html b/web/html/xui/form/stream/stream_http.html index 17bd3759..e80eef0f 100644 --- a/web/html/xui/form/stream/stream_http.html +++ b/web/html/xui/form/stream/stream_http.html @@ -1,7 +1,7 @@ {{define "form/streamHTTP"}} - +