#ifndef __GSK_STREAM_TRANSFER_REQUEST_H_
#define __GSK_STREAM_TRANSFER_REQUEST_H_
/*
* GskStreamTransferRequest -- basically just like a GskStreamConnection,
* except the requester gets notified when the read stream's data has been
* fully transferred without error, or when an error occurs.
*/
/* TODO: might be useful to add a mode which only transfers n bytes,
* and then doesn't shut down the streams.
*/
#include "gskstream.h"
#include "gskrequest.h"
G_BEGIN_DECLS
typedef GskRequestClass GskStreamTransferRequestClass;
typedef struct _GskStreamTransferRequest GskStreamTransferRequest;
GType gsk_stream_transfer_request_get_type (void) G_GNUC_CONST;
#define GSK_TYPE_STREAM_TRANSFER_REQUEST \
(gsk_stream_transfer_request_get_type ())
#define GSK_STREAM_TRANSFER_REQUEST(obj) \
(G_TYPE_CHECK_INSTANCE_CAST ((obj), \
GSK_TYPE_STREAM_TRANSFER_REQUEST, \
GskStreamTransferRequest))
#define GSK_IS_STREAM_TRANSFER_REQUEST(obj) \
(G_TYPE_CHECK_INSTANCE_TYPE ((obj), GSK_TYPE_STREAM_TRANSFER_REQUEST))
struct _GskStreamTransferRequest
{
GskRequest request;
/* The stream to read from. */
GskStream *read_side;
/* The stream to write to. */
GskStream *write_side;
/* Data which is to be transferred from read_side to write_side,
* which hasn't been processed on the write side.
*/
GskBuffer buffer;
/* The maximum number of bytes to store in buffer. */
guint max_buffered;
/* The maximum number of bytes to read atomically from the input stream. */
guint atomic_read_size;
/* Whether we are blocking the read-side because the buffer is 0 length. */
guint blocking_write_side : 1;
/* Whether we are blocking the write-side because the buffer is too long. */
guint blocking_read_side : 1;
};
/* The request references both input_stream and output_stream
* (i.e., you must also unref them at some point).
*/
GskStreamTransferRequest *
gsk_stream_transfer_request_new
(GskStream *input_stream,
GskStream *output_stream);
void gsk_stream_transfer_request_set_max_buffered
(GskStreamTransferRequest *request,
guint max_buffered);
guint gsk_stream_transfer_request_get_max_buffered
(GskStreamTransferRequest *request);
void gsk_stream_transfer_request_set_atomic_read_size
(GskStreamTransferRequest *request,
guint atomic_read_size);
guint gsk_stream_transfer_request_get_atomic_read_size
(GskStreamTransferRequest *request);
G_END_DECLS
#endif
syntax highlighted by Code2HTML, v. 0.9.1