MCPcopy Create free account
hub / github.com/NoMercy-ac/NoMercy / RecvCryptedPacket

Method RecvCryptedPacket

Source/Client/NM_Engine/ClientSocketWorker.cpp:291–423  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

289
290
291std::size_t CNetworkClient::RecvCryptedPacket(const void* c_lpData, std::size_t uMaxLength)
292{
293 if (uMaxLength < TCryptedPacket::size())
294 return 0;
295
296 NETWORK_LOG(LL_SYS, "Got crypted packet!");
297
298 if (uMaxLength != TCryptedPacket::size())
299 {
300 NETWORK_LOG(LL_CRI, "Packet size mismatch! Size: %u Capacity: %u", uMaxLength, TCryptedPacket::size());
301 return TCryptedPacket::size();
302 }
303
304 auto pCryptedPacket = reinterpret_cast<const TCryptedPacket*>(c_lpData);
305
306 // Magic value check
307 if (memcmp(pCryptedPacket->pMagic, gs_pNetworkMagicValue, sizeof(pCryptedPacket->pMagic)))
308 {
309 NETWORK_LOG(LL_CRI, "Unknown magic value: 0x%X", pCryptedPacket->pMagic);
310 return TCryptedPacket::size();
311 }
312
313 // Packet sum check
314 auto pCorrectChecksum = g_nmApp->NetworkMgrInstance()->CreateChecksum(c_lpData, uMaxLength - (NET_CHECKSUM_LENGTH /* hash */ + NET_CHECKSUM_LENGTH /* sum */));
315 if (pCorrectChecksum != pCryptedPacket->ulChecksum)
316 {
317 NETWORK_LOG(LL_CRI, "Packet checksum mismatch! Current: %p Correct: %p", pCryptedPacket->ulChecksum, pCorrectChecksum);
318 return TCryptedPacket::size();
319 }
320
321 // Packet hash check
322 auto pCorrectPacketHash = XXH32(c_lpData, uMaxLength - NET_CHECKSUM_LENGTH, NET_PACKET_HASH_MAGIC);
323 if (pCorrectPacketHash != pCryptedPacket->ulHash)
324 {
325 NETWORK_LOG(LL_CRI, "Packet hash mismatch! Current: %p Correct: %p", pCryptedPacket->ulHash, pCorrectPacketHash);
326 return TCryptedPacket::size();
327 }
328
329 NETWORK_LOG(LL_SYS, "Got crypted packet! Original Packet ID: %u Sub Packet ID: %u Crypted packet capacity: %u Crypted packet size: %u",
330 pCryptedPacket->uiPacketID, pCryptedPacket->uiDecryptedPacketId, TCryptedPacket::size(), uMaxLength);
331
332 // Packet ID Check
333 auto pPacketHandler = m_pHandlers.find(pCryptedPacket->uiDecryptedPacketId);
334 if (pPacketHandler == m_pHandlers.end())
335 {
336 NETWORK_LOG(LL_CRI, "Unknown target packet ID: %u", pCryptedPacket->uiDecryptedPacketId);
337 return TCryptedPacket::size();
338 }
339 NETWORK_LOG(LL_SYS, "Handled packet decrypted id: %u", pCryptedPacket->uiDecryptedPacketId);
340
341 // --
342
343 NETWORK_LOG(LL_SYS, "Decryption has been started. Crpyted data: %p Crypted data size: %u", pCryptedPacket->pContext, pCryptedPacket->ulCryptedSize);
344
345 // Size & sum param check
346 if (!pCryptedPacket->ulCryptedSize || !pCryptedPacket->ulDecryptedSize || !pCryptedPacket->ulCryptedSum || !pCryptedPacket->ulDecryptedSum)
347 {
348 NETWORK_LOG(LL_CRI, "Corrupted crypted data!");

Callers

nothing calls this directly

Calls 9

sizeClass · 0.85
DecryptFunction · 0.85
GetPacketCapacityFunction · 0.85
CreateChecksumMethod · 0.80
NetworkMgrInstanceMethod · 0.80
endMethod · 0.80
is_nullMethod · 0.45
get_dataMethod · 0.45
get_sizeMethod · 0.45

Tested by

no test coverage detected