diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in index df772b5322..8852d7d586 100644 --- a/docs/formatdomain.html.in +++ b/docs/formatdomain.html.in @@ -3595,6 +3595,12 @@ qemu-kvm -net nic,model=? /dev/null Rather than using listen/port, QEMU supports a socket attribute for listening on a unix domain socket path.Since 0.8.8 + + For VNC WebSocket functionality, websocket + attribute may be used to specify port to listen on (with + -1 meaning auto-allocation and autoport + having no effect due to security reasons). + Since 1.0.6
"spice"
diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng index b40cb9008d..414fd727db 100644 --- a/docs/schemas/domaincommon.rng +++ b/docs/schemas/domaincommon.rng @@ -2109,6 +2109,11 @@ + + + + + diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 2ab1bf8266..91f3b3168f 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -7667,6 +7667,7 @@ virDomainGraphicsDefParseXML(xmlNodePtr node, if (def->type == VIR_DOMAIN_GRAPHICS_TYPE_VNC) { char *port = virXMLPropString(node, "port"); + char *websocket = virXMLPropString(node, "websocket"); char *autoport; if (port) { @@ -7697,6 +7698,18 @@ virDomainGraphicsDefParseXML(xmlNodePtr node, VIR_FREE(autoport); } + if (websocket) { + if (virStrToLong_i(websocket, + NULL, 10, + &def->data.vnc.websocket) < 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("cannot parse vnc WebSocket port %s"), websocket); + VIR_FREE(websocket); + goto error; + } + VIR_FREE(websocket); + } + def->data.vnc.socket = virXMLPropString(node, "socket"); def->data.vnc.keymap = virXMLPropString(node, "keymap"); @@ -15176,6 +15189,9 @@ virDomainGraphicsDefFormat(virBufferPtr buf, virBufferAsprintf(buf, " autoport='%s'", def->data.vnc.autoport ? "yes" : "no"); + if (def->data.vnc.websocket) + virBufferAsprintf(buf, " websocket='%d'", def->data.vnc.websocket); + if (listenAddr) virBufferAsprintf(buf, " listen='%s'", listenAddr); } diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index 11511114a3..8d4b868393 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -1411,6 +1411,7 @@ struct _virDomainGraphicsDef { union { struct { int port; + int websocket; bool autoport; char *keymap; char *socket;