From 1ec384ab4df02790a770369469a2b2465c727fff Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Tue, 26 May 2015 13:43:22 -0700 Subject: [PATCH] allow QByteArray data to be sent with a length. Use appendRawData in places that used to append raw byte-arrays --- libraries/entities/src/EntityItem.cpp | 10 +++++----- libraries/entities/src/EntityItemProperties.cpp | 10 +++++----- libraries/octree/src/OctreePacketData.cpp | 13 ++++++++++++- libraries/octree/src/OctreePacketData.h | 1 + 4 files changed, 23 insertions(+), 11 deletions(-) diff --git a/libraries/entities/src/EntityItem.cpp b/libraries/entities/src/EntityItem.cpp index ee728160f6..8cc373e5cc 100644 --- a/libraries/entities/src/EntityItem.cpp +++ b/libraries/entities/src/EntityItem.cpp @@ -183,9 +183,9 @@ OctreeElement::AppendState EntityItem::appendEntityData(OctreePacketData* packet QByteArray encodedPropertyFlags; int propertyCount = 0; - successIDFits = packetData->appendValue(encodedID); + successIDFits = packetData->appendRawData(encodedID); if (successIDFits) { - successTypeFits = packetData->appendValue(encodedType); + successTypeFits = packetData->appendRawData(encodedType); } if (successTypeFits) { successCreatedFits = packetData->appendValue(_created); @@ -194,17 +194,17 @@ OctreeElement::AppendState EntityItem::appendEntityData(OctreePacketData* packet successLastEditedFits = packetData->appendValue(lastEdited); } if (successLastEditedFits) { - successLastUpdatedFits = packetData->appendValue(encodedUpdateDelta); + successLastUpdatedFits = packetData->appendRawData(encodedUpdateDelta); } if (successLastUpdatedFits) { - successLastSimulatedFits = packetData->appendValue(encodedSimulatedDelta); + successLastSimulatedFits = packetData->appendRawData(encodedSimulatedDelta); } if (successLastSimulatedFits) { propertyFlagsOffset = packetData->getUncompressedByteOffset(); encodedPropertyFlags = propertyFlags; oldPropertyFlagsLength = encodedPropertyFlags.length(); - successPropertyFlagsFits = packetData->appendValue(encodedPropertyFlags); + successPropertyFlagsFits = packetData->appendRawData(encodedPropertyFlags); } bool headerFits = successIDFits && successTypeFits && successCreatedFits && successLastEditedFits diff --git a/libraries/entities/src/EntityItemProperties.cpp b/libraries/entities/src/EntityItemProperties.cpp index 07df72656b..59944b92fc 100644 --- a/libraries/entities/src/EntityItemProperties.cpp +++ b/libraries/entities/src/EntityItemProperties.cpp @@ -623,23 +623,23 @@ bool EntityItemProperties::encodeEntityEditPacket(PacketType command, EntityItem quint64 lastEdited = properties.getLastEdited(); bool successLastEditedFits = packetData->appendValue(lastEdited); - bool successIDFits = packetData->appendValue(encodedID); + bool successIDFits = packetData->appendRawData(encodedID); if (successIDFits) { - successIDFits = packetData->appendValue(encodedToken); + successIDFits = packetData->appendRawData(encodedToken); } - bool successTypeFits = packetData->appendValue(encodedType); + bool successTypeFits = packetData->appendRawData(encodedType); // NOTE: We intentionally do not send "created" times in edit messages. This is because: // 1) if the edit is to an existing entity, the created time can not be changed // 2) if the edit is to a new entity, the created time is the last edited time // TODO: Should we get rid of this in this in edit packets, since this has to always be 0? - bool successLastUpdatedFits = packetData->appendValue(encodedUpdateDelta); + bool successLastUpdatedFits = packetData->appendRawData(encodedUpdateDelta); int propertyFlagsOffset = packetData->getUncompressedByteOffset(); QByteArray encodedPropertyFlags = propertyFlags; int oldPropertyFlagsLength = encodedPropertyFlags.length(); - bool successPropertyFlagsFits = packetData->appendValue(encodedPropertyFlags); + bool successPropertyFlagsFits = packetData->appendRawData(encodedPropertyFlags); int propertyCount = 0; bool headerFits = successIDFits && successTypeFits && successLastEditedFits diff --git a/libraries/octree/src/OctreePacketData.cpp b/libraries/octree/src/OctreePacketData.cpp index ce8a6fbd0e..ed30c619ca 100644 --- a/libraries/octree/src/OctreePacketData.cpp +++ b/libraries/octree/src/OctreePacketData.cpp @@ -426,7 +426,12 @@ bool OctreePacketData::appendValue(const QUuid& uuid) { } bool OctreePacketData::appendValue(const QByteArray& bytes) { - bool success = appendRawData((const unsigned char*)bytes.constData(), bytes.size()); + // TODO: make this a ByteCountCoded leading byte + uint16_t length = bytes.size(); + bool success = appendValue(length); + if (success) { + success = appendRawData((const unsigned char*)bytes.constData(), bytes.size()); + } return success; } @@ -451,6 +456,12 @@ bool OctreePacketData::appendRawData(const unsigned char* data, int length) { return success; } + +bool OctreePacketData::appendRawData(QByteArray data) { + return appendRawData((unsigned char *)data.data(), data.size()); +} + + quint64 OctreePacketData::_compressContentTime = 0; quint64 OctreePacketData::_compressContentCalls = 0; diff --git a/libraries/octree/src/OctreePacketData.h b/libraries/octree/src/OctreePacketData.h index 2bad0e96d9..28d6ff7d20 100644 --- a/libraries/octree/src/OctreePacketData.h +++ b/libraries/octree/src/OctreePacketData.h @@ -183,6 +183,7 @@ public: /// appends raw bytes, might fail if byte would cause packet to be too large bool appendRawData(const unsigned char* data, int length); + bool appendRawData(QByteArray data); /// returns a byte offset from beginning of the uncompressed stream based on offset from end. /// Positive offsetFromEnd returns that many bytes before the end of uncompressed stream