mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-08-08 22:27:25 +02:00
Merge branch 'atp' of github.com:birarda/hifi into atp
This commit is contained in:
commit
33f1302d1f
1 changed files with 12 additions and 10 deletions
|
@ -825,30 +825,32 @@ void PendingReceivedMessage::enqueuePacket(std::unique_ptr<Packet> packet) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
auto sequenceNumber = packet->getSequenceNumber();
|
||||||
|
|
||||||
if (packet->getPacketPosition() == Packet::PacketPosition::FIRST) {
|
if (packet->getPacketPosition() == Packet::PacketPosition::FIRST) {
|
||||||
_hasFirstSequenceNumber = true;
|
_hasFirstSequenceNumber = true;
|
||||||
_firstSequenceNumber = packet->getSequenceNumber();
|
_firstSequenceNumber = sequenceNumber;
|
||||||
} else if (packet->getPacketPosition() == Packet::PacketPosition::LAST) {
|
} else if (packet->getPacketPosition() == Packet::PacketPosition::LAST) {
|
||||||
_hasLastSequenceNumber = true;
|
_hasLastSequenceNumber = true;
|
||||||
_lastSequenceNumber = packet->getSequenceNumber();
|
_lastSequenceNumber = sequenceNumber;
|
||||||
} else if (packet->getPacketPosition() == Packet::PacketPosition::ONLY) {
|
} else if (packet->getPacketPosition() == Packet::PacketPosition::ONLY) {
|
||||||
_hasFirstSequenceNumber = true;
|
_hasFirstSequenceNumber = true;
|
||||||
_hasLastSequenceNumber = true;
|
_hasLastSequenceNumber = true;
|
||||||
_firstSequenceNumber = packet->getSequenceNumber();
|
_firstSequenceNumber = sequenceNumber;
|
||||||
_lastSequenceNumber = packet->getSequenceNumber();
|
_lastSequenceNumber = sequenceNumber;
|
||||||
}
|
}
|
||||||
|
|
||||||
_packets.push_back(std::move(packet));
|
// Insert into the packets list in sorted order. Because we generally expect to receive packets in order, begin
|
||||||
|
// searching from the end of the list.
|
||||||
|
auto it = find_if(_packets.rbegin(), _packets.rend(),
|
||||||
|
[&](const std::unique_ptr<Packet>& packet) { return sequenceNumber > packet->getSequenceNumber(); });
|
||||||
|
}
|
||||||
|
_packets.insert(it.base(), std::move(packet));
|
||||||
|
|
||||||
if (_hasFirstSequenceNumber && _hasLastSequenceNumber) {
|
if (_hasFirstSequenceNumber && _hasLastSequenceNumber) {
|
||||||
auto numPackets = udt::seqlen(_firstSequenceNumber, _lastSequenceNumber);
|
auto numPackets = udt::seqlen(_firstSequenceNumber, _lastSequenceNumber);
|
||||||
if (uint64_t(numPackets) == _packets.size()) {
|
if (uint64_t(numPackets) == _packets.size()) {
|
||||||
_isComplete = true;
|
_isComplete = true;
|
||||||
|
|
||||||
// Sort packets by sequence number
|
|
||||||
_packets.sort([](std::unique_ptr<Packet>& a, std::unique_ptr<Packet>& b) {
|
|
||||||
return a->getSequenceNumber() < b->getSequenceNumber();
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue