summaryrefslogtreecommitdiff
path: root/platform/android/src
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
parentdc4659b4a80cd6cfcce5db75b0648bbd4eb14b55 (diff)
downloadqtlocation-mapboxgl-ed4e37ba9f9e8c0c6b699aa6e1cf05547b95d6bc.tar.gz
[android] HttpFileSource - rate limit
Diffstat (limited to 'platform/android/src')
-rw-r--r--platform/android/src/http_file_source.cpp18
-rwxr-xr-xplatform/android/src/jni.cpp3
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;