From 70caa3cd0abd26c2393d22c6080c48cabc0eae2d Mon Sep 17 00:00:00 2001 From: Tad Hunt Date: Sun, 25 Sep 2022 15:24:22 -0600 Subject: [PATCH 1/4] handle floodgate stuff in login packets --- .gitignore | 11 +++- .../loohp/limbo/network/ClientConnection.java | 60 +++++++++++++++++-- 2 files changed, 64 insertions(+), 7 deletions(-) diff --git a/.gitignore b/.gitignore index 405b278..94e3144 100644 --- a/.gitignore +++ b/.gitignore @@ -11,4 +11,13 @@ target/ # Eclipse .classpath .project -.settings/ \ No newline at end of file +.settings/ + +Loohp-Limbo.jar +Loohp-Limbo-*.jar +internal_data/ +logs/ +permission.yml +plugins/ +server.properties + diff --git a/src/main/java/com/loohp/limbo/network/ClientConnection.java b/src/main/java/com/loohp/limbo/network/ClientConnection.java index 1d7ef3f..9c7e4c0 100644 --- a/src/main/java/com/loohp/limbo/network/ClientConnection.java +++ b/src/main/java/com/loohp/limbo/network/ClientConnection.java @@ -119,6 +119,8 @@ import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicLong; import java.util.stream.Collectors; import java.util.stream.Stream; +import java.io.StringWriter; +import java.io.PrintWriter; public class ClientConnection extends Thread { @@ -362,15 +364,57 @@ public class ClientConnection extends Thread { if (isBungeecord || isBungeeGuard) { try { String[] data = bungeeForwarding.split("\\x00"); - //String host = data[0]; - String ip = data[1]; + String host = ""; + String floodgate = ""; + String clientIp = ""; + String bungee = ""; + String skinData = ""; + int state = 0; + for(int i = 0; i < data.length; i++) { + Limbo.getInstance().getConsole().sendMessage(String.valueOf(i) + ": " + data[i]); + switch(state) { + default: + Limbo.getInstance().getConsole().sendMessage(String.valueOf(i) + ": ignore data: State: " + String.valueOf(state)); + break; + case 0: + host = data[i]; + state = 1; + break; + case 1: + if(data[i].startsWith("^Floodgate^")) { + floodgate = data[i]; + state = 2; + break; + } + /* fallthrough */ + case 2: + clientIp = data[i]; + state = 3; + break; + case 3: + bungee = data[i]; + state = 4; + break; + case 4: + skinData = data[i]; + state = 6; + break; + } + } - bungeeUUID = UUID.fromString(data[2].replaceFirst("([0-9a-fA-F]{8})([0-9a-fA-F]{4})([0-9a-fA-F]{4})([0-9a-fA-F]{4})([0-9a-fA-F]+)", "$1-$2-$3-$4-$5")); - inetAddress = InetAddress.getByName(ip); + Limbo.getInstance().getConsole().sendMessage("Host: " + host); + Limbo.getInstance().getConsole().sendMessage("Floodgate: " + floodgate); + Limbo.getInstance().getConsole().sendMessage("clientIp: " + clientIp); + Limbo.getInstance().getConsole().sendMessage("bungee: " + bungee); + Limbo.getInstance().getConsole().sendMessage("skinData: " + skinData); + + bungeeUUID = UUID.fromString(bungee.replaceFirst("([0-9a-fA-F]{8})([0-9a-fA-F]{4})([0-9a-fA-F]{4})([0-9a-fA-F]{4})([0-9a-fA-F]+)", "$1-$2-$3-$4-$5")); + inetAddress = InetAddress.getByName(clientIp); boolean bungeeGuardFound = false; - if (data.length > 3) { - JSONArray skinJson = (JSONArray) new JSONParser().parse(data[3]); + + if (skinData != "") { + JSONArray skinJson = (JSONArray) new JSONParser().parse(skinData); for (Object obj : skinJson) { JSONObject property = (JSONObject) obj; @@ -390,6 +434,10 @@ public class ClientConnection extends Thread { break; } } catch (Exception e) { + StringWriter sw = new StringWriter(); + PrintWriter pw = new PrintWriter(sw); + e.printStackTrace(pw); + Limbo.getInstance().getConsole().sendMessage(sw.toString()); Limbo.getInstance().getConsole().sendMessage("If you wish to use bungeecord's IP forwarding, please enable that in your bungeecord config.yml as well!"); disconnectDuringLogin(new BaseComponent[] {new TextComponent(ChatColor.RED + "Please connect from the proxy!")}); } From 39d90d79ff651faa1f2ccd32d4a5317818f0d696 Mon Sep 17 00:00:00 2001 From: Tad Hunt Date: Thu, 29 Sep 2022 15:25:28 -0600 Subject: [PATCH 2/4] revert extraneous .gitignore changes --- .gitignore | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/.gitignore b/.gitignore index 94e3144..405b278 100644 --- a/.gitignore +++ b/.gitignore @@ -11,13 +11,4 @@ target/ # Eclipse .classpath .project -.settings/ - -Loohp-Limbo.jar -Loohp-Limbo-*.jar -internal_data/ -logs/ -permission.yml -plugins/ -server.properties - +.settings/ \ No newline at end of file From a1ba8fc0b1772130ed02237b9ca1efb49c8b5511 Mon Sep 17 00:00:00 2001 From: Tad Hunt Date: Thu, 29 Sep 2022 16:08:15 -0600 Subject: [PATCH 3/4] conditionalize debug messages on debug flag --- .../loohp/limbo/network/ClientConnection.java | 33 ++++++++++++------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/loohp/limbo/network/ClientConnection.java b/src/main/java/com/loohp/limbo/network/ClientConnection.java index 9c7e4c0..f89fe2a 100644 --- a/src/main/java/com/loohp/limbo/network/ClientConnection.java +++ b/src/main/java/com/loohp/limbo/network/ClientConnection.java @@ -362,6 +362,7 @@ public class ClientConnection extends Thread { state = ClientState.LOGIN; if (isBungeecord || isBungeeGuard) { + ServerProperties properties = Limbo.getInstance().getServerProperties(); try { String[] data = bungeeForwarding.split("\\x00"); String host = ""; @@ -370,8 +371,11 @@ public class ClientConnection extends Thread { String bungee = ""; String skinData = ""; int state = 0; - for(int i = 0; i < data.length; i++) { - Limbo.getInstance().getConsole().sendMessage(String.valueOf(i) + ": " + data[i]); + for (int i = 0; i < data.length; i++) { + if (!properties.isReducedDebugInfo()) { + Limbo.getInstance().getConsole().sendMessage(String.valueOf(i) + ": " + data[i]); + } + switch(state) { default: Limbo.getInstance().getConsole().sendMessage(String.valueOf(i) + ": ignore data: State: " + String.valueOf(state)); @@ -401,12 +405,17 @@ public class ClientConnection extends Thread { break; } } + if (state != 6) { + throw new IllegalStateException("Illegal bungee state: " + String.valueOf(state)); + } - Limbo.getInstance().getConsole().sendMessage("Host: " + host); - Limbo.getInstance().getConsole().sendMessage("Floodgate: " + floodgate); - Limbo.getInstance().getConsole().sendMessage("clientIp: " + clientIp); - Limbo.getInstance().getConsole().sendMessage("bungee: " + bungee); - Limbo.getInstance().getConsole().sendMessage("skinData: " + skinData); + if (!properties.isReducedDebugInfo()) { + Limbo.getInstance().getConsole().sendMessage("Host: " + host); + Limbo.getInstance().getConsole().sendMessage("Floodgate: " + floodgate); + Limbo.getInstance().getConsole().sendMessage("clientIp: " + clientIp); + Limbo.getInstance().getConsole().sendMessage("bungee: " + bungee); + Limbo.getInstance().getConsole().sendMessage("skinData: " + skinData); + } bungeeUUID = UUID.fromString(bungee.replaceFirst("([0-9a-fA-F]{8})([0-9a-fA-F]{4})([0-9a-fA-F]{4})([0-9a-fA-F]{4})([0-9a-fA-F]+)", "$1-$2-$3-$4-$5")); inetAddress = InetAddress.getByName(clientIp); @@ -434,10 +443,12 @@ public class ClientConnection extends Thread { break; } } catch (Exception e) { - StringWriter sw = new StringWriter(); - PrintWriter pw = new PrintWriter(sw); - e.printStackTrace(pw); - Limbo.getInstance().getConsole().sendMessage(sw.toString()); + if (!properties.isReducedDebugInfo()) { + StringWriter sw = new StringWriter(); + PrintWriter pw = new PrintWriter(sw); + e.printStackTrace(pw); + Limbo.getInstance().getConsole().sendMessage(sw.toString()); + } Limbo.getInstance().getConsole().sendMessage("If you wish to use bungeecord's IP forwarding, please enable that in your bungeecord config.yml as well!"); disconnectDuringLogin(new BaseComponent[] {new TextComponent(ChatColor.RED + "Please connect from the proxy!")}); } From 23dfbd0df2cf10fe502c4d6d04996213b4fa9295 Mon Sep 17 00:00:00 2001 From: Tad Hunt Date: Fri, 30 Sep 2022 08:27:14 -0600 Subject: [PATCH 4/4] fix whitespace --- src/main/java/com/loohp/limbo/network/ClientConnection.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/loohp/limbo/network/ClientConnection.java b/src/main/java/com/loohp/limbo/network/ClientConnection.java index 4f36f59..52f0078 100644 --- a/src/main/java/com/loohp/limbo/network/ClientConnection.java +++ b/src/main/java/com/loohp/limbo/network/ClientConnection.java @@ -376,7 +376,7 @@ public class ClientConnection extends Thread { Limbo.getInstance().getConsole().sendMessage(String.valueOf(i) + ": " + data[i]); } - switch(state) { + switch (state) { default: Limbo.getInstance().getConsole().sendMessage(String.valueOf(i) + ": ignore data: State: " + String.valueOf(state)); break; @@ -385,7 +385,7 @@ public class ClientConnection extends Thread { state = 1; break; case 1: - if(data[i].startsWith("^Floodgate^")) { + if (data[i].startsWith("^Floodgate^")) { floodgate = data[i]; state = 2; break;