summaryrefslogtreecommitdiff
path: root/common/http_request_baton_cocoa.mm
diff options
context:
space:
mode:
authorKonstantin Käfer <mail@kkaefer.com>2014-09-26 16:10:39 +0200
committerKonstantin Käfer <mail@kkaefer.com>2014-09-26 16:10:39 +0200
commitb9628c86543ffe819b030c3d84f65fa09e084850 (patch)
treee98e154b307a6a2b9eaa88c40d9c7fff8702e308 /common/http_request_baton_cocoa.mm
parent1209744b38da0252731812d4cc5371be960fb3c3 (diff)
downloadqtlocation-mapboxgl-b9628c86543ffe819b030c3d84f65fa09e084850.tar.gz
add etag support and if-none-match/if-modified-since to cocoa http handling
Diffstat (limited to 'common/http_request_baton_cocoa.mm')
-rw-r--r--common/http_request_baton_cocoa.mm22
1 files changed, 15 insertions, 7 deletions
diff --git a/common/http_request_baton_cocoa.mm b/common/http_request_baton_cocoa.mm
index 497d55653a..2ebbec481c 100644
--- a/common/http_request_baton_cocoa.mm
+++ b/common/http_request_baton_cocoa.mm
@@ -35,13 +35,16 @@ void HTTPRequestBaton::start(const util::ptr<HTTPRequestBaton> &ptr) {
});
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:@(baton->path.c_str())]];
- if (baton->response && baton->response->modified) {
- struct tm *timeinfo;
- char buffer[32];
- const time_t modified = baton->response->modified;
- timeinfo = std::gmtime(&modified);
- strftime_l(buffer, 32, "%a, %d %b %Y %H:%M:%S GMT", timeinfo, locale);
- [request addValue:@(buffer) forHTTPHeaderField:@"If-Modified-Since"];
+ if (baton->response) {
+ if (!baton->response->etag.empty()) {
+ [request addValue:@(baton->response->etag.c_str()) forHTTPHeaderField:@"If-None-Match"];
+ } else if (baton->response->modified) {
+ const time_t modified = baton->response->modified;
+ struct tm *timeinfo = std::gmtime(&modified);
+ char buffer[32];
+ strftime_l(buffer, 32, "%a, %d %b %Y %H:%M:%S GMT", timeinfo, locale);
+ [request addValue:@(buffer) forHTTPHeaderField:@"If-Modified-Since"];
+ }
}
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
@@ -113,6 +116,11 @@ void HTTPRequestBaton::start(const util::ptr<HTTPRequestBaton> &ptr) {
if (last_modified) {
baton->response->modified = parse_date([last_modified UTF8String]);
}
+
+ NSString *etag = [headers objectForKey:@"ETag"];
+ if (etag) {
+ baton->response->etag = [etag UTF8String];
+ }
} else {
// This should never happen.
baton->type = HTTPResponseType::PermanentError;