Compressed message type is CompressedData which contains compression type (1 byte) followed by the uncompressed data size (4 bytes-exists only if data was compressed) followed by the compressed data Update the required protocol to 0.12.12: Signed-off-by: Frediano Ziglio <fziglio@xxxxxxxxxx> Signed-off-by: Snir Sheriber <ssheribe@xxxxxxxxxx> --- common/client_marshallers.h | 1 + common/messages.h | 7 +++++++ configure.ac | 2 +- spice.proto | 24 ++++++++++++++++++++++++ 4 files changed, 33 insertions(+), 1 deletion(-) diff --git a/common/client_marshallers.h b/common/client_marshallers.h index 728987e..2074323 100644 --- a/common/client_marshallers.h +++ b/common/client_marshallers.h @@ -33,6 +33,7 @@ SPICE_BEGIN_DECLS typedef struct { void (*msg_SpiceMsgEmpty)(SpiceMarshaller *m, SpiceMsgEmpty *msg); void (*msg_SpiceMsgData)(SpiceMarshaller *m, SpiceMsgData *msg); + void (*msg_SpiceMsgCompressedData)(SpiceMarshaller *m, SpiceMsgCompressedData *msg); void (*msgc_ack_sync)(SpiceMarshaller *m, SpiceMsgcAckSync *msg); void (*msgc_pong)(SpiceMarshaller *m, SpiceMsgPing *msg); void (*msgc_disconnecting)(SpiceMarshaller *m, SpiceMsgDisconnect *msg); diff --git a/common/messages.h b/common/messages.h index f537950..516a345 100644 --- a/common/messages.h +++ b/common/messages.h @@ -55,6 +55,13 @@ typedef struct SpiceMsgData { uint8_t data[0]; } SpiceMsgData; +typedef struct SpiceMsgCompressedData { + uint8_t type; + uint32_t uncompressed_size; + uint32_t compressed_size; + uint8_t *compressed_data; +} SpiceMsgCompressedData; + typedef struct SpiceMsgEmpty { uint8_t padding; } SpiceMsgEmpty; diff --git a/configure.ac b/configure.ac index f8ff024..c3ad5a4 100644 --- a/configure.ac +++ b/configure.ac @@ -28,7 +28,7 @@ AM_PROG_CC_C_O SPICE_CHECK_SYSDEPS # Checks for libraries -PKG_CHECK_MODULES([PROTOCOL], [spice-protocol >= 0.12.10]) +PKG_CHECK_MODULES([PROTOCOL], [spice-protocol >= 0.12.12]) SPICE_CHECK_PYTHON_MODULES() diff --git a/spice.proto b/spice.proto index d21510d..0bfc515 100644 --- a/spice.proto +++ b/spice.proto @@ -120,6 +120,28 @@ message Data { uint8 data[] @end @ctype(uint8_t); } @nocopy; +enum8 data_compression_type { + NONE, + LZ4, +}; + +struct EmptyStructure { +}; + +message CompressedData { + data_compression_type type; + switch (type) { + /* we cannot use !NONE (works only with flags) */ + case NONE: + /* due to the way cases are defined after NONE we must have something */ + /* due to a bug we cannot use @virtual to write 0 to compressed_size */ + EmptyStructure empty; + default: + uint32 uncompressed_size; + } u @anon; + uint8 compressed_data[] @as_ptr(compressed_size); +} @ctype(SpiceMsgCompressedData); + struct ChannelWait { uint8 channel_type; uint8 channel_id; @@ -1373,8 +1395,10 @@ channel SmartcardChannel : BaseChannel { channel SpicevmcChannel : BaseChannel { server: Data data = 101; + CompressedData compressed_data = 102; client: Data data = 101; + CompressedData compressed_data = 102; }; channel UsbredirChannel : SpicevmcChannel { -- 2.5.5 _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/spice-devel