From patchwork Fri Jan 10 23:20:24 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= X-Patchwork-Id: 309448 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id D6D7F2C0084 for ; Sat, 11 Jan 2014 10:21:31 +1100 (EST) Received: from localhost ([::1]:59467 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1W1lOL-0006c3-1L for incoming@patchwork.ozlabs.org; Fri, 10 Jan 2014 18:21:29 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:42021) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1W1lNo-0006J1-US for qemu-devel@nongnu.org; Fri, 10 Jan 2014 18:21:05 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1W1lNg-00083I-9W for qemu-devel@nongnu.org; Fri, 10 Jan 2014 18:20:56 -0500 Received: from mail-wg0-x230.google.com ([2a00:1450:400c:c00::230]:51904) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1W1lNg-000839-2M for qemu-devel@nongnu.org; Fri, 10 Jan 2014 18:20:48 -0500 Received: by mail-wg0-f48.google.com with SMTP id x13so4620914wgg.15 for ; Fri, 10 Jan 2014 15:20:46 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id:mime-version:content-type :content-transfer-encoding; bh=J6hz492/wKdAThCDHSmszduhPeVW8doqleOP5kPZYjw=; b=SKzmiJZB8Fc0P0nEO0vkpiHX4wFAgMIpPdVXLCgz67ITinrnmbhysEAaPm8DLf2xpN AjtKKzoax9FC1hPwgKTWV3Hj5vT+C+JDWAQ+KvnmHo45XuKQZMgYxYETu1EcuQz1Kk7v ByCzwFk4mNtF7BEd4wNg45epsNWXINKrIecbmcJJOuEx/0Rz/8uq4jh1lDlkH1b3DBAr ZlDIDoMTN2ogpRbD6QUMPw9ZUfZiRwymJR2hxmP+wG9Bn0UeaWPYAfSXVoBCLqdejkDH etakN3a1klPHd4ctoAyf2vRppgpE9eGK6NQ3LiztzdHwzizUX9ayvnXfkkUpj6MEmWBA BU0w== X-Received: by 10.180.13.242 with SMTP id k18mr4982227wic.44.1389396046884; Fri, 10 Jan 2014 15:20:46 -0800 (PST) Received: from localhost (154.Red-88-0-96.dynamicIP.rima-tde.net. [88.0.96.154]) by mx.google.com with ESMTPSA id ua8sm5348377wjc.4.2014.01.10.15.20.44 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 10 Jan 2014 15:20:45 -0800 (PST) From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= To: qemu-devel@nongnu.org Date: Sat, 11 Jan 2014 00:20:24 +0100 Message-Id: <1389396024-32246-1-git-send-email-marcandre.lureau@gmail.com> X-Mailer: git-send-email 1.8.4.2 MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Error: Malformed IPv6 address (bad octet value). X-Received-From: 2a00:1450:400c:c00::230 Cc: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , kraxel@redhat.com Subject: [Qemu-devel] [PATCH] spice: hook qemu_chr_fe_set_open() event to ports X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org 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é Lureau --- 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 *chr) g_free(s); } -static void spice_chr_set_fe_open(struct CharDriverState *chr, int fe_open) +static void spice_vmc_set_fe_open(struct CharDriverState *chr, int fe_open) { SpiceCharDriver *s = chr->opaque; if (fe_open) { @@ -222,6 +222,19 @@ static void spice_chr_set_fe_open(struct CharDriverState *chr, int fe_open) } } +static void spice_port_set_fe_open(struct CharDriverState *chr, int fe_open) +{ +#if SPICE_SERVER_VERSION >= 0x000c02 + SpiceCharDriver *s = 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 >= 0x000c02 @@ -248,7 +261,9 @@ static void print_allowed_subtypes(void) fprintf(stderr, "\n"); } -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 = spice_chr_write; chr->chr_add_watch = spice_chr_add_watch; chr->chr_close = spice_chr_close; - chr->chr_set_fe_open = spice_chr_set_fe_open; + chr->chr_set_fe_open = set_fe_open; chr->explicit_be_open = true; chr->chr_fe_event = spice_chr_fe_event; @@ -291,7 +306,7 @@ CharDriverState *qemu_chr_open_spice_vmc(const char *type) return NULL; } - return chr_open(type); + return chr_open(type, spice_vmc_set_fe_open); } #if SPICE_SERVER_VERSION >= 0x000c02 @@ -305,7 +320,7 @@ CharDriverState *qemu_chr_open_spice_port(const char *name) return NULL; } - chr = chr_open("port"); + chr = chr_open("port", spice_port_set_fe_open); s = chr->opaque; s->sin.portname = g_strdup(name);