mirror of
https://github.com/PaperMC/Waterfall.git
synced 2024-11-16 07:15:14 +01:00
cca83dfaf6
Upstream has released updates that appears 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: a3ab2bf5 Update checkstyle adee7bd2 Source jar does not need to fork build 7bd8a027 Always print remote IP in InitialHandler 0cf27a09 Update scriptus bf673c5d Add pretty colours to console log levels 2235a323 Optimize ColouredWriter slightly 1dee0490 Don't send/construct redundant kick messages e9ba95b9 Don't log full CorruptedFrameException d3bd7852 #2762: Work correctly with disabled timeout 3ce4132c Switch keepalive queue to ArrayDeque ce2dcaf7 #2763: Fix .DS_Store entry in .gitignore cf72c3a7 Show slow event times in milliseconds cd7a3ab2 #2758: Improve server list ping response where remote ping failed 0a4b9b49 #2752: Configurable connect and ping timeouts
162 lines
6.1 KiB
Diff
162 lines
6.1 KiB
Diff
From 0bc727fa43296b49b9826ca9225a28a90d7f26d8 Mon Sep 17 00:00:00 2001
|
|
From: Shane Freeder <theboyetronic@gmail.com>
|
|
Date: Mon, 25 Nov 2019 19:54:06 +0000
|
|
Subject: [PATCH] Speed up some common exceptions
|
|
|
|
|
|
diff --git a/api/src/main/java/io/github/waterfallmc/waterfall/utils/FastException.java b/api/src/main/java/io/github/waterfallmc/waterfall/utils/FastException.java
|
|
new file mode 100644
|
|
index 00000000..11e103cb
|
|
--- /dev/null
|
|
+++ b/api/src/main/java/io/github/waterfallmc/waterfall/utils/FastException.java
|
|
@@ -0,0 +1,19 @@
|
|
+package io.github.waterfallmc.waterfall.utils;
|
|
+
|
|
+// This is basically a copy of QuietException
|
|
+public class FastException extends RuntimeException {
|
|
+
|
|
+ public FastException(String message) {
|
|
+ super(message);
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public synchronized Throwable initCause(Throwable cause) {
|
|
+ return this;
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public synchronized Throwable fillInStackTrace() {
|
|
+ return this;
|
|
+ }
|
|
+}
|
|
diff --git a/protocol/src/main/java/net/md_5/bungee/protocol/BadPacketException.java b/protocol/src/main/java/net/md_5/bungee/protocol/BadPacketException.java
|
|
index 6c0ef4df..f20104a2 100644
|
|
--- a/protocol/src/main/java/net/md_5/bungee/protocol/BadPacketException.java
|
|
+++ b/protocol/src/main/java/net/md_5/bungee/protocol/BadPacketException.java
|
|
@@ -2,6 +2,7 @@ package net.md_5.bungee.protocol;
|
|
|
|
public class BadPacketException extends RuntimeException
|
|
{
|
|
+ private static final boolean PROCESS_TRACES = Boolean.getBoolean("waterfall.bad-packet-traces");
|
|
|
|
public BadPacketException(String message)
|
|
{
|
|
@@ -12,4 +13,24 @@ public class BadPacketException extends RuntimeException
|
|
{
|
|
super( message, cause );
|
|
}
|
|
+
|
|
+ // Waterfall start
|
|
+ @Override
|
|
+ public Throwable initCause(Throwable cause)
|
|
+ {
|
|
+ if (PROCESS_TRACES) {
|
|
+ return super.initCause(cause);
|
|
+ }
|
|
+ return this;
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public Throwable fillInStackTrace()
|
|
+ {
|
|
+ if (PROCESS_TRACES) {
|
|
+ return super.fillInStackTrace();
|
|
+ }
|
|
+ return this;
|
|
+ }
|
|
+ // Waterfall end
|
|
}
|
|
diff --git a/protocol/src/main/java/net/md_5/bungee/protocol/DefinedPacket.java b/protocol/src/main/java/net/md_5/bungee/protocol/DefinedPacket.java
|
|
index 9951c1f9..e56bfccb 100644
|
|
--- a/protocol/src/main/java/net/md_5/bungee/protocol/DefinedPacket.java
|
|
+++ b/protocol/src/main/java/net/md_5/bungee/protocol/DefinedPacket.java
|
|
@@ -145,13 +145,18 @@ public abstract class DefinedPacket
|
|
byte in;
|
|
while ( true )
|
|
{
|
|
+ // Waterfall start
|
|
+ if (input.readableBytes() == 0) {
|
|
+ throw new BadPacketException("No more bytes reading varint");
|
|
+ }
|
|
+ // Waterfall end
|
|
in = input.readByte();
|
|
|
|
out |= ( in & 0x7F ) << ( bytes++ * 7 );
|
|
|
|
if ( bytes > maxBytes )
|
|
{
|
|
- throw new RuntimeException( "VarInt too big" );
|
|
+ throw new BadPacketException( "VarInt too big" );
|
|
}
|
|
|
|
if ( ( in & 0x80 ) != 0x80 )
|
|
diff --git a/protocol/src/main/java/net/md_5/bungee/protocol/FastDecoderException.java b/protocol/src/main/java/net/md_5/bungee/protocol/FastDecoderException.java
|
|
new file mode 100644
|
|
index 00000000..2583aa2c
|
|
--- /dev/null
|
|
+++ b/protocol/src/main/java/net/md_5/bungee/protocol/FastDecoderException.java
|
|
@@ -0,0 +1,26 @@
|
|
+package net.md_5.bungee.protocol;
|
|
+
|
|
+import io.netty.handler.codec.DecoderException;
|
|
+
|
|
+public class FastDecoderException extends DecoderException {
|
|
+
|
|
+ public FastDecoderException(String message, Throwable cause) {
|
|
+ super(message, cause);
|
|
+ }
|
|
+
|
|
+ public FastDecoderException(String message) {
|
|
+ super(message);
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public Throwable initCause(Throwable cause)
|
|
+ {
|
|
+ return this;
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public Throwable fillInStackTrace()
|
|
+ {
|
|
+ return this;
|
|
+ }
|
|
+}
|
|
diff --git a/protocol/src/main/java/net/md_5/bungee/protocol/MinecraftDecoder.java b/protocol/src/main/java/net/md_5/bungee/protocol/MinecraftDecoder.java
|
|
index 71ddf022..6c3c7ab8 100644
|
|
--- a/protocol/src/main/java/net/md_5/bungee/protocol/MinecraftDecoder.java
|
|
+++ b/protocol/src/main/java/net/md_5/bungee/protocol/MinecraftDecoder.java
|
|
@@ -71,7 +71,7 @@ public class MinecraftDecoder extends MessageToMessageDecoder<ByteBuf>
|
|
} else {
|
|
packetTypeStr = "unknown";
|
|
}
|
|
- throw new DecoderException("Error decoding packet " + packetTypeStr + " with contents:\n" + ByteBufUtil.prettyHexDump(slice), e);
|
|
+ throw new FastDecoderException("Error decoding packet " + packetTypeStr + " with contents:\n" + ByteBufUtil.prettyHexDump(slice), e); // Waterfall
|
|
} finally
|
|
{
|
|
if ( slice != null )
|
|
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 ac99d02c..0c1ecfb8 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
|
|
@@ -32,6 +32,7 @@ public class QueryHandler extends SimpleChannelInboundHandler<DatagramPacket>
|
|
/*========================================================================*/
|
|
private final Random random = new Random();
|
|
private final Cache<InetAddress, QuerySession> sessions = CacheBuilder.newBuilder().expireAfterWrite( 30, TimeUnit.SECONDS ).build();
|
|
+ private static io.github.waterfallmc.waterfall.utils.FastException cachedNoSessionException = new io.github.waterfallmc.waterfall.utils.FastException("No Session!");
|
|
|
|
private void writeShort(ByteBuf buf, int s)
|
|
{
|
|
@@ -96,7 +97,7 @@ public class QueryHandler extends SimpleChannelInboundHandler<DatagramPacket>
|
|
QuerySession session = sessions.getIfPresent( msg.sender().getAddress() );
|
|
if ( session == null || session.getToken() != challengeToken )
|
|
{
|
|
- throw new IllegalStateException( "No session!" );
|
|
+ throw cachedNoSessionException; // Waterfall
|
|
}
|
|
|
|
// Waterfall start
|
|
--
|
|
2.25.0
|
|
|