TODO: rename this function
| 259 | |
| 260 | // TODO: rename this function |
| 261 | int 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 |
nothing calls this directly
no test coverage detected