Various stream fixes and improvements (bz 743900) Fix state syncing when xen domain shuts down (bz 746007) Don't show <console> for xen dom0 (bz 752271) Fix selinux denial on /usr/libexec/pt_chown from LXC (bz 785411) Don't flood LXC log file (bz 785431) Fix several double close bugs (bz 827127) Fix PCI assignment for USB2.0 controllers (bz 822160)
137 lines
5.5 KiB
Diff
137 lines
5.5 KiB
Diff
From 57f08fb47b0938a9e8969b857380926fa6966ca8 Mon Sep 17 00:00:00 2001
|
|
From: Laine Stump <laine@laine.org>
|
|
Date: Wed, 14 Mar 2012 01:41:35 -0400
|
|
Subject: [PATCH] Emit graphics events when a SPICE client
|
|
connects/disconnects
|
|
|
|
Wire up the domain graphics event notifications for SPICE. Adapted
|
|
from a RHEL-only patch written by Dan Berrange that used custom
|
|
__com.redhat_SPICE events - equivalent events are now available in
|
|
upstream QEMU (including a SPICE_CONNECTED event, which was missing in
|
|
the __COM.redhat_SPICE version).
|
|
|
|
* src/qemu/qemu_monitor_json.c: Wire up SPICE graphics events
|
|
(cherry picked from commit 89ae6a5a30bd91cfb2365544f9dd2e6c2a36ecca)
|
|
|
|
Signed-off-by: Cole Robinson <crobinso@redhat.com>
|
|
---
|
|
src/qemu/qemu_monitor_json.c | 56 +++++++++++++++++++++++++++++++++++++++---
|
|
1 files changed, 52 insertions(+), 4 deletions(-)
|
|
|
|
diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c
|
|
index e38c2ed..d4a3b7b 100644
|
|
--- a/src/qemu/qemu_monitor_json.c
|
|
+++ b/src/qemu/qemu_monitor_json.c
|
|
@@ -57,6 +57,9 @@ static void qemuMonitorJSONHandleVNCConnect(qemuMonitorPtr mon, virJSONValuePtr
|
|
static void qemuMonitorJSONHandleVNCInitialize(qemuMonitorPtr mon, virJSONValuePtr data);
|
|
static void qemuMonitorJSONHandleVNCDisconnect(qemuMonitorPtr mon, virJSONValuePtr data);
|
|
static void qemuMonitorJSONHandleBlockJob(qemuMonitorPtr mon, virJSONValuePtr data);
|
|
+static void qemuMonitorJSONHandleSPICEConnect(qemuMonitorPtr mon, virJSONValuePtr data);
|
|
+static void qemuMonitorJSONHandleSPICEInitialize(qemuMonitorPtr mon, virJSONValuePtr data);
|
|
+static void qemuMonitorJSONHandleSPICEDisconnect(qemuMonitorPtr mon, virJSONValuePtr data);
|
|
|
|
struct {
|
|
const char *type;
|
|
@@ -73,6 +76,9 @@ struct {
|
|
{ "VNC_INITIALIZED", qemuMonitorJSONHandleVNCInitialize, },
|
|
{ "VNC_DISCONNECTED", qemuMonitorJSONHandleVNCDisconnect, },
|
|
{ "BLOCK_JOB_COMPLETED", qemuMonitorJSONHandleBlockJob, },
|
|
+ { "SPICE_CONNECTED", qemuMonitorJSONHandleSPICEConnect, },
|
|
+ { "SPICE_INITIALIZED", qemuMonitorJSONHandleSPICEInitialize, },
|
|
+ { "SPICE_DISCONNECTED", qemuMonitorJSONHandleSPICEDisconnect, },
|
|
};
|
|
|
|
|
|
@@ -617,7 +623,7 @@ VIR_ENUM_DECL(qemuMonitorGraphicsAddressFamily)
|
|
VIR_ENUM_IMPL(qemuMonitorGraphicsAddressFamily, VIR_DOMAIN_EVENT_GRAPHICS_ADDRESS_IPV6 + 1,
|
|
"ipv4", "ipv6");
|
|
|
|
-static void qemuMonitorJSONHandleVNC(qemuMonitorPtr mon, virJSONValuePtr data, int phase)
|
|
+static void qemuMonitorJSONHandleGraphics(qemuMonitorPtr mon, virJSONValuePtr data, int phase)
|
|
{
|
|
const char *localNode, *localService, *localFamily;
|
|
const char *remoteNode, *remoteService, *remoteFamily;
|
|
@@ -636,14 +642,38 @@ static void qemuMonitorJSONHandleVNC(qemuMonitorPtr mon, virJSONValuePtr data, i
|
|
}
|
|
|
|
authScheme = virJSONValueObjectGetString(server, "auth");
|
|
+ if (!authScheme) {
|
|
+ VIR_WARN("missing auth scheme in graphics event");
|
|
+ return;
|
|
+ }
|
|
|
|
localFamily = virJSONValueObjectGetString(server, "family");
|
|
+ if (!localFamily) {
|
|
+ VIR_WARN("missing local address family in graphics event");
|
|
+ return;
|
|
+ }
|
|
localNode = virJSONValueObjectGetString(server, "host");
|
|
+ if (!localNode) {
|
|
+ VIR_WARN("missing local hostname in graphics event");
|
|
+ return;
|
|
+ }
|
|
localService = virJSONValueObjectGetString(server, "service");
|
|
+ if (!localService)
|
|
+ localService = ""; /* Spice has multiple ports, so this isn't provided */
|
|
|
|
remoteFamily = virJSONValueObjectGetString(client, "family");
|
|
+ if (!remoteFamily) {
|
|
+ VIR_WARN("missing remote address family in graphics event");
|
|
+ return;
|
|
+ }
|
|
remoteNode = virJSONValueObjectGetString(client, "host");
|
|
+ if (!remoteNode) {
|
|
+ VIR_WARN("missing remote hostname in graphics event");
|
|
+ return;
|
|
+ }
|
|
remoteService = virJSONValueObjectGetString(client, "service");
|
|
+ if (!remoteService)
|
|
+ remoteService = ""; /* Spice has multiple ports, so this isn't provided */
|
|
|
|
saslUsername = virJSONValueObjectGetString(client, "sasl_username");
|
|
x509dname = virJSONValueObjectGetString(client, "x509_dname");
|
|
@@ -665,19 +695,37 @@ static void qemuMonitorJSONHandleVNC(qemuMonitorPtr mon, virJSONValuePtr data, i
|
|
|
|
static void qemuMonitorJSONHandleVNCConnect(qemuMonitorPtr mon, virJSONValuePtr data)
|
|
{
|
|
- qemuMonitorJSONHandleVNC(mon, data, VIR_DOMAIN_EVENT_GRAPHICS_CONNECT);
|
|
+ qemuMonitorJSONHandleGraphics(mon, data, VIR_DOMAIN_EVENT_GRAPHICS_CONNECT);
|
|
}
|
|
|
|
|
|
static void qemuMonitorJSONHandleVNCInitialize(qemuMonitorPtr mon, virJSONValuePtr data)
|
|
{
|
|
- qemuMonitorJSONHandleVNC(mon, data, VIR_DOMAIN_EVENT_GRAPHICS_INITIALIZE);
|
|
+ qemuMonitorJSONHandleGraphics(mon, data, VIR_DOMAIN_EVENT_GRAPHICS_INITIALIZE);
|
|
}
|
|
|
|
|
|
static void qemuMonitorJSONHandleVNCDisconnect(qemuMonitorPtr mon, virJSONValuePtr data)
|
|
{
|
|
- qemuMonitorJSONHandleVNC(mon, data, VIR_DOMAIN_EVENT_GRAPHICS_DISCONNECT);
|
|
+ qemuMonitorJSONHandleGraphics(mon, data, VIR_DOMAIN_EVENT_GRAPHICS_DISCONNECT);
|
|
+}
|
|
+
|
|
+
|
|
+static void qemuMonitorJSONHandleSPICEConnect(qemuMonitorPtr mon, virJSONValuePtr data)
|
|
+{
|
|
+ qemuMonitorJSONHandleGraphics(mon, data, VIR_DOMAIN_EVENT_GRAPHICS_CONNECT);
|
|
+}
|
|
+
|
|
+
|
|
+static void qemuMonitorJSONHandleSPICEInitialize(qemuMonitorPtr mon, virJSONValuePtr data)
|
|
+{
|
|
+ qemuMonitorJSONHandleGraphics(mon, data, VIR_DOMAIN_EVENT_GRAPHICS_INITIALIZE);
|
|
+}
|
|
+
|
|
+
|
|
+static void qemuMonitorJSONHandleSPICEDisconnect(qemuMonitorPtr mon, virJSONValuePtr data)
|
|
+{
|
|
+ qemuMonitorJSONHandleGraphics(mon, data, VIR_DOMAIN_EVENT_GRAPHICS_DISCONNECT);
|
|
}
|
|
|
|
static void qemuMonitorJSONHandleBlockJob(qemuMonitorPtr mon, virJSONValuePtr data)
|
|
--
|
|
1.7.7.6
|
|
|