diff --git a/libraries/networking/src/AssetUtils.h b/libraries/networking/src/AssetUtils.h index 58e7aa6146..f13c9ac729 100644 --- a/libraries/networking/src/AssetUtils.h +++ b/libraries/networking/src/AssetUtils.h @@ -20,6 +20,9 @@ using MessageID = uint32_t; using DataOffset = int64_t; +using AssetPath = QString; +using AssetHash = QString; + const size_t SHA256_HASH_LENGTH = 32; const size_t SHA256_HASH_HEX_LENGTH = 64; const uint64_t MAX_UPLOAD_SIZE = 1000 * 1000 * 1000; // 1GB diff --git a/libraries/networking/src/ReceivedMessage.cpp b/libraries/networking/src/ReceivedMessage.cpp index eed275dc1a..6ef2b7c7d4 100644 --- a/libraries/networking/src/ReceivedMessage.cpp +++ b/libraries/networking/src/ReceivedMessage.cpp @@ -110,8 +110,8 @@ QByteArray ReceivedMessage::readAll() { QString ReceivedMessage::readString() { uint32_t size; readPrimitive(&size); - Q_ASSERT(size <= _size - _position); - auto string = QString::fromUtf8(_data.constData(), size); + //Q_ASSERT(size <= _size - _position); + auto string = QString::fromUtf8(_data.constData() + _position, size); _position += size; return string; } diff --git a/libraries/networking/src/ReceivedMessage.h b/libraries/networking/src/ReceivedMessage.h index b813149bed..e9131c074f 100644 --- a/libraries/networking/src/ReceivedMessage.h +++ b/libraries/networking/src/ReceivedMessage.h @@ -88,7 +88,6 @@ private: QByteArray _data; QByteArray _headData; - std::atomic _size { true }; std::atomic _position { 0 }; std::atomic _numPackets { 0 }; diff --git a/libraries/networking/src/udt/BasePacket.cpp b/libraries/networking/src/udt/BasePacket.cpp index 000573d241..e0b2a8ba3a 100644 --- a/libraries/networking/src/udt/BasePacket.cpp +++ b/libraries/networking/src/udt/BasePacket.cpp @@ -150,6 +150,20 @@ QByteArray BasePacket::readWithoutCopy(qint64 maxSize) { return data; } +qint64 BasePacket::writeString(const QString& string) { + QByteArray data = string.toUtf8(); + writePrimitive(static_cast(data.length())); + return writeData(data.constData(), data.length()); +} + +QString BasePacket::readString() { + uint32_t size {}; + readPrimitive(&size); + auto string = QString::fromUtf8(getPayload() + pos(), size); + seek(pos() + size); + return string; +} + bool BasePacket::reset() { if (isWritable()) { _payloadSize = 0; diff --git a/libraries/networking/src/udt/BasePacket.h b/libraries/networking/src/udt/BasePacket.h index 392a7c4384..846c05ecbf 100644 --- a/libraries/networking/src/udt/BasePacket.h +++ b/libraries/networking/src/udt/BasePacket.h @@ -77,7 +77,10 @@ public: using QIODevice::read; // Bring QIODevice::read methods to scope, otherwise they are hidden by folling method QByteArray read(qint64 maxSize); QByteArray readWithoutCopy(qint64 maxSize); // this can only be used if packet will stay in scope - + + qint64 writeString(const QString& string); + QString readString(); + template qint64 peekPrimitive(T* data); template qint64 readPrimitive(T* data); template qint64 writePrimitive(const T& data); diff --git a/libraries/networking/src/udt/PacketList.cpp b/libraries/networking/src/udt/PacketList.cpp index 978df9b9bb..b12b7e6938 100644 --- a/libraries/networking/src/udt/PacketList.cpp +++ b/libraries/networking/src/udt/PacketList.cpp @@ -158,6 +158,12 @@ void PacketList::preparePackets(MessageNumber messageNumber) { const qint64 PACKET_LIST_WRITE_ERROR = -1; +qint64 PacketList::writeString(const QString& string) { + QByteArray data = string.toUtf8(); + writePrimitive(static_cast(data.length())); + return writeData(data.constData(), data.length()); +} + qint64 PacketList::writeData(const char* data, qint64 maxSize) { auto sizeRemaining = maxSize; diff --git a/libraries/networking/src/udt/PacketList.h b/libraries/networking/src/udt/PacketList.h index 4f1e46e616..875eb70e45 100644 --- a/libraries/networking/src/udt/PacketList.h +++ b/libraries/networking/src/udt/PacketList.h @@ -59,6 +59,8 @@ public: template qint64 readPrimitive(T* data); template qint64 writePrimitive(const T& data); + + qint64 writeString(const QString& string); protected: PacketList(PacketType packetType, QByteArray extendedHeader = QByteArray(), bool isReliable = false, bool isOrdered = false);