// The faster we finish the rest of this loop the better!
if ((m1 != null) && (m1.getSpec().equals(DMT.packetTransmit))) {
consecutiveMissingPacketReports = 0;
// packetTransmit received
int packetNo = m1.getInt(DMT.PACKET_NO);
BitArray sent = (BitArray) m1.getObject(DMT.SENT);
Buffer data = (Buffer) m1.getObject(DMT.DATA);
_prb.addPacket(packetNo, data);
// Remove it from rrmp if its in there
_recentlyReportedMissingPackets.remove(new Integer(packetNo));
// Skip checks except for 1 out of 16 packets until we get to the end
if ((_prb.numReceived() < (_prb.getNumPackets() - 16))
&& (packetNo % 16 != 0))
continue;
// Check that we have what the sender thinks we have
LinkedList missing = new LinkedList();
for (int x = 0; x < sent.getSize(); x++) {
if (sent.bitAt(x) && !_prb.isReceived(x)) {
// Sender thinks we have a block which we don't, but have we already
// re-requested it recently?
Long resendTime = (Long) _recentlyReportedMissingPackets.get(new Integer(x));
if ((resendTime == null) || (System.currentTimeMillis() > resendTime.longValue())) {
// Make a note of the earliest time we should resend this,