From da4c0a77fa856feae15b346aa2428714270afccf Mon Sep 17 00:00:00 2001 From: Techcable Date: Tue, 3 May 2016 20:31:52 -0700 Subject: [PATCH] Upgrade to netty 4.1 Don't access a ByteBuf's underlying array with ByteBuf.array() - ByteBuf.array() returns the underlying array storage, and does *not* return a view of the buffer as an array diff --git a/pom.xml b/pom.xml index fda3278..d2f458a 100644 --- a/pom.xml +++ b/pom.xml @@ -76,7 +76,7 @@ unknown - 4.0.33.Final + 4.1.0.CR7 1.8 1.8 diff --git a/protocol/pom.xml b/protocol/pom.xml index 8b462f5..ccee47e 100644 --- a/protocol/pom.xml +++ b/protocol/pom.xml @@ -32,6 +32,12 @@ compile + io.netty + netty-handler + ${netty.version} + compile + + net.sf.trove4j trove4j 3.0.3 diff --git a/protocol/src/main/java/net/md_5/bungee/protocol/packet/PluginMessage.java b/protocol/src/main/java/net/md_5/bungee/protocol/packet/PluginMessage.java index bbaef39..e094932 100644 --- a/protocol/src/main/java/net/md_5/bungee/protocol/packet/PluginMessage.java +++ b/protocol/src/main/java/net/md_5/bungee/protocol/packet/PluginMessage.java @@ -9,6 +9,8 @@ import java.io.DataInputStream; import lombok.AllArgsConstructor; import lombok.Data; import lombok.EqualsAndHashCode; +import io.netty.buffer.ByteBufInputStream; +import io.netty.buffer.ByteBufUtil; import lombok.NoArgsConstructor; import net.md_5.bungee.protocol.AbstractPacketHandler; import net.md_5.bungee.protocol.ProtocolConstants; @@ -20,9 +22,22 @@ import net.md_5.bungee.protocol.ProtocolConstants; public class PluginMessage extends DefinedPacket { + public PluginMessage(String tag, ByteBuf data, boolean allowExtendedPacket) { + this(tag, ByteBufUtil.getBytes(data), allowExtendedPacket); + } + private String tag; private byte[] data; + public void setData(byte[] data) { + this.data = Preconditions.checkNotNull(data, "Null data"); + } + + public void setData(ByteBuf buf) { + Preconditions.checkNotNull(buf, "Null buffer"); + setData(ByteBufUtil.getBytes(buf)); + } + /** * Allow this packet to be sent as an "extended" packet. */ diff --git a/proxy/src/main/java/net/md_5/bungee/ServerConnector.java b/proxy/src/main/java/net/md_5/bungee/ServerConnector.java index 44f0b61..e327325 100644 --- a/proxy/src/main/java/net/md_5/bungee/ServerConnector.java +++ b/proxy/src/main/java/net/md_5/bungee/ServerConnector.java @@ -232,7 +232,7 @@ public class ServerConnector extends PacketHandler ByteBuf brand = ByteBufAllocator.DEFAULT.heapBuffer(); DefinedPacket.writeString( bungee.getName() + " (" + bungee.getVersion() + ")", brand ); - user.unsafe().sendPacket( new PluginMessage( "MC|Brand", brand.array().clone(), handshakeHandler.isServerForge() ) ); + user.unsafe().sendPacket( new PluginMessage( "MC|Brand", brand, handshakeHandler.isServerForge() ) ); brand.release(); } else { diff --git a/proxy/src/main/java/net/md_5/bungee/connection/DownstreamBridge.java b/proxy/src/main/java/net/md_5/bungee/connection/DownstreamBridge.java index 7ba0bcb..fa57f28 100644 --- a/proxy/src/main/java/net/md_5/bungee/connection/DownstreamBridge.java +++ b/proxy/src/main/java/net/md_5/bungee/connection/DownstreamBridge.java @@ -235,7 +235,7 @@ public class DownstreamBridge extends PacketHandler brand.release(); brand = ByteBufAllocator.DEFAULT.heapBuffer(); DefinedPacket.writeString( bungee.getName() + " (" + bungee.getVersion() + ")" + " <- " + serverBrand, brand ); - pluginMessage.setData( brand.array().clone() ); + pluginMessage.setData( brand ); brand.release(); // changes in the packet are ignored so we need to send it manually con.unsafe().sendPacket( pluginMessage ); diff --git a/proxy/src/main/java/net/md_5/bungee/netty/PipelineUtils.java b/proxy/src/main/java/net/md_5/bungee/netty/PipelineUtils.java index f0d0189..aec8251 100644 --- a/proxy/src/main/java/net/md_5/bungee/netty/PipelineUtils.java +++ b/proxy/src/main/java/net/md_5/bungee/netty/PipelineUtils.java @@ -41,9 +41,9 @@ import net.md_5.bungee.protocol.Varint21LengthFieldPrepender; public class PipelineUtils { - public static final AttributeKey LISTENER = new AttributeKey<>( "ListerInfo" ); - public static final AttributeKey USER = new AttributeKey<>( "User" ); - public static final AttributeKey TARGET = new AttributeKey<>( "Target" ); + public static final AttributeKey LISTENER = AttributeKey.newInstance("ListerInfo"); + public static final AttributeKey USER = AttributeKey.newInstance("User"); + public static final AttributeKey TARGET = AttributeKey.newInstance("Target"); public static final ChannelInitializer SERVER_CHILD = new ChannelInitializer() { @Override -- 2.8.3