diff options
| author | MHSanaei <ho3ein.sanaei@gmail.com> | 2023-08-26 15:09:18 +0300 |
|---|---|---|
| committer | MHSanaei <ho3ein.sanaei@gmail.com> | 2023-08-26 15:09:18 +0300 |
| commit | fe22cbd0e5a87da4c99a2bd075d6858f74da98cc (patch) | |
| tree | 4046a61ab160fed2269850a0463496d02a2e899b | |
| parent | 1277285d0835fdf2f2184f067140e2390fa083bb (diff) | |
Transparent Proxy with sockopt Stream Setting
Co-Authored-By: Alireza Ahmadi <alireza7@gmail.com>
| -rw-r--r-- | web/assets/js/model/xray.js | 29 | ||||
| -rw-r--r-- | web/html/xui/form/stream/stream_grpc.html | 4 | ||||
| -rw-r--r-- | web/html/xui/form/stream/stream_http.html | 4 | ||||
| -rw-r--r-- | web/html/xui/form/stream/stream_settings.html | 5 | ||||
| -rw-r--r-- | web/html/xui/form/stream/stream_sockopt.html | 48 |
5 files changed, 69 insertions, 21 deletions
diff --git a/web/assets/js/model/xray.js b/web/assets/js/model/xray.js index fff71e8b..8ab2969d 100644 --- a/web/assets/js/model/xray.js +++ b/web/assets/js/model/xray.js @@ -803,22 +803,27 @@ RealityStreamSettings.Settings = class extends XrayCommonClass { }; class SockoptStreamSettings extends XrayCommonClass { - constructor( - acceptProxyProtocol = false, - ) { + constructor(acceptProxyProtocol = false, tcpFastOpen = false, mark = 0, tproxy="off") { super(); this.acceptProxyProtocol = acceptProxyProtocol; + this.tcpFastOpen = tcpFastOpen; + this.mark = mark; + this.tproxy = tproxy; } - static fromJson(json = {}) { return new SockoptStreamSettings( json.acceptProxyProtocol, + json.tcpFastOpen, + json.mark, + json.tproxy, ); } - toJson() { return { acceptProxyProtocol: this.acceptProxyProtocol, + tcpFastOpen: this.tcpFastOpen, + mark: this.mark, + tproxy: this.tproxy, }; } } @@ -835,7 +840,7 @@ class StreamSettings extends XrayCommonClass { httpSettings=new HttpStreamSettings(), quicSettings=new QuicStreamSettings(), grpcSettings=new GrpcStreamSettings(), - sockopt = new SockoptStreamSettings(), + sockopt = undefined, ) { super(); this.network = network; @@ -889,14 +894,12 @@ class StreamSettings extends XrayCommonClass { } } - get isSockopt() { - return ['http', 'grpc'].indexOf(this.network) !== -1; + get sockoptSwitch() { + return this.sockopt != undefined; } - set isSockopt(isSockopt) { - if (isSockopt) { - return ['http', 'grpc'].indexOf(this.network) !== -1; - } + set sockoptSwitch(value) { + this.sockopt = value ? new SockoptStreamSettings() : undefined; } static fromJson(json={}) { @@ -931,7 +934,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, + sockopt: this.sockopt != undefined ? 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 1ee57bbf..21c95f99 100644 --- a/web/html/xui/form/stream/stream_grpc.html +++ b/web/html/xui/form/stream/stream_grpc.html @@ -1,9 +1,5 @@ {{define "form/streamGRPC"}} <a-form layout="inline"> - <a-form-item label="AcceptProxyProtocol"> - <a-switch v-model="inbound.stream.sockopt.acceptProxyProtocol"></a-switch> - </a-form-item> - <br> <a-form-item label="ServiceName"> <a-input v-model.trim="inbound.stream.grpc.serviceName"></a-input> </a-form-item> diff --git a/web/html/xui/form/stream/stream_http.html b/web/html/xui/form/stream/stream_http.html index e80eef0f..57574ce5 100644 --- a/web/html/xui/form/stream/stream_http.html +++ b/web/html/xui/form/stream/stream_http.html @@ -1,9 +1,5 @@ {{define "form/streamHTTP"}} <a-form layout="inline"> - <a-form-item label="AcceptProxyProtocol"> - <a-switch v-model="inbound.stream.sockopt.acceptProxyProtocol"></a-switch> - </a-form-item> - <br> <a-form-item label='{{ i18n "path" }}'> <a-input v-model.trim="inbound.stream.http.path"></a-input> </a-form-item> diff --git a/web/html/xui/form/stream/stream_settings.html b/web/html/xui/form/stream/stream_settings.html index 4a07947e..e50caf19 100644 --- a/web/html/xui/form/stream/stream_settings.html +++ b/web/html/xui/form/stream/stream_settings.html @@ -42,4 +42,9 @@ <template v-if="inbound.stream.network === 'grpc'"> {{template "form/streamGRPC"}} </template> + +<!-- sockopt --> +<template> + {{template "form/streamSockopt"}} +</template> {{end}}
\ No newline at end of file diff --git a/web/html/xui/form/stream/stream_sockopt.html b/web/html/xui/form/stream/stream_sockopt.html new file mode 100644 index 00000000..d4019054 --- /dev/null +++ b/web/html/xui/form/stream/stream_sockopt.html @@ -0,0 +1,48 @@ +{{define "form/streamSockopt"}} +<a-form layout="inline"> + <a-divider dashed style="margin:0;"> + <a-form-item label="Transparent Proxy"> + <a-switch v-model="inbound.stream.sockoptSwitch"></a-switch> + </a-form-item> + </a-divider> + <table width="100%" class="ant-table-tbody" v-if="inbound.stream.sockoptSwitch"> + <tr> + <td>Accept Proxy Protocol</td> + <td> + <a-form-item> + <a-switch v-model="inbound.stream.sockopt.acceptProxyProtocol"></a-switch> + </a-form-item> + </td> + </tr> + <tr> + <td>TCP FastOpen</td> + <td> + <a-form-item> + <a-switch v-model.trim="inbound.stream.sockopt.tcpFastOpen"></a-switch> + </a-form-item> + </td> + </tr> + <tr> + <td>Route Mark</td> + <td> + <a-form-item> + <a-input-number v-model="inbound.stream.sockopt.mark" :min="0"></a-input-number> + </a-form-item> + </td> + </tr> + <tr> + <td>T-Proxy</td> + <td> + <a-form-item> + <a-select v-model="inbound.stream.sockopt.tproxy" style="width: 250px;" + :dropdown-class-name="themeSwitcher.darkCardClass"> + <a-select-option value="off">OFF</a-select-option> + <a-select-option value="redirect">Redirect</a-select-option> + <a-select-option value="tproxy">T-Proxy</a-select-option> + </a-select> + </a-form-item> + </td> + </tr> + </table> +</a-form> +{{end}}
\ No newline at end of file |
