Waterfall/Waterfall-Proxy-Patches/0010-Close-connections-Don-t-flush-if-not-necessary.patch

180 lines
7.3 KiB
Diff
Raw Normal View History

2021-11-30 15:50:10 +01:00
From 7c85f2aea606560d42e89e74c5f59feec583114c Mon Sep 17 00:00:00 2001
2020-12-16 11:14:44 +01:00
From: foss-mc <69294560+foss-mc@users.noreply.github.com>
Date: Wed, 16 Dec 2020 18:06:17 +0800
2020-12-16 11:30:39 +01:00
Subject: [PATCH] Close connections & Don't flush if not necessary
2020-12-16 11:14:44 +01:00
diff --git a/proxy/src/main/java/net/md_5/bungee/connection/InitialHandler.java b/proxy/src/main/java/net/md_5/bungee/connection/InitialHandler.java
2021-11-30 15:50:10 +01:00
index 23571d40..1ec75614 100644
2020-12-16 11:14:44 +01:00
--- a/proxy/src/main/java/net/md_5/bungee/connection/InitialHandler.java
+++ b/proxy/src/main/java/net/md_5/bungee/connection/InitialHandler.java
2021-11-30 15:50:10 +01:00
@@ -195,6 +195,13 @@ public class InitialHandler extends PacketHandler implements PendingConnection
2020-12-16 11:14:44 +01:00
}
ServerPing legacy = result.getResponse();
+
+ // FlameCord - Close and return if legacy == null
+ if (legacy == null) {
+ ch.close();
+ return;
+ }
+
String kickMessage;
if ( v1_5 )
2021-11-30 15:50:10 +01:00
@@ -260,6 +267,17 @@ public class InitialHandler extends PacketHandler implements PendingConnection
2021-06-09 01:33:36 +02:00
@Override
public void done(ProxyPingEvent pingResult, Throwable error)
{
2020-12-16 11:14:44 +01:00
+ // FlameCord - Close if response is null
+ if (pingResult.getResponse() == null) {
+ ch.close();
+ return;
2021-10-01 03:27:34 +02:00
+ }
+
+ // FlameCord - Return if connection is closed
+ if (ch.isClosed()) {
2020-12-16 11:14:44 +01:00
+ return;
+ }
+
2021-10-01 03:27:34 +02:00
// FlameCord start - 1.7.x support
Gson gson = handshake.getProtocolVersion() == ProtocolConstants.MINECRAFT_1_7_2 ? BungeeCord.getInstance().gsonLegacy : BungeeCord.getInstance().gson;
if ( ProtocolConstants.isBeforeOrEq( handshake.getProtocolVersion() , ProtocolConstants.MINECRAFT_1_8 ) )
2021-11-30 15:50:10 +01:00
@@ -304,11 +322,13 @@ public class InitialHandler extends PacketHandler implements PendingConnection
2020-12-16 11:14:44 +01:00
@Override
public void handle(PingPacket ping) throws Exception
{
- if (!ACCEPT_INVALID_PACKETS) {
- Preconditions.checkState(thisState == State.PING, "Not expecting PING");
- }
+ // FlameCord - Never accept invalid packets
2021-06-09 01:33:36 +02:00
+ Preconditions.checkState( thisState == State.PING, "Not expecting PING" );
+
2020-12-16 11:14:44 +01:00
unsafe.sendPacket( ping );
- disconnect( "" );
2021-06-09 01:33:36 +02:00
+
2020-12-16 11:14:44 +01:00
+ // FlameCord - Close instead of disconnect
+ ch.close();
}
@Override
2021-11-30 15:50:10 +01:00
@@ -617,7 +637,8 @@ public class InitialHandler extends PacketHandler implements PendingConnection
2020-12-16 11:30:39 +01:00
{
if ( canSendKickMessage() )
{
- ch.delayedClose( new Kick( ComponentSerializer.toString( reason ) ) );
+ // FlameCord - Changed delayedClose to close
+ ch.close( new Kick( ComponentSerializer.toString( reason ) ) );
} else
{
ch.close();
diff --git a/proxy/src/main/java/net/md_5/bungee/netty/ChannelWrapper.java b/proxy/src/main/java/net/md_5/bungee/netty/ChannelWrapper.java
2021-11-30 15:50:10 +01:00
index 6dc5633f..5c05f2b9 100644
2020-12-16 11:30:39 +01:00
--- a/proxy/src/main/java/net/md_5/bungee/netty/ChannelWrapper.java
+++ b/proxy/src/main/java/net/md_5/bungee/netty/ChannelWrapper.java
@@ -80,40 +80,27 @@ public class ChannelWrapper
if ( packet != null && ch.isActive() )
{
- ch.writeAndFlush( packet ).addListeners( ChannelFutureListener.FIRE_EXCEPTION_ON_FAILURE, ChannelFutureListener.CLOSE );
+ // FlameCord - Remove the firing of exceptions on failure
+ ch.writeAndFlush( packet ).addListeners( ChannelFutureListener.CLOSE );
} else
{
- ch.flush();
+ // FlameCord - Don't flush just close
ch.close();
}
}
}
+ // FlameCord - Deprecate and "disable" delayedClose because it doesn't have a reason to exist
+ @Deprecated
public void delayedClose(final Kick kick)
{
- if ( !closing )
- {
- closing = true;
-
- // Minecraft client can take some time to switch protocols.
- // Sending the wrong disconnect packet whilst a protocol switch is in progress will crash it.
- // Delay 250ms to ensure that the protocol switch (if any) has definitely taken place.
- ch.eventLoop().schedule( new Runnable()
- {
-
- @Override
- public void run()
- {
- close( kick );
- }
- }, 250, TimeUnit.MILLISECONDS );
- }
+ close(kick);
}
public void addBefore(String baseName, String name, ChannelHandler handler)
{
Preconditions.checkState( ch.eventLoop().inEventLoop(), "cannot add handler outside of event loop" );
- ch.pipeline().flush();
+ // FlameCord - Don't flush if not necessary
ch.pipeline().addBefore( baseName, name, handler );
}
2020-12-16 11:38:57 +01:00
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
2021-11-30 15:50:10 +01:00
index 96704d5e..654203ab 100644
2020-12-16 11:38:57 +01:00
--- a/proxy/src/main/java/net/md_5/bungee/netty/PipelineUtils.java
+++ b/proxy/src/main/java/net/md_5/bungee/netty/PipelineUtils.java
2020-12-16 12:49:20 +01:00
@@ -5,6 +5,7 @@ import io.github.waterfallmc.waterfall.event.ConnectionInitEvent;
import io.netty.buffer.PooledByteBufAllocator;
import io.netty.channel.Channel;
import io.netty.channel.ChannelException;
+import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInitializer;
import io.netty.channel.ChannelOption;
import io.netty.channel.EventLoopGroup;
@@ -102,6 +103,14 @@ public class PipelineUtils
2020-12-16 11:38:57 +01:00
BungeeCord.getInstance().getPluginManager().callEvent(connectionInitEvent);
}
+
+ // FlameCord - Close on exception caught
+ @Override
+ public void exceptionCaught(final ChannelHandlerContext ctx, final Throwable cause) throws Exception {
+ cause.printStackTrace();
+
+ ctx.close();
+ }
};
public static final Base BASE = new Base();
private static final KickStringWriter legacyKicker = new KickStringWriter();
2021-06-09 01:33:36 +02:00
@@ -196,5 +205,13 @@ public class PipelineUtils
ch.pipeline().addLast( BOSS_HANDLER, new HandlerBoss() );
}
+
+ // FlameCord - Close on exception caught
+ @Override
+ public void exceptionCaught(final ChannelHandlerContext ctx, final Throwable cause) throws Exception {
+ cause.printStackTrace();
+
+ ctx.close();
+ }
}
}
2020-12-16 11:14:44 +01:00
diff --git a/query/src/main/java/net/md_5/bungee/query/QueryHandler.java b/query/src/main/java/net/md_5/bungee/query/QueryHandler.java
2021-11-30 15:50:10 +01:00
index 0c1ecfb8..b3bdfd05 100644
2020-12-16 11:14:44 +01:00
--- a/query/src/main/java/net/md_5/bungee/query/QueryHandler.java
+++ b/query/src/main/java/net/md_5/bungee/query/QueryHandler.java
@@ -71,6 +71,8 @@ public class QueryHandler extends SimpleChannelInboundHandler<DatagramPacket>
if ( in.readUnsignedByte() != 0xFE || in.readUnsignedByte() != 0xFD )
{
bungee.getLogger().log( Level.WARNING, "Query - Incorrect magic!: {0}", msg.sender() );
+ // FlameCord - Close on incorrect magic
+ ctx.close();
return;
}
--
2.32.0.windows.1
2020-12-16 11:14:44 +01:00