Skip to content

Instantly share code, notes, and snippets.

@pita5
Created October 30, 2012 14:04
Show Gist options
  • Save pita5/3980343 to your computer and use it in GitHub Desktop.
Save pita5/3980343 to your computer and use it in GitHub Desktop.
- (CFHTTPMessageRef)createHeadMessage
{
NSURL* url = self.request.URL;
CFHTTPMessageRef request = CFHTTPMessageCreateRequest(NULL, (CFStringRef)@"HEAD", (__bridge CFURLRef)url, kCFHTTPVersion1_1);
return request;
}
- (NSDictionary *)responseHeaders:(CFHTTPMessageRef)request
{
CFReadStreamRef requestStream = CFReadStreamCreateForHTTPRequest(NULL, request);
CFReadStreamOpen(requestStream);
NSMutableData* responseBytes = [NSMutableData data];
CFIndex numBytesRead = 0;
do
{
UInt8 buf[1024];
numBytesRead = CFReadStreamRead(requestStream, buf, sizeof(buf));
if(numBytesRead > 0)
[responseBytes appendBytes:buf length:numBytesRead];
}
while(numBytesRead > 0);
CFHTTPMessageRef response = (CFHTTPMessageRef)CFReadStreamCopyProperty(requestStream, kCFStreamPropertyHTTPResponseHeader);
CFHTTPMessageSetBody(response, (__bridge CFDataRef)responseBytes);
CFReadStreamClose(requestStream);
CFRelease(requestStream);
NSDictionary* responseHeaders = CFBridgingRelease(CFHTTPMessageCopyAllHeaderFields(response));
CFRelease(response);
return responseHeaders;
}
- (void)_doesLoacalCacheNeedUpdate
{
if (!_cachedResponse)
{
// If we don't have some cached data, we need an update!
[self _startLoadingConnection];
}
else
{
CFHTTPMessageRef request = [self createHeadMessage];
NSDictionary* responseHeaders = [self responseHeaders:request];
CFRelease(request);
[self _compareFreshHeaders:responseHeaders
withCacheHeaders:self.cachedResponse.response.allHeaderFields];
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment