summaryrefslogtreecommitdiff
path: root/platform/android/src/http_file_source.cpp
diff options
context:
space:
mode:
authorIvo van Dongen <info@ivovandongen.nl>2016-09-02 17:36:23 +0200
committerIvo van Dongen <info@ivovandongen.nl>2016-09-13 14:21:38 +0200
commited4e37ba9f9e8c0c6b699aa6e1cf05547b95d6bc (patch)
tree8b04061de5178422be1fae220d534ae74e16712b /platform/android/src/http_file_source.cpp
parentdc4659b4a80cd6cfcce5db75b0648bbd4eb14b55 (diff)
downloadqtlocation-mapboxgl-ed4e37ba9f9e8c0c6b699aa6e1cf05547b95d6bc.tar.gz
[android] HttpFileSource - rate limit
Diffstat (limited to 'platform/android/src/http_file_source.cpp')
-rw-r--r--platform/android/src/http_file_source.cpp18
1 files changed, 16 insertions, 2 deletions
diff --git a/platform/android/src/http_file_source.cpp b/platform/android/src/http_file_source.cpp
index 97ccdb14b4..00b61aa107 100644
--- a/platform/android/src/http_file_source.cpp
+++ b/platform/android/src/http_file_source.cpp
@@ -29,6 +29,7 @@ public:
void onResponse(jni::JNIEnv&, int code,
jni::String etag, jni::String modified,
jni::String cacheControl, jni::String expires,
+ jni::String retryAfter, jni::String xRateLimitReset,
jni::Array<jni::jbyte> body);
static jni::Class<HTTPRequest> javaClass;
@@ -101,8 +102,11 @@ HTTPRequest::~HTTPRequest() {
}
void HTTPRequest::onResponse(jni::JNIEnv& env, int code,
- jni::String etag, jni::String modified, jni::String cacheControl,
- jni::String expires, jni::Array<jni::jbyte> body) {
+ jni::String etag, jni::String modified,
+ jni::String cacheControl, jni::String expires,
+ jni::String jRetryAfter, jni::String jXRateLimitReset,
+ jni::Array<jni::jbyte> body) {
+
using Error = Response::Error;
if (etag) {
@@ -135,6 +139,16 @@ void HTTPRequest::onResponse(jni::JNIEnv& env, int code,
response.notModified = true;
} else if (code == 404) {
response.error = std::make_unique<Error>(Error::Reason::NotFound, "HTTP status code 404");
+ } else if (code == 429) {
+ optional<std::string> retryAfter;
+ optional<std::string> xRateLimitReset;
+ if (jRetryAfter) {
+ retryAfter = jni::Make<std::string>(env, jRetryAfter);
+ }
+ if (jXRateLimitReset) {
+ xRateLimitReset = jni::Make<std::string>(env, jXRateLimitReset);
+ }
+ response.error = std::make_unique<Error>(Error::Reason::RateLimit, "HTTP status code 429", http::parseRetryHeaders(retryAfter, xRateLimitReset));
} else if (code >= 500 && code < 600) {
response.error = std::make_unique<Error>(Error::Reason::Server, std::string{ "HTTP status code " } + std::to_string(code));
} else {