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 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list