diff options
author | Konstantin Käfer <mail@kkaefer.com> | 2014-09-26 16:10:39 +0200 |
---|---|---|
committer | Konstantin Käfer <mail@kkaefer.com> | 2014-09-26 16:10:39 +0200 |
commit | b9628c86543ffe819b030c3d84f65fa09e084850 (patch) | |
tree | e98e154b307a6a2b9eaa88c40d9c7fff8702e308 /common/http_request_baton_cocoa.mm | |
parent | 1209744b38da0252731812d4cc5371be960fb3c3 (diff) | |
download | qtlocation-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.mm | 22 |
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; |