File vnc-listen.patch of Package virt-viewer
Index: virt-viewer-0.2.1/src/viewer.c
===================================================================
--- virt-viewer-0.2.1.orig/src/viewer.c
+++ virt-viewer-0.2.1/src/viewer.c
@@ -696,7 +696,7 @@ static int viewer_matches_domain(VirtVie
return 0;
}
-static char * viewer_extract_vnc_port(virDomainPtr dom)
+static char * viewer_extract_vnc_port(virDomainPtr dom, char **host)
{
char *xmldesc = virDomainGetXMLDesc(dom, 0);
xmlDocPtr xml = NULL;
@@ -709,6 +709,14 @@ static char * viewer_extract_vnc_port(vi
if (!pctxt || !pctxt->sax)
goto error;
+ obj = xmlXPathEval((const xmlChar *)"string(/domain/devices/graphics[@type='vnc']/@listen)", ctxt);
+ if (obj && obj->type == XPATH_STRING &&
+ obj->stringval && obj->stringval[0]) {
+ *host = strdup((const char*)obj->stringval);
+ xmlXPathFreeObject(obj);
+ obj = NULL;
+ }
+
xml = xmlCtxtReadDoc(pctxt, (const xmlChar *)xmldesc, "domain.xml", NULL,
XML_PARSE_NOENT | XML_PARSE_NONET |
XML_PARSE_NOWARNING);
@@ -868,15 +876,18 @@ static int viewer_activate(VirtViewer *v
char *host = NULL;
char *transport = NULL;
char *user = NULL;
+ char *vnchost = NULL;
int port, fd = -1;
int ret = -1;
if (viewer->active)
goto cleanup;
- if ((vncport = viewer_extract_vnc_port(dom)) == NULL) {
+ if ((vncport = viewer_extract_vnc_port(dom, &vnchost)) == NULL) {
viewer_simple_message_dialog(viewer->window, _("Cannot determine the VNC port for the guest %s"),
viewer->domkey);
+ free(vnchost);
+ vnchost = NULL;
goto cleanup;
}
@@ -886,6 +897,9 @@ static int viewer_activate(VirtViewer *v
goto cleanup;
}
+ if (vnchost == NULL)
+ vnchost = strdup("127.0.0.1");
+
DEBUG_LOG("Remote host is %s and transport %s user %s",
host, transport ? transport : "", user ? user : "");
@@ -901,7 +915,7 @@ static int viewer_activate(VirtViewer *v
if (fd >= 0) {
vnc_display_open_fd(VNC_DISPLAY(viewer->vnc), fd);
} else {
- vnc_display_open_host(VNC_DISPLAY(viewer->vnc), host, vncport);
+ vnc_display_open_host(VNC_DISPLAY(viewer->vnc), vnchost, vncport);
}
viewer_set_status(viewer, "Connecting to VNC server");