From fc7cdb4244d81e3b8e6ba066ce3daccd61bd68b8 Mon Sep 17 00:00:00 2001 From: Myles Date: Mon, 7 Mar 2016 18:51:18 +0000 Subject: [PATCH] Clear bytes instead of reading them, close streams when done. (May fix a few memory leaks) --- .../java/us/myles/ViaVersion/ConnectionInfo.java | 2 +- .../ViaVersion/handlers/ViaDecodeHandler.java | 4 ++-- .../ViaVersion/handlers/ViaEncodeHandler.java | 10 ++-------- .../transformers/IncomingTransformer.java | 5 +++-- .../transformers/OutgoingTransformer.java | 5 ----- .../java/us/myles/ViaVersion/util/PacketUtil.java | 15 +++++++++++++-- 6 files changed, 21 insertions(+), 20 deletions(-) diff --git a/src/main/java/us/myles/ViaVersion/ConnectionInfo.java b/src/main/java/us/myles/ViaVersion/ConnectionInfo.java index 2e7dbf2b4..35615e1d6 100644 --- a/src/main/java/us/myles/ViaVersion/ConnectionInfo.java +++ b/src/main/java/us/myles/ViaVersion/ConnectionInfo.java @@ -1,7 +1,7 @@ package us.myles.ViaVersion; import io.netty.buffer.ByteBuf; -import io.netty.channel.ChannelHandler; +import io.netty.channel.*; import io.netty.channel.socket.SocketChannel; import org.bukkit.Bukkit; import org.bukkit.entity.Player; diff --git a/src/main/java/us/myles/ViaVersion/handlers/ViaDecodeHandler.java b/src/main/java/us/myles/ViaVersion/handlers/ViaDecodeHandler.java index a599f1883..08466754d 100644 --- a/src/main/java/us/myles/ViaVersion/handlers/ViaDecodeHandler.java +++ b/src/main/java/us/myles/ViaVersion/handlers/ViaDecodeHandler.java @@ -32,10 +32,10 @@ public class ViaDecodeHandler extends ByteToMessageDecoder { ByteBuf newPacket = ctx.alloc().buffer(); try { incomingTransformer.transform(id, bytebuf, newPacket); - bytebuf.readBytes(bytebuf.readableBytes()); + bytebuf.clear(); bytebuf = newPacket; } catch (CancelException e) { - bytebuf.readBytes(bytebuf.readableBytes()); + bytebuf.clear(); throw e; } } diff --git a/src/main/java/us/myles/ViaVersion/handlers/ViaEncodeHandler.java b/src/main/java/us/myles/ViaVersion/handlers/ViaEncodeHandler.java index 5d55251f0..439396ee1 100644 --- a/src/main/java/us/myles/ViaVersion/handlers/ViaEncodeHandler.java +++ b/src/main/java/us/myles/ViaVersion/handlers/ViaEncodeHandler.java @@ -24,7 +24,6 @@ public class ViaEncodeHandler extends MessageToByteEncoder { } - @Override protected void encode(final ChannelHandlerContext ctx, Object o, final ByteBuf bytebuf) throws Exception { // handle the packet type @@ -57,13 +56,8 @@ public class ViaEncodeHandler extends MessageToByteEncoder { } } }; - // Synced allows timings to work properly. -// if (ViaVersion.getInstance().isSyncedChunks()) { -// ((ViaVersionPlugin) ViaVersion.getInstance()).run(chunks, false); -// } else { chunks.run(); -// } - bytebuf.readBytes(bytebuf.readableBytes()); + bytebuf.clear(); throw new CancelException(); } // call minecraft encoder @@ -80,7 +74,7 @@ public class ViaEncodeHandler extends MessageToByteEncoder { try { outgoingTransformer.transform(id, oldPacket, bytebuf); } catch (CancelException e) { - bytebuf.readBytes(bytebuf.readableBytes()); + bytebuf.clear(); throw e; } finally { oldPacket.release(); diff --git a/src/main/java/us/myles/ViaVersion/transformers/IncomingTransformer.java b/src/main/java/us/myles/ViaVersion/transformers/IncomingTransformer.java index 0c4ae36ee..fe39236e3 100644 --- a/src/main/java/us/myles/ViaVersion/transformers/IncomingTransformer.java +++ b/src/main/java/us/myles/ViaVersion/transformers/IncomingTransformer.java @@ -193,7 +193,8 @@ public class IncomingTransformer { ByteBuf in = Unpooled.wrappedBuffer(b); try { ItemSlotRewriter.ItemStack stack = ItemSlotRewriter.readItemStack(in); - stack.id = (short) Material.WRITTEN_BOOK.getId(); + if (stack != null) + stack.id = (short) Material.WRITTEN_BOOK.getId(); // write ItemSlotRewriter.writeItemStack(stack, output); } catch (IOException e) { @@ -234,7 +235,7 @@ public class IncomingTransformer { output.writeLong(position); int face = PacketUtil.readVarInt(input); output.writeByte(face); - int hand = PacketUtil.readVarInt(input); + PacketUtil.readVarInt(input); ItemStack inHand = ViaVersionPlugin.getHandItem(info); try { diff --git a/src/main/java/us/myles/ViaVersion/transformers/OutgoingTransformer.java b/src/main/java/us/myles/ViaVersion/transformers/OutgoingTransformer.java index df1792855..f58c7a6f2 100644 --- a/src/main/java/us/myles/ViaVersion/transformers/OutgoingTransformer.java +++ b/src/main/java/us/myles/ViaVersion/transformers/OutgoingTransformer.java @@ -42,7 +42,6 @@ public class OutgoingTransformer { private final Map uuidMap = new HashMap<>(); private final Map clientEntityTypes = new HashMap<>(); private final Map vehicleMap = new HashMap<>(); - private boolean cancel = false; private boolean autoTeam = false; public OutgoingTransformer(ConnectionInfo info) { @@ -72,10 +71,6 @@ public class OutgoingTransformer { } public void transform(int packetID, ByteBuf input, ByteBuf output) throws CancelException { - if (cancel) { - throw new CancelException(); - } - PacketType packet = PacketType.getOutgoingPacket(info.getState(), packetID); int original = packetID; if (packet == null) { diff --git a/src/main/java/us/myles/ViaVersion/util/PacketUtil.java b/src/main/java/us/myles/ViaVersion/util/PacketUtil.java index d0d66ba9d..a6922814e 100644 --- a/src/main/java/us/myles/ViaVersion/util/PacketUtil.java +++ b/src/main/java/us/myles/ViaVersion/util/PacketUtil.java @@ -48,7 +48,13 @@ public class PacketUtil { return null; } else { input.readerIndex(readerIndex); - return (CompoundTag) NBTIO.readTag(new DataInputStream(new ByteBufInputStream(input))); + ByteBufInputStream bytebufStream = new ByteBufInputStream(input); + DataInputStream dataInputStream = new DataInputStream(bytebufStream); + try { + return (CompoundTag) NBTIO.readTag(dataInputStream); + } finally { + dataInputStream.close(); + } } } @@ -56,7 +62,12 @@ public class PacketUtil { if (tag == null) { output.writeByte(0); } else { - NBTIO.writeTag(new DataOutputStream(new ByteBufOutputStream(output)), tag); + ByteBufOutputStream bytebufStream = new ByteBufOutputStream(output); + DataOutputStream dataOutputStream = new DataOutputStream(bytebufStream); + + NBTIO.writeTag(dataOutputStream, tag); + + dataOutputStream.close(); } }