@@ -26,14 +26,17 @@ #import "OFObject.h" #import "OFString.h" @class OFStream; @class OFDataArray; +@class OFException; #ifdef OF_HAVE_BLOCKS -typedef BOOL (^of_stream_async_read_block_t)(OFStream*, void*, size_t); -typedef BOOL (^of_stream_async_read_line_block_t)(OFStream*, OFString*); +typedef BOOL (^of_stream_async_read_block_t)(OFStream*, void*, size_t, + OFException*); +typedef BOOL (^of_stream_async_read_line_block_t)(OFStream*, OFString*, + OFException*); #endif /** * \brief A base class for different types of streams. * @@ -127,11 +130,12 @@ * called again with the same buffer and maximum length when more * data has been received. If you want the next method in the * queue to handle the data received next, you need to return NO * from the method. * \param selector The selector to call on the target. The signature must be - * BOOL (OFStream *stream, void *buffer, size_t size). + * BOOL (OFStream *stream, void *buffer, size_t size, + * OFException *exception). */ - (void)asyncReadIntoBuffer: (void*)buffer length: (size_t)length target: (id)target selector: (SEL)selector; @@ -140,11 +144,12 @@ * \brief Asyncronously reads exactly the specified length bytes from the * stream into a buffer. * * Unlike asyncReadIntoBuffer:length:block, this method does not call the * method when less than the specified length has been read - instead, it waits - * until it got exactly the specified length or the stream has ended. + * until it got exactly the specified length, the stream has ended or an + * exception occurred. * * \param buffer The buffer into which the data is read * \param length The length of the data that should be read. * The buffer must be exactly this big! * \param target The target on which the selector should be called when the @@ -152,11 +157,12 @@ * called again with the same buffer and exact length when more * data has been received. If you want the next method in the * queue to handle the data received next, you need to return NO * from the method. * \param selector The selector to call on the target. The signature must be - * BOOL (OFStream *stream, void *buffer, size_t size). + * BOOL (OFStream *stream, void *buffer, size_t size, + * OFException *exception). */ - (void)asyncReadIntoBuffer: (void*)buffer exactLength: (size_t)length target: (id)target selector: (SEL)selector; @@ -190,11 +196,12 @@ * \brief Asyncronously reads exactly the specified length bytes from the * stream into a buffer. * * Unlike asyncReadIntoBuffer:length:block, this method does not invoke the * block when less than the specified length has been read - instead, it waits - * until it got exactly the specified length or the stream has ended. + * until it got exactly the specified length, the stream has ended or an + * exception occurred. * * \param buffer The buffer into which the data is read * \param length The length of the data that should be read. * The buffer must be exactly this big! * \param block The block to call when the data has been received. @@ -553,55 +560,58 @@ * stream has been reached. */ - (OFString*)readLineWithEncoding: (of_string_encoding_t)encoding; /** - * \brief Asyncronously reads with the specified encoding until a newline, \\0 - * or end of stream occurs. + * \brief Asyncronously reads until a newline, \\0, end of stream or an + * exception occurs. * * \param target The target on which to call the selector when the data has * been received. If the method returns YES, it will be called * again when the next line has been received. If you want the * next method in the queue to handle the next line, you need to * return NO from the method * \param selector The selector to call on the target. The signature must be - * BOOL (OFStream *stream, OFString *line). + * BOOL (OFStream *stream, OFString *line, + * OFException *exception). */ - (void)asyncReadLineWithTarget: (id)target selector: (SEL)selector; /** - * \brief Asyncronously reads with the specified encoding until a newline, \\0 - * or end of stream occurs. + * \brief Asyncronously reads with the specified encoding until a newline, \\0, + * end of stream or an exception occurs. * * \param encoding The encoding used by the stream * \param target The target on which to call the selector when the data has * been received. If the method returns YES, it will be called * again when the next line has been received. If you want the * next method in the queue to handle the next line, you need to * return NO from the method * \param selector The selector to call on the target. The signature must be - * BOOL (OFStream *stream, OFString *line). + * BOOL (OFStream *stream, OFString *line, + * OFException *exception). */ - (void)asyncReadLineWithEncoding: (of_string_encoding_t)encoding target: (id)target selector: (SEL)selector; #ifdef OF_HAVE_BLOCKS /** - * \brief Asyncronously reads until a newline, \\0 or end of stream occurs. + * \brief Asyncronously reads until a newline, \\0, end of stream or an + * exception occurs. * * \param block The block to call when the data has been received. * If the block returns YES, it will be called again when the next * line has been received. If you want the next block in the queue * to handle the next line, you need to return NO from the block. */ - (void)asyncReadLineWithBlock: (of_stream_async_read_line_block_t)block; /** - * \brief Asyncronously reads with the specified encoding until a newline, \\0 - * or end of stream occurs. + * \brief Asyncronously reads with the specified encoding until a newline, \\0, + * end of stream or an exception occurs. * * \param encoding The encoding used by the stream * \param block The block to call when the data has been received. * If the block returns YES, it will be called again when the next * line has been received. If you want the next block in the queue