[libvirt] [PATCH v2 1/2] Add VNC WebSocket support

John Ferlan jferlan at redhat.com
Tue Apr 30 15:18:08 UTC 2013


On 04/30/2013 10:42 AM, Martin Kletzander wrote:
> 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 at redhat.com>
> ---
>  docs/formatdomain.html.in     |  5 +++++
>  docs/schemas/domaincommon.rng |  5 +++++
>  src/conf/domain_conf.c        | 16 ++++++++++++++++
>  src/conf/domain_conf.h        |  1 +
>  4 files changed, 27 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..fd9e926 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,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"), port);

I think you meant websocket, not port for the string...  it's a
cut-n-paste error it seems.

"port" will be VIR_FREE()'d already (or it may not have been found, so
it's already NULL.

John

> +                VIR_FREE(websocket);
> +                goto error;
> +            }
> +            VIR_FREE(websocket);
> +        }
> +
>          def->data.vnc.socket = virXMLPropString(node, "socket");
>          def->data.vnc.keymap = virXMLPropString(node, "keymap");
> 
> @@ -14980,6 +14993,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;
> 




More information about the libvir-list mailing list