summaryrefslogtreecommitdiffstats
path: root/server/reds.c
diff options
context:
space:
mode:
authorChristophe Fergeau <cfergeau@redhat.com>2013-10-07 18:40:36 +0200
committerChristophe Fergeau <cfergeau@redhat.com>2014-01-20 12:15:42 +0100
commit9feed6940ffda3171883a366a48693e8df6c5338 (patch)
tree160b83374d433ac8a775d46feb75c84a86eee7bf /server/reds.c
parentcdaab7272c25a63f1709e5c8fc012a6484326015 (diff)
downloadspice-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.c60
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;