[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