From 99e4ab22e395afe234223e17243d7b6bd4c7da11 Mon Sep 17 00:00:00 2001 From: Myles Date: Mon, 13 Feb 2017 17:22:52 +0000 Subject: [PATCH 1/3] Only inject channels when server protocol is known #631 --- .../handlers/BukkitChannelInitializer.java | 32 +++++++++++-------- .../handlers/SpongeChannelInitializer.java | 30 ++++++++++------- 2 files changed, 37 insertions(+), 25 deletions(-) diff --git a/bukkit/src/main/java/us/myles/ViaVersion/bukkit/handlers/BukkitChannelInitializer.java b/bukkit/src/main/java/us/myles/ViaVersion/bukkit/handlers/BukkitChannelInitializer.java index a4529ad3a..268eaf72f 100644 --- a/bukkit/src/main/java/us/myles/ViaVersion/bukkit/handlers/BukkitChannelInitializer.java +++ b/bukkit/src/main/java/us/myles/ViaVersion/bukkit/handlers/BukkitChannelInitializer.java @@ -7,6 +7,7 @@ import io.netty.handler.codec.ByteToMessageDecoder; import io.netty.handler.codec.MessageToByteEncoder; import us.myles.ViaVersion.api.data.UserConnection; import us.myles.ViaVersion.api.protocol.ProtocolPipeline; +import us.myles.ViaVersion.api.protocol.ProtocolRegistry; import us.myles.ViaVersion.bukkit.classgenerator.ClassGenerator; import us.myles.ViaVersion.bukkit.classgenerator.HandlerConstructor; @@ -33,20 +34,25 @@ public class BukkitChannelInitializer extends ChannelInitializer @Override protected void initChannel(SocketChannel socketChannel) throws Exception { - UserConnection info = new UserConnection(socketChannel); - // init protocol - new ProtocolPipeline(info); - // Add originals - this.method.invoke(this.original, socketChannel); + // Ensure ViaVersion is loaded + if (ProtocolRegistry.SERVER_PROTOCOL != -1) { + UserConnection info = new UserConnection(socketChannel); + // init protocol + new ProtocolPipeline(info); + // Add originals + this.method.invoke(this.original, socketChannel); - HandlerConstructor constructor = ClassGenerator.getConstructor(); - // Add our transformers - MessageToByteEncoder encoder = constructor.newEncodeHandler(info, (MessageToByteEncoder) socketChannel.pipeline().get("encoder")); - ByteToMessageDecoder decoder = constructor.newDecodeHandler(info, (ByteToMessageDecoder) socketChannel.pipeline().get("decoder")); - BukkitPacketHandler chunkHandler = new BukkitPacketHandler(info); + HandlerConstructor constructor = ClassGenerator.getConstructor(); + // Add our transformers + MessageToByteEncoder encoder = constructor.newEncodeHandler(info, (MessageToByteEncoder) socketChannel.pipeline().get("encoder")); + ByteToMessageDecoder decoder = constructor.newDecodeHandler(info, (ByteToMessageDecoder) socketChannel.pipeline().get("decoder")); + BukkitPacketHandler chunkHandler = new BukkitPacketHandler(info); - socketChannel.pipeline().replace("encoder", "encoder", encoder); - socketChannel.pipeline().replace("decoder", "decoder", decoder); - socketChannel.pipeline().addAfter("packet_handler", "viaversion_packet_handler", chunkHandler); + socketChannel.pipeline().replace("encoder", "encoder", encoder); + socketChannel.pipeline().replace("decoder", "decoder", decoder); + socketChannel.pipeline().addAfter("packet_handler", "viaversion_packet_handler", chunkHandler); + } else { + this.method.invoke(this.original, socketChannel); + } } } diff --git a/sponge/src/main/java/us/myles/ViaVersion/sponge/handlers/SpongeChannelInitializer.java b/sponge/src/main/java/us/myles/ViaVersion/sponge/handlers/SpongeChannelInitializer.java index 88248d769..319f9e26e 100644 --- a/sponge/src/main/java/us/myles/ViaVersion/sponge/handlers/SpongeChannelInitializer.java +++ b/sponge/src/main/java/us/myles/ViaVersion/sponge/handlers/SpongeChannelInitializer.java @@ -7,6 +7,7 @@ import io.netty.handler.codec.ByteToMessageDecoder; import io.netty.handler.codec.MessageToByteEncoder; import us.myles.ViaVersion.api.data.UserConnection; import us.myles.ViaVersion.api.protocol.ProtocolPipeline; +import us.myles.ViaVersion.api.protocol.ProtocolRegistry; import java.lang.reflect.Method; @@ -31,18 +32,23 @@ public class SpongeChannelInitializer extends ChannelInitializer @Override protected void initChannel(SocketChannel socketChannel) throws Exception { - UserConnection info = new UserConnection(socketChannel); - // init protocol - new ProtocolPipeline(info); - // Add originals - this.method.invoke(this.original, socketChannel); - // Add our transformers - MessageToByteEncoder encoder = new SpongeEncodeHandler(info, (MessageToByteEncoder) socketChannel.pipeline().get("encoder")); - ByteToMessageDecoder decoder = new SpongeDecodeHandler(info, (ByteToMessageDecoder) socketChannel.pipeline().get("decoder")); - SpongePacketHandler chunkHandler = new SpongePacketHandler(info); + // Ensure ViaVersion is loaded + if (ProtocolRegistry.SERVER_PROTOCOL != -1) { + UserConnection info = new UserConnection(socketChannel); + // init protocol + new ProtocolPipeline(info); + // Add originals + this.method.invoke(this.original, socketChannel); + // Add our transformers + MessageToByteEncoder encoder = new SpongeEncodeHandler(info, (MessageToByteEncoder) socketChannel.pipeline().get("encoder")); + ByteToMessageDecoder decoder = new SpongeDecodeHandler(info, (ByteToMessageDecoder) socketChannel.pipeline().get("decoder")); + SpongePacketHandler chunkHandler = new SpongePacketHandler(info); - socketChannel.pipeline().replace("encoder", "encoder", encoder); - socketChannel.pipeline().replace("decoder", "decoder", decoder); - socketChannel.pipeline().addAfter("packet_handler", "viaversion_packet_handler", chunkHandler); + socketChannel.pipeline().replace("encoder", "encoder", encoder); + socketChannel.pipeline().replace("decoder", "decoder", decoder); + socketChannel.pipeline().addAfter("packet_handler", "viaversion_packet_handler", chunkHandler); + } else { + this.method.invoke(this.original, socketChannel); + } } } From 40937acfa0f762cb11e55b5d7f8889a0dc4a0ca9 Mon Sep 17 00:00:00 2001 From: Phineas Date: Wed, 15 Feb 2017 18:31:22 +0000 Subject: [PATCH 2/3] Update to 2017 (#632) --- LICENSE | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/LICENSE b/LICENSE index c2288aac4..4ddc63b9a 100644 --- a/LICENSE +++ b/LICENSE @@ -3,7 +3,7 @@ License: MIT License -Copyright (c) 2016 +Copyright (c) 2017 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -21,4 +21,4 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. \ No newline at end of file +SOFTWARE. From 3fdbf5b0627d4ad3b756bf6d05f6f652563147aa Mon Sep 17 00:00:00 2001 From: Myles Date: Fri, 17 Feb 2017 14:15:27 +0000 Subject: [PATCH 3/3] Revert previous Server protocol check, add a call to ProtocolRegistry to force class load. --- .../handlers/BukkitChannelInitializer.java | 32 ++++++++----------- .../java/us/myles/ViaVersion/ViaManager.java | 2 ++ 2 files changed, 15 insertions(+), 19 deletions(-) diff --git a/bukkit/src/main/java/us/myles/ViaVersion/bukkit/handlers/BukkitChannelInitializer.java b/bukkit/src/main/java/us/myles/ViaVersion/bukkit/handlers/BukkitChannelInitializer.java index 268eaf72f..a4529ad3a 100644 --- a/bukkit/src/main/java/us/myles/ViaVersion/bukkit/handlers/BukkitChannelInitializer.java +++ b/bukkit/src/main/java/us/myles/ViaVersion/bukkit/handlers/BukkitChannelInitializer.java @@ -7,7 +7,6 @@ import io.netty.handler.codec.ByteToMessageDecoder; import io.netty.handler.codec.MessageToByteEncoder; import us.myles.ViaVersion.api.data.UserConnection; import us.myles.ViaVersion.api.protocol.ProtocolPipeline; -import us.myles.ViaVersion.api.protocol.ProtocolRegistry; import us.myles.ViaVersion.bukkit.classgenerator.ClassGenerator; import us.myles.ViaVersion.bukkit.classgenerator.HandlerConstructor; @@ -34,25 +33,20 @@ public class BukkitChannelInitializer extends ChannelInitializer @Override protected void initChannel(SocketChannel socketChannel) throws Exception { - // Ensure ViaVersion is loaded - if (ProtocolRegistry.SERVER_PROTOCOL != -1) { - UserConnection info = new UserConnection(socketChannel); - // init protocol - new ProtocolPipeline(info); - // Add originals - this.method.invoke(this.original, socketChannel); + UserConnection info = new UserConnection(socketChannel); + // init protocol + new ProtocolPipeline(info); + // Add originals + this.method.invoke(this.original, socketChannel); - HandlerConstructor constructor = ClassGenerator.getConstructor(); - // Add our transformers - MessageToByteEncoder encoder = constructor.newEncodeHandler(info, (MessageToByteEncoder) socketChannel.pipeline().get("encoder")); - ByteToMessageDecoder decoder = constructor.newDecodeHandler(info, (ByteToMessageDecoder) socketChannel.pipeline().get("decoder")); - BukkitPacketHandler chunkHandler = new BukkitPacketHandler(info); + HandlerConstructor constructor = ClassGenerator.getConstructor(); + // Add our transformers + MessageToByteEncoder encoder = constructor.newEncodeHandler(info, (MessageToByteEncoder) socketChannel.pipeline().get("encoder")); + ByteToMessageDecoder decoder = constructor.newDecodeHandler(info, (ByteToMessageDecoder) socketChannel.pipeline().get("decoder")); + BukkitPacketHandler chunkHandler = new BukkitPacketHandler(info); - socketChannel.pipeline().replace("encoder", "encoder", encoder); - socketChannel.pipeline().replace("decoder", "decoder", decoder); - socketChannel.pipeline().addAfter("packet_handler", "viaversion_packet_handler", chunkHandler); - } else { - this.method.invoke(this.original, socketChannel); - } + socketChannel.pipeline().replace("encoder", "encoder", encoder); + socketChannel.pipeline().replace("decoder", "decoder", decoder); + socketChannel.pipeline().addAfter("packet_handler", "viaversion_packet_handler", chunkHandler); } } diff --git a/common/src/main/java/us/myles/ViaVersion/ViaManager.java b/common/src/main/java/us/myles/ViaVersion/ViaManager.java index 60a9254aa..8df0bf6aa 100644 --- a/common/src/main/java/us/myles/ViaVersion/ViaManager.java +++ b/common/src/main/java/us/myles/ViaVersion/ViaManager.java @@ -46,6 +46,8 @@ public class ViaManager { // Check for updates if (platform.getConf().isCheckForUpdates()) UpdateUtil.sendUpdateMessage(); + // Force class load + ProtocolRegistry.getSupportedVersions(); // Inject try { injector.inject();