mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-08-09 12:51:17 +02:00
Change Packet read/write fcts
This commit is contained in:
parent
f45b36c9ec
commit
f0bb71b519
3 changed files with 31 additions and 25 deletions
|
@ -156,7 +156,7 @@ void Connection::processReceivedSequenceNumber(SequenceNumber seq) {
|
||||||
|
|
||||||
void Connection::processControl(unique_ptr<ControlPacket> controlPacket) {
|
void Connection::processControl(unique_ptr<ControlPacket> controlPacket) {
|
||||||
switch (controlPacket->getType()) {
|
switch (controlPacket->getType()) {
|
||||||
case ControlPacket::ACK: {
|
case ControlPacket::ACK:
|
||||||
if (controlPacket->getPayloadSize() == sizeof(SequenceNumber)) {
|
if (controlPacket->getPayloadSize() == sizeof(SequenceNumber)) {
|
||||||
processLightACK(move(controlPacket));
|
processLightACK(move(controlPacket));
|
||||||
} else {
|
} else {
|
||||||
|
@ -169,10 +169,8 @@ void Connection::processControl(unique_ptr<ControlPacket> controlPacket) {
|
||||||
case ControlPacket::NAK:
|
case ControlPacket::NAK:
|
||||||
processNAK(move(controlPacket));
|
processNAK(move(controlPacket));
|
||||||
break;
|
break;
|
||||||
case ControlPacket::PacketPair: {
|
case ControlPacket::PacketPair:
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -65,15 +65,13 @@ 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(SequenceNumber());
|
writeHeader();
|
||||||
}
|
}
|
||||||
|
|
||||||
Packet::Packet(std::unique_ptr<char> data, qint64 size, const HifiSockAddr& senderSockAddr) :
|
Packet::Packet(std::unique_ptr<char> data, qint64 size, const HifiSockAddr& senderSockAddr) :
|
||||||
BasePacket(std::move(data), size, senderSockAddr)
|
BasePacket(std::move(data), size, senderSockAddr)
|
||||||
{
|
{
|
||||||
readIsReliable();
|
readHeader();
|
||||||
readIsPartOfMessage();
|
|
||||||
readSequenceNumber();
|
|
||||||
|
|
||||||
adjustPayloadStartAndCapacity(_payloadSize > 0);
|
adjustPayloadStartAndCapacity(_payloadSize > 0);
|
||||||
}
|
}
|
||||||
|
@ -119,25 +117,33 @@ static const uint32_t RELIABILITY_BIT_MASK = 1 << (sizeof(Packet::SequenceNumber
|
||||||
static const uint32_t MESSAGE_BIT_MASK = 1 << (sizeof(Packet::SequenceNumberAndBitField) - 3);
|
static const uint32_t MESSAGE_BIT_MASK = 1 << (sizeof(Packet::SequenceNumberAndBitField) - 3);
|
||||||
static const uint32_t BIT_FIELD_MASK = CONTROL_BIT_MASK | RELIABILITY_BIT_MASK | MESSAGE_BIT_MASK;
|
static const uint32_t BIT_FIELD_MASK = CONTROL_BIT_MASK | RELIABILITY_BIT_MASK | MESSAGE_BIT_MASK;
|
||||||
|
|
||||||
void Packet::readIsReliable() {
|
void Packet::readHeader() {
|
||||||
SequenceNumberAndBitField seqNumBitField = *reinterpret_cast<SequenceNumberAndBitField*>(_packet.get());
|
SequenceNumberAndBitField seqNumBitField = *reinterpret_cast<SequenceNumberAndBitField*>(_packet.get());
|
||||||
|
Q_ASSERT_X((bool) (seqNumBitField & CONTROL_BIT_MASK),
|
||||||
|
"Packet::readHeader()", "This should be a data packet");
|
||||||
_isReliable = (bool) (seqNumBitField & RELIABILITY_BIT_MASK); // Only keep reliability bit
|
_isReliable = (bool) (seqNumBitField & RELIABILITY_BIT_MASK); // Only keep reliability bit
|
||||||
}
|
_isPartOfMessage = (bool) (seqNumBitField & MESSAGE_BIT_MASK); // Only keep message bit
|
||||||
|
|
||||||
void Packet::readIsPartOfMessage() {
|
|
||||||
SequenceNumberAndBitField seqNumBitField = *reinterpret_cast<SequenceNumberAndBitField*>(_packet.get());
|
|
||||||
_isReliable = (bool) (seqNumBitField & MESSAGE_BIT_MASK); // Only keep message bit
|
|
||||||
}
|
|
||||||
|
|
||||||
void Packet::readSequenceNumber() {
|
|
||||||
SequenceNumberAndBitField seqNumBitField = *reinterpret_cast<SequenceNumberAndBitField*>(_packet.get());
|
|
||||||
_sequenceNumber = SequenceNumber{ seqNumBitField & ~BIT_FIELD_MASK }; // Remove the bit field
|
_sequenceNumber = SequenceNumber{ seqNumBitField & ~BIT_FIELD_MASK }; // Remove the bit field
|
||||||
}
|
}
|
||||||
|
|
||||||
void Packet::writeSequenceNumber(SequenceNumber seqNum) {
|
void Packet::writeHeader() {
|
||||||
// grab pointer to current SequenceNumberAndBitField
|
// grab pointer to current SequenceNumberAndBitField
|
||||||
SequenceNumberAndBitField* seqNumBitField = reinterpret_cast<SequenceNumberAndBitField*>(_packet.get());
|
SequenceNumberAndBitField* seqNumBitField = reinterpret_cast<SequenceNumberAndBitField*>(_packet.get());
|
||||||
|
|
||||||
|
*seqNumBitField &= ~CONTROL_BIT_MASK;
|
||||||
|
|
||||||
|
if (_isPartOfMessage) {
|
||||||
|
*seqNumBitField |= MESSAGE_BIT_MASK;
|
||||||
|
} else {
|
||||||
|
*seqNumBitField &= ~MESSAGE_BIT_MASK;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_isReliable) {
|
||||||
|
*seqNumBitField |= RELIABILITY_BIT_MASK;
|
||||||
|
} else {
|
||||||
|
*seqNumBitField &= ~RELIABILITY_BIT_MASK;
|
||||||
|
}
|
||||||
|
|
||||||
// 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::Type) seqNum;
|
*seqNumBitField = (*seqNumBitField & BIT_FIELD_MASK) | (SequenceNumber::Type)_sequenceNumber;
|
||||||
}
|
}
|
||||||
|
|
|
@ -47,9 +47,12 @@ public:
|
||||||
virtual qint64 localHeaderSize() const;
|
virtual qint64 localHeaderSize() const;
|
||||||
|
|
||||||
virtual qint64 totalHeadersSize() const; // Cumulated size of all the headers
|
virtual qint64 totalHeadersSize() const; // Cumulated size of all the headers
|
||||||
|
|
||||||
void writeSequenceNumber(SequenceNumber seqNum);
|
bool isPartOfMessage() const { return _isPartOfMessage; }
|
||||||
|
bool isReliable() const { return _isReliable; }
|
||||||
SequenceNumber getSequenceNumber() const { return _sequenceNumber; }
|
SequenceNumber getSequenceNumber() const { return _sequenceNumber; }
|
||||||
|
|
||||||
|
void setSequenceNumber();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Packet(qint64 size, bool isReliable = false, bool isPartOfMessage = false);
|
Packet(qint64 size, bool isReliable = false, bool isPartOfMessage = false);
|
||||||
|
@ -61,9 +64,8 @@ protected:
|
||||||
Packet& operator=(Packet&& other);
|
Packet& operator=(Packet&& other);
|
||||||
|
|
||||||
// Header readers - these read data to member variables after pulling packet off wire
|
// Header readers - these read data to member variables after pulling packet off wire
|
||||||
void readIsPartOfMessage();
|
void readHeader();
|
||||||
void readIsReliable();
|
void writeHeader();
|
||||||
void readSequenceNumber();
|
|
||||||
|
|
||||||
bool _isReliable { false };
|
bool _isReliable { false };
|
||||||
bool _isPartOfMessage { false };
|
bool _isPartOfMessage { false };
|
||||||
|
|
Loading…
Reference in a new issue