Reformatting and documenting AFHTTPRequestOperation -connection:didReceiveResponse:

This commit is contained in:
Mattt Thompson 2012-08-22 11:53:19 -07:00
parent 384df960ac
commit d863759f52

View file

@ -275,11 +275,21 @@ didReceiveResponse:(NSURLResponse *)response
{ {
self.response = (NSHTTPURLResponse *)response; self.response = (NSHTTPURLResponse *)response;
// 206 = Partial Content. // Set Content-Range header if status code of response is 206 (Partial Content)
// See http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.2.7
long long totalContentLength = self.response.expectedContentLength; long long totalContentLength = self.response.expectedContentLength;
long long fileOffset = 0; long long fileOffset = 0;
NSUInteger statusCode = ([self.response isKindOfClass:[NSHTTPURLResponse class]]) ? (NSUInteger)[self.response statusCode] : 200; NSUInteger statusCode = ([self.response isKindOfClass:[NSHTTPURLResponse class]]) ? (NSUInteger)[self.response statusCode] : 200;
if (statusCode != 206) { if (statusCode == 206) {
NSString *contentRange = [self.response.allHeaderFields valueForKey:@"Content-Range"];
if ([contentRange hasPrefix:@"bytes"]) {
NSArray *byteRanges = [contentRange componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@" -/"]];
if ([byteRanges count] == 4) {
fileOffset = [[byteRanges objectAtIndex:1] longLongValue];
totalContentLength = [[byteRanges objectAtIndex:2] longLongValue] ?: -1; // if this is "*", it's converted to 0, but -1 is default.
}
}
} else {
if ([self.outputStream propertyForKey:NSStreamFileCurrentOffsetKey]) { if ([self.outputStream propertyForKey:NSStreamFileCurrentOffsetKey]) {
[self.outputStream setProperty:[NSNumber numberWithInteger:0] forKey:NSStreamFileCurrentOffsetKey]; [self.outputStream setProperty:[NSNumber numberWithInteger:0] forKey:NSStreamFileCurrentOffsetKey];
} else { } else {
@ -287,19 +297,11 @@ didReceiveResponse:(NSURLResponse *)response
self.outputStream = [NSOutputStream outputStreamToMemory]; self.outputStream = [NSOutputStream outputStreamToMemory];
} }
} }
} else {
NSString *contentRange = [self.response.allHeaderFields valueForKey:@"Content-Range"];
if ([contentRange hasPrefix:@"bytes"]) {
NSArray *bytes = [contentRange componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@" -/"]];
if ([bytes count] == 4) {
fileOffset = [[bytes objectAtIndex:1] longLongValue];
totalContentLength = [[bytes objectAtIndex:2] longLongValue] ?: -1; // if this is *, it's converted to 0, but -1 is default.
}
}
} }
self.offsetContentLength = MAX(fileOffset, 0); self.offsetContentLength = MAX(fileOffset, 0);
self.totalContentLength = totalContentLength; self.totalContentLength = totalContentLength;
[self.outputStream open]; [self.outputStream open];
} }