mirror of
https://github.com/overte-org/overte.git
synced 2025-08-09 23:14:34 +02:00
Use SeqNum
This commit is contained in:
parent
d4504ae6c8
commit
797f74f3d9
6 changed files with 13 additions and 16 deletions
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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>;
|
||||||
};
|
};
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue