From b4ab6828bbae18cd5fd752d0f11a72882e99d3b4 Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Tue, 7 Jul 2015 15:43:16 -0700 Subject: [PATCH] Added setPacketType to Packet class --- libraries/networking/src/Packet.cpp | 25 +++++++++++++++++-------- libraries/networking/src/Packet.h | 15 +++++++++------ 2 files changed, 26 insertions(+), 14 deletions(-) diff --git a/libraries/networking/src/Packet.cpp b/libraries/networking/src/Packet.cpp index 6a02af803b..65d0899a94 100644 --- a/libraries/networking/src/Packet.cpp +++ b/libraries/networking/src/Packet.cpp @@ -62,11 +62,11 @@ Packet::Packet(PacketType::Value type, qint64 size) : Q_ASSERT(size <= maxPayloadSize(type)); // copy packet type and version in header - setPacketTypeAndVersion(type); + writePacketTypeAndVersion(type); // Set control bit and sequence number to 0 if necessary if (SEQUENCE_NUMBERED_PACKETS.contains(type)) { - setSequenceNumber(0); + writeSequenceNumber(0); } } @@ -103,15 +103,24 @@ Packet& Packet::operator=(Packet&& other) { 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()); } -PacketVersion Packet::getPacketTypeVersion() const { +PacketVersion Packet::readPacketTypeVersion() const { return *reinterpret_cast(_packet.get() + numBytesForArithmeticCodedPacketType(_type)); } -Packet::SequenceNumber Packet::getSequenceNumber() const { +Packet::SequenceNumber Packet::readSequenceNumber() const { if (SEQUENCE_NUMBERED_PACKETS.contains(_type)) { SequenceNumber seqNum = *reinterpret_cast(_packet.get() + numBytesForArithmeticCodedPacketType(_type) + @@ -121,7 +130,7 @@ Packet::SequenceNumber Packet::getSequenceNumber() const { return -1; } -bool Packet::isControlPacket() const { +bool Packet::readIsControlPacket() const { if (SEQUENCE_NUMBERED_PACKETS.contains(_type)) { SequenceNumber seqNum = *reinterpret_cast(_packet.get() + numBytesForArithmeticCodedPacketType(_type) + @@ -131,7 +140,7 @@ bool Packet::isControlPacket() const { return false; } -void Packet::setPacketTypeAndVersion(PacketType::Value type) { +void Packet::writePacketTypeAndVersion(PacketType::Value type) { // Pack the packet type auto offset = packArithmeticallyCodedValue(type, _packet.get()); @@ -140,7 +149,7 @@ void Packet::setPacketTypeAndVersion(PacketType::Value type) { 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. // But that is not an issue since we should only ever set the seqNum // for data packets going out diff --git a/libraries/networking/src/Packet.h b/libraries/networking/src/Packet.h index 63f6db8fda..9d58d1e2e1 100644 --- a/libraries/networking/src/Packet.h +++ b/libraries/networking/src/Packet.h @@ -40,15 +40,18 @@ public: char* getData() { 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 getSizeUsed() const { return _sizeUsed; } void setSizeUsed(qint64 sizeUsed) { _sizeUsed = sizeUsed; } // Header readers - PacketType::Value getPacketType() const; - PacketVersion getPacketTypeVersion() const; - SequenceNumber getSequenceNumber() const; - bool isControlPacket() const; + PacketType::Value readPacketType() const; + PacketVersion readPacketTypeVersion() const; + SequenceNumber readSequenceNumber() const; + bool readIsControlPacket() const; // QIODevice virtual functions // 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); // Header writers - void setPacketTypeAndVersion(PacketType::Value type); - void setSequenceNumber(SequenceNumber seqNum); + void writePacketTypeAndVersion(PacketType::Value type); + void writeSequenceNumber(SequenceNumber seqNum); PacketType::Value _type; // Packet type