On 04/19/2012 06:03 AM, Daniel P. Berrange wrote: > From: "Daniel P. Berrange" <berrange@xxxxxxxxxx> > > Support vnc://[x:y:z:]:5901/ for raw IPv6 addresses in URIs, > and qemu+ssh://root@[x:y:x:]:22/ for raw IPv6 addresses in > libvirt URIs > --- > src/virt-viewer-session-vnc.c | 17 ++++++++++++++++- > src/virt-viewer-util.c | 14 +++++++++++--- > 2 files changed, 27 insertions(+), 4 deletions(-) > > diff --git a/src/virt-viewer-session-vnc.c b/src/virt-viewer-session-vnc.c > index 3e27566..238c865 100644 > --- a/src/virt-viewer-session-vnc.c > +++ b/src/virt-viewer-session-vnc.c > @@ -197,6 +197,7 @@ virt_viewer_session_vnc_open_uri(VirtViewerSession* session, > VirtViewerSessionVnc *self = VIRT_VIEWER_SESSION_VNC(session); > xmlURIPtr uri = NULL; > gchar *portstr; > + gchar *hoststr = NULL; > gboolean ret; > > g_return_val_if_fail(self != NULL, FALSE); > @@ -207,8 +208,22 @@ virt_viewer_session_vnc_open_uri(VirtViewerSession* session, > > portstr = g_strdup_printf("%d", uri->port); > > - ret = vnc_display_open_host(self->priv->vnc, uri->server, portstr); > + if (uri->server) { > + if (uri->server[0] == '[') { > + gchar *tmp; > + hoststr = g_strdup(uri->server + 1); > + if ((tmp = strchr(hoststr, ']'))) > + *tmp = '\0'; > + } else { > + hoststr = g_strdup(uri->server); > + } > + } > + > + ret = vnc_display_open_host(self->priv->vnc, > + hoststr, > + portstr); > g_free(portstr); > + g_free(hoststr); > xmlFreeURI(uri); > return ret; > } > diff --git a/src/virt-viewer-util.c b/src/virt-viewer-util.c > index e4a0cc4..c1182af 100644 > --- a/src/virt-viewer-util.c > +++ b/src/virt-viewer-util.c > @@ -91,10 +91,18 @@ virt_viewer_util_extract_host(const char *uristr, > g_return_val_if_fail(uri != NULL, 1); > > if (host) { > - if (!uri || !uri->server) > + if (!uri || !uri->server) { > *host = g_strdup("localhost"); > - else > - *host = g_strdup(uri->server); > + } else { > + if (uri->server[0] == '[') { > + gchar *tmp; > + *host = g_strdup(uri->server + 1); > + if ((tmp = strchr(*host, ']'))) > + *tmp = '\0'; > + } else { > + *host = g_strdup(uri->server); > + } > + } > } > > if (user) { ACK.