VRDE.h revision 89c895806bf972d689cad5f196a2e108ae6b11ae
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync * VBox Remote Desktop Extension (VRDE) - Public APIs.
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync * Copyright (C) 2006-2011 Oracle Corporation
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync * available from http://www.virtualbox.org. This file is free software;
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync * you can redistribute it and/or modify it under the terms of the GNU
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync * General Public License (GPL) as published by the Free Software
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync * The contents of this file may alternatively be used under the terms
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync * of the Common Development and Distribution License Version 1.0
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync * VirtualBox OSE distribution, in which case the provisions of the
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync * CDDL are applicable instead of those of the GPL.
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync * You may elect to license modified versions of this file under the
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync * terms and conditions of either the GPL or the CDDL or both.
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync/** @defgroup grp_vrdp VRDE
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync * VirtualBox Remote Desktop Extension (VRDE) interface that lets to use
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync * a Remote Desktop server like RDP.
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync/* Forward declaration of the VRDE server instance handle.
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync * This is an opaque pointer for VirtualBox.
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync * The VRDE library uses it as a pointer to some internal data.
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync#endif /* !__cplusplus */
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync/* Callback based VRDE server interface declarations. */
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync/** The color mouse pointer information. */
4d32c71a938b979c6aeee321ae325d5793a5ccdbvboxsync /* The 1BPP mask and the 24BPP bitmap follow. */
4d32c71a938b979c6aeee321ae325d5793a5ccdbvboxsync/** Audio format information packed in a 32 bit value. */
4d32c71a938b979c6aeee321ae325d5793a5ccdbvboxsync/** Constructs 32 bit value for given frequency, number of channel and bits per sample. */
00cc5d93f7446d9394a0f6b7ad790b9fb9d6005cvboxsync#define VRDE_AUDIO_FMT_MAKE(freq, c, bps, s) ((((s) & 0x1) << 28) + (((bps) & 0xFF) << 20) + (((c) & 0xF) << 16) + ((freq) & 0xFFFF))
4d32c71a938b979c6aeee321ae325d5793a5ccdbvboxsync/** Decode frequency. */
4d32c71a938b979c6aeee321ae325d5793a5ccdbvboxsync#define VRDE_AUDIO_FMT_SAMPLE_FREQ(a) ((a) & 0xFFFF)
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync/** Decode number of channels. */
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync#define VRDE_AUDIO_FMT_CHANNELS(a) (((a) >> 16) & 0xF)
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync/** Decode number signess. */
5b281ba489ca18f0380d7efc7a5108b606cce449vboxsync#define VRDE_AUDIO_FMT_SIGNED(a) (((a) >> 28) & 0x1)
ee6e48c229ef52aee5e968d956ebd066073811abvboxsync/** Decode number of bits per sample. */
5eda82e218d35ae0691febd531e1bfc0324cc4a6vboxsync#define VRDE_AUDIO_FMT_BITS_PER_SAMPLE(a) (((a) >> 20) & 0xFF)
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync/** Decode number of bytes per sample. */
7f4b4ec1cadbf891d2756ce77dc4a4ec220a03bcvboxsync#define VRDE_AUDIO_FMT_BYTES_PER_SAMPLE(a) ((VRDE_AUDIO_FMT_BITS_PER_SAMPLE(a) + 7) / 8)
7f4b4ec1cadbf891d2756ce77dc4a4ec220a03bcvboxsync * Audio input.
7f4b4ec1cadbf891d2756ce77dc4a4ec220a03bcvboxsync/* Audio input notifications. */
7f4b4ec1cadbf891d2756ce77dc4a4ec220a03bcvboxsync VRDEAUDIOFORMAT fmt; /* Actual format of data, which will be sent in VRDE_AUDIOIN_DATA events. */
7f4b4ec1cadbf891d2756ce77dc4a4ec220a03bcvboxsync * Remote USB protocol.
7f4b4ec1cadbf891d2756ce77dc4a4ec220a03bcvboxsync/* The initial version 1. */
7f4b4ec1cadbf891d2756ce77dc4a4ec220a03bcvboxsync/* Version 2: look for VRDE_USB_VERSION_2 comments in the code. */
7f4b4ec1cadbf891d2756ce77dc4a4ec220a03bcvboxsync/* Version 3: look for VRDE_USB_VERSION_3 comments in the code. */
7f4b4ec1cadbf891d2756ce77dc4a4ec220a03bcvboxsync/* The default VRDE server version of Remote USB Protocol. */
7f4b4ec1cadbf891d2756ce77dc4a4ec220a03bcvboxsync/** USB backend operations. */
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync/** USB service operations. */
ee6e48c229ef52aee5e968d956ebd066073811abvboxsync/** An operation completion status is a byte. */
7f4b4ec1cadbf891d2756ce77dc4a4ec220a03bcvboxsync/** USB device identifier is an 32 bit value. */
7f4b4ec1cadbf891d2756ce77dc4a4ec220a03bcvboxsync/** Status codes. */
7f4b4ec1cadbf891d2756ce77dc4a4ec220a03bcvboxsync#define VRDE_USB_STATUS_ACCESS_DENIED ((VRDEUSBSTATUS)1)
7f4b4ec1cadbf891d2756ce77dc4a4ec220a03bcvboxsync#define VRDE_USB_STATUS_DEVICE_REMOVED ((VRDEUSBSTATUS)2)
7f4b4ec1cadbf891d2756ce77dc4a4ec220a03bcvboxsync * Data structures to use with VRDEUSBRequest.
7f4b4ec1cadbf891d2756ce77dc4a4ec220a03bcvboxsync * The *RET* structures always represent the layout of VRDE data.
d60d5da33bb93fc7a8717802f21b13aa37914799vboxsync * The *PARM* structures normally the same as VRDE layout.
7f4b4ec1cadbf891d2756ce77dc4a4ec220a03bcvboxsync * However the VRDE_USB_REQ_QUEUE_URB_PARM has a pointer to
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync * URB data in place where actual data will be in VRDE layout.
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync * Since replies (*RET*) are asynchronous, the 'success'
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync * replies are not required for operations which return
d60d5da33bb93fc7a8717802f21b13aa37914799vboxsync * only the status code (VRDEUSBREQRETHDR only):
d60d5da33bb93fc7a8717802f21b13aa37914799vboxsync * VRDE_USB_REQ_OPEN
445661c86e95894713da707c6c9787b7507dfce6vboxsync * VRDE_USB_REQ_RESET
d60d5da33bb93fc7a8717802f21b13aa37914799vboxsync * VRDE_USB_REQ_SET_CONFIG
d60d5da33bb93fc7a8717802f21b13aa37914799vboxsync * VRDE_USB_REQ_CLAIM_INTERFACE
445661c86e95894713da707c6c9787b7507dfce6vboxsync * VRDE_USB_REQ_RELEASE_INTERFACE
e5bfc5c34142a7550be3564a8e01a037b1db5b31vboxsync * VRDE_USB_REQ_INTERFACE_SETTING
e5bfc5c34142a7550be3564a8e01a037b1db5b31vboxsync * VRDE_USB_REQ_CLEAR_HALTED_EP
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync/* VRDE layout has no alignments. */
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync/* Common header for all VRDE USB packets. After the reply hdr follows *PARM* or *RET* data. */
d60d5da33bb93fc7a8717802f21b13aa37914799vboxsync /* Total length of the reply NOT including the 'length' field. */
d60d5da33bb93fc7a8717802f21b13aa37914799vboxsync /* The operation code for which the reply was sent by the client. */
d60d5da33bb93fc7a8717802f21b13aa37914799vboxsync/* Common header for all return structures. */
e5bfc5c34142a7550be3564a8e01a037b1db5b31vboxsync /* Device status. */
d60d5da33bb93fc7a8717802f21b13aa37914799vboxsync /* Device id. */
ab02aeaf2a0312fe9267a292e3911728e4531332vboxsync/* VRDE_USB_REQ_OPEN
7f4b4ec1cadbf891d2756ce77dc4a4ec220a03bcvboxsync/* VRDE_USB_REQ_CLOSE
771c393ea3dea8143cabc5c8ff6b5cd38a1db91evboxsync/* The close request has no returned data. */
234af146205f61c4aa0be736abb06601a89facb8vboxsync/* VRDE_USB_REQ_RESET
5eda82e218d35ae0691febd531e1bfc0324cc4a6vboxsync/* VRDE_USB_REQ_SET_CONFIG
7f4b4ec1cadbf891d2756ce77dc4a4ec220a03bcvboxsync/* VRDE_USB_REQ_CLAIM_INTERFACE
7f4b4ec1cadbf891d2756ce77dc4a4ec220a03bcvboxsync/* VRDE_USB_REQ_RELEASE_INTERFACE
81fcf0038d2d6c76ab2c8b02103dc18c24efe0a1vboxsync/* VRDE_USB_REQ_INTERFACE_SETTING
7f4b4ec1cadbf891d2756ce77dc4a4ec220a03bcvboxsync/* VRDE_USB_REQ_QUEUE_URB
7f4b4ec1cadbf891d2756ce77dc4a4ec220a03bcvboxsync uint32_t handle; /* Distinguishes that particular URB. Later used in CancelURB and returned by ReapURB */
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync/* The queue URB has no explicit return. The reap URB reply will be
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync * eventually the indirect result.
771c393ea3dea8143cabc5c8ff6b5cd38a1db91evboxsync/* VRDE_USB_REQ_REAP_URB
234af146205f61c4aa0be736abb06601a89facb8vboxsync * Notificationg from server to client that server expects an URB
234af146205f61c4aa0be736abb06601a89facb8vboxsync * from any device.
234af146205f61c4aa0be736abb06601a89facb8vboxsync * Only sent if negotiated URB return method is polling.
234af146205f61c4aa0be736abb06601a89facb8vboxsync * Normally, the client will send URBs back as soon as they are ready.
234af146205f61c4aa0be736abb06601a89facb8vboxsync/* VRDE_USB_VERSION_2: New error codes. */
d60d5da33bb93fc7a8717802f21b13aa37914799vboxsync#define VRDE_USB_XFER_ERR (12) /* VBox protocol error. */
d60d5da33bb93fc7a8717802f21b13aa37914799vboxsync/* VRDE_USB_VERSION_3: Fragmented URBs. */
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync#define VRDE_USB_REAP_VALID_FLAGS (VRDE_USB_REAP_FLAG_LAST)
d60d5da33bb93fc7a8717802f21b13aa37914799vboxsync/* VRDE_USB_VERSION_3: Fragmented URBs. */
d60d5da33bb93fc7a8717802f21b13aa37914799vboxsync#define VRDE_USB_REAP_VALID_FLAGS_3 (VRDE_USB_REAP_FLAG_LAST | VRDE_USB_REAP_FLAG_FRAGMENT)
d60d5da33bb93fc7a8717802f21b13aa37914799vboxsync VRDEUSBDEVID id; /* From which device the URB arrives. */
d60d5da33bb93fc7a8717802f21b13aa37914799vboxsync uint32_t handle; /* Handle of returned URB. Not 0. */
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync uint32_t len; /* Length of data actually transferred. */
d60d5da33bb93fc7a8717802f21b13aa37914799vboxsync /* 'len' bytes of data follow if direction of this URB was VRDE_USB_DIRECTION_IN. */
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync /* The REAP URB has no header, only completed URBs are returned. */
5eda82e218d35ae0691febd531e1bfc0324cc4a6vboxsync /* Another body may follow, depending on flags. */
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync/* VRDE_USB_REQ_CLEAR_HALTED_EP
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync/* VRDE_USB_REQ_CANCEL_URB
7f4b4ec1cadbf891d2756ce77dc4a4ec220a03bcvboxsync/* The cancel URB request has no return. */
7f4b4ec1cadbf891d2756ce77dc4a4ec220a03bcvboxsync/* VRDE_USB_REQ_DEVICE_LIST
7f4b4ec1cadbf891d2756ce77dc4a4ec220a03bcvboxsync * Server polls USB devices on client by sending this request
7f4b4ec1cadbf891d2756ce77dc4a4ec220a03bcvboxsync * periodically. Client sends back a list of all devices
7f4b4ec1cadbf891d2756ce77dc4a4ec220a03bcvboxsync * connected to it. Each device is assigned with an identifier,
7f4b4ec1cadbf891d2756ce77dc4a4ec220a03bcvboxsync * that is used to distinguish the particular device.
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync/* Data is a list of the following variable length structures. */
4d32c71a938b979c6aeee321ae325d5793a5ccdbvboxsync /* Offset of the next structure. 0 if last. */
00cc5d93f7446d9394a0f6b7ad790b9fb9d6005cvboxsync /* Identifier of the device assigned by client. */
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync /** USB version number. */
4d32c71a938b979c6aeee321ae325d5793a5ccdbvboxsync /** Device class. */
4d32c71a938b979c6aeee321ae325d5793a5ccdbvboxsync /** Device subclass. */
4d32c71a938b979c6aeee321ae325d5793a5ccdbvboxsync /** Device protocol */
4d32c71a938b979c6aeee321ae325d5793a5ccdbvboxsync /** Vendor ID. */
4d32c71a938b979c6aeee321ae325d5793a5ccdbvboxsync /** Product ID. */
4d32c71a938b979c6aeee321ae325d5793a5ccdbvboxsync /** Revision, integer part. */
4d32c71a938b979c6aeee321ae325d5793a5ccdbvboxsync /** Offset of the UTF8 manufacturer string relative to the structure start. */
7f4b4ec1cadbf891d2756ce77dc4a4ec220a03bcvboxsync /** Offset of the UTF8 product string relative to the structure start. */
7f4b4ec1cadbf891d2756ce77dc4a4ec220a03bcvboxsync /** Offset of the UTF8 serial number string relative to the structure start. */
4d32c71a938b979c6aeee321ae325d5793a5ccdbvboxsync /** Physical USB port the device is connected to. */
4d32c71a938b979c6aeee321ae325d5793a5ccdbvboxsync#define VRDE_USBDEVICESPEED_UNKNOWN 0 /* Unknown. */
4d32c71a938b979c6aeee321ae325d5793a5ccdbvboxsync#define VRDE_USBDEVICESPEED_LOW 1 /* Low speed (1.5 Mbit/s). */
00cc5d93f7446d9394a0f6b7ad790b9fb9d6005cvboxsync#define VRDE_USBDEVICESPEED_FULL 2 /* Full speed (12 Mbit/s). */
4d32c71a938b979c6aeee321ae325d5793a5ccdbvboxsync#define VRDE_USBDEVICESPEED_HIGH 3 /* High speed (480 Mbit/s). */
4d32c71a938b979c6aeee321ae325d5793a5ccdbvboxsync#define VRDE_USBDEVICESPEED_VARIABLE 4 /* Variable speed - USB 2.5 / wireless. */
4d32c71a938b979c6aeee321ae325d5793a5ccdbvboxsync#define VRDE_USBDEVICESPEED_SUPERSPEED 5 /* Super Speed - USB 3.0 */
7f4b4ec1cadbf891d2756ce77dc4a4ec220a03bcvboxsync /* Extended info.
7f4b4ec1cadbf891d2756ce77dc4a4ec220a03bcvboxsync /** The USB device speed: VRDE_USBDEVICESPEED_*. */
4d32c71a938b979c6aeee321ae325d5793a5ccdbvboxsync /* Other devices may follow.
4d32c71a938b979c6aeee321ae325d5793a5ccdbvboxsync * The list ends with (uint16_t)0,
4d32c71a938b979c6aeee321ae325d5793a5ccdbvboxsync * which means that an empty list consists of 2 zero bytes.
4d32c71a938b979c6aeee321ae325d5793a5ccdbvboxsync /* Other devices may follow.
4d32c71a938b979c6aeee321ae325d5793a5ccdbvboxsync * The list ends with (uint16_t)0,
4d32c71a938b979c6aeee321ae325d5793a5ccdbvboxsync * which means that an empty list consists of 2 zero bytes.
4d32c71a938b979c6aeee321ae325d5793a5ccdbvboxsync/* The server requests the version of the port the device is attached to.
4d32c71a938b979c6aeee321ae325d5793a5ccdbvboxsync * The client must use VRDEUSBDEVICEDESCEXT structure.
00cc5d93f7446d9394a0f6b7ad790b9fb9d6005cvboxsync /* Remote USB Protocol version. */
00cc5d93f7446d9394a0f6b7ad790b9fb9d6005cvboxsync /* VRDE_USB_VERSION_3: the 32 bit field is splitted to 16 bit version and 16 bit flags.
00cc5d93f7446d9394a0f6b7ad790b9fb9d6005cvboxsync * Version 1 and 2 servers therefore have 'flags' == 0.
00cc5d93f7446d9394a0f6b7ad790b9fb9d6005cvboxsync * Version 3+ servers can send some capabilities in this field, this way it is possible to add
00cc5d93f7446d9394a0f6b7ad790b9fb9d6005cvboxsync * a new capability without increasing the protocol version.
00cc5d93f7446d9394a0f6b7ad790b9fb9d6005cvboxsync/* VRDEUSBREQNEGOTIATERET flags. */
00cc5d93f7446d9394a0f6b7ad790b9fb9d6005cvboxsync/* VRDE_USB_VERSION_2: New flag. */
00cc5d93f7446d9394a0f6b7ad790b9fb9d6005cvboxsync#define VRDE_USB_CAPS2_FLAG_VERSION (0x2) /* The client is negotiating the protocol version. */
00cc5d93f7446d9394a0f6b7ad790b9fb9d6005cvboxsync/* VRDE_USB_VERSION_3: New flag. */
00cc5d93f7446d9394a0f6b7ad790b9fb9d6005cvboxsync#define VRDE_USB_CAPS3_FLAG_EXT (0x4) /* The client is negotiating the extended flags.
00cc5d93f7446d9394a0f6b7ad790b9fb9d6005cvboxsync * If this flag is set, then the VRDE_USB_CAPS2_FLAG_VERSION
00cc5d93f7446d9394a0f6b7ad790b9fb9d6005cvboxsync * must also be set.
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync#define VRDE_USB_CAPS_VALID_FLAGS (VRDE_USB_CAPS_FLAG_POLL)
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync/* VRDE_USB_VERSION_2: A set of valid flags. */
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync#define VRDE_USB_CAPS2_VALID_FLAGS (VRDE_USB_CAPS_FLAG_POLL | VRDE_USB_CAPS2_FLAG_VERSION)
5eda82e218d35ae0691febd531e1bfc0324cc4a6vboxsync/* VRDE_USB_VERSION_3: A set of valid flags. */
c5d2523548cc57504b829f53f1362b848a84542cvboxsync#define VRDE_USB_CAPS3_VALID_FLAGS (VRDE_USB_CAPS_FLAG_POLL | VRDE_USB_CAPS2_FLAG_VERSION | VRDE_USB_CAPS3_FLAG_EXT)
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync uint32_t u32Version; /* This field presents only if the VRDE_USB_CAPS2_FLAG_VERSION flag is set. */
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync/* The server requests the version of the port the device is attached to.
ee6e48c229ef52aee5e968d956ebd066073811abvboxsync * The client must use VRDEUSBDEVICEDESCEXT structure.
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync#define VRDE_USB_CLIENT_CAPS_PORT_VERSION 0x00000001
e4527e0a08e2d635a679ae2947d42195f30a2ce2vboxsync uint32_t u32Version; /* This field presents only if the VRDE_USB_CAPS2_FLAG_VERSION flag is set. */
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync uint32_t u32Flags; /* This field presents only if both VRDE_USB_CAPS2_FLAG_VERSION and
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync * VRDE_USB_CAPS2_FLAG_EXT flag are set.
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync * See VRDE_USB_CLIENT_CAPS_*
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync/** Indexes of information values. */
e5bfc5c34142a7550be3564a8e01a037b1db5b31vboxsync/** Whether a client is connected at the moment.
7f4b4ec1cadbf891d2756ce77dc4a4ec220a03bcvboxsync/** How many times a client connected up to current moment.
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync/** When last connection was established.
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync * int64_t time in milliseconds since 1970-01-01 00:00:00 UTC
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync/** When last connection was terminated or current time if connection still active.
d60d5da33bb93fc7a8717802f21b13aa37914799vboxsync * int64_t time in milliseconds since 1970-01-01 00:00:00 UTC
5eda82e218d35ae0691febd531e1bfc0324cc4a6vboxsync/** How many bytes were sent in last (current) connection.
7f4b4ec1cadbf891d2756ce77dc4a4ec220a03bcvboxsync/** How many bytes were sent in all connections.
d60d5da33bb93fc7a8717802f21b13aa37914799vboxsync/** How many bytes were received in last (current) connection.
7f4b4ec1cadbf891d2756ce77dc4a4ec220a03bcvboxsync/** How many bytes were received in all connections.
7f18b4c79440e724c5e08f007674ea7883ce6c01vboxsync/** Login user name supplied by the client.
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync * UTF8 nul terminated string.
d60d5da33bb93fc7a8717802f21b13aa37914799vboxsync/** Login domain supplied by the client.
e5bfc5c34142a7550be3564a8e01a037b1db5b31vboxsync * UTF8 nul terminated string.
d60d5da33bb93fc7a8717802f21b13aa37914799vboxsync/** The client name supplied by the client.
d60d5da33bb93fc7a8717802f21b13aa37914799vboxsync * UTF8 nul terminated string.
d60d5da33bb93fc7a8717802f21b13aa37914799vboxsync/** IP address of the client.
d60d5da33bb93fc7a8717802f21b13aa37914799vboxsync * UTF8 nul terminated string.
e5bfc5c34142a7550be3564a8e01a037b1db5b31vboxsync/** The client software version number.
ad1e35f9fb71d147c2126449a25adf0f8e155aaavboxsync * uint32_t.
ad1e35f9fb71d147c2126449a25adf0f8e155aaavboxsync/** Public key exchange method used when connection was established.
ad1e35f9fb71d147c2126449a25adf0f8e155aaavboxsync * Values: 0 - RDP4 public key exchange scheme.
e5bfc5c34142a7550be3564a8e01a037b1db5b31vboxsync * 1 - X509 sertificates were sent to client.
e5bfc5c34142a7550be3564a8e01a037b1db5b31vboxsync * uint32_t.
d60d5da33bb93fc7a8717802f21b13aa37914799vboxsync/** TCP port where the server listens.
d60d5da33bb93fc7a8717802f21b13aa37914799vboxsync * Values: 0 - VRDE server failed to start.
d60d5da33bb93fc7a8717802f21b13aa37914799vboxsync/** Hints what has been intercepted by the application. */
e5bfc5c34142a7550be3564a8e01a037b1db5b31vboxsync/** The version of the VRDE server interface. */
d60d5da33bb93fc7a8717802f21b13aa37914799vboxsync/** The header that does not change when the interface changes. */
ab02aeaf2a0312fe9267a292e3911728e4531332vboxsync /** The version of the interface. */
d60d5da33bb93fc7a8717802f21b13aa37914799vboxsync /** The size of the structure. */
d60d5da33bb93fc7a8717802f21b13aa37914799vboxsync/** The VRDE server entry points. Interface version 1. */
d60d5da33bb93fc7a8717802f21b13aa37914799vboxsync /** The header. */
d60d5da33bb93fc7a8717802f21b13aa37914799vboxsync /** Destroy the server instance.
4d32c71a938b979c6aeee321ae325d5793a5ccdbvboxsync * @param hServer The server instance handle.
d60d5da33bb93fc7a8717802f21b13aa37914799vboxsync * @return IPRT status code.
d60d5da33bb93fc7a8717802f21b13aa37914799vboxsync DECLR3CALLBACKMEMBER(void, VRDEDestroy,(HVRDESERVER hServer));
d60d5da33bb93fc7a8717802f21b13aa37914799vboxsync /** The server should start to accept clients connections.
d60d5da33bb93fc7a8717802f21b13aa37914799vboxsync * @param hServer The server instance handle.
d60d5da33bb93fc7a8717802f21b13aa37914799vboxsync * @param fEnable Whether to enable or disable client connections.
5eda82e218d35ae0691febd531e1bfc0324cc4a6vboxsync * When is false, all existing clients are disconnected.
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync * @return IPRT status code.
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync DECLR3CALLBACKMEMBER(int, VRDEEnableConnections,(HVRDESERVER hServer,
5eda82e218d35ae0691febd531e1bfc0324cc4a6vboxsync /** The server should disconnect the client.
c5d2523548cc57504b829f53f1362b848a84542cvboxsync * @param hServer The server instance handle.
d60d5da33bb93fc7a8717802f21b13aa37914799vboxsync * @param u32ClientId The client identifier.
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync * @param fReconnect Whether to send a "REDIRECT to the same server" packet to the
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync * client before disconnecting.
5eda82e218d35ae0691febd531e1bfc0324cc4a6vboxsync * @return IPRT status code.
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync DECLR3CALLBACKMEMBER(void, VRDEDisconnect,(HVRDESERVER hServer,
ad1e35f9fb71d147c2126449a25adf0f8e155aaavboxsync * Inform the server that the display was resized.
ad1e35f9fb71d147c2126449a25adf0f8e155aaavboxsync * The server will query information about display
ad1e35f9fb71d147c2126449a25adf0f8e155aaavboxsync * from the application via callbacks.
ad1e35f9fb71d147c2126449a25adf0f8e155aaavboxsync * @param hServer Handle of VRDE server instance.
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync DECLR3CALLBACKMEMBER(void, VRDEResize,(HVRDESERVER hServer));
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync * Send a update.
c889bbab784ba8552102ce776b6c67b982017861vboxsync * Note: the server must access the framebuffer bitmap only when VRDEUpdate is called.
ab02aeaf2a0312fe9267a292e3911728e4531332vboxsync * If the have to access the bitmap later or from another thread, then
5eda82e218d35ae0691febd531e1bfc0324cc4a6vboxsync * it must used an intermediate buffer and copy the framebuffer data to the
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync * intermediate buffer in VRDEUpdate.
ad1e35f9fb71d147c2126449a25adf0f8e155aaavboxsync * @param hServer Handle of VRDE server instance.
ad1e35f9fb71d147c2126449a25adf0f8e155aaavboxsync * @param uScreenId The screen index.
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync * @param pvUpdate Pointer to VRDEOrders.h::VRDEORDERHDR structure with extra data.
c5d2523548cc57504b829f53f1362b848a84542cvboxsync * @param cbUpdate Size of the update data.
ad1e35f9fb71d147c2126449a25adf0f8e155aaavboxsync DECLR3CALLBACKMEMBER(void, VRDEUpdate,(HVRDESERVER hServer,
ab02aeaf2a0312fe9267a292e3911728e4531332vboxsync * Set the mouse pointer shape.
c889bbab784ba8552102ce776b6c67b982017861vboxsync * @param hServer Handle of VRDE server instance.
ab02aeaf2a0312fe9267a292e3911728e4531332vboxsync * @param pPointer The pointer shape information.
ab02aeaf2a0312fe9267a292e3911728e4531332vboxsync DECLR3CALLBACKMEMBER(void, VRDEColorPointer,(HVRDESERVER hServer,
ab02aeaf2a0312fe9267a292e3911728e4531332vboxsync * Hide the mouse pointer.
ab02aeaf2a0312fe9267a292e3911728e4531332vboxsync * @param hServer Handle of VRDE server instance.
ab02aeaf2a0312fe9267a292e3911728e4531332vboxsync DECLR3CALLBACKMEMBER(void, VRDEHidePointer,(HVRDESERVER hServer));
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync * Queues the samples to be sent to clients.
81fcf0038d2d6c76ab2c8b02103dc18c24efe0a1vboxsync * @param hServer Handle of VRDE server instance.
7f4b4ec1cadbf891d2756ce77dc4a4ec220a03bcvboxsync * @param pvSamples Address of samples to be sent.
4d32c71a938b979c6aeee321ae325d5793a5ccdbvboxsync * @param cSamples Number of samples.
4d32c71a938b979c6aeee321ae325d5793a5ccdbvboxsync * @param format Encoded audio format for these samples.
4d32c71a938b979c6aeee321ae325d5793a5ccdbvboxsync * @note Initialized to NULL when the application audio callbacks are NULL.
4d32c71a938b979c6aeee321ae325d5793a5ccdbvboxsync DECLR3CALLBACKMEMBER(void, VRDEAudioSamples,(HVRDESERVER hServer,
00cc5d93f7446d9394a0f6b7ad790b9fb9d6005cvboxsync * Sets the sound volume on clients.
81fcf0038d2d6c76ab2c8b02103dc18c24efe0a1vboxsync * @param hServer Handle of VRDE server instance.
ab02aeaf2a0312fe9267a292e3911728e4531332vboxsync * @param left 0..0xFFFF volume level for left channel.
4d32c71a938b979c6aeee321ae325d5793a5ccdbvboxsync * @param right 0..0xFFFF volume level for right channel.
7f4b4ec1cadbf891d2756ce77dc4a4ec220a03bcvboxsync * @note Initialized to NULL when the application audio callbacks are NULL.
00cc5d93f7446d9394a0f6b7ad790b9fb9d6005cvboxsync DECLR3CALLBACKMEMBER(void, VRDEAudioVolume,(HVRDESERVER hServer,
00cc5d93f7446d9394a0f6b7ad790b9fb9d6005cvboxsync * Sends a USB request.
00cc5d93f7446d9394a0f6b7ad790b9fb9d6005cvboxsync * @param hServer Handle of VRDE server instance.
7f4b4ec1cadbf891d2756ce77dc4a4ec220a03bcvboxsync * @param u32ClientId An identifier that allows the server to find the corresponding client.
00cc5d93f7446d9394a0f6b7ad790b9fb9d6005cvboxsync * The identifier is always passed by the server as a parameter
4d32c71a938b979c6aeee321ae325d5793a5ccdbvboxsync * of the FNVRDEUSBCALLBACK. Note that the value is the same as
00cc5d93f7446d9394a0f6b7ad790b9fb9d6005cvboxsync * in the VRDESERVERCALLBACK functions.
00cc5d93f7446d9394a0f6b7ad790b9fb9d6005cvboxsync * @param pvParm Function specific parameters buffer.
00cc5d93f7446d9394a0f6b7ad790b9fb9d6005cvboxsync * @param cbParm Size of the buffer.
00cc5d93f7446d9394a0f6b7ad790b9fb9d6005cvboxsync * @note Initialized to NULL when the application USB callbacks are NULL.
00cc5d93f7446d9394a0f6b7ad790b9fb9d6005cvboxsync DECLR3CALLBACKMEMBER(void, VRDEUSBRequest,(HVRDESERVER hServer,
00cc5d93f7446d9394a0f6b7ad790b9fb9d6005cvboxsync * Called by the application when (VRDE_CLIPBOARD_FUNCTION_*):
00cc5d93f7446d9394a0f6b7ad790b9fb9d6005cvboxsync * - (0) guest announces available clipboard formats;
ab02aeaf2a0312fe9267a292e3911728e4531332vboxsync * - (1) guest requests clipboard data;
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync * - (2) guest responds to the client's request for clipboard data.
00cc5d93f7446d9394a0f6b7ad790b9fb9d6005cvboxsync * @param hServer The VRDE server handle.
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync * @param u32Function The cause of the call.
ab02aeaf2a0312fe9267a292e3911728e4531332vboxsync * @param u32Format Bitmask of announced formats or the format of data.
ab02aeaf2a0312fe9267a292e3911728e4531332vboxsync * @param pvData Points to: (1) buffer to be filled with clients data;
ab02aeaf2a0312fe9267a292e3911728e4531332vboxsync * (2) data from the host.
ab02aeaf2a0312fe9267a292e3911728e4531332vboxsync * @param cbData Size of 'pvData' buffer in bytes.
c889bbab784ba8552102ce776b6c67b982017861vboxsync * @param pcbActualRead Size of the copied data in bytes.
ab02aeaf2a0312fe9267a292e3911728e4531332vboxsync * @note Initialized to NULL when the application clipboard callbacks are NULL.
ab02aeaf2a0312fe9267a292e3911728e4531332vboxsync DECLR3CALLBACKMEMBER(void, VRDEClipboard,(HVRDESERVER hServer,
ab02aeaf2a0312fe9267a292e3911728e4531332vboxsync * Query various information from the VRDE server.
ab02aeaf2a0312fe9267a292e3911728e4531332vboxsync * @param hServer The VRDE server handle.
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync * @param index VRDE_QI_* identifier of information to be returned.
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync * @param pvBuffer Address of memory buffer to which the information must be written.
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync * @param cbBuffer Size of the memory buffer in bytes.
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync * @param pcbOut Size in bytes of returned information value.
31cda52093d58f5c604589fa74949c5fddcbde70vboxsync * @remark The caller must check the *pcbOut. 0 there means no information was returned.
7f4b4ec1cadbf891d2756ce77dc4a4ec220a03bcvboxsync * A value greater than cbBuffer means that information is too big to fit in the
7f4b4ec1cadbf891d2756ce77dc4a4ec220a03bcvboxsync * buffer, in that case no information was placed to the buffer.
7f4b4ec1cadbf891d2756ce77dc4a4ec220a03bcvboxsync DECLR3CALLBACKMEMBER(void, VRDEQueryInfo,(HVRDESERVER hServer,
7f4b4ec1cadbf891d2756ce77dc4a4ec220a03bcvboxsync/** The VRDE server entry points. Interface version 2.
7f4b4ec1cadbf891d2756ce77dc4a4ec220a03bcvboxsync * A new entry point VRDERedirect has been added relative to version 1.
7f4b4ec1cadbf891d2756ce77dc4a4ec220a03bcvboxsync /** The header. */
7f4b4ec1cadbf891d2756ce77dc4a4ec220a03bcvboxsync /** Destroy the server instance.
7f4b4ec1cadbf891d2756ce77dc4a4ec220a03bcvboxsync * @param hServer The server instance handle.
31cda52093d58f5c604589fa74949c5fddcbde70vboxsync * @return IPRT status code.
31cda52093d58f5c604589fa74949c5fddcbde70vboxsync DECLR3CALLBACKMEMBER(void, VRDEDestroy,(HVRDESERVER hServer));
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync /** The server should start to accept clients connections.
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync * @param hServer The server instance handle.
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync * @param fEnable Whether to enable or disable client connections.
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync * When is false, all existing clients are disconnected.
6f058039e7b13efc3278b9bc84cf0fd135614b67vboxsync * @return IPRT status code.
d60d5da33bb93fc7a8717802f21b13aa37914799vboxsync DECLR3CALLBACKMEMBER(int, VRDEEnableConnections,(HVRDESERVER hServer,
d60d5da33bb93fc7a8717802f21b13aa37914799vboxsync /** The server should disconnect the client.
6f058039e7b13efc3278b9bc84cf0fd135614b67vboxsync * @param hServer The server instance handle.
6f058039e7b13efc3278b9bc84cf0fd135614b67vboxsync * @param u32ClientId The client identifier.
6f058039e7b13efc3278b9bc84cf0fd135614b67vboxsync * @param fReconnect Whether to send a "REDIRECT to the same server" packet to the
6f058039e7b13efc3278b9bc84cf0fd135614b67vboxsync * client before disconnecting.
6f058039e7b13efc3278b9bc84cf0fd135614b67vboxsync * @return IPRT status code.
6f058039e7b13efc3278b9bc84cf0fd135614b67vboxsync DECLR3CALLBACKMEMBER(void, VRDEDisconnect,(HVRDESERVER hServer,
82c6fd518728c98e8bae58f3c5e55c5efa160878vboxsync * Inform the server that the display was resized.
82c6fd518728c98e8bae58f3c5e55c5efa160878vboxsync * The server will query information about display
82c6fd518728c98e8bae58f3c5e55c5efa160878vboxsync * from the application via callbacks.
82c6fd518728c98e8bae58f3c5e55c5efa160878vboxsync * @param hServer Handle of VRDE server instance.
82c6fd518728c98e8bae58f3c5e55c5efa160878vboxsync DECLR3CALLBACKMEMBER(void, VRDEResize,(HVRDESERVER hServer));
82c6fd518728c98e8bae58f3c5e55c5efa160878vboxsync * Send a update.
82c6fd518728c98e8bae58f3c5e55c5efa160878vboxsync * Note: the server must access the framebuffer bitmap only when VRDEUpdate is called.
e5bfc5c34142a7550be3564a8e01a037b1db5b31vboxsync * If the have to access the bitmap later or from another thread, then
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync * it must used an intermediate buffer and copy the framebuffer data to the
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync * intermediate buffer in VRDEUpdate.
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync * @param hServer Handle of VRDE server instance.
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync * @param uScreenId The screen index.
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync * @param pvUpdate Pointer to VRDEOrders.h::VRDEORDERHDR structure with extra data.
7f4b4ec1cadbf891d2756ce77dc4a4ec220a03bcvboxsync * @param cbUpdate Size of the update data.
00cc5d93f7446d9394a0f6b7ad790b9fb9d6005cvboxsync DECLR3CALLBACKMEMBER(void, VRDEUpdate,(HVRDESERVER hServer,
ad836b4d6fb2ccaf969666246c2c389a8d10ca41vboxsync * Set the mouse pointer shape.
ad836b4d6fb2ccaf969666246c2c389a8d10ca41vboxsync * @param hServer Handle of VRDE server instance.
d60d5da33bb93fc7a8717802f21b13aa37914799vboxsync * @param pPointer The pointer shape information.
ad836b4d6fb2ccaf969666246c2c389a8d10ca41vboxsync DECLR3CALLBACKMEMBER(void, VRDEColorPointer,(HVRDESERVER hServer,
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync * Hide the mouse pointer.
const void *pvSamples,
void *pvParm,
void *pvData,
void *pvBuffer,
const char *pszServer,
const char *pszUser,
const char *pszDomain,
const char *pszPassword,
const char *pszCookie));
typedef struct _VRDEENTRYPOINTS_3
bool fEnable));
bool fReconnect));
unsigned uScreenId,
void *pvUpdate,
const void *pvSamples,
void *pvParm,
void *pvData,
void *pvBuffer,
const char *pszServer,
const char *pszUser,
const char *pszDomain,
const char *pszPassword,
const char *pszCookie));
void *pvCtx,
#define VRDE_QP_NETWORK_ADDRESS (2) /* UTF8 string. Host network interface IP address to bind to. */
#define VRDE_QP_NETWORK_PORT_RANGE (4) /* UTF8 string. List of ports. The server must bind to one of
#ifdef VBOX_WITH_VRDP_VIDEO_CHANNEL
#define VRDE_QP_FEATURE (8) /* VRDEFEATURE structure. Generic interface to query named VRDE properties. */
#define VRDE_SP_NETWORK_BIND_PORT (VRDE_SP_BASE + 1) /* 32 bit. The port number actually used by the server.
typedef struct _VRDEFEATURE
} VRDEFEATURE;
typedef struct VRDECLIENTNAME
typedef struct _VRDEFRAMEBUFFERINFO
int xOrigin;
int yOrigin;
unsigned cWidth;
unsigned cHeight;
unsigned cBitsPerPixel;
unsigned cbLine;
#define VRDE_INPUT_SCANCODE 0
typedef struct _VRDEINPUTSCANCODE
unsigned uScancode;
typedef struct _VRDEINPUTPOINT
unsigned uButtons;
typedef struct _VRDEINPUTSYNCH
unsigned uLockStatus;
#pragma pack()
typedef struct _VRDECALLBACKS_1
void *pvBuffer,
const char *pszUser,
const char *pszPassword,
const char *pszDomain));
void **ppvIntercept));
* @param ppvIntercept The value returned by VRDECallbackIntercept for the VRDE_CLIENT_INTERCEPT_USB.
void *pvIntercept,
const void *pvRet,
* @param ppvIntercept The value returned by VRDECallbackIntercept for the VRDE_CLIENT_INTERCEPT_CLIPBOARD.
void *pvIntercept,
const void *pvData,
unsigned uScreenId,
unsigned uScreenId));
unsigned uScreenId));
int type,
const void *pvInput,
unsigned cbInput));
unsigned cWidth,
unsigned cHeight,
unsigned cBitsPerPixel,
unsigned uScreenId));
typedef struct _VRDECALLBACKS_3
void *pvBuffer,
const char *pszUser,
const char *pszPassword,
const char *pszDomain));
void **ppvIntercept));
void *pvIntercept,
const void *pvRet,
void *pvIntercept,
const void *pvData,
unsigned uScreenId,
unsigned uScreenId));
unsigned uScreenId));
int type,
const void *pvInput,
unsigned cbInput));
unsigned cWidth,
unsigned cHeight,
unsigned cBitsPerPixel,
unsigned uScreenId));
void *pvCtx,
const void *pvData,
typedef struct _VRDEENTRYPOINTS_4
DECLR3CALLBACKMEMBER(void, VRDEDisconnect,(HVRDESERVER hServer, uint32_t u32ClientId, bool fReconnect));
DECLR3CALLBACKMEMBER(void, VRDEColorPointer,(HVRDESERVER hServer, const VRDECOLORPOINTER *pPointer));
DECLR3CALLBACKMEMBER(void, VRDEAudioSamples,(HVRDESERVER hServer, const void *pvSamples, uint32_t cSamples,
DECLR3CALLBACKMEMBER(void, VRDEAudioVolume,(HVRDESERVER hServer, uint16_t u16Left, uint16_t u16Right));
DECLR3CALLBACKMEMBER(void, VRDEClipboard,(HVRDESERVER hServer, uint32_t u32Function, uint32_t u32Format,
DECLR3CALLBACKMEMBER(void, VRDEQueryInfo,(HVRDESERVER hServer, uint32_t index, void *pvBuffer, uint32_t cbBuffer,
DECLR3CALLBACKMEMBER(void, VRDERedirect,(HVRDESERVER hServer, uint32_t u32ClientId, const char *pszServer,
const char *pszId,
void *pvContext));
void *pvCallback,
void *pvCallback,