From 3051b32d073fbfafa71b597015bd255b2478e247 Mon Sep 17 00:00:00 2001 From: KennyTV Date: Wed, 10 Jun 2020 09:18:25 +0200 Subject: [PATCH] Update codec handlers --- .../viafabric/handler/CommonTransformer.java | 55 ------------------- .../handler/clientside/VRDecodeHandler.java | 31 +++++------ .../handler/clientside/VREncodeHandler.java | 32 +++++------ .../serverside/FabricDecodeHandler.java | 33 +++++------ .../serverside/FabricEncodeHandler.java | 29 +++++----- 5 files changed, 60 insertions(+), 120 deletions(-) diff --git a/src/main/java/com/github/creeper123123321/viafabric/handler/CommonTransformer.java b/src/main/java/com/github/creeper123123321/viafabric/handler/CommonTransformer.java index a70bab8..752d983 100644 --- a/src/main/java/com/github/creeper123123321/viafabric/handler/CommonTransformer.java +++ b/src/main/java/com/github/creeper123123321/viafabric/handler/CommonTransformer.java @@ -24,62 +24,7 @@ package com.github.creeper123123321.viafabric.handler; -import io.netty.buffer.ByteBuf; -import us.myles.ViaVersion.api.PacketWrapper; -import us.myles.ViaVersion.api.data.UserConnection; -import us.myles.ViaVersion.api.type.Type; -import us.myles.ViaVersion.exception.CancelException; -import us.myles.ViaVersion.packets.Direction; -import us.myles.ViaVersion.protocols.base.ProtocolInfo; - -import java.util.function.Function; - -// TODO delete this when https://github.com/ViaVersion/ViaVersion/pull/1505 is merged public class CommonTransformer { public static final String HANDLER_DECODER_NAME = "via-decoder"; public static final String HANDLER_ENCODER_NAME = "via-encoder"; - - public static boolean preServerboundCheck(UserConnection user) { - // Ignore if pending disconnect - if (user.isPendingDisconnect()) return true; - // Increment received + Check PPS - return user.incrementReceived() && user.handlePPS(); - } - - public static void preClientbound(UserConnection user) { - user.incrementSent(); - } - - public static boolean willTransformPacket(UserConnection user) { - return user.isActive(); - } - - public static void transformClientbound(ByteBuf draft, UserConnection user, Function cancelSupplier) throws Exception { - if (!draft.isReadable()) return; - transform(draft, user, Direction.OUTGOING, cancelSupplier); - } - - public static void transformServerbound(ByteBuf draft, UserConnection user, Function cancelSupplier) throws Exception { - if (!draft.isReadable()) return; - transform(draft, user, Direction.INCOMING, cancelSupplier); - } - - private static void transform(ByteBuf draft, UserConnection user, Direction direction, Function cancelSupplier) throws Exception { - int id = Type.VAR_INT.read(draft); - if (id == PacketWrapper.PASSTHROUGH_ID) return; - PacketWrapper wrapper = new PacketWrapper(id, draft, user); - ProtocolInfo protInfo = user.get(ProtocolInfo.class); - try { - protInfo.getPipeline().transform(direction, protInfo.getState(), wrapper); - } catch (CancelException ex) { - throw cancelSupplier.apply(ex); - } - ByteBuf transformed = draft.alloc().buffer(); - try { - wrapper.writeToBuffer(transformed); - draft.clear().writeBytes(transformed); - } finally { - transformed.release(); - } - } } \ No newline at end of file diff --git a/src/main/java/com/github/creeper123123321/viafabric/handler/clientside/VRDecodeHandler.java b/src/main/java/com/github/creeper123123321/viafabric/handler/clientside/VRDecodeHandler.java index b48f7fd..ab6c07f 100644 --- a/src/main/java/com/github/creeper123123321/viafabric/handler/clientside/VRDecodeHandler.java +++ b/src/main/java/com/github/creeper123123321/viafabric/handler/clientside/VRDecodeHandler.java @@ -24,43 +24,42 @@ package com.github.creeper123123321.viafabric.handler.clientside; -import com.github.creeper123123321.viafabric.handler.CommonTransformer; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; import io.netty.handler.codec.MessageToMessageDecoder; -import us.myles.ViaVersion.api.Via; import us.myles.ViaVersion.api.data.UserConnection; -import us.myles.ViaVersion.exception.CancelException; -import us.myles.ViaVersion.util.PipelineUtil; +import us.myles.ViaVersion.exception.CancelCodecException; +import us.myles.ViaVersion.exception.CancelDecoderException; import java.util.List; public class VRDecodeHandler extends MessageToMessageDecoder { - private final UserConnection user; + private final UserConnection info; - public VRDecodeHandler(UserConnection user) { - this.user = user; + public VRDecodeHandler(UserConnection info) { + this.info = info; } @Override - protected void decode(ChannelHandlerContext ctx, ByteBuf msg, List out) throws Exception { - CommonTransformer.preClientbound(user); - if (!CommonTransformer.willTransformPacket(user)) { - out.add(msg.retain()); + protected void decode(ChannelHandlerContext ctx, ByteBuf bytebuf, List out) throws Exception { + info.checkOutgoingPacket(); + if (!info.shouldTransformPacket()) { + out.add(bytebuf.retain()); return; } - ByteBuf draft = msg.alloc().buffer().writeBytes(msg); + + ByteBuf transformedBuf = ctx.alloc().buffer().writeBytes(bytebuf); try { - CommonTransformer.transformClientbound(draft, user, ignored -> CancelException.CACHED); - out.add(draft.retain()); + info.transformOutgoing(transformedBuf, CancelDecoderException::generate); + out.add(transformedBuf.retain()); } finally { - draft.release(); + transformedBuf.release(); } } @Override public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { - if (PipelineUtil.containsCause(cause, CancelException.class)) return; + if (cause instanceof CancelCodecException) return; super.exceptionCaught(ctx, cause); } } diff --git a/src/main/java/com/github/creeper123123321/viafabric/handler/clientside/VREncodeHandler.java b/src/main/java/com/github/creeper123123321/viafabric/handler/clientside/VREncodeHandler.java index 18e6e64..1a5e21c 100644 --- a/src/main/java/com/github/creeper123123321/viafabric/handler/clientside/VREncodeHandler.java +++ b/src/main/java/com/github/creeper123123321/viafabric/handler/clientside/VREncodeHandler.java @@ -24,44 +24,42 @@ package com.github.creeper123123321.viafabric.handler.clientside; -import com.github.creeper123123321.viafabric.handler.CommonTransformer; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; import io.netty.handler.codec.MessageToMessageEncoder; import us.myles.ViaVersion.api.data.UserConnection; -import us.myles.ViaVersion.exception.CancelException; -import us.myles.ViaVersion.util.PipelineUtil; +import us.myles.ViaVersion.exception.CancelCodecException; +import us.myles.ViaVersion.exception.CancelEncoderException; import java.util.List; public class VREncodeHandler extends MessageToMessageEncoder { - private final UserConnection user; + private final UserConnection info; - public VREncodeHandler(UserConnection user) { - this.user = user; + public VREncodeHandler(UserConnection info) { + this.info = info; } @Override - protected void encode(ChannelHandlerContext ctx, ByteBuf msg, List out) throws Exception { - if (CommonTransformer.preServerboundCheck(user)) { - throw CancelException.CACHED; // M2ME expects at least one message - } - if (!CommonTransformer.willTransformPacket(user)) { - out.add(msg.retain()); + protected void encode(ChannelHandlerContext ctx, ByteBuf bytebuf, List out) throws Exception { + if (!info.checkIncomingPacket()) throw CancelEncoderException.generate(null); + if (!info.shouldTransformPacket()) { + out.add(bytebuf.retain()); return; } - ByteBuf draft = ctx.alloc().buffer().writeBytes(msg); + + ByteBuf transformedBuf = ctx.alloc().buffer().writeBytes(bytebuf); try { - CommonTransformer.transformServerbound(draft, user, ignored -> CancelException.CACHED); - out.add(draft.retain()); + info.transformIncoming(transformedBuf, CancelEncoderException::generate); + out.add(transformedBuf.retain()); } finally { - draft.release(); + transformedBuf.release(); } } @Override public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { - if (PipelineUtil.containsCause(cause, CancelException.class)) return; + if (cause instanceof CancelCodecException) return; super.exceptionCaught(ctx, cause); } } diff --git a/src/main/java/com/github/creeper123123321/viafabric/handler/serverside/FabricDecodeHandler.java b/src/main/java/com/github/creeper123123321/viafabric/handler/serverside/FabricDecodeHandler.java index b7eb61f..2a5be0e 100644 --- a/src/main/java/com/github/creeper123123321/viafabric/handler/serverside/FabricDecodeHandler.java +++ b/src/main/java/com/github/creeper123123321/viafabric/handler/serverside/FabricDecodeHandler.java @@ -24,46 +24,43 @@ package com.github.creeper123123321.viafabric.handler.serverside; -import com.github.creeper123123321.viafabric.handler.CommonTransformer; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; import io.netty.handler.codec.MessageToMessageDecoder; -import us.myles.ViaVersion.api.Via; import us.myles.ViaVersion.api.data.UserConnection; -import us.myles.ViaVersion.exception.CancelException; -import us.myles.ViaVersion.protocols.base.ProtocolInfo; +import us.myles.ViaVersion.exception.CancelCodecException; +import us.myles.ViaVersion.exception.CancelDecoderException; import us.myles.ViaVersion.util.PipelineUtil; import java.util.List; public class FabricDecodeHandler extends MessageToMessageDecoder { - private final UserConnection user; + private final UserConnection info; - public FabricDecodeHandler(UserConnection user) { - this.user = user; + public FabricDecodeHandler(UserConnection info) { + this.info = info; } @Override - protected void decode(ChannelHandlerContext ctx, ByteBuf msg, List out) throws Exception { - if (CommonTransformer.preServerboundCheck(user)) { - throw CancelException.CACHED; - } - if (!CommonTransformer.willTransformPacket(user)) { - out.add(msg.retain()); + protected void decode(ChannelHandlerContext ctx, ByteBuf bytebuf, List out) throws Exception { + if (!info.checkIncomingPacket()) throw CancelDecoderException.generate(null); + if (!info.shouldTransformPacket()) { + out.add(bytebuf.retain()); return; } - ByteBuf draft = ctx.alloc().buffer().writeBytes(msg); + + ByteBuf transformedBuf = ctx.alloc().buffer().writeBytes(bytebuf); try { - CommonTransformer.transformServerbound(draft, user, ignored -> CancelException.CACHED); - out.add(draft.retain()); + info.transformIncoming(transformedBuf, CancelDecoderException::generate); + out.add(transformedBuf.retain()); } finally { - draft.release(); + transformedBuf.release(); } } @Override public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { - if (PipelineUtil.containsCause(cause, CancelException.class)) return; + if (PipelineUtil.containsCause(cause, CancelCodecException.class)) return; super.exceptionCaught(ctx, cause); } } \ No newline at end of file diff --git a/src/main/java/com/github/creeper123123321/viafabric/handler/serverside/FabricEncodeHandler.java b/src/main/java/com/github/creeper123123321/viafabric/handler/serverside/FabricEncodeHandler.java index 4811d5c..6064f7a 100644 --- a/src/main/java/com/github/creeper123123321/viafabric/handler/serverside/FabricEncodeHandler.java +++ b/src/main/java/com/github/creeper123123321/viafabric/handler/serverside/FabricEncodeHandler.java @@ -24,42 +24,43 @@ package com.github.creeper123123321.viafabric.handler.serverside; -import com.github.creeper123123321.viafabric.handler.CommonTransformer; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; import io.netty.handler.codec.MessageToMessageEncoder; import us.myles.ViaVersion.api.data.UserConnection; -import us.myles.ViaVersion.exception.CancelException; +import us.myles.ViaVersion.exception.CancelCodecException; +import us.myles.ViaVersion.exception.CancelEncoderException; import us.myles.ViaVersion.util.PipelineUtil; import java.util.List; public class FabricEncodeHandler extends MessageToMessageEncoder { - private final UserConnection user; + private final UserConnection info; - public FabricEncodeHandler(UserConnection user) { - this.user = user; + public FabricEncodeHandler(UserConnection info) { + this.info = info; } @Override - protected void encode(final ChannelHandlerContext ctx, ByteBuf msg, final List out) throws Exception { - CommonTransformer.preClientbound(user); - if (!CommonTransformer.willTransformPacket(user)) { - out.add(msg.readRetainedSlice(msg.readableBytes())); + protected void encode(final ChannelHandlerContext ctx, ByteBuf bytebuf, final List out) throws Exception { + info.checkOutgoingPacket(); + if (!info.shouldTransformPacket()) { + out.add(bytebuf.retain()); return; } - ByteBuf draft = ctx.alloc().buffer().writeBytes(msg); + + ByteBuf transformedBuf = ctx.alloc().buffer().writeBytes(bytebuf); try { - CommonTransformer.transformClientbound(draft, user, ignored -> CancelException.CACHED); - out.add(draft.retain()); + info.transformOutgoing(transformedBuf, CancelEncoderException::generate); + out.add(transformedBuf.retain()); } finally { - draft.release(); + transformedBuf.release(); } } @Override public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { - if (PipelineUtil.containsCause(cause, CancelException.class)) return; + if (PipelineUtil.containsCause(cause, CancelCodecException.class)) return; super.exceptionCaught(ctx, cause); } }