From ba8629ca0eb80b2dbd06f9a7e3ec3f65db43e98a Mon Sep 17 00:00:00 2001 From: Andrew Steinborn Date: Fri, 15 Nov 2019 00:39:11 -0500 Subject: [PATCH 01/44] Try to decode multiple packets at once --- .../netty/MinecraftVarintFrameDecoder.java | 46 +++++++++---------- 1 file changed, 22 insertions(+), 24 deletions(-) diff --git a/proxy/src/main/java/com/velocitypowered/proxy/protocol/netty/MinecraftVarintFrameDecoder.java b/proxy/src/main/java/com/velocitypowered/proxy/protocol/netty/MinecraftVarintFrameDecoder.java index dd1fa5aa1..b003fc48c 100644 --- a/proxy/src/main/java/com/velocitypowered/proxy/protocol/netty/MinecraftVarintFrameDecoder.java +++ b/proxy/src/main/java/com/velocitypowered/proxy/protocol/netty/MinecraftVarintFrameDecoder.java @@ -11,33 +11,31 @@ public class MinecraftVarintFrameDecoder extends ByteToMessageDecoder { @Override protected void decode(ChannelHandlerContext ctx, ByteBuf in, List out) throws Exception { - if (!in.isReadable()) { - return; - } - - int origReaderIndex = in.readerIndex(); - for (int i = 0; i < 3; i++) { - if (!in.isReadable()) { - in.readerIndex(origReaderIndex); - return; - } - - byte read = in.readByte(); - if (read >= 0) { - // Make sure reader index of length buffer is returned to the beginning - in.readerIndex(origReaderIndex); - int packetLength = ProtocolUtils.readVarInt(in); - - if (in.readableBytes() >= packetLength) { - out.add(in.readRetainedSlice(packetLength)); - } else { + read_lens: while (in.isReadable()) { + int origReaderIndex = in.readerIndex(); + for (int i = 0; i < 3; i++) { + if (!in.isReadable()) { in.readerIndex(origReaderIndex); + return; } - return; - } - } + byte read = in.readByte(); + if (read >= 0) { + // Make sure reader index of length buffer is returned to the beginning + in.readerIndex(origReaderIndex); + int packetLength = ProtocolUtils.readVarInt(in); - throw new CorruptedFrameException("VarInt too big"); + if (in.readableBytes() >= packetLength) { + out.add(in.readRetainedSlice(packetLength)); + continue read_lens; + } else { + in.readerIndex(origReaderIndex); + return; + } + } + } + + throw new CorruptedFrameException("VarInt too big"); + } } } From 3eeea8e8f8fbf3b5c324d41f47318d298671cc58 Mon Sep 17 00:00:00 2001 From: Andrew Steinborn Date: Sun, 17 Nov 2019 11:14:56 -0500 Subject: [PATCH 02/44] Add limited flush consolidation, if the remote server supports it. --- .../proxy/connection/MinecraftConnection.java | 7 +++++++ .../proxy/connection/MinecraftSessionHandler.java | 4 ++++ .../connection/backend/BackendPlaySessionHandler.java | 9 +++++++-- 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/proxy/src/main/java/com/velocitypowered/proxy/connection/MinecraftConnection.java b/proxy/src/main/java/com/velocitypowered/proxy/connection/MinecraftConnection.java index c1f15cc19..91d99ceea 100644 --- a/proxy/src/main/java/com/velocitypowered/proxy/connection/MinecraftConnection.java +++ b/proxy/src/main/java/com/velocitypowered/proxy/connection/MinecraftConnection.java @@ -124,6 +124,13 @@ public class MinecraftConnection extends ChannelInboundHandlerAdapter { } } + @Override + public void channelReadComplete(ChannelHandlerContext ctx) throws Exception { + if (sessionHandler != null) { + sessionHandler.readCompleted(); + } + } + @Override public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { if (ctx.channel().isActive()) { diff --git a/proxy/src/main/java/com/velocitypowered/proxy/connection/MinecraftSessionHandler.java b/proxy/src/main/java/com/velocitypowered/proxy/connection/MinecraftSessionHandler.java index 2789e17f9..297e5f884 100644 --- a/proxy/src/main/java/com/velocitypowered/proxy/connection/MinecraftSessionHandler.java +++ b/proxy/src/main/java/com/velocitypowered/proxy/connection/MinecraftSessionHandler.java @@ -70,6 +70,10 @@ public interface MinecraftSessionHandler { } + default void readCompleted() { + + } + default boolean handle(AvailableCommands commands) { return false; } diff --git a/proxy/src/main/java/com/velocitypowered/proxy/connection/backend/BackendPlaySessionHandler.java b/proxy/src/main/java/com/velocitypowered/proxy/connection/backend/BackendPlaySessionHandler.java index ba6678b78..aaa7e3c3a 100644 --- a/proxy/src/main/java/com/velocitypowered/proxy/connection/backend/BackendPlaySessionHandler.java +++ b/proxy/src/main/java/com/velocitypowered/proxy/connection/backend/BackendPlaySessionHandler.java @@ -168,12 +168,17 @@ public class BackendPlaySessionHandler implements MinecraftSessionHandler { if (packet instanceof PluginMessage) { ((PluginMessage) packet).retain(); } - playerConnection.write(packet); + playerConnection.delayedWrite(packet); } @Override public void handleUnknown(ByteBuf buf) { - playerConnection.write(buf.retain()); + playerConnection.delayedWrite(buf.retain()); + } + + @Override + public void readCompleted() { + playerConnection.flush(); } @Override From 8725178d6d33e47f10639b66f5be74d1894032d8 Mon Sep 17 00:00:00 2001 From: Andrew Steinborn Date: Sun, 17 Nov 2019 14:52:12 -0500 Subject: [PATCH 03/44] Flush queued packets to the client in case we can't write --- .../proxy/connection/client/ClientPlaySessionHandler.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/proxy/src/main/java/com/velocitypowered/proxy/connection/client/ClientPlaySessionHandler.java b/proxy/src/main/java/com/velocitypowered/proxy/connection/client/ClientPlaySessionHandler.java index 9b22408b4..5c635b42f 100644 --- a/proxy/src/main/java/com/velocitypowered/proxy/connection/client/ClientPlaySessionHandler.java +++ b/proxy/src/main/java/com/velocitypowered/proxy/connection/client/ClientPlaySessionHandler.java @@ -274,9 +274,15 @@ public class ClientPlaySessionHandler implements MinecraftSessionHandler { @Override public void writabilityChanged() { + boolean writable = player.getConnection().getChannel().isWritable(); + + if (!writable) { + // We might have packets queued for the server, so flush them now to free up memory. + player.getConnection().flush(); + } + VelocityServerConnection serverConn = player.getConnectedServer(); if (serverConn != null) { - boolean writable = player.getConnection().getChannel().isWritable(); MinecraftConnection smc = serverConn.getConnection(); if (smc != null) { smc.setAutoReading(writable); From d137d6ce4690e8aaa0935899f941e45417d7cf3a Mon Sep 17 00:00:00 2001 From: Andrew Steinborn Date: Thu, 28 Nov 2019 15:22:26 -0500 Subject: [PATCH 04/44] Fix command block tab complete on <=1.12.2 --- .../proxy/connection/client/ClientPlaySessionHandler.java | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/proxy/src/main/java/com/velocitypowered/proxy/connection/client/ClientPlaySessionHandler.java b/proxy/src/main/java/com/velocitypowered/proxy/connection/client/ClientPlaySessionHandler.java index 38a426d7a..07ee14678 100644 --- a/proxy/src/main/java/com/velocitypowered/proxy/connection/client/ClientPlaySessionHandler.java +++ b/proxy/src/main/java/com/velocitypowered/proxy/connection/client/ClientPlaySessionHandler.java @@ -423,10 +423,7 @@ public class ClientPlaySessionHandler implements MinecraftSessionHandler { * @param response the tab complete response from the backend */ public void handleTabCompleteResponse(TabCompleteResponse response) { - if (outstandingTabComplete != null) { - if (outstandingTabComplete.isAssumeCommand()) { - return; // used for command blocks which can't run Velocity commands anyway - } + if (outstandingTabComplete != null && !outstandingTabComplete.isAssumeCommand()) { if (outstandingTabComplete.getCommand().startsWith("/")) { this.finishCommandTabComplete(outstandingTabComplete, response); } else { From deede7007037971343cf9f07bc6c145cb338df84 Mon Sep 17 00:00:00 2001 From: Andrew Steinborn Date: Sat, 14 Dec 2019 17:43:42 -0500 Subject: [PATCH 05/44] Rename mystery field in JoinGame --- .../com/velocitypowered/proxy/protocol/packet/JoinGame.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/proxy/src/main/java/com/velocitypowered/proxy/protocol/packet/JoinGame.java b/proxy/src/main/java/com/velocitypowered/proxy/protocol/packet/JoinGame.java index 634fd1c4c..0ab784173 100644 --- a/proxy/src/main/java/com/velocitypowered/proxy/protocol/packet/JoinGame.java +++ b/proxy/src/main/java/com/velocitypowered/proxy/protocol/packet/JoinGame.java @@ -18,7 +18,7 @@ public class JoinGame implements MinecraftPacket { private @Nullable String levelType; private int viewDistance; //1.14+ private boolean reducedDebugInfo; - private boolean mystery; + private boolean showRespawnScreen; public int getEntityId() { return entityId; @@ -130,7 +130,7 @@ public class JoinGame implements MinecraftPacket { this.reducedDebugInfo = buf.readBoolean(); } if (version.compareTo(ProtocolVersion.MINECRAFT_1_15) >= 0) { - this.mystery = buf.readBoolean(); + this.showRespawnScreen = buf.readBoolean(); } } @@ -161,7 +161,7 @@ public class JoinGame implements MinecraftPacket { buf.writeBoolean(reducedDebugInfo); } if (version.compareTo(ProtocolVersion.MINECRAFT_1_15) >= 0) { - buf.writeBoolean(mystery); + buf.writeBoolean(showRespawnScreen); } } From 2073d797716bf30918cca009dfab42e5b81f2e9c Mon Sep 17 00:00:00 2001 From: Andrew Steinborn Date: Tue, 17 Dec 2019 13:57:23 -0500 Subject: [PATCH 06/44] Minecraft 1.15.1 --- .../java/com/velocitypowered/api/network/ProtocolVersion.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/api/src/main/java/com/velocitypowered/api/network/ProtocolVersion.java b/api/src/main/java/com/velocitypowered/api/network/ProtocolVersion.java index af8c4c089..28f729748 100644 --- a/api/src/main/java/com/velocitypowered/api/network/ProtocolVersion.java +++ b/api/src/main/java/com/velocitypowered/api/network/ProtocolVersion.java @@ -34,7 +34,8 @@ public enum ProtocolVersion { MINECRAFT_1_14_2(485, "1.14.2"), MINECRAFT_1_14_3(490, "1.14.3"), MINECRAFT_1_14_4(498, "1.14.4"), - MINECRAFT_1_15(573, "1.15"); + MINECRAFT_1_15(573, "1.15"), + MINECRAFT_1_15_1(575, "1.15.1"); private final int protocol; private final String name; From 08df0807717579f5858f08423d0e821cc43cc08a Mon Sep 17 00:00:00 2001 From: Andrew Steinborn Date: Tue, 31 Dec 2019 21:43:02 -0500 Subject: [PATCH 07/44] Try to diagnose memory leak --- .../netty/MinecraftCipherDecoder.java | 1 - .../netty/MinecraftVarintFrameDecoder.java | 32 +++++-------------- 2 files changed, 8 insertions(+), 25 deletions(-) diff --git a/proxy/src/main/java/com/velocitypowered/proxy/protocol/netty/MinecraftCipherDecoder.java b/proxy/src/main/java/com/velocitypowered/proxy/protocol/netty/MinecraftCipherDecoder.java index ad02191e7..3eca73b4b 100644 --- a/proxy/src/main/java/com/velocitypowered/proxy/protocol/netty/MinecraftCipherDecoder.java +++ b/proxy/src/main/java/com/velocitypowered/proxy/protocol/netty/MinecraftCipherDecoder.java @@ -22,7 +22,6 @@ public class MinecraftCipherDecoder extends MessageToMessageDecoder { try { cipher.process(compatible); out.add(compatible); - in.skipBytes(in.readableBytes()); } catch (Exception e) { compatible.release(); // compatible will never be used if we throw an exception throw e; diff --git a/proxy/src/main/java/com/velocitypowered/proxy/protocol/netty/MinecraftVarintFrameDecoder.java b/proxy/src/main/java/com/velocitypowered/proxy/protocol/netty/MinecraftVarintFrameDecoder.java index b003fc48c..c8fec71a9 100644 --- a/proxy/src/main/java/com/velocitypowered/proxy/protocol/netty/MinecraftVarintFrameDecoder.java +++ b/proxy/src/main/java/com/velocitypowered/proxy/protocol/netty/MinecraftVarintFrameDecoder.java @@ -4,38 +4,22 @@ import com.velocitypowered.proxy.protocol.ProtocolUtils; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; import io.netty.handler.codec.ByteToMessageDecoder; -import io.netty.handler.codec.CorruptedFrameException; import java.util.List; public class MinecraftVarintFrameDecoder extends ByteToMessageDecoder { @Override protected void decode(ChannelHandlerContext ctx, ByteBuf in, List out) throws Exception { - read_lens: while (in.isReadable()) { - int origReaderIndex = in.readerIndex(); - for (int i = 0; i < 3; i++) { - if (!in.isReadable()) { - in.readerIndex(origReaderIndex); - return; - } + while (in.isReadable()) { + int ri = in.readerIndex(); + int packetLength = ProtocolUtils.readVarInt(in); - byte read = in.readByte(); - if (read >= 0) { - // Make sure reader index of length buffer is returned to the beginning - in.readerIndex(origReaderIndex); - int packetLength = ProtocolUtils.readVarInt(in); - - if (in.readableBytes() >= packetLength) { - out.add(in.readRetainedSlice(packetLength)); - continue read_lens; - } else { - in.readerIndex(origReaderIndex); - return; - } - } + if (in.readableBytes() >= packetLength) { + out.add(in.readBytes(packetLength)); + } else { + in.readerIndex(ri); + break; } - - throw new CorruptedFrameException("VarInt too big"); } } } From c14ceb315dae5d623dab8679de3234a7f0f67321 Mon Sep 17 00:00:00 2001 From: Andrew Steinborn Date: Wed, 1 Jan 2020 10:14:15 -0500 Subject: [PATCH 08/44] Return the magic-3 loop again... :( --- .../netty/MinecraftCompressDecoder.java | 1 - .../netty/MinecraftVarintFrameDecoder.java | 32 ++++++++++++++----- 2 files changed, 24 insertions(+), 9 deletions(-) diff --git a/proxy/src/main/java/com/velocitypowered/proxy/protocol/netty/MinecraftCompressDecoder.java b/proxy/src/main/java/com/velocitypowered/proxy/protocol/netty/MinecraftCompressDecoder.java index ebf7f927e..cf68e134b 100644 --- a/proxy/src/main/java/com/velocitypowered/proxy/protocol/netty/MinecraftCompressDecoder.java +++ b/proxy/src/main/java/com/velocitypowered/proxy/protocol/netty/MinecraftCompressDecoder.java @@ -30,7 +30,6 @@ public class MinecraftCompressDecoder extends MessageToMessageDecoder { if (claimedUncompressedSize == 0) { // Strip the now-useless uncompressed size, this message is already uncompressed. out.add(in.retainedSlice()); - in.skipBytes(in.readableBytes()); return; } diff --git a/proxy/src/main/java/com/velocitypowered/proxy/protocol/netty/MinecraftVarintFrameDecoder.java b/proxy/src/main/java/com/velocitypowered/proxy/protocol/netty/MinecraftVarintFrameDecoder.java index c8fec71a9..3adc8ac35 100644 --- a/proxy/src/main/java/com/velocitypowered/proxy/protocol/netty/MinecraftVarintFrameDecoder.java +++ b/proxy/src/main/java/com/velocitypowered/proxy/protocol/netty/MinecraftVarintFrameDecoder.java @@ -4,22 +4,38 @@ import com.velocitypowered.proxy.protocol.ProtocolUtils; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; import io.netty.handler.codec.ByteToMessageDecoder; +import io.netty.handler.codec.CorruptedFrameException; import java.util.List; public class MinecraftVarintFrameDecoder extends ByteToMessageDecoder { @Override protected void decode(ChannelHandlerContext ctx, ByteBuf in, List out) throws Exception { - while (in.isReadable()) { - int ri = in.readerIndex(); - int packetLength = ProtocolUtils.readVarInt(in); + read_lens: while (in.isReadable()) { + int origReaderIndex = in.readerIndex(); + for (int i = 0; i < 3; i++) { + if (!in.isReadable()) { + in.readerIndex(origReaderIndex); + return; + } - if (in.readableBytes() >= packetLength) { - out.add(in.readBytes(packetLength)); - } else { - in.readerIndex(ri); - break; + byte read = in.readByte(); + if (read >= 0) { + // Make sure reader index of length buffer is returned to the beginning + in.readerIndex(origReaderIndex); + int packetLength = ProtocolUtils.readVarInt(in); + + if (in.readableBytes() >= packetLength) { + out.add(in.readBytes(packetLength)); + continue read_lens; + } else { + in.readerIndex(origReaderIndex); + return; + } + } } + + throw new CorruptedFrameException("VarInt too big"); } } } From 92571a65db5ccce552182b49753b9e5087091063 Mon Sep 17 00:00:00 2001 From: Andrew Steinborn Date: Tue, 14 Jan 2020 22:18:05 -0500 Subject: [PATCH 09/44] Another experiment for memory leaks: Create a brand-new buffer for passthrough uncompressed content --- .../proxy/protocol/netty/MinecraftCompressDecoder.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/proxy/src/main/java/com/velocitypowered/proxy/protocol/netty/MinecraftCompressDecoder.java b/proxy/src/main/java/com/velocitypowered/proxy/protocol/netty/MinecraftCompressDecoder.java index cf68e134b..f76e82f95 100644 --- a/proxy/src/main/java/com/velocitypowered/proxy/protocol/netty/MinecraftCompressDecoder.java +++ b/proxy/src/main/java/com/velocitypowered/proxy/protocol/netty/MinecraftCompressDecoder.java @@ -29,7 +29,8 @@ public class MinecraftCompressDecoder extends MessageToMessageDecoder { int claimedUncompressedSize = ProtocolUtils.readVarInt(in); if (claimedUncompressedSize == 0) { // Strip the now-useless uncompressed size, this message is already uncompressed. - out.add(in.retainedSlice()); + out.add(in.copy()); + in.skipBytes(in.readableBytes()); return; } From c3fab89bd7edb696cc2c981110ebec4ff21f129b Mon Sep 17 00:00:00 2001 From: Andrew Steinborn Date: Mon, 20 Jan 2020 17:37:21 -0500 Subject: [PATCH 10/44] Don't attempt to retain the buffer if it goes to a closed connection --- .../proxy/connection/client/ClientPlaySessionHandler.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/proxy/src/main/java/com/velocitypowered/proxy/connection/client/ClientPlaySessionHandler.java b/proxy/src/main/java/com/velocitypowered/proxy/connection/client/ClientPlaySessionHandler.java index 07ee14678..0ab5ce84f 100644 --- a/proxy/src/main/java/com/velocitypowered/proxy/connection/client/ClientPlaySessionHandler.java +++ b/proxy/src/main/java/com/velocitypowered/proxy/connection/client/ClientPlaySessionHandler.java @@ -256,7 +256,7 @@ public class ClientPlaySessionHandler implements MinecraftSessionHandler { } MinecraftConnection smc = serverConnection.getConnection(); - if (smc != null && serverConnection.getPhase().consideredComplete()) { + if (smc != null && !smc.isClosed() && serverConnection.getPhase().consideredComplete()) { smc.write(buf.retain()); } } From be867a8ca97583c14b10b5da2f10fa758c0e70c9 Mon Sep 17 00:00:00 2001 From: Andrew Steinborn Date: Tue, 21 Jan 2020 13:28:01 -0500 Subject: [PATCH 11/44] Minecraft 1.15.2 --- .../java/com/velocitypowered/api/network/ProtocolVersion.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/api/src/main/java/com/velocitypowered/api/network/ProtocolVersion.java b/api/src/main/java/com/velocitypowered/api/network/ProtocolVersion.java index 28f729748..ca4ad3f91 100644 --- a/api/src/main/java/com/velocitypowered/api/network/ProtocolVersion.java +++ b/api/src/main/java/com/velocitypowered/api/network/ProtocolVersion.java @@ -35,7 +35,8 @@ public enum ProtocolVersion { MINECRAFT_1_14_3(490, "1.14.3"), MINECRAFT_1_14_4(498, "1.14.4"), MINECRAFT_1_15(573, "1.15"), - MINECRAFT_1_15_1(575, "1.15.1"); + MINECRAFT_1_15_1(575, "1.15.1"), + MINECRAFT_1_15_2(578, "1.15.2"); private final int protocol; private final String name; From 53c951bc526407ad3180d435181bc8f1ee7dab69 Mon Sep 17 00:00:00 2001 From: Andrew Steinborn Date: Fri, 24 Jan 2020 01:21:50 -0500 Subject: [PATCH 12/44] Revert "Another experiment for memory leaks: Create a brand-new buffer for passthrough uncompressed content" This reverts commit 92571a65db5ccce552182b49753b9e5087091063. It looks like c3fab89bd7edb696cc2c981110ebec4ff21f129b nabbed it at last. --- .../proxy/protocol/netty/MinecraftCompressDecoder.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/proxy/src/main/java/com/velocitypowered/proxy/protocol/netty/MinecraftCompressDecoder.java b/proxy/src/main/java/com/velocitypowered/proxy/protocol/netty/MinecraftCompressDecoder.java index f76e82f95..cf68e134b 100644 --- a/proxy/src/main/java/com/velocitypowered/proxy/protocol/netty/MinecraftCompressDecoder.java +++ b/proxy/src/main/java/com/velocitypowered/proxy/protocol/netty/MinecraftCompressDecoder.java @@ -29,8 +29,7 @@ public class MinecraftCompressDecoder extends MessageToMessageDecoder { int claimedUncompressedSize = ProtocolUtils.readVarInt(in); if (claimedUncompressedSize == 0) { // Strip the now-useless uncompressed size, this message is already uncompressed. - out.add(in.copy()); - in.skipBytes(in.readableBytes()); + out.add(in.retainedSlice()); return; } From 496027f7c1bd01632bf64e178a20ee1999663c3b Mon Sep 17 00:00:00 2001 From: Andrew Steinborn Date: Tue, 18 Feb 2020 01:15:33 -0500 Subject: [PATCH 13/44] Add AMD64-specific compile script --- native/compile-linux-amd64.sh | 21 ++++++++++++++++++ .../resources/linux_x64/velocity-compress.so | Bin 142840 -> 145464 bytes 2 files changed, 21 insertions(+) create mode 100755 native/compile-linux-amd64.sh diff --git a/native/compile-linux-amd64.sh b/native/compile-linux-amd64.sh new file mode 100755 index 000000000..423e4c522 --- /dev/null +++ b/native/compile-linux-amd64.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +if [ ! -d zlib-ng ]; then + echo "Cloning zlib-ng..." + git clone https://github.com/zlib-ng/zlib-ng.git +fi + +echo "Compiling zlib-ng..." +cd zlib-ng +CFLAGS="-fPIC -O3 -mtune=skylake -flto" AR=gcc-ar RANLIB=gcc-ranlib ./configure --zlib-compat --static +make clean && make +cd .. + +# Modify as you need. +MBEDTLS_ROOT=mbedtls +CFLAGS="-O3 -I$JAVA_HOME/include/ -I$JAVA_HOME/include/linux/ -fPIC -shared -mtune=skylake -flto" +gcc $CFLAGS -Izlib-ng src/main/c/jni_util.c src/main/c/jni_zlib_deflate.c src/main/c/jni_zlib_inflate.c \ + src/main/c/jni_zlib_common.c zlib-ng/libz.a -o src/main/resources/linux_x64/velocity-compress.so +gcc $CFLAGS -I $MBEDTLS_ROOT/include -shared $MBEDTLS_ROOT/library/aes.c $MBEDTLS_ROOT/library/aesni.c \ + $MBEDTLS_ROOT/library/platform.c $MBEDTLS_ROOT/library/platform_util.c src/main/c/jni_util.c src/main/c/jni_cipher.c \ + -o src/main/resources/linux_x64/velocity-cipher.so diff --git a/native/src/main/resources/linux_x64/velocity-compress.so b/native/src/main/resources/linux_x64/velocity-compress.so index d4ec11d7041faf79dd4811286ea562f4fe1e6746..acd8b87638f4d3a438593283f3f8dfea8d934002 100755 GIT binary patch literal 145464 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 XyA+1rbQ!7sjOpz9qlQ%&mL>i_Z0Zl3 From b3ac73a51ea63e72fce20dbd82d2067cbc96333c Mon Sep 17 00:00:00 2001 From: Andrew Steinborn Date: Tue, 18 Feb 2020 01:34:39 -0500 Subject: [PATCH 14/44] Use Cloudflare zlib for more aggressive optimizations --- .gitignore | 1 + native/compile-linux-amd64.sh | 20 +++++++++--------- .../resources/linux_x64/velocity-compress.so | Bin 145464 -> 90928 bytes 3 files changed, 11 insertions(+), 10 deletions(-) diff --git a/.gitignore b/.gitignore index 74b81462f..29577f5bb 100644 --- a/.gitignore +++ b/.gitignore @@ -89,3 +89,4 @@ plugins/ ### Natives stuff ### native/mbedtls native/zlib-ng +native/zlib-cf diff --git a/native/compile-linux-amd64.sh b/native/compile-linux-amd64.sh index 423e4c522..4ff948486 100755 --- a/native/compile-linux-amd64.sh +++ b/native/compile-linux-amd64.sh @@ -1,21 +1,21 @@ #!/bin/bash -if [ ! -d zlib-ng ]; then - echo "Cloning zlib-ng..." - git clone https://github.com/zlib-ng/zlib-ng.git +if [ ! -d zlib-cf ]; then + echo "Cloning Cloudflare zlib..." + git clone -b gcc.amd64 https://github.com/cloudflare/zlib.git zlib-cf fi -echo "Compiling zlib-ng..." -cd zlib-ng -CFLAGS="-fPIC -O3 -mtune=skylake -flto" AR=gcc-ar RANLIB=gcc-ranlib ./configure --zlib-compat --static -make clean && make -cd .. +#echo "Compiling Cloudflare zlib..." +#cd zlib-cf +#CFLAGS="-fPIC -O3 -mtune=skylake -flto" AR=gcc-ar RANLIB=gcc-ranlib ./configure --static +#make clean && make +#cd .. # Modify as you need. MBEDTLS_ROOT=mbedtls CFLAGS="-O3 -I$JAVA_HOME/include/ -I$JAVA_HOME/include/linux/ -fPIC -shared -mtune=skylake -flto" -gcc $CFLAGS -Izlib-ng src/main/c/jni_util.c src/main/c/jni_zlib_deflate.c src/main/c/jni_zlib_inflate.c \ - src/main/c/jni_zlib_common.c zlib-ng/libz.a -o src/main/resources/linux_x64/velocity-compress.so +gcc $CFLAGS -Izlib-cf src/main/c/jni_util.c src/main/c/jni_zlib_deflate.c src/main/c/jni_zlib_inflate.c \ + src/main/c/jni_zlib_common.c zlib-cf/libz.a -Wl,-z,noexecstack -o src/main/resources/linux_x64/velocity-compress.so gcc $CFLAGS -I $MBEDTLS_ROOT/include -shared $MBEDTLS_ROOT/library/aes.c $MBEDTLS_ROOT/library/aesni.c \ $MBEDTLS_ROOT/library/platform.c $MBEDTLS_ROOT/library/platform_util.c src/main/c/jni_util.c src/main/c/jni_cipher.c \ -o src/main/resources/linux_x64/velocity-cipher.so diff --git a/native/src/main/resources/linux_x64/velocity-compress.so b/native/src/main/resources/linux_x64/velocity-compress.so index acd8b87638f4d3a438593283f3f8dfea8d934002..8ee06c34be008d84854981da0fc05046eb890597 100755 GIT binary patch literal 90928 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 Date: Tue, 18 Feb 2020 01:35:54 -0500 Subject: [PATCH 15/44] Uncomment compile lines from script --- native/compile-linux-amd64.sh | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/native/compile-linux-amd64.sh b/native/compile-linux-amd64.sh index 4ff948486..0a3002493 100755 --- a/native/compile-linux-amd64.sh +++ b/native/compile-linux-amd64.sh @@ -5,11 +5,11 @@ if [ ! -d zlib-cf ]; then git clone -b gcc.amd64 https://github.com/cloudflare/zlib.git zlib-cf fi -#echo "Compiling Cloudflare zlib..." -#cd zlib-cf -#CFLAGS="-fPIC -O3 -mtune=skylake -flto" AR=gcc-ar RANLIB=gcc-ranlib ./configure --static -#make clean && make -#cd .. +echo "Compiling Cloudflare zlib..." +cd zlib-cf +CFLAGS="-fPIC -O3 -mtune=skylake -flto" AR=gcc-ar RANLIB=gcc-ranlib ./configure --static +make clean && make +cd .. # Modify as you need. MBEDTLS_ROOT=mbedtls From 29bedf0943a47d71a5131017aa527e9589d9504e Mon Sep 17 00:00:00 2001 From: Andrew Steinborn Date: Fri, 28 Feb 2020 16:54:25 -0500 Subject: [PATCH 16/44] Do not trim the args for string-based command APIs --- .../proxy/command/VelocityCommandManager.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/proxy/src/main/java/com/velocitypowered/proxy/command/VelocityCommandManager.java b/proxy/src/main/java/com/velocitypowered/proxy/command/VelocityCommandManager.java index 0195645ea..4b85bdef6 100644 --- a/proxy/src/main/java/com/velocitypowered/proxy/command/VelocityCommandManager.java +++ b/proxy/src/main/java/com/velocitypowered/proxy/command/VelocityCommandManager.java @@ -57,7 +57,7 @@ public class VelocityCommandManager implements CommandManager { int firstSpace = cmdLine.indexOf(' '); if (firstSpace != -1) { alias = cmdLine.substring(0, firstSpace); - args = cmdLine.substring(firstSpace).trim(); + args = cmdLine.substring(firstSpace); } RawCommand command = commands.get(alias.toLowerCase(Locale.ENGLISH)); if (command == null) { @@ -107,7 +107,7 @@ public class VelocityCommandManager implements CommandManager { } String alias = cmdLine.substring(0, firstSpace); - String args = cmdLine.substring(firstSpace).trim(); + String args = cmdLine.substring(firstSpace); RawCommand command = commands.get(alias.toLowerCase(Locale.ENGLISH)); if (command == null) { // No such command, so we can't offer any tab complete suggestions. @@ -167,7 +167,7 @@ public class VelocityCommandManager implements CommandManager { if (line.isEmpty()) { return new String[0]; } - return line.split(" ", -1); + return line.trim().split(" ", -1); } @Override From f49d36b719787eb8ef0c1ccb0433f4e150bfa677 Mon Sep 17 00:00:00 2001 From: Andrew Steinborn Date: Sun, 12 Apr 2020 17:05:36 -0400 Subject: [PATCH 17/44] Close one last "proxy crasher" loophole --- .../proxy/connection/MinecraftConnection.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/proxy/src/main/java/com/velocitypowered/proxy/connection/MinecraftConnection.java b/proxy/src/main/java/com/velocitypowered/proxy/connection/MinecraftConnection.java index 8d2e4c895..dc1151fe8 100644 --- a/proxy/src/main/java/com/velocitypowered/proxy/connection/MinecraftConnection.java +++ b/proxy/src/main/java/com/velocitypowered/proxy/connection/MinecraftConnection.java @@ -152,7 +152,7 @@ public class MinecraftConnection extends ChannelInboundHandlerAdapter { } } - ctx.pipeline().addBefore(MINECRAFT_DECODER, "discard", DiscardHandler.HANDLER); + installDiscardHandler(ctx); ctx.close(); } } @@ -168,6 +168,14 @@ public class MinecraftConnection extends ChannelInboundHandlerAdapter { Preconditions.checkState(this.channel.eventLoop().inEventLoop(), "Not in event loop"); } + private void installDiscardHandler(ChannelHandlerContext ctx) { + ctx.pipeline().addBefore(MINECRAFT_DECODER, "discard", DiscardHandler.HANDLER); + } + + private void installDiscardHandler() { + channel.pipeline().addBefore(MINECRAFT_DECODER, "discard", DiscardHandler.HANDLER); + } + public EventLoop eventLoop() { return channel.eventLoop(); } @@ -208,6 +216,7 @@ public class MinecraftConnection extends ChannelInboundHandlerAdapter { public void closeWith(Object msg) { if (channel.isActive()) { knownDisconnect = true; + installDiscardHandler(); channel.writeAndFlush(msg).addListener(ChannelFutureListener.CLOSE); } } @@ -217,6 +226,7 @@ public class MinecraftConnection extends ChannelInboundHandlerAdapter { */ public void close() { if (channel.isActive()) { + installDiscardHandler(); channel.close(); } } From aae151e3d945a4d57fa62cd238a50fef344b3a69 Mon Sep 17 00:00:00 2001 From: Andrew Steinborn Date: Sun, 12 Apr 2020 17:20:38 -0400 Subject: [PATCH 18/44] No need to register multiple times --- .../proxy/connection/MinecraftConnection.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/proxy/src/main/java/com/velocitypowered/proxy/connection/MinecraftConnection.java b/proxy/src/main/java/com/velocitypowered/proxy/connection/MinecraftConnection.java index dc1151fe8..84ceaeb75 100644 --- a/proxy/src/main/java/com/velocitypowered/proxy/connection/MinecraftConnection.java +++ b/proxy/src/main/java/com/velocitypowered/proxy/connection/MinecraftConnection.java @@ -169,11 +169,15 @@ public class MinecraftConnection extends ChannelInboundHandlerAdapter { } private void installDiscardHandler(ChannelHandlerContext ctx) { - ctx.pipeline().addBefore(MINECRAFT_DECODER, "discard", DiscardHandler.HANDLER); + if (ctx.pipeline().get("discard") == null) { + ctx.pipeline().addBefore(MINECRAFT_DECODER, "discard", DiscardHandler.HANDLER); + } } private void installDiscardHandler() { - channel.pipeline().addBefore(MINECRAFT_DECODER, "discard", DiscardHandler.HANDLER); + if (channel.pipeline().get("discard") == null) { + channel.pipeline().addBefore(MINECRAFT_DECODER, "discard", DiscardHandler.HANDLER); + } } public EventLoop eventLoop() { From 413578f9793cadf0595d000828be347ce4443935 Mon Sep 17 00:00:00 2001 From: Andrew Steinborn Date: Sun, 19 Apr 2020 03:39:15 -0400 Subject: [PATCH 19/44] Fix rare race condition with transitioning If the player unexpectedly disconnects after ServerConnectEvent is fired, but before the connection transitions to the new player, Velocity would throw an exception thinking the connection was not present. This is the correct behavior, but the behavior is very surprising. Instead we will double-check to ensure the connection has not been lost before we continue with transitioning to the new server. --- .../proxy/connection/backend/TransitionSessionHandler.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/proxy/src/main/java/com/velocitypowered/proxy/connection/backend/TransitionSessionHandler.java b/proxy/src/main/java/com/velocitypowered/proxy/connection/backend/TransitionSessionHandler.java index c5eb9d8d6..119e03785 100644 --- a/proxy/src/main/java/com/velocitypowered/proxy/connection/backend/TransitionSessionHandler.java +++ b/proxy/src/main/java/com/velocitypowered/proxy/connection/backend/TransitionSessionHandler.java @@ -83,6 +83,13 @@ public class TransitionSessionHandler implements MinecraftSessionHandler { .fire(new ServerConnectedEvent(serverConn.getPlayer(), serverConn.getServer(), existingConnection != null ? existingConnection.getServer() : null)) .whenCompleteAsync((x, error) -> { + // Make sure we can still transition (player might have disconnected here). + if (!serverConn.isActive()) { + // Connection is obsolete. + serverConn.disconnect(); + return; + } + // Strap on the ClientPlaySessionHandler if required. ClientPlaySessionHandler playHandler; if (serverConn.getPlayer().getConnection().getSessionHandler() From 20eb14143dec6e7a3eba05f5bf90a262f57e91fa Mon Sep 17 00:00:00 2001 From: Andrew Steinborn Date: Wed, 22 Apr 2020 10:27:08 -0400 Subject: [PATCH 20/44] Bump Netty to 4.1.49.Final This is intended to fix netty/netty#10165 directly, and supersede our current workaround. --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 2e57eb060..d3d19cdc9 100644 --- a/build.gradle +++ b/build.gradle @@ -24,7 +24,7 @@ allprojects { junitVersion = '5.3.0-M1' slf4jVersion = '1.7.25' log4jVersion = '2.11.2' - nettyVersion = '4.1.43.Final' + nettyVersion = '4.1.49.Final' guavaVersion = '25.1-jre' checkerFrameworkVersion = '2.7.0' configurateVersion = '3.6' From 1441dec3675ee2498285d70fbf28d16060f50ac0 Mon Sep 17 00:00:00 2001 From: Andrew Steinborn Date: Thu, 23 Apr 2020 16:19:49 -0400 Subject: [PATCH 21/44] Implement brigadier:long argument type, fixes #295 --- api/build.gradle | 1 + proxy/build.gradle | 2 +- .../brigadier/ArgumentPropertyRegistry.java | 3 ++ .../packet/brigadier/DummyProperty.java | 10 ++--- .../LongArgumentPropertySerializer.java | 40 +++++++++++++++++++ 5 files changed, 50 insertions(+), 6 deletions(-) create mode 100644 proxy/src/main/java/com/velocitypowered/proxy/protocol/packet/brigadier/LongArgumentPropertySerializer.java diff --git a/api/build.gradle b/api/build.gradle index edf3dc198..b156d61fc 100644 --- a/api/build.gradle +++ b/api/build.gradle @@ -63,6 +63,7 @@ artifacts { javadoc { options.encoding = 'UTF-8' options.charSet = 'UTF-8' + options.source = '8' options.links( 'http://www.slf4j.org/apidocs/', 'https://google.github.io/guava/releases/25.1-jre/api/docs/', diff --git a/proxy/build.gradle b/proxy/build.gradle index 216e58cc8..5498db10b 100644 --- a/proxy/build.gradle +++ b/proxy/build.gradle @@ -65,7 +65,7 @@ dependencies { compile 'it.unimi.dsi:fastutil:8.2.3' compile 'net.kyori:event-method-asm:3.0.0' - compile 'com.mojang:brigadier:1.0.15' + compile 'com.mojang:brigadier:1.0.17' compile 'org.asynchttpclient:async-http-client:2.10.4' diff --git a/proxy/src/main/java/com/velocitypowered/proxy/protocol/packet/brigadier/ArgumentPropertyRegistry.java b/proxy/src/main/java/com/velocitypowered/proxy/protocol/packet/brigadier/ArgumentPropertyRegistry.java index 9560a8b29..e7847ec8e 100644 --- a/proxy/src/main/java/com/velocitypowered/proxy/protocol/packet/brigadier/ArgumentPropertyRegistry.java +++ b/proxy/src/main/java/com/velocitypowered/proxy/protocol/packet/brigadier/ArgumentPropertyRegistry.java @@ -4,6 +4,7 @@ import static com.velocitypowered.proxy.protocol.packet.brigadier.DoubleArgument import static com.velocitypowered.proxy.protocol.packet.brigadier.DummyVoidArgumentPropertySerializer.DUMMY; import static com.velocitypowered.proxy.protocol.packet.brigadier.FloatArgumentPropertySerializer.FLOAT; import static com.velocitypowered.proxy.protocol.packet.brigadier.IntegerArgumentPropertySerializer.INTEGER; +import static com.velocitypowered.proxy.protocol.packet.brigadier.LongArgumentPropertySerializer.LONG; import static com.velocitypowered.proxy.protocol.packet.brigadier.StringArgumentPropertySerializer.STRING; import com.mojang.brigadier.arguments.ArgumentType; @@ -11,6 +12,7 @@ import com.mojang.brigadier.arguments.BoolArgumentType; import com.mojang.brigadier.arguments.DoubleArgumentType; import com.mojang.brigadier.arguments.FloatArgumentType; import com.mojang.brigadier.arguments.IntegerArgumentType; +import com.mojang.brigadier.arguments.LongArgumentType; import com.mojang.brigadier.arguments.StringArgumentType; import com.velocitypowered.proxy.protocol.ProtocolUtils; import io.netty.buffer.ByteBuf; @@ -90,6 +92,7 @@ public class ArgumentPropertyRegistry { register("brigadier:double", DoubleArgumentType.class, DOUBLE); register("brigadier:bool", BoolArgumentType.class, VoidArgumentPropertySerializer.create(BoolArgumentType::bool)); + register("brigadier:long", LongArgumentType.class, LONG); // Minecraft argument types with extra properties dummy("minecraft:entity", ByteArgumentPropertySerializer.BYTE); diff --git a/proxy/src/main/java/com/velocitypowered/proxy/protocol/packet/brigadier/DummyProperty.java b/proxy/src/main/java/com/velocitypowered/proxy/protocol/packet/brigadier/DummyProperty.java index 762b52686..9b514f903 100644 --- a/proxy/src/main/java/com/velocitypowered/proxy/protocol/packet/brigadier/DummyProperty.java +++ b/proxy/src/main/java/com/velocitypowered/proxy/protocol/packet/brigadier/DummyProperty.java @@ -17,11 +17,6 @@ class DummyProperty implements ArgumentType { this.result = result; } - @Override - public T parse(StringReader reader) throws CommandSyntaxException { - throw new UnsupportedOperationException(); - } - public String getIdentifier() { return identifier; } @@ -33,4 +28,9 @@ class DummyProperty implements ArgumentType { public @Nullable T getResult() { return result; } + + @Override + public T parse(StringReader reader) { + throw new UnsupportedOperationException(); + } } diff --git a/proxy/src/main/java/com/velocitypowered/proxy/protocol/packet/brigadier/LongArgumentPropertySerializer.java b/proxy/src/main/java/com/velocitypowered/proxy/protocol/packet/brigadier/LongArgumentPropertySerializer.java new file mode 100644 index 000000000..9d3b40b6d --- /dev/null +++ b/proxy/src/main/java/com/velocitypowered/proxy/protocol/packet/brigadier/LongArgumentPropertySerializer.java @@ -0,0 +1,40 @@ +package com.velocitypowered.proxy.protocol.packet.brigadier; + +import static com.velocitypowered.proxy.protocol.packet.brigadier.IntegerArgumentPropertySerializer.HAS_MAXIMUM; +import static com.velocitypowered.proxy.protocol.packet.brigadier.IntegerArgumentPropertySerializer.HAS_MINIMUM; +import static com.velocitypowered.proxy.protocol.packet.brigadier.IntegerArgumentPropertySerializer.getFlags; + +import com.mojang.brigadier.arguments.LongArgumentType; +import io.netty.buffer.ByteBuf; + +class LongArgumentPropertySerializer implements ArgumentPropertySerializer { + + static final LongArgumentPropertySerializer LONG = new LongArgumentPropertySerializer(); + + private LongArgumentPropertySerializer() { + + } + + @Override + public LongArgumentType deserialize(ByteBuf buf) { + byte flags = buf.readByte(); + long minimum = (flags & HAS_MINIMUM) != 0 ? buf.readLong() : Long.MIN_VALUE; + long maximum = (flags & HAS_MAXIMUM) != 0 ? buf.readLong() : Long.MAX_VALUE; + return LongArgumentType.longArg(minimum, maximum); + } + + @Override + public void serialize(LongArgumentType object, ByteBuf buf) { + boolean hasMinimum = object.getMinimum() != Long.MIN_VALUE; + boolean hasMaximum = object.getMaximum() != Long.MAX_VALUE; + byte flag = getFlags(hasMinimum, hasMaximum); + + buf.writeByte(flag); + if (hasMinimum) { + buf.writeLong(object.getMinimum()); + } + if (hasMaximum) { + buf.writeLong(object.getMaximum()); + } + } +} From 4d62d61485c23391ef776f3d5264aa96627db252 Mon Sep 17 00:00:00 2001 From: Andrew Steinborn Date: Fri, 8 May 2020 14:03:30 -0400 Subject: [PATCH 22/44] We're well into 2020, just saying. --- .../java/com/velocitypowered/proxy/command/VelocityCommand.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/proxy/src/main/java/com/velocitypowered/proxy/command/VelocityCommand.java b/proxy/src/main/java/com/velocitypowered/proxy/command/VelocityCommand.java index 1c3b777c3..ec245152e 100644 --- a/proxy/src/main/java/com/velocitypowered/proxy/command/VelocityCommand.java +++ b/proxy/src/main/java/com/velocitypowered/proxy/command/VelocityCommand.java @@ -166,7 +166,7 @@ public class VelocityCommand implements Command { .append(TextComponent.of(version.getVersion()).decoration(TextDecoration.BOLD, false)) .build(); TextComponent copyright = TextComponent - .of("Copyright 2018-2019 " + version.getVendor() + ". " + version.getName() + .of("Copyright 2018-2020 " + version.getVendor() + ". " + version.getName() + " is freely licensed under the terms of the MIT License."); source.sendMessage(velocity); source.sendMessage(copyright); From b42045c050c48a8b3c8541bdb8756b381f38e95b Mon Sep 17 00:00:00 2001 From: Andrew Steinborn Date: Fri, 8 May 2020 18:16:14 -0400 Subject: [PATCH 23/44] Reject invalid tab complete command requests. --- .../proxy/protocol/packet/TabCompleteRequest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/proxy/src/main/java/com/velocitypowered/proxy/protocol/packet/TabCompleteRequest.java b/proxy/src/main/java/com/velocitypowered/proxy/protocol/packet/TabCompleteRequest.java index e382861fe..5db35433c 100644 --- a/proxy/src/main/java/com/velocitypowered/proxy/protocol/packet/TabCompleteRequest.java +++ b/proxy/src/main/java/com/velocitypowered/proxy/protocol/packet/TabCompleteRequest.java @@ -78,9 +78,9 @@ public class TabCompleteRequest implements MinecraftPacket { public void decode(ByteBuf buf, ProtocolUtils.Direction direction, ProtocolVersion version) { if (version.compareTo(MINECRAFT_1_13) >= 0) { this.transactionId = ProtocolUtils.readVarInt(buf); - this.command = ProtocolUtils.readString(buf); + this.command = ProtocolUtils.readString(buf, Chat.MAX_SERVERBOUND_MESSAGE_LENGTH); } else { - this.command = ProtocolUtils.readString(buf); + this.command = ProtocolUtils.readString(buf, Chat.MAX_SERVERBOUND_MESSAGE_LENGTH); if (version.compareTo(MINECRAFT_1_9) >= 0) { this.assumeCommand = buf.readBoolean(); } From 742b8d98cb8ae807ebd7d47b55d67818078b188c Mon Sep 17 00:00:00 2001 From: Andrew Steinborn Date: Wed, 20 May 2020 04:55:55 -0400 Subject: [PATCH 24/44] Fix noexecstack for natives. --- native/compile-linux-amd64.sh | 6 +++--- .../resources/linux_x64/velocity-compress.so | Bin 90928 -> 91024 bytes 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/native/compile-linux-amd64.sh b/native/compile-linux-amd64.sh index 0a3002493..135fcb539 100755 --- a/native/compile-linux-amd64.sh +++ b/native/compile-linux-amd64.sh @@ -7,15 +7,15 @@ fi echo "Compiling Cloudflare zlib..." cd zlib-cf -CFLAGS="-fPIC -O3 -mtune=skylake -flto" AR=gcc-ar RANLIB=gcc-ranlib ./configure --static +CFLAGS="-fPIC -O3 -flto" AR=gcc-ar RANLIB=gcc-ranlib ./configure --static make clean && make cd .. # Modify as you need. MBEDTLS_ROOT=mbedtls -CFLAGS="-O3 -I$JAVA_HOME/include/ -I$JAVA_HOME/include/linux/ -fPIC -shared -mtune=skylake -flto" +CFLAGS="-O3 -I$JAVA_HOME/include/ -I$JAVA_HOME/include/linux/ -fPIC -shared -Wl,-z,noexecstack" gcc $CFLAGS -Izlib-cf src/main/c/jni_util.c src/main/c/jni_zlib_deflate.c src/main/c/jni_zlib_inflate.c \ src/main/c/jni_zlib_common.c zlib-cf/libz.a -Wl,-z,noexecstack -o src/main/resources/linux_x64/velocity-compress.so -gcc $CFLAGS -I $MBEDTLS_ROOT/include -shared $MBEDTLS_ROOT/library/aes.c $MBEDTLS_ROOT/library/aesni.c \ +gcc $CFLAGS -I $MBEDTLS_ROOT/include -shared $MBEDTLS_ROOT/library/aes.c $MBEDTLS_ROOT/library/aesni.c \ $MBEDTLS_ROOT/library/platform.c $MBEDTLS_ROOT/library/platform_util.c src/main/c/jni_util.c src/main/c/jni_cipher.c \ -o src/main/resources/linux_x64/velocity-cipher.so diff --git a/native/src/main/resources/linux_x64/velocity-compress.so b/native/src/main/resources/linux_x64/velocity-compress.so index 8ee06c34be008d84854981da0fc05046eb890597..c05574805d02c4cade49c3d73799199a2690b475 100755 GIT binary patch literal 91024 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 Date: Sun, 24 May 2020 10:56:26 -0400 Subject: [PATCH 25/44] Switch out Cloudflare zlib for libdeflate. libdeflate is significantly faster than vanilla zlib, zlib-ng, and Cloudflare zlib. It is also MIT-licensed (so no licensing concerns). In addition, it simplifies a lot of the native code (something that's been tricky to get right). While we're at it, I have also taken the time to fine-time compression in Velocity in general. Thanks to this work, native compression only requires one JNI call, an improvement from the more than 2 (sometimes up to 5) that were possible before. This optimization also extends to the existing Java compressors, though they require potentially two JNI calls. --- .gitignore | 1 + native/compile-linux-amd64.sh | 21 ---- native/compile-linux.sh | 23 ++--- native/src/main/c/jni_zlib_common.c | 29 ------ native/src/main/c/jni_zlib_common.h | 6 -- native/src/main/c/jni_zlib_deflate.c | 88 ++-------------- native/src/main/c/jni_zlib_inflate.c | 94 +++++------------- .../compression/Java11VelocityCompressor.java | 5 +- .../compression/JavaVelocityCompressor.java | 7 +- .../LibdeflateVelocityCompressor.java | 87 ++++++++++++++++ .../compression/NativeVelocityCompressor.java | 89 ----------------- .../compression/NativeZlibDeflate.java | 13 +-- .../compression/NativeZlibInflate.java | 17 +--- .../compression/VelocityCompressor.java | 6 +- .../velocitypowered/natives/util/Natives.java | 9 +- .../resources/linux_x64/velocity-compress.so | Bin 91024 -> 48584 bytes .../compression/VelocityCompressorTest.java | 3 +- .../netty/MinecraftCompressDecoder.java | 17 ++-- .../netty/MinecraftCompressEncoder.java | 7 +- 19 files changed, 173 insertions(+), 349 deletions(-) delete mode 100755 native/compile-linux-amd64.sh delete mode 100644 native/src/main/c/jni_zlib_common.c delete mode 100644 native/src/main/c/jni_zlib_common.h create mode 100644 native/src/main/java/com/velocitypowered/natives/compression/LibdeflateVelocityCompressor.java delete mode 100644 native/src/main/java/com/velocitypowered/natives/compression/NativeVelocityCompressor.java diff --git a/.gitignore b/.gitignore index 29577f5bb..1cf6c5d69 100644 --- a/.gitignore +++ b/.gitignore @@ -90,3 +90,4 @@ plugins/ native/mbedtls native/zlib-ng native/zlib-cf +native/libdeflate diff --git a/native/compile-linux-amd64.sh b/native/compile-linux-amd64.sh deleted file mode 100755 index 135fcb539..000000000 --- a/native/compile-linux-amd64.sh +++ /dev/null @@ -1,21 +0,0 @@ -#!/bin/bash - -if [ ! -d zlib-cf ]; then - echo "Cloning Cloudflare zlib..." - git clone -b gcc.amd64 https://github.com/cloudflare/zlib.git zlib-cf -fi - -echo "Compiling Cloudflare zlib..." -cd zlib-cf -CFLAGS="-fPIC -O3 -flto" AR=gcc-ar RANLIB=gcc-ranlib ./configure --static -make clean && make -cd .. - -# Modify as you need. -MBEDTLS_ROOT=mbedtls -CFLAGS="-O3 -I$JAVA_HOME/include/ -I$JAVA_HOME/include/linux/ -fPIC -shared -Wl,-z,noexecstack" -gcc $CFLAGS -Izlib-cf src/main/c/jni_util.c src/main/c/jni_zlib_deflate.c src/main/c/jni_zlib_inflate.c \ - src/main/c/jni_zlib_common.c zlib-cf/libz.a -Wl,-z,noexecstack -o src/main/resources/linux_x64/velocity-compress.so -gcc $CFLAGS -I $MBEDTLS_ROOT/include -shared $MBEDTLS_ROOT/library/aes.c $MBEDTLS_ROOT/library/aesni.c \ - $MBEDTLS_ROOT/library/platform.c $MBEDTLS_ROOT/library/platform_util.c src/main/c/jni_util.c src/main/c/jni_cipher.c \ - -o src/main/resources/linux_x64/velocity-cipher.so diff --git a/native/compile-linux.sh b/native/compile-linux.sh index 4b759df20..78072b00b 100755 --- a/native/compile-linux.sh +++ b/native/compile-linux.sh @@ -1,21 +1,20 @@ #!/bin/bash -if [ ! -d zlib-ng ]; then - echo "Cloning zlib-ng..." - git clone https://github.com/zlib-ng/zlib-ng.git +if [ ! -d libdeflate ]; then + echo "Cloning libdeflate..." + git clone https://github.com/ebiggers/libdeflate.git fi -echo "Compiling zlib-ng..." -cd zlib-ng -CFLAGS="-fPIC -O3" ./configure --zlib-compat --static -make clean && make +echo "Compiling libdeflate..." +cd libdeflate || exit +make cd .. # Modify as you need. MBEDTLS_ROOT=mbedtls -CFLAGS="-O3 -I$JAVA_HOME/include/ -I$JAVA_HOME/include/linux/ -fPIC -shared" -gcc $CFLAGS -Izlib-ng src/main/c/jni_util.c src/main/c/jni_zlib_deflate.c src/main/c/jni_zlib_inflate.c \ - src/main/c/jni_zlib_common.c zlib-ng/libz.a -o src/main/resources/linux_x64/velocity-compress.so -gcc $CFLAGS -I $MBEDTLS_ROOT/include -shared $MBEDTLS_ROOT/library/aes.c $MBEDTLS_ROOT/library/aesni.c \ +CFLAGS="-O3 -I$JAVA_HOME/include/ -I$JAVA_HOME/include/linux/ -fPIC -shared -Wl,-z,noexecstack" +gcc $CFLAGS -Ilibdeflate src/main/c/jni_util.c src/main/c/jni_zlib_deflate.c src/main/c/jni_zlib_inflate.c \ + libdeflate/libdeflate.a -o src/main/resources/linux_x64/velocity-compress.so +gcc $CFLAGS -I $MBEDTLS_ROOT/include -shared $MBEDTLS_ROOT/library/aes.c $MBEDTLS_ROOT/library/aesni.c \ $MBEDTLS_ROOT/library/platform.c $MBEDTLS_ROOT/library/platform_util.c src/main/c/jni_util.c src/main/c/jni_cipher.c \ - -o src/main/resources/linux_x64/velocity-cipher.so \ No newline at end of file + -o src/main/resources/linux_x64/velocity-cipher.so diff --git a/native/src/main/c/jni_zlib_common.c b/native/src/main/c/jni_zlib_common.c deleted file mode 100644 index fa5a0cbab..000000000 --- a/native/src/main/c/jni_zlib_common.c +++ /dev/null @@ -1,29 +0,0 @@ -#include -#include -#include -#include -#include "jni_util.h" - -void JNICALL -check_zlib_free(JNIEnv *env, z_stream *stream, bool deflate) -{ - int ret = deflate ? deflateEnd(stream) : inflateEnd(stream); - const char *msg = stream->msg; - free((void*) stream); - - switch (ret) { - case Z_OK: - break; - case Z_STREAM_ERROR: - if (msg == NULL) { - msg = "stream state inconsistent"; - } - // fall-through - case Z_DATA_ERROR: - if (msg == NULL) { - msg = "data was discarded"; - } - throwException(env, "java/lang/IllegalArgumentException", msg); - break; - } -} \ No newline at end of file diff --git a/native/src/main/c/jni_zlib_common.h b/native/src/main/c/jni_zlib_common.h deleted file mode 100644 index ff4bc9a80..000000000 --- a/native/src/main/c/jni_zlib_common.h +++ /dev/null @@ -1,6 +0,0 @@ -#include -#include -#include - -void JNICALL -check_zlib_free(JNIEnv *env, z_stream *stream, bool deflate); \ No newline at end of file diff --git a/native/src/main/c/jni_zlib_deflate.c b/native/src/main/c/jni_zlib_deflate.c index 6e05f7cae..7a84a5b04 100644 --- a/native/src/main/c/jni_zlib_deflate.c +++ b/native/src/main/c/jni_zlib_deflate.c @@ -2,56 +2,21 @@ #include #include #include -#include +#include #include "jni_util.h" -#include "jni_zlib_common.h" - -static jfieldID finishedID; -static jfieldID consumedID; - -JNIEXPORT void JNICALL -Java_com_velocitypowered_natives_compression_NativeZlibDeflate_initIDs(JNIEnv *env, jclass cls) -{ - finishedID = (*env)->GetFieldID(env, cls, "finished", "Z"); - consumedID = (*env)->GetFieldID(env, cls, "consumed", "I"); -} JNIEXPORT jlong JNICALL Java_com_velocitypowered_natives_compression_NativeZlibDeflate_init(JNIEnv *env, jobject obj, jint level) { - z_stream* stream = calloc(1, sizeof(z_stream)); - - if (stream == 0) { + struct libdeflate_compressor *compressor = libdeflate_alloc_compressor(level); + if (compressor == NULL) { // Out of memory! - throwException(env, "java/lang/OutOfMemoryError", "zlib allocate stream"); - return 0; - } - - int ret = deflateInit(stream, level); - if (ret == Z_OK) { - return (jlong) stream; - } else { - const char *zlib_msg = stream->msg; - free(stream); - switch (ret) { - case Z_MEM_ERROR: - throwException(env, "java/lang/OutOfMemoryError", "zlib init"); - break; - case Z_STREAM_ERROR: { - // Thanks Ken and Ritchie! - char message[32]; - snprintf(message, 32, "invalid level %d", level); - throwException(env, "java/lang/IllegalArgumentException", message); - break; - } - default: - throwException(env, "java/util/zip/DataFormatException", zlib_msg); - break; - } + throwException(env, "java/lang/OutOfMemoryError", "libdeflate allocate compressor"); return 0; } + return (jlong) compressor; } JNIEXPORT void JNICALL @@ -59,11 +24,10 @@ Java_com_velocitypowered_natives_compression_NativeZlibDeflate_free(JNIEnv *env, jobject obj, jlong ctx) { - z_stream* stream = (z_stream*) ctx; - check_zlib_free(env, stream, true); + libdeflate_free_compressor((struct libdeflate_compressor *) ctx); } -JNIEXPORT int JNICALL +JNIEXPORT jboolean JNICALL Java_com_velocitypowered_natives_compression_NativeZlibDeflate_process(JNIEnv *env, jobject obj, jlong ctx, @@ -73,38 +37,8 @@ Java_com_velocitypowered_natives_compression_NativeZlibDeflate_process(JNIEnv *e jint destinationLength, jboolean finish) { - z_stream* stream = (z_stream*) ctx; - stream->next_in = (Bytef *) sourceAddress; - stream->next_out = (Bytef *) destinationAddress; - stream->avail_in = sourceLength; - stream->avail_out = destinationLength; - - int res = deflate(stream, finish ? Z_FINISH : Z_NO_FLUSH); - switch (res) { - case Z_STREAM_END: - // The stream has ended. - (*env)->SetBooleanField(env, obj, finishedID, JNI_TRUE); - // fall-through - case Z_OK: - // Not yet completed, but progress has been made. Tell Java how many bytes we've processed. - (*env)->SetIntField(env, obj, consumedID, sourceLength - stream->avail_in); - return destinationLength - stream->avail_out; - case Z_BUF_ERROR: - // This is not fatal. Just say we need more data. Usually this applies to the next_out buffer, - // which NativeVelocityCompressor will notice and will expand the buffer. - return 0; - default: - throwException(env, "java/util/zip/DataFormatException", stream->msg); - return 0; - } -} - -JNIEXPORT void JNICALL -Java_com_velocitypowered_natives_compression_NativeZlibDeflate_reset(JNIEnv *env, - jobject obj, - jlong ctx) -{ - z_stream* stream = (z_stream*) ctx; - int ret = deflateReset(stream); - assert(ret == Z_OK); + struct libdeflate_compressor *compressor = (struct libdeflate_compressor *) ctx; + size_t produced = libdeflate_zlib_compress(compressor, (void *) sourceAddress, sourceLength, + (void *) destinationAddress, destinationLength); + return (jlong) produced; } \ No newline at end of file diff --git a/native/src/main/c/jni_zlib_inflate.c b/native/src/main/c/jni_zlib_inflate.c index 64804e160..9a81f0db8 100644 --- a/native/src/main/c/jni_zlib_inflate.c +++ b/native/src/main/c/jni_zlib_inflate.c @@ -2,50 +2,21 @@ #include #include #include -#include +#include #include "jni_util.h" -#include "jni_zlib_common.h" - -static jfieldID finishedID; -static jfieldID consumedID; - -JNIEXPORT void JNICALL -Java_com_velocitypowered_natives_compression_NativeZlibInflate_initIDs(JNIEnv *env, jclass cls) -{ - finishedID = (*env)->GetFieldID(env, cls, "finished", "Z"); - consumedID = (*env)->GetFieldID(env, cls, "consumed", "I"); -} JNIEXPORT jlong JNICALL Java_com_velocitypowered_natives_compression_NativeZlibInflate_init(JNIEnv *env, jobject obj) { - z_stream* stream = calloc(1, sizeof(z_stream)); - - if (stream == 0) { + struct libdeflate_decompressor *decompress = libdeflate_alloc_decompressor(); + if (decompress == NULL) { // Out of memory! - throwException(env, "java/lang/OutOfMemoryError", "zlib allocate stream"); + throwException(env, "java/lang/OutOfMemoryError", "libdeflate allocate decompressor"); return 0; } - int ret = inflateInit(stream); - if (ret == Z_OK) { - return (jlong) stream; - } else { - const char *zlib_msg = stream->msg; - free(stream); - switch (ret) { - case Z_MEM_ERROR: - throwException(env, "java/lang/OutOfMemoryError", "zlib init"); - return 0; - case Z_STREAM_ERROR: - throwException(env, "java/lang/IllegalArgumentException", "stream clobbered?"); - return 0; - default: - throwException(env, "java/util/zip/DataFormatException", zlib_msg); - return 0; - } - } + return (jlong) decompress; } JNIEXPORT void JNICALL @@ -53,51 +24,34 @@ Java_com_velocitypowered_natives_compression_NativeZlibInflate_free(JNIEnv *env, jobject obj, jlong ctx) { - z_stream* stream = (z_stream*) ctx; - check_zlib_free(env, stream, false); + libdeflate_free_decompressor((struct libdeflate_decompressor *) ctx); } -JNIEXPORT int JNICALL +JNIEXPORT jboolean JNICALL Java_com_velocitypowered_natives_compression_NativeZlibInflate_process(JNIEnv *env, jobject obj, jlong ctx, jlong sourceAddress, jint sourceLength, jlong destinationAddress, - jint destinationLength) + jint destinationLength, + jlong maximumSize) { - z_stream* stream = (z_stream*) ctx; - stream->next_in = (Bytef *) sourceAddress; - stream->next_out = (Bytef *) destinationAddress; - stream->avail_in = sourceLength; - stream->avail_out = destinationLength; + struct libdeflate_decompressor *decompress = (struct libdeflate_decompressor *) ctx; + enum libdeflate_result result = libdeflate_zlib_decompress(decompress, (void *) sourceAddress, + sourceLength, (void *) destinationAddress, destinationLength, NULL); - int res = inflate(stream, Z_PARTIAL_FLUSH); - switch (res) { - case Z_STREAM_END: - // The stream has ended - (*env)->SetBooleanField(env, obj, finishedID, JNI_TRUE); - // fall-through - case Z_OK: - // Not yet completed, but progress has been made. Tell Java how many bytes we've processed. - (*env)->SetIntField(env, obj, consumedID, sourceLength - stream->avail_in); - return destinationLength - stream->avail_out; - case Z_BUF_ERROR: - // This is not fatal. Just say we need more data. Usually this applies to the next_out buffer, - // which NativeVelocityCompressor will notice and will expand the buffer. - return 0; - default: - throwException(env, "java/util/zip/DataFormatException", stream->msg); - return 0; + switch (result) { + case LIBDEFLATE_SUCCESS: + // We are happy + return JNI_TRUE; + case LIBDEFLATE_BAD_DATA: + throwException(env, "java/util/zip/DataFormatException", "inflate data is bad"); + return JNI_FALSE; + case LIBDEFLATE_SHORT_OUTPUT: + case LIBDEFLATE_INSUFFICIENT_SPACE: + // These cases are the same for us. We expect the full uncompressed size to be known. + throwException(env, "java/util/zip/DataFormatException", "uncompressed size is inaccurate"); + return JNI_FALSE; } -} - -JNIEXPORT void JNICALL -Java_com_velocitypowered_natives_compression_NativeZlibInflate_reset(JNIEnv *env, - jobject obj, - jlong ctx) -{ - z_stream* stream = (z_stream*) ctx; - int ret = inflateReset(stream); - assert(ret == Z_OK); } \ No newline at end of file diff --git a/native/src/main/java/com/velocitypowered/natives/compression/Java11VelocityCompressor.java b/native/src/main/java/com/velocitypowered/natives/compression/Java11VelocityCompressor.java index 999d12caa..bc6206242 100644 --- a/native/src/main/java/com/velocitypowered/natives/compression/Java11VelocityCompressor.java +++ b/native/src/main/java/com/velocitypowered/natives/compression/Java11VelocityCompressor.java @@ -54,7 +54,8 @@ public class Java11VelocityCompressor implements VelocityCompressor { } @Override - public void inflate(ByteBuf source, ByteBuf destination, int max) throws DataFormatException { + public void inflate(ByteBuf source, ByteBuf destination, int uncompressedSize) + throws DataFormatException { ensureNotDisposed(); // We (probably) can't nicely deal with >=1 buffer nicely, so let's scream loudly. @@ -67,7 +68,7 @@ public class Java11VelocityCompressor implements VelocityCompressor { while (!inflater.finished() && inflater.getBytesRead() < source.readableBytes()) { if (!destination.isWritable()) { - ensureMaxSize(destination, max); + ensureMaxSize(destination, uncompressedSize); destination.ensureWritable(ZLIB_BUFFER_SIZE); } diff --git a/native/src/main/java/com/velocitypowered/natives/compression/JavaVelocityCompressor.java b/native/src/main/java/com/velocitypowered/natives/compression/JavaVelocityCompressor.java index 6293dd770..f2e557d1c 100644 --- a/native/src/main/java/com/velocitypowered/natives/compression/JavaVelocityCompressor.java +++ b/native/src/main/java/com/velocitypowered/natives/compression/JavaVelocityCompressor.java @@ -25,20 +25,21 @@ public class JavaVelocityCompressor implements VelocityCompressor { } @Override - public void inflate(ByteBuf source, ByteBuf destination, int max) throws DataFormatException { + public void inflate(ByteBuf source, ByteBuf destination, int uncompressedSize) + throws DataFormatException { ensureNotDisposed(); final int available = source.readableBytes(); this.setInflaterInput(source); if (destination.hasArray()) { - this.inflateDestinationIsHeap(destination, available, max); + this.inflateDestinationIsHeap(destination, available, uncompressedSize); } else { if (buf.length == 0) { buf = new byte[ZLIB_BUFFER_SIZE]; } while (!inflater.finished() && inflater.getBytesRead() < available) { - ensureMaxSize(destination, max); + ensureMaxSize(destination, uncompressedSize); int read = inflater.inflate(buf); destination.writeBytes(buf, 0, read); } diff --git a/native/src/main/java/com/velocitypowered/natives/compression/LibdeflateVelocityCompressor.java b/native/src/main/java/com/velocitypowered/natives/compression/LibdeflateVelocityCompressor.java new file mode 100644 index 000000000..73e9ff7fc --- /dev/null +++ b/native/src/main/java/com/velocitypowered/natives/compression/LibdeflateVelocityCompressor.java @@ -0,0 +1,87 @@ +package com.velocitypowered.natives.compression; + +import com.google.common.base.Preconditions; +import com.velocitypowered.natives.util.BufferPreference; +import io.netty.buffer.ByteBuf; +import java.util.zip.DataFormatException; + +public class LibdeflateVelocityCompressor implements VelocityCompressor { + + public static final VelocityCompressorFactory FACTORY = LibdeflateVelocityCompressor::new; + + private final NativeZlibInflate inflate = new NativeZlibInflate(); + private final long inflateCtx; + private final NativeZlibDeflate deflate = new NativeZlibDeflate(); + private final long deflateCtx; + private boolean disposed = false; + + private LibdeflateVelocityCompressor(int level) { + int correctedLevel = level == -1 ? 6 : level; + if (correctedLevel > 12 || correctedLevel < 1) { + throw new IllegalArgumentException("Invalid compression level " + level); + } + + this.inflateCtx = inflate.init(); + this.deflateCtx = deflate.init(level == -1 ? 6 : level); + } + + @Override + public void inflate(ByteBuf source, ByteBuf destination, int uncompressedSize) + throws DataFormatException { + ensureNotDisposed(); + source.memoryAddress(); + destination.memoryAddress(); + + // libdeflate recommends we work with a known uncompressed size - so we work strictly within + // those parameters. If the uncompressed size doesn't match the compressed size, then we will + // throw an exception from native code. + destination.ensureWritable(uncompressedSize); + + long sourceAddress = source.memoryAddress() + source.readerIndex(); + long destinationAddress = destination.memoryAddress() + destination.writerIndex(); + + inflate.process(inflateCtx, sourceAddress, source.readableBytes(), destinationAddress, + uncompressedSize); + destination.writerIndex(destination.writerIndex() + uncompressedSize); + } + + @Override + public void deflate(ByteBuf source, ByteBuf destination) throws DataFormatException { + ensureNotDisposed(); + source.memoryAddress(); + destination.memoryAddress(); + + while (true) { + long sourceAddress = source.memoryAddress() + source.readerIndex(); + long destinationAddress = destination.memoryAddress() + destination.writerIndex(); + + int produced = deflate.process(deflateCtx, sourceAddress, source.readableBytes(), + destinationAddress, destination.writableBytes()); + if (produced > 0) { + destination.writerIndex(destination.writerIndex() + produced); + return; + } + + // Insufficient room - enlarge the buffer. + destination.capacity(destination.capacity() * 2); + } + } + + private void ensureNotDisposed() { + Preconditions.checkState(!disposed, "Object already disposed"); + } + + @Override + public void dispose() { + if (!disposed) { + inflate.free(inflateCtx); + deflate.free(deflateCtx); + } + disposed = true; + } + + @Override + public BufferPreference preferredBufferType() { + return BufferPreference.DIRECT_REQUIRED; + } +} diff --git a/native/src/main/java/com/velocitypowered/natives/compression/NativeVelocityCompressor.java b/native/src/main/java/com/velocitypowered/natives/compression/NativeVelocityCompressor.java deleted file mode 100644 index b932579ae..000000000 --- a/native/src/main/java/com/velocitypowered/natives/compression/NativeVelocityCompressor.java +++ /dev/null @@ -1,89 +0,0 @@ -package com.velocitypowered.natives.compression; - -import static com.velocitypowered.natives.compression.CompressorUtils.ZLIB_BUFFER_SIZE; -import static com.velocitypowered.natives.compression.CompressorUtils.ensureMaxSize; - -import com.google.common.base.Preconditions; -import com.velocitypowered.natives.util.BufferPreference; -import io.netty.buffer.ByteBuf; -import java.util.zip.DataFormatException; - -public class NativeVelocityCompressor implements VelocityCompressor { - - public static final VelocityCompressorFactory FACTORY = NativeVelocityCompressor::new; - - private final NativeZlibInflate inflate = new NativeZlibInflate(); - private final long inflateCtx; - private final NativeZlibDeflate deflate = new NativeZlibDeflate(); - private final long deflateCtx; - private boolean disposed = false; - - private NativeVelocityCompressor(int level) { - this.inflateCtx = inflate.init(); - this.deflateCtx = deflate.init(level); - } - - @Override - public void inflate(ByteBuf source, ByteBuf destination, int max) throws DataFormatException { - ensureNotDisposed(); - source.memoryAddress(); - destination.memoryAddress(); - - while (!inflate.finished && source.isReadable()) { - if (!destination.isWritable()) { - ensureMaxSize(destination, max); - destination.ensureWritable(ZLIB_BUFFER_SIZE); - } - int produced = inflate.process(inflateCtx, source.memoryAddress() + source.readerIndex(), - source.readableBytes(), destination.memoryAddress() + destination.writerIndex(), - destination.writableBytes()); - source.readerIndex(source.readerIndex() + inflate.consumed); - destination.writerIndex(destination.writerIndex() + produced); - } - - inflate.reset(inflateCtx); - inflate.consumed = 0; - inflate.finished = false; - } - - @Override - public void deflate(ByteBuf source, ByteBuf destination) throws DataFormatException { - ensureNotDisposed(); - source.memoryAddress(); - destination.memoryAddress(); - - while (!deflate.finished) { - if (!destination.isWritable()) { - destination.ensureWritable(ZLIB_BUFFER_SIZE); - } - int produced = deflate.process(deflateCtx, source.memoryAddress() + source.readerIndex(), - source.readableBytes(), - destination.memoryAddress() + destination.writerIndex(), destination.writableBytes(), - true); - source.readerIndex(source.readerIndex() + deflate.consumed); - destination.writerIndex(destination.writerIndex() + produced); - } - - deflate.reset(deflateCtx); - deflate.consumed = 0; - deflate.finished = false; - } - - private void ensureNotDisposed() { - Preconditions.checkState(!disposed, "Object already disposed"); - } - - @Override - public void dispose() { - if (!disposed) { - inflate.free(inflateCtx); - deflate.free(deflateCtx); - } - disposed = true; - } - - @Override - public BufferPreference preferredBufferType() { - return BufferPreference.DIRECT_REQUIRED; - } -} diff --git a/native/src/main/java/com/velocitypowered/natives/compression/NativeZlibDeflate.java b/native/src/main/java/com/velocitypowered/natives/compression/NativeZlibDeflate.java index 1114cab49..eb89412cb 100644 --- a/native/src/main/java/com/velocitypowered/natives/compression/NativeZlibDeflate.java +++ b/native/src/main/java/com/velocitypowered/natives/compression/NativeZlibDeflate.java @@ -5,21 +5,10 @@ package com.velocitypowered.natives.compression; */ class NativeZlibDeflate { - boolean finished; - int consumed; - native long init(int level); native long free(long ctx); native int process(long ctx, long sourceAddress, int sourceLength, long destinationAddress, - int destinationLength, boolean finish); - - native void reset(long ctx); - - static { - initIDs(); - } - - private static native void initIDs(); + int destinationLength); } diff --git a/native/src/main/java/com/velocitypowered/natives/compression/NativeZlibInflate.java b/native/src/main/java/com/velocitypowered/natives/compression/NativeZlibInflate.java index 7eabd9a05..fc6e9787f 100644 --- a/native/src/main/java/com/velocitypowered/natives/compression/NativeZlibInflate.java +++ b/native/src/main/java/com/velocitypowered/natives/compression/NativeZlibInflate.java @@ -1,25 +1,16 @@ package com.velocitypowered.natives.compression; +import java.util.zip.DataFormatException; + /** * Represents a native interface for zlib's inflate functions. */ class NativeZlibInflate { - boolean finished; - int consumed; - native long init(); native long free(long ctx); - native int process(long ctx, long sourceAddress, int sourceLength, long destinationAddress, - int destinationLength); - - native void reset(long ctx); - - static { - initIDs(); - } - - private static native void initIDs(); + native boolean process(long ctx, long sourceAddress, int sourceLength, long destinationAddress, + int destinationLength) throws DataFormatException; } diff --git a/native/src/main/java/com/velocitypowered/natives/compression/VelocityCompressor.java b/native/src/main/java/com/velocitypowered/natives/compression/VelocityCompressor.java index 839b64569..09cad102c 100644 --- a/native/src/main/java/com/velocitypowered/natives/compression/VelocityCompressor.java +++ b/native/src/main/java/com/velocitypowered/natives/compression/VelocityCompressor.java @@ -6,10 +6,12 @@ import io.netty.buffer.ByteBuf; import java.util.zip.DataFormatException; /** - * Provides an interface to inflate and deflate {@link ByteBuf}s using zlib. + * Provides an interface to inflate and deflate {@link ByteBuf}s using zlib or a compatible + * implementation. */ public interface VelocityCompressor extends Disposable, Native { - void inflate(ByteBuf source, ByteBuf destination, int max) throws DataFormatException; + void inflate(ByteBuf source, ByteBuf destination, int uncompressedSize) + throws DataFormatException; void deflate(ByteBuf source, ByteBuf destination) throws DataFormatException; } diff --git a/native/src/main/java/com/velocitypowered/natives/util/Natives.java b/native/src/main/java/com/velocitypowered/natives/util/Natives.java index e63c87c20..ea71c75ce 100644 --- a/native/src/main/java/com/velocitypowered/natives/util/Natives.java +++ b/native/src/main/java/com/velocitypowered/natives/util/Natives.java @@ -4,7 +4,7 @@ import com.google.common.collect.ImmutableList; import com.velocitypowered.natives.NativeSetupException; import com.velocitypowered.natives.compression.Java11VelocityCompressor; import com.velocitypowered.natives.compression.JavaVelocityCompressor; -import com.velocitypowered.natives.compression.NativeVelocityCompressor; +import com.velocitypowered.natives.compression.LibdeflateVelocityCompressor; import com.velocitypowered.natives.compression.VelocityCompressorFactory; import com.velocitypowered.natives.encryption.JavaVelocityCipher; import com.velocitypowered.natives.encryption.NativeVelocityCipher; @@ -64,10 +64,11 @@ public class Natives { ImmutableList.of( new NativeCodeLoader.Variant<>(NativeConstraints.MACOS, copyAndLoadNative("/macosx/velocity-compress.dylib"), "native (macOS)", - NativeVelocityCompressor.FACTORY), + LibdeflateVelocityCompressor.FACTORY), new NativeCodeLoader.Variant<>(NativeConstraints.LINUX, - copyAndLoadNative("/linux_x64/velocity-compress.so"), "native (Linux amd64)", - NativeVelocityCompressor.FACTORY), + copyAndLoadNative("/linux_x64/velocity-compress.so"), + "libdeflate (Linux amd64)", + LibdeflateVelocityCompressor.FACTORY), new NativeCodeLoader.Variant<>(NativeConstraints.JAVA_11, () -> { }, "Java 11", () -> Java11VelocityCompressor.FACTORY), new NativeCodeLoader.Variant<>(NativeCodeLoader.ALWAYS, () -> { diff --git a/native/src/main/resources/linux_x64/velocity-compress.so b/native/src/main/resources/linux_x64/velocity-compress.so index c05574805d02c4cade49c3d73799199a2690b475..d72a66bfd2d7f84c71b3263f9a4af3535874f58a 100755 GIT binary patch literal 48584 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 literal 91024 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 { - private static final int SOFT_MAXIMUM_UNCOMPRESSED_SIZE = 2 * 1024 * 1024; // 2MiB + private static final int VANILLA_MAXIMUM_UNCOMPRESSED_SIZE = 2 * 1024 * 1024; // 2MiB private static final int HARD_MAXIMUM_UNCOMPRESSED_SIZE = 16 * 1024 * 1024; // 16MiB + private static final int UNCOMPRESSED_CAP = + Boolean.getBoolean("velocity.increased-compression-cap") + ? HARD_MAXIMUM_UNCOMPRESSED_SIZE : VANILLA_MAXIMUM_UNCOMPRESSED_SIZE; + private final int threshold; private final VelocityCompressor compressor; @@ -28,20 +32,21 @@ public class MinecraftCompressDecoder extends MessageToMessageDecoder { protected void decode(ChannelHandlerContext ctx, ByteBuf in, List out) throws Exception { int claimedUncompressedSize = ProtocolUtils.readVarInt(in); if (claimedUncompressedSize == 0) { - // Strip the now-useless uncompressed size, this message is already uncompressed. + // This message is not compressed. out.add(in.retainedSlice()); return; } checkFrame(claimedUncompressedSize >= threshold, "Uncompressed size %s is less than" + " threshold %s", claimedUncompressedSize, threshold); - int allowedMax = Math.min(claimedUncompressedSize, HARD_MAXIMUM_UNCOMPRESSED_SIZE); - int initialCapacity = Math.min(claimedUncompressedSize, SOFT_MAXIMUM_UNCOMPRESSED_SIZE); + checkFrame(claimedUncompressedSize <= UNCOMPRESSED_CAP, + "Uncompressed size %s exceeds hard threshold of %s", claimedUncompressedSize, + UNCOMPRESSED_CAP); ByteBuf compatibleIn = ensureCompatible(ctx.alloc(), compressor, in); - ByteBuf uncompressed = preferredBuffer(ctx.alloc(), compressor, initialCapacity); + ByteBuf uncompressed = preferredBuffer(ctx.alloc(), compressor, claimedUncompressedSize); try { - compressor.inflate(compatibleIn, uncompressed, allowedMax); + compressor.inflate(compatibleIn, uncompressed, claimedUncompressedSize); out.add(uncompressed); } catch (Exception e) { uncompressed.release(); diff --git a/proxy/src/main/java/com/velocitypowered/proxy/protocol/netty/MinecraftCompressEncoder.java b/proxy/src/main/java/com/velocitypowered/proxy/protocol/netty/MinecraftCompressEncoder.java index 0c9105e92..c36bfd8a3 100644 --- a/proxy/src/main/java/com/velocitypowered/proxy/protocol/netty/MinecraftCompressEncoder.java +++ b/proxy/src/main/java/com/velocitypowered/proxy/protocol/netty/MinecraftCompressEncoder.java @@ -38,8 +38,11 @@ public class MinecraftCompressEncoder extends MessageToByteEncoder { @Override protected ByteBuf allocateBuffer(ChannelHandlerContext ctx, ByteBuf msg, boolean preferDirect) throws Exception { - int initialBufferSize = msg.readableBytes() <= threshold ? msg.readableBytes() + 1 : - msg.readableBytes() / 3; + // Follow the advice of https://github.com/ebiggers/libdeflate/blob/master/libdeflate.h#L103 + // here for compression. The maximum buffer size if the data compresses well (which is almost + // always the case) is one less the input buffer. + int offset = msg.readableBytes() < threshold ? 1 : -1; + int initialBufferSize = msg.readableBytes() + offset; return MoreByteBufUtils.preferredBuffer(ctx.alloc(), compressor, initialBufferSize); } From 793e938dd1ab06b70023955ff5ed7dfb9f0fb4ba Mon Sep 17 00:00:00 2001 From: Andrew Steinborn Date: Sun, 24 May 2020 10:58:28 -0400 Subject: [PATCH 26/44] Drop macOS native support This served a good purpose when I used macOS as a primary development system, but those days are gone (I use Linux now). The spirit of multiple variants is preserved by our special Java 11+ optimized compression. --- native/compile-osx.sh | 23 ------------------ .../natives/util/NativeConstraints.java | 7 ------ .../velocitypowered/natives/util/Natives.java | 6 ----- .../resources/macosx/velocity-compress.dylib | Bin 130204 -> 0 bytes 4 files changed, 36 deletions(-) delete mode 100755 native/compile-osx.sh delete mode 100755 native/src/main/resources/macosx/velocity-compress.dylib diff --git a/native/compile-osx.sh b/native/compile-osx.sh deleted file mode 100755 index 0c0f2c2c5..000000000 --- a/native/compile-osx.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/bin/bash - -if [ ! -d zlib-ng ]; then - echo "Cloning zlib-ng..." - git clone https://github.com/zlib-ng/zlib-ng.git -fi - -echo "Compiling zlib-ng..." -cd zlib-ng -CFLAGS="-fPIC -O3" ./configure --zlib-compat --static -make clean && make -cd .. - -# Modify as you need. -MBEDTLS_ROOT=mbedtls -export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home -CFLAGS="-O3 -I$JAVA_HOME/include/ -I$JAVA_HOME/include/darwin/ -fPIC -shared" - -clang $CFLAGS -Izlib-ng src/main/c/jni_util.c src/main/c/jni_zlib_deflate.c src/main/c/jni_zlib_inflate.c \ - src/main/c/jni_zlib_common.c zlib-ng/libz.a -o src/main/resources/macosx/velocity-compress.dylib -clang $CFLAGS -I $MBEDTLS_ROOT/include -shared $MBEDTLS_ROOT/library/aes.c $MBEDTLS_ROOT/library/aesni.c \ - $MBEDTLS_ROOT/library/platform.c $MBEDTLS_ROOT/library/platform_util.c src/main/c/jni_util.c src/main/c/jni_cipher.c \ - -o src/main/resources/macosx/velocity-cipher.dylib \ No newline at end of file diff --git a/native/src/main/java/com/velocitypowered/natives/util/NativeConstraints.java b/native/src/main/java/com/velocitypowered/natives/util/NativeConstraints.java index 6e1bd1c3f..ab9604217 100644 --- a/native/src/main/java/com/velocitypowered/natives/util/NativeConstraints.java +++ b/native/src/main/java/com/velocitypowered/natives/util/NativeConstraints.java @@ -23,13 +23,6 @@ public class NativeConstraints { IS_AMD64 = osArch.equals("amd64") || osArch.equals("x86_64"); } - static final BooleanSupplier MACOS = () -> { - return NATIVES_ENABLED - && CAN_GET_MEMORYADDRESS - && System.getProperty("os.name", "").equalsIgnoreCase("Mac OS X") - && IS_AMD64; - }; - static final BooleanSupplier LINUX = () -> { return NATIVES_ENABLED && CAN_GET_MEMORYADDRESS diff --git a/native/src/main/java/com/velocitypowered/natives/util/Natives.java b/native/src/main/java/com/velocitypowered/natives/util/Natives.java index ea71c75ce..702929a90 100644 --- a/native/src/main/java/com/velocitypowered/natives/util/Natives.java +++ b/native/src/main/java/com/velocitypowered/natives/util/Natives.java @@ -62,9 +62,6 @@ public class Natives { public static final NativeCodeLoader compress = new NativeCodeLoader<>( ImmutableList.of( - new NativeCodeLoader.Variant<>(NativeConstraints.MACOS, - copyAndLoadNative("/macosx/velocity-compress.dylib"), "native (macOS)", - LibdeflateVelocityCompressor.FACTORY), new NativeCodeLoader.Variant<>(NativeConstraints.LINUX, copyAndLoadNative("/linux_x64/velocity-compress.so"), "libdeflate (Linux amd64)", @@ -78,9 +75,6 @@ public class Natives { public static final NativeCodeLoader cipher = new NativeCodeLoader<>( ImmutableList.of( - new NativeCodeLoader.Variant<>(NativeConstraints.MACOS, - copyAndLoadNative("/macosx/velocity-cipher.dylib"), "mbed TLS (macOS)", - NativeVelocityCipher.FACTORY), new NativeCodeLoader.Variant<>(NativeConstraints.LINUX, copyAndLoadNative("/linux_x64/velocity-cipher.so"), "mbed TLS (Linux amd64)", NativeVelocityCipher.FACTORY), diff --git a/native/src/main/resources/macosx/velocity-compress.dylib b/native/src/main/resources/macosx/velocity-compress.dylib deleted file mode 100755 index 3624162a69ba6dbe6e07f76651c12c468d0b8b62..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 130204 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 Date: Mon, 25 May 2020 09:38:22 -0400 Subject: [PATCH 27/44] Confine preconnect validation/setup logic to event loop. --- .../proxy/connection/client/ConnectedPlayer.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/proxy/src/main/java/com/velocitypowered/proxy/connection/client/ConnectedPlayer.java b/proxy/src/main/java/com/velocitypowered/proxy/connection/client/ConnectedPlayer.java index fd6b9d71c..49ebc529a 100644 --- a/proxy/src/main/java/com/velocitypowered/proxy/connection/client/ConnectedPlayer.java +++ b/proxy/src/main/java/com/velocitypowered/proxy/connection/client/ConnectedPlayer.java @@ -733,7 +733,7 @@ public class ConnectedPlayer implements MinecraftConnectionAssociation, Player { // Otherwise, initiate the connection. ServerPreConnectEvent event = new ServerPreConnectEvent(ConnectedPlayer.this, toConnect); return server.getEventManager().fire(event) - .thenCompose(newEvent -> { + .thenComposeAsync(newEvent -> { Optional connectTo = newEvent.getResult().getServer(); if (!connectTo.isPresent()) { return CompletableFuture.completedFuture( @@ -754,7 +754,7 @@ public class ConnectedPlayer implements MinecraftConnectionAssociation, Player { server); connectionInFlight = con; return con.connect(); - }); + }, connection.eventLoop()); } @Override From ae8852dc9dd59981d78cbbec2b65ccd06172b77a Mon Sep 17 00:00:00 2001 From: Andrew Steinborn Date: Mon, 25 May 2020 13:29:02 -0400 Subject: [PATCH 28/44] Native tests should only run on Linux --- .../natives/compression/VelocityCompressorTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/native/src/test/java/com/velocitypowered/natives/compression/VelocityCompressorTest.java b/native/src/test/java/com/velocitypowered/natives/compression/VelocityCompressorTest.java index 98533c848..2bc657b0f 100644 --- a/native/src/test/java/com/velocitypowered/natives/compression/VelocityCompressorTest.java +++ b/native/src/test/java/com/velocitypowered/natives/compression/VelocityCompressorTest.java @@ -33,13 +33,13 @@ class VelocityCompressorTest { } @Test - @EnabledOnOs({MAC, LINUX}) + @EnabledOnOs({LINUX}) void sanityCheckNative() { assertThrows(IllegalArgumentException.class, () -> Natives.compress.get().create(-42)); } @Test - @EnabledOnOs({MAC, LINUX}) + @EnabledOnOs({LINUX}) void nativeIntegrityCheck() throws DataFormatException { VelocityCompressor compressor = Natives.compress.get().create(Deflater.DEFAULT_COMPRESSION); if (compressor.preferredBufferType() != BufferPreference.DIRECT_REQUIRED) { From b6f1dcc166d88388be59479ea55c6d74294c2c05 Mon Sep 17 00:00:00 2001 From: Andrew Steinborn Date: Fri, 29 May 2020 20:52:04 -0400 Subject: [PATCH 29/44] Optimize varint frame decoding again Use ByteProcessor in a controlled matter in one specific case. Performance measurements with my Ryzen 5 3600 indicate a 25-35% improvement in time spent framing incoming packets. --- .../netty/MinecraftVarintFrameDecoder.java | 74 ++++++++++++------- 1 file changed, 48 insertions(+), 26 deletions(-) diff --git a/proxy/src/main/java/com/velocitypowered/proxy/protocol/netty/MinecraftVarintFrameDecoder.java b/proxy/src/main/java/com/velocitypowered/proxy/protocol/netty/MinecraftVarintFrameDecoder.java index 3adc8ac35..52779d797 100644 --- a/proxy/src/main/java/com/velocitypowered/proxy/protocol/netty/MinecraftVarintFrameDecoder.java +++ b/proxy/src/main/java/com/velocitypowered/proxy/protocol/netty/MinecraftVarintFrameDecoder.java @@ -1,41 +1,63 @@ package com.velocitypowered.proxy.protocol.netty; -import com.velocitypowered.proxy.protocol.ProtocolUtils; +import com.velocitypowered.proxy.util.except.QuietException; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; import io.netty.handler.codec.ByteToMessageDecoder; -import io.netty.handler.codec.CorruptedFrameException; +import io.netty.util.ByteProcessor; import java.util.List; public class MinecraftVarintFrameDecoder extends ByteToMessageDecoder { + private static final QuietException BAD_LENGTH_CACHED = new QuietException("Bad packet length"); + private final VarintByteDecoder reader = new VarintByteDecoder(); + @Override - protected void decode(ChannelHandlerContext ctx, ByteBuf in, List out) throws Exception { - read_lens: while (in.isReadable()) { - int origReaderIndex = in.readerIndex(); - for (int i = 0; i < 3; i++) { - if (!in.isReadable()) { - in.readerIndex(origReaderIndex); - return; - } - - byte read = in.readByte(); - if (read >= 0) { - // Make sure reader index of length buffer is returned to the beginning - in.readerIndex(origReaderIndex); - int packetLength = ProtocolUtils.readVarInt(in); - - if (in.readableBytes() >= packetLength) { - out.add(in.readBytes(packetLength)); - continue read_lens; - } else { - in.readerIndex(origReaderIndex); - return; - } - } + protected void decode(ChannelHandlerContext ctx, ByteBuf in, List out) { + while (in.isReadable()) { + int varintEnd = in.forEachByte(reader); + if (varintEnd == -1) { + return; } - throw new CorruptedFrameException("VarInt too big"); + if (!reader.successfulDecode) { + throw BAD_LENGTH_CACHED; + } + + int minimumRead = reader.bytesRead + reader.readVarint; + if (in.isReadable(minimumRead)) { + out.add(in.retainedSlice(varintEnd + 1, reader.readVarint)); + in.skipBytes(minimumRead); + reader.reset(); + } else { + reader.reset(); + return; + } + } + } + + private static class VarintByteDecoder implements ByteProcessor { + private int readVarint; + private int bytesRead; + private boolean successfulDecode; + + @Override + public boolean process(byte k) { + readVarint |= (k & 0x7F) << bytesRead++ * 7; + if (bytesRead > 3) { + return false; + } + if ((k & 0x80) != 128) { + successfulDecode = true; + return false; + } + return true; + } + + void reset() { + readVarint = 0; + bytesRead = 0; + successfulDecode = false; } } } From dd2e1ad241d2b1a622c6937c1fad9c184cf2320a Mon Sep 17 00:00:00 2001 From: Andrew Steinborn Date: Fri, 29 May 2020 21:11:21 -0400 Subject: [PATCH 30/44] Handle partially sent varints better --- .../netty/MinecraftVarintFrameDecoder.java | 26 ++++++++++++------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/proxy/src/main/java/com/velocitypowered/proxy/protocol/netty/MinecraftVarintFrameDecoder.java b/proxy/src/main/java/com/velocitypowered/proxy/protocol/netty/MinecraftVarintFrameDecoder.java index 52779d797..68967917f 100644 --- a/proxy/src/main/java/com/velocitypowered/proxy/protocol/netty/MinecraftVarintFrameDecoder.java +++ b/proxy/src/main/java/com/velocitypowered/proxy/protocol/netty/MinecraftVarintFrameDecoder.java @@ -20,18 +20,26 @@ public class MinecraftVarintFrameDecoder extends ByteToMessageDecoder { return; } - if (!reader.successfulDecode) { - throw BAD_LENGTH_CACHED; - } + if (reader.successfulDecode) { + if (reader.readVarint < 0) { + throw BAD_LENGTH_CACHED; + } - int minimumRead = reader.bytesRead + reader.readVarint; - if (in.isReadable(minimumRead)) { - out.add(in.retainedSlice(varintEnd + 1, reader.readVarint)); - in.skipBytes(minimumRead); - reader.reset(); + int minimumRead = reader.bytesRead + reader.readVarint; + if (in.isReadable(minimumRead)) { + out.add(in.retainedSlice(varintEnd + 1, reader.readVarint)); + in.skipBytes(minimumRead); + reader.reset(); + } else { + reader.reset(); + return; + } } else { + boolean tooBig = reader.bytesRead > 3; reader.reset(); - return; + if (tooBig) { + throw BAD_LENGTH_CACHED; + } } } } From 11fb5f2be3ccc14fe2ff9e29ec5226a7cfee901a Mon Sep 17 00:00:00 2001 From: Andrew Steinborn Date: Fri, 29 May 2020 21:35:07 -0400 Subject: [PATCH 31/44] Simplify the discard logic. --- .../proxy/connection/MinecraftConnection.java | 16 ---------------- .../proxy/network/netty/DiscardHandler.java | 17 ----------------- .../netty/MinecraftVarintFrameDecoder.java | 5 +++++ 3 files changed, 5 insertions(+), 33 deletions(-) delete mode 100644 proxy/src/main/java/com/velocitypowered/proxy/network/netty/DiscardHandler.java diff --git a/proxy/src/main/java/com/velocitypowered/proxy/connection/MinecraftConnection.java b/proxy/src/main/java/com/velocitypowered/proxy/connection/MinecraftConnection.java index 84ceaeb75..91d99ceea 100644 --- a/proxy/src/main/java/com/velocitypowered/proxy/connection/MinecraftConnection.java +++ b/proxy/src/main/java/com/velocitypowered/proxy/connection/MinecraftConnection.java @@ -16,7 +16,6 @@ import com.velocitypowered.natives.encryption.VelocityCipher; import com.velocitypowered.natives.encryption.VelocityCipherFactory; import com.velocitypowered.natives.util.Natives; import com.velocitypowered.proxy.VelocityServer; -import com.velocitypowered.proxy.network.netty.DiscardHandler; import com.velocitypowered.proxy.protocol.MinecraftPacket; import com.velocitypowered.proxy.protocol.StateRegistry; import com.velocitypowered.proxy.protocol.netty.MinecraftCipherDecoder; @@ -152,7 +151,6 @@ public class MinecraftConnection extends ChannelInboundHandlerAdapter { } } - installDiscardHandler(ctx); ctx.close(); } } @@ -168,18 +166,6 @@ public class MinecraftConnection extends ChannelInboundHandlerAdapter { Preconditions.checkState(this.channel.eventLoop().inEventLoop(), "Not in event loop"); } - private void installDiscardHandler(ChannelHandlerContext ctx) { - if (ctx.pipeline().get("discard") == null) { - ctx.pipeline().addBefore(MINECRAFT_DECODER, "discard", DiscardHandler.HANDLER); - } - } - - private void installDiscardHandler() { - if (channel.pipeline().get("discard") == null) { - channel.pipeline().addBefore(MINECRAFT_DECODER, "discard", DiscardHandler.HANDLER); - } - } - public EventLoop eventLoop() { return channel.eventLoop(); } @@ -220,7 +206,6 @@ public class MinecraftConnection extends ChannelInboundHandlerAdapter { public void closeWith(Object msg) { if (channel.isActive()) { knownDisconnect = true; - installDiscardHandler(); channel.writeAndFlush(msg).addListener(ChannelFutureListener.CLOSE); } } @@ -230,7 +215,6 @@ public class MinecraftConnection extends ChannelInboundHandlerAdapter { */ public void close() { if (channel.isActive()) { - installDiscardHandler(); channel.close(); } } diff --git a/proxy/src/main/java/com/velocitypowered/proxy/network/netty/DiscardHandler.java b/proxy/src/main/java/com/velocitypowered/proxy/network/netty/DiscardHandler.java deleted file mode 100644 index 80b34056e..000000000 --- a/proxy/src/main/java/com/velocitypowered/proxy/network/netty/DiscardHandler.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.velocitypowered.proxy.network.netty; - -import io.netty.channel.ChannelHandler.Sharable; -import io.netty.channel.ChannelHandlerContext; -import io.netty.channel.ChannelInboundHandlerAdapter; -import io.netty.util.ReferenceCountUtil; - -@Sharable -public class DiscardHandler extends ChannelInboundHandlerAdapter { - - public static final DiscardHandler HANDLER = new DiscardHandler(); - - @Override - public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { - ReferenceCountUtil.release(msg); - } -} diff --git a/proxy/src/main/java/com/velocitypowered/proxy/protocol/netty/MinecraftVarintFrameDecoder.java b/proxy/src/main/java/com/velocitypowered/proxy/protocol/netty/MinecraftVarintFrameDecoder.java index 68967917f..1fdf8ece9 100644 --- a/proxy/src/main/java/com/velocitypowered/proxy/protocol/netty/MinecraftVarintFrameDecoder.java +++ b/proxy/src/main/java/com/velocitypowered/proxy/protocol/netty/MinecraftVarintFrameDecoder.java @@ -14,6 +14,11 @@ public class MinecraftVarintFrameDecoder extends ByteToMessageDecoder { @Override protected void decode(ChannelHandlerContext ctx, ByteBuf in, List out) { + if (!ctx.channel().isActive()) { + in.skipBytes(in.readableBytes()); + return; + } + while (in.isReadable()) { int varintEnd = in.forEachByte(reader); if (varintEnd == -1) { From 3a8ba76f25ab1d6a1cf588e66944d283f5ba17a6 Mon Sep 17 00:00:00 2001 From: Andrew Steinborn Date: Sun, 31 May 2020 07:55:19 -0400 Subject: [PATCH 32/44] This did not work :( --- .../netty/MinecraftVarintFrameDecoder.java | 70 ++++++------------- 1 file changed, 21 insertions(+), 49 deletions(-) diff --git a/proxy/src/main/java/com/velocitypowered/proxy/protocol/netty/MinecraftVarintFrameDecoder.java b/proxy/src/main/java/com/velocitypowered/proxy/protocol/netty/MinecraftVarintFrameDecoder.java index 1fdf8ece9..a4da29a76 100644 --- a/proxy/src/main/java/com/velocitypowered/proxy/protocol/netty/MinecraftVarintFrameDecoder.java +++ b/proxy/src/main/java/com/velocitypowered/proxy/protocol/netty/MinecraftVarintFrameDecoder.java @@ -1,16 +1,15 @@ package com.velocitypowered.proxy.protocol.netty; +import com.velocitypowered.proxy.protocol.ProtocolUtils; import com.velocitypowered.proxy.util.except.QuietException; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; import io.netty.handler.codec.ByteToMessageDecoder; -import io.netty.util.ByteProcessor; import java.util.List; public class MinecraftVarintFrameDecoder extends ByteToMessageDecoder { private static final QuietException BAD_LENGTH_CACHED = new QuietException("Bad packet length"); - private final VarintByteDecoder reader = new VarintByteDecoder(); @Override protected void decode(ChannelHandlerContext ctx, ByteBuf in, List out) { @@ -19,58 +18,31 @@ public class MinecraftVarintFrameDecoder extends ByteToMessageDecoder { return; } - while (in.isReadable()) { - int varintEnd = in.forEachByte(reader); - if (varintEnd == -1) { - return; - } - - if (reader.successfulDecode) { - if (reader.readVarint < 0) { - throw BAD_LENGTH_CACHED; - } - - int minimumRead = reader.bytesRead + reader.readVarint; - if (in.isReadable(minimumRead)) { - out.add(in.retainedSlice(varintEnd + 1, reader.readVarint)); - in.skipBytes(minimumRead); - reader.reset(); - } else { - reader.reset(); + read_lens: while (in.isReadable()) { + int origReaderIndex = in.readerIndex(); + for (int i = 0; i < 3; i++) { + if (!in.isReadable()) { + in.readerIndex(origReaderIndex); return; } - } else { - boolean tooBig = reader.bytesRead > 3; - reader.reset(); - if (tooBig) { - throw BAD_LENGTH_CACHED; + + byte read = in.readByte(); + if (read >= 0) { + // Make sure reader index of length buffer is returned to the beginning + in.readerIndex(origReaderIndex); + int packetLength = ProtocolUtils.readVarInt(in); + + if (in.readableBytes() >= packetLength) { + out.add(in.readBytes(packetLength)); + continue read_lens; + } else { + in.readerIndex(origReaderIndex); + return; + } } } - } - } - private static class VarintByteDecoder implements ByteProcessor { - private int readVarint; - private int bytesRead; - private boolean successfulDecode; - - @Override - public boolean process(byte k) { - readVarint |= (k & 0x7F) << bytesRead++ * 7; - if (bytesRead > 3) { - return false; - } - if ((k & 0x80) != 128) { - successfulDecode = true; - return false; - } - return true; - } - - void reset() { - readVarint = 0; - bytesRead = 0; - successfulDecode = false; + throw BAD_LENGTH_CACHED; } } } From c856635ac580217638fd328eeb9468c665430ca7 Mon Sep 17 00:00:00 2001 From: Andrew Steinborn Date: Sun, 31 May 2020 08:14:33 -0400 Subject: [PATCH 33/44] Try two, with improved state maintenance and some bugs fixed --- .../netty/MinecraftVarintFrameDecoder.java | 82 +++++++++++++------ 1 file changed, 59 insertions(+), 23 deletions(-) diff --git a/proxy/src/main/java/com/velocitypowered/proxy/protocol/netty/MinecraftVarintFrameDecoder.java b/proxy/src/main/java/com/velocitypowered/proxy/protocol/netty/MinecraftVarintFrameDecoder.java index a4da29a76..6cf258e6b 100644 --- a/proxy/src/main/java/com/velocitypowered/proxy/protocol/netty/MinecraftVarintFrameDecoder.java +++ b/proxy/src/main/java/com/velocitypowered/proxy/protocol/netty/MinecraftVarintFrameDecoder.java @@ -1,15 +1,17 @@ package com.velocitypowered.proxy.protocol.netty; -import com.velocitypowered.proxy.protocol.ProtocolUtils; import com.velocitypowered.proxy.util.except.QuietException; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; import io.netty.handler.codec.ByteToMessageDecoder; +import io.netty.util.ByteProcessor; import java.util.List; public class MinecraftVarintFrameDecoder extends ByteToMessageDecoder { private static final QuietException BAD_LENGTH_CACHED = new QuietException("Bad packet length"); + private static final QuietException VARINT_BIG_CACHED = new QuietException("VarInt too big"); + private final VarintByteDecoder reader = new VarintByteDecoder(); @Override protected void decode(ChannelHandlerContext ctx, ByteBuf in, List out) { @@ -18,31 +20,65 @@ public class MinecraftVarintFrameDecoder extends ByteToMessageDecoder { return; } - read_lens: while (in.isReadable()) { - int origReaderIndex = in.readerIndex(); - for (int i = 0; i < 3; i++) { - if (!in.isReadable()) { - in.readerIndex(origReaderIndex); - return; - } + while (in.isReadable()) { + reader.reset(); - byte read = in.readByte(); - if (read >= 0) { - // Make sure reader index of length buffer is returned to the beginning - in.readerIndex(origReaderIndex); - int packetLength = ProtocolUtils.readVarInt(in); - - if (in.readableBytes() >= packetLength) { - out.add(in.readBytes(packetLength)); - continue read_lens; - } else { - in.readerIndex(origReaderIndex); - return; - } - } + int varintEnd = in.forEachByte(reader); + if (varintEnd == -1) { + // We tried to go beyond the end of the buffer. This is probably a good sign that the + // buffer was too short to hold a proper varint. + return; } - throw BAD_LENGTH_CACHED; + if (reader.result == DecodeResult.SUCCESS) { + if (reader.readVarint < 0) { + throw BAD_LENGTH_CACHED; + } + + int minimumRead = reader.bytesRead + reader.readVarint; + if (in.isReadable(minimumRead)) { + out.add(in.retainedSlice(varintEnd + 1, reader.readVarint)); + in.skipBytes(minimumRead); + } else { + return; + } + } else if (reader.result == DecodeResult.TOO_BIG) { + throw VARINT_BIG_CACHED; + } else if (reader.result == DecodeResult.TOO_SHORT) { + // No-op: we couldn't get a useful result. + } } } + + private static class VarintByteDecoder implements ByteProcessor { + private int readVarint; + private int bytesRead; + private DecodeResult result = DecodeResult.TOO_SHORT; + + @Override + public boolean process(byte k) { + readVarint |= (k & 0x7F) << bytesRead++ * 7; + if (bytesRead > 3) { + result = DecodeResult.TOO_BIG; + return false; + } + if ((k & 0x80) != 128) { + result = DecodeResult.SUCCESS; + return false; + } + return true; + } + + void reset() { + readVarint = 0; + bytesRead = 0; + result = DecodeResult.TOO_SHORT; + } + } + + private enum DecodeResult { + SUCCESS, + TOO_SHORT, + TOO_BIG + } } From f27aa8e3ba256efb31407f6ec1193e5b710a50e3 Mon Sep 17 00:00:00 2001 From: Andrew Steinborn Date: Sun, 31 May 2020 09:54:47 -0400 Subject: [PATCH 34/44] Handle empty packets too --- .../netty/MinecraftVarintFrameDecoder.java | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/proxy/src/main/java/com/velocitypowered/proxy/protocol/netty/MinecraftVarintFrameDecoder.java b/proxy/src/main/java/com/velocitypowered/proxy/protocol/netty/MinecraftVarintFrameDecoder.java index 6cf258e6b..816c25429 100644 --- a/proxy/src/main/java/com/velocitypowered/proxy/protocol/netty/MinecraftVarintFrameDecoder.java +++ b/proxy/src/main/java/com/velocitypowered/proxy/protocol/netty/MinecraftVarintFrameDecoder.java @@ -33,14 +33,17 @@ public class MinecraftVarintFrameDecoder extends ByteToMessageDecoder { if (reader.result == DecodeResult.SUCCESS) { if (reader.readVarint < 0) { throw BAD_LENGTH_CACHED; - } - - int minimumRead = reader.bytesRead + reader.readVarint; - if (in.isReadable(minimumRead)) { - out.add(in.retainedSlice(varintEnd + 1, reader.readVarint)); - in.skipBytes(minimumRead); + } else if (reader.readVarint == 0) { + // skip over the empty packet and ignore it + in.readerIndex(varintEnd + 1); } else { - return; + int minimumRead = reader.bytesRead + reader.readVarint; + if (in.isReadable(minimumRead)) { + out.add(in.retainedSlice(varintEnd + 1, reader.readVarint)); + in.skipBytes(minimumRead); + } else { + return; + } } } else if (reader.result == DecodeResult.TOO_BIG) { throw VARINT_BIG_CACHED; From 46e92a069b773b681b33ecf795b2684018e24156 Mon Sep 17 00:00:00 2001 From: Andrew Steinborn Date: Sun, 31 May 2020 14:01:27 -0400 Subject: [PATCH 35/44] Fix an issue with too short not breaking the loop --- .../proxy/protocol/netty/MinecraftVarintFrameDecoder.java | 1 + 1 file changed, 1 insertion(+) diff --git a/proxy/src/main/java/com/velocitypowered/proxy/protocol/netty/MinecraftVarintFrameDecoder.java b/proxy/src/main/java/com/velocitypowered/proxy/protocol/netty/MinecraftVarintFrameDecoder.java index 816c25429..6bc3229cd 100644 --- a/proxy/src/main/java/com/velocitypowered/proxy/protocol/netty/MinecraftVarintFrameDecoder.java +++ b/proxy/src/main/java/com/velocitypowered/proxy/protocol/netty/MinecraftVarintFrameDecoder.java @@ -49,6 +49,7 @@ public class MinecraftVarintFrameDecoder extends ByteToMessageDecoder { throw VARINT_BIG_CACHED; } else if (reader.result == DecodeResult.TOO_SHORT) { // No-op: we couldn't get a useful result. + break; } } } From 456b4b217f0069d72d61fd29f60ffd93147e05b0 Mon Sep 17 00:00:00 2001 From: Andrew Steinborn Date: Thu, 4 Jun 2020 01:35:32 -0400 Subject: [PATCH 36/44] Run closeWith() logic in the event loop --- .../proxy/connection/MinecraftConnection.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/proxy/src/main/java/com/velocitypowered/proxy/connection/MinecraftConnection.java b/proxy/src/main/java/com/velocitypowered/proxy/connection/MinecraftConnection.java index 91d99ceea..2765676e0 100644 --- a/proxy/src/main/java/com/velocitypowered/proxy/connection/MinecraftConnection.java +++ b/proxy/src/main/java/com/velocitypowered/proxy/connection/MinecraftConnection.java @@ -205,8 +205,10 @@ public class MinecraftConnection extends ChannelInboundHandlerAdapter { */ public void closeWith(Object msg) { if (channel.isActive()) { - knownDisconnect = true; - channel.writeAndFlush(msg).addListener(ChannelFutureListener.CLOSE); + channel.eventLoop().execute(() -> { + knownDisconnect = true; + channel.writeAndFlush(msg).addListener(ChannelFutureListener.CLOSE); + }); } } From bb69481f990594ebb996c23a979dce27e89a1f4f Mon Sep 17 00:00:00 2001 From: Andrew Steinborn Date: Thu, 4 Jun 2020 14:56:17 -0400 Subject: [PATCH 37/44] Lay down foundation for cross-architecture natives We have dropped the rarely used kqueue and replaced it with the new Netty aarch64 native. In addition, lay down the foundation for other aarch64 natives. --- native/compile-linux.sh | 6 ++++-- .../velocitypowered/natives/util/Natives.java | 15 +++++++++++---- .../velocity-compress.so | Bin proxy/build.gradle | 3 +-- .../proxy/network/TransportType.java | 13 +------------ 5 files changed, 17 insertions(+), 20 deletions(-) rename native/src/main/resources/{linux_x64 => linux_x86_64}/velocity-compress.so (100%) diff --git a/native/compile-linux.sh b/native/compile-linux.sh index 78072b00b..db7227d06 100755 --- a/native/compile-linux.sh +++ b/native/compile-linux.sh @@ -13,8 +13,10 @@ cd .. # Modify as you need. MBEDTLS_ROOT=mbedtls CFLAGS="-O3 -I$JAVA_HOME/include/ -I$JAVA_HOME/include/linux/ -fPIC -shared -Wl,-z,noexecstack" +ARCH=$(uname -m) +mkdir -p src/main/resources/linux_$ARCH gcc $CFLAGS -Ilibdeflate src/main/c/jni_util.c src/main/c/jni_zlib_deflate.c src/main/c/jni_zlib_inflate.c \ - libdeflate/libdeflate.a -o src/main/resources/linux_x64/velocity-compress.so + libdeflate/libdeflate.a -o src/main/resources/linux_$ARCH/velocity-compress.so gcc $CFLAGS -I $MBEDTLS_ROOT/include -shared $MBEDTLS_ROOT/library/aes.c $MBEDTLS_ROOT/library/aesni.c \ $MBEDTLS_ROOT/library/platform.c $MBEDTLS_ROOT/library/platform_util.c src/main/c/jni_util.c src/main/c/jni_cipher.c \ - -o src/main/resources/linux_x64/velocity-cipher.so + -o src/main/resources/linux_$ARCH/velocity-cipher.so \ No newline at end of file diff --git a/native/src/main/java/com/velocitypowered/natives/util/Natives.java b/native/src/main/java/com/velocitypowered/natives/util/Natives.java index 702929a90..4a9d428df 100644 --- a/native/src/main/java/com/velocitypowered/natives/util/Natives.java +++ b/native/src/main/java/com/velocitypowered/natives/util/Natives.java @@ -63,8 +63,12 @@ public class Natives { public static final NativeCodeLoader compress = new NativeCodeLoader<>( ImmutableList.of( new NativeCodeLoader.Variant<>(NativeConstraints.LINUX, - copyAndLoadNative("/linux_x64/velocity-compress.so"), - "libdeflate (Linux amd64)", + copyAndLoadNative("/linux_x86_64/velocity-compress.so"), + "libdeflate (Linux x86_64)", + LibdeflateVelocityCompressor.FACTORY), + new NativeCodeLoader.Variant<>(NativeConstraints.LINUX, + copyAndLoadNative("/linux_aarch64/velocity-compress.so"), + "libdeflate (Linux aarch64)", LibdeflateVelocityCompressor.FACTORY), new NativeCodeLoader.Variant<>(NativeConstraints.JAVA_11, () -> { }, "Java 11", () -> Java11VelocityCompressor.FACTORY), @@ -76,8 +80,11 @@ public class Natives { public static final NativeCodeLoader cipher = new NativeCodeLoader<>( ImmutableList.of( new NativeCodeLoader.Variant<>(NativeConstraints.LINUX, - copyAndLoadNative("/linux_x64/velocity-cipher.so"), "mbed TLS (Linux amd64)", - NativeVelocityCipher.FACTORY), + copyAndLoadNative("/linux_x86_64/velocity-cipher.so"), + "mbed TLS (Linux x86_64)", NativeVelocityCipher.FACTORY), + new NativeCodeLoader.Variant<>(NativeConstraints.LINUX, + copyAndLoadNative("/linux_aarch64/velocity-cipher.so"), + "mbed TLS (Linux aarch64)", NativeVelocityCipher.FACTORY), new NativeCodeLoader.Variant<>(NativeCodeLoader.ALWAYS, () -> { }, "Java", JavaVelocityCipher.FACTORY) ) diff --git a/native/src/main/resources/linux_x64/velocity-compress.so b/native/src/main/resources/linux_x86_64/velocity-compress.so similarity index 100% rename from native/src/main/resources/linux_x64/velocity-compress.so rename to native/src/main/resources/linux_x86_64/velocity-compress.so diff --git a/proxy/build.gradle b/proxy/build.gradle index 5498db10b..bcf3daea5 100644 --- a/proxy/build.gradle +++ b/proxy/build.gradle @@ -48,8 +48,7 @@ dependencies { compile "io.netty:netty-handler:${nettyVersion}" compile "io.netty:netty-transport-native-epoll:${nettyVersion}" compile "io.netty:netty-transport-native-epoll:${nettyVersion}:linux-x86_64" - compile "io.netty:netty-transport-native-kqueue:${nettyVersion}" - compile "io.netty:netty-transport-native-kqueue:${nettyVersion}:osx-x86_64" + compile "io.netty:netty-transport-native-epoll:${nettyVersion}:linux-aarch64" compile "io.netty:netty-resolver-dns:${nettyVersion}" compile "org.apache.logging.log4j:log4j-api:${log4jVersion}" diff --git a/proxy/src/main/java/com/velocitypowered/proxy/network/TransportType.java b/proxy/src/main/java/com/velocitypowered/proxy/network/TransportType.java index 0edff72c0..b5829f375 100644 --- a/proxy/src/main/java/com/velocitypowered/proxy/network/TransportType.java +++ b/proxy/src/main/java/com/velocitypowered/proxy/network/TransportType.java @@ -7,11 +7,6 @@ import io.netty.channel.epoll.EpollDatagramChannel; import io.netty.channel.epoll.EpollEventLoopGroup; import io.netty.channel.epoll.EpollServerSocketChannel; import io.netty.channel.epoll.EpollSocketChannel; -import io.netty.channel.kqueue.KQueue; -import io.netty.channel.kqueue.KQueueDatagramChannel; -import io.netty.channel.kqueue.KQueueEventLoopGroup; -import io.netty.channel.kqueue.KQueueServerSocketChannel; -import io.netty.channel.kqueue.KQueueSocketChannel; import io.netty.channel.nio.NioEventLoopGroup; import io.netty.channel.socket.DatagramChannel; import io.netty.channel.socket.ServerSocketChannel; @@ -27,11 +22,7 @@ enum TransportType { (name, type) -> new NioEventLoopGroup(0, createThreadFactory(name, type))), EPOLL("epoll", EpollServerSocketChannel.class, EpollSocketChannel.class, EpollDatagramChannel.class, - (name, type) -> new EpollEventLoopGroup(0, createThreadFactory(name, type))), - KQUEUE("Kqueue", KQueueServerSocketChannel.class, KQueueSocketChannel.class, - KQueueDatagramChannel.class, - (name, type) -> new KQueueEventLoopGroup(0, createThreadFactory(name, type))); - + (name, type) -> new EpollEventLoopGroup(0, createThreadFactory(name, type))); final String name; final Class serverSocketChannelClass; @@ -71,8 +62,6 @@ enum TransportType { if (Epoll.isAvailable()) { return EPOLL; - } else if (KQueue.isAvailable()) { - return KQUEUE; } else { return NIO; } From 31d1871bd561ba2388a4006ed9f904976ec89652 Mon Sep 17 00:00:00 2001 From: Andrew Steinborn Date: Thu, 4 Jun 2020 15:03:27 -0400 Subject: [PATCH 38/44] Check for AARCH64. --- .../natives/util/NativeConstraints.java | 15 ++++++++++++--- .../com/velocitypowered/natives/util/Natives.java | 8 ++++---- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/native/src/main/java/com/velocitypowered/natives/util/NativeConstraints.java b/native/src/main/java/com/velocitypowered/natives/util/NativeConstraints.java index ab9604217..5a9dcb35d 100644 --- a/native/src/main/java/com/velocitypowered/natives/util/NativeConstraints.java +++ b/native/src/main/java/com/velocitypowered/natives/util/NativeConstraints.java @@ -7,6 +7,7 @@ import java.util.function.BooleanSupplier; public class NativeConstraints { private static final boolean NATIVES_ENABLED = !Boolean.getBoolean("velocity.natives-disabled"); private static final boolean IS_AMD64; + private static final boolean IS_AARCH64; private static final boolean CAN_GET_MEMORYADDRESS; static { @@ -21,15 +22,23 @@ public class NativeConstraints { // HotSpot on Intel macOS prefers x86_64, but OpenJ9 on macOS and HotSpot/OpenJ9 elsewhere // give amd64. IS_AMD64 = osArch.equals("amd64") || osArch.equals("x86_64"); + IS_AARCH64 = osArch.equals("aarch64"); } - static final BooleanSupplier LINUX = () -> { - return NATIVES_ENABLED - && CAN_GET_MEMORYADDRESS + static final BooleanSupplier NATIVE_BASE = () -> NATIVES_ENABLED && CAN_GET_MEMORYADDRESS; + + static final BooleanSupplier LINUX_X86_64 = () -> { + return NATIVE_BASE.getAsBoolean() && System.getProperty("os.name", "").equalsIgnoreCase("Linux") && IS_AMD64; }; + static final BooleanSupplier LINUX_AARCH64 = () -> { + return NATIVE_BASE.getAsBoolean() + && System.getProperty("os.name", "").equalsIgnoreCase("Linux") + && IS_AARCH64; + }; + static final BooleanSupplier JAVA_11 = () -> { return Double.parseDouble(System.getProperty("java.specification.version")) >= 11; }; diff --git a/native/src/main/java/com/velocitypowered/natives/util/Natives.java b/native/src/main/java/com/velocitypowered/natives/util/Natives.java index 4a9d428df..120ec1ee7 100644 --- a/native/src/main/java/com/velocitypowered/natives/util/Natives.java +++ b/native/src/main/java/com/velocitypowered/natives/util/Natives.java @@ -62,11 +62,11 @@ public class Natives { public static final NativeCodeLoader compress = new NativeCodeLoader<>( ImmutableList.of( - new NativeCodeLoader.Variant<>(NativeConstraints.LINUX, + new NativeCodeLoader.Variant<>(NativeConstraints.LINUX_X86_64, copyAndLoadNative("/linux_x86_64/velocity-compress.so"), "libdeflate (Linux x86_64)", LibdeflateVelocityCompressor.FACTORY), - new NativeCodeLoader.Variant<>(NativeConstraints.LINUX, + new NativeCodeLoader.Variant<>(NativeConstraints.LINUX_AARCH64, copyAndLoadNative("/linux_aarch64/velocity-compress.so"), "libdeflate (Linux aarch64)", LibdeflateVelocityCompressor.FACTORY), @@ -79,10 +79,10 @@ public class Natives { public static final NativeCodeLoader cipher = new NativeCodeLoader<>( ImmutableList.of( - new NativeCodeLoader.Variant<>(NativeConstraints.LINUX, + new NativeCodeLoader.Variant<>(NativeConstraints.LINUX_X86_64, copyAndLoadNative("/linux_x86_64/velocity-cipher.so"), "mbed TLS (Linux x86_64)", NativeVelocityCipher.FACTORY), - new NativeCodeLoader.Variant<>(NativeConstraints.LINUX, + new NativeCodeLoader.Variant<>(NativeConstraints.LINUX_AARCH64, copyAndLoadNative("/linux_aarch64/velocity-cipher.so"), "mbed TLS (Linux aarch64)", NativeVelocityCipher.FACTORY), new NativeCodeLoader.Variant<>(NativeCodeLoader.ALWAYS, () -> { From f3d5c986da67d1884c76cd5470eecb1e73c8b5e2 Mon Sep 17 00:00:00 2001 From: Andrew Steinborn Date: Thu, 4 Jun 2020 15:22:03 -0400 Subject: [PATCH 39/44] Add Velocity compression native for aarch64 This native has been compiled and tested on Ubuntu 18.04 aarch64 on AWS Graviton2. The cipher native is at the moment unlikely to provide a performance boost as mbed TLS doesn't provide an accelerated AES extension. --- .../linux_aarch64/velocity-compress.so | Bin 0 -> 36880 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100755 native/src/main/resources/linux_aarch64/velocity-compress.so diff --git a/native/src/main/resources/linux_aarch64/velocity-compress.so b/native/src/main/resources/linux_aarch64/velocity-compress.so new file mode 100755 index 0000000000000000000000000000000000000000..100a41c9963ccbc3cd811ce977fb113babcb655d GIT binary patch literal 36880 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 z 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 Date: Sun, 7 Jun 2020 00:50:15 -0400 Subject: [PATCH 40/44] Remove Netty async DNS resolver completely It "mostly works" - but it's not good enough. Instead, we'll offload the DNS resolution outside the event loop. This is a middle-ground approach between doing the resolution on the calling method (and potentially a Netty I/O thread) and using the intermittently broken Netty async DNS resolver. --- .../proxy/network/ConnectionManager.java | 20 +++-- ...dressResolverGroupNameResolverAdapter.java | 68 ---------------- .../netty/SeparatePoolInetNameResolver.java | 79 +++++++++++++++++++ 3 files changed, 88 insertions(+), 79 deletions(-) delete mode 100644 proxy/src/main/java/com/velocitypowered/proxy/network/netty/DnsAddressResolverGroupNameResolverAdapter.java create mode 100644 proxy/src/main/java/com/velocitypowered/proxy/network/netty/SeparatePoolInetNameResolver.java diff --git a/proxy/src/main/java/com/velocitypowered/proxy/network/ConnectionManager.java b/proxy/src/main/java/com/velocitypowered/proxy/network/ConnectionManager.java index 0f89109df..24fe82440 100644 --- a/proxy/src/main/java/com/velocitypowered/proxy/network/ConnectionManager.java +++ b/proxy/src/main/java/com/velocitypowered/proxy/network/ConnectionManager.java @@ -6,7 +6,7 @@ import static org.asynchttpclient.Dsl.config; import com.google.common.base.Preconditions; import com.velocitypowered.natives.util.Natives; import com.velocitypowered.proxy.VelocityServer; -import com.velocitypowered.proxy.network.netty.DnsAddressResolverGroupNameResolverAdapter; +import com.velocitypowered.proxy.network.netty.SeparatePoolInetNameResolver; import com.velocitypowered.proxy.protocol.netty.GS4QueryHandler; import io.netty.bootstrap.Bootstrap; import io.netty.bootstrap.ServerBootstrap; @@ -18,6 +18,7 @@ import io.netty.channel.WriteBufferWaterMark; import io.netty.channel.epoll.EpollChannelOption; import io.netty.resolver.dns.DnsAddressResolverGroup; import io.netty.resolver.dns.DnsNameResolverBuilder; +import io.netty.util.concurrent.GlobalEventExecutor; import java.net.InetSocketAddress; import java.util.HashMap; import java.util.Map; @@ -48,7 +49,7 @@ public final class ConnectionManager { @SuppressWarnings("WeakerAccess") public final BackendChannelInitializerHolder backendChannelInitializer; - private final DnsAddressResolverGroup resolverGroup; + private final SeparatePoolInetNameResolver resolver; private final AsyncHttpClient httpClient; /** @@ -65,21 +66,16 @@ public final class ConnectionManager { new ServerChannelInitializer(this.server)); this.backendChannelInitializer = new BackendChannelInitializerHolder( new BackendChannelInitializer(this.server)); - this.resolverGroup = new DnsAddressResolverGroup(new DnsNameResolverBuilder() - .channelType(this.transportType.datagramChannelClass) - .negativeTtl(15) - .ndots(1)); + this.resolver = new SeparatePoolInetNameResolver(GlobalEventExecutor.INSTANCE); this.httpClient = asyncHttpClient(config() .setEventLoopGroup(this.workerGroup) .setUserAgent(server.getVersion().getName() + "/" + server.getVersion().getVersion()) .addRequestFilter(new RequestFilter() { @Override - public FilterContext filter(FilterContext ctx) throws FilterException { + public FilterContext filter(FilterContext ctx) { return new FilterContextBuilder<>(ctx) .request(new RequestBuilder(ctx.getRequest()) - .setNameResolver( - new DnsAddressResolverGroupNameResolverAdapter(resolverGroup, workerGroup) - ) + .setNameResolver(resolver) .build()) .build(); } @@ -162,7 +158,7 @@ public final class ConnectionManager { .option(ChannelOption.CONNECT_TIMEOUT_MILLIS, this.server.getConfiguration().getConnectTimeout()) .group(group == null ? this.workerGroup : group) - .resolver(this.resolverGroup); + .resolver(this.resolver.asGroup()); if (transportType == TransportType.EPOLL && server.getConfiguration().useTcpFastOpen()) { bootstrap.option(EpollChannelOption.TCP_FASTOPEN_CONNECT, true); } @@ -194,6 +190,8 @@ public final class ConnectionManager { Thread.currentThread().interrupt(); } } + + this.resolver.shutdown(); } public EventLoopGroup getBossGroup() { diff --git a/proxy/src/main/java/com/velocitypowered/proxy/network/netty/DnsAddressResolverGroupNameResolverAdapter.java b/proxy/src/main/java/com/velocitypowered/proxy/network/netty/DnsAddressResolverGroupNameResolverAdapter.java deleted file mode 100644 index 169b60a49..000000000 --- a/proxy/src/main/java/com/velocitypowered/proxy/network/netty/DnsAddressResolverGroupNameResolverAdapter.java +++ /dev/null @@ -1,68 +0,0 @@ -package com.velocitypowered.proxy.network.netty; - -import io.netty.channel.EventLoopGroup; -import io.netty.resolver.InetNameResolver; -import io.netty.resolver.dns.DnsAddressResolverGroup; -import io.netty.util.concurrent.EventExecutor; -import io.netty.util.concurrent.FutureListener; -import io.netty.util.concurrent.ImmediateEventExecutor; -import io.netty.util.concurrent.Promise; -import io.netty.util.internal.ThreadExecutorMap; -import java.net.InetAddress; -import java.net.InetSocketAddress; -import java.util.ArrayList; -import java.util.List; - -public class DnsAddressResolverGroupNameResolverAdapter extends InetNameResolver { - - private final DnsAddressResolverGroup resolverGroup; - private final EventLoopGroup group; - - /** - * Creates a DnsAddressResolverGroupNameResolverAdapter. - * @param resolverGroup the resolver group to use - * @param group the event loop group - */ - public DnsAddressResolverGroupNameResolverAdapter( - DnsAddressResolverGroup resolverGroup, EventLoopGroup group) { - super(ImmediateEventExecutor.INSTANCE); - this.resolverGroup = resolverGroup; - this.group = group; - } - - @Override - protected void doResolve(String inetHost, Promise promise) throws Exception { - EventExecutor executor = this.findExecutor(); - resolverGroup.getResolver(executor).resolve(InetSocketAddress.createUnresolved(inetHost, 17)) - .addListener((FutureListener) future -> { - if (future.isSuccess()) { - promise.trySuccess(future.getNow().getAddress()); - } else { - promise.tryFailure(future.cause()); - } - }); - } - - @Override - protected void doResolveAll(String inetHost, Promise> promise) - throws Exception { - EventExecutor executor = this.findExecutor(); - resolverGroup.getResolver(executor).resolveAll(InetSocketAddress.createUnresolved(inetHost, 17)) - .addListener((FutureListener>) future -> { - if (future.isSuccess()) { - List addresses = new ArrayList<>(future.getNow().size()); - for (InetSocketAddress address : future.getNow()) { - addresses.add(address.getAddress()); - } - promise.trySuccess(addresses); - } else { - promise.tryFailure(future.cause()); - } - }); - } - - private EventExecutor findExecutor() { - EventExecutor current = ThreadExecutorMap.currentExecutor(); - return current == null ? group.next() : current; - } -} diff --git a/proxy/src/main/java/com/velocitypowered/proxy/network/netty/SeparatePoolInetNameResolver.java b/proxy/src/main/java/com/velocitypowered/proxy/network/netty/SeparatePoolInetNameResolver.java new file mode 100644 index 000000000..859bfa49b --- /dev/null +++ b/proxy/src/main/java/com/velocitypowered/proxy/network/netty/SeparatePoolInetNameResolver.java @@ -0,0 +1,79 @@ +package com.velocitypowered.proxy.network.netty; + +import com.google.common.util.concurrent.ThreadFactoryBuilder; +import io.netty.resolver.AddressResolver; +import io.netty.resolver.AddressResolverGroup; +import io.netty.resolver.DefaultNameResolver; +import io.netty.resolver.InetNameResolver; +import io.netty.util.concurrent.EventExecutor; +import io.netty.util.concurrent.Future; +import io.netty.util.concurrent.Promise; +import java.net.InetAddress; +import java.net.InetSocketAddress; +import java.util.List; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.RejectedExecutionException; + +public final class SeparatePoolInetNameResolver extends InetNameResolver { + + private final ExecutorService resolveExecutor; + private final InetNameResolver delegate; + private AddressResolverGroup resolverGroup; + + /** + * Creates a new instnace of {@code SeparatePoolInetNameResolver}. + * + * @param executor the {@link EventExecutor} which is used to notify the listeners of the {@link + * Future} returned by {@link #resolve(String)} + */ + public SeparatePoolInetNameResolver(EventExecutor executor) { + super(executor); + this.resolveExecutor = Executors.newSingleThreadExecutor( + new ThreadFactoryBuilder() + .setNameFormat("Velocity DNS Resolver") + .setDaemon(true) + .build()); + this.delegate = new DefaultNameResolver(executor); + } + + @Override + protected void doResolve(String inetHost, Promise promise) throws Exception { + try { + resolveExecutor.execute(() -> this.delegate.resolve(inetHost, promise)); + } catch (RejectedExecutionException e) { + promise.setFailure(e); + } + } + + @Override + protected void doResolveAll(String inetHost, Promise> promise) + throws Exception { + try { + resolveExecutor.execute(() -> this.delegate.resolveAll(inetHost, promise)); + } catch (RejectedExecutionException e) { + promise.setFailure(e); + } + } + + public void shutdown() { + this.resolveExecutor.shutdown(); + } + + /** + * Returns a view of this resolver as a AddressResolverGroup. + * + * @return a view of this resolver as a AddressResolverGroup + */ + public AddressResolverGroup asGroup() { + if (this.resolverGroup == null) { + this.resolverGroup = new AddressResolverGroup() { + @Override + protected AddressResolver newResolver(EventExecutor executor) { + return asAddressResolver(); + } + }; + } + return this.resolverGroup; + } +} From cf5f7fa38fc412ba93a9a61ef61a72076ec241af Mon Sep 17 00:00:00 2001 From: Andrew Steinborn Date: Thu, 11 Jun 2020 01:56:41 -0400 Subject: [PATCH 41/44] Fix a typo. --- .../proxy/network/netty/SeparatePoolInetNameResolver.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/proxy/src/main/java/com/velocitypowered/proxy/network/netty/SeparatePoolInetNameResolver.java b/proxy/src/main/java/com/velocitypowered/proxy/network/netty/SeparatePoolInetNameResolver.java index 859bfa49b..8fef724af 100644 --- a/proxy/src/main/java/com/velocitypowered/proxy/network/netty/SeparatePoolInetNameResolver.java +++ b/proxy/src/main/java/com/velocitypowered/proxy/network/netty/SeparatePoolInetNameResolver.java @@ -22,7 +22,7 @@ public final class SeparatePoolInetNameResolver extends InetNameResolver { private AddressResolverGroup resolverGroup; /** - * Creates a new instnace of {@code SeparatePoolInetNameResolver}. + * Creates a new instance of {@code SeparatePoolInetNameResolver}. * * @param executor the {@link EventExecutor} which is used to notify the listeners of the {@link * Future} returned by {@link #resolve(String)} From 9bece076f5ffceebaa27e08b1f5e152a379a4091 Mon Sep 17 00:00:00 2001 From: Andrew Steinborn Date: Thu, 11 Jun 2020 02:08:04 -0400 Subject: [PATCH 42/44] Remove old Checker Framework relics. Proper Checker Framework support needs to wait for a major Velocity version and almost necessities a total refactor, if not rewrite, of Velocity. --- .../velocitypowered/proxy/VelocityServer.java | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/proxy/src/main/java/com/velocitypowered/proxy/VelocityServer.java b/proxy/src/main/java/com/velocitypowered/proxy/VelocityServer.java index 036956882..21b08e3aa 100644 --- a/proxy/src/main/java/com/velocitypowered/proxy/VelocityServer.java +++ b/proxy/src/main/java/com/velocitypowered/proxy/VelocityServer.java @@ -120,12 +120,12 @@ public class VelocityServer implements ProxyServer { } public KeyPair getServerKeyPair() { - return ensureInitialized(serverKeyPair); + return serverKeyPair; } @Override public VelocityConfiguration getConfiguration() { - return ensureInitialized(this.configuration); + return this.configuration; } @Override @@ -229,7 +229,6 @@ public class VelocityServer implements ProxyServer { Metrics.VelocityMetrics.startMetrics(this, configuration.getMetrics()); } - @RequiresNonNull({"pluginManager", "eventManager"}) private void loadPlugins() { logger.info("Loading plugins..."); @@ -443,18 +442,11 @@ public class VelocityServer implements ProxyServer { } public AsyncHttpClient getAsyncHttpClient() { - return ensureInitialized(cm).getHttpClient(); + return cm.getHttpClient(); } public Ratelimiter getIpAttemptLimiter() { - return ensureInitialized(ipAttemptLimiter); - } - - private static T ensureInitialized(T o) { - if (o == null) { - throw new IllegalStateException("The proxy isn't fully initialized."); - } - return o; + return ipAttemptLimiter; } /** From f4bc2ac131a07f068f60ac9ccaf5c56b199a28ad Mon Sep 17 00:00:00 2001 From: Andrew Steinborn Date: Fri, 12 Jun 2020 03:10:25 -0400 Subject: [PATCH 43/44] Regenerate with random secret if not present in velocity.toml. --- .../com/velocitypowered/proxy/config/VelocityConfiguration.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/proxy/src/main/java/com/velocitypowered/proxy/config/VelocityConfiguration.java b/proxy/src/main/java/com/velocitypowered/proxy/config/VelocityConfiguration.java index 3522d1523..921556676 100644 --- a/proxy/src/main/java/com/velocitypowered/proxy/config/VelocityConfiguration.java +++ b/proxy/src/main/java/com/velocitypowered/proxy/config/VelocityConfiguration.java @@ -465,7 +465,7 @@ public class VelocityConfiguration extends AnnotatedConfig implements ProxyConfi Advanced advanced = new Advanced(toml.getTable("advanced")); Query query = new Query(toml.getTable("query")); Metrics metrics = new Metrics(toml.getTable("metrics")); - byte[] forwardingSecret = toml.getString("forwarding-secret", "5up3r53cr3t") + byte[] forwardingSecret = toml.getString("forwarding-secret", generateRandomString(12)) .getBytes(StandardCharsets.UTF_8); String forwardingModeName = toml.getString("player-info-forwarding-mode", "MODERN") From ac4359ad2178229a3ec8372c1271755406554c93 Mon Sep 17 00:00:00 2001 From: Andrew Steinborn Date: Fri, 12 Jun 2020 07:16:43 -0400 Subject: [PATCH 44/44] Clean up ClientPlaySessionHandler#handle(PluginMessage) --- .../client/ClientPlaySessionHandler.java | 126 +++++++++++------- 1 file changed, 75 insertions(+), 51 deletions(-) diff --git a/proxy/src/main/java/com/velocitypowered/proxy/connection/client/ClientPlaySessionHandler.java b/proxy/src/main/java/com/velocitypowered/proxy/connection/client/ClientPlaySessionHandler.java index b473e8712..d6caef413 100644 --- a/proxy/src/main/java/com/velocitypowered/proxy/connection/client/ClientPlaySessionHandler.java +++ b/proxy/src/main/java/com/velocitypowered/proxy/connection/client/ClientPlaySessionHandler.java @@ -170,59 +170,45 @@ public class ClientPlaySessionHandler implements MinecraftSessionHandler { public boolean handle(PluginMessage packet) { VelocityServerConnection serverConn = player.getConnectedServer(); MinecraftConnection backendConn = serverConn != null ? serverConn.getConnection() : null; - if (serverConn != null && backendConn != null) { - if (backendConn.getState() != StateRegistry.PLAY) { - logger.warn("A plugin message was received while the backend server was not " - + "ready. Channel: {}. Packet discarded.", packet.getChannel()); - } else if (PluginMessageUtil.isRegister(packet)) { - player.getKnownChannels().addAll(PluginMessageUtil.getChannels(packet)); - backendConn.write(packet.retain()); - } else if (PluginMessageUtil.isUnregister(packet)) { - player.getKnownChannels().removeAll(PluginMessageUtil.getChannels(packet)); - backendConn.write(packet.retain()); - } else if (PluginMessageUtil.isMcBrand(packet)) { - backendConn.write(PluginMessageUtil - .rewriteMinecraftBrand(packet, server.getVersion(), player.getProtocolVersion())); - } else { - if (serverConn.getPhase() == BackendConnectionPhases.IN_TRANSITION) { - // We must bypass the currently-connected server when forwarding Forge packets. - VelocityServerConnection inFlight = player.getConnectionInFlight(); - if (inFlight != null) { - player.getPhase().handle(player, packet, inFlight); - } - return true; - } - - if (!player.getPhase().handle(player, packet, serverConn)) { - if (!player.getPhase().consideredComplete() || !serverConn.getPhase() - .consideredComplete()) { - // The client is trying to send messages too early. This is primarily caused by mods, - // but further aggravated by Velocity. To work around these issues, we will queue any - // non-FML handshake messages to be sent once the FML handshake has completed or the - // JoinGame packet has been received by the proxy, whichever comes first. - // - // We also need to make sure to retain these packets so they can be flushed - // appropriately. - loginPluginMessages.add(packet.retain()); - } else { - ChannelIdentifier id = server.getChannelRegistrar().getFromId(packet.getChannel()); - if (id == null) { - backendConn.write(packet.retain()); - } else { - byte[] copy = ByteBufUtil.getBytes(packet.content()); - PluginMessageEvent event = new PluginMessageEvent(player, serverConn, id, - ByteBufUtil.getBytes(packet.content())); - server.getEventManager().fire(event).thenAcceptAsync(pme -> { - PluginMessage message = new PluginMessage(packet.getChannel(), - Unpooled.wrappedBuffer(copy)); - backendConn.write(message); - }, backendConn.eventLoop()); - } - } - } - } + if (serverConn == null || backendConn == null) { + return true; } + if (backendConn.getState() != StateRegistry.PLAY) { + logger.warn("A plugin message was received while the backend server was not " + + "ready. Channel: {}. Packet discarded.", packet.getChannel()); + return true; + } + + if (this.tryHandleVanillaPluginMessageChannel(packet, backendConn)) { + return true; + } + + if (serverConn.getPhase() == BackendConnectionPhases.IN_TRANSITION) { + // We must bypass the currently-connected server when forwarding Forge packets. + VelocityServerConnection inFlight = player.getConnectionInFlight(); + if (inFlight != null) { + if (player.getPhase().handle(player, packet, inFlight)) { + return true; + } + } + } else if (!this.tryHandleForgeMessage(packet, serverConn)) { + return true; + } + + ChannelIdentifier id = server.getChannelRegistrar().getFromId(packet.getChannel()); + if (id == null) { + backendConn.write(packet.retain()); + } else { + byte[] copy = ByteBufUtil.getBytes(packet.content()); + PluginMessageEvent event = new PluginMessageEvent(player, serverConn, id, + ByteBufUtil.getBytes(packet.content())); + server.getEventManager().fire(event).thenAcceptAsync(pme -> { + PluginMessage message = new PluginMessage(packet.getChannel(), + Unpooled.wrappedBuffer(copy)); + backendConn.write(message); + }, backendConn.eventLoop()); + } return true; } @@ -293,6 +279,44 @@ public class ClientPlaySessionHandler implements MinecraftSessionHandler { } } + private boolean tryHandleVanillaPluginMessageChannel(PluginMessage packet, + MinecraftConnection backendConn) { + if (PluginMessageUtil.isRegister(packet)) { + player.getKnownChannels().addAll(PluginMessageUtil.getChannels(packet)); + backendConn.write(packet.retain()); + return true; + } else if (PluginMessageUtil.isUnregister(packet)) { + player.getKnownChannels().removeAll(PluginMessageUtil.getChannels(packet)); + backendConn.write(packet.retain()); + return true; + } else if (PluginMessageUtil.isMcBrand(packet)) { + backendConn.write(PluginMessageUtil.rewriteMinecraftBrand(packet, server.getVersion(), + player.getProtocolVersion())); + return true; + } + return false; + } + + private boolean tryHandleForgeMessage(PluginMessage packet, VelocityServerConnection serverConn) { + if (player.getPhase().handle(player, packet, serverConn)) { + return true; + } + + if (!player.getPhase().consideredComplete() || !serverConn.getPhase().consideredComplete()) { + // The client is trying to send messages too early. This is primarily caused by mods, + // but further aggravated by Velocity. To work around these issues, we will queue any + // non-FML handshake messages to be sent once the FML handshake has completed or the + // JoinGame packet has been received by the proxy, whichever comes first. + // + // We also need to make sure to retain these packets so they can be flushed + // appropriately. + loginPluginMessages.add(packet.retain()); + return true; + } else { + return false; + } + } + /** * Handles the {@code JoinGame} packet. This function is responsible for handling the client-side * switching servers in Velocity.