From b3bf7bd700a9b467ccb71a4c2ae156300c17ec96 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Thu, 30 May 2013 17:11:04 -0700 Subject: [PATCH 1/2] Actually link with libspice-client-glib. --- protocols/spice/Makefile.am | 3 ++- protocols/spice/configure.in | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/protocols/spice/Makefile.am b/protocols/spice/Makefile.am index ee1ec68b..ff135e0c 100644 --- a/protocols/spice/Makefile.am +++ b/protocols/spice/Makefile.am @@ -48,7 +48,8 @@ noinst_HEADERS = \ include/client.h \ include/guac_handlers.h -libguac_client_spice_la_CFLAGS = -Werror -Wall -pedantic -Iinclude +libguac_client_spice_la_CFLAGS = -Werror -Wall -pedantic -Iinclude @SPICE_CLIENT_GLIB_CFLAGS@ +libguac_client_spice_la_LIBADD = @SPICE_CLIENT_GLIB_LIBS@ libguac_client_spice_la_LDFLAGS = -version-info 0:0:0 EXTRA_DIST = LICENSE diff --git a/protocols/spice/configure.in b/protocols/spice/configure.in index 65185e93..c8a61154 100644 --- a/protocols/spice/configure.in +++ b/protocols/spice/configure.in @@ -47,6 +47,7 @@ AC_PROG_LIBTOOL AC_CHECK_LIB([guac], [guac_client_plugin_open],, AC_MSG_ERROR("libguac must be installed first")) AC_CHECK_LIB([cairo], [cairo_create],, AC_MSG_ERROR("cairo is required for drawing instructions")) AC_CHECK_LIB([pthread], [pthread_create]) +PKG_CHECK_MODULES([SPICE_CLIENT_GLIB], [spice-client-glib-2.0]) # Checks for header files. AC_CHECK_HEADERS([guacamole/client.h guacamole/guacio.h guacamole/protocol.h]) From 897010cd234f0353b024453d1b0a5f6a47bf8be9 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Fri, 31 May 2013 16:10:34 -0700 Subject: [PATCH 2/2] Initial highly-stubbed guac_client_init(). --- protocols/spice/Makefile.am | 4 ++-- protocols/spice/configure.in | 1 + protocols/spice/src/client.c | 32 ++++++++++++++++++++++++++++++++ 3 files changed, 35 insertions(+), 2 deletions(-) diff --git a/protocols/spice/Makefile.am b/protocols/spice/Makefile.am index ff135e0c..82ccbd61 100644 --- a/protocols/spice/Makefile.am +++ b/protocols/spice/Makefile.am @@ -48,8 +48,8 @@ noinst_HEADERS = \ include/client.h \ include/guac_handlers.h -libguac_client_spice_la_CFLAGS = -Werror -Wall -pedantic -Iinclude @SPICE_CLIENT_GLIB_CFLAGS@ -libguac_client_spice_la_LIBADD = @SPICE_CLIENT_GLIB_LIBS@ +libguac_client_spice_la_CFLAGS = -Werror -Wall -pedantic -Iinclude @SPICE_CLIENT_GLIB_CFLAGS@ @GLIB_CFLAGS@ +libguac_client_spice_la_LIBADD = @SPICE_CLIENT_GLIB_LIBS@ @GLIB_LIBS@ libguac_client_spice_la_LDFLAGS = -version-info 0:0:0 EXTRA_DIST = LICENSE diff --git a/protocols/spice/configure.in b/protocols/spice/configure.in index c8a61154..1262619a 100644 --- a/protocols/spice/configure.in +++ b/protocols/spice/configure.in @@ -48,6 +48,7 @@ AC_CHECK_LIB([guac], [guac_client_plugin_open],, AC_MSG_ERROR("libguac must be i AC_CHECK_LIB([cairo], [cairo_create],, AC_MSG_ERROR("cairo is required for drawing instructions")) AC_CHECK_LIB([pthread], [pthread_create]) PKG_CHECK_MODULES([SPICE_CLIENT_GLIB], [spice-client-glib-2.0]) +PKG_CHECK_MODULES([GLIB], [glib-2.0]) # Checks for header files. AC_CHECK_HEADERS([guacamole/client.h guacamole/guacio.h guacamole/protocol.h]) diff --git a/protocols/spice/src/client.c b/protocols/spice/src/client.c index 0e869080..57fbb030 100644 --- a/protocols/spice/src/client.c +++ b/protocols/spice/src/client.c @@ -36,17 +36,23 @@ * ***** END LICENSE BLOCK ***** */ #include +#include #include +#include #include "guac_handlers.h" /* Client plugin arguments */ const char* GUAC_CLIENT_ARGS[] = { + "hostname", + "port", NULL }; enum __SPICE_ARGS_IDX { + SPICE_ARGS_HOSTNAME, + SPICE_ARGS_PORT, SPICE_ARGS_COUNT }; @@ -54,11 +60,36 @@ int guac_client_init(guac_client* client, int argc, char** argv) { /* STUB */ + GMainLoop* mainloop; + SpiceSession* session; + if (argc != SPICE_ARGS_COUNT) { guac_client_log_error(client, "Wrong number of arguments"); return -1; } + /* Init GLIB */ + guac_client_log_info(client, "Init GLIB-2.0..."); + g_type_init(); + mainloop = g_main_loop_new(NULL, false); + + /* Create session */ + guac_client_log_info(client, "Creating SPICE session..."); + + session = spice_session_new(); + + /* Init session parameters */ + guac_client_log_info(client, "Setting parameters..."); + g_object_set(session, "host", argv[SPICE_ARGS_HOSTNAME], NULL); + g_object_set(session, "port", argv[SPICE_ARGS_PORT], NULL); + + /* Connect */ + guac_client_log_info(client, "Connecting..."); + if (!spice_session_connect(session)) { + guac_client_log_error(client, "SPICE connection failed"); + return 1; + } + /* Set handlers */ client->handle_messages = spice_guac_client_handle_messages; client->clipboard_handler = spice_guac_client_clipboard_handler; @@ -67,6 +98,7 @@ int guac_client_init(guac_client* client, int argc, char** argv) { client->size_handler = spice_guac_client_size_handler; client->free_handler = spice_guac_client_free_handler; + g_main_loop_run(mainloop); return 0; }