diff --git a/man/remote-viewer.pod b/man/remote-viewer.pod index 8cf5ee4..4b683cf 100644 --- a/man/remote-viewer.pod +++ b/man/remote-viewer.pod @@ -162,7 +162,13 @@ fails. The session type, either "spice", "vnc" or "ovirt". -=item C (string, mandatory) +=item C (string) + +The server to connect to, using a Unix socket path. (supported with spice, since 8.0) + +This option is incompatible with C, C and C. + +=item C (string) The server host to connect to. diff --git a/src/virt-viewer-file.c b/src/virt-viewer-file.c index 1b0c310..d88f4f8 100644 --- a/src/virt-viewer-file.c +++ b/src/virt-viewer-file.c @@ -43,6 +43,7 @@ * - newer-version-url: string specifying an URL to display when the minimum * version check fails * - type: string, mandatory, values: "spice" (later "vnc" etc..) + * - unix-path: string * - host: string * - port: int * - tls-port: int @@ -104,6 +105,7 @@ G_DEFINE_TYPE(VirtViewerFile, virt_viewer_file, G_TYPE_OBJECT); enum { PROP_DUMMY_PROPERTY, PROP_TYPE, + PROP_UNIX_PATH, PROP_HOST, PROP_PORT, PROP_TLS_PORT, @@ -326,6 +328,19 @@ virt_viewer_file_set_host(VirtViewerFile* self, const gchar* value) g_object_notify(G_OBJECT(self), "host"); } +gchar* +virt_viewer_file_get_unix_path(VirtViewerFile* self) +{ + return virt_viewer_file_get_string(self, MAIN_GROUP, "unix-path"); +} + +void +virt_viewer_file_set_unix_path(VirtViewerFile* self, const gchar* value) +{ + virt_viewer_file_set_string(self, MAIN_GROUP, "unix-path", value); + g_object_notify(G_OBJECT(self), "unix-path"); +} + gchar* virt_viewer_file_get_file_type(VirtViewerFile* self) { @@ -939,6 +954,9 @@ virt_viewer_file_set_property(GObject* object, guint property_id, case PROP_TYPE: virt_viewer_file_set_type(self, g_value_get_string(value)); break; + case PROP_UNIX_PATH: + virt_viewer_file_set_unix_path(self, g_value_get_string(value)); + break; case PROP_HOST: virt_viewer_file_set_host(self, g_value_get_string(value)); break; @@ -1054,6 +1072,9 @@ virt_viewer_file_get_property(GObject* object, guint property_id, case PROP_TYPE: g_value_take_string(value, virt_viewer_file_get_file_type(self)); break; + case PROP_UNIX_PATH: + g_value_take_string(value, virt_viewer_file_get_unix_path(self)); + break; case PROP_HOST: g_value_take_string(value, virt_viewer_file_get_host(self)); break; diff --git a/src/virt-viewer-file.h b/src/virt-viewer-file.h index 15c61d0..108bcbf 100644 --- a/src/virt-viewer-file.h +++ b/src/virt-viewer-file.h @@ -54,6 +54,8 @@ VirtViewerFile* virt_viewer_file_new_from_buffer(const gchar* buf, gsize len, GError** error); gboolean virt_viewer_file_is_set(VirtViewerFile* self, const gchar* key); +gchar* virt_viewer_file_get_unix_path(VirtViewerFile* self); +void virt_viewer_file_set_unix_path(VirtViewerFile* self, const gchar* value); gchar* virt_viewer_file_get_ca(VirtViewerFile* self); void virt_viewer_file_set_ca(VirtViewerFile* self, const gchar* value); gchar* virt_viewer_file_get_host(VirtViewerFile* self); diff --git a/src/virt-viewer-session-spice.c b/src/virt-viewer-session-spice.c index 8223881..4aa7c73 100644 --- a/src/virt-viewer-session-spice.c +++ b/src/virt-viewer-session-spice.c @@ -505,21 +505,28 @@ 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); + if (virt_viewer_file_is_set(file, "unix-path")) { + gchar *val = virt_viewer_file_get_unix_path(file); + g_object_set(G_OBJECT(session), "unix-path", val, NULL); g_free(val); - } + } else { + 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, "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, "username")) {