From 2a7aa1905bc972bcd50ed625d9e9a0c653e5b5bb Mon Sep 17 00:00:00 2001 From: Kamron Batman <3953314+kamronbatman@users.noreply.github.com> Date: Thu, 19 Sep 2024 18:25:30 -0700 Subject: [PATCH] fix: Fixes edge cases with the network packet loop (#1959) --- Projects/Server/Network/NetState/NetState.cs | 15 ++++++++++----- .../Network/Packets/IncomingAccountPackets.cs | 1 - 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/Projects/Server/Network/NetState/NetState.cs b/Projects/Server/Network/NetState/NetState.cs index ad676c5fd..172be42aa 100755 --- a/Projects/Server/Network/NetState/NetState.cs +++ b/Projects/Server/Network/NetState/NetState.cs @@ -591,7 +591,7 @@ public void HandleReceive(bool throttled = false) if (newSeed == 0) { - HandleError(0, 0); + Disconnect(string.Empty); return; } @@ -602,16 +602,16 @@ public void HandleReceive(bool throttled = false) _parserState = ParserState.AwaitingNextPacket; _protocolState = ProtocolState.GameServer_AwaitingGameServerLogin; } - else + else // Don't allow partial packets on initial connection, just disconnect them. { - _parserState = ParserState.AwaitingPartialPacket; + Disconnect(string.Empty); } break; } case ProtocolState.LoginServer_AwaitingLogin: { - if (packetId != 0xCF && packetId != 0x80) + if (packetId != 0x80) { LogInfo("Possible encrypted client detected, disconnecting..."); HandleError(packetId, packetLength); @@ -659,7 +659,12 @@ public void HandleReceive(bool throttled = false) case ProtocolState.GameServer_AwaitingGameServerLogin: { - if (packetId != 0x91 && packetId != 0x80) + if (packetId == 0x80) + { + goto case ProtocolState.LoginServer_AwaitingLogin; + } + + if (packetId != 0x91) { HandleError(packetId, packetLength); return; diff --git a/Projects/UOContent/Network/Packets/IncomingAccountPackets.cs b/Projects/UOContent/Network/Packets/IncomingAccountPackets.cs index 655a2d64d..099072b36 100644 --- a/Projects/UOContent/Network/Packets/IncomingAccountPackets.cs +++ b/Projects/UOContent/Network/Packets/IncomingAccountPackets.cs @@ -64,7 +64,6 @@ public static unsafe void Configure() IncomingPackets.Register(0x91, &GameLogin, 65, outgameOnly: true); IncomingPackets.Register(0xA0, &PlayServer, 3, outgameOnly: true); IncomingPackets.Register(0xBD, &ClientVersion); - IncomingPackets.Register(0xCF, &AccountLogin, outgameOnly: true); IncomingPackets.Register(0xE1, &ClientType); IncomingPackets.Register(0xEF, &LoginServerSeed, 21, outgameOnly: true); IncomingPackets.Register(0xF8, &CreateCharacter, 106, outgameOnly: true);