67 Zeilen
4.2 KiB
Diff
67 Zeilen
4.2 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 a62f151047f90ef1db278192b29b3bd3213d4d46..fb98936bb8a5488db75d676c5bcb4060597fbbf8 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.4")
|
|
diff --git a/src/main/java/net/minecraft/server/network/ServerConnectionListener.java b/src/main/java/net/minecraft/server/network/ServerConnectionListener.java
|
|
index 2beddfc0532c3835d50724551e3d46cb0d7d2290..44d99e89226adb6234b9405f25ac9dab9bd84297 100644
|
|
--- a/src/main/java/net/minecraft/server/network/ServerConnectionListener.java
|
|
+++ b/src/main/java/net/minecraft/server/network/ServerConnectionListener.java
|
|
@@ -108,6 +108,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) {
|
|
try {
|
|
@@ -123,6 +129,30 @@ public class ServerConnectionListener {
|
|
int j = ServerConnectionListener.this.server.getRateLimitPacketsPerSecond();
|
|
Connection object = j > 0 ? new RateKickingConnection(j) : new Connection(PacketFlow.SERVERBOUND); // CraftBukkit - decompile error
|
|
|
|
+ // 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
|
|
+
|
|
//ServerConnectionListener.this.connections.add(object);
|
|
pending.add(object); // Paper
|
|
channelpipeline.addLast("packet_handler", (ChannelHandler) object);
|