86 lines
4.2 KiB
Diff
86 lines
4.2 KiB
Diff
|
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
|
||
|
|