| 2312 | } |
| 2313 | |
| 2314 | int 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 | |
| 2353 | void CClient::ResetMapDownload(bool ResetActive) |
| 2354 | { |
nothing calls this directly
no test coverage detected