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() {
// 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
if (_currentPacket.write(_extendedHeader) == -1) {
if (packet->write(_extendedHeader) == -1) {
qDebug() << "Could not write extendedHeader in PacketList::createPacketWithExtendedHeader"
<< "- 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) {
if (!_currentPacket) {
// 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
@ -46,7 +46,7 @@ qint64 writeData(const char* data, qint64 maxSize) {
// it does not fit - this may need to be in the next packet
if (!_isOrdered) {
auto newPacket = T::create(_packetType);
auto newPacket = createPacketWithExtendedHeader();
if (_segmentStartIndex >= 0) {
// 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 readData(const char* data, qint64 maxSize) { return 0 };
private:
void createPacketWithExtendedHeader();
std::unique_ptr<NLPacket> createPacketWithExtendedHeader();
PacketType::Value _packetType;
bool isOrdered;
@ -41,6 +41,6 @@ private:
int _segmentStartIndex = -1;
QByteArray _extendedHeader = extendedHeader;
}
};
#endif // hifi_PacketList_h

View file

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

View file

@ -23,10 +23,10 @@ public:
SentPacketHistory(int size = MAX_REASONABLE_SEQUENCE_GAP);
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:
RingBufferHistory<NLPacket*> _sentPackets; // circular buffer
RingBufferHistory<std::unique_ptr<NLPacket>> _sentPackets; // circular buffer
uint16_t _newestSequenceNumber;
};