Re: [Spice-devel] [PATCH spice-protocol v2 1/4] Add protocol to send streams to server
> > On Thu, 2017-08-10 at 20:51 +0100, Frediano Ziglio wrote: > > This protocol allows a guest to send a video stream to the server. > > > > Signed-off-by: Frediano Ziglio > > --- > > spice/Makefile.am | 1 + > > spice/stream-device.h | 128 > > ++ > > 2 files changed, 129 insertions(+) > > create mode 100644 spice/stream-device.h > > > > diff --git a/spice/Makefile.am b/spice/Makefile.am > > index a54ae89..4f9a607 100644 > > --- a/spice/Makefile.am > > +++ b/spice/Makefile.am > > @@ -19,6 +19,7 @@ spice_protocol_include_HEADERS = \ > > types.h \ > > vd_agent.h \ > > vdi_dev.h \ > > + stream-device.h \ > > $(NULL) > > > > -include $(top_srcdir)/git.mk > > diff --git a/spice/stream-device.h b/spice/stream-device.h > > new file mode 100644 > > index 000..2441ac1 > > --- /dev/null > > +++ b/spice/stream-device.h > > @@ -0,0 +1,128 @@ > > +/* > > + Copyright (C) 2017 Red Hat, Inc. > > + > > + Redistribution and use in source and binary forms, with or > > without > > + modification, are permitted provided that the following > > conditions are > > + met: > > + > > + * Redistributions of source code must retain the above > > copyright > > + notice, this list of conditions and the following > > disclaimer. > > + * Redistributions in binary form must reproduce the above > > copyright > > + notice, this list of conditions and the following > > disclaimer in > > + the documentation and/or other materials provided with the > > + distribution. > > + * Neither the name of the copyright holder nor the names of > > its > > + contributors may be used to endorse or promote products > > derived > > + from this software without specific prior written > > permission. > > + > > + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND > > CONTRIBUTORS "AS > > + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT > > LIMITED > > + TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A > > + PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE > > COPYRIGHT > > + HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, > > INCIDENTAL, > > + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT > > + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF > > USE, > > + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON > > ANY > > + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR > > TORT > > + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE > > USE > > + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH > > DAMAGE. > > +*/ > > + > > +/* > > + * This header contains definition for the device that > > + * allows to send streamed data to the server. > > + * > > + * The device is currently implemented as a VirtIO port inside the > > + * guest. The guest should open that device to use this protocol to > > + * communicate with the host. > > + * The name of the port is "com.redhat.stream.0". > > + */ > > + > > +#ifndef SPICE_STREAM_DEVICE_H_ > > +#define SPICE_STREAM_DEVICE_H_ > > + > > +#include > > + > > +/* > > + * Structures are all "naturally aligned" > > + * containing integers up to 64 bit. > > + * All numbers are in little endian format. > > + * > > + * The protocol can be defined by these states: > > + * - Initial. Device just opened. Guest should wait > > missing "for". Guests should wait for a message... > > > + * a message from the host; > > + * - Idle. No streaming allowed; > > + * - Ready. Server sent list of possible codecs; > > + * - Streaming. Stream active, enabled by the guest. > > + */ > > + > > +/* version of the protocol */ > > +#define STREAM_DEVICE_PROTOCOL 1 > > + > > +typedef struct StreamDevHeader { > > +/* should be STREAM_DEVICE_PROTOCOL */ > > +uint8_t protocol_version; > > +/* reserved, should be set to 0 */ > > +uint8_t padding; > > +/* as defined in StreamDevType enumeration */ > > +uint16_t type; > > +/* size of the following message. > > + * A message of type STREAM_TYPE_XXX_YYY is represented with a > > + * corresponding StreamMsgXxxYyy structure. */ > > +uint32_t size; > > +} StreamDevHeader; > > + > > +typedef enum StreamDevType { > > +/* invalid, do not use */ > > +STREAM_TYPE_INVALID = 0, > > +/* allows to send version information */ > > +STREAM_TYPE_CAPABILITIES, > > +/* send screen resolution */ > > +STREAM_TYPE_FORMAT, > > +/* stream data */ > > +STREAM_TYPE_DATA, > > +} StreamDevType; > > The name StreamDevType makes it sound like it's a type of stream > device. I think a better name would be something like > StreamDevMessageType or StreamMessageType since these are message > types. > > > + > > +/* Generic extension
Re: [Spice-devel] [PATCH spice-protocol v2 1/4] Add protocol to send streams to server
On Thu, 2017-08-10 at 20:51 +0100, Frediano Ziglio wrote: > This protocol allows a guest to send a video stream to the server. > > Signed-off-by: Frediano Ziglio > --- > spice/Makefile.am | 1 + > spice/stream-device.h | 128 > ++ > 2 files changed, 129 insertions(+) > create mode 100644 spice/stream-device.h > > diff --git a/spice/Makefile.am b/spice/Makefile.am > index a54ae89..4f9a607 100644 > --- a/spice/Makefile.am > +++ b/spice/Makefile.am > @@ -19,6 +19,7 @@ spice_protocol_include_HEADERS =\ > types.h \ > vd_agent.h \ > vdi_dev.h \ > + stream-device.h \ > $(NULL) > > -include $(top_srcdir)/git.mk > diff --git a/spice/stream-device.h b/spice/stream-device.h > new file mode 100644 > index 000..2441ac1 > --- /dev/null > +++ b/spice/stream-device.h > @@ -0,0 +1,128 @@ > +/* > + Copyright (C) 2017 Red Hat, Inc. > + > + Redistribution and use in source and binary forms, with or > without > + modification, are permitted provided that the following > conditions are > + met: > + > + * Redistributions of source code must retain the above > copyright > + notice, this list of conditions and the following > disclaimer. > + * Redistributions in binary form must reproduce the above > copyright > + notice, this list of conditions and the following > disclaimer in > + the documentation and/or other materials provided with the > + distribution. > + * Neither the name of the copyright holder nor the names of > its > + contributors may be used to endorse or promote products > derived > + from this software without specific prior written > permission. > + > + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND > CONTRIBUTORS "AS > + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT > LIMITED > + TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A > + PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE > COPYRIGHT > + HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, > INCIDENTAL, > + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT > + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF > USE, > + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON > ANY > + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR > TORT > + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE > USE > + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH > DAMAGE. > +*/ > + > +/* > + * This header contains definition for the device that > + * allows to send streamed data to the server. > + * > + * The device is currently implemented as a VirtIO port inside the > + * guest. The guest should open that device to use this protocol to > + * communicate with the host. > + * The name of the port is "com.redhat.stream.0". > + */ > + > +#ifndef SPICE_STREAM_DEVICE_H_ > +#define SPICE_STREAM_DEVICE_H_ > + > +#include > + > +/* > + * Structures are all "naturally aligned" > + * containing integers up to 64 bit. > + * All numbers are in little endian format. > + * > + * The protocol can be defined by these states: > + * - Initial. Device just opened. Guest should wait missing "for". Guests should wait for a message... > + * a message from the host; > + * - Idle. No streaming allowed; > + * - Ready. Server sent list of possible codecs; > + * - Streaming. Stream active, enabled by the guest. > + */ > + > +/* version of the protocol */ > +#define STREAM_DEVICE_PROTOCOL 1 > + > +typedef struct StreamDevHeader { > +/* should be STREAM_DEVICE_PROTOCOL */ > +uint8_t protocol_version; > +/* reserved, should be set to 0 */ > +uint8_t padding; > +/* as defined in StreamDevType enumeration */ > +uint16_t type; > +/* size of the following message. > + * A message of type STREAM_TYPE_XXX_YYY is represented with a > + * corresponding StreamMsgXxxYyy structure. */ > +uint32_t size; > +} StreamDevHeader; > + > +typedef enum StreamDevType { > +/* invalid, do not use */ > +STREAM_TYPE_INVALID = 0, > +/* allows to send version information */ > +STREAM_TYPE_CAPABILITIES, > +/* send screen resolution */ > +STREAM_TYPE_FORMAT, > +/* stream data */ > +STREAM_TYPE_DATA, > +} StreamDevType; The name StreamDevType makes it sound like it's a type of stream device. I think a better name would be something like StreamDevMessageType or StreamMessageType since these are message types. > + > +/* Generic extension capabilities. > + * This is a set of bit to specify which capability host and guest > supports. bit -> bits capability -> capabilities supports -> support > + * This message is sent by the host to the guest or by the guest to > the host. > + * Should be sent as first mess
[Spice-devel] [PATCH spice-protocol v2 1/4] Add protocol to send streams to server
This protocol allows a guest to send a video stream to the server. Signed-off-by: Frediano Ziglio --- spice/Makefile.am | 1 + spice/stream-device.h | 128 ++ 2 files changed, 129 insertions(+) create mode 100644 spice/stream-device.h diff --git a/spice/Makefile.am b/spice/Makefile.am index a54ae89..4f9a607 100644 --- a/spice/Makefile.am +++ b/spice/Makefile.am @@ -19,6 +19,7 @@ spice_protocol_include_HEADERS = \ types.h \ vd_agent.h \ vdi_dev.h \ + stream-device.h \ $(NULL) -include $(top_srcdir)/git.mk diff --git a/spice/stream-device.h b/spice/stream-device.h new file mode 100644 index 000..2441ac1 --- /dev/null +++ b/spice/stream-device.h @@ -0,0 +1,128 @@ +/* + Copyright (C) 2017 Red Hat, Inc. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/* + * This header contains definition for the device that + * allows to send streamed data to the server. + * + * The device is currently implemented as a VirtIO port inside the + * guest. The guest should open that device to use this protocol to + * communicate with the host. + * The name of the port is "com.redhat.stream.0". + */ + +#ifndef SPICE_STREAM_DEVICE_H_ +#define SPICE_STREAM_DEVICE_H_ + +#include + +/* + * Structures are all "naturally aligned" + * containing integers up to 64 bit. + * All numbers are in little endian format. + * + * The protocol can be defined by these states: + * - Initial. Device just opened. Guest should wait + * a message from the host; + * - Idle. No streaming allowed; + * - Ready. Server sent list of possible codecs; + * - Streaming. Stream active, enabled by the guest. + */ + +/* version of the protocol */ +#define STREAM_DEVICE_PROTOCOL 1 + +typedef struct StreamDevHeader { +/* should be STREAM_DEVICE_PROTOCOL */ +uint8_t protocol_version; +/* reserved, should be set to 0 */ +uint8_t padding; +/* as defined in StreamDevType enumeration */ +uint16_t type; +/* size of the following message. + * A message of type STREAM_TYPE_XXX_YYY is represented with a + * corresponding StreamMsgXxxYyy structure. */ +uint32_t size; +} StreamDevHeader; + +typedef enum StreamDevType { +/* invalid, do not use */ +STREAM_TYPE_INVALID = 0, +/* allows to send version information */ +STREAM_TYPE_CAPABILITIES, +/* send screen resolution */ +STREAM_TYPE_FORMAT, +/* stream data */ +STREAM_TYPE_DATA, +} StreamDevType; + +/* Generic extension capabilities. + * This is a set of bit to specify which capability host and guest supports. + * This message is sent by the host to the guest or by the guest to the host. + * Should be sent as first message. + * If not sent means that guest/host doesn't support any extension. + * Guest should sent this as a reply from same type of message + * from the host. + * This message should be limited to 1024 bytes. This allows + * plenty of negotiations. + * + * States allowed: Initial(host), Idle(guest) + * state will change to Idle. + */ +typedef struct StreamMsgCapabilities { +uint8_t capabilities[0]; +} StreamMsgCapabilities; + +/* Define the format of the stream, start a new stream. + * This message is sent by the guest to the host to + * tell the host the new stream format. + * + * States allowed: Ready + * state w