diff options
author | Christophe Fergeau <cfergeau@redhat.com> | 2013-10-07 18:40:36 +0200 |
---|---|---|
committer | Christophe Fergeau <cfergeau@redhat.com> | 2014-01-20 12:15:42 +0100 |
commit | 9feed6940ffda3171883a366a48693e8df6c5338 (patch) | |
tree | 160b83374d433ac8a775d46feb75c84a86eee7bf /server/reds.c | |
parent | cdaab7272c25a63f1709e5c8fc012a6484326015 (diff) | |
download | spice-9feed6940ffda3171883a366a48693e8df6c5338.tar.gz spice-9feed6940ffda3171883a366a48693e8df6c5338.tar.xz spice-9feed6940ffda3171883a366a48693e8df6c5338.zip |
Move async code to RedsStream
The AsyncRead structure in reds.h wraps an async read + callback to
be done on a stream. Moving it to reds_stream.h is needed in order
to move SASL authentication there.
Diffstat (limited to 'server/reds.c')
-rw-r--r-- | server/reds.c | 60 |
1 files changed, 0 insertions, 60 deletions
diff --git a/server/reds.c b/server/reds.c index b70b98d5..15291c53 100644 --- a/server/reds.c +++ b/server/reds.c @@ -121,15 +121,6 @@ static bool exit_on_disconnect = FALSE; static RedsState *reds = NULL; -typedef struct AsyncRead { - RedsStream *stream; - void *opaque; - uint8_t *now; - uint8_t *end; - void (*done)(void *opaque); - void (*error)(void *opaque, int err); -} AsyncRead; - typedef struct RedLinkInfo { RedsStream *stream; AsyncRead async_read; @@ -1880,57 +1871,6 @@ end: g_free(password); } -static inline void async_read_clear_handlers(AsyncRead *obj) -{ - if (!obj->stream->watch) { - return; - } - - reds_stream_remove_watch(obj->stream); -} - -static void async_read_handler(int fd, int event, void *data) -{ - AsyncRead *obj = (AsyncRead *)data; - - for (;;) { - int n = obj->end - obj->now; - - spice_assert(n > 0); - n = reds_stream_read(obj->stream, obj->now, n); - if (n <= 0) { - if (n < 0) { - switch (errno) { - case EAGAIN: - if (!obj->stream->watch) { - obj->stream->watch = core->watch_add(obj->stream->socket, - SPICE_WATCH_EVENT_READ, - async_read_handler, obj); - } - return; - case EINTR: - break; - default: - async_read_clear_handlers(obj); - obj->error(obj->opaque, errno); - return; - } - } else { - async_read_clear_handlers(obj); - obj->error(obj->opaque, 0); - return; - } - } else { - obj->now += n; - if (obj->now == obj->end) { - async_read_clear_handlers(obj); - obj->done(obj->opaque); - return; - } - } - } -} - static void reds_get_spice_ticket(RedLinkInfo *link) { AsyncRead *obj = &link->async_read; |