diff options
author | Treeston <treeston.mmoc@gmail.com> | 2020-08-20 17:35:58 +0200 |
---|---|---|
committer | Treeston <treeston.mmoc@gmail.com> | 2020-08-20 17:35:58 +0200 |
commit | 5b4288f05f7e2360bcdc80872787ee2e7a7a2f56 (patch) | |
tree | 9c3111128a0d06a44ddb56c8519c0ff3d41efd1b /src | |
parent | e1289805fc04e75f9e7cba078cbc826ce60f037a (diff) |
Core/Warden: Some Warden refactors lifted from #25286.
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Warden/WardenCheckMgr.cpp | 28 | ||||
-rw-r--r-- | src/server/game/Warden/WardenCheckMgr.h | 10 | ||||
-rw-r--r-- | src/server/game/Warden/WardenWin.cpp | 17 |
3 files changed, 29 insertions, 26 deletions
diff --git a/src/server/game/Warden/WardenCheckMgr.cpp b/src/server/game/Warden/WardenCheckMgr.cpp index c2bff22c4af..1064ec31c53 100644 --- a/src/server/game/Warden/WardenCheckMgr.cpp +++ b/src/server/game/Warden/WardenCheckMgr.cpp @@ -51,7 +51,7 @@ void WardenCheckMgr::LoadWardenChecks() uint16 maxCheckId = fields[0].GetUInt16(); - CheckStore.resize(maxCheckId + 1); + _checks.resize(maxCheckId + 1); // 0 1 2 3 4 5 6 7 result = WorldDatabase.Query("SELECT id, type, data, result, address, length, str, comment FROM warden_checks ORDER BY id ASC"); @@ -62,11 +62,11 @@ void WardenCheckMgr::LoadWardenChecks() fields = result->Fetch(); uint16 const id = fields[0].GetUInt16(); - uint8 const type = fields[1].GetUInt8(); + WardenCheckType const type = static_cast<WardenCheckType>(fields[1].GetUInt8()); - WardenCheck& wardenCheck = CheckStore[id]; + WardenCheck& wardenCheck = _checks[id]; wardenCheck.CheckId = id; - wardenCheck.Type = WardenCheckType(type); + wardenCheck.Type = type; // Initialize action with default action from config wardenCheck.Action = WardenActions(sWorld->getIntConfig(CONFIG_WARDEN_CLIENT_FAIL_ACTION)); @@ -75,7 +75,7 @@ void WardenCheckMgr::LoadWardenChecks() wardenCheck.Data = fields[2].GetBinary(); if (type == MPQ_CHECK || type == MEM_CHECK) - CheckResultStore.emplace(id, fields[3].GetBinary()); + _checkResults.emplace(id, fields[3].GetBinary()); if (type == MEM_CHECK || type == PAGE_CHECK_A || type == PAGE_CHECK_B || type == PROC_CHECK) { @@ -135,12 +135,12 @@ void WardenCheckMgr::LoadWardenOverrides() // Check if action value is in range (0-2, see WardenActions enum) if (action > WARDEN_ACTION_BAN) TC_LOG_ERROR("warden", "Warden check override action out of range (ID: %u, action: %u)", checkId, action); - // Check if check actually exists before accessing the CheckStore vector - else if (checkId >= CheckStore.size()) + // Check if check actually exists before accessing the _checks vector + else if (checkId >= _checks.size()) 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); + _checks[checkId].Action = WardenActions(action); ++count; } } @@ -155,15 +155,15 @@ WardenCheckMgr* WardenCheckMgr::instance() return &instance; } -WardenCheck const& WardenCheckMgr::GetCheckDataById(uint16 Id) const +WardenCheck const& WardenCheckMgr::GetCheckData(uint16 Id) const { - ASSERT(Id < CheckStore.size(), "Requested Warden data for invalid check ID %u", uint32(Id)); - return CheckStore[Id]; + ASSERT(Id < _checks.size(), "Requested Warden data for invalid check ID %u", uint32(Id)); + return _checks[Id]; } -WardenCheckResult const& WardenCheckMgr::GetCheckResultById(uint16 Id) const +WardenCheckResult const& WardenCheckMgr::GetCheckResult(uint16 Id) const { - auto it = CheckResultStore.find(Id); - ASSERT(it != CheckResultStore.end(), "Requested Warden result for invalid check ID %u", uint32(Id)); + auto it = _checkResults.find(Id); + ASSERT(it != _checkResults.end(), "Requested Warden result for invalid check ID %u", uint32(Id)); return it->second; } diff --git a/src/server/game/Warden/WardenCheckMgr.h b/src/server/game/Warden/WardenCheckMgr.h index bb269ce8cf8..e84f405590b 100644 --- a/src/server/game/Warden/WardenCheckMgr.h +++ b/src/server/game/Warden/WardenCheckMgr.h @@ -47,13 +47,13 @@ enum WardenCheckType : uint8 struct WardenCheck { + uint16 CheckId; WardenCheckType Type; std::vector<uint8> Data; uint32 Address; // PROC_CHECK, MEM_CHECK, PAGE_CHECK uint8 Length; // PROC_CHECK, MEM_CHECK, PAGE_CHECK std::string Str; // LUA, MPQ, DRIVER std::string Comment; - uint16 CheckId; WardenActions Action; }; @@ -67,8 +67,8 @@ class TC_GAME_API WardenCheckMgr public: static WardenCheckMgr* instance(); - WardenCheck const& GetCheckDataById(uint16 Id) const; - WardenCheckResult const& GetCheckResultById(uint16 Id) const; + WardenCheck const& GetCheckData(uint16 Id) const; + WardenCheckResult const& GetCheckResult(uint16 Id) const; std::vector<uint16> const& GetAvailableMemoryChecks() const { return MemChecksIdPool; } std::vector<uint16> const& GetAvailableOtherChecks() const { return OtherChecksIdPool; } @@ -77,8 +77,8 @@ class TC_GAME_API WardenCheckMgr void LoadWardenOverrides(); private: - std::vector<WardenCheck> CheckStore; - std::unordered_map<uint16, WardenCheckResult> CheckResultStore; + std::vector<WardenCheck> _checks; + std::unordered_map<uint16, WardenCheckResult> _checkResults; std::vector<uint16> MemChecksIdPool; std::vector<uint16> OtherChecksIdPool; }; diff --git a/src/server/game/Warden/WardenWin.cpp b/src/server/game/Warden/WardenWin.cpp index 60d0267175e..58b9ba61eff 100644 --- a/src/server/game/Warden/WardenWin.cpp +++ b/src/server/game/Warden/WardenWin.cpp @@ -222,7 +222,7 @@ void WardenWin::RequestChecks() uint16 const id = *(_otherChecksIt++); - WardenCheck const& check = sWardenCheckMgr->GetCheckDataById(id); + WardenCheck const& check = sWardenCheckMgr->GetCheckData(id); if (!check.Str.empty()) { buff << uint8(check.Str.size()); @@ -241,7 +241,7 @@ void WardenWin::RequestChecks() for (uint16 const id : _currentChecks) { - WardenCheck const& check = sWardenCheckMgr->GetCheckDataById(id); + WardenCheck const& check = sWardenCheckMgr->GetCheckData(id); WardenCheckType const type = check.Type; buff << uint8(type ^ xorByte); @@ -369,7 +369,7 @@ void WardenWin::HandleCheckResult(ByteBuffer &buff) uint16 checkFailed = 0; for (uint16 const id : _currentChecks) { - WardenCheck const& check = sWardenCheckMgr->GetCheckDataById(id); + WardenCheck const& check = sWardenCheckMgr->GetCheckData(id); switch (check.Type) { @@ -388,9 +388,12 @@ void WardenWin::HandleCheckResult(ByteBuffer &buff) std::vector<uint8> response; response.resize(check.Length); buff.read(response.data(), response.size()); - if (response != sWardenCheckMgr->GetCheckResultById(id)) + WardenCheckResult const& expected = sWardenCheckMgr->GetCheckResult(id); + if (response != expected) { TC_LOG_DEBUG("warden", "RESULT MEM_CHECK fail CheckId %u account Id %u", id, _session->GetAccountId()); + TC_LOG_DEBUG("warden", "Expected: %s", ByteArrayToHexStr(expected).c_str()); + TC_LOG_DEBUG("warden", "Got: %s", ByteArrayToHexStr(response).c_str()); checkFailed = id; continue; } @@ -421,7 +424,7 @@ void WardenWin::HandleCheckResult(ByteBuffer &buff) if (Lua_Result != 0) { uint8 luaStrLen = buff.read<uint8>(); - if (luaStrLen != 0) + if (luaStrLen == 0) { std::string str; str.resize(luaStrLen); @@ -450,7 +453,7 @@ void WardenWin::HandleCheckResult(ByteBuffer &buff) std::vector<uint8> result; result.resize(Trinity::Crypto::SHA1::DIGEST_LENGTH); buff.read(result.data(), result.size()); - if (result != sWardenCheckMgr->GetCheckResultById(id)) // SHA1 + if (result != sWardenCheckMgr->GetCheckResult(id)) // SHA1 { TC_LOG_DEBUG("warden", "RESULT MPQ_CHECK fail, CheckId %u account Id %u", id, _session->GetAccountId()); checkFailed = id; @@ -467,7 +470,7 @@ void WardenWin::HandleCheckResult(ByteBuffer &buff) if (checkFailed > 0) { - WardenCheck const& check = sWardenCheckMgr->GetCheckDataById(checkFailed); + WardenCheck const& check = sWardenCheckMgr->GetCheckData(checkFailed); char const* penalty = ApplyPenalty(&check); TC_LOG_WARN("warden", "%s failed Warden check %u (%s). Action: %s", _session->GetPlayerInfo().c_str(), checkFailed, EnumUtils::ToConstant(check.Type), penalty); } |