[Spice-devel] [PATCH spice-common] Add a "port" channel
Hans de Goede
hdegoede at redhat.com
Sun Dec 2 03:08:17 PST 2012
Hi,
Cool patchset, something like this is exactly what Alon and I envisioned
when we changed the usbredir channel code into a generic spicevmc channel.
Although our idea was to say that channel ids > 128 were reserved for
user-defined use, rather then your fqdn approach with the init message,
but I think your fqdn approach makes more sense!
So ACK!
Regards,
Hans
On 11/30/2012 01:41 PM, Marc-André Lureau wrote:
> A Spice port channel carry arbitrary data between the Spice client and
> the Spice server. It may be used to provide additional services on top
> of a Spice connection. For example, a channel can be associated with
> the qemu monitor for the client to interact with it, just like any
> qemu chardev. Or it may be used with various protocols, such as the
> Spice Controller.
>
> A port kind is identified simply by its fqdn, such as org.qemu.monitor,
> org.spice.spicy.test or org.ovirt.controller...
>
> The channel is based on Spicevmc which simply tunnels data between
> client and server. A few messages have been added:
>
> SPICE_MSG_PORT_INIT: Describes the port state and fqdn name, should be
> sent only once when the client connects.
>
> SPICE_MSG_PORT_EVENT: Server port event. SPICE_PORT_EVENT_OPENED and
> SPICE_PORT_EVENT_CLOSED are typical values when the chardev is opened
> or closed.
>
> SPICE_MSGC_PORT_EVENT: Client port event.
> ---
> common/client_marshallers.h | 1 +
> common/messages.h | 14 ++++++++++++++
> spice.proto | 17 +++++++++++++++++
> 3 files changed, 32 insertions(+)
>
> diff --git a/common/client_marshallers.h b/common/client_marshallers.h
> index 1da7ff9..9a2385d 100644
> --- a/common/client_marshallers.h
> +++ b/common/client_marshallers.h
> @@ -70,6 +70,7 @@ typedef struct {
> void (*msgc_smartcard_data)(SpiceMarshaller *m, SpiceMsgcSmartcard *msg, SpiceMarshaller **reader_name_out);
> void (*msgc_smartcard_reader_add)(SpiceMarshaller *m, VSCMsgReaderAdd *msg);
> #endif
> + void (*msgc_port_event)(SpiceMarshaller *m, SpiceMsgcPortEvent *msg);
> } SpiceMessageMarshallers;
>
> SpiceMessageMarshallers *spice_message_marshallers_get(void);
> diff --git a/common/messages.h b/common/messages.h
> index 95549c8..b145cfc 100644
> --- a/common/messages.h
> +++ b/common/messages.h
> @@ -594,6 +594,20 @@ typedef struct SpiceMsgDisplayMonitorsConfig {
> SpiceHead heads[0];
> } SpiceMsgDisplayMonitorsConfig;
>
> +typedef struct SpiceMsgPortInit {
> + uint32_t name_size;
> + uint8_t *name;
> + uint8_t opened;
> +} SpiceMsgPortInit;
> +
> +typedef struct SpiceMsgPortEvent {
> + uint8_t event;
> +} SpiceMsgPortEvent;
> +
> +typedef struct SpiceMsgcPortEvent {
> + uint8_t event;
> +} SpiceMsgcPortEvent;
> +
> SPICE_END_DECLS
>
> #endif /* _H_SPICE_PROTOCOL */
> diff --git a/spice.proto b/spice.proto
> index 315ab91..655352a 100644
> --- a/spice.proto
> +++ b/spice.proto
> @@ -1309,6 +1309,22 @@ client:
> channel UsbredirChannel : SpicevmcChannel {
> };
>
> +channel PortChannel : SpicevmcChannel {
> + client:
> + message {
> + uint8 event;
> + } event = 201;
> + server:
> + message {
> + uint32 name_size;
> + uint8 *name[name_size] @zero_terminated @marshall @nonnull;
> + uint8 opened;
> + } init = 201;
> + message {
> + uint8 event;
> + } event;
> +};
> +
> protocol Spice {
> MainChannel main = 1;
> DisplayChannel display;
> @@ -1319,4 +1335,5 @@ protocol Spice {
> TunnelChannel tunnel;
> SmartcardChannel smartcard;
> UsbredirChannel usbredir;
> + PortChannel port;
> };
>
More information about the Spice-devel
mailing list