From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:58136) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WALI4-0003l8-U2 for qemu-devel@nongnu.org; Mon, 03 Feb 2014 10:18:34 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1WALHu-0005hT-GP for qemu-devel@nongnu.org; Mon, 03 Feb 2014 10:18:28 -0500 Received: from mx1.redhat.com ([209.132.183.28]:6623) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WALHu-0005hP-85 for qemu-devel@nongnu.org; Mon, 03 Feb 2014 10:18:18 -0500 From: Gerd Hoffmann Date: Mon, 3 Feb 2014 16:18:05 +0100 Message-Id: <1391440685-24201-5-git-send-email-kraxel@redhat.com> In-Reply-To: <1391440685-24201-1-git-send-email-kraxel@redhat.com> References: <1391440685-24201-1-git-send-email-kraxel@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Subject: [Qemu-devel] [PATCH 4/4] spice: hook qemu_chr_fe_set_open() event to ports List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Gerd Hoffmann From: Marc-Andr=C3=A9 Lureau This wires up a spice port event on virtio-ports open/close, so the client is notified when the other end is ready. Signed-off-by: Marc-Andr=C3=A9 Lureau Signed-off-by: Gerd Hoffmann --- spice-qemu-char.c | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/spice-qemu-char.c b/spice-qemu-char.c index 16439c5..6624559 100644 --- a/spice-qemu-char.c +++ b/spice-qemu-char.c @@ -212,7 +212,7 @@ static void spice_chr_close(struct CharDriverState *c= hr) g_free(s); } =20 -static void spice_chr_set_fe_open(struct CharDriverState *chr, int fe_op= en) +static void spice_vmc_set_fe_open(struct CharDriverState *chr, int fe_op= en) { SpiceCharDriver *s =3D chr->opaque; if (fe_open) { @@ -222,6 +222,19 @@ static void spice_chr_set_fe_open(struct CharDriverS= tate *chr, int fe_open) } } =20 +static void spice_port_set_fe_open(struct CharDriverState *chr, int fe_o= pen) +{ +#if SPICE_SERVER_VERSION >=3D 0x000c02 + SpiceCharDriver *s =3D chr->opaque; + + if (fe_open) { + spice_server_port_event(&s->sin, SPICE_PORT_EVENT_OPENED); + } else { + spice_server_port_event(&s->sin, SPICE_PORT_EVENT_CLOSED); + } +#endif +} + static void spice_chr_fe_event(struct CharDriverState *chr, int event) { #if SPICE_SERVER_VERSION >=3D 0x000c02 @@ -248,7 +261,9 @@ static void print_allowed_subtypes(void) fprintf(stderr, "\n"); } =20 -static CharDriverState *chr_open(const char *subtype) +static CharDriverState *chr_open(const char *subtype, + void (*set_fe_open)(struct CharDriverState *, int)) + { CharDriverState *chr; SpiceCharDriver *s; @@ -262,7 +277,7 @@ static CharDriverState *chr_open(const char *subtype) chr->chr_write =3D spice_chr_write; chr->chr_add_watch =3D spice_chr_add_watch; chr->chr_close =3D spice_chr_close; - chr->chr_set_fe_open =3D spice_chr_set_fe_open; + chr->chr_set_fe_open =3D set_fe_open; chr->explicit_be_open =3D true; chr->chr_fe_event =3D spice_chr_fe_event; =20 @@ -291,7 +306,7 @@ CharDriverState *qemu_chr_open_spice_vmc(const char *= type) return NULL; } =20 - return chr_open(type); + return chr_open(type, spice_vmc_set_fe_open); } =20 #if SPICE_SERVER_VERSION >=3D 0x000c02 @@ -305,7 +320,7 @@ CharDriverState *qemu_chr_open_spice_port(const char = *name) return NULL; } =20 - chr =3D chr_open("port"); + chr =3D chr_open("port", spice_port_set_fe_open); s =3D chr->opaque; s->sin.portname =3D g_strdup(name); =20 --=20 1.8.3.1