[Spice-devel] [PATCH spice-gtk] channel-usbredir: Handle some more usbredirhost_read_guest_data errors
Hans de Goede
hdegoede at redhat.com
Tue Mar 6 10:30:55 PST 2012
Signed-off-by: Hans de Goede <hdegoede at redhat.com>
---
configure.ac | 2 +-
gtk/channel-usbredir.c | 23 ++++++++++++++++++++---
gtk/spice-client.h | 2 ++
3 files changed, 23 insertions(+), 4 deletions(-)
diff --git a/configure.ac b/configure.ac
index 1d24773..13f33e6 100644
--- a/configure.ac
+++ b/configure.ac
@@ -346,7 +346,7 @@ if test "x$enable_usbredir" = "xno"; then
have_usbredir="no"
else
PKG_CHECK_MODULES([USBREDIR],
- [gudev-1.0 libusb-1.0 >= 1.0.9 libusbredirhost >= 0.4 libusbredirparser >= 0.4],
+ [gudev-1.0 libusb-1.0 >= 1.0.9 libusbredirhost >= 0.4.2 libusbredirparser >= 0.4],
[have_usbredir=yes],
[have_usbredir=no])
if test "x$have_usbredir" = "xno" && test "x$enable_usbredir" = "xyes"; then
diff --git a/gtk/channel-usbredir.c b/gtk/channel-usbredir.c
index eb81fe5..dec6c4a 100644
--- a/gtk/channel-usbredir.c
+++ b/gtk/channel-usbredir.c
@@ -606,7 +606,7 @@ static void usbredir_handle_msg(SpiceChannel *c, SpiceMsgIn *in)
priv->read_buf_size = size;
r = usbredirhost_read_guest_data(priv->host);
- if (r == usbredirhost_read_device_rejected) {
+ if (r != 0) {
libusb_device *device = priv->device;
gchar *desc;
GError *err;
@@ -615,8 +615,25 @@ static void usbredir_handle_msg(SpiceChannel *c, SpiceMsgIn *in)
desc = spice_usb_device_get_description((SpiceUsbDevice *)device,
NULL);
- err = g_error_new(SPICE_CLIENT_ERROR, SPICE_CLIENT_ERROR_FAILED,
- "%s rejected by host", desc);
+ switch (r) {
+ case usbredirhost_read_parse_error:
+ err = g_error_new(SPICE_CLIENT_ERROR, SPICE_CLIENT_ERROR_FAILED,
+ "usbredir protocol parse error for %s", desc);
+ break;
+ case usbredirhost_read_device_rejected:
+ err = g_error_new(SPICE_CLIENT_ERROR,
+ SPICE_CLIENT_USB_DEVICE_REJECTED,
+ "%s rejected by host", desc);
+ break;
+ case usbredirhost_read_device_lost:
+ err = g_error_new(SPICE_CLIENT_ERROR,
+ SPICE_CLIENT_USB_DEVICE_LOST,
+ "%s disconnected (fatal IO error)", desc);
+ break;
+ default:
+ err = g_error_new(SPICE_CLIENT_ERROR, SPICE_CLIENT_ERROR_FAILED,
+ "Unknown error (%d) for %s", r, desc);
+ }
g_free(desc);
SPICE_DEBUG("%s", err->message);
diff --git a/gtk/spice-client.h b/gtk/spice-client.h
index 2d7c622..5c05ebb 100644
--- a/gtk/spice-client.h
+++ b/gtk/spice-client.h
@@ -58,6 +58,8 @@ G_BEGIN_DECLS
typedef enum
{
SPICE_CLIENT_ERROR_FAILED,
+ SPICE_CLIENT_USB_DEVICE_REJECTED,
+ SPICE_CLIENT_USB_DEVICE_LOST,
} SpiceClientError;
GQuark spice_client_error_quark(void);
--
1.7.7.5
More information about the Spice-devel
mailing list