diff --git a/libraries/networking/src/AssetResourceRequest.cpp b/libraries/networking/src/AssetResourceRequest.cpp index 93c1b49329..b98560152a 100644 --- a/libraries/networking/src/AssetResourceRequest.cpp +++ b/libraries/networking/src/AssetResourceRequest.cpp @@ -13,6 +13,7 @@ #include "AssetClient.h" #include "AssetRequest.h" +#include "AssetUtils.h" void AssetResourceRequest::doSend() { // Make request to atp @@ -21,9 +22,23 @@ void AssetResourceRequest::doSend() { auto hash = parts[0]; auto extension = parts.length() > 1 ? parts[1] : ""; + if (hash.length() != SHA256_HASH_HEX_LENGTH) { + _result = InvalidURL; + _state = Finished; + + emit finished(); + + return; + } + auto request = assetClient->createRequest(hash, extension); if (!request) { + _result = ServerUnavailable; + _state = Finished; + + emit finished(); + return; } diff --git a/libraries/networking/src/ResourceCache.cpp b/libraries/networking/src/ResourceCache.cpp index f3b534af15..ea8c6c74c2 100644 --- a/libraries/networking/src/ResourceCache.cpp +++ b/libraries/networking/src/ResourceCache.cpp @@ -396,6 +396,7 @@ void Resource::handleReplyFinished() { bool retry = false; switch (result) { case ResourceRequest::Result::Timeout: + case ResourceRequest::Result::ServerUnavailable: case ResourceRequest::Result::Error: { // retry with increasing delays const int MAX_ATTEMPTS = 8; diff --git a/libraries/networking/src/ResourceRequest.h b/libraries/networking/src/ResourceRequest.h index c5e56e4a85..0aae013b62 100644 --- a/libraries/networking/src/ResourceRequest.h +++ b/libraries/networking/src/ResourceRequest.h @@ -30,7 +30,9 @@ public: Success, Error, Timeout, + ServerUnavailable, AccessDenied, + InvalidURL, NotFound };