Signed-off-by: Hans de Goede <hdego...@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 _______________________________________________ Spice-devel mailing list Spice-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/spice-devel