Network/ENetPeer: Fix fragmented packet handling
This commit is contained in:
parent
5655ff3fcf
commit
1904ce1576
|
|
@ -205,32 +205,24 @@ namespace Nz
|
||||||
if (packetSize > fragmentLength)
|
if (packetSize > fragmentLength)
|
||||||
{
|
{
|
||||||
UInt32 fragmentCount = (packetSize + fragmentLength - 1) / fragmentLength;
|
UInt32 fragmentCount = (packetSize + fragmentLength - 1) / fragmentLength;
|
||||||
UInt32 fragmentNumber;
|
|
||||||
UInt32 fragmentOffset;
|
|
||||||
|
|
||||||
UInt8 commandNumber;
|
|
||||||
UInt16 startSequenceNumber;
|
|
||||||
|
|
||||||
if (fragmentCount > ENetConstants::ENetProtocol_MaximumFragmentCount)
|
if (fragmentCount > ENetConstants::ENetProtocol_MaximumFragmentCount)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
UInt8 commandNumber;
|
||||||
|
UInt16 startSequenceNumber;
|
||||||
if ((packetRef->flags & (ENetPacketFlag_Reliable | ENetPacketFlag_UnreliableFragment)) == ENetPacketFlag_UnreliableFragment &&
|
if ((packetRef->flags & (ENetPacketFlag_Reliable | ENetPacketFlag_UnreliableFragment)) == ENetPacketFlag_UnreliableFragment &&
|
||||||
channel.outgoingUnreliableSequenceNumber < 0xFFFF)
|
channel.outgoingUnreliableSequenceNumber < 0xFFFF)
|
||||||
{
|
{
|
||||||
commandNumber = ENetProtocolCommand_SendUnreliable;
|
commandNumber = ENetProtocolCommand_SendUnreliable;
|
||||||
startSequenceNumber = HostToNet(channel.outgoingUnreliableSequenceNumber + 1);
|
startSequenceNumber = HostToNet<UInt16>(channel.outgoingUnreliableSequenceNumber + 1);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
commandNumber = ENetProtocolCommand_SendFragment | ENetProtocolFlag_Acknowledge;
|
commandNumber = ENetProtocolCommand_SendFragment | ENetProtocolFlag_Acknowledge;
|
||||||
startSequenceNumber = HostToNet(channel.outgoingReliableSequenceNumber + 1);
|
startSequenceNumber = HostToNet<UInt16>(channel.outgoingReliableSequenceNumber + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (fragmentNumber = 0,
|
for (UInt32 fragmentNumber = 0, fragmentOffset = 0; fragmentOffset < packetSize; ++fragmentNumber, fragmentOffset += fragmentLength)
|
||||||
fragmentOffset = 0;
|
|
||||||
fragmentOffset < packetSize;
|
|
||||||
++fragmentNumber,
|
|
||||||
fragmentOffset += fragmentLength)
|
|
||||||
{
|
{
|
||||||
if (packetSize - fragmentOffset < fragmentLength)
|
if (packetSize - fragmentOffset < fragmentLength)
|
||||||
fragmentLength = UInt16(packetSize - fragmentOffset);
|
fragmentLength = UInt16(packetSize - fragmentOffset);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue