diff options
| author | Treeston <treeston.mmoc@gmail.com> | 2020-08-11 18:04:36 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-08-11 18:04:36 +0200 |
| commit | 6116e5b38522ccfb00f6c941c75482e05b4c0799 (patch) | |
| tree | dc729202e449d9a1c0e3b9c0516e1a274c8c1244 /src/server/game/Warden/WardenCheckMgr.cpp | |
| parent | cce1ccdd5cb59070a48562504a0d4d476fd9aad2 (diff) | |
Core/Warden: Warden refactors (PR #25235)
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 34225901aab..c2bff22c4af 100644 --- a/src/server/game/Warden/WardenCheckMgr.cpp +++ b/src/server/game/Warden/WardenCheckMgr.cpp @@ -15,26 +15,19 @@ * 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(); @@ -68,53 +61,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; } @@ -145,8 +125,6 @@ void WardenCheckMgr::LoadWardenOverrides() uint32 count = 0; - std::unique_lock<std::shared_mutex> lock(sWardenCheckMgr->_checkStoreLock); - do { Field* fields = result->Fetch(); @@ -162,7 +140,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; } } @@ -177,18 +155,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; } |
