Use SeqNum

This commit is contained in:
Atlante45 2015-07-24 12:27:40 -07:00
parent d4504ae6c8
commit 797f74f3d9
6 changed files with 13 additions and 16 deletions

View file

@ -85,7 +85,7 @@ private:
bool _canAdjustLocks; bool _canAdjustLocks;
bool _canRez; bool _canRez;
std::map<PacketType, udt::Packet::SequenceNumber> _lastSequenceNumbers; std::map<PacketType, udt::SeqNum> _lastSequenceNumbers;
}; };
typedef QSharedPointer<Node> SharedNodePointer; typedef QSharedPointer<Node> SharedNodePointer;

View file

@ -21,7 +21,7 @@ void UdtCC::init() {
setAckTimer(_rcInterval); setAckTimer(_rcInterval);
_lastAck = _sendCurrSeqNum; _lastAck = _sendCurrSeqNum;
_lastDecSeq = SeqNum::MAX; _lastDecSeq = SeqNum{ SeqNum::MAX };
_congestionWindowSize = 16.0; _congestionWindowSize = 16.0;
_packetSendPeriod = 1.0; _packetSendPeriod = 1.0;

View file

@ -65,7 +65,7 @@ Packet::Packet(qint64 size, bool isReliable, bool isPartOfMessage) :
adjustPayloadStartAndCapacity(); adjustPayloadStartAndCapacity();
// set the UDT header to default values // set the UDT header to default values
writeSequenceNumber(0); writeSequenceNumber(SeqNum());
} }
Packet::Packet(std::unique_ptr<char> data, qint64 size, const HifiSockAddr& senderSockAddr) : Packet::Packet(std::unique_ptr<char> data, qint64 size, const HifiSockAddr& senderSockAddr) :
@ -142,18 +142,13 @@ void Packet::readIsPartOfMessage() {
void Packet::readSequenceNumber() { void Packet::readSequenceNumber() {
SequenceNumberAndBitField seqNumBitField = *reinterpret_cast<SequenceNumberAndBitField*>(_packet.get()); SequenceNumberAndBitField seqNumBitField = *reinterpret_cast<SequenceNumberAndBitField*>(_packet.get());
_sequenceNumber = (seqNumBitField & ~BIT_FIELD_MASK); // Remove the bit field _sequenceNumber = SeqNum{ seqNumBitField & ~BIT_FIELD_MASK }; // Remove the bit field
} }
static const uint32_t MAX_SEQUENCE_NUMBER = UINT32_MAX >> BIT_FIELD_LENGTH; void Packet::writeSequenceNumber(SeqNum seqNum) {
void Packet::writeSequenceNumber(SequenceNumber sequenceNumber) {
// make sure this is a sequence number <= 29 bit unsigned max (536,870,911)
Q_ASSERT(sequenceNumber <= MAX_SEQUENCE_NUMBER);
// grab pointer to current SequenceNumberAndBitField // grab pointer to current SequenceNumberAndBitField
SequenceNumberAndBitField* seqNumBitField = reinterpret_cast<SequenceNumberAndBitField*>(_packet.get()); SequenceNumberAndBitField* seqNumBitField = reinterpret_cast<SequenceNumberAndBitField*>(_packet.get());
// write new value by ORing (old value & BIT_FIELD_MASK) with new seqNum // write new value by ORing (old value & BIT_FIELD_MASK) with new seqNum
*seqNumBitField = (*seqNumBitField & BIT_FIELD_MASK) | sequenceNumber; *seqNumBitField = (*seqNumBitField & BIT_FIELD_MASK) | (SeqNum::Type)seqNum;
} }

View file

@ -18,6 +18,7 @@
#include "BasePacket.h" #include "BasePacket.h"
#include "PacketHeaders.h" #include "PacketHeaders.h"
#include "SeqNum.h"
namespace udt { namespace udt {
@ -50,7 +51,8 @@ public:
virtual qint64 totalHeadersSize() const; // Cumulated size of all the headers virtual qint64 totalHeadersSize() const; // Cumulated size of all the headers
void writeSequenceNumber(SequenceNumber sequenceNumber); void writeSequenceNumber(SeqNum seqNum);
SeqNum getSequenceNumber() const { return _sequenceNumber; }
protected: protected:
Packet(qint64 size, bool isReliable = false, bool isPartOfMessage = false); Packet(qint64 size, bool isReliable = false, bool isPartOfMessage = false);
@ -70,7 +72,7 @@ protected:
bool _isReliable { false }; bool _isReliable { false };
bool _isPartOfMessage { false }; bool _isPartOfMessage { false };
SequenceNumber _sequenceNumber { 0 }; SeqNum _sequenceNumber;
}; };
} // namespace udt } // namespace udt

View file

@ -27,7 +27,7 @@ public:
static const Type THRESHOLD = 0x0FFFFFFF; // threshold for comparing sequence numbers static const Type THRESHOLD = 0x0FFFFFFF; // threshold for comparing sequence numbers
static const Type MAX = 0x1FFFFFFF; // maximum sequence number used in UDT static const Type MAX = 0x1FFFFFFF; // maximum sequence number used in UDT
SeqNum() : _value(0) {} SeqNum() = default;
SeqNum(const SeqNum& other) : _value(other._value) {} SeqNum(const SeqNum& other) : _value(other._value) {}
// Only explicit conversions // Only explicit conversions
@ -79,7 +79,7 @@ public:
friend int seqoff(const SeqNum& seq1, const SeqNum& seq2); friend int seqoff(const SeqNum& seq1, const SeqNum& seq2);
private: private:
Type _value; Type _value { 0 };
friend struct std::hash<SeqNum>; friend struct std::hash<SeqNum>;
}; };

View file

@ -64,7 +64,7 @@ private:
std::unordered_map<HifiSockAddr, BasePacketHandler> _unfilteredHandlers; std::unordered_map<HifiSockAddr, BasePacketHandler> _unfilteredHandlers;
std::unordered_map<HifiSockAddr, Packet::SequenceNumber> _packetSequenceNumbers; std::unordered_map<HifiSockAddr, SeqNum> _packetSequenceNumbers;
}; };
} // namespace udt } // namespace udt