From 63bb37276e028ab1b1c156c9e7907bf22b6d5952 Mon Sep 17 00:00:00 2001 From: Alon Levy Date: Fri, 19 Oct 2012 11:27:57 +0200 Subject: server: add websockets support via libwebsockets New API: spice_server_set_ws_ports This adds an optional dependency on libwebsockets. You need to get my patched 0.0.3 version here: git://people.freedesktop.org/~alon/libwebsockets There is no qemu patches yet, to test change in reds.c the default value of spice_ws_port to 5959 (for the default of spice-html5). For testing there is an online client at http://spice-space.org/spice-html5/spice.html Known issues: 1. The tester (server/tests/test_display_no_ssl) gets into dropping all data after a few seconds, I think it's an issue with the implemented watches, but haven't figured it out. 2. libwebsocket's read interface is inverted to what our code expects, i.e. there is no libwebsocket_read, so there is an additional copy involved (see RedsWebSocket). This can be fixed. 3. Listening on a separate port. Since the headers are different, we could listen on the same port (first three bytes RED/GET). I don't know if we want to? Todos: 1. SSL not implemented yet. Needs some thought as to how. 2. Serve spice-html5 when accessed as a http server. Nice to have. --- server/spice.h | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'server/spice.h') diff --git a/server/spice.h b/server/spice.h index c1478e0f..7ca5033c 100644 --- a/server/spice.h +++ b/server/spice.h @@ -434,6 +434,13 @@ void spice_server_destroy(SpiceServer *s); int spice_server_set_compat_version(SpiceServer *s, spice_compat_version_t version); int spice_server_set_port(SpiceServer *s, int port); + +/* @ws_port: -1 for don't set, otherwise in [1,65535] port to listen + * for unencrypted websocket connections. + * @wss_port: -1 for don't set, otherwise in [1,65535] port to listen + * for encrypted websocket connections. + */ +int spice_server_set_ws_ports(SpiceServer *s, int ws_port, int wss_port); void spice_server_set_addr(SpiceServer *s, const char *addr, int flags); int spice_server_set_listen_socket_fd(SpiceServer *s, int listen_fd); int spice_server_set_exit_on_disconnect(SpiceServer *s, int flag); -- cgit