fix packet segmentation in PacketList

This commit is contained in:
Stephen Birarda 2015-07-07 16:06:09 -07:00
parent bb15326676
commit b5eb4945ab
4 changed files with 9 additions and 9 deletions

View file

@ -20,10 +20,10 @@ PacketList::PacketList(PacketType::Value packetType, bool isOrdered) :
void PacketList::createPacketWithExtendedHeader() { void PacketList::createPacketWithExtendedHeader() {
// use the static create method to create a new packet // use the static create method to create a new packet
_currentPacket = T::create(_packetType); auto packet = T::create(_packetType);
// add the extended header to the front of the packet // add the extended header to the front of the packet
if (_currentPacket.write(_extendedHeader) == -1) { if (packet->write(_extendedHeader) == -1) {
qDebug() << "Could not write extendedHeader in PacketList::createPacketWithExtendedHeader" qDebug() << "Could not write extendedHeader in PacketList::createPacketWithExtendedHeader"
<< "- make sure that _extendedHeader is not larger than the payload capacity."; << "- make sure that _extendedHeader is not larger than the payload capacity.";
} }
@ -32,7 +32,7 @@ void PacketList::createPacketWithExtendedHeader() {
qint64 writeData(const char* data, qint64 maxSize) { qint64 writeData(const char* data, qint64 maxSize) {
if (!_currentPacket) { if (!_currentPacket) {
// we don't have a current packet, time to set one up // we don't have a current packet, time to set one up
createPacketWithExtendedHeader(); _currentPacket = createPacketWithExtendedHeader();
} }
// check if this block of data can fit into the currentPacket // check if this block of data can fit into the currentPacket
@ -46,7 +46,7 @@ qint64 writeData(const char* data, qint64 maxSize) {
// it does not fit - this may need to be in the next packet // it does not fit - this may need to be in the next packet
if (!_isOrdered) { if (!_isOrdered) {
auto newPacket = T::create(_packetType); auto newPacket = createPacketWithExtendedHeader();
if (_segmentStartIndex >= 0) { if (_segmentStartIndex >= 0) {
// We in the process of writing a segment for an unordered PacketList. // We in the process of writing a segment for an unordered PacketList.

View file

@ -30,7 +30,7 @@ protected:
qint64 writeData(const char* data, qint64 maxSize); qint64 writeData(const char* data, qint64 maxSize);
qint64 readData(const char* data, qint64 maxSize) { return 0 }; qint64 readData(const char* data, qint64 maxSize) { return 0 };
private: private:
void createPacketWithExtendedHeader(); std::unique_ptr<NLPacket> createPacketWithExtendedHeader();
PacketType::Value _packetType; PacketType::Value _packetType;
bool isOrdered; bool isOrdered;
@ -41,6 +41,6 @@ private:
int _segmentStartIndex = -1; int _segmentStartIndex = -1;
QByteArray _extendedHeader = extendedHeader; QByteArray _extendedHeader = extendedHeader;
} };
#endif // hifi_PacketList_h #endif // hifi_PacketList_h

View file

@ -30,7 +30,7 @@ void SentPacketHistory::packetSent(uint16_t sequenceNumber, const NLPacket& pack
<< "Expected:" << expectedSequenceNumber << "Actual:" << sequenceNumber; << "Expected:" << expectedSequenceNumber << "Actual:" << sequenceNumber;
} }
_newestSequenceNumber = sequenceNumber; _newestSequenceNumber = sequenceNumber;
_sentPackets.insert(new NLPacket(packet)); _sentPackets.insert(NLPacket::createCopy(packet));
} }
const QByteArray* SentPacketHistory::getPacket(uint16_t sequenceNumber) const { const QByteArray* SentPacketHistory::getPacket(uint16_t sequenceNumber) const {

View file

@ -23,10 +23,10 @@ public:
SentPacketHistory(int size = MAX_REASONABLE_SEQUENCE_GAP); SentPacketHistory(int size = MAX_REASONABLE_SEQUENCE_GAP);
void packetSent(uint16_t sequenceNumber, const NLPacket& packet); void packetSent(uint16_t sequenceNumber, const NLPacket& packet);
const NLPacket* getPacket(uint16_t sequenceNumber) const; const std::unique_ptr<NLPacket>& getPacket(uint16_t sequenceNumber) const;
private: private:
RingBufferHistory<NLPacket*> _sentPackets; // circular buffer RingBufferHistory<std::unique_ptr<NLPacket>> _sentPackets; // circular buffer
uint16_t _newestSequenceNumber; uint16_t _newestSequenceNumber;
}; };