mirror of
https://github.com/PaperMC/Waterfall.git
synced 2024-12-27 11:07:39 +01:00
189 lines
7.8 KiB
Diff
189 lines
7.8 KiB
Diff
From cdf91cda29d5b69410c130012de20dba5d7da506 Mon Sep 17 00:00:00 2001
|
|
From: foss-mc <69294560+foss-mc@users.noreply.github.com>
|
|
Date: Wed, 16 Dec 2020 18:06:17 +0800
|
|
Subject: [PATCH] Close connections & Don't flush if not necessary
|
|
|
|
|
|
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
|
|
index 5407c20a..e9937428 100644
|
|
--- a/proxy/src/main/java/net/md_5/bungee/connection/InitialHandler.java
|
|
+++ b/proxy/src/main/java/net/md_5/bungee/connection/InitialHandler.java
|
|
@@ -194,6 +194,13 @@ public class InitialHandler extends PacketHandler implements PendingConnection
|
|
}
|
|
|
|
ServerPing legacy = result.getResponse();
|
|
+
|
|
+ // FlameCord - Close and return if legacy == null
|
|
+ if (legacy == null) {
|
|
+ ch.close();
|
|
+ return;
|
|
+ }
|
|
+
|
|
String kickMessage;
|
|
|
|
if ( v1_5 )
|
|
@@ -264,6 +271,16 @@ public class InitialHandler extends PacketHandler implements PendingConnection
|
|
{
|
|
bungee.getConnectionThrottle().unthrottle( getSocketAddress() );
|
|
}
|
|
+
|
|
+ // FlameCord - Close if response is null
|
|
+ // FlameCord - Return if connection is closed
|
|
+ if (pingResult.getResponse() == null) {
|
|
+ ch.close();
|
|
+ return;
|
|
+ } else if (ch.isClosed()) {
|
|
+ return;
|
|
+ }
|
|
+
|
|
// Travertine start
|
|
if ( ProtocolConstants.isBeforeOrEq( handshake.getProtocolVersion() , ProtocolConstants.MINECRAFT_1_8 ) )
|
|
{
|
|
@@ -304,11 +321,11 @@ public class InitialHandler extends PacketHandler implements PendingConnection
|
|
@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
|
|
+ Preconditions.checkState(thisState == State.PING, "Not expecting PING");
|
|
unsafe.sendPacket( ping );
|
|
- disconnect( "" );
|
|
+ // FlameCord - Close instead of disconnect
|
|
+ ch.close();
|
|
}
|
|
|
|
@Override
|
|
@@ -624,7 +641,8 @@ public class InitialHandler extends PacketHandler implements PendingConnection
|
|
{
|
|
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
|
|
index 6dc5633f..5c05f2b9 100644
|
|
--- 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 );
|
|
}
|
|
|
|
diff --git a/proxy/src/main/java/net/md_5/bungee/netty/HandlerBoss.java b/proxy/src/main/java/net/md_5/bungee/netty/HandlerBoss.java
|
|
index 270545f2..b0825e51 100644
|
|
--- a/proxy/src/main/java/net/md_5/bungee/netty/HandlerBoss.java
|
|
+++ b/proxy/src/main/java/net/md_5/bungee/netty/HandlerBoss.java
|
|
@@ -56,7 +56,8 @@ public class HandlerBoss extends ChannelInboundHandlerAdapter
|
|
{
|
|
if ( handler != null )
|
|
{
|
|
- channel.markClosed();
|
|
+ // FlameCord - close instead of markClosed
|
|
+ channel.close();
|
|
handler.disconnected( channel );
|
|
|
|
if ( !( handler instanceof InitialHandler || handler instanceof PingHandler ) )
|
|
@@ -186,8 +187,9 @@ public class HandlerBoss extends ChannelInboundHandlerAdapter
|
|
ProxyServer.getInstance().getLogger().log( Level.SEVERE, handler + " - exception processing exception", ex );
|
|
}
|
|
}
|
|
-
|
|
- ctx.close();
|
|
}
|
|
+
|
|
+ // FlameCord - Close even if the channel isn't active
|
|
+ ctx.close();
|
|
}
|
|
}
|
|
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 96704d5e..4996a7b4 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
|
|
@@ -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
|
|
|
|
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();
|
|
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
|
|
index 0c1ecfb8..b3bdfd05 100644
|
|
--- 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.31.1
|
|
|