[libvirt] [PATCH 1/2] qemu: event: Properly handle spice events

Jiri Denemark jdenemar at redhat.com
Tue Jun 30 09:06:27 UTC 2015


On Mon, Jun 29, 2015 at 17:13:58 +0200, Peter Krempa wrote:
> Spice events have mostly similar information present in the event JSON
> but they differ in the name of the element containing the port.
> 
> The JSON event also provides connection ID which might be useful in the
> future.
> 
> This patch splits up the event parser code into two functions and the
> SPICE reimplements the event parsing with correct names and drops the
> VNC only stuff.
> ---
>  src/qemu/qemu_monitor_json.c | 81 ++++++++++++++++++++++++++++++++++++++++----
>  1 file changed, 74 insertions(+), 7 deletions(-)
> 
> diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c
> index d3e98d4..ba1e4f9 100644
> --- a/src/qemu/qemu_monitor_json.c
> +++ b/src/qemu/qemu_monitor_json.c
...
> +static void
> +qemuMonitorJSONHandleGraphicsSPICE(qemuMonitorPtr mon,
> +                                   virJSONValuePtr data,
> +                                   int phase)
> +{
> +    const char *lhost, *lport, *lfamily;
> +    const char *rhost, *rport, *rfamily;
> +    const char *auth = "";
> +    int lfamilyID, rfamilyID;
> +    virJSONValuePtr client;
> +    virJSONValuePtr server;
> +
> +    if (!(client = virJSONValueObjectGetObject(data, "client")) ||
> +        !(server = virJSONValueObjectGetObject(data, "server"))) {
> +        VIR_WARN("missing server or client info in SPICE event");
> +        return;
> +    }
> +
> +    if (phase == VIR_DOMAIN_EVENT_GRAPHICS_INITIALIZE &&
> +        !(auth = virJSONValueObjectGetString(server, "auth"))) {
> +        VIR_DEBUG("missing auth scheme in graphics event");
> +        auth = "";
> +    }
> +
> +    if (!(lfamily = virJSONValueObjectGetString(server, "family"))) {
> +        VIR_WARN("missing local address family in graphics event");
> +        return;
> +    }
> +    if (!(lhost = virJSONValueObjectGetString(server, "host"))) {
> +        VIR_WARN("missing local hostname in graphics event");
> +        return;
> +    }
> +    if (!(lport = virJSONValueObjectGetString(server, "port"))) {
> +        VIR_WARN("missing local port in graphics event");
> +        return;
> +    }
> +
> +    if (!(rfamily = virJSONValueObjectGetString(client, "family"))) {
> +        VIR_WARN("missing remote address family in graphics event");
> +        return;
> +    }
> +    if (!(rhost = virJSONValueObjectGetString(client, "host"))) {
> +        VIR_WARN("missing remote hostname in graphics event");
> +        return;
> +    }
> +    if (!(rport = virJSONValueObjectGetString(client, "port"))) {
> +        VIR_WARN("missing remote service in graphics event");
> +        return;
> +    }
> +
> +    if ((lfamilyID = qemuMonitorGraphicsAddressFamilyTypeFromString(lfamily)) < 0) {
> +        VIR_WARN("unknown address family '%s'", lfamily);
> +        lfamilyID = VIR_DOMAIN_EVENT_GRAPHICS_ADDRESS_IPV4;
> +    }
> +    if ((rfamilyID = qemuMonitorGraphicsAddressFamilyTypeFromString(rfamily)) < 0) {
> +        VIR_WARN("unknown address family '%s'", rfamily);
> +        rfamilyID = VIR_DOMAIN_EVENT_GRAPHICS_ADDRESS_IPV4;
> +    }
> +
> +    qemuMonitorEmitGraphics(mon, phase, lfamilyID, lhost, lport, rfamilyID,
> +                            rhost, rport, auth, NULL, NULL);
>  }

I think it would make sense to s/graphics event/SPICE event/

ACK

Jirka




More information about the libvir-list mailing list