Network/ENetPeer: Fix fragmented packet handling

This commit is contained in:
Lynix 2017-02-12 02:21:00 +01:00
parent 5655ff3fcf
commit 1904ce1576
1 changed files with 5 additions and 13 deletions

View File

@ -205,32 +205,24 @@ namespace Nz
if (packetSize > fragmentLength)
{
UInt32 fragmentCount = (packetSize + fragmentLength - 1) / fragmentLength;
UInt32 fragmentNumber;
UInt32 fragmentOffset;
UInt8 commandNumber;
UInt16 startSequenceNumber;
if (fragmentCount > ENetConstants::ENetProtocol_MaximumFragmentCount)
return false;
UInt8 commandNumber;
UInt16 startSequenceNumber;
if ((packetRef->flags & (ENetPacketFlag_Reliable | ENetPacketFlag_UnreliableFragment)) == ENetPacketFlag_UnreliableFragment &&
channel.outgoingUnreliableSequenceNumber < 0xFFFF)
{
commandNumber = ENetProtocolCommand_SendUnreliable;
startSequenceNumber = HostToNet(channel.outgoingUnreliableSequenceNumber + 1);
startSequenceNumber = HostToNet<UInt16>(channel.outgoingUnreliableSequenceNumber + 1);
}
else
{
commandNumber = ENetProtocolCommand_SendFragment | ENetProtocolFlag_Acknowledge;
startSequenceNumber = HostToNet(channel.outgoingReliableSequenceNumber + 1);
startSequenceNumber = HostToNet<UInt16>(channel.outgoingReliableSequenceNumber + 1);
}
for (fragmentNumber = 0,
fragmentOffset = 0;
fragmentOffset < packetSize;
++fragmentNumber,
fragmentOffset += fragmentLength)
for (UInt32 fragmentNumber = 0, fragmentOffset = 0; fragmentOffset < packetSize; ++fragmentNumber, fragmentOffset += fragmentLength)
{
if (packetSize - fragmentOffset < fragmentLength)
fragmentLength = UInt16(packetSize - fragmentOffset);