|
Packit |
9795e1 |
/* usbredirparser.h usb redirection protocol parser header
|
|
Packit |
9795e1 |
|
|
Packit |
9795e1 |
Copyright 2010-2012 Red Hat, Inc.
|
|
Packit |
9795e1 |
|
|
Packit |
9795e1 |
Red Hat Authors:
|
|
Packit |
9795e1 |
Hans de Goede <hdegoede@redhat.com>
|
|
Packit |
9795e1 |
|
|
Packit |
9795e1 |
This library is free software; you can redistribute it and/or
|
|
Packit |
9795e1 |
modify it under the terms of the GNU Lesser General Public
|
|
Packit |
9795e1 |
License as published by the Free Software Foundation; either
|
|
Packit |
9795e1 |
version 2.1 of the License, or (at your option) any later version.
|
|
Packit |
9795e1 |
|
|
Packit |
9795e1 |
This library is distributed in the hope that it will be useful,
|
|
Packit |
9795e1 |
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
Packit |
9795e1 |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Packit |
9795e1 |
Lesser General Public License for more details.
|
|
Packit |
9795e1 |
|
|
Packit |
9795e1 |
You should have received a copy of the GNU Lesser General Public
|
|
Packit |
9795e1 |
License along with this library; if not, see <http://www.gnu.org/licenses/>.
|
|
Packit |
9795e1 |
*/
|
|
Packit |
9795e1 |
#ifndef __USBREDIRPARSER_H
|
|
Packit |
9795e1 |
#define __USBREDIRPARSER_H
|
|
Packit |
9795e1 |
|
|
Packit |
9795e1 |
#include "usbredirproto.h"
|
|
Packit |
9795e1 |
|
|
Packit |
9795e1 |
#ifdef __cplusplus
|
|
Packit |
9795e1 |
extern "C" {
|
|
Packit |
9795e1 |
#endif
|
|
Packit |
9795e1 |
|
|
Packit |
9795e1 |
struct usbredirparser;
|
|
Packit |
9795e1 |
struct usbredirfilter_rule;
|
|
Packit |
9795e1 |
|
|
Packit |
9795e1 |
/* Called by a usbredirparser to log various messages */
|
|
Packit |
9795e1 |
enum { usbredirparser_none, usbredirparser_error, usbredirparser_warning,
|
|
Packit |
9795e1 |
usbredirparser_info, usbredirparser_debug, usbredirparser_debug_data };
|
|
Packit |
9795e1 |
typedef void (*usbredirparser_log)(void *priv, int level, const char *msg);
|
|
Packit |
9795e1 |
|
|
Packit |
9795e1 |
/* Called by a usbredirparser to read/write data to its peer.
|
|
Packit |
9795e1 |
Must return the amount of bytes read/written, 0 when the read/write would
|
|
Packit |
9795e1 |
block (and this is undesirable) and -1 on error.
|
|
Packit |
9795e1 |
|
|
Packit |
9795e1 |
If the usbredirparser_fl_write_cb_owns_buffer flag is passed to
|
|
Packit |
9795e1 |
usbredirparser_init, then the usbredirparser_write callback becomes
|
|
Packit |
9795e1 |
the owner of the buffer pointed to by data and should call
|
|
Packit |
9795e1 |
usbredirparser_free_write_buffer() when it is done with the buffer.
|
|
Packit |
9795e1 |
In this case the callback is not allowed to return any amount of bytes
|
|
Packit |
9795e1 |
written, it must either accept the entire buffer (return count),
|
|
Packit |
9795e1 |
or signal blocking (return 0) or error (return -1). Returning any other
|
|
Packit |
9795e1 |
value will result in a call to abort().
|
|
Packit |
9795e1 |
*/
|
|
Packit |
9795e1 |
typedef int (*usbredirparser_read)(void *priv, uint8_t *data, int count);
|
|
Packit |
9795e1 |
typedef int (*usbredirparser_write)(void *priv, uint8_t *data, int count);
|
|
Packit |
9795e1 |
|
|
Packit |
9795e1 |
/* Locking functions for use by multithread apps */
|
|
Packit |
9795e1 |
typedef void *(*usbredirparser_alloc_lock)(void);
|
|
Packit |
9795e1 |
typedef void (*usbredirparser_lock)(void *lock);
|
|
Packit |
9795e1 |
typedef void (*usbredirparser_unlock)(void *lock);
|
|
Packit |
9795e1 |
typedef void (*usbredirparser_free_lock)(void *lock);
|
|
Packit |
9795e1 |
|
|
Packit |
9795e1 |
/* The below callbacks are called when a complete packet of the relevant
|
|
Packit |
9795e1 |
type has been received.
|
|
Packit |
9795e1 |
|
|
Packit |
9795e1 |
Note that the passed in packet-type-specific-header's lifetime is only
|
|
Packit |
9795e1 |
guarenteed to be that of the callback.
|
|
Packit |
9795e1 |
|
|
Packit |
9795e1 |
Control packets: */
|
|
Packit |
9795e1 |
typedef void (*usbredirparser_hello)(void *priv,
|
|
Packit |
9795e1 |
struct usb_redir_hello_header *hello);
|
|
Packit |
9795e1 |
typedef void (*usbredirparser_device_connect)(void *priv,
|
|
Packit |
9795e1 |
struct usb_redir_device_connect_header *device_connect);
|
|
Packit |
9795e1 |
typedef void (*usbredirparser_device_disconnect)(void *priv);
|
|
Packit |
9795e1 |
typedef void (*usbredirparser_reset)(void *priv);
|
|
Packit |
9795e1 |
typedef void (*usbredirparser_interface_info)(void *priv,
|
|
Packit |
9795e1 |
struct usb_redir_interface_info_header *interface_info);
|
|
Packit |
9795e1 |
typedef void (*usbredirparser_ep_info)(void *priv,
|
|
Packit |
9795e1 |
struct usb_redir_ep_info_header *ep_info);
|
|
Packit |
9795e1 |
typedef void (*usbredirparser_set_configuration)(void *priv,
|
|
Packit |
9795e1 |
uint64_t id, struct usb_redir_set_configuration_header *set_configuration);
|
|
Packit |
9795e1 |
typedef void (*usbredirparser_get_configuration)(void *priv, uint64_t id);
|
|
Packit |
9795e1 |
typedef void (*usbredirparser_configuration_status)(void *priv,
|
|
Packit |
9795e1 |
uint64_t id, struct usb_redir_configuration_status_header *configuration_status);
|
|
Packit |
9795e1 |
typedef void (*usbredirparser_set_alt_setting)(void *priv,
|
|
Packit |
9795e1 |
uint64_t id, struct usb_redir_set_alt_setting_header *set_alt_setting);
|
|
Packit |
9795e1 |
typedef void (*usbredirparser_get_alt_setting)(void *priv,
|
|
Packit |
9795e1 |
uint64_t id, struct usb_redir_get_alt_setting_header *get_alt_setting);
|
|
Packit |
9795e1 |
typedef void (*usbredirparser_alt_setting_status)(void *priv,
|
|
Packit |
9795e1 |
uint64_t id, struct usb_redir_alt_setting_status_header *alt_setting_status);
|
|
Packit |
9795e1 |
typedef void (*usbredirparser_start_iso_stream)(void *priv,
|
|
Packit |
9795e1 |
uint64_t id, struct usb_redir_start_iso_stream_header *start_iso_stream);
|
|
Packit |
9795e1 |
typedef void (*usbredirparser_stop_iso_stream)(void *priv,
|
|
Packit |
9795e1 |
uint64_t id, struct usb_redir_stop_iso_stream_header *stop_iso_stream);
|
|
Packit |
9795e1 |
typedef void (*usbredirparser_iso_stream_status)(void *priv,
|
|
Packit |
9795e1 |
uint64_t id, struct usb_redir_iso_stream_status_header *iso_stream_status);
|
|
Packit |
9795e1 |
typedef void (*usbredirparser_start_interrupt_receiving)(void *priv,
|
|
Packit |
9795e1 |
uint64_t id, struct usb_redir_start_interrupt_receiving_header *start_interrupt_receiving);
|
|
Packit |
9795e1 |
typedef void (*usbredirparser_stop_interrupt_receiving)(void *priv,
|
|
Packit |
9795e1 |
uint64_t id, struct usb_redir_stop_interrupt_receiving_header *stop_interrupt_receiving);
|
|
Packit |
9795e1 |
typedef void (*usbredirparser_interrupt_receiving_status)(void *priv,
|
|
Packit |
9795e1 |
uint64_t id, struct usb_redir_interrupt_receiving_status_header *interrupt_receiving_status);
|
|
Packit |
9795e1 |
typedef void (*usbredirparser_alloc_bulk_streams)(void *priv,
|
|
Packit |
9795e1 |
uint64_t id, struct usb_redir_alloc_bulk_streams_header *alloc_bulk_streams);
|
|
Packit |
9795e1 |
typedef void (*usbredirparser_free_bulk_streams)(void *priv,
|
|
Packit |
9795e1 |
uint64_t id, struct usb_redir_free_bulk_streams_header *free_bulk_streams);
|
|
Packit |
9795e1 |
typedef void (*usbredirparser_bulk_streams_status)(void *priv,
|
|
Packit |
9795e1 |
uint64_t id, struct usb_redir_bulk_streams_status_header *bulk_streams_status);
|
|
Packit |
9795e1 |
typedef void (*usbredirparser_cancel_data_packet)(void *priv, uint64_t id);
|
|
Packit |
9795e1 |
typedef void (*usbredirparser_filter_reject)(void *priv);
|
|
Packit |
9795e1 |
/* Note that the ownership of the rules array is passed on to the callback. */
|
|
Packit |
9795e1 |
typedef void (*usbredirparser_filter_filter)(void *priv,
|
|
Packit |
9795e1 |
struct usbredirfilter_rule *rules, int rules_count);
|
|
Packit |
9795e1 |
typedef void (*usbredirparser_device_disconnect_ack)(void *priv);
|
|
Packit |
9795e1 |
typedef void (*usbredirparser_start_bulk_receiving)(void *priv,
|
|
Packit |
9795e1 |
uint64_t id, struct usb_redir_start_bulk_receiving_header *start_bulk_receiving);
|
|
Packit |
9795e1 |
typedef void (*usbredirparser_stop_bulk_receiving)(void *priv,
|
|
Packit |
9795e1 |
uint64_t id, struct usb_redir_stop_bulk_receiving_header *stop_bulk_receiving);
|
|
Packit |
9795e1 |
typedef void (*usbredirparser_bulk_receiving_status)(void *priv,
|
|
Packit |
9795e1 |
uint64_t id, struct usb_redir_bulk_receiving_status_header *bulk_receiving_status);
|
|
Packit |
9795e1 |
|
|
Packit |
9795e1 |
/* Data packets:
|
|
Packit |
9795e1 |
|
|
Packit |
9795e1 |
Note that ownership of the the data buffer (if not NULL) is passed on to
|
|
Packit |
9795e1 |
the callback. The callback should free it by calling
|
|
Packit |
9795e1 |
usbredirparser_free_packet_data when it is done with it. */
|
|
Packit |
9795e1 |
typedef void (*usbredirparser_control_packet)(void *priv,
|
|
Packit |
9795e1 |
uint64_t id, struct usb_redir_control_packet_header *control_header,
|
|
Packit |
9795e1 |
uint8_t *data, int data_len);
|
|
Packit |
9795e1 |
typedef void (*usbredirparser_bulk_packet)(void *priv,
|
|
Packit |
9795e1 |
uint64_t id, struct usb_redir_bulk_packet_header *bulk_header,
|
|
Packit |
9795e1 |
uint8_t *data, int data_len);
|
|
Packit |
9795e1 |
typedef void (*usbredirparser_iso_packet)(void *priv,
|
|
Packit |
9795e1 |
uint64_t id, struct usb_redir_iso_packet_header *iso_header,
|
|
Packit |
9795e1 |
uint8_t *data, int data_len);
|
|
Packit |
9795e1 |
typedef void (*usbredirparser_interrupt_packet)(void *priv,
|
|
Packit |
9795e1 |
uint64_t id, struct usb_redir_interrupt_packet_header *interrupt_header,
|
|
Packit |
9795e1 |
uint8_t *data, int data_len);
|
|
Packit |
9795e1 |
typedef void (*usbredirparser_buffered_bulk_packet)(void *priv, uint64_t id,
|
|
Packit |
9795e1 |
struct usb_redir_buffered_bulk_packet_header *buffered_bulk_header,
|
|
Packit |
9795e1 |
uint8_t *data, int data_len);
|
|
Packit |
9795e1 |
|
|
Packit |
9795e1 |
|
|
Packit |
9795e1 |
/* Public part of the data allocated by usbredirparser_alloc, *never* allocate
|
|
Packit |
9795e1 |
a usbredirparser struct yourself, it may be extended in the future to add
|
|
Packit |
9795e1 |
callbacks for new packet types (which will then get added at the end),
|
|
Packit |
9795e1 |
*and* usbredirparser_alloc will also alloc some space behind it for
|
|
Packit |
9795e1 |
private data */
|
|
Packit |
9795e1 |
struct usbredirparser {
|
|
Packit |
9795e1 |
/* app private data passed into all callbacks as the priv argument */
|
|
Packit |
9795e1 |
void *priv;
|
|
Packit |
9795e1 |
/* non packet callbacks */
|
|
Packit |
9795e1 |
usbredirparser_log log_func;
|
|
Packit |
9795e1 |
usbredirparser_read read_func;
|
|
Packit |
9795e1 |
usbredirparser_write write_func;
|
|
Packit |
9795e1 |
/* usb-redir-protocol v0.3 control packet complete callbacks */
|
|
Packit |
9795e1 |
usbredirparser_device_connect device_connect_func;
|
|
Packit |
9795e1 |
usbredirparser_device_disconnect device_disconnect_func;
|
|
Packit |
9795e1 |
usbredirparser_reset reset_func;
|
|
Packit |
9795e1 |
usbredirparser_interface_info interface_info_func;
|
|
Packit |
9795e1 |
usbredirparser_ep_info ep_info_func;
|
|
Packit |
9795e1 |
usbredirparser_set_configuration set_configuration_func;
|
|
Packit |
9795e1 |
usbredirparser_get_configuration get_configuration_func;
|
|
Packit |
9795e1 |
usbredirparser_configuration_status configuration_status_func;
|
|
Packit |
9795e1 |
usbredirparser_set_alt_setting set_alt_setting_func;
|
|
Packit |
9795e1 |
usbredirparser_get_alt_setting get_alt_setting_func;
|
|
Packit |
9795e1 |
usbredirparser_alt_setting_status alt_setting_status_func;
|
|
Packit |
9795e1 |
usbredirparser_start_iso_stream start_iso_stream_func;
|
|
Packit |
9795e1 |
usbredirparser_stop_iso_stream stop_iso_stream_func;
|
|
Packit |
9795e1 |
usbredirparser_iso_stream_status iso_stream_status_func;
|
|
Packit |
9795e1 |
usbredirparser_start_interrupt_receiving start_interrupt_receiving_func;
|
|
Packit |
9795e1 |
usbredirparser_stop_interrupt_receiving stop_interrupt_receiving_func;
|
|
Packit |
9795e1 |
usbredirparser_interrupt_receiving_status interrupt_receiving_status_func;
|
|
Packit |
9795e1 |
usbredirparser_alloc_bulk_streams alloc_bulk_streams_func;
|
|
Packit |
9795e1 |
usbredirparser_free_bulk_streams free_bulk_streams_func;
|
|
Packit |
9795e1 |
usbredirparser_bulk_streams_status bulk_streams_status_func;
|
|
Packit |
9795e1 |
usbredirparser_cancel_data_packet cancel_data_packet_func;
|
|
Packit |
9795e1 |
/* usb-redir-protocol v0.3 data packet complete callbacks */
|
|
Packit |
9795e1 |
usbredirparser_control_packet control_packet_func;
|
|
Packit |
9795e1 |
usbredirparser_bulk_packet bulk_packet_func;
|
|
Packit |
9795e1 |
usbredirparser_iso_packet iso_packet_func;
|
|
Packit |
9795e1 |
usbredirparser_interrupt_packet interrupt_packet_func;
|
|
Packit |
9795e1 |
/* usbredir 0.3.2 new non packet callbacks (for multi-thread locking) */
|
|
Packit |
9795e1 |
usbredirparser_alloc_lock alloc_lock_func;
|
|
Packit |
9795e1 |
usbredirparser_lock lock_func;
|
|
Packit |
9795e1 |
usbredirparser_unlock unlock_func;
|
|
Packit |
9795e1 |
usbredirparser_free_lock free_lock_func;
|
|
Packit |
9795e1 |
/* usbredir 0.3.2 new control packet complete callbacks */
|
|
Packit |
9795e1 |
usbredirparser_hello hello_func;
|
|
Packit |
9795e1 |
/* usbredir 0.4 new control packet complete callbacks */
|
|
Packit |
9795e1 |
usbredirparser_filter_reject filter_reject_func;
|
|
Packit |
9795e1 |
usbredirparser_filter_filter filter_filter_func;
|
|
Packit |
9795e1 |
usbredirparser_device_disconnect_ack device_disconnect_ack_func;
|
|
Packit |
9795e1 |
/* usbredir 0.6 new control packet complete callbacks */
|
|
Packit |
9795e1 |
usbredirparser_start_bulk_receiving start_bulk_receiving_func;
|
|
Packit |
9795e1 |
usbredirparser_stop_bulk_receiving stop_bulk_receiving_func;
|
|
Packit |
9795e1 |
usbredirparser_bulk_receiving_status bulk_receiving_status_func;
|
|
Packit |
9795e1 |
/* usbredir 0.6 new data packet complete callbacks */
|
|
Packit |
9795e1 |
usbredirparser_buffered_bulk_packet buffered_bulk_packet_func;
|
|
Packit |
9795e1 |
};
|
|
Packit |
9795e1 |
|
|
Packit |
9795e1 |
/* Allocate a usbredirparser, after this the app should set the callback app
|
|
Packit |
9795e1 |
private data and all the callbacks it needs, before calling
|
|
Packit |
9795e1 |
usbredirparser_init */
|
|
Packit |
9795e1 |
struct usbredirparser *usbredirparser_create(void);
|
|
Packit |
9795e1 |
|
|
Packit |
9795e1 |
/* Set capability cap in the USB_REDIR_CAPS_SIZE sized caps array,
|
|
Packit |
9795e1 |
this is a helper function to set capabilities in the caps array
|
|
Packit |
9795e1 |
passed to usbredirparser_init(). */
|
|
Packit |
9795e1 |
void usbredirparser_caps_set_cap(uint32_t *caps, int cap);
|
|
Packit |
9795e1 |
|
|
Packit |
9795e1 |
/* Init the parser, this will queue an initial usb_redir_hello packet,
|
|
Packit |
9795e1 |
sending the version and caps to the peer, as well as configure the parsing
|
|
Packit |
9795e1 |
according to the passed in flags. */
|
|
Packit |
9795e1 |
enum {
|
|
Packit |
9795e1 |
usbredirparser_fl_usb_host = 0x01,
|
|
Packit |
9795e1 |
usbredirparser_fl_write_cb_owns_buffer = 0x02,
|
|
Packit |
9795e1 |
usbredirparser_fl_no_hello = 0x04,
|
|
Packit |
9795e1 |
};
|
|
Packit |
9795e1 |
|
|
Packit |
9795e1 |
void usbredirparser_init(struct usbredirparser *parser,
|
|
Packit |
9795e1 |
const char *version, uint32_t *caps, int caps_len, int flags);
|
|
Packit |
9795e1 |
|
|
Packit |
9795e1 |
void usbredirparser_destroy(struct usbredirparser *parser);
|
|
Packit |
9795e1 |
|
|
Packit |
9795e1 |
/* See if our side has a certain cap (checks the caps passed into _init) */
|
|
Packit |
9795e1 |
int usbredirparser_have_cap(struct usbredirparser *parser, int cap);
|
|
Packit |
9795e1 |
|
|
Packit |
9795e1 |
/* Check if we've received the caps from the peer */
|
|
Packit |
9795e1 |
int usbredirparser_have_peer_caps(struct usbredirparser *parser);
|
|
Packit |
9795e1 |
|
|
Packit |
9795e1 |
/* Check if our peer has a certain capability. Note this function
|
|
Packit |
9795e1 |
should not be used before the hello_func callback has been called. */
|
|
Packit |
9795e1 |
int usbredirparser_peer_has_cap(struct usbredirparser *parser, int cap);
|
|
Packit |
9795e1 |
|
|
Packit |
9795e1 |
/* Call this whenever there is data ready from the otherside to parse
|
|
Packit |
9795e1 |
On an usbredirparser_read_io_error this function will continue where it
|
|
Packit |
9795e1 |
left of the last time on the next call. On an
|
|
Packit |
9795e1 |
usbredirparser_read_parse_error it will skip to the next packet (*).
|
|
Packit |
9795e1 |
*) As determined by the faulty's package headers length field */
|
|
Packit |
9795e1 |
enum {
|
|
Packit |
9795e1 |
usbredirparser_read_io_error = -1,
|
|
Packit |
9795e1 |
usbredirparser_read_parse_error = -2,
|
|
Packit |
9795e1 |
};
|
|
Packit |
9795e1 |
int usbredirparser_do_read(struct usbredirparser *parser);
|
|
Packit |
9795e1 |
|
|
Packit |
9795e1 |
/* This returns the number of usbredir packets queued up for writing */
|
|
Packit |
9795e1 |
int usbredirparser_has_data_to_write(struct usbredirparser *parser);
|
|
Packit |
9795e1 |
|
|
Packit |
9795e1 |
/* Call this when usbredirparser_has_data_to_write returns > 0
|
|
Packit |
9795e1 |
returns 0 on success, -1 if a write error happened.
|
|
Packit |
9795e1 |
If a write error happened, this function will retry writing any queued data
|
|
Packit |
9795e1 |
on the next call, and will continue doing so until it has succeeded! */
|
|
Packit |
9795e1 |
enum {
|
|
Packit |
9795e1 |
usbredirparser_write_io_error = -1,
|
|
Packit |
9795e1 |
};
|
|
Packit |
9795e1 |
int usbredirparser_do_write(struct usbredirparser *parser);
|
|
Packit |
9795e1 |
|
|
Packit |
9795e1 |
/* See usbredirparser_write documentation */
|
|
Packit |
9795e1 |
void usbredirparser_free_write_buffer(struct usbredirparser *parser,
|
|
Packit |
9795e1 |
uint8_t *data);
|
|
Packit |
9795e1 |
|
|
Packit |
9795e1 |
/* See the data packet callbacks documentation */
|
|
Packit |
9795e1 |
void usbredirparser_free_packet_data(struct usbredirparser *parser,
|
|
Packit |
9795e1 |
uint8_t *data);
|
|
Packit |
9795e1 |
|
|
Packit |
9795e1 |
/* Functions to marshall and queue a packet for sending to its peer. Note:
|
|
Packit |
9795e1 |
1) it will not be actually send until usbredirparser_do_write is called
|
|
Packit |
9795e1 |
2) if their is not enough memory for buffers the packet will be dropped
|
|
Packit |
9795e1 |
(and an error message will be logged */
|
|
Packit |
9795e1 |
/* Control packets: */
|
|
Packit |
9795e1 |
|
|
Packit |
9795e1 |
/* Note this function should not be used before the hello_func callback has
|
|
Packit |
9795e1 |
been called (as it checks the usb_redir_cap_connect_device_version cap). */
|
|
Packit |
9795e1 |
void usbredirparser_send_device_connect(struct usbredirparser *parser,
|
|
Packit |
9795e1 |
struct usb_redir_device_connect_header *device_connect);
|
|
Packit |
9795e1 |
void usbredirparser_send_device_disconnect(struct usbredirparser *parser);
|
|
Packit |
9795e1 |
void usbredirparser_send_reset(struct usbredirparser *parser);
|
|
Packit |
9795e1 |
void usbredirparser_send_interface_info(struct usbredirparser *parser,
|
|
Packit |
9795e1 |
struct usb_redir_interface_info_header *interface_info);
|
|
Packit |
9795e1 |
void usbredirparser_send_ep_info(struct usbredirparser *parser,
|
|
Packit |
9795e1 |
struct usb_redir_ep_info_header *ep_info);
|
|
Packit |
9795e1 |
void usbredirparser_send_set_configuration(struct usbredirparser *parser,
|
|
Packit |
9795e1 |
uint64_t id,
|
|
Packit |
9795e1 |
struct usb_redir_set_configuration_header *set_configuration);
|
|
Packit |
9795e1 |
void usbredirparser_send_get_configuration(struct usbredirparser *parser,
|
|
Packit |
9795e1 |
uint64_t id);
|
|
Packit |
9795e1 |
void usbredirparser_send_configuration_status(struct usbredirparser *parser,
|
|
Packit |
9795e1 |
uint64_t id,
|
|
Packit |
9795e1 |
struct usb_redir_configuration_status_header *configuration_status);
|
|
Packit |
9795e1 |
void usbredirparser_send_set_alt_setting(struct usbredirparser *parser,
|
|
Packit |
9795e1 |
uint64_t id,
|
|
Packit |
9795e1 |
struct usb_redir_set_alt_setting_header *set_alt_setting);
|
|
Packit |
9795e1 |
void usbredirparser_send_get_alt_setting(struct usbredirparser *parser,
|
|
Packit |
9795e1 |
uint64_t id,
|
|
Packit |
9795e1 |
struct usb_redir_get_alt_setting_header *get_alt_setting);
|
|
Packit |
9795e1 |
void usbredirparser_send_alt_setting_status(struct usbredirparser *parser,
|
|
Packit |
9795e1 |
uint64_t id,
|
|
Packit |
9795e1 |
struct usb_redir_alt_setting_status_header *alt_setting_status);
|
|
Packit |
9795e1 |
void usbredirparser_send_start_iso_stream(struct usbredirparser *parser,
|
|
Packit |
9795e1 |
uint64_t id,
|
|
Packit |
9795e1 |
struct usb_redir_start_iso_stream_header *start_iso_stream);
|
|
Packit |
9795e1 |
void usbredirparser_send_stop_iso_stream(struct usbredirparser *parser,
|
|
Packit |
9795e1 |
uint64_t id,
|
|
Packit |
9795e1 |
struct usb_redir_stop_iso_stream_header *stop_iso_stream);
|
|
Packit |
9795e1 |
void usbredirparser_send_iso_stream_status(struct usbredirparser *parser,
|
|
Packit |
9795e1 |
uint64_t id,
|
|
Packit |
9795e1 |
struct usb_redir_iso_stream_status_header *iso_stream_status);
|
|
Packit |
9795e1 |
void usbredirparser_send_start_interrupt_receiving(struct usbredirparser *parser,
|
|
Packit |
9795e1 |
uint64_t id,
|
|
Packit |
9795e1 |
struct usb_redir_start_interrupt_receiving_header *start_interrupt_receiving);
|
|
Packit |
9795e1 |
void usbredirparser_send_stop_interrupt_receiving(struct usbredirparser *parser,
|
|
Packit |
9795e1 |
uint64_t id,
|
|
Packit |
9795e1 |
struct usb_redir_stop_interrupt_receiving_header *stop_interrupt_receiving);
|
|
Packit |
9795e1 |
void usbredirparser_send_interrupt_receiving_status(struct usbredirparser *parser,
|
|
Packit |
9795e1 |
uint64_t id,
|
|
Packit |
9795e1 |
struct usb_redir_interrupt_receiving_status_header *interrupt_receiving_status);
|
|
Packit |
9795e1 |
void usbredirparser_send_alloc_bulk_streams(struct usbredirparser *parser,
|
|
Packit |
9795e1 |
uint64_t id,
|
|
Packit |
9795e1 |
struct usb_redir_alloc_bulk_streams_header *alloc_bulk_streams);
|
|
Packit |
9795e1 |
void usbredirparser_send_free_bulk_streams(struct usbredirparser *parser,
|
|
Packit |
9795e1 |
uint64_t id,
|
|
Packit |
9795e1 |
struct usb_redir_free_bulk_streams_header *free_bulk_streams);
|
|
Packit |
9795e1 |
void usbredirparser_send_bulk_streams_status(struct usbredirparser *parser,
|
|
Packit |
9795e1 |
uint64_t id,
|
|
Packit |
9795e1 |
struct usb_redir_bulk_streams_status_header *bulk_streams_status);
|
|
Packit |
9795e1 |
void usbredirparser_send_cancel_data_packet(struct usbredirparser *parser,
|
|
Packit |
9795e1 |
uint64_t id);
|
|
Packit |
9795e1 |
void usbredirparser_send_filter_reject(struct usbredirparser *parser);
|
|
Packit |
9795e1 |
void usbredirparser_send_filter_filter(struct usbredirparser *parser,
|
|
Packit |
9795e1 |
const struct usbredirfilter_rule *rules, int rules_count);
|
|
Packit |
9795e1 |
void usbredirparser_send_start_bulk_receiving(struct usbredirparser *parser,
|
|
Packit |
9795e1 |
uint64_t id,
|
|
Packit |
9795e1 |
struct usb_redir_start_bulk_receiving_header *start_bulk_receiving);
|
|
Packit |
9795e1 |
void usbredirparser_send_stop_bulk_receiving(struct usbredirparser *parser,
|
|
Packit |
9795e1 |
uint64_t id,
|
|
Packit |
9795e1 |
struct usb_redir_stop_bulk_receiving_header *stop_bulk_receiving);
|
|
Packit |
9795e1 |
void usbredirparser_send_bulk_receiving_status(struct usbredirparser *parser,
|
|
Packit |
9795e1 |
uint64_t id,
|
|
Packit |
9795e1 |
struct usb_redir_bulk_receiving_status_header *bulk_receiving_status);
|
|
Packit |
9795e1 |
/* Data packets: */
|
|
Packit |
9795e1 |
void usbredirparser_send_control_packet(struct usbredirparser *parser,
|
|
Packit |
9795e1 |
uint64_t id,
|
|
Packit |
9795e1 |
struct usb_redir_control_packet_header *control_header,
|
|
Packit |
9795e1 |
uint8_t *data, int data_len);
|
|
Packit |
9795e1 |
void usbredirparser_send_bulk_packet(struct usbredirparser *parser,
|
|
Packit |
9795e1 |
uint64_t id,
|
|
Packit |
9795e1 |
struct usb_redir_bulk_packet_header *bulk_header,
|
|
Packit |
9795e1 |
uint8_t *data, int data_len);
|
|
Packit |
9795e1 |
void usbredirparser_send_iso_packet(struct usbredirparser *parser,
|
|
Packit |
9795e1 |
uint64_t id,
|
|
Packit |
9795e1 |
struct usb_redir_iso_packet_header *iso_header,
|
|
Packit |
9795e1 |
uint8_t *data, int data_len);
|
|
Packit |
9795e1 |
void usbredirparser_send_interrupt_packet(struct usbredirparser *parser,
|
|
Packit |
9795e1 |
uint64_t id,
|
|
Packit |
9795e1 |
struct usb_redir_interrupt_packet_header *interrupt_header,
|
|
Packit |
9795e1 |
uint8_t *data, int data_len);
|
|
Packit |
9795e1 |
void usbredirparser_send_buffered_bulk_packet(struct usbredirparser *parser,
|
|
Packit |
9795e1 |
uint64_t id,
|
|
Packit |
9795e1 |
struct usb_redir_buffered_bulk_packet_header *buffered_bulk_header,
|
|
Packit |
9795e1 |
uint8_t *data, int data_len);
|
|
Packit |
9795e1 |
|
|
Packit |
9795e1 |
|
|
Packit |
9795e1 |
/* Serialization */
|
|
Packit |
9795e1 |
|
|
Packit |
9795e1 |
/* This function serializes the current usbredirparser state. It will allocate
|
|
Packit |
9795e1 |
a large enough buffer for this itself and store this in state_dest, it will
|
|
Packit |
9795e1 |
store the size of this buffer in state_len.
|
|
Packit |
9795e1 |
|
|
Packit |
9795e1 |
Return value: 0 on success, -1 on error (out of memory).
|
|
Packit |
9795e1 |
|
|
Packit |
9795e1 |
The buffer should be free-ed by the caller using free(). */
|
|
Packit |
9795e1 |
int usbredirparser_serialize(struct usbredirparser *parser,
|
|
Packit |
9795e1 |
uint8_t **state_dest, int *state_len);
|
|
Packit |
9795e1 |
|
|
Packit |
9795e1 |
/* This function sets the current usbredirparser state from a serialized state.
|
|
Packit |
9795e1 |
This function assumes that the parser has just been initialized with the
|
|
Packit |
9795e1 |
usbredirparser_fl_no_hello flag.
|
|
Packit |
9795e1 |
|
|
Packit |
9795e1 |
Return value: 0 on success, -1 on error (out of memory, or
|
|
Packit |
9795e1 |
invalid state data). */
|
|
Packit |
9795e1 |
int usbredirparser_unserialize(struct usbredirparser *parser_pub,
|
|
Packit |
9795e1 |
uint8_t *state, int len);
|
|
Packit |
9795e1 |
|
|
Packit |
9795e1 |
#ifdef __cplusplus
|
|
Packit |
9795e1 |
}
|
|
Packit |
9795e1 |
#endif
|
|
Packit |
9795e1 |
|
|
Packit |
9795e1 |
#endif
|