Start work on on-the-fly inflating
Probably need to move all this gzip stuff out of ASIHTTPRequest next, it's starting to get a bit complicated
Showing
2 changed files
with
37 additions
and
13 deletions
@@ -14,6 +14,7 @@ | @@ -14,6 +14,7 @@ | ||
14 | #if TARGET_OS_IPHONE | 14 | #if TARGET_OS_IPHONE |
15 | #import <CFNetwork/CFNetwork.h> | 15 | #import <CFNetwork/CFNetwork.h> |
16 | #endif | 16 | #endif |
17 | +#import <zlib.h> | ||
17 | #import <stdio.h> | 18 | #import <stdio.h> |
18 | #import "ASIHTTPRequestConfig.h" | 19 | #import "ASIHTTPRequestConfig.h" |
19 | #import "ASIHTTPRequestDelegate.h" | 20 | #import "ASIHTTPRequestDelegate.h" |
@@ -145,12 +146,17 @@ extern unsigned long const ASIWWANBandwidthThrottleAmount; | @@ -145,12 +146,17 @@ extern unsigned long const ASIWWANBandwidthThrottleAmount; | ||
145 | // If downloadDestinationPath is not set, download data will be stored in memory | 146 | // If downloadDestinationPath is not set, download data will be stored in memory |
146 | NSString *downloadDestinationPath; | 147 | NSString *downloadDestinationPath; |
147 | 148 | ||
148 | - //The location that files will be downloaded to. Once a download is complete, files will be decompressed (if necessary) and moved to downloadDestinationPath | 149 | + // The location that files will be downloaded to. Once a download is complete, files will be decompressed (if necessary) and moved to downloadDestinationPath |
149 | NSString *temporaryFileDownloadPath; | 150 | NSString *temporaryFileDownloadPath; |
150 | 151 | ||
152 | + // If | ||
153 | + NSString *temporaryUncompressedDataDownloadPath; | ||
154 | + | ||
151 | // Used for writing data to a file when downloadDestinationPath is set | 155 | // Used for writing data to a file when downloadDestinationPath is set |
152 | NSOutputStream *fileDownloadOutputStream; | 156 | NSOutputStream *fileDownloadOutputStream; |
153 | 157 | ||
158 | + NSOutputStream *inflatedFileDownloadOutputStream; | ||
159 | + | ||
154 | // When the request fails or completes successfully, complete will be true | 160 | // When the request fails or completes successfully, complete will be true |
155 | BOOL complete; | 161 | BOOL complete; |
156 | 162 | ||
@@ -423,7 +429,13 @@ extern unsigned long const ASIWWANBandwidthThrottleAmount; | @@ -423,7 +429,13 @@ extern unsigned long const ASIWWANBandwidthThrottleAmount; | ||
423 | 429 | ||
424 | // Set secondsToCache to use a custom time interval for expiring the response when it is stored in a cache | 430 | // Set secondsToCache to use a custom time interval for expiring the response when it is stored in a cache |
425 | NSTimeInterval secondsToCache; | 431 | NSTimeInterval secondsToCache; |
432 | + | ||
433 | + z_stream zStream; | ||
434 | + NSMutableData *uncompressedResponseData; | ||
435 | + int lastLen; | ||
436 | + | ||
426 | } | 437 | } |
438 | +- (NSData *)uncompressBytes:(void *)bytes length:(NSInteger)length error:(NSError **)err; | ||
427 | 439 | ||
428 | #pragma mark init / dealloc | 440 | #pragma mark init / dealloc |
429 | 441 | ||
@@ -478,15 +490,7 @@ extern unsigned long const ASIWWANBandwidthThrottleAmount; | @@ -478,15 +490,7 @@ extern unsigned long const ASIWWANBandwidthThrottleAmount; | ||
478 | // Run request in the background | 490 | // Run request in the background |
479 | - (void)startAsynchronous; | 491 | - (void)startAsynchronous; |
480 | 492 | ||
481 | -#pragma mark request logic | ||
482 | - | ||
483 | -// Call to delete the temporary file used during a file download (if it exists) | ||
484 | -// No need to call this if the request succeeds - it is removed automatically | ||
485 | -- (void)removeTemporaryDownloadFile; | ||
486 | 493 | ||
487 | -// Call to remove the file used as the request body | ||
488 | -// No need to call this if the request succeeds and you didn't specify postBodyFilePath manually - it is removed automatically | ||
489 | -- (void)removePostDataFile; | ||
490 | 494 | ||
491 | #pragma mark HEAD request | 495 | #pragma mark HEAD request |
492 | 496 | ||
@@ -587,6 +591,25 @@ extern unsigned long const ASIWWANBandwidthThrottleAmount; | @@ -587,6 +591,25 @@ extern unsigned long const ASIWWANBandwidthThrottleAmount; | ||
587 | - (void)handleStreamComplete; | 591 | - (void)handleStreamComplete; |
588 | - (void)handleStreamError; | 592 | - (void)handleStreamError; |
589 | 593 | ||
594 | +#pragma mark cleanup | ||
595 | + | ||
596 | +// Cleans up temporary files. There's normally no reason to call these yourself, they are called automatically when a request completes or fails | ||
597 | + | ||
598 | +// Clean up the temporary file used to store the downloaded data when it comes in (if downloadDestinationPath is set) | ||
599 | +- (BOOL)removeTemporaryDownloadFile; | ||
600 | + | ||
601 | +// Clean up the temporary file used to store data that is inflated (decompressed) as it comes in | ||
602 | +- (BOOL)removeTemporaryUncompressedDownloadFile; | ||
603 | + | ||
604 | +// Clean up the temporary file used to store the request body (when shouldStreamPostDataFromDisk is YES) | ||
605 | +- (BOOL)removeTemporaryUploadFile; | ||
606 | + | ||
607 | +// Clean up the temporary file used to store a deflated (compressed) request body when shouldStreamPostDataFromDisk is YES | ||
608 | +- (BOOL)removeTemporaryCompressedUploadFile; | ||
609 | + | ||
610 | +// Remove a file on disk, returning NO and populating the passed error pointer if it fails | ||
611 | ++ (BOOL)removeFileAtPath:(NSString *)path error:(NSError **)err; | ||
612 | + | ||
590 | #pragma mark persistent connections | 613 | #pragma mark persistent connections |
591 | 614 | ||
592 | // Get the ID of the connection this request used (only really useful in tests and debugging) | 615 | // Get the ID of the connection this request used (only really useful in tests and debugging) |
@@ -644,19 +667,19 @@ extern unsigned long const ASIWWANBandwidthThrottleAmount; | @@ -644,19 +667,19 @@ extern unsigned long const ASIWWANBandwidthThrottleAmount; | ||
644 | #pragma mark gzip decompression | 667 | #pragma mark gzip decompression |
645 | 668 | ||
646 | // Uncompress gzipped data with zlib | 669 | // Uncompress gzipped data with zlib |
647 | -+ (NSData *)uncompressZippedData:(NSData*)compressedData; | 670 | ++ (NSData *)uncompressZippedData:(NSData*)compressedData error:(NSError **)err; |
648 | 671 | ||
649 | // Uncompress gzipped data from a file into another file, used when downloading to a file | 672 | // Uncompress gzipped data from a file into another file, used when downloading to a file |
650 | -+ (int)uncompressZippedDataFromFile:(NSString *)sourcePath toFile:(NSString *)destinationPath; | 673 | ++ (BOOL)uncompressZippedDataFromFile:(NSString *)sourcePath toFile:(NSString *)destinationPath error:(NSError **)err; |
651 | + (int)uncompressZippedDataFromSource:(FILE *)source toDestination:(FILE *)dest; | 674 | + (int)uncompressZippedDataFromSource:(FILE *)source toDestination:(FILE *)dest; |
652 | 675 | ||
653 | #pragma mark gzip compression | 676 | #pragma mark gzip compression |
654 | 677 | ||
655 | // Compress data with gzip using zlib | 678 | // Compress data with gzip using zlib |
656 | -+ (NSData *)compressData:(NSData*)uncompressedData; | 679 | ++ (NSData *)compressData:(NSData*)uncompressedData error:(NSError **)err; |
657 | 680 | ||
658 | // gzip compress data from a file, saving to another file, used for uploading when shouldCompressRequestBody is true | 681 | // gzip compress data from a file, saving to another file, used for uploading when shouldCompressRequestBody is true |
659 | -+ (int)compressDataFromFile:(NSString *)sourcePath toFile:(NSString *)destinationPath; | 682 | ++ (BOOL)compressDataFromFile:(NSString *)sourcePath toFile:(NSString *)destinationPath error:(NSError **)err; |
660 | + (int)compressDataFromSource:(FILE *)source toDestination:(FILE *)dest; | 683 | + (int)compressDataFromSource:(FILE *)source toDestination:(FILE *)dest; |
661 | 684 | ||
662 | #pragma mark get user agent | 685 | #pragma mark get user agent |
@@ -774,6 +797,7 @@ extern unsigned long const ASIWWANBandwidthThrottleAmount; | @@ -774,6 +797,7 @@ extern unsigned long const ASIWWANBandwidthThrottleAmount; | ||
774 | @property (assign) BOOL useSessionPersistence; | 797 | @property (assign) BOOL useSessionPersistence; |
775 | @property (retain) NSString *downloadDestinationPath; | 798 | @property (retain) NSString *downloadDestinationPath; |
776 | @property (retain) NSString *temporaryFileDownloadPath; | 799 | @property (retain) NSString *temporaryFileDownloadPath; |
800 | +@property (retain) NSString *temporaryUncompressedDataDownloadPath; | ||
777 | @property (assign) SEL didStartSelector; | 801 | @property (assign) SEL didStartSelector; |
778 | @property (assign) SEL didReceiveResponseHeadersSelector; | 802 | @property (assign) SEL didReceiveResponseHeadersSelector; |
779 | @property (assign) SEL didFinishSelector; | 803 | @property (assign) SEL didFinishSelector; |
This diff is collapsed. Click to expand it.
-
Please register or login to post a comment