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