[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 18/21] usb-redir: Let the usb-host know about our de
From: |
Gerd Hoffmann |
Subject: |
[Qemu-devel] [PATCH 18/21] usb-redir: Let the usb-host know about our device filtering |
Date: |
Tue, 28 Feb 2012 11:20:27 +0100 |
From: Hans de Goede <address@hidden>
libusbredirparser-0.3.4 adds 2 new packets which allows us to notify
the usb-host:
-about the usb device filter we have (if any), so that it knows not the even
try to redirect certain devices
-when we reject a device based on filtering (in case it tries anyways)
Signed-off-by: Hans de Goede <address@hidden>
Signed-off-by: Gerd Hoffmann <address@hidden>
---
configure | 2 +-
usb-redir.c | 20 ++++++++++++++++++++
2 files changed, 21 insertions(+), 1 deletions(-)
diff --git a/configure b/configure
index 87474e9..d64b2de 100755
--- a/configure
+++ b/configure
@@ -2592,7 +2592,7 @@ fi
# check for usbredirparser for usb network redirection support
if test "$usb_redir" != "no" ; then
- if $pkg_config --atleast-version=0.3.3 libusbredirparser >/dev/null 2>&1 ;
then
+ if $pkg_config --atleast-version=0.3.4 libusbredirparser >/dev/null 2>&1 ;
then
usb_redir="yes"
usb_redir_cflags=$($pkg_config --cflags libusbredirparser 2>/dev/null)
usb_redir_libs=$($pkg_config --libs libusbredirparser 2>/dev/null)
diff --git a/usb-redir.c b/usb-redir.c
index c98b14e..6c92fd9 100644
--- a/usb-redir.c
+++ b/usb-redir.c
@@ -106,6 +106,7 @@ struct AsyncURB {
QTAILQ_ENTRY(AsyncURB)next;
};
+static void usbredir_hello(void *priv, struct usb_redir_hello_header *h);
static void usbredir_device_connect(void *priv,
struct usb_redir_device_connect_header *device_connect);
static void usbredir_device_disconnect(void *priv);
@@ -802,6 +803,7 @@ static void usbredir_open_close_bh(void *opaque)
dev->parser->log_func = usbredir_log;
dev->parser->read_func = usbredir_read;
dev->parser->write_func = usbredir_write;
+ dev->parser->hello_func = usbredir_hello;
dev->parser->device_connect_func = usbredir_device_connect;
dev->parser->device_disconnect_func = usbredir_device_disconnect;
dev->parser->interface_info_func = usbredir_interface_info;
@@ -820,6 +822,7 @@ static void usbredir_open_close_bh(void *opaque)
dev->read_buf_size = 0;
usbredirparser_caps_set_cap(caps,
usb_redir_cap_connect_device_version);
+ usbredirparser_caps_set_cap(caps, usb_redir_cap_filter);
usbredirparser_init(dev->parser, VERSION, caps, USB_REDIR_CAPS_SIZE,
0);
usbredirparser_do_write(dev->parser);
}
@@ -991,6 +994,10 @@ static int usbredir_check_filter(USBRedirDevice *dev)
error:
usbredir_device_disconnect(dev);
+ if (usbredirparser_peer_has_cap(dev->parser, usb_redir_cap_filter)) {
+ usbredirparser_send_filter_reject(dev->parser);
+ usbredirparser_do_write(dev->parser);
+ }
return -1;
}
@@ -1016,6 +1023,19 @@ static int usbredir_handle_status(USBRedirDevice *dev,
}
}
+static void usbredir_hello(void *priv, struct usb_redir_hello_header *h)
+{
+ USBRedirDevice *dev = priv;
+
+ /* Try to send the filter info now that we've the usb-host's caps */
+ if (usbredirparser_peer_has_cap(dev->parser, usb_redir_cap_filter) &&
+ dev->filter_rules) {
+ usbredirparser_send_filter_filter(dev->parser, dev->filter_rules,
+ dev->filter_rules_count);
+ usbredirparser_do_write(dev->parser);
+ }
+}
+
static void usbredir_device_connect(void *priv,
struct usb_redir_device_connect_header *device_connect)
{
--
1.7.1
- [Qemu-devel] [PULL] usb patch queue, Gerd Hoffmann, 2012/02/28
- [Qemu-devel] [PATCH 01/21] usb-hid: fix tablet activation, Gerd Hoffmann, 2012/02/28
- [Qemu-devel] [PATCH 02/21] usb-ehci: fix reset, Gerd Hoffmann, 2012/02/28
- [Qemu-devel] [PATCH 06/21] usb-uhci: implement packet queuing, Gerd Hoffmann, 2012/02/28
- [Qemu-devel] [PATCH 08/21] usb: add tracepoint for usb packet state changes., Gerd Hoffmann, 2012/02/28
- [Qemu-devel] [PATCH 04/21] usb-uhci: add UHCIQueue, Gerd Hoffmann, 2012/02/28
- [Qemu-devel] [PATCH 07/21] usb-xhci: enable packet queuing, Gerd Hoffmann, 2012/02/28
- [Qemu-devel] [PATCH 18/21] usb-redir: Let the usb-host know about our device filtering,
Gerd Hoffmann <=
- [Qemu-devel] [PATCH 05/21] usb-uhci: process uhci_handle_td return code via switch., Gerd Hoffmann, 2012/02/28
- [Qemu-devel] [PATCH 03/21] usb-uhci: cleanup UHCIAsync allocation & initialization., Gerd Hoffmann, 2012/02/28
- [Qemu-devel] [PATCH 13/21] libcacard: fix reported ATR length, Gerd Hoffmann, 2012/02/28
- [Qemu-devel] [PATCH 16/21] usb-redir: Fix printing of device version, Gerd Hoffmann, 2012/02/28
- [Qemu-devel] [PATCH 09/21] usb-ehci: sanity-check iso xfers, Gerd Hoffmann, 2012/02/28
- [Qemu-devel] [PATCH 19/21] usb-redir: Limit return values returned by iso packets, Gerd Hoffmann, 2012/02/28
- [Qemu-devel] [PATCH 11/21] libcacard: link with glib for g_strndup, Gerd Hoffmann, 2012/02/28
- [Qemu-devel] [PATCH 10/21] usb-desc: fix user trigerrable segfaults (!config), Gerd Hoffmann, 2012/02/28
- [Qemu-devel] [PATCH 14/21] usb-ehci: Handle ISO packets failing with an error other then NAK, Gerd Hoffmann, 2012/02/28
- [Qemu-devel] [PATCH 20/21] usb-redir: Return USB_RET_NAK when we've no data for an interrupt endpoint, Gerd Hoffmann, 2012/02/28