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

Method UnpackPacket

src/engine/shared/network.cpp:261–372  ·  view source on GitHub ↗

TODO: rename this function

Source from the content-addressed store, hash-verified

259
260// TODO: rename this function
261int CNetBase::UnpackPacket(unsigned char *pBuffer, int Size, CNetPacketConstruct *pPacket, bool &Sixup, SECURITY_TOKEN *pSecurityToken, SECURITY_TOKEN *pResponseToken)
262{
263 std::optional<int> Flags = UnpackPacketFlags(pBuffer, Size);
264 if(!Flags)
265 {
266 return -1;
267 }
268
269 // log the data
270 if(ms_DataLogRecv)
271 {
272 int Type = 0;
273 io_write(ms_DataLogRecv, &Type, sizeof(Type));
274 io_write(ms_DataLogRecv, &Size, sizeof(Size));
275 io_write(ms_DataLogRecv, pBuffer, Size);
276 io_flush(ms_DataLogRecv);
277 }
278
279 // read the packet
280 pPacket->m_Flags = *Flags;
281
282 if(pPacket->m_Flags & NET_PACKETFLAG_CONNLESS)
283 {
284 Sixup = (pBuffer[0] & 0x3) == 1;
285 if(Sixup && (pSecurityToken == nullptr || pResponseToken == nullptr))
286 return -1;
287 int Offset = Sixup ? 9 : 6;
288 if(Size < Offset)
289 return -1;
290
291 if(Sixup)
292 {
293 *pSecurityToken = ToSecurityToken(pBuffer + 1);
294 *pResponseToken = ToSecurityToken(pBuffer + 5);
295 }
296
297 pPacket->m_Flags = NET_PACKETFLAG_CONNLESS;
298 pPacket->m_Ack = 0;
299 pPacket->m_NumChunks = 0;
300 pPacket->m_DataSize = Size - Offset;
301 mem_copy(pPacket->m_aChunkData, pBuffer + Offset, pPacket->m_DataSize);
302
303 if(!Sixup && mem_comp(pBuffer, NET_HEADER_EXTENDED, sizeof(NET_HEADER_EXTENDED)) == 0)
304 {
305 pPacket->m_Flags |= NET_PACKETFLAG_EXTENDED;
306 mem_copy(pPacket->m_aExtraData, pBuffer + sizeof(NET_HEADER_EXTENDED), sizeof(pPacket->m_aExtraData));
307 }
308 }
309 else
310 {
311 if(pPacket->m_Flags & NET_PACKETFLAG_UNUSED)
312 Sixup = true;
313 if(Sixup && pSecurityToken == nullptr)
314 return -1;
315 int DataStart = Sixup ? 7 : NET_PACKETHEADERSIZE;
316 if(Size < DataStart)
317 return -1;
318

Callers

nothing calls this directly

Calls 7

io_writeFunction · 0.85
io_flushFunction · 0.85
ToSecurityTokenFunction · 0.85
mem_copyFunction · 0.85
mem_compFunction · 0.85
PacketFlags_SevenToSixFunction · 0.85
DecompressMethod · 0.45

Tested by

no test coverage detected