From d863759f529f60bc937ff137fbdd1010f1d2bb05 Mon Sep 17 00:00:00 2001 From: Mattt Thompson Date: Wed, 22 Aug 2012 11:53:19 -0700 Subject: [PATCH] Reformatting and documenting AFHTTPRequestOperation -connection:didReceiveResponse: --- AFNetworking/AFHTTPRequestOperation.m | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/AFNetworking/AFHTTPRequestOperation.m b/AFNetworking/AFHTTPRequestOperation.m index a26984b4bb..cf10ba8b6d 100644 --- a/AFNetworking/AFHTTPRequestOperation.m +++ b/AFNetworking/AFHTTPRequestOperation.m @@ -275,11 +275,21 @@ - (void)connection:(NSURLConnection *)connection { 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 fileOffset = 0; 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]) { [self.outputStream setProperty:[NSNumber numberWithInteger:0] forKey:NSStreamFileCurrentOffsetKey]; } else { @@ -287,19 +297,11 @@ - (void)connection:(NSURLConnection *)connection 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.totalContentLength = totalContentLength; + [self.outputStream open]; }