diff options
author | Ivo van Dongen <info@ivovandongen.nl> | 2016-09-02 17:36:23 +0200 |
---|---|---|
committer | Ivo van Dongen <info@ivovandongen.nl> | 2016-09-13 14:21:38 +0200 |
commit | ed4e37ba9f9e8c0c6b699aa6e1cf05547b95d6bc (patch) | |
tree | 8b04061de5178422be1fae220d534ae74e16712b /platform/android/src | |
parent | dc4659b4a80cd6cfcce5db75b0648bbd4eb14b55 (diff) | |
download | qtlocation-mapboxgl-ed4e37ba9f9e8c0c6b699aa6e1cf05547b95d6bc.tar.gz |
[android] HttpFileSource - rate limit
Diffstat (limited to 'platform/android/src')
-rw-r--r-- | platform/android/src/http_file_source.cpp | 18 | ||||
-rwxr-xr-x | platform/android/src/jni.cpp | 3 |
2 files changed, 19 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 { diff --git a/platform/android/src/jni.cpp b/platform/android/src/jni.cpp index c0e4665de8..5f136595a8 100755 --- a/platform/android/src/jni.cpp +++ b/platform/android/src/jni.cpp @@ -1508,6 +1508,9 @@ void setOfflineRegionObserver(JNIEnv *env, jni::jobject* offlineRegion_, jni::jo case mbgl::Response::Error::Reason::Connection: errorReason = "REASON_CONNECTION"; break; + case mbgl::Response::Error::Reason::RateLimit: + errorReason = "REASON_RATE_LIMIT"; + break; case mbgl::Response::Error::Reason::Other: errorReason = "REASON_OTHER"; break; |