[virt-tools-list] [PATCH v2 6/7] spice: learn to connect from file
Marc-André Lureau
marcandre.lureau at gmail.com
Tue Nov 27 19:15:10 UTC 2012
---
src/virt-viewer-session-spice.c | 91 ++++++++++++++++++++++++++++++++++++++++-
1 file changed, 90 insertions(+), 1 deletion(-)
diff --git a/src/virt-viewer-session-spice.c b/src/virt-viewer-session-spice.c
index 3d48ba3..cdfbef8 100644
--- a/src/virt-viewer-session-spice.c
+++ b/src/virt-viewer-session-spice.c
@@ -29,6 +29,7 @@
#include <spice-option.h>
#include <usb-device-widget.h>
+#include "virt-viewer-file.h"
#include "virt-viewer-util.h"
#include "virt-viewer-session-spice.h"
#include "virt-viewer-display-spice.h"
@@ -252,16 +253,104 @@ virt_viewer_session_spice_open_host(VirtViewerSession *session,
return spice_session_connect(self->priv->session);
}
+static void
+fill_session(VirtViewerFile *file, SpiceSession *session)
+{
+ g_return_if_fail(VIRT_VIEWER_IS_FILE(file));
+ g_return_if_fail(SPICE_IS_SESSION(session));
+
+ if (virt_viewer_file_is_set(file, "host")) {
+ gchar *val = virt_viewer_file_get_host(file);
+ g_object_set(G_OBJECT(session), "host", val, NULL);
+ g_free(val);
+ }
+
+ if (virt_viewer_file_is_set(file, "port")) {
+ gchar *port = g_strdup_printf("%d", virt_viewer_file_get_port(file));
+ g_object_set(G_OBJECT(session), "port", port, NULL);
+ g_free(port);
+ }
+ if (virt_viewer_file_is_set(file, "tls-port")) {
+ gchar *tls_port = g_strdup_printf("%d", virt_viewer_file_get_tls_port(file));
+ g_object_set(G_OBJECT(session), "tls-port", tls_port, NULL);
+ g_free(tls_port);
+ }
+ if (virt_viewer_file_is_set(file, "password")) {
+ gchar *val = virt_viewer_file_get_password(file);
+ g_object_set(G_OBJECT(session), "password", val, NULL);
+ g_free(val);
+ }
+
+ if (virt_viewer_file_is_set(file, "tls-ciphers")) {
+ gchar *val = virt_viewer_file_get_tls_ciphers(file);
+ g_object_set(G_OBJECT(session), "ciphers", val, NULL);
+ g_free(val);
+ }
+
+ if (virt_viewer_file_is_set(file, "ca")) {
+ gchar *ca = virt_viewer_file_get_ca(file);
+ g_return_if_fail(ca != NULL);
+
+ GByteArray *ba = g_byte_array_new_take(ca, strlen(ca) + 1);
+ g_object_set(G_OBJECT(session), "ca", ba, NULL);
+ g_byte_array_unref(ba);
+ }
+
+ if (virt_viewer_file_is_set(file, "host-subject")) {
+ gchar *val = virt_viewer_file_get_host_subject(file);
+ g_object_set(G_OBJECT(session), "cert-subject", val, NULL);
+ g_free(val);
+ }
+
+ if (virt_viewer_file_is_set(file, "enable-smartcard")) {
+ g_object_set(G_OBJECT(session),
+ "enable-smartcard", virt_viewer_file_get_enable_smartcard(file), NULL);
+ }
+
+ if (virt_viewer_file_is_set(file, "enable-usbredir")) {
+ g_object_set(G_OBJECT(session),
+ "enable-usbredir", virt_viewer_file_get_enable_usbredir(file), NULL);
+ }
+
+ if (virt_viewer_file_is_set(file, "color-depth")) {
+ g_object_set(G_OBJECT(session),
+ "color-depth", virt_viewer_file_get_color_depth(file), NULL);
+ }
+
+ if (virt_viewer_file_is_set(file, "disable-effects")) {
+ gchar **disabled = virt_viewer_file_get_disable_effects(file, NULL);
+ g_object_set(G_OBJECT(session), "disable-effects", disabled, NULL);
+ g_strfreev(disabled);
+ }
+
+ if (virt_viewer_file_is_set(file, "enable-usb-autoshare")) {
+ gboolean enabled = virt_viewer_file_get_enable_usb_autoshare(file);
+ SpiceGtkSession *gtk = spice_gtk_session_get(session);
+ g_object_set(G_OBJECT(gtk), "auto-usbredir", enabled, NULL);
+ }
+
+ if (virt_viewer_file_is_set(file, "disable-channels")) {
+ DEBUG_LOG("FIXME: disable-channels is not supported atm");
+ }
+}
+
static gboolean
virt_viewer_session_spice_open_uri(VirtViewerSession *session,
const gchar *uri)
{
VirtViewerSessionSpice *self = VIRT_VIEWER_SESSION_SPICE(session);
+ VirtViewerFile *file = virt_viewer_session_get_file(session);
+ VirtViewerApp *app = virt_viewer_session_get_app(session);
g_return_val_if_fail(self != NULL, FALSE);
g_return_val_if_fail(self->priv->session != NULL, FALSE);
- g_object_set(self->priv->session, "uri", uri, NULL);
+ if (file) {
+ fill_session(file, self->priv->session);
+ virt_viewer_file_fill_app(file, app);
+ } else {
+ g_object_set(self->priv->session, "uri", uri, NULL);
+ }
return spice_session_connect(self->priv->session);
}
--
1.7.11.7
More information about the virt-tools-list
mailing list