diff --git a/platform/android/http_request_android.cpp b/platform/android/http_request_android.cpp index 6e44db4b1..b909c2212 100644 --- a/platform/android/http_request_android.cpp +++ b/platform/android/http_request_android.cpp @@ -2,7 +2,6 @@ #include #include #include -#include #include #include @@ -248,21 +247,6 @@ void HTTPAndroidRequest::finish() { delete this; } -int64_t parseCacheControl(const char *value) { - if (value) { - unsigned long long seconds = 0; - // TODO: cache-control may contain other information as well: - // http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9 - if (std::sscanf(value, "max-age=%llu", &seconds) == 1) { - return std::chrono::duration_cast( - std::chrono::system_clock::now().time_since_epoch()).count() + - seconds; - } - } - - return 0; -} - void HTTPAndroidRequest::onResponse(int code, std::string message, std::string etag, std::string modified, std::string cacheControl, std::string expires, std::string body) { if (!response) { response = std::make_unique(); diff --git a/platform/darwin/http_request_nsurl.mm b/platform/darwin/http_request_nsurl.mm index f5a4d8ef9..59f3c6b71 100644 --- a/platform/darwin/http_request_nsurl.mm +++ b/platform/darwin/http_request_nsurl.mm @@ -198,21 +198,6 @@ void HTTPNSURLRequest::cancel() { } } -int64_t parseCacheControl(const char *value) { - if (value) { - unsigned long long seconds = 0; - // TODO: cache-control may contain other information as well: - // http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9 - if (std::sscanf(value, "max-age=%llu", &seconds) == 1) { - return std::chrono::duration_cast( - std::chrono::system_clock::now().time_since_epoch()).count() + - seconds; - } - } - - return 0; -} - void HTTPNSURLRequest::handleResult(NSData *data, NSURLResponse *res, NSError *error) { if (error) { if ([error code] == NSURLErrorCancelled) { diff --git a/platform/default/http_request_curl.cpp b/platform/default/http_request_curl.cpp index 2d80f0b60..efc4efadf 100644 --- a/platform/default/http_request_curl.cpp +++ b/platform/default/http_request_curl.cpp @@ -2,7 +2,6 @@ #include #include #include -#include #include #include @@ -541,21 +540,6 @@ size_t headerMatches(const char *const header, const char *const buffer, const s return i == headerLength ? i : std::string::npos; } -int64_t parseCacheControl(const char *value) { - if (value) { - unsigned long long seconds = 0; - // TODO: cache-control may contain other information as well: - // http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9 - if (std::sscanf(value, "max-age=%llu", &seconds) == 1) { - return std::chrono::duration_cast( - SystemClock::now().time_since_epoch()).count() + - seconds; - } - } - - return 0; -} - size_t HTTPCURLRequest::headerCallback(char *const buffer, const size_t size, const size_t nmemb, void *userp) { assert(userp); auto baton = reinterpret_cast(userp); diff --git a/src/mbgl/storage/http_request_base.cpp b/src/mbgl/storage/http_request_base.cpp new file mode 100644 index 000000000..2da453ead --- /dev/null +++ b/src/mbgl/storage/http_request_base.cpp @@ -0,0 +1,22 @@ +#include + +#include + +namespace mbgl { + +int64_t HTTPRequestBase::parseCacheControl(const char *value) { + if (value) { + unsigned long long seconds = 0; + // TODO: cache-control may contain other information as well: + // http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9 + if (std::sscanf(value, "max-age=%llu", &seconds) == 1) { + return std::chrono::duration_cast( + std::chrono::system_clock::now().time_since_epoch()).count() + + seconds; + } + } + + return 0; +} + +} diff --git a/src/mbgl/storage/http_request_base.hpp b/src/mbgl/storage/http_request_base.hpp index 508095e3c..b28cb9fcc 100644 --- a/src/mbgl/storage/http_request_base.hpp +++ b/src/mbgl/storage/http_request_base.hpp @@ -46,6 +46,8 @@ public: virtual void retry() = 0; protected: + static int64_t parseCacheControl(const char *value); + bool cancelled; };