From 2955e7fb79cc4a078a7290263cf86e2da94381f8 Mon Sep 17 00:00:00 2001 From: LinsaFTW <25271111+linsaftw@users.noreply.github.com> Date: Fri, 25 Feb 2022 12:28:31 -0300 Subject: [PATCH] InitialHandler Processing State 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 d1a06397..0a09f92c 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 @@ -130,12 +130,12 @@ public class InitialHandler extends PacketHandler implements PendingConnection private enum State { - HANDSHAKE, STATUS, PING, USERNAME, ENCRYPT, FINISHING; + PROCESSING, PROCESSING_USERNAME, HANDSHAKE, STATUS, PING, USERNAME, ENCRYPT, FINISHING; } private boolean canSendKickMessage() { - return thisState == State.USERNAME || thisState == State.ENCRYPT || thisState == State.FINISHING; + return thisState == State.PROCESSING_USERNAME || thisState == State.USERNAME || thisState == State.ENCRYPT || thisState == State.FINISHING; } @Override @@ -250,6 +250,7 @@ public class InitialHandler extends PacketHandler implements PendingConnection public void handle(StatusRequest statusRequest) throws Exception { Preconditions.checkState( thisState == State.STATUS, "Not expecting STATUS" ); + thisState = State.PROCESSING; ServerInfo forced = AbstractReconnectHandler.getForcedHost( this ); final int protocol = ( ProtocolConstants.SUPPORTED_VERSION_IDS.contains( handshake.getProtocolVersion() ) ) ? handshake.getProtocolVersion() : bungee.getProtocolVersion(); @@ -372,6 +373,7 @@ public class InitialHandler extends PacketHandler implements PendingConnection { // FlameCord - Never accept invalid packets Preconditions.checkState( thisState == State.PING, "Not expecting PING" ); + thisState = State.PROCESSING; unsafe.sendPacket( ping ); @@ -383,6 +385,7 @@ public class InitialHandler extends PacketHandler implements PendingConnection public void handle(Handshake handshake) throws Exception { Preconditions.checkState( thisState == State.HANDSHAKE, "Not expecting HANDSHAKE" ); + thisState = State.PROCESSING; this.handshake = handshake; ch.setVersion( handshake.getProtocolVersion() ); @@ -455,6 +458,7 @@ public class InitialHandler extends PacketHandler implements PendingConnection public void handle(LoginRequest loginRequest) throws Exception { Preconditions.checkState( thisState == State.USERNAME, "Not expecting USERNAME" ); + thisState = State.PROCESSING_USERNAME; if ( !AllowedCharacters.isValidName( loginRequest.getData(), onlineMode ) ) { @@ -513,6 +517,7 @@ public class InitialHandler extends PacketHandler implements PendingConnection public void handle(final EncryptionResponse encryptResponse) throws Exception { Preconditions.checkState( thisState == State.ENCRYPT, "Not expecting ENCRYPT" ); + thisState = State.PROCESSING; SecretKey sharedKey = EncryptionUtil.getSecret( encryptResponse, request ); // Waterfall start @@ -740,14 +745,14 @@ public class InitialHandler extends PacketHandler implements PendingConnection @Override public void setOnlineMode(boolean onlineMode) { - Preconditions.checkState( thisState == State.USERNAME, "Can only set online mode status whilst state is username" ); + Preconditions.checkState( thisState == State.USERNAME || thisState == State.PROCESSING_USERNAME, "Can only set online mode status whilst state is username" ); this.onlineMode = onlineMode; } @Override public void setUniqueId(UUID uuid) { - Preconditions.checkState( thisState == State.USERNAME, "Can only set uuid while state is username" ); + Preconditions.checkState( thisState == State.USERNAME || thisState == State.PROCESSING_USERNAME, "Can only set uuid while state is username" ); // FlameCord - Allow custom uuids even if onlineMode is true this.uniqueId = uuid; } -- 2.32.0