[virt-tools-list] [PATCH 03/12] Use graphical URI for connection

Marc-André Lureau marcandre.lureau at gmail.com
Tue Dec 13 19:35:01 UTC 2011


If specified, use URI for connection details
---
 src/virt-viewer-app.c |   37 ++++++++++++++++++++++++++++++++++---
 src/virt-viewer-app.h |    3 ++-
 src/virt-viewer.c     |    2 +-
 3 files changed, 37 insertions(+), 5 deletions(-)

diff --git a/src/virt-viewer-app.c b/src/virt-viewer-app.c
index 3d02a0a..a7867ba 100644
--- a/src/virt-viewer-app.c
+++ b/src/virt-viewer-app.c
@@ -114,6 +114,7 @@ struct _VirtViewerAppPrivate {
 	gboolean connected;
 	guint reconnect_poll; /* source id */
 	char *unixsock;
+	char *guri; /* prefered over ghost:gport */
 	char *ghost;
 	char *gport;
 	char *host; /* ssh */
@@ -137,6 +138,7 @@ enum {
 	PROP_CONTAINER,
 	PROP_SESSION,
 	PROP_GUEST_NAME,
+	PROP_GURI,
 	PROP_FULLSCREEN,
 	PROP_TITLE,
 };
@@ -704,6 +706,9 @@ virt_viewer_app_activate(VirtViewerApp *self)
 
 	if (fd >= 0) {
 		ret = virt_viewer_session_open_fd(VIRT_VIEWER_SESSION(priv->session), fd);
+       } else if (priv->guri) {
+		virt_viewer_app_trace(self, "Opening connection to display at %s\n", priv->guri);
+		ret = virt_viewer_session_open_uri(VIRT_VIEWER_SESSION(priv->session), priv->guri);
 	} else {
 		virt_viewer_app_trace(self, "Opening direct TCP connection to display at %s:%s\n",
 				      priv->ghost, priv->gport);
@@ -982,6 +987,10 @@ virt_viewer_app_get_property (GObject *object, guint property_id,
 		g_value_set_string(value, priv->guest_name);
 		break;
 
+	case PROP_GURI:
+		g_value_set_string(value, priv->guri);
+		break;
+
 	case PROP_FULLSCREEN:
 		g_value_set_boolean(value, priv->fullscreen);
 		break;
@@ -1018,6 +1027,12 @@ virt_viewer_app_set_property (GObject *object, guint property_id,
 		priv->guest_name = g_value_dup_string(value);
 		break;
 
+	case PROP_GURI:
+		g_free(priv->guri);
+		priv->guri = g_value_dup_string(value);
+		virt_viewer_app_update_pretty_address(self);
+		break;
+
 	case PROP_FULLSCREEN:
 		virt_viewer_app_set_fullscreen(self, g_value_get_boolean(value));
 		break;
@@ -1174,6 +1189,17 @@ virt_viewer_app_class_init (VirtViewerAppClass *klass)
 							    G_PARAM_STATIC_STRINGS));
 
 	g_object_class_install_property(object_class,
+					PROP_GURI,
+					g_param_spec_string("guri",
+							    "guri",
+							    "Remote graphical URI",
+							    "",
+							    G_PARAM_READABLE |
+							    G_PARAM_WRITABLE |
+							    G_PARAM_CONSTRUCT_ONLY |
+							    G_PARAM_STATIC_STRINGS));
+
+	g_object_class_install_property(object_class,
 					PROP_FULLSCREEN,
 					g_param_spec_boolean("fullscreen",
 							     "Fullscreen",
@@ -1225,7 +1251,9 @@ virt_viewer_app_update_pretty_address(VirtViewerApp *self)
 
 	priv = self->priv;
 	g_free(priv->pretty_address);
-	if (priv->gport)
+	if (priv->guri)
+		priv->pretty_address = g_strdup(priv->guri);
+	else if (priv->gport)
 		priv->pretty_address = g_strdup_printf("%s:%s", priv->ghost, priv->gport);
 	else
 		priv->pretty_address = g_strdup_printf("%s:%s", priv->host, priv->unixsock);
@@ -1356,7 +1384,8 @@ virt_viewer_app_set_connect_info(VirtViewerApp *self,
 				 const gchar *transport,
 				 const gchar *unixsock,
 				 const gchar *user,
-				 gint port)
+				 gint port,
+				 const gchar *guri)
 {
 	g_return_if_fail(VIRT_VIEWER_IS_APP(self));
 	VirtViewerAppPrivate *priv = self->priv;
@@ -1370,6 +1399,7 @@ virt_viewer_app_set_connect_info(VirtViewerApp *self,
 	g_free(priv->transport);
 	g_free(priv->unixsock);
 	g_free(priv->user);
+	g_free(priv->guri);
 
 	priv->host = g_strdup(host);
 	priv->ghost = g_strdup(ghost);
@@ -1377,6 +1407,7 @@ virt_viewer_app_set_connect_info(VirtViewerApp *self,
 	priv->transport = g_strdup(transport);
 	priv->unixsock = g_strdup(unixsock);
 	priv->user = g_strdup(user);
+	priv->guri = g_strdup(guri);
 	priv->port = port;
 
 	virt_viewer_app_update_pretty_address(self);
@@ -1387,7 +1418,7 @@ virt_viewer_app_free_connect_info(VirtViewerApp *self)
 {
 	g_return_if_fail(VIRT_VIEWER_IS_APP(self));
 
-	virt_viewer_app_set_connect_info(self, NULL, NULL, NULL, NULL, NULL, NULL, 0);
+	virt_viewer_app_set_connect_info(self, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL);
 }
 
 VirtViewerWindow*
diff --git a/src/virt-viewer-app.h b/src/virt-viewer-app.h
index f3fbadd..cc85dfa 100644
--- a/src/virt-viewer-app.h
+++ b/src/virt-viewer-app.h
@@ -75,7 +75,8 @@ void virt_viewer_app_set_connect_info(VirtViewerApp *self,
                                       const gchar *transport,
                                       const gchar *unixsock,
                                       const gchar *user,
-                                      gint port);
+                                      gint port,
+                                      const gchar *guri);
 gboolean virt_viewer_app_window_set_visible(VirtViewerApp *self, VirtViewerWindow *window, gboolean visible);
 void virt_viewer_app_show_status(VirtViewerApp *self, const gchar *fmt, ...);
 void virt_viewer_app_show_display(VirtViewerApp *self);
diff --git a/src/virt-viewer.c b/src/virt-viewer.c
index 7a7c488..10865ec 100644
--- a/src/virt-viewer.c
+++ b/src/virt-viewer.c
@@ -341,7 +341,7 @@ virt_viewer_extract_connect_info(VirtViewer *self,
 		ghost = g_strdup(host);
 	}
 
-	virt_viewer_app_set_connect_info(app, host, ghost, gport, transport, unixsock, user, port);
+	virt_viewer_app_set_connect_info(app, host, ghost, gport, transport, unixsock, user, port, NULL);
 
 	retval = TRUE;
 
-- 
1.7.7.3




More information about the virt-tools-list mailing list