diff options
author | Treeston <treeston.mmoc@gmail.com> | 2020-08-11 18:04:36 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2022-01-26 19:42:11 +0100 |
commit | 319ddd9bcdeab13b07c992e05bef5698af090ee0 (patch) | |
tree | 1d4ebb9e0fadefbd6effdf1c10769e3488c94840 /src/server/game/Warden/WardenCheckMgr.cpp | |
parent | cf369301c42773d104121820a8d131bb502e81d8 (diff) |
Core/Warden: Warden refactors (PR #25235)
(cherry picked from commit 6116e5b38522ccfb00f6c941c75482e05b4c0799)
Diffstat (limited to 'src/server/game/Warden/WardenCheckMgr.cpp')
-rw-r--r-- | src/server/game/Warden/WardenCheckMgr.cpp | 95 |
1 files changed, 35 insertions, 60 deletions
diff --git a/src/server/game/Warden/WardenCheckMgr.cpp b/src/server/game/Warden/WardenCheckMgr.cpp index b23f53f927a..b328eaee6ca 100644 --- a/src/server/game/Warden/WardenCheckMgr.cpp +++ b/src/server/game/Warden/WardenCheckMgr.cpp @@ -15,28 +15,21 @@ * with this program. If not, see <http://www.gnu.org/licenses/>. */ +#include "WardenCheckMgr.h" + #include "Common.h" -#include "WorldPacket.h" -#include "WorldSession.h" +#include "DatabaseEnv.h" +#include "Errors.h" #include "Log.h" -#include "Database/DatabaseEnv.h" -#include "WardenCheckMgr.h" #include "Warden.h" #include "World.h" +#include "WorldPacket.h" +#include "WorldSession.h" WardenCheckMgr::WardenCheckMgr() { } -WardenCheckMgr::~WardenCheckMgr() -{ - for (uint16 i = 0; i < CheckStore.size(); ++i) - delete CheckStore[i]; - - for (CheckResultContainer::iterator itr = CheckResultStore.begin(); itr != CheckResultStore.end(); ++itr) - delete itr->second; -} - void WardenCheckMgr::LoadWardenChecks() { uint32 oldMSTime = getMSTime(); @@ -70,53 +63,40 @@ void WardenCheckMgr::LoadWardenChecks() { fields = result->Fetch(); - uint16 id = fields[0].GetUInt16(); - uint8 checkType = fields[1].GetUInt8(); - std::string data = fields[2].GetString(); - std::string checkResult = fields[3].GetString(); - uint32 address = fields[4].GetUInt32(); - uint8 length = fields[5].GetUInt8(); - std::string str = fields[6].GetString(); - std::string comment = fields[7].GetString(); + uint16 const id = fields[0].GetUInt16(); + uint8 const type = fields[1].GetUInt8(); - WardenCheck* wardenCheck = new WardenCheck(); - wardenCheck->Type = checkType; - wardenCheck->CheckId = id; + WardenCheck& wardenCheck = CheckStore[id]; + wardenCheck.CheckId = id; + wardenCheck.Type = WardenCheckType(type); // Initialize action with default action from config - wardenCheck->Action = WardenActions(sWorld->getIntConfig(CONFIG_WARDEN_CLIENT_FAIL_ACTION)); + wardenCheck.Action = WardenActions(sWorld->getIntConfig(CONFIG_WARDEN_CLIENT_FAIL_ACTION)); - if (checkType == PAGE_CHECK_A || checkType == PAGE_CHECK_B || checkType == DRIVER_CHECK) - wardenCheck->Data.SetHexStr(data.c_str()); + if (type == PAGE_CHECK_A || type == PAGE_CHECK_B || type == DRIVER_CHECK) + wardenCheck.Data = fields[2].GetBinary(); - if (checkType == MEM_CHECK || checkType == MODULE_CHECK) - MemChecksIdPool.push_back(id); - else - OtherChecksIdPool.push_back(id); + if (type == MPQ_CHECK || type == MEM_CHECK) + CheckResultStore.emplace(id, fields[3].GetBinary()); - if (checkType == MEM_CHECK || checkType == PAGE_CHECK_A || checkType == PAGE_CHECK_B || checkType == PROC_CHECK) + if (type == MEM_CHECK || type == PAGE_CHECK_A || type == PAGE_CHECK_B || type == PROC_CHECK) { - wardenCheck->Address = address; - wardenCheck->Length = length; + wardenCheck.Address = fields[4].GetUInt32(); + wardenCheck.Length = fields[5].GetUInt8(); } // PROC_CHECK support missing - if (checkType == MEM_CHECK || checkType == MPQ_CHECK || checkType == LUA_STR_CHECK || checkType == DRIVER_CHECK || checkType == MODULE_CHECK) - wardenCheck->Str = str; + if (type == MEM_CHECK || type == MPQ_CHECK || type == LUA_STR_CHECK || type == DRIVER_CHECK || type == MODULE_CHECK) + wardenCheck.Str = fields[6].GetString(); - CheckStore[id] = wardenCheck; - - if (checkType == MPQ_CHECK || checkType == MEM_CHECK) - { - WardenCheckResult* wr = new WardenCheckResult(); - wr->Result.SetHexStr(checkResult.c_str()); - CheckResultStore[id] = wr; - } + wardenCheck.Comment = fields[7].GetString(); + if (wardenCheck.Comment.empty()) + wardenCheck.Comment = "Undocumented Check"; - if (comment.empty()) - wardenCheck->Comment = "Undocumented Check"; + if (type == MEM_CHECK || type == MODULE_CHECK) + MemChecksIdPool.push_back(id); else - wardenCheck->Comment = comment; + OtherChecksIdPool.push_back(id); ++count; } @@ -147,8 +127,6 @@ void WardenCheckMgr::LoadWardenOverrides() uint32 count = 0; - std::unique_lock<std::shared_mutex> lock(sWardenCheckMgr->_checkStoreLock); - do { Field* fields = result->Fetch(); @@ -164,7 +142,7 @@ void WardenCheckMgr::LoadWardenOverrides() TC_LOG_ERROR("warden", "Warden check action override for non-existing check (ID: %u, action: %u), skipped", checkId, action); else { - CheckStore[checkId]->Action = WardenActions(action); + CheckStore[checkId].Action = WardenActions(action); ++count; } } @@ -179,18 +157,15 @@ WardenCheckMgr* WardenCheckMgr::instance() return &instance; } -WardenCheck* WardenCheckMgr::GetWardenDataById(uint16 Id) +WardenCheck const& WardenCheckMgr::GetCheckDataById(uint16 Id) const { - if (Id < CheckStore.size()) - return CheckStore[Id]; - - return nullptr; + ASSERT(Id < CheckStore.size(), "Requested Warden data for invalid check ID %u", uint32(Id)); + return CheckStore[Id]; } -WardenCheckResult* WardenCheckMgr::GetWardenResultById(uint16 Id) +WardenCheckResult const& WardenCheckMgr::GetCheckResultById(uint16 Id) const { - CheckResultContainer::const_iterator itr = CheckResultStore.find(Id); - if (itr != CheckResultStore.end()) - return itr->second; - return nullptr; + auto it = CheckResultStore.find(Id); + ASSERT(it != CheckResultStore.end(), "Requested Warden result for invalid check ID %u", uint32(Id)); + return it->second; } |