eth, rpc: add configurable option for wsMessageSizeLimit (#27801)
This change adds a configurable limit to websocket message. --------- Co-authored-by: Martin Holst Swende <martin@swende.se>
This commit is contained in:
co-authored by
Martin Holst Swende
parent
c39cbc1a78
commit
705a51e566
+9
-5
@@ -38,7 +38,7 @@ const (
|
||||
wsPingInterval = 30 * time.Second
|
||||
wsPingWriteTimeout = 5 * time.Second
|
||||
wsPongTimeout = 30 * time.Second
|
||||
wsMessageSizeLimit = 32 * 1024 * 1024
|
||||
wsDefaultReadLimit = 32 * 1024 * 1024
|
||||
)
|
||||
|
||||
var wsBufferPool = new(sync.Pool)
|
||||
@@ -60,7 +60,7 @@ func (s *Server) WebsocketHandler(allowedOrigins []string) http.Handler {
|
||||
log.Debug("WebSocket upgrade failed", "err", err)
|
||||
return
|
||||
}
|
||||
codec := newWebsocketCodec(conn, r.Host, r.Header)
|
||||
codec := newWebsocketCodec(conn, r.Host, r.Header, wsDefaultReadLimit)
|
||||
s.ServeCodec(codec, 0)
|
||||
})
|
||||
}
|
||||
@@ -251,7 +251,11 @@ func newClientTransportWS(endpoint string, cfg *clientConfig) (reconnectFunc, er
|
||||
}
|
||||
return nil, hErr
|
||||
}
|
||||
return newWebsocketCodec(conn, dialURL, header), nil
|
||||
messageSizeLimit := int64(wsDefaultReadLimit)
|
||||
if cfg.wsMessageSizeLimit != nil && *cfg.wsMessageSizeLimit >= 0 {
|
||||
messageSizeLimit = *cfg.wsMessageSizeLimit
|
||||
}
|
||||
return newWebsocketCodec(conn, dialURL, header, messageSizeLimit), nil
|
||||
}
|
||||
return connect, nil
|
||||
}
|
||||
@@ -283,8 +287,8 @@ type websocketCodec struct {
|
||||
pongReceived chan struct{}
|
||||
}
|
||||
|
||||
func newWebsocketCodec(conn *websocket.Conn, host string, req http.Header) ServerCodec {
|
||||
conn.SetReadLimit(wsMessageSizeLimit)
|
||||
func newWebsocketCodec(conn *websocket.Conn, host string, req http.Header, readLimit int64) ServerCodec {
|
||||
conn.SetReadLimit(readLimit)
|
||||
encode := func(v interface{}, isErrorResponse bool) error {
|
||||
return conn.WriteJSON(v)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user