From: "Daniel P. Berrange" <berra...@redhat.com> Allow applications to pass a pre-accepted client socket file descriptor in. The new APIs are spice_server_add_ssl_client and spice_server_add_client
* server/reds.c: Implement new APIs * server/spice.h: Define new APIs Signed-off-by: Daniel P. Berrange <berra...@redhat.com> --- server/reds.c | 29 +++++++++++++++++++++++++---- server/spice-server.syms | 5 +++++ server/spice.h | 3 +++ 3 files changed, 33 insertions(+), 4 deletions(-) diff --git a/server/reds.c b/server/reds.c index 3ba55c1..a8c23d3 100644 --- a/server/reds.c +++ b/server/reds.c @@ -2805,8 +2805,6 @@ static void reds_accept_ssl_connection(int fd, int event, void *data) static void reds_accept(int fd, int event, void *data) { - RedLinkInfo *link; - RedsStream *stream; int socket; if ((socket = accept(reds->listen_socket, NULL, 0)) == -1) { @@ -2814,11 +2812,20 @@ static void reds_accept(int fd, int event, void *data) return; } + if (spice_server_add_client(reds, socket) < 0) + close(socket); +} + +SPICE_GNUC_VISIBLE int spice_server_add_client(SpiceServer *s, int socket) +{ + RedLinkInfo *link; + RedsStream *stream; + + ASSERT(reds == s); if (!(link = reds_init_client_connection(socket))) { red_printf("accept failed"); - close(socket); - return; + return -1; } stream = link->stream; @@ -2827,8 +2834,22 @@ static void reds_accept(int fd, int event, void *data) stream->writev = stream_writev_cb; reds_handle_new_link(link); + return 0; } + +SPICE_GNUC_VISIBLE int spice_server_add_ssl_client(SpiceServer *s, int socket) +{ + RedLinkInfo *link; + + ASSERT(reds == s); + if (!(link = reds_init_client_ssl_connection(socket))) { + return -1; + } + return 0; +} + + static int reds_init_socket(const char *addr, int portnr, int family) { static const int on=1, off=0; diff --git a/server/spice-server.syms b/server/spice-server.syms index 3f93888..d9beec3 100644 --- a/server/spice-server.syms +++ b/server/spice-server.syms @@ -96,3 +96,8 @@ global: spice_server_get_num_clients; } SPICE_SERVER_0.8.3; +SPICE_SERVER_0.10.1 { +global: + spice_server_add_client; + spice_server_add_ssl_client; +} SPICE_SERVER_0.10.0; diff --git a/server/spice.h b/server/spice.h index 974975a..fbd409a 100644 --- a/server/spice.h +++ b/server/spice.h @@ -425,6 +425,9 @@ int spice_server_set_tls(SpiceServer *s, int port, const char *private_key_file, const char *key_passwd, const char *dh_key_file, const char *ciphersuite); +int spice_server_add_client(SpiceServer *s, int socket); +int spice_server_add_ssl_client(SpiceServer *s, int socket); + int spice_server_add_interface(SpiceServer *s, SpiceBaseInstance *sin); int spice_server_remove_interface(SpiceBaseInstance *sin); -- 1.7.7.3 _______________________________________________ Spice-devel mailing list Spice-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/spice-devel