Adding support for new attribute 'websocket' in the '<graphics>' element, the attribute value is the port to listen on with '-1' meaning auto-allocation, '0' meaning no websockets. Signed-off-by: Martin Kletzander <mkletzan@xxxxxxxxxx> --- docs/formatdomain.html.in | 5 +++++ docs/schemas/domaincommon.rng | 5 +++++ src/conf/domain_conf.c | 18 ++++++++++++++++++ src/conf/domain_conf.h | 1 + 4 files changed, 29 insertions(+) diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in index f325c3c..dfea434 100644 --- a/docs/formatdomain.html.in +++ b/docs/formatdomain.html.in @@ -3530,6 +3530,11 @@ qemu-kvm -net nic,model=? /dev/null Rather than using listen/port, QEMU supports a <code>socket</code> attribute for listening on a unix domain socket path.<span class="since">Since 0.8.8</span> + + For VNC WebSocket functionality, <code>websocket</code> + attribute may be used to specify port to listen on (with -1 + meaning auto-allocation). <span class="since">Since + 1.0.6</span> </dd> <dt><code>"spice"</code></dt> <dd> diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng index 10596dc..59999a1 100644 --- a/docs/schemas/domaincommon.rng +++ b/docs/schemas/domaincommon.rng @@ -2071,6 +2071,11 @@ </attribute> </optional> <optional> + <attribute name="websocket"> + <ref name="PortNumber"/> + </attribute> + </optional> + <optional> <attribute name="listen"> <ref name="addrIPorName"/> </attribute> diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index a8b5dfd..026a737 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -7546,6 +7546,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) { @@ -7576,6 +7577,20 @@ 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"), port); + VIR_FREE(websocket); + goto error; + } + VIR_FREE(websocket); + } else { + def->data.vnc.websocket = 0; + } + def->data.vnc.socket = virXMLPropString(node, "socket"); def->data.vnc.keymap = virXMLPropString(node, "keymap"); @@ -14980,6 +14995,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 3a0f23a..79deaf3 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -1401,6 +1401,7 @@ struct _virDomainGraphicsDef { union { struct { int port; + int websocket; bool autoport; char *keymap; char *socket; -- 1.8.2.1 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list