From fa826d7ad74b2cd49d4596d2e02028b6a7a6872e Mon Sep 17 00:00:00 2001 From: Wizz Wallet <153743376+wizz-wallet-dev@users.noreply.github.com> Date: Tue, 25 Jun 2024 22:47:15 +0800 Subject: [PATCH 1/2] Expose session max size --- electrumx/server/env.py | 2 ++ electrumx/server/session/session_manager.py | 10 ++++++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/electrumx/server/env.py b/electrumx/server/env.py index f10aeea8..5d38441d 100644 --- a/electrumx/server/env.py +++ b/electrumx/server/env.py @@ -109,6 +109,8 @@ def __init__(self, coin=None): self.session_timeout = self.integer("SESSION_TIMEOUT", 600) self.session_group_by_subnet_ipv4 = self.integer("SESSION_GROUP_BY_SUBNET_IPV4", 24) self.session_group_by_subnet_ipv6 = self.integer("SESSION_GROUP_BY_SUBNET_IPV6", 48) + self.session_max_size_http = self.integer("SESSION_MAX_SIZE_HTTP", 1024**2) + self.session_max_size_ws = self.integer("SESSION_MAX_SIZE_WS", 1024**2) self._check_and_fix_cost_limits() self.enable_rate_limit = self.boolean("ENABLE_RATE_LIMIT", True) diff --git a/electrumx/server/session/session_manager.py b/electrumx/server/session/session_manager.py index 8a2e800e..b077649d 100644 --- a/electrumx/server/session/session_manager.py +++ b/electrumx/server/session/session_manager.py @@ -154,7 +154,8 @@ async def _start_servers(self, services): cors_middleware(self), error_middleware(self), request_middleware(self), - ] + ], + client_max_size=self.env.session_max_size_http ) handler = HttpSession(self, self.db, self.mempool, self.peer_mgr, kind) await handler.add_endpoints(app.router, SESSION_PROTOCOL_MAX) @@ -184,7 +185,12 @@ async def _start_servers(self, services): session_factory = partial(session_class, self, self.db, self.mempool, self.peer_mgr, kind) host = None if service.host == "all_interfaces" else str(service.host) try: - self.servers[service] = await serve(session_factory, host, service.port, ssl=sslc) + if service.protocol in ("ws", "wss"): + self.servers[service] = await serve( + session_factory, host, service.port, ssl=sslc, max_size=self.env.session_max_size_ws + ) + else: + self.servers[service] = await serve(session_factory, host, service.port, ssl=sslc) except OSError as e: # don't suppress CancelledError self.logger.error(f"{kind} server failed to listen on {service.address}: {e}") else: From 56c0499131287c17ea556e64e652d414f6e772b6 Mon Sep 17 00:00:00 2001 From: Wizz Wallet <153743376+wizz-wallet-dev@users.noreply.github.com> Date: Wed, 26 Jun 2024 11:24:20 +0800 Subject: [PATCH 2/2] Add comments --- electrumx/server/env.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/electrumx/server/env.py b/electrumx/server/env.py index 5d38441d..c81838cb 100644 --- a/electrumx/server/env.py +++ b/electrumx/server/env.py @@ -109,7 +109,9 @@ def __init__(self, coin=None): self.session_timeout = self.integer("SESSION_TIMEOUT", 600) self.session_group_by_subnet_ipv4 = self.integer("SESSION_GROUP_BY_SUBNET_IPV4", 24) self.session_group_by_subnet_ipv6 = self.integer("SESSION_GROUP_BY_SUBNET_IPV6", 48) + # aiohttp.web_app.Application.client_max_size self.session_max_size_http = self.integer("SESSION_MAX_SIZE_HTTP", 1024**2) + # websockets.legacy.server.Serve.max_size self.session_max_size_ws = self.integer("SESSION_MAX_SIZE_WS", 1024**2) self._check_and_fix_cost_limits() self.enable_rate_limit = self.boolean("ENABLE_RATE_LIMIT", True)