From 8d26e43349a6fb51922b0974ba56c2bcd115ce42 Mon Sep 17 00:00:00 2001 From: Mohammad Date: Thu, 30 Jan 2025 17:41:56 +0330 Subject: [PATCH] xhttp: add support for `scStreamUpServerSecs` (#1627) --- app/subscription/v2ray.py | 18 ++++++++++++++++++ app/xray/config.py | 1 + 2 files changed, 19 insertions(+) diff --git a/app/subscription/v2ray.py b/app/subscription/v2ray.py index c5a92feb9..9569a4634 100644 --- a/app/subscription/v2ray.py +++ b/app/subscription/v2ray.py @@ -80,6 +80,7 @@ def add(self, remark: str, address: str, inbound: dict, settings: dict): noGRPCHeader=inbound.get("noGRPCHeader"), heartbeatPeriod=inbound.get("heartbeatPeriod", 0), keepAlivePeriod=inbound.get("keepAlivePeriod", 0), + scStreamUpServerSecs=inbound.get("scStreamUpServerSecs"), xmux=inbound.get("xmux", {}), downloadSettings=inbound.get("downloadSettings", {}) ) @@ -113,6 +114,7 @@ def add(self, remark: str, address: str, inbound: dict, settings: dict): noGRPCHeader=inbound.get("noGRPCHeader"), heartbeatPeriod=inbound.get("heartbeatPeriod", 0), keepAlivePeriod=inbound.get("keepAlivePeriod", 0), + scStreamUpServerSecs=inbound.get("scStreamUpServerSecs"), xmux=inbound.get("xmux", {}), downloadSettings=inbound.get("downloadSettings", {}) ) @@ -147,6 +149,7 @@ def add(self, remark: str, address: str, inbound: dict, settings: dict): heartbeatPeriod=inbound.get("heartbeatPeriod", 0), keepAlivePeriod=inbound.get("keepAlivePeriod", 0), xmux=inbound.get("xmux", {}), + scStreamUpServerSecs=inbound.get("scStreamUpServerSecs"), downloadSettings=inbound.get("downloadSettings", {}) ) @@ -191,6 +194,7 @@ def vmess( mode: str = "", noGRPCHeader: bool | None = None, heartbeatPeriod: int | None = None, + scStreamUpServerSecs: int | None = None, keepAlivePeriod: int = 0, xmux: dict = {}, downloadSettings: dict = {}, @@ -249,6 +253,8 @@ def vmess( extra["xPaddingBytes"] = x_padding_bytes if noGRPCHeader is not None: extra["noGRPCHeader"] = noGRPCHeader + if scStreamUpServerSecs is not None: + extra["scStreamUpServerSecs"] = scStreamUpServerSecs if keepAlivePeriod > 0: extra["keepAlivePeriod"] = keepAlivePeriod if xmux: @@ -298,6 +304,7 @@ def vless(cls, mode: str = "", noGRPCHeader: bool | None = None, heartbeatPeriod: int | None = None, + scStreamUpServerSecs: int | None = None, keepAlivePeriod: int = 0, xmux: dict = {}, downloadSettings: dict = {}, @@ -338,6 +345,8 @@ def vless(cls, extra["xPaddingBytes"] = x_padding_bytes if noGRPCHeader is not None: extra["noGRPCHeader"] = noGRPCHeader + if scStreamUpServerSecs is not None: + extra["scStreamUpServerSecs"] = scStreamUpServerSecs if keepAlivePeriod > 0: extra["keepAlivePeriod"] = keepAlivePeriod if xmux: @@ -414,6 +423,7 @@ def trojan(cls, mode: str = "", noGRPCHeader: bool | None = None, heartbeatPeriod: int | None = None, + scStreamUpServerSecs: int | None = None, keepAlivePeriod: int = 0, xmux: dict = {}, downloadSettings: dict = {}, @@ -452,6 +462,8 @@ def trojan(cls, extra["noGRPCHeader"] = noGRPCHeader if keepAlivePeriod > 0: extra["keepAlivePeriod"] = keepAlivePeriod + if scStreamUpServerSecs is not None: + extra["scStreamUpServerSecs"] = scStreamUpServerSecs if xmux: extra["xmux"] = xmux if downloadSettings: @@ -632,6 +644,7 @@ def splithttp_config(self, path: str = "", host: str = "", random_user_agent: bo downloadSettings: dict = {}, mode: str = "", noGRPCHeader: bool | None = None, + scStreamUpServerSecs: int | None = None, keepAlivePeriod: int = 0, ) -> dict: config = copy.deepcopy(self.settings.get("splithttpSettings", {})) @@ -654,6 +667,8 @@ def splithttp_config(self, path: str = "", host: str = "", random_user_agent: bo extra["xPaddingBytes"] = x_padding_bytes if noGRPCHeader is not None: extra["noGRPCHeader"] = noGRPCHeader + if scStreamUpServerSecs is not None: + extra["scStreamUpServerSecs"] = scStreamUpServerSecs if keepAlivePeriod > 0: extra["keepAlivePeriod"] = keepAlivePeriod if xmux: @@ -966,6 +981,7 @@ def make_stream_setting(self, downloadSettings: dict = {}, mode: str = "", noGRPCHeader: bool | None = None, + scStreamUpServerSecs: int | None = None, heartbeatPeriod: int = 0, keepAlivePeriod: int = 0, ) -> dict: @@ -1002,6 +1018,7 @@ def make_stream_setting(self, mode=mode, noGRPCHeader=noGRPCHeader, keepAlivePeriod=keepAlivePeriod, + scStreamUpServerSecs=scStreamUpServerSecs, ) else: network_setting = {} @@ -1114,6 +1131,7 @@ def add(self, remark: str, address: str, inbound: dict, settings: dict): noGRPCHeader=inbound.get("noGRPCHeader"), heartbeatPeriod=inbound.get("heartbeatPeriod", 0), keepAlivePeriod=inbound.get("keepAlivePeriod", 0), + scStreamUpServerSecs=inbound.get("scStreamUpServerSecs"), ) mux_json = json.loads(self.mux_template) diff --git a/app/xray/config.py b/app/xray/config.py index 63fa00bf9..b428c2d67 100644 --- a/app/xray/config.py +++ b/app/xray/config.py @@ -312,6 +312,7 @@ def _resolve_inbounds(self): settings['downloadSettings'] = net_settings.get('downloadSettings', {}) settings["mode"] = net_settings.get("mode", "auto") settings["keepAlivePeriod"] = net_settings.get("keepAlivePeriod", 0) + settings["scStreamUpServerSecs"] = net_settings.get("scStreamUpServerSecs") elif net == 'kcp': header = net_settings.get('header', {})