mirror of
https://github.com/dsward2/macSVG.git
synced 2026-03-02 18:23:58 +01:00
76 lines
2.7 KiB
Objective-C
Executable File
76 lines
2.7 KiB
Objective-C
Executable File
#import <Foundation/Foundation.h>
|
|
#import "HTTPResponse.h"
|
|
|
|
@class HTTPConnection;
|
|
|
|
/**
|
|
* This is an asynchronous version of HTTPFileResponse.
|
|
* It reads data from the given file asynchronously via GCD.
|
|
*
|
|
* It may be overriden to allow custom post-processing of the data that has been read from the file.
|
|
* An example of this is the HTTPDynamicFileResponse class.
|
|
**/
|
|
|
|
@interface HTTPAsyncFileResponse : NSObject <HTTPResponse>
|
|
{
|
|
HTTPConnection *connection;
|
|
|
|
NSString *filePath;
|
|
UInt64 fileLength;
|
|
UInt64 fileOffset; // File offset as pertains to data given to connection
|
|
UInt64 readOffset; // File offset as pertains to data read from file (but maybe not returned to connection)
|
|
|
|
BOOL aborted;
|
|
|
|
NSData *data;
|
|
|
|
int fileFD;
|
|
void *readBuffer;
|
|
NSUInteger readBufferSize; // Malloced size of readBuffer
|
|
NSUInteger readBufferOffset; // Offset within readBuffer where the end of existing data is
|
|
NSUInteger readRequestLength;
|
|
dispatch_queue_t readQueue;
|
|
dispatch_source_t readSource;
|
|
BOOL readSourceSuspended;
|
|
}
|
|
|
|
- (id)initWithFilePath:(NSString *)filePath forConnection:(HTTPConnection *)connection;
|
|
- (NSString *)filePath;
|
|
|
|
@end
|
|
|
|
/**
|
|
* Explanation of Variables (excluding those that are obvious)
|
|
*
|
|
* fileOffset
|
|
* This is the number of bytes that have been returned to the connection via the readDataOfLength method.
|
|
* If 1KB of data has been read from the file, but none of that data has yet been returned to the connection,
|
|
* then the fileOffset variable remains at zero.
|
|
* This variable is used in the calculation of the isDone method.
|
|
* Only after all data has been returned to the connection are we actually done.
|
|
*
|
|
* readOffset
|
|
* Represents the offset of the file descriptor.
|
|
* In other words, the file position indidcator for our read stream.
|
|
* It might be easy to think of it as the total number of bytes that have been read from the file.
|
|
* However, this isn't entirely accurate, as the setOffset: method may have caused us to
|
|
* jump ahead in the file (lseek).
|
|
*
|
|
* readBuffer
|
|
* Malloc'd buffer to hold data read from the file.
|
|
*
|
|
* readBufferSize
|
|
* Total allocation size of malloc'd buffer.
|
|
*
|
|
* readBufferOffset
|
|
* Represents the position in the readBuffer where we should store new bytes.
|
|
*
|
|
* readRequestLength
|
|
* The total number of bytes that were requested from the connection.
|
|
* It's OK if we return a lesser number of bytes to the connection.
|
|
* It's NOT OK if we return a greater number of bytes to the connection.
|
|
* Doing so would disrupt proper support for range requests.
|
|
* If, however, the response is chunked then we don't need to worry about this.
|
|
* Chunked responses inheritly don't support range requests.
|
|
**/
|