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;