geforkt von Mirrors/Paper
e284bb1215
Upstream has released updates that appear to apply and compile correctly. This update has not been tested by PaperMC and as with ANY update, please do your own testing Bukkit Changes: fb23cbb3 Define surefire plugin version d022084a Define ordering for MetadataStoreTest 99a7f6f0 PR-910: Match generic max absorption attribute name style with the rest c7390d71 PR-909: Update tests to JUnit 5 CraftBukkit Changes: f0661c351 PR-1230: Move unstructured PDC NBT serialisation to SNBT 452fcb599 PR-1256: Update tests to JUnit 5
66 Zeilen
4.3 KiB
Diff
66 Zeilen
4.3 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: PanSzelescik <panszelescik@gmail.com>
|
|
Date: Thu, 7 Apr 2022 16:13:39 +0200
|
|
Subject: [PATCH] Add support for Proxy Protocol
|
|
|
|
|
|
diff --git a/build.gradle.kts b/build.gradle.kts
|
|
index 98bed6bb990ecb40be0e2b74ad40f84ab0ba3705..f1ade7432ae6fae1bceb90f975448ab43543942f 100644
|
|
--- a/build.gradle.kts
|
|
+++ b/build.gradle.kts
|
|
@@ -30,6 +30,7 @@ dependencies {
|
|
log4jPlugins.annotationProcessorConfigurationName("org.apache.logging.log4j:log4j-core:2.19.0") // Paper - Needed to generate meta for our Log4j plugins
|
|
runtimeOnly(log4jPlugins.output)
|
|
alsoShade(log4jPlugins.output)
|
|
+ implementation("io.netty:netty-codec-haproxy:4.1.87.Final") // Paper - Add support for proxy protocol
|
|
// Paper end
|
|
implementation("org.apache.logging.log4j:log4j-iostreams:2.19.0") // Paper - remove exclusion
|
|
implementation("org.ow2.asm:asm:9.5")
|
|
diff --git a/src/main/java/net/minecraft/server/network/ServerConnectionListener.java b/src/main/java/net/minecraft/server/network/ServerConnectionListener.java
|
|
index 54c7f34ba3dc8466223e589702d0c93af8cf52a0..79326308f6126f84a3cbb3d5a33302de048d8a50 100644
|
|
--- a/src/main/java/net/minecraft/server/network/ServerConnectionListener.java
|
|
+++ b/src/main/java/net/minecraft/server/network/ServerConnectionListener.java
|
|
@@ -111,6 +111,12 @@ public class ServerConnectionListener {
|
|
ServerConnectionListener.LOGGER.info("Paper: Using " + com.velocitypowered.natives.util.Natives.cipher.getLoadedVariant() + " cipher from Velocity.");
|
|
// Paper end
|
|
|
|
+ // Paper start - indicate Proxy Protocol usage
|
|
+ if (io.papermc.paper.configuration.GlobalConfiguration.get().proxies.proxyProtocol) {
|
|
+ ServerConnectionListener.LOGGER.info("Paper: Using Proxy Protocol");
|
|
+ }
|
|
+ // Paper end
|
|
+
|
|
this.channels.add(((ServerBootstrap) ((ServerBootstrap) (new ServerBootstrap()).channel(oclass)).childHandler(new ChannelInitializer<Channel>() {
|
|
protected void initChannel(Channel channel) {
|
|
Connection.setInitialProtocolAttributes(channel);
|
|
@@ -129,6 +135,29 @@ public class ServerConnectionListener {
|
|
Connection object = j > 0 ? new RateKickingConnection(j) : new Connection(PacketFlow.SERVERBOUND); // CraftBukkit - decompile error
|
|
|
|
//ServerConnectionListener.this.connections.add(object); // Paper
|
|
+ // Paper start - Add support for Proxy Protocol
|
|
+ if (io.papermc.paper.configuration.GlobalConfiguration.get().proxies.proxyProtocol) {
|
|
+ channel.pipeline().addAfter("timeout", "haproxy-decoder", new io.netty.handler.codec.haproxy.HAProxyMessageDecoder());
|
|
+ channel.pipeline().addAfter("haproxy-decoder", "haproxy-handler", new ChannelInboundHandlerAdapter() {
|
|
+ @Override
|
|
+ public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
|
|
+ if (msg instanceof io.netty.handler.codec.haproxy.HAProxyMessage message) {
|
|
+ if (message.command() == io.netty.handler.codec.haproxy.HAProxyCommand.PROXY) {
|
|
+ String realaddress = message.sourceAddress();
|
|
+ int realport = message.sourcePort();
|
|
+
|
|
+ SocketAddress socketaddr = new java.net.InetSocketAddress(realaddress, realport);
|
|
+
|
|
+ Connection connection = (Connection) channel.pipeline().get("packet_handler");
|
|
+ connection.address = socketaddr;
|
|
+ }
|
|
+ } else {
|
|
+ super.channelRead(ctx, msg);
|
|
+ }
|
|
+ }
|
|
+ });
|
|
+ }
|
|
+ // Paper end
|
|
pending.add(object); // Paper
|
|
((Connection) object).configurePacketHandler(channelpipeline);
|
|
((Connection) object).setListenerForServerboundHandshake(new ServerHandshakePacketListenerImpl(ServerConnectionListener.this.server, (Connection) object));
|