MCPcopy Create free account
hub / github.com/ddnet/ddnet / UnpackAndValidateSnapshot

Method UnpackAndValidateSnapshot

src/engine/client/client.cpp:2314–2351  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2312}
2313
2314int CClient::UnpackAndValidateSnapshot(CSnapshot *pFrom, CSnapshot *pTo)
2315{
2316 CUnpacker Unpacker;
2317 CSnapshotBuilder Builder;
2318 Builder.Init();
2319 CNetObjHandler *pNetObjHandler = GameClient()->GetNetObjHandler();
2320
2321 int Num = pFrom->NumItems();
2322 for(int Index = 0; Index < Num; Index++)
2323 {
2324 const CSnapshotItem *pFromItem = pFrom->GetItem(Index);
2325 const int FromItemSize = pFrom->GetItemSize(Index);
2326 const int ItemType = pFrom->GetItemType(Index);
2327 const void *pData = pFromItem->Data();
2328 Unpacker.Reset(pData, FromItemSize);
2329
2330 void *pRawObj = pNetObjHandler->SecureUnpackObj(ItemType, &Unpacker);
2331 if(!pRawObj)
2332 {
2333 if(g_Config.m_Debug && ItemType != UUID_UNKNOWN)
2334 {
2335 char aBuf[256];
2336 str_format(aBuf, sizeof(aBuf), "dropped weird object '%s' (%d), failed on '%s'", pNetObjHandler->GetObjName(ItemType), ItemType, pNetObjHandler->FailedObjOn());
2337 m_pConsole->Print(IConsole::OUTPUT_LEVEL_ADDINFO, "client", aBuf);
2338 }
2339 continue;
2340 }
2341 const int ItemSize = pNetObjHandler->GetUnpackedObjSize(ItemType);
2342
2343 void *pObj = Builder.NewItem(pFromItem->Type(), pFromItem->Id(), ItemSize);
2344 if(!pObj)
2345 return -4;
2346
2347 mem_copy(pObj, pRawObj, ItemSize);
2348 }
2349
2350 return Builder.Finish(pTo);
2351}
2352
2353void CClient::ResetMapDownload(bool ResetActive)
2354{

Callers

nothing calls this directly

Calls 15

str_formatFunction · 0.85
mem_copyFunction · 0.85
GetItemTypeMethod · 0.80
NewItemMethod · 0.80
InitMethod · 0.45
GetNetObjHandlerMethod · 0.45
NumItemsMethod · 0.45
GetItemMethod · 0.45
GetItemSizeMethod · 0.45
DataMethod · 0.45
ResetMethod · 0.45
PrintMethod · 0.45

Tested by

no test coverage detected