From 0839df6a7aa2a27784b6d43187ef839d5a9cb4c3 Mon Sep 17 00:00:00 2001 From: Ivo van Dongen Date: Fri, 2 Sep 2016 15:24:34 +0200 Subject: [PATCH] [qt] HttpFileSource - rate limit --- platform/qt/src/http_request.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/platform/qt/src/http_request.cpp b/platform/qt/src/http_request.cpp index ac7d969e3..e19316fe2 100644 --- a/platform/qt/src/http_request.cpp +++ b/platform/qt/src/http_request.cpp @@ -3,6 +3,7 @@ #include #include +#include #include #include @@ -68,6 +69,8 @@ void HTTPRequest::handleNetworkReply(QNetworkReply *reply) } QPair line; + optional retryAfter; + optional xRateLimitReset; foreach(line, reply->rawHeaderPairs()) { QString header = QString(line.first).toLower(); @@ -79,6 +82,10 @@ void HTTPRequest::handleNetworkReply(QNetworkReply *reply) response.expires = http::CacheControl::parse(line.second.constData()).toTimePoint(); } else if (header == "expires") { response.expires = util::parseTimestamp(line.second.constData()); + } else if (header == "retry-after") { + retryAfter = std::string(line.second.constData(), line.second.size()); + } else if (header == "x-rate-limit-reset") { + xRateLimitReset = std::string(line.second.constData(), line.second.size()); } } @@ -109,6 +116,11 @@ void HTTPRequest::handleNetworkReply(QNetworkReply *reply) } break; } + case 429: + response.error = std::make_unique( + Error::Reason::RateLimit, "HTTP status code 429", + http::parseRetryHeaders(retryAfter, xRateLimitReset)); + break; default: Response::Error::Reason reason = (responseCode >= 500 && responseCode < 600) ? Error::Reason::Server : Error::Reason::Other;