diff --git a/src/main/kotlin/com/github/creeper123123321/viaaas/CloudCodec.kt b/src/main/kotlin/com/github/creeper123123321/viaaas/CloudCodec.kt index 8e1ef5e..2183bd0 100644 --- a/src/main/kotlin/com/github/creeper123123321/viaaas/CloudCodec.kt +++ b/src/main/kotlin/com/github/creeper123123321/viaaas/CloudCodec.kt @@ -201,17 +201,31 @@ class FrameCodec : ByteToMessageCodec() { class CloudViaCodec(val info: UserConnection) : MessageToMessageCodec() { override fun decode(ctx: ChannelHandlerContext, bytebuf: ByteBuf, out: MutableList) { if (!info.checkIncomingPacket()) throw CancelDecoderException.generate(null) - if (info.shouldTransformPacket()) { - info.transformIncoming(bytebuf, CancelDecoderException::generate) + if (!info.shouldTransformPacket()) { + out.add(bytebuf.retain()) + return + } + val transformedBuf: ByteBuf = ctx.alloc().buffer().writeBytes(bytebuf) + try { + info.transformIncoming(transformedBuf, CancelDecoderException::generate) + out.add(transformedBuf.retain()) + } finally { + transformedBuf.release() } - out.add(bytebuf.retain()) } override fun encode(ctx: ChannelHandlerContext, bytebuf: ByteBuf, out: MutableList) { if (!info.checkOutgoingPacket()) throw CancelEncoderException.generate(null) - if (info.shouldTransformPacket()) { - info.transformOutgoing(bytebuf, CancelEncoderException::generate) + if (!info.shouldTransformPacket()) { + out.add(bytebuf.retain()) + return + } + val transformedBuf: ByteBuf = ctx.alloc().buffer().writeBytes(bytebuf) + try { + info.transformOutgoing(transformedBuf, CancelEncoderException::generate) + out.add(transformedBuf.retain()) + } finally { + transformedBuf.release() } - out.add(bytebuf.retain()) } }