Waterfall/BungeeCord-Patches/0049-ConnectionInitEvent.patch
Shane Freeder 25ecd402f3
Updated Upstream (BungeeCord)
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

BungeeCord Changes:
1a807731 #3567: Bump org.apache.maven.plugins:maven-javadoc-plugin from 3.6.2 to 3.6.3
772ad995 #3566: Bump actions/setup-java from 3 to 4
2431c40a #3562: Bump io.netty:netty-bom from 4.1.100.Final to 4.1.101.Final
8144ae8d #3555: Bump com.mysql:mysql-connector-j from 8.1.0 to 8.2.0
0757c39a Attempt upgrade of resolver libraries
2023-12-13 15:18:04 +00:00

124 lines
4.4 KiB
Diff

From 25481b9d5076273cd88202d69c10da6ed9767f5a Mon Sep 17 00:00:00 2001
From: Shane Freeder <theboyetronic@gmail.com>
Date: Mon, 2 Dec 2019 11:35:17 +0000
Subject: [PATCH] ConnectionInitEvent
diff --git a/api/src/main/java/io/github/waterfallmc/waterfall/event/ConnectionInitEvent.java b/api/src/main/java/io/github/waterfallmc/waterfall/event/ConnectionInitEvent.java
new file mode 100644
index 00000000..6e79675f
--- /dev/null
+++ b/api/src/main/java/io/github/waterfallmc/waterfall/event/ConnectionInitEvent.java
@@ -0,0 +1,56 @@
+package io.github.waterfallmc.waterfall.event;
+
+import net.md_5.bungee.api.Callback;
+import net.md_5.bungee.api.config.ListenerInfo;
+import net.md_5.bungee.api.event.AsyncEvent;
+import net.md_5.bungee.api.event.ClientConnectEvent;
+import net.md_5.bungee.api.plugin.Cancellable;
+
+import java.net.InetSocketAddress;
+import java.net.SocketAddress;
+
+import lombok.ToString;
+
+/**
+ * Represents a brand new connection made to the proxy, allowing for plugins to
+ * efficiently close a connection, useful for connection throttlers, etc
+ */
+@ToString
+public class ConnectionInitEvent extends AsyncEvent<ConnectionInitEvent> implements Cancellable {
+
+ private final SocketAddress remoteAddress;
+ private final ListenerInfo listener;
+ private boolean isCancelled = false;
+
+ public ConnectionInitEvent(SocketAddress remoteAddress, ListenerInfo listener, Callback<ConnectionInitEvent> done) {
+ super(done);
+ this.remoteAddress = remoteAddress;
+ this.listener = listener;
+ }
+
+ @Override
+ public boolean isCancelled() {
+ return this.isCancelled;
+ }
+
+ @Override
+ public void setCancelled(boolean cancel) {
+ this.isCancelled = cancel;
+ }
+
+ /**
+ * @return the INetSocketAddress of the connection being opened
+ * @deprecated BungeeCord can accept connections via Unix domain sockets
+ */
+ @Deprecated
+ public InetSocketAddress getRemoteAddress() {
+ return (InetSocketAddress) remoteAddress;
+ }
+
+ /**
+ * @return the SocketAddress of the connection being opened
+ */
+ public SocketAddress getRemoteSocketAddress() {
+ return remoteAddress;
+ }
+}
diff --git a/proxy/src/main/java/net/md_5/bungee/netty/PipelineUtils.java b/proxy/src/main/java/net/md_5/bungee/netty/PipelineUtils.java
index 3f30da0c..af65e192 100644
--- a/proxy/src/main/java/net/md_5/bungee/netty/PipelineUtils.java
+++ b/proxy/src/main/java/net/md_5/bungee/netty/PipelineUtils.java
@@ -1,6 +1,7 @@
package net.md_5.bungee.netty;
import com.google.common.base.Preconditions;
+import io.github.waterfallmc.waterfall.event.ConnectionInitEvent;
import io.netty.buffer.PooledByteBufAllocator;
import io.netty.channel.Channel;
import io.netty.channel.ChannelException;
@@ -63,7 +64,6 @@ public class PipelineUtils
ch.close();
return;
}
-
ListenerInfo listener = ch.attr( LISTENER ).get();
if ( BungeeCord.getInstance().getPluginManager().callEvent( new ClientConnectEvent( remoteAddress, listener ) ).isCancelled() )
@@ -72,7 +72,21 @@ public class PipelineUtils
return;
}
+ ConnectionInitEvent connectionInitEvent = new ConnectionInitEvent(ch.remoteAddress(), listener, (result, throwable) -> { // Waterfall
+
+ if (result.isCancelled()) {
+ ch.close();
+ return;
+ }
+
+
+ try {
BASE.initChannel( ch );
+ } catch (Exception e) {
+ e.printStackTrace();
+ ch.close();
+ return;
+ }
ch.pipeline().addBefore( FRAME_DECODER, LEGACY_DECODER, new LegacyDecoder() );
ch.pipeline().addAfter( FRAME_DECODER, PACKET_DECODER, new MinecraftDecoder( Protocol.HANDSHAKE, true, ProxyServer.getInstance().getProtocolVersion() ) );
ch.pipeline().addAfter( FRAME_PREPENDER, PACKET_ENCODER, new MinecraftEncoder( Protocol.HANDSHAKE, true, ProxyServer.getInstance().getProtocolVersion() ) );
@@ -83,6 +97,9 @@ public class PipelineUtils
{
ch.pipeline().addFirst( new HAProxyMessageDecoder() );
}
+ }); // Waterfall
+
+ BungeeCord.getInstance().getPluginManager().callEvent(connectionInitEvent);
}
};
public static final Base BASE = new Base( false );
--
2.43.0