Reformatting and documenting AFHTTPRequestOperation -connection:didReceiveResponse:
This commit is contained in:
parent
384df960ac
commit
d863759f52
1 changed files with 14 additions and 12 deletions
|
|
@ -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];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue