From b1a72936d0724f51a092121981ea8f2c47cd1d11 Mon Sep 17 00:00:00 2001 From: kciesielski Date: Wed, 27 Mar 2024 00:50:53 +0100 Subject: [PATCH] Correctly read bytes from Netty Frames --- .../netty/internal/WebSocketFrameConverters.scala | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/server/netty-server/src/main/scala/sttp/tapir/server/netty/internal/WebSocketFrameConverters.scala b/server/netty-server/src/main/scala/sttp/tapir/server/netty/internal/WebSocketFrameConverters.scala index 2d5bc06615..e2d866aeac 100644 --- a/server/netty-server/src/main/scala/sttp/tapir/server/netty/internal/WebSocketFrameConverters.scala +++ b/server/netty-server/src/main/scala/sttp/tapir/server/netty/internal/WebSocketFrameConverters.scala @@ -1,19 +1,25 @@ package sttp.tapir.server.netty.internal +import io.netty.buffer.{ByteBuf, Unpooled} import io.netty.handler.codec.http.websocketx._ import io.netty.handler.codec.http.websocketx.{WebSocketFrame => NettyWebSocketFrame} import sttp.ws.WebSocketFrame -import io.netty.buffer.Unpooled object WebSocketFrameConverters { + def getBytes(buf: ByteBuf): Array[Byte] = { + val bytes = new Array[Byte](buf.readableBytes()) + buf.readBytes(bytes) + bytes + } + def nettyFrameToFrame(nettyFrame: NettyWebSocketFrame): WebSocketFrame = { nettyFrame match { case text: TextWebSocketFrame => WebSocketFrame.Text(text.text, text.isFinalFragment, Some(text.rsv)) case close: CloseWebSocketFrame => WebSocketFrame.Close(close.statusCode, close.reasonText) - case ping: PingWebSocketFrame => WebSocketFrame.Ping(ping.content().nioBuffer().array()) - case pong: PongWebSocketFrame => WebSocketFrame.Pong(pong.content().nioBuffer().array()) - case _ => WebSocketFrame.Binary(nettyFrame.content().nioBuffer().array(), nettyFrame.isFinalFragment, Some(nettyFrame.rsv)) + case ping: PingWebSocketFrame => WebSocketFrame.Ping(getBytes(ping.content())) + case pong: PongWebSocketFrame => WebSocketFrame.Pong(getBytes(pong.content())) + case _ => WebSocketFrame.Binary(getBytes(nettyFrame.content()), nettyFrame.isFinalFragment, Some(nettyFrame.rsv)) } }