Packet fragmentation had a bug

This commit is contained in:
Manevolent
2018-08-12 15:07:49 -04:00
parent 69024381de
commit 9d37b982d5
3 changed files with 77 additions and 3 deletions
@@ -3,7 +3,6 @@ package com.github.manevolent.ts3j.protocol.packet.fragment;
import com.github.manevolent.ts3j.protocol.Packet;
import com.github.manevolent.ts3j.protocol.header.HeaderFlag;
import com.github.manevolent.ts3j.util.QuickLZ;
import com.github.manevolent.ts3j.util.Ts3Debugging;
import java.io.IOException;
import java.nio.ByteBuffer;
@@ -19,6 +18,8 @@ public class PacketReassembly {
try {
// Pull out all other packets in the queue before this one which would also be fragmented
List<Integer> packetIds = new ArrayList<>();
for (int packetId = lastFragment.getHeader().getPacketId(); ; packetId--) {
if (packetId < 0) packetId = 65536 + packetId;
@@ -27,9 +28,14 @@ public class PacketReassembly {
if (olderPacket == null)
break; // Chain breaks here
else if (olderPacket.getHeader().getType() != lastFragment.getHeader().getType())
continue; // skip
continue; // skip???
else {
packetIds.add(packetId);
reassemblyList.add(olderPacket);
if (lastFragment.getHeader().getPacketId() != packetId &&
olderPacket.getHeader().getPacketFlag(HeaderFlag.FRAGMENTED))
break;
}
}
@@ -61,6 +67,9 @@ public class PacketReassembly {
reassembledPacket.readBody(reassemblyBuffer);
// Remove read packets
for (Integer packetId : packetIds) queue.remove(packetId);
return reassembledPacket;
} catch (Exception ex) {
throw new IOException("Problem reassembling " + reassemblyList.size() + " packet(s): [" +