@@ -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