[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