From b35f831f2b386685bb3eaaad340208e293ba16a7 Mon Sep 17 00:00:00 2001 From: danik Date: Fri, 6 Jan 2012 19:36:17 +0100 Subject: Core/PacketIO: Prevented excessive WhoOpcode spam - solves possible crash/lag method --- src/server/game/Server/Protocol/Handlers/MiscHandler.cpp | 5 +++++ src/server/game/Server/WorldSession.cpp | 2 +- src/server/game/Server/WorldSession.h | 1 + 3 files changed, 7 insertions(+), 1 deletion(-) (limited to 'src/server/game/Server') diff --git a/src/server/game/Server/Protocol/Handlers/MiscHandler.cpp b/src/server/game/Server/Protocol/Handlers/MiscHandler.cpp index d828a866c49..d5d205279f7 100755 --- a/src/server/game/Server/Protocol/Handlers/MiscHandler.cpp +++ b/src/server/game/Server/Protocol/Handlers/MiscHandler.cpp @@ -169,6 +169,11 @@ void WorldSession::HandleWhoOpcode(WorldPacket & recv_data) { sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Recvd CMSG_WHO Message"); + time_t now = time(NULL); + if (now - timeLastWhoCommand < 5) + return; + else timeLastWhoCommand = now; + uint32 matchcount = 0; uint32 level_min, level_max, racemask, classmask, zones_count, str_count; diff --git a/src/server/game/Server/WorldSession.cpp b/src/server/game/Server/WorldSession.cpp index 11085c98d2c..6bd09f2b3a7 100755 --- a/src/server/game/Server/WorldSession.cpp +++ b/src/server/game/Server/WorldSession.cpp @@ -94,7 +94,7 @@ m_playerRecentlyLogout(false), m_playerSave(false), m_sessionDbcLocale(sWorld->GetAvailableDbcLocale(locale)), m_sessionDbLocaleIndex(locale), m_latency(0), m_TutorialsChanged(false), recruiterId(recruiter), -isRecruiter(isARecruiter) +isRecruiter(isARecruiter), timeLastWhoCommand(0) { if (sock) { diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h index fac910abc71..951f205c1e2 100755 --- a/src/server/game/Server/WorldSession.h +++ b/src/server/game/Server/WorldSession.h @@ -949,6 +949,7 @@ class WorldSession uint32 recruiterId; bool isRecruiter; ACE_Based::LockedQueue _recvQueue; + time_t timeLastWhoCommand; }; #endif /// @} -- cgit v1.2.3