mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-19 00:48:56 +01:00
Core/PacketIO: Stop WorldSession packet processing loop immediately when AntiDOS kicks/bans the player
(cherry picked from commit 0d0cb23a63)
This commit is contained in:
@@ -344,6 +344,8 @@ bool WorldSession::Update(uint32 diff, PacketFilter& updater)
|
||||
uint32 processedPackets = 0;
|
||||
time_t currentTime = GameTime::GetGameTime();
|
||||
|
||||
constexpr uint32 MAX_PROCESSED_PACKETS_IN_SAME_WORLDSESSION_UPDATE = 100;
|
||||
|
||||
while (m_Socket[CONNECTION_TYPE_REALM] && _recvQueue.next(packet, updater))
|
||||
{
|
||||
OpcodeClient opcode = static_cast<OpcodeClient>(packet->GetOpcode());
|
||||
@@ -373,6 +375,8 @@ bool WorldSession::Update(uint32 diff, PacketFilter& updater)
|
||||
sScriptMgr->OnPacketReceive(this, *packet);
|
||||
opHandle->Call(this, *packet);
|
||||
}
|
||||
else
|
||||
processedPackets = MAX_PROCESSED_PACKETS_IN_SAME_WORLDSESSION_UPDATE; // break out of packet processing loop
|
||||
// lag can cause STATUS_LOGGEDIN opcodes to arrive after the player started a transfer
|
||||
break;
|
||||
case STATUS_LOGGEDIN_OR_RECENTLY_LOGGOUT:
|
||||
@@ -385,6 +389,8 @@ bool WorldSession::Update(uint32 diff, PacketFilter& updater)
|
||||
sScriptMgr->OnPacketReceive(this, *packet);
|
||||
opHandle->Call(this, *packet);
|
||||
}
|
||||
else
|
||||
processedPackets = MAX_PROCESSED_PACKETS_IN_SAME_WORLDSESSION_UPDATE; // break out of packet processing loop
|
||||
break;
|
||||
case STATUS_TRANSFER:
|
||||
if (!_player)
|
||||
@@ -396,6 +402,8 @@ bool WorldSession::Update(uint32 diff, PacketFilter& updater)
|
||||
sScriptMgr->OnPacketReceive(this, *packet);
|
||||
opHandle->Call(this, *packet);
|
||||
}
|
||||
else
|
||||
processedPackets = MAX_PROCESSED_PACKETS_IN_SAME_WORLDSESSION_UPDATE; // break out of packet processing loop
|
||||
break;
|
||||
case STATUS_AUTHED:
|
||||
// prevent cheating with skip queue wait
|
||||
@@ -415,6 +423,8 @@ bool WorldSession::Update(uint32 diff, PacketFilter& updater)
|
||||
sScriptMgr->OnPacketReceive(this, *packet);
|
||||
opHandle->Call(this, *packet);
|
||||
}
|
||||
else
|
||||
processedPackets = MAX_PROCESSED_PACKETS_IN_SAME_WORLDSESSION_UPDATE; // break out of packet processing loop
|
||||
break;
|
||||
case STATUS_NEVER:
|
||||
TC_LOG_ERROR("network.opcode", "Received not allowed opcode %s from %s", GetOpcodeNameForLogging(static_cast<OpcodeClient>(packet->GetOpcode())).c_str()
|
||||
@@ -459,7 +469,6 @@ bool WorldSession::Update(uint32 diff, PacketFilter& updater)
|
||||
|
||||
deletePacket = true;
|
||||
|
||||
#define MAX_PROCESSED_PACKETS_IN_SAME_WORLDSESSION_UPDATE 100
|
||||
processedPackets++;
|
||||
|
||||
//process only a max amout of packets in 1 Update() call.
|
||||
|
||||
Reference in New Issue
Block a user