mirror of
https://github.com/lubosz/overte.git
synced 2025-08-07 19:01:09 +02:00
Merge pull request #10656 from birarda/bug/range-bigger-than-file
fix ATP range requests for small ktx files
This commit is contained in:
commit
603c47f0da
3 changed files with 14 additions and 13 deletions
|
@ -353,13 +353,20 @@ void AssetClient::handleAssetGetReply(QSharedPointer<ReceivedMessage> message, S
|
||||||
connect(message.data(), &ReceivedMessage::progress, this, [this, weakNode, messageID, length](qint64 size) {
|
connect(message.data(), &ReceivedMessage::progress, this, [this, weakNode, messageID, length](qint64 size) {
|
||||||
handleProgressCallback(weakNode, messageID, size, length);
|
handleProgressCallback(weakNode, messageID, size, length);
|
||||||
});
|
});
|
||||||
connect(message.data(), &ReceivedMessage::completed, this, [this, weakNode, messageID]() {
|
connect(message.data(), &ReceivedMessage::completed, this, [this, weakNode, messageID, length]() {
|
||||||
handleCompleteCallback(weakNode, messageID);
|
handleCompleteCallback(weakNode, messageID, length);
|
||||||
});
|
});
|
||||||
|
|
||||||
if (message->isComplete()) {
|
if (message->isComplete()) {
|
||||||
disconnect(message.data(), nullptr, this, nullptr);
|
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);
|
messageCallbackMap.erase(requestIt);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -391,7 +398,7 @@ void AssetClient::handleProgressCallback(const QWeakPointer<Node>& node, Message
|
||||||
callbacks.progressCallback(size, length);
|
callbacks.progressCallback(size, length);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AssetClient::handleCompleteCallback(const QWeakPointer<Node>& node, MessageID messageID) {
|
void AssetClient::handleCompleteCallback(const QWeakPointer<Node>& node, MessageID messageID, DataOffset length) {
|
||||||
auto senderNode = node.toStrongRef();
|
auto senderNode = node.toStrongRef();
|
||||||
|
|
||||||
if (!senderNode) {
|
if (!senderNode) {
|
||||||
|
@ -424,8 +431,7 @@ void AssetClient::handleCompleteCallback(const QWeakPointer<Node>& node, Message
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (message->failed() || length != message->getBytesLeftToRead()) {
|
||||||
if (message->failed()) {
|
|
||||||
callbacks.completeCallback(false, AssetServerError::NoError, QByteArray());
|
callbacks.completeCallback(false, AssetServerError::NoError, QByteArray());
|
||||||
} else {
|
} else {
|
||||||
callbacks.completeCallback(true, AssetServerError::NoError, message->readAll());
|
callbacks.completeCallback(true, AssetServerError::NoError, message->readAll());
|
||||||
|
|
|
@ -93,7 +93,7 @@ private:
|
||||||
bool cancelUploadAssetRequest(MessageID id);
|
bool cancelUploadAssetRequest(MessageID id);
|
||||||
|
|
||||||
void handleProgressCallback(const QWeakPointer<Node>& node, MessageID messageID, qint64 size, DataOffset length);
|
void handleProgressCallback(const QWeakPointer<Node>& node, MessageID messageID, qint64 size, DataOffset length);
|
||||||
void handleCompleteCallback(const QWeakPointer<Node>& node, MessageID messageID);
|
void handleCompleteCallback(const QWeakPointer<Node>& node, MessageID messageID, DataOffset length);
|
||||||
|
|
||||||
void forceFailureOfPendingRequests(SharedNodePointer node);
|
void forceFailureOfPendingRequests(SharedNodePointer node);
|
||||||
|
|
||||||
|
|
|
@ -104,12 +104,7 @@ void AssetRequest::start() {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (_byteRange.isSet()) {
|
if (!_byteRange.isSet() && hashData(data).toHex() != _hash) {
|
||||||
// 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) {
|
|
||||||
// the hash of the received data does not match what we expect, so we return an error
|
// the hash of the received data does not match what we expect, so we return an error
|
||||||
_error = HashVerificationFailed;
|
_error = HashVerificationFailed;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue