Cleanup:
* Move certain properties that the user really shouldn't access to private * Rename outputStream to fileDownloadOutputStream * Use getters in more places
Showing
2 changed files
with
95 additions
and
72 deletions
| @@ -37,7 +37,7 @@ typedef enum _ASINetworkErrorType { | @@ -37,7 +37,7 @@ typedef enum _ASINetworkErrorType { | ||
| 37 | // The delegate, you need to manage setting and talking to your delegate in your subclasses | 37 | // The delegate, you need to manage setting and talking to your delegate in your subclasses |
| 38 | id delegate; | 38 | id delegate; |
| 39 | 39 | ||
| 40 | - // A queue delegate that should *ALSO* be notified of delegate message | 40 | + // A queue delegate that should *ALSO* be notified of delegate message (used by ASINetworkQueue) |
| 41 | id queue; | 41 | id queue; |
| 42 | 42 | ||
| 43 | // HTTP method to use (GET / POST / PUT / DELETE). Defaults to GET | 43 | // HTTP method to use (GET / POST / PUT / DELETE). Defaults to GET |
| @@ -95,7 +95,7 @@ typedef enum _ASINetworkErrorType { | @@ -95,7 +95,7 @@ typedef enum _ASINetworkErrorType { | ||
| 95 | NSString *temporaryFileDownloadPath; | 95 | NSString *temporaryFileDownloadPath; |
| 96 | 96 | ||
| 97 | // Used for writing data to a file when downloadDestinationPath is set | 97 | // Used for writing data to a file when downloadDestinationPath is set |
| 98 | - NSOutputStream *outputStream; | 98 | + NSOutputStream *fileDownloadOutputStream; |
| 99 | 99 | ||
| 100 | // When the request fails or completes successfully, complete will be true | 100 | // When the request fails or completes successfully, complete will be true |
| 101 | BOOL complete; | 101 | BOOL complete; |
| @@ -104,9 +104,6 @@ typedef enum _ASINetworkErrorType { | @@ -104,9 +104,6 @@ typedef enum _ASINetworkErrorType { | ||
| 104 | // If error code is = ASIConnectionFailureErrorType (1, Connection failure occurred) - inspect [[error userInfo] objectForKey:NSUnderlyingErrorKey] for more information | 104 | // If error code is = ASIConnectionFailureErrorType (1, Connection failure occurred) - inspect [[error userInfo] objectForKey:NSUnderlyingErrorKey] for more information |
| 105 | NSError *error; | 105 | NSError *error; |
| 106 | 106 | ||
| 107 | - // If an authentication error occurs, we give the delegate a chance to handle it, ignoreError will be set to true | ||
| 108 | - BOOL ignoreError; | ||
| 109 | - | ||
| 110 | // Username and password used for authentication | 107 | // Username and password used for authentication |
| 111 | NSString *username; | 108 | NSString *username; |
| 112 | NSString *password; | 109 | NSString *password; |
| @@ -366,37 +363,33 @@ typedef enum _ASINetworkErrorType { | @@ -366,37 +363,33 @@ typedef enum _ASINetworkErrorType { | ||
| 366 | @property (retain,readonly) NSString *authenticationRealm; | 363 | @property (retain,readonly) NSString *authenticationRealm; |
| 367 | @property (retain) NSError *error; | 364 | @property (retain) NSError *error; |
| 368 | @property (assign,readonly) BOOL complete; | 365 | @property (assign,readonly) BOOL complete; |
| 369 | -@property (retain) NSDictionary *responseHeaders; | 366 | +@property (retain,readonly) NSDictionary *responseHeaders; |
| 370 | @property (retain) NSMutableDictionary *requestHeaders; | 367 | @property (retain) NSMutableDictionary *requestHeaders; |
| 371 | @property (retain) NSMutableArray *requestCookies; | 368 | @property (retain) NSMutableArray *requestCookies; |
| 372 | -@property (retain) NSArray *responseCookies; | 369 | +@property (retain,readonly) NSArray *responseCookies; |
| 373 | @property (assign) BOOL useCookiePersistance; | 370 | @property (assign) BOOL useCookiePersistance; |
| 374 | @property (retain) NSDictionary *requestCredentials; | 371 | @property (retain) NSDictionary *requestCredentials; |
| 375 | -@property (assign) int responseStatusCode; | 372 | +@property (assign,readonly) int responseStatusCode; |
| 376 | -@property (retain) NSMutableData *rawResponseData; | 373 | +@property (retain,readonly) NSMutableData *rawResponseData; |
| 377 | -@property (retain) NSDate *lastActivityTime; | ||
| 378 | @property (assign) NSTimeInterval timeOutSeconds; | 374 | @property (assign) NSTimeInterval timeOutSeconds; |
| 379 | @property (retain) NSString *requestMethod; | 375 | @property (retain) NSString *requestMethod; |
| 380 | @property (retain) NSMutableData *postBody; | 376 | @property (retain) NSMutableData *postBody; |
| 381 | -@property (assign) unsigned long long contentLength; | 377 | +@property (assign,readonly) unsigned long long contentLength; |
| 382 | -@property (assign) unsigned long long partialDownloadSize; | ||
| 383 | @property (assign) unsigned long long postLength; | 378 | @property (assign) unsigned long long postLength; |
| 384 | @property (assign) BOOL shouldResetProgressIndicators; | 379 | @property (assign) BOOL shouldResetProgressIndicators; |
| 385 | @property (retain) ASIHTTPRequest *mainRequest; | 380 | @property (retain) ASIHTTPRequest *mainRequest; |
| 386 | @property (assign) BOOL showAccurateProgress; | 381 | @property (assign) BOOL showAccurateProgress; |
| 387 | @property (assign,readonly) unsigned long long totalBytesRead; | 382 | @property (assign,readonly) unsigned long long totalBytesRead; |
| 388 | @property (assign,readonly) unsigned long long totalBytesSent; | 383 | @property (assign,readonly) unsigned long long totalBytesSent; |
| 389 | -@property (assign) unsigned long long uploadBufferSize; | ||
| 390 | @property (assign) NSStringEncoding defaultResponseEncoding; | 384 | @property (assign) NSStringEncoding defaultResponseEncoding; |
| 391 | -@property (assign) NSStringEncoding responseEncoding; | 385 | +@property (assign,readonly) NSStringEncoding responseEncoding; |
| 392 | @property (assign) BOOL allowCompressedResponse; | 386 | @property (assign) BOOL allowCompressedResponse; |
| 393 | @property (assign) BOOL allowResumeForFileDownloads; | 387 | @property (assign) BOOL allowResumeForFileDownloads; |
| 394 | @property (retain) NSDictionary *userInfo; | 388 | @property (retain) NSDictionary *userInfo; |
| 395 | @property (retain) NSString *postBodyFilePath; | 389 | @property (retain) NSString *postBodyFilePath; |
| 396 | -@property (retain) NSOutputStream *postBodyWriteStream; | ||
| 397 | -@property (retain) NSInputStream *postBodyReadStream; | ||
| 398 | @property (assign) BOOL shouldStreamPostDataFromDisk; | 390 | @property (assign) BOOL shouldStreamPostDataFromDisk; |
| 399 | @property (assign) BOOL didCreateTemporaryPostDataFile; | 391 | @property (assign) BOOL didCreateTemporaryPostDataFile; |
| 400 | @property (assign) BOOL useHTTPVersionOne; | 392 | @property (assign) BOOL useHTTPVersionOne; |
| 393 | +@property (assign, readonly) unsigned long long partialDownloadSize; | ||
| 401 | 394 | ||
| 402 | @end | 395 | @end |
| @@ -38,6 +38,32 @@ static NSError *ASIRequestTimedOutError; | @@ -38,6 +38,32 @@ static NSError *ASIRequestTimedOutError; | ||
| 38 | static NSError *ASIAuthenticationError; | 38 | static NSError *ASIAuthenticationError; |
| 39 | static NSError *ASIUnableToCreateRequestError; | 39 | static NSError *ASIUnableToCreateRequestError; |
| 40 | 40 | ||
| 41 | +// Private stuff | ||
| 42 | +@interface ASIHTTPRequest () | ||
| 43 | + @property (retain,setter=setURL:) NSURL *url; | ||
| 44 | + @property (assign) BOOL complete; | ||
| 45 | + @property (retain) NSDictionary *responseHeaders; | ||
| 46 | + @property (retain) NSArray *responseCookies; | ||
| 47 | + @property (assign) int responseStatusCode; | ||
| 48 | + @property (retain) NSMutableData *rawResponseData; | ||
| 49 | + @property (retain, nonatomic) NSDate *lastActivityTime; | ||
| 50 | + @property (assign) unsigned long long contentLength; | ||
| 51 | + @property (assign) unsigned long long partialDownloadSize; | ||
| 52 | + @property (assign, nonatomic) unsigned long long uploadBufferSize; | ||
| 53 | + @property (assign) NSStringEncoding responseEncoding; | ||
| 54 | + @property (retain, nonatomic) NSOutputStream *postBodyWriteStream; | ||
| 55 | + @property (retain, nonatomic) NSInputStream *postBodyReadStream; | ||
| 56 | + @property (assign) unsigned long long totalBytesRead; | ||
| 57 | + @property (assign) unsigned long long totalBytesSent; | ||
| 58 | + @property (assign, nonatomic) unsigned long long lastBytesRead; | ||
| 59 | + @property (assign, nonatomic) unsigned long long lastBytesSent; | ||
| 60 | + @property (retain) NSLock *cancelledLock; | ||
| 61 | + @property (assign, nonatomic) BOOL haveBuiltPostBody; | ||
| 62 | + @property (retain, nonatomic) NSOutputStream *fileDownloadOutputStream; | ||
| 63 | + @property (assign, nonatomic) int authenticationRetryCount; | ||
| 64 | + @property (assign, nonatomic) BOOL updatedProgress; | ||
| 65 | +@end | ||
| 66 | + | ||
| 41 | @implementation ASIHTTPRequest | 67 | @implementation ASIHTTPRequest |
| 42 | 68 | ||
| 43 | 69 | ||
| @@ -73,8 +99,8 @@ static NSError *ASIUnableToCreateRequestError; | @@ -73,8 +99,8 @@ static NSError *ASIUnableToCreateRequestError; | ||
| 73 | [self setRequestCookies:[[[NSMutableArray alloc] init] autorelease]]; | 99 | [self setRequestCookies:[[[NSMutableArray alloc] init] autorelease]]; |
| 74 | [self setDidFinishSelector:@selector(requestFinished:)]; | 100 | [self setDidFinishSelector:@selector(requestFinished:)]; |
| 75 | [self setDidFailSelector:@selector(requestFailed:)]; | 101 | [self setDidFailSelector:@selector(requestFailed:)]; |
| 76 | - url = [newURL retain]; | 102 | + [self setURL:newURL]; |
| 77 | - cancelledLock = [[NSLock alloc] init]; | 103 | + [self setCancelledLock:[[[NSLock alloc] init] autorelease]]; |
| 78 | return self; | 104 | return self; |
| 79 | } | 105 | } |
| 80 | 106 | ||
| @@ -96,7 +122,7 @@ static NSError *ASIUnableToCreateRequestError; | @@ -96,7 +122,7 @@ static NSError *ASIUnableToCreateRequestError; | ||
| 96 | [requestCookies release]; | 122 | [requestCookies release]; |
| 97 | [downloadDestinationPath release]; | 123 | [downloadDestinationPath release]; |
| 98 | [temporaryFileDownloadPath release]; | 124 | [temporaryFileDownloadPath release]; |
| 99 | - [outputStream release]; | 125 | + [fileDownloadOutputStream release]; |
| 100 | [username release]; | 126 | [username release]; |
| 101 | [password release]; | 127 | [password release]; |
| 102 | [domain release]; | 128 | [domain release]; |
| @@ -147,14 +173,14 @@ static NSError *ASIUnableToCreateRequestError; | @@ -147,14 +173,14 @@ static NSError *ASIUnableToCreateRequestError; | ||
| 147 | [self setPostLength:[postBody length]]; | 173 | [self setPostLength:[postBody length]]; |
| 148 | } | 174 | } |
| 149 | 175 | ||
| 150 | - if (postLength > 0) | 176 | + if ([self postLength] > 0) |
| 151 | { | 177 | { |
| 152 | if (![requestMethod isEqualToString:@"POST"] && ![requestMethod isEqualToString:@"PUT"]) { | 178 | if (![requestMethod isEqualToString:@"POST"] && ![requestMethod isEqualToString:@"PUT"]) { |
| 153 | [self setRequestMethod:@"POST"]; | 179 | [self setRequestMethod:@"POST"]; |
| 154 | } | 180 | } |
| 155 | [self addRequestHeader:@"Content-Length" value:[NSString stringWithFormat:@"%llu",postLength]]; | 181 | [self addRequestHeader:@"Content-Length" value:[NSString stringWithFormat:@"%llu",postLength]]; |
| 156 | } | 182 | } |
| 157 | - haveBuiltPostBody = YES; | 183 | + [self setHaveBuiltPostBody:YES]; |
| 158 | } | 184 | } |
| 159 | 185 | ||
| 160 | // Sets up storage for the post body | 186 | // Sets up storage for the post body |
| @@ -212,7 +238,7 @@ static NSError *ASIUnableToCreateRequestError; | @@ -212,7 +238,7 @@ static NSError *ASIUnableToCreateRequestError; | ||
| 212 | 238 | ||
| 213 | - (BOOL)isFinished | 239 | - (BOOL)isFinished |
| 214 | { | 240 | { |
| 215 | - return complete; | 241 | + return [self complete]; |
| 216 | } | 242 | } |
| 217 | 243 | ||
| 218 | 244 | ||
| @@ -221,7 +247,7 @@ static NSError *ASIUnableToCreateRequestError; | @@ -221,7 +247,7 @@ static NSError *ASIUnableToCreateRequestError; | ||
| 221 | [self failWithError:ASIRequestCancelledError]; | 247 | [self failWithError:ASIRequestCancelledError]; |
| 222 | [super cancel]; | 248 | [super cancel]; |
| 223 | [self cancelLoad]; | 249 | [self cancelLoad]; |
| 224 | - complete = YES; | 250 | + [self setComplete:YES]; |
| 225 | 251 | ||
| 226 | } | 252 | } |
| 227 | 253 | ||
| @@ -262,14 +288,14 @@ static NSError *ASIUnableToCreateRequestError; | @@ -262,14 +288,14 @@ static NSError *ASIUnableToCreateRequestError; | ||
| 262 | [pool release]; | 288 | [pool release]; |
| 263 | pool = [[NSAutoreleasePool alloc] init]; | 289 | pool = [[NSAutoreleasePool alloc] init]; |
| 264 | 290 | ||
| 265 | - complete = NO; | 291 | + [self setComplete:NO]; |
| 266 | 292 | ||
| 267 | - if (!url) { | 293 | + if (![self url]) { |
| 268 | [self failWithError:ASIUnableToCreateRequestError]; | 294 | [self failWithError:ASIUnableToCreateRequestError]; |
| 269 | return; | 295 | return; |
| 270 | } | 296 | } |
| 271 | 297 | ||
| 272 | - if (!haveBuiltPostBody) { | 298 | + if (![self haveBuiltPostBody]) { |
| 273 | [self buildPostBody]; | 299 | [self buildPostBody]; |
| 274 | } | 300 | } |
| 275 | 301 | ||
| @@ -366,18 +392,18 @@ static NSError *ASIUnableToCreateRequestError; | @@ -366,18 +392,18 @@ static NSError *ASIUnableToCreateRequestError; | ||
| 366 | [authenticationLock release]; | 392 | [authenticationLock release]; |
| 367 | authenticationLock = [[NSConditionLock alloc] initWithCondition:1]; | 393 | authenticationLock = [[NSConditionLock alloc] initWithCondition:1]; |
| 368 | 394 | ||
| 369 | - complete = NO; | 395 | + [self setComplete:NO]; |
| 370 | - totalBytesRead = 0; | 396 | + [self setTotalBytesRead:0]; |
| 371 | - lastBytesRead = 0; | 397 | + [self setLastBytesRead:0]; |
| 372 | 398 | ||
| 373 | // If we're retrying a request after an authentication failure, let's remove any progress we made | 399 | // If we're retrying a request after an authentication failure, let's remove any progress we made |
| 374 | - if (lastBytesSent > 0) { | 400 | + if ([self lastBytesSent] > 0) { |
| 375 | [self removeUploadProgressSoFar]; | 401 | [self removeUploadProgressSoFar]; |
| 376 | } | 402 | } |
| 377 | 403 | ||
| 378 | - lastBytesSent = 0; | 404 | + [self setLastBytesSent:0]; |
| 379 | - if (shouldResetProgressIndicators) { | 405 | + if ([self shouldResetProgressIndicators]) { |
| 380 | - contentLength = 0; | 406 | + [self setContentLength:0]; |
| 381 | [self resetDownloadProgress:0]; | 407 | [self resetDownloadProgress:0]; |
| 382 | } | 408 | } |
| 383 | [self setResponseHeaders:nil]; | 409 | [self setResponseHeaders:nil]; |
| @@ -459,7 +485,7 @@ static NSError *ASIUnableToCreateRequestError; | @@ -459,7 +485,7 @@ static NSError *ASIUnableToCreateRequestError; | ||
| 459 | if (contentLength <= uploadBufferSize || (uploadBufferSize > 0 && totalBytesSent > uploadBufferSize)) { | 485 | if (contentLength <= uploadBufferSize || (uploadBufferSize > 0 && totalBytesSent > uploadBufferSize)) { |
| 460 | [self failWithError:ASIRequestTimedOutError]; | 486 | [self failWithError:ASIRequestTimedOutError]; |
| 461 | [self cancelLoad]; | 487 | [self cancelLoad]; |
| 462 | - complete = YES; | 488 | + [self setComplete:YES]; |
| 463 | break; | 489 | break; |
| 464 | } | 490 | } |
| 465 | } | 491 | } |
| @@ -472,11 +498,11 @@ static NSError *ASIUnableToCreateRequestError; | @@ -472,11 +498,11 @@ static NSError *ASIUnableToCreateRequestError; | ||
| 472 | // Find out if we've sent any more data than last time, and reset the timeout if so | 498 | // Find out if we've sent any more data than last time, and reset the timeout if so |
| 473 | if (totalBytesSent > lastBytesSent) { | 499 | if (totalBytesSent > lastBytesSent) { |
| 474 | [self setLastActivityTime:[NSDate date]]; | 500 | [self setLastActivityTime:[NSDate date]]; |
| 475 | - lastBytesSent = totalBytesSent; | 501 | + [self setLastBytesSent:totalBytesSent]; |
| 476 | } | 502 | } |
| 477 | 503 | ||
| 478 | // Find out how much data we've uploaded so far | 504 | // Find out how much data we've uploaded so far |
| 479 | - totalBytesSent = [[(NSNumber *)CFReadStreamCopyProperty(readStream, kCFStreamPropertyHTTPRequestBytesWrittenCount) autorelease] unsignedLongLongValue]; | 505 | + [self setTotalBytesSent:[[(NSNumber *)CFReadStreamCopyProperty(readStream, kCFStreamPropertyHTTPRequestBytesWrittenCount) autorelease] unsignedLongLongValue]]; |
| 480 | 506 | ||
| 481 | [self updateProgressIndicators]; | 507 | [self updateProgressIndicators]; |
| 482 | 508 | ||
| @@ -505,7 +531,7 @@ static NSError *ASIUnableToCreateRequestError; | @@ -505,7 +531,7 @@ static NSError *ASIUnableToCreateRequestError; | ||
| 505 | 531 | ||
| 506 | // If we were downloading to a file | 532 | // If we were downloading to a file |
| 507 | } else if (temporaryFileDownloadPath) { | 533 | } else if (temporaryFileDownloadPath) { |
| 508 | - [outputStream close]; | 534 | + [fileDownloadOutputStream close]; |
| 509 | 535 | ||
| 510 | // If we haven't said we might want to resume, let's remove the temporary file too | 536 | // If we haven't said we might want to resume, let's remove the temporary file too |
| 511 | if (![self allowResumeForFileDownloads]) { | 537 | if (![self allowResumeForFileDownloads]) { |
| @@ -556,7 +582,7 @@ static NSError *ASIUnableToCreateRequestError; | @@ -556,7 +582,7 @@ static NSError *ASIUnableToCreateRequestError; | ||
| 556 | 582 | ||
| 557 | //Only update progress if this isn't a HEAD request used to preset the content-length | 583 | //Only update progress if this isn't a HEAD request used to preset the content-length |
| 558 | if (!mainRequest) { | 584 | if (!mainRequest) { |
| 559 | - if (showAccurateProgress || (complete && !updatedProgress)) { | 585 | + if ([self showAccurateProgress] || ([self complete] && ![self updatedProgress])) { |
| 560 | [self updateUploadProgress]; | 586 | [self updateUploadProgress]; |
| 561 | [self updateDownloadProgress]; | 587 | [self updateDownloadProgress]; |
| 562 | } | 588 | } |
| @@ -657,7 +683,7 @@ static NSError *ASIUnableToCreateRequestError; | @@ -657,7 +683,7 @@ static NSError *ASIUnableToCreateRequestError; | ||
| 657 | } | 683 | } |
| 658 | } else { | 684 | } else { |
| 659 | value = 1; | 685 | value = 1; |
| 660 | - updatedProgress = YES; | 686 | + [self setUpdatedProgress:YES]; |
| 661 | } | 687 | } |
| 662 | 688 | ||
| 663 | NSMethodSignature *signature = nil; | 689 | NSMethodSignature *signature = nil; |
| @@ -721,11 +747,11 @@ static NSError *ASIUnableToCreateRequestError; | @@ -721,11 +747,11 @@ static NSError *ASIUnableToCreateRequestError; | ||
| 721 | NSAutoreleasePool *thePool = [[NSAutoreleasePool alloc] init]; | 747 | NSAutoreleasePool *thePool = [[NSAutoreleasePool alloc] init]; |
| 722 | 748 | ||
| 723 | unsigned long long value = 0; | 749 | unsigned long long value = 0; |
| 724 | - if (showAccurateProgress) { | 750 | + if ([self showAccurateProgress]) { |
| 725 | - value = bytesReadSoFar-lastBytesRead; | 751 | + value = bytesReadSoFar-[self lastBytesRead]; |
| 726 | } else { | 752 | } else { |
| 727 | value = 1; | 753 | value = 1; |
| 728 | - updatedProgress = YES; | 754 | + [self setUpdatedProgress:YES]; |
| 729 | } | 755 | } |
| 730 | 756 | ||
| 731 | 757 | ||
| @@ -743,7 +769,7 @@ static NSError *ASIUnableToCreateRequestError; | @@ -743,7 +769,7 @@ static NSError *ASIUnableToCreateRequestError; | ||
| 743 | [ASIHTTPRequest setProgress:(double)(1.0*bytesReadSoFar/(contentLength+partialDownloadSize)) forProgressIndicator:downloadProgressDelegate]; | 769 | [ASIHTTPRequest setProgress:(double)(1.0*bytesReadSoFar/(contentLength+partialDownloadSize)) forProgressIndicator:downloadProgressDelegate]; |
| 744 | } | 770 | } |
| 745 | 771 | ||
| 746 | - lastBytesRead = bytesReadSoFar; | 772 | + [self setLastBytesRead:bytesReadSoFar]; |
| 747 | } | 773 | } |
| 748 | 774 | ||
| 749 | } | 775 | } |
| @@ -830,7 +856,7 @@ static NSError *ASIUnableToCreateRequestError; | @@ -830,7 +856,7 @@ static NSError *ASIUnableToCreateRequestError; | ||
| 830 | // If you do this, don't forget to call [super failWithError:] to let the queue / delegate know we're done | 856 | // If you do this, don't forget to call [super failWithError:] to let the queue / delegate know we're done |
| 831 | - (void)failWithError:(NSError *)theError | 857 | - (void)failWithError:(NSError *)theError |
| 832 | { | 858 | { |
| 833 | - complete = YES; | 859 | + [self setComplete:YES]; |
| 834 | 860 | ||
| 835 | if ([self isCancelled]) { | 861 | if ([self isCancelled]) { |
| 836 | return; | 862 | return; |
| @@ -888,12 +914,12 @@ static NSError *ASIUnableToCreateRequestError; | @@ -888,12 +914,12 @@ static NSError *ASIUnableToCreateRequestError; | ||
| 888 | // See if we got a Content-length header | 914 | // See if we got a Content-length header |
| 889 | NSString *cLength = [responseHeaders valueForKey:@"Content-Length"]; | 915 | NSString *cLength = [responseHeaders valueForKey:@"Content-Length"]; |
| 890 | if (cLength) { | 916 | if (cLength) { |
| 891 | - contentLength = CFStringGetIntValue((CFStringRef)cLength); | 917 | + [self setContentLength:CFStringGetIntValue((CFStringRef)cLength)]; |
| 892 | - if (mainRequest) { | 918 | + if ([self mainRequest]) { |
| 893 | - [mainRequest setContentLength:contentLength]; | 919 | + [[self mainRequest] setContentLength:contentLength]; |
| 894 | } | 920 | } |
| 895 | - if (showAccurateProgress && shouldResetProgressIndicators) { | 921 | + if ([self showAccurateProgress] && [self shouldResetProgressIndicators]) { |
| 896 | - [self resetDownloadProgress:contentLength+partialDownloadSize]; | 922 | + [self resetDownloadProgress:[self contentLength]+[self partialDownloadSize]]; |
| 897 | } | 923 | } |
| 898 | } | 924 | } |
| 899 | 925 | ||
| @@ -969,8 +995,8 @@ static NSError *ASIUnableToCreateRequestError; | @@ -969,8 +995,8 @@ static NSError *ASIUnableToCreateRequestError; | ||
| 969 | 995 | ||
| 970 | - (BOOL)applyCredentials:(NSMutableDictionary *)newCredentials | 996 | - (BOOL)applyCredentials:(NSMutableDictionary *)newCredentials |
| 971 | { | 997 | { |
| 972 | - authenticationRetryCount++; | 998 | + [self setAuthenticationRetryCount:[self authenticationRetryCount]+1]; |
| 973 | - | 999 | + |
| 974 | if (newCredentials && requestAuthentication && request) { | 1000 | if (newCredentials && requestAuthentication && request) { |
| 975 | // Apply whatever credentials we've built up to the old request | 1001 | // Apply whatever credentials we've built up to the old request |
| 976 | if (CFHTTPMessageApplyCredentialDictionary(request, requestAuthentication, (CFMutableDictionaryRef)newCredentials, NULL)) { | 1002 | if (CFHTTPMessageApplyCredentialDictionary(request, requestAuthentication, (CFMutableDictionaryRef)newCredentials, NULL)) { |
| @@ -1088,14 +1114,13 @@ static NSError *ASIUnableToCreateRequestError; | @@ -1088,14 +1114,13 @@ static NSError *ASIUnableToCreateRequestError; | ||
| 1088 | 1114 | ||
| 1089 | [self setRequestCredentials:nil]; | 1115 | [self setRequestCredentials:nil]; |
| 1090 | 1116 | ||
| 1091 | - ignoreError = YES; | ||
| 1092 | [self setLastActivityTime:nil]; | 1117 | [self setLastActivityTime:nil]; |
| 1093 | 1118 | ||
| 1094 | // If we have a delegate, we'll see if it can handle authorizationNeededForRequest. | 1119 | // If we have a delegate, we'll see if it can handle authorizationNeededForRequest. |
| 1095 | // Otherwise, we'll try the queue (if this request is part of one) and it will pass the message on to its own delegate | 1120 | // Otherwise, we'll try the queue (if this request is part of one) and it will pass the message on to its own delegate |
| 1096 | - id authorizationDelegate = delegate; | 1121 | + id authorizationDelegate = [self delegate]; |
| 1097 | - if (!delegate) { | 1122 | + if (!authorizationDelegate) { |
| 1098 | - authorizationDelegate = queue; | 1123 | + authorizationDelegate = [self queue]; |
| 1099 | } | 1124 | } |
| 1100 | 1125 | ||
| 1101 | if ([authorizationDelegate respondsToSelector:@selector(authorizationNeededForRequest:)]) { | 1126 | if ([authorizationDelegate respondsToSelector:@selector(authorizationNeededForRequest:)]) { |
| @@ -1144,13 +1169,11 @@ static NSError *ASIUnableToCreateRequestError; | @@ -1144,13 +1169,11 @@ static NSError *ASIUnableToCreateRequestError; | ||
| 1144 | } | 1169 | } |
| 1145 | 1170 | ||
| 1146 | // We've got no credentials, let's ask the delegate to sort this out | 1171 | // We've got no credentials, let's ask the delegate to sort this out |
| 1147 | - ignoreError = YES; | ||
| 1148 | - | ||
| 1149 | // If we have a delegate, we'll see if it can handle authorizationNeededForRequest. | 1172 | // If we have a delegate, we'll see if it can handle authorizationNeededForRequest. |
| 1150 | // Otherwise, we'll try the queue (if this request is part of one) and it will pass the message on to its own delegate | 1173 | // Otherwise, we'll try the queue (if this request is part of one) and it will pass the message on to its own delegate |
| 1151 | - id authorizationDelegate = delegate; | 1174 | + id authorizationDelegate = [self delegate]; |
| 1152 | - if (!delegate) { | 1175 | + if (!authorizationDelegate) { |
| 1153 | - authorizationDelegate = queue; | 1176 | + authorizationDelegate = [self queue]; |
| 1154 | } | 1177 | } |
| 1155 | 1178 | ||
| 1156 | if ([authorizationDelegate respondsToSelector:@selector(authorizationNeededForRequest:)]) { | 1179 | if ([authorizationDelegate respondsToSelector:@selector(authorizationNeededForRequest:)]) { |
| @@ -1196,7 +1219,7 @@ static NSError *ASIUnableToCreateRequestError; | @@ -1196,7 +1219,7 @@ static NSError *ASIUnableToCreateRequestError; | ||
| 1196 | - (void)handleBytesAvailable | 1219 | - (void)handleBytesAvailable |
| 1197 | { | 1220 | { |
| 1198 | 1221 | ||
| 1199 | - if (!responseHeaders) { | 1222 | + if (![self responseHeaders]) { |
| 1200 | if ([self readResponseHeadersReturningAuthenticationFailure]) { | 1223 | if ([self readResponseHeadersReturningAuthenticationFailure]) { |
| 1201 | [self attemptToApplyCredentialsAndResume]; | 1224 | [self attemptToApplyCredentialsAndResume]; |
| 1202 | return; | 1225 | return; |
| @@ -1220,11 +1243,11 @@ static NSError *ASIUnableToCreateRequestError; | @@ -1220,11 +1243,11 @@ static NSError *ASIUnableToCreateRequestError; | ||
| 1220 | // If zero bytes were read, wait for the EOF to come. | 1243 | // If zero bytes were read, wait for the EOF to come. |
| 1221 | } else if (bytesRead) { | 1244 | } else if (bytesRead) { |
| 1222 | 1245 | ||
| 1223 | - totalBytesRead += bytesRead; | 1246 | + [self setTotalBytesRead:[self totalBytesRead]+bytesRead]; |
| 1224 | 1247 | ||
| 1225 | // Are we downloading to a file? | 1248 | // Are we downloading to a file? |
| 1226 | - if (downloadDestinationPath) { | 1249 | + if ([self downloadDestinationPath]) { |
| 1227 | - if (!outputStream) { | 1250 | + if (![self fileDownloadOutputStream]) { |
| 1228 | BOOL append = NO; | 1251 | BOOL append = NO; |
| 1229 | if (![self temporaryFileDownloadPath]) { | 1252 | if (![self temporaryFileDownloadPath]) { |
| 1230 | [self setTemporaryFileDownloadPath:[NSTemporaryDirectory() stringByAppendingPathComponent:[[NSProcessInfo processInfo] globallyUniqueString]]]; | 1253 | [self setTemporaryFileDownloadPath:[NSTemporaryDirectory() stringByAppendingPathComponent:[[NSProcessInfo processInfo] globallyUniqueString]]]; |
| @@ -1232,10 +1255,10 @@ static NSError *ASIUnableToCreateRequestError; | @@ -1232,10 +1255,10 @@ static NSError *ASIUnableToCreateRequestError; | ||
| 1232 | append = YES; | 1255 | append = YES; |
| 1233 | } | 1256 | } |
| 1234 | 1257 | ||
| 1235 | - outputStream = [[NSOutputStream alloc] initToFileAtPath:temporaryFileDownloadPath append:append]; | 1258 | + [self setFileDownloadOutputStream:[[[NSOutputStream alloc] initToFileAtPath:temporaryFileDownloadPath append:append] autorelease]]; |
| 1236 | - [outputStream open]; | 1259 | + [fileDownloadOutputStream open]; |
| 1237 | } | 1260 | } |
| 1238 | - [outputStream write:buffer maxLength:bytesRead]; | 1261 | + [fileDownloadOutputStream write:buffer maxLength:bytesRead]; |
| 1239 | 1262 | ||
| 1240 | //Otherwise, let's add the data to our in-memory store | 1263 | //Otherwise, let's add the data to our in-memory store |
| 1241 | } else { | 1264 | } else { |
| @@ -1247,14 +1270,14 @@ static NSError *ASIUnableToCreateRequestError; | @@ -1247,14 +1270,14 @@ static NSError *ASIUnableToCreateRequestError; | ||
| 1247 | - (void)handleStreamComplete | 1270 | - (void)handleStreamComplete |
| 1248 | { | 1271 | { |
| 1249 | //Try to read the headers (if this is a HEAD request handleBytesAvailable available may not be called) | 1272 | //Try to read the headers (if this is a HEAD request handleBytesAvailable available may not be called) |
| 1250 | - if (!responseHeaders) { | 1273 | + if (![self responseHeaders]) { |
| 1251 | if ([self readResponseHeadersReturningAuthenticationFailure]) { | 1274 | if ([self readResponseHeadersReturningAuthenticationFailure]) { |
| 1252 | [self attemptToApplyCredentialsAndResume]; | 1275 | [self attemptToApplyCredentialsAndResume]; |
| 1253 | return; | 1276 | return; |
| 1254 | } | 1277 | } |
| 1255 | } | 1278 | } |
| 1256 | [progressLock lock]; | 1279 | [progressLock lock]; |
| 1257 | - complete = YES; | 1280 | + [self setComplete:YES]; |
| 1258 | [self updateProgressIndicators]; | 1281 | [self updateProgressIndicators]; |
| 1259 | 1282 | ||
| 1260 | if (readStream) { | 1283 | if (readStream) { |
| @@ -1274,7 +1297,7 @@ static NSError *ASIUnableToCreateRequestError; | @@ -1274,7 +1297,7 @@ static NSError *ASIUnableToCreateRequestError; | ||
| 1274 | 1297 | ||
| 1275 | // Close the output stream as we're done writing to the file | 1298 | // Close the output stream as we're done writing to the file |
| 1276 | if (temporaryFileDownloadPath) { | 1299 | if (temporaryFileDownloadPath) { |
| 1277 | - [outputStream close]; | 1300 | + [fileDownloadOutputStream close]; |
| 1278 | 1301 | ||
| 1279 | // Decompress the file (if necessary) directly to the destination path | 1302 | // Decompress the file (if necessary) directly to the destination path |
| 1280 | if ([self isResponseCompressed]) { | 1303 | if ([self isResponseCompressed]) { |
| @@ -1318,9 +1341,9 @@ static NSError *ASIUnableToCreateRequestError; | @@ -1318,9 +1341,9 @@ static NSError *ASIUnableToCreateRequestError; | ||
| 1318 | NSError *underlyingError = [(NSError *)CFReadStreamCopyError(readStream) autorelease]; | 1341 | NSError *underlyingError = [(NSError *)CFReadStreamCopyError(readStream) autorelease]; |
| 1319 | 1342 | ||
| 1320 | [self cancelLoad]; | 1343 | [self cancelLoad]; |
| 1321 | - complete = YES; | 1344 | + [self setComplete:YES]; |
| 1322 | 1345 | ||
| 1323 | - if (!error) { // We may already have handled this error | 1346 | + if (![self error]) { // We may already have handled this error |
| 1324 | 1347 | ||
| 1325 | [self failWithError:[NSError errorWithDomain:NetworkRequestErrorDomain code:ASIConnectionFailureErrorType userInfo:[NSDictionary dictionaryWithObjectsAndKeys:@"A connection failure occurred",NSLocalizedDescriptionKey,underlyingError,NSUnderlyingErrorKey,nil]]]; | 1348 | [self failWithError:[NSError errorWithDomain:NetworkRequestErrorDomain code:ASIConnectionFailureErrorType userInfo:[NSDictionary dictionaryWithObjectsAndKeys:@"A connection failure occurred",NSLocalizedDescriptionKey,underlyingError,NSUnderlyingErrorKey,nil]]]; |
| 1326 | } | 1349 | } |
| @@ -1599,4 +1622,11 @@ static NSError *ASIUnableToCreateRequestError; | @@ -1599,4 +1622,11 @@ static NSError *ASIUnableToCreateRequestError; | ||
| 1599 | @synthesize shouldStreamPostDataFromDisk; | 1622 | @synthesize shouldStreamPostDataFromDisk; |
| 1600 | @synthesize didCreateTemporaryPostDataFile; | 1623 | @synthesize didCreateTemporaryPostDataFile; |
| 1601 | @synthesize useHTTPVersionOne; | 1624 | @synthesize useHTTPVersionOne; |
| 1625 | +@synthesize lastBytesRead; | ||
| 1626 | +@synthesize lastBytesSent; | ||
| 1627 | +@synthesize cancelledLock; | ||
| 1628 | +@synthesize haveBuiltPostBody; | ||
| 1629 | +@synthesize fileDownloadOutputStream; | ||
| 1630 | +@synthesize authenticationRetryCount; | ||
| 1631 | +@synthesize updatedProgress; | ||
| 1602 | @end | 1632 | @end |
-
Please register or login to post a comment