From 1a07d0f039909617e9c9ac753245f57d03345f36 Mon Sep 17 00:00:00 2001 From: Anna Shaleva Date: Wed, 18 May 2022 12:45:44 +0300 Subject: [PATCH] rpc: increase server-side WS read limit for websocket RPC message Close #2505. Turns out that existing limit is too low to fit `submitp2pnotaryrequest`. Thanks to @alexvanin for discovering this. --- pkg/rpc/server/server.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/pkg/rpc/server/server.go b/pkg/rpc/server/server.go index aaa66a405..3f37a05ba 100644 --- a/pkg/rpc/server/server.go +++ b/pkg/rpc/server/server.go @@ -59,8 +59,10 @@ type ( // Server represents the JSON-RPC 2.0 server. Server struct { *http.Server - chain blockchainer.Blockchainer - config rpc.Config + chain blockchainer.Blockchainer + config rpc.Config + // wsReadLimit represents web-socket message limit for a receiving side. + wsReadLimit int64 network netmode.Magic stateRootEnabled bool coreServer *network.Server @@ -87,9 +89,6 @@ type ( ) const ( - // Message limit for a receiving side. - wsReadLimit = 4096 - // Disconnection timeout. wsPongLimit = 60 * time.Second @@ -188,6 +187,7 @@ func New(chain blockchainer.Blockchainer, conf rpc.Config, coreServer *network.S Server: httpServer, chain: chain, config: conf, + wsReadLimit: int64(chain.GetConfig().MaxBlockSize*4)/3 + 1024, // Enough for Base64-encoded content of `submitblock` and `submitp2pnotaryrequest`. network: chain.GetConfig().Magic, stateRootEnabled: chain.GetConfig().StateRootInHeader, coreServer: coreServer, @@ -437,7 +437,7 @@ drainloop: } func (s *Server) handleWsReads(ws *websocket.Conn, resChan chan<- response.AbstractResult, subscr *subscriber) { - ws.SetReadLimit(wsReadLimit) + ws.SetReadLimit(s.wsReadLimit) err := ws.SetReadDeadline(time.Now().Add(wsPongLimit)) ws.SetPongHandler(func(string) error { return ws.SetReadDeadline(time.Now().Add(wsPongLimit)) }) requestloop: