mirror of
https://github.com/overte-org/overte.git
synced 2025-07-10 21:18:54 +02:00
Added setPacketType to Packet class
This commit is contained in:
parent
11c58ebc9e
commit
b4ab6828bb
2 changed files with 26 additions and 14 deletions
|
@ -62,11 +62,11 @@ Packet::Packet(PacketType::Value type, qint64 size) :
|
||||||
Q_ASSERT(size <= maxPayloadSize(type));
|
Q_ASSERT(size <= maxPayloadSize(type));
|
||||||
|
|
||||||
// copy packet type and version in header
|
// copy packet type and version in header
|
||||||
setPacketTypeAndVersion(type);
|
writePacketTypeAndVersion(type);
|
||||||
|
|
||||||
// Set control bit and sequence number to 0 if necessary
|
// Set control bit and sequence number to 0 if necessary
|
||||||
if (SEQUENCE_NUMBERED_PACKETS.contains(type)) {
|
if (SEQUENCE_NUMBERED_PACKETS.contains(type)) {
|
||||||
setSequenceNumber(0);
|
writeSequenceNumber(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -103,15 +103,24 @@ Packet& Packet::operator=(Packet&& other) {
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
PacketType::Value Packet::getPacketType() const {
|
void Packet::setPacketType(PacketType::Value type) {
|
||||||
|
auto currentHeaderSize = totalHeadersSize();
|
||||||
|
_type = type;
|
||||||
|
writePacketTypeAndVersion(_type);
|
||||||
|
|
||||||
|
// Setting new packet type with a different header size not currently supported
|
||||||
|
Q_ASSERT(currentHeaderSize == totalHeadersSize());
|
||||||
|
}
|
||||||
|
|
||||||
|
PacketType::Value Packet::readPacketType() const {
|
||||||
return (PacketType::Value)arithmeticCodingValueFromBuffer(_packet.get());
|
return (PacketType::Value)arithmeticCodingValueFromBuffer(_packet.get());
|
||||||
}
|
}
|
||||||
|
|
||||||
PacketVersion Packet::getPacketTypeVersion() const {
|
PacketVersion Packet::readPacketTypeVersion() const {
|
||||||
return *reinterpret_cast<PacketVersion*>(_packet.get() + numBytesForArithmeticCodedPacketType(_type));
|
return *reinterpret_cast<PacketVersion*>(_packet.get() + numBytesForArithmeticCodedPacketType(_type));
|
||||||
}
|
}
|
||||||
|
|
||||||
Packet::SequenceNumber Packet::getSequenceNumber() const {
|
Packet::SequenceNumber Packet::readSequenceNumber() const {
|
||||||
if (SEQUENCE_NUMBERED_PACKETS.contains(_type)) {
|
if (SEQUENCE_NUMBERED_PACKETS.contains(_type)) {
|
||||||
SequenceNumber seqNum = *reinterpret_cast<SequenceNumber*>(_packet.get() +
|
SequenceNumber seqNum = *reinterpret_cast<SequenceNumber*>(_packet.get() +
|
||||||
numBytesForArithmeticCodedPacketType(_type) +
|
numBytesForArithmeticCodedPacketType(_type) +
|
||||||
|
@ -121,7 +130,7 @@ Packet::SequenceNumber Packet::getSequenceNumber() const {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Packet::isControlPacket() const {
|
bool Packet::readIsControlPacket() const {
|
||||||
if (SEQUENCE_NUMBERED_PACKETS.contains(_type)) {
|
if (SEQUENCE_NUMBERED_PACKETS.contains(_type)) {
|
||||||
SequenceNumber seqNum = *reinterpret_cast<SequenceNumber*>(_packet.get() +
|
SequenceNumber seqNum = *reinterpret_cast<SequenceNumber*>(_packet.get() +
|
||||||
numBytesForArithmeticCodedPacketType(_type) +
|
numBytesForArithmeticCodedPacketType(_type) +
|
||||||
|
@ -131,7 +140,7 @@ bool Packet::isControlPacket() const {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Packet::setPacketTypeAndVersion(PacketType::Value type) {
|
void Packet::writePacketTypeAndVersion(PacketType::Value type) {
|
||||||
// Pack the packet type
|
// Pack the packet type
|
||||||
auto offset = packArithmeticallyCodedValue(type, _packet.get());
|
auto offset = packArithmeticallyCodedValue(type, _packet.get());
|
||||||
|
|
||||||
|
@ -140,7 +149,7 @@ void Packet::setPacketTypeAndVersion(PacketType::Value type) {
|
||||||
memcpy(_packet.get() + offset, &version, sizeof(version));
|
memcpy(_packet.get() + offset, &version, sizeof(version));
|
||||||
}
|
}
|
||||||
|
|
||||||
void Packet::setSequenceNumber(SequenceNumber seqNum) {
|
void Packet::writeSequenceNumber(SequenceNumber seqNum) {
|
||||||
// Here we are overriding the control bit to 0.
|
// Here we are overriding the control bit to 0.
|
||||||
// But that is not an issue since we should only ever set the seqNum
|
// But that is not an issue since we should only ever set the seqNum
|
||||||
// for data packets going out
|
// for data packets going out
|
||||||
|
|
|
@ -40,15 +40,18 @@ public:
|
||||||
char* getData() { return _packet.get(); }
|
char* getData() { return _packet.get(); }
|
||||||
const char* getData() const { return _packet.get(); }
|
const char* getData() const { return _packet.get(); }
|
||||||
|
|
||||||
|
PacketType::Value getPacketType() const { return _type; }
|
||||||
|
void setPacketType(PacketType::Value type);
|
||||||
|
|
||||||
qint64 getSizeWithHeader() const { return localHeaderSize() + getSizeUsed(); }
|
qint64 getSizeWithHeader() const { return localHeaderSize() + getSizeUsed(); }
|
||||||
qint64 getSizeUsed() const { return _sizeUsed; }
|
qint64 getSizeUsed() const { return _sizeUsed; }
|
||||||
void setSizeUsed(qint64 sizeUsed) { _sizeUsed = sizeUsed; }
|
void setSizeUsed(qint64 sizeUsed) { _sizeUsed = sizeUsed; }
|
||||||
|
|
||||||
// Header readers
|
// Header readers
|
||||||
PacketType::Value getPacketType() const;
|
PacketType::Value readPacketType() const;
|
||||||
PacketVersion getPacketTypeVersion() const;
|
PacketVersion readPacketTypeVersion() const;
|
||||||
SequenceNumber getSequenceNumber() const;
|
SequenceNumber readSequenceNumber() const;
|
||||||
bool isControlPacket() const;
|
bool readIsControlPacket() const;
|
||||||
|
|
||||||
// QIODevice virtual functions
|
// QIODevice virtual functions
|
||||||
// WARNING: Those methods all refer to the payload ONLY and NOT the entire packet
|
// WARNING: Those methods all refer to the payload ONLY and NOT the entire packet
|
||||||
|
@ -64,8 +67,8 @@ protected:
|
||||||
virtual qint64 readData(char* data, qint64 maxSize);
|
virtual qint64 readData(char* data, qint64 maxSize);
|
||||||
|
|
||||||
// Header writers
|
// Header writers
|
||||||
void setPacketTypeAndVersion(PacketType::Value type);
|
void writePacketTypeAndVersion(PacketType::Value type);
|
||||||
void setSequenceNumber(SequenceNumber seqNum);
|
void writeSequenceNumber(SequenceNumber seqNum);
|
||||||
|
|
||||||
PacketType::Value _type; // Packet type
|
PacketType::Value _type; // Packet type
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue