diff --git a/libraries/networking/src/AssetClient.cpp b/libraries/networking/src/AssetClient.cpp index 054557e920..3faa9981dc 100644 --- a/libraries/networking/src/AssetClient.cpp +++ b/libraries/networking/src/AssetClient.cpp @@ -353,13 +353,20 @@ void AssetClient::handleAssetGetReply(QSharedPointer message, S connect(message.data(), &ReceivedMessage::progress, this, [this, weakNode, messageID, length](qint64 size) { handleProgressCallback(weakNode, messageID, size, length); }); - connect(message.data(), &ReceivedMessage::completed, this, [this, weakNode, messageID]() { - handleCompleteCallback(weakNode, messageID); + connect(message.data(), &ReceivedMessage::completed, this, [this, weakNode, messageID, length]() { + handleCompleteCallback(weakNode, messageID, length); }); if (message->isComplete()) { disconnect(message.data(), nullptr, this, nullptr); - callbacks.completeCallback(true, error, message->readAll()); + + if (length != message->getBytesLeftToRead()) { + callbacks.completeCallback(false, error, QByteArray()); + } else { + callbacks.completeCallback(true, error, message->readAll()); + } + + messageCallbackMap.erase(requestIt); } } @@ -391,7 +398,7 @@ void AssetClient::handleProgressCallback(const QWeakPointer& node, Message callbacks.progressCallback(size, length); } -void AssetClient::handleCompleteCallback(const QWeakPointer& node, MessageID messageID) { +void AssetClient::handleCompleteCallback(const QWeakPointer& node, MessageID messageID, DataOffset length) { auto senderNode = node.toStrongRef(); if (!senderNode) { @@ -424,8 +431,7 @@ void AssetClient::handleCompleteCallback(const QWeakPointer& node, Message return; } - - if (message->failed()) { + if (message->failed() || length != message->getBytesLeftToRead()) { callbacks.completeCallback(false, AssetServerError::NoError, QByteArray()); } else { callbacks.completeCallback(true, AssetServerError::NoError, message->readAll()); diff --git a/libraries/networking/src/AssetClient.h b/libraries/networking/src/AssetClient.h index 6f9cc3cd31..cab4a4f5b0 100644 --- a/libraries/networking/src/AssetClient.h +++ b/libraries/networking/src/AssetClient.h @@ -93,7 +93,7 @@ private: bool cancelUploadAssetRequest(MessageID id); void handleProgressCallback(const QWeakPointer& node, MessageID messageID, qint64 size, DataOffset length); - void handleCompleteCallback(const QWeakPointer& node, MessageID messageID); + void handleCompleteCallback(const QWeakPointer& node, MessageID messageID, DataOffset length); void forceFailureOfPendingRequests(SharedNodePointer node); diff --git a/libraries/networking/src/AssetRequest.cpp b/libraries/networking/src/AssetRequest.cpp index 00fa3d9f2f..7fa563d4ad 100644 --- a/libraries/networking/src/AssetRequest.cpp +++ b/libraries/networking/src/AssetRequest.cpp @@ -104,12 +104,7 @@ void AssetRequest::start() { break; } } else { - if (_byteRange.isSet()) { - // we had a byte range, the size of the data does not match what we expect, so we return an error - if (data.size() != _byteRange.size()) { - _error = SizeVerificationFailed; - } - } else if (hashData(data).toHex() != _hash) { + if (!_byteRange.isSet() && hashData(data).toHex() != _hash) { // the hash of the received data does not match what we expect, so we return an error _error = HashVerificationFailed; }