|  |  | 
|  | #import "TNSFileHandleTransport.h" | 
|  |  | 
|  |  | 
|  | @implementation TNSFileHandleTransport | 
|  |  | 
|  | - (id) initWithFileHandle: (NSFileHandle *) fileHandle | 
|  | { | 
|  | return [self initWithInputFileHandle: fileHandle | 
|  | outputFileHandle: fileHandle]; | 
|  | } | 
|  |  | 
|  |  | 
|  | - (id) initWithInputFileHandle: (NSFileHandle *) inputFileHandle | 
|  | outputFileHandle: (NSFileHandle *) outputFileHandle | 
|  | { | 
|  | self = [super init]; | 
|  |  | 
|  | mInputFileHandle = [inputFileHandle retain]; | 
|  | mOutputFileHandle = [outputFileHandle retain]; | 
|  |  | 
|  | return self; | 
|  | } | 
|  |  | 
|  |  | 
|  | - (void) dealloc { | 
|  | [mInputFileHandle release]; | 
|  | [mOutputFileHandle release]; | 
|  | [super dealloc]; | 
|  | } | 
|  |  | 
|  |  | 
|  | - (int) readAll: (uint8_t *) buf offset: (int) off length: (int) len | 
|  | { | 
|  | int got = 0; | 
|  | while (got < len) { | 
|  | NSData * d = [mInputFileHandle readDataOfLength: len-got]; | 
|  | if ([d length] == 0) { | 
|  | @throw [NSException exceptionWithName: @"TTransportException" | 
|  | reason: @"Cannot read. No more data." | 
|  | userInfo: nil]; | 
|  | } | 
|  | [d getBytes: buf+got]; | 
|  | got += [d length]; | 
|  | } | 
|  | return got; | 
|  | } | 
|  |  | 
|  |  | 
|  | - (void) write: (uint8_t *) data offset: (unsigned int) offset length: (unsigned int) length | 
|  | { | 
|  | NSData * dataObject = [[NSData alloc] initWithBytesNoCopy: data+offset | 
|  | length: length | 
|  | freeWhenDone: NO]; | 
|  |  | 
|  | [mOutputFileHandle writeData: dataObject]; | 
|  |  | 
|  |  | 
|  | [dataObject release]; | 
|  | } | 
|  |  | 
|  |  | 
|  | - (void) flush | 
|  | { | 
|  | [mOutputFileHandle synchronizeFile];  // ? | 
|  | } | 
|  |  | 
|  | @end |