diff options
author | Marc-André Lureau <marcandre.lureau@redhat.com> | 2011-02-27 09:46:14 +0100 |
---|---|---|
committer | Alon Levy <alevy@redhat.com> | 2011-07-21 15:09:25 +0300 |
commit | eeb95c5b84e81a2ba6745fbeb1689d0ef5dc49d0 (patch) | |
tree | 2c4fd90aa21382e93bb400ca7bb2bcd6117ecb77 /server/reds.c | |
parent | 881971fbcab7c1eaf47a9edcf517aeaa09945dae (diff) | |
download | spice-eeb95c5b84e81a2ba6745fbeb1689d0ef5dc49d0.tar.gz spice-eeb95c5b84e81a2ba6745fbeb1689d0ef5dc49d0.tar.xz spice-eeb95c5b84e81a2ba6745fbeb1689d0ef5dc49d0.zip |
server: add reds_stream_{read,write,free,remove_watch}()
https://bugs.freedesktop.org/show_bug.cgi?id=34795
Diffstat (limited to 'server/reds.c')
-rw-r--r-- | server/reds.c | 62 |
1 files changed, 61 insertions, 1 deletions
diff --git a/server/reds.c b/server/reds.c index 63fd08fe..fa197f67 100644 --- a/server/reds.c +++ b/server/reds.c @@ -479,7 +479,7 @@ static int reds_ssl_writev(void *ctx, const struct iovec *vector, int count) return return_code; } -static int reds_ssl_free(RedsStream *peer) +static int reds_ssl_free(RedsStream* peer) { reds_channel_event(peer, SPICE_CHANNEL_EVENT_DISCONNECTED); SSL_free(peer->ssl); @@ -488,6 +488,33 @@ static int reds_ssl_free(RedsStream *peer) return 0; } +static void reds_stream_remove_watch(RedsStream* s) +{ + if (s->watch) { + core->watch_remove(s->watch); + s->watch = NULL; + } +} + +static void reds_link_free(RedLinkInfo *link) +{ + reds_stream_free(link->peer); + link->peer = NULL; + + free(link->link_mess); + link->link_mess = NULL; + + BN_free(link->tiTicketing.bn); + link->tiTicketing.bn = NULL; + + if (link->tiTicketing.rsa) { + RSA_free(link->tiTicketing.rsa); + link->tiTicketing.rsa = NULL; + } + + free(link); +} + static void __reds_release_link(RedLinkInfo *link) { ASSERT(link->peer); @@ -4223,3 +4250,36 @@ __visible__ int spice_server_migrate_switch(SpiceServer *s) reds_mig_switch(); return 0; } + +ssize_t reds_stream_read(RedsStream *s, void *buf, size_t nbyte) +{ + return s->read(s, buf, nbyte); +} + +ssize_t reds_stream_write(RedsStream *s, const void *buf, size_t nbyte) +{ + return s->write(s, buf, nbyte); +} + +ssize_t reds_stream_writev(RedsStream *s, const struct iovec *iov, int iovcnt) +{ + return s->writev(s, iov, iovcnt); +} + +void reds_stream_free(RedsStream *s) +{ + if (!s) { + return; + } + + reds_channel_event(s, SPICE_CHANNEL_EVENT_DISCONNECTED); + + if (s->ssl) { + SSL_free(s->ssl); + } + + reds_stream_remove_watch(s); + close(s->socket); + + free(s); +} |