On Tue, 2018-10-02 at 11:21 -0400, Frediano Ziglio wrote: > > On Fri, 2018-09-28 at 03:41 -0400, Frediano Ziglio wrote: > > > ping > > > > Sorry, I was thinking how to handle this and eventually forgot about > > it. Two notes: > > > > 1. Without really looking into the differences in the protocol, I would > > expect some part of the spice_codegen.py that was specific to the old > > protocol should be removed as well? > > > > Yes, sent some follow ups. Yeah, noticed those after replying here. > > 2. I think this removal of backwards compatibility should be documented > > somewhere, along with the versions of SPICE server/client with which it > > breaks compatibility. I also think we should use major versions to make > > compatibility breakage obvious. > > > > There's the NEWS file which is usually updated before release but it > won't be a bad idea to update it along the way so to not forget and > to avoid the people doing the release to parse all the commit log. > About the major we don't bump much the major... actually is still a 0.XX > version. Yeah, so I suppose I'm proposing to start using the major number for (at least) this purpose... Cheers, Lukas > > Cheers, > > Lukas > > > > > > > > > > SPICE version 2 was introduced more than 8 years ago. > > > > RHEL 6 already removed support for version 1 in the server. > > > > > > > > Signed-off-by: Frediano Ziglio <fziglio@xxxxxxxxxx> > > > > --- > > > > Makefile.am | 1 - > > > > common/Makefile.am | 8 - > > > > common/client_marshallers.h | 1 - > > > > common/meson.build | 2 - > > > > meson.build | 1 - > > > > spice.proto | 15 +- > > > > spice1.proto | 943 ------------------------------------ > > > > 7 files changed, 1 insertion(+), 970 deletions(-) > > > > delete mode 100644 spice1.proto > > > > > > > > Changes since v1: > > > > - removed some constant from spice.proto only related to SPICE v1 > > > > > > > > diff --git a/Makefile.am b/Makefile.am > > > > index e5630a9..5402499 100644 > > > > --- a/Makefile.am > > > > +++ b/Makefile.am > > > > @@ -8,7 +8,6 @@ EXTRA_DIST = \ > > > > meson_options.txt \ > > > > spice_codegen.py \ > > > > spice.proto \ > > > > - spice1.proto \ > > > > $(NULL) > > > > > > > > DISTCLEANFILES = *.pyc > > > > diff --git a/common/Makefile.am b/common/Makefile.am > > > > index 748c1f2..d8e30d1 100644 > > > > --- a/common/Makefile.am > > > > +++ b/common/Makefile.am > > > > @@ -3,10 +3,8 @@ NULL = > > > > # Avoid need for python(pyparsing) by end users > > > > CLIENT_MARSHALLERS = \ > > > > generated_client_demarshallers.c \ > > > > - generated_client_demarshallers1.c \ > > > > generated_client_marshallers.c \ > > > > generated_client_marshallers.h \ > > > > - generated_client_marshallers1.c \ > > > > $(NULL) > > > > > > > > SERVER_MARSHALLERS = \ > > > > @@ -102,18 +100,12 @@ MARSHALLERS_DEPS = \ > > > > generated_client_demarshallers.c: $(top_srcdir)/spice.proto > > > > $(MARSHALLERS_DEPS) > > > > $(AM_V_GEN)$(PYTHON) $(top_srcdir)/spice_codegen.py > > > > --generate-demarshallers --client --include common/messages.h $< $@ > > > > >/dev/null > > > > > > > > -generated_client_demarshallers1.c: $(top_srcdir)/spice1.proto > > > > $(MARSHALLERS_DEPS) > > > > - $(AM_V_GEN)$(PYTHON) $(top_srcdir)/spice_codegen.py > > > > --generate-demarshallers --client --include common/messages.h --prefix 1 > > > > --ptrsize 8 $< $@ >/dev/null > > > > - > > > > generated_client_marshallers.h: $(top_srcdir)/spice.proto > > > > $(MARSHALLERS_DEPS) > > > > $(AM_V_GEN)$(PYTHON) $(top_srcdir)/spice_codegen.py > > > > --generate-marshallers > > > > -P --client --include common/messages.h -H $< $@ >/dev/null > > > > > > > > generated_client_marshallers.c: $(top_srcdir)/spice.proto > > > > $(MARSHALLERS_DEPS) > > > > $(AM_V_GEN)$(PYTHON) $(top_srcdir)/spice_codegen.py > > > > --generate-marshallers > > > > -P --include client_marshallers.h --client $< $@ >/dev/null > > > > > > > > -generated_client_marshallers1.c: $(top_srcdir)/spice1.proto > > > > $(MARSHALLERS_DEPS) > > > > - $(AM_V_GEN)$(PYTHON) $(top_srcdir)/spice_codegen.py > > > > --generate-marshallers > > > > -P --include common/messages.h --include client_marshallers.h --client > > > > --prefix 1 --ptrsize 8 $< $@ >/dev/null > > > > - > > > > generated_server_demarshallers.c: $(top_srcdir)/spice.proto > > > > $(MARSHALLERS_DEPS) > > > > $(AM_V_GEN)$(PYTHON) $(top_srcdir)/spice_codegen.py > > > > --generate-demarshallers --server --include common/messages.h $< $@ > > > > >/dev/null > > > > > > > > diff --git a/common/client_marshallers.h b/common/client_marshallers.h > > > > index 322b1d8..919e889 100644 > > > > --- a/common/client_marshallers.h > > > > +++ b/common/client_marshallers.h > > > > @@ -32,7 +32,6 @@ > > > > SPICE_BEGIN_DECLS > > > > > > > > SpiceMessageMarshallers *spice_message_marshallers_get(void); > > > > -SpiceMessageMarshallers *spice_message_marshallers_get1(void); > > > > > > > > SPICE_END_DECLS > > > > > > > > diff --git a/common/meson.build b/common/meson.build > > > > index 9044aa9..36ba43b 100644 > > > > --- a/common/meson.build > > > > +++ b/common/meson.build > > > > @@ -52,9 +52,7 @@ spice_common_dep = declare_dependency(link_with : > > > > spice_common_lib, > > > > if spice_common_generate_client_code > > > > targets = [ > > > > ['client_demarshallers', spice_proto, > > > > 'generated_client_demarshallers.c', ['--generate-demarshallers', > > > > '--client', '--include', 'common/messages.h', '@INPUT@', > > > > '@OUTPUT@']], > > > > - ['client_demarshallers1', spice1_proto, > > > > 'generated_client_demarshallers1.c', ['--generate-demarshallers', > > > > '--client', '--include', 'common/messages.h', '--prefix', '1', > > > > '--ptrsize', > > > > '8', '@INPUT@', '@OUTPUT@']], > > > > ['client_marshalers', spice_proto, 'generated_client_marshallers.c', > > > > ['--generate-marshallers', '-P', '--client', '--include', > > > > 'client_marshallers.h', '@INPUT@', '@OUTPUT@']], > > > > - ['client_marshallers1', spice1_proto, > > > > 'generated_client_marshallers1.c', > > > > ['--generate-marshallers', '-P', '--client', '--include', > > > > 'common/messages.h', '--include', 'client_marshallers.h', '--prefix', > > > > '1', > > > > '--ptrsize', '8', '@INPUT@', '@OUTPUT@']], > > > > ['client_marshallers_h', spice_proto, > > > > 'generated_client_marshallers.h', > > > > ['--generate-marshallers', '-P', '--client', '--include', > > > > 'common/messages.h', '-H', '@INPUT@', '@OUTPUT@']], > > > > ] > > > > > > > > diff --git a/meson.build b/meson.build > > > > index 6fa67dc..f5251c0 100644 > > > > --- a/meson.build > > > > +++ b/meson.build > > > > @@ -25,7 +25,6 @@ spice_common_deps = [] > > > > spice_common_include = include_directories('.') > > > > > > > > spice_proto = files('spice.proto') > > > > -spice1_proto = files('spice1.proto') > > > > spice_codegen = files('spice_codegen.py') > > > > spice_codegen_files = [spice_codegen] > > > > > > > > diff --git a/spice.proto b/spice.proto > > > > index 07f11ec..02ab4df 100644 > > > > --- a/spice.proto > > > > +++ b/spice.proto > > > > @@ -105,19 +105,6 @@ flags16 mouse_mode { > > > > CLIENT, > > > > }; > > > > > > > > -enum16 pubkey_type { > > > > - INVALID, > > > > - RSA, > > > > - RSA2, > > > > - DSA, > > > > - DSA1, > > > > - DSA2, > > > > - DSA3, > > > > - DSA4, > > > > - DH, > > > > - EC, > > > > -}; > > > > - > > > > message Empty { > > > > }; > > > > > > > > @@ -535,7 +522,7 @@ struct DisplayBase { > > > > } @ctype(SpiceMsgDisplayBase); > > > > > > > > struct ResourceID { > > > > - uint8 type; > > > > + uint8 type; /* resource_type */ > > > > uint64 id; > > > > }; > > > > > > > > diff --git a/spice1.proto b/spice1.proto > > > > deleted file mode 100644 > > > > index 48b0150..0000000 > > > > --- a/spice1.proto > > > > +++ /dev/null > > > > @@ -1,943 +0,0 @@ > > > > -/* built in types: > > > > - int8, uint8, 16, 32, 64 > > > > -*/ > > > > - > > > > -typedef fixed28_4 int32 @ctype(SPICE_FIXED28_4); > > > > - > > > > -struct Point { > > > > - int32 x; > > > > - int32 y; > > > > -}; > > > > - > > > > -struct Point16 { > > > > - int16 x; > > > > - int16 y; > > > > -}; > > > > - > > > > -struct PointFix { > > > > - fixed28_4 x; > > > > - fixed28_4 y; > > > > -}; > > > > - > > > > -struct Rect { > > > > - int32 top; > > > > - int32 left; > > > > - int32 bottom; > > > > - int32 right; > > > > -}; > > > > - > > > > -enum32 link_err { > > > > - OK, > > > > - ERROR, > > > > - INVALID_MAGIC, > > > > - INVALID_DATA, > > > > - VERSION_MISMATCH, > > > > - NEED_SECURED, > > > > - NEED_UNSECURED, > > > > - PERMISSION_DENIED, > > > > - BAD_CONNECTION_ID, > > > > - CHANNEL_NOT_AVAILABLE > > > > -}; > > > > - > > > > -enum32 warn_code { > > > > - WARN_GENERAL > > > > -} @prefix(SPICE_); > > > > - > > > > -enum32 info_code { > > > > - INFO_GENERAL > > > > -} @prefix(SPICE_); > > > > - > > > > -flags32 migrate_flags { > > > > - NEED_FLUSH, > > > > - NEED_DATA_TRANSFER > > > > -} @prefix(SPICE_MIGRATE_); > > > > - > > > > -enum32 notify_severity { > > > > - INFO, > > > > - WARN, > > > > - ERROR, > > > > -}; > > > > - > > > > -enum32 notify_visibility { > > > > - LOW, > > > > - MEDIUM, > > > > - HIGH, > > > > -}; > > > > - > > > > -flags32 mouse_mode { > > > > - SERVER, > > > > - CLIENT, > > > > -}; > > > > - > > > > -enum16 pubkey_type { > > > > - INVALID, > > > > - RSA, > > > > - RSA2, > > > > - DSA, > > > > - DSA1, > > > > - DSA2, > > > > - DSA3, > > > > - DSA4, > > > > - DH, > > > > - EC, > > > > -}; > > > > - > > > > -message Empty { > > > > -}; > > > > - > > > > -message Data { > > > > - uint8 data[] @end @ctype(uint8_t); > > > > -} @nocopy; > > > > - > > > > -struct ChannelWait { > > > > - uint8 channel_type; > > > > - uint8 channel_id; > > > > - uint64 message_serial; > > > > -} @ctype(SpiceWaitForChannel); > > > > - > > > > -channel BaseChannel { > > > > - server: > > > > - message { > > > > - migrate_flags flags; > > > > - } migrate; > > > > - > > > > - Data migrate_data; > > > > - > > > > - message { > > > > - uint32 generation; > > > > - uint32 window; > > > > - } set_ack; > > > > - > > > > - message { > > > > - uint32 id; > > > > - uint64 timestamp; > > > > - uint8 data[] @ctype(uint8_t) @as_ptr(data_len); > > > > - } ping; > > > > - > > > > - message { > > > > - uint8 wait_count; > > > > - ChannelWait wait_list[wait_count] @end; > > > > - } wait_for_channels; > > > > - > > > > - message { > > > > - uint64 time_stamp; > > > > - link_err reason; > > > > - } @ctype(SpiceMsgDisconnect) disconnecting; > > > > - > > > > - message { > > > > - uint64 time_stamp; > > > > - notify_severity severity; > > > > - notify_visibility visibilty; > > > > - uint32 what; /* error_code/warn_code/info_code */ > > > > - uint32 message_len; > > > > - uint8 message[message_len] @end @nomarshal; > > > > - uint8 zero @end @ctype(uint8_t) @nomarshal; > > > > - } notify; > > > > - > > > > - client: > > > > - message { > > > > - uint32 generation; > > > > - } ack_sync; > > > > - > > > > - Empty ack; > > > > - > > > > - message { > > > > - uint32 id; > > > > - uint64 timestamp; > > > > - } @ctype(SpiceMsgPing) pong; > > > > - > > > > - Empty migrate_flush_mark; > > > > - > > > > - Data migrate_data; > > > > - > > > > - message { > > > > - uint64 time_stamp; > > > > - link_err reason; > > > > - } @ctype(SpiceMsgDisconnect) disconnecting; > > > > -}; > > > > - > > > > -struct ChannelId { > > > > - uint8 type; > > > > - uint8 id; > > > > -}; > > > > - > > > > -struct DstInfo { > > > > - uint16 port; > > > > - uint16 sport; > > > > - uint32 host_offset @zero; > > > > - uint32 host_size; > > > > - pubkey_type pub_key_type @minor(1); > > > > - uint32 pub_key_offset @minor(1) @zero; > > > > - uint32 pub_key_size @minor(1); > > > > - uint8 host_data[host_size] @as_ptr @zero_terminated; > > > > - uint8 pub_key_data[pub_key_size] @minor(1) @as_ptr @zero_terminated; > > > > -} @ctype(SpiceMigrationDstInfo); > > > > - > > > > -channel MainChannel : BaseChannel { > > > > - server: > > > > - message { > > > > - DstInfo dst_info; > > > > - } @ctype(SpiceMsgMainMigrationBegin) migrate_begin = 101; > > > > - > > > > - Empty migrate_cancel; > > > > - > > > > - message { > > > > - uint32 session_id; > > > > - uint32 display_channels_hint; > > > > - uint32 supported_mouse_modes; > > > > - uint32 current_mouse_mode; > > > > - uint32 agent_connected; > > > > - uint32 agent_tokens; > > > > - uint32 multi_media_time; > > > > - uint32 ram_hint; > > > > - } init; > > > > - > > > > - message { > > > > - uint32 num_of_channels; > > > > - ChannelId channels[num_of_channels] @end; > > > > - } @ctype(SpiceMsgChannels) channels_list; > > > > - > > > > - message { > > > > - mouse_mode supported_modes; > > > > - mouse_mode current_mode @unique_flag; > > > > - } mouse_mode; > > > > - > > > > - message { > > > > - uint32 time; > > > > - } @ctype(SpiceMsgMainMultiMediaTime) multi_media_time; > > > > - > > > > - Empty agent_connected; > > > > - > > > > - message { > > > > - link_err error_code; > > > > - } @ctype(SpiceMsgMainAgentDisconnect) agent_disconnected; > > > > - > > > > - Data agent_data; > > > > - > > > > - message { > > > > - uint32 num_tokens; > > > > - } @ctype(SpiceMsgMainAgentTokens) agent_token; > > > > - > > > > - message { > > > > - uint16 port; > > > > - uint16 sport; > > > > - uint32 host_offset @zero; > > > > - uint32 host_size; > > > > - uint32 cert_subject_offset @zero; > > > > - uint32 cert_subject_size; > > > > - uint8 host_data[host_size] @as_ptr @zero_terminated; > > > > - uint8 cert_subject_data[cert_subject_size] @as_ptr > > > > @zero_terminated; > > > > - } @ctype(SpiceMsgMainMigrationSwitchHost) migrate_switch_host; > > > > - > > > > - client: > > > > - message { > > > > - uint64 cache_size; > > > > - } @ctype(SpiceMsgcClientInfo) client_info = 101; > > > > - > > > > - Empty migrate_connected; > > > > - > > > > - Empty migrate_connect_error; > > > > - > > > > - Empty attach_channels; > > > > - > > > > - message { > > > > - mouse_mode mode; > > > > - } mouse_mode_request; > > > > - > > > > - message { > > > > - uint32 num_tokens; > > > > - } agent_start; > > > > - > > > > - Data agent_data; > > > > - > > > > - message { > > > > - uint32 num_tokens; > > > > - } @ctype(SpiceMsgcMainAgentTokens) agent_token; > > > > -}; > > > > - > > > > -enum32 clip_type { > > > > - NONE, > > > > - RECTS > > > > -}; > > > > - > > > > -flags32 path_flags { /* TODO: C enum names changes */ > > > > - BEGIN = 0, > > > > - END = 1, > > > > - CLOSE = 3, > > > > - BEZIER = 4, > > > > -} @prefix(SPICE_PATH_); > > > > - > > > > -enum32 video_codec_type { > > > > - MJPEG = 1, > > > > -}; > > > > - > > > > -flags32 stream_flags { > > > > - TOP_DOWN = 0, > > > > -}; > > > > - > > > > -enum32 brush_type { > > > > - NONE, > > > > - SOLID, > > > > - PATTERN, > > > > -}; > > > > - > > > > -flags8 mask_flags { > > > > - INVERS, > > > > -}; > > > > - > > > > -enum8 image_type { > > > > - BITMAP, > > > > - QUIC, > > > > - RESERVED, > > > > - LZ_PLT = 100, > > > > - LZ_RGB, > > > > - GLZ_RGB, > > > > - FROM_CACHE, > > > > -}; > > > > - > > > > -flags8 image_flags { > > > > - CACHE_ME, > > > > -}; > > > > - > > > > -enum8 bitmap_fmt { > > > > - INVALID, > > > > - 1BIT_LE, > > > > - 1BIT_BE, > > > > - 4BIT_LE, > > > > - 4BIT_BE, > > > > - 8BIT /* 8bit indexed mode */, > > > > - 16BIT, /* 0555 mode */ > > > > - 24BIT /* 3 byte, brg */, > > > > - 32BIT /* 4 byte, xrgb in little endian format */, > > > > - RGBA /* 4 byte, argb in little endian format */ > > > > -}; > > > > - > > > > -flags8 bitmap_flags { > > > > - PAL_CACHE_ME, > > > > - PAL_FROM_CACHE, > > > > - TOP_DOWN, > > > > -}; > > > > - > > > > -enum8 image_scale_mode { > > > > - INTERPOLATE, > > > > - NEAREST, > > > > -}; > > > > - > > > > -flags16 ropd { > > > > - INVERS_SRC, > > > > - INVERS_BRUSH, > > > > - INVERS_DEST, > > > > - OP_PUT, > > > > - OP_OR, > > > > - OP_AND, > > > > - OP_XOR, > > > > - OP_BLACKNESS, > > > > - OP_WHITENESS, > > > > - OP_INVERS, > > > > - INVERS_RES, > > > > -}; > > > > - > > > > -flags8 line_flags { > > > > - STYLED = 3, > > > > - START_WITH_GAP = 2, > > > > -}; > > > > - > > > > -enum8 line_cap { > > > > - ROUND, > > > > - SQUARE, > > > > - BUTT, > > > > -}; > > > > - > > > > -enum8 line_join { > > > > - ROUND, > > > > - BEVEL, > > > > - MITER, > > > > -}; > > > > - > > > > -flags16 string_flags { > > > > - RASTER_A1, > > > > - RASTER_A4, > > > > - RASTER_A8, > > > > - RASTER_TOP_DOWN, > > > > -}; > > > > - > > > > -enum8 resource_type { > > > > - INVALID, > > > > - PIXMAP > > > > -} @prefix(SPICE_RES_TYPE_); > > > > - > > > > -struct ClipRects { > > > > - uint32 num_rects; > > > > - Rect rects[num_rects] @end; > > > > -}; > > > > - > > > > -struct PathSegment { > > > > - path_flags flags; > > > > - uint32 count; > > > > - PointFix points[count] @end; > > > > -} @ctype(SpicePathSeg); > > > > - > > > > -struct Path { > > > > - uint32 segments_size @bytes_count(num_segments); > > > > - PathSegment segments[bytes(segments_size, num_segments)] @ptr_array; > > > > -}; > > > > - > > > > -struct Clip { > > > > - clip_type type; > > > > - switch (type) { > > > > - case RECTS: > > > > - ClipRects *rects @outvar(cliprects); > > > > - default: > > > > - uint64 data @zero; > > > > - } u @anon; > > > > -}; > > > > - > > > > -struct DisplayBase { > > > > - uint32 surface_id @virtual(0); > > > > - Rect box; > > > > - Clip clip; > > > > -} @ctype(SpiceMsgDisplayBase); > > > > - > > > > -struct ResourceID { > > > > - uint8 type; > > > > - uint64 id; > > > > -}; > > > > - > > > > -struct WaitForChannel { > > > > - uint8 channel_type; > > > > - uint8 channel_id; > > > > - uint64 message_serial; > > > > -}; > > > > - > > > > -struct Palette { > > > > - uint64 unique; > > > > - uint16 num_ents; > > > > - uint32 ents[num_ents] @end; > > > > -}; > > > > - > > > > -struct BitmapData { > > > > - bitmap_fmt format; > > > > - bitmap_flags flags; > > > > - uint32 x; > > > > - uint32 y; > > > > - uint32 stride; > > > > - switch (flags) { > > > > - case PAL_FROM_CACHE: > > > > - uint64 palette_id; > > > > - default: > > > > - Palette *palette @outvar(bitmap); > > > > - } pal @anon; > > > > - uint8 *data[image_size(8, stride, y)] @chunk; /* pointer to array, > > > > not > > > > array of pointers as in C */ > > > > -} @ctype(SpiceBitmap); > > > > - > > > > -struct BinaryData { > > > > - uint32 data_size; > > > > - uint8 data[data_size] @nomarshal @chunk; > > > > -} @ctype(SpiceQUICData); > > > > - > > > > -struct LZPLTData { > > > > - bitmap_flags flags; > > > > - uint32 data_size; > > > > - switch (flags) { > > > > - case PAL_FROM_CACHE: > > > > - uint64 palette_id; > > > > - default: > > > > - Palette *palette @nonnull @outvar(lzplt); > > > > - } pal @anon; > > > > - uint8 data[data_size] @nomarshal @chunk; > > > > -}; > > > > - > > > > -struct Image { > > > > - struct ImageDescriptor { > > > > - uint64 id; > > > > - image_type type; > > > > - image_flags flags; > > > > - uint32 width; > > > > - uint32 height; > > > > - } descriptor; > > > > - > > > > - switch (descriptor.type) { > > > > - case BITMAP: > > > > - BitmapData bitmap; > > > > - case QUIC: > > > > - BinaryData quic; > > > > - case LZ_RGB: > > > > - case GLZ_RGB: > > > > - BinaryData lz_rgb; > > > > - case LZ_PLT: > > > > - LZPLTData lz_plt; > > > > - } u; > > > > -}; > > > > - > > > > -struct Pattern { > > > > - Image *pat @nonnull; > > > > - Point pos; > > > > -}; > > > > - > > > > -struct Brush { > > > > - brush_type type; > > > > - switch (type) { > > > > - case SOLID: > > > > - uint32 color; > > > > - case PATTERN: > > > > - Pattern pattern; > > > > - } u @fixedsize; > > > > -}; > > > > - > > > > -struct QMask { > > > > - mask_flags flags; > > > > - Point pos; > > > > - Image *bitmap; > > > > -}; > > > > - > > > > -struct LineAttr { > > > > - line_flags flags; > > > > - line_join join_style @zero; > > > > - line_cap end_style @zero; > > > > - uint8 style_nseg; > > > > - fixed28_4 width @zero; > > > > - fixed28_4 miter_limit @zero; > > > > - fixed28_4 *style[style_nseg]; > > > > -}; > > > > - > > > > -struct RasterGlyphA1 { > > > > - Point render_pos; > > > > - Point glyph_origin; > > > > - uint16 width; > > > > - uint16 height; > > > > - uint8 data[image_size(1, width, height)] @end; > > > > -} @ctype(SpiceRasterGlyph); > > > > - > > > > -struct RasterGlyphA4 { > > > > - Point render_pos; > > > > - Point glyph_origin; > > > > - uint16 width; > > > > - uint16 height; > > > > - uint8 data[image_size(4, width, height)] @end; > > > > -} @ctype(SpiceRasterGlyph); > > > > - > > > > -struct RasterGlyphA8 { > > > > - Point render_pos; > > > > - Point glyph_origin; > > > > - uint16 width; > > > > - uint16 height; > > > > - uint8 data[image_size(8, width, height)] @end; > > > > -} @ctype(SpiceRasterGlyph); > > > > - > > > > -struct String { > > > > - uint16 length; > > > > - string_flags flags; /* Special: Only one of a1/a4/a8 set */ > > > > - switch (flags) { > > > > - case RASTER_A1: > > > > - RasterGlyphA1 glyphs[length] @ctype(SpiceRasterGlyph) > > > > @ptr_array; > > > > - case RASTER_A4: > > > > - RasterGlyphA4 glyphs[length] @ctype(SpiceRasterGlyph) > > > > @ptr_array; > > > > - case RASTER_A8: > > > > - RasterGlyphA8 glyphs[length] @ctype(SpiceRasterGlyph) > > > > @ptr_array; > > > > - } u @anon; > > > > -}; > > > > - > > > > -struct StreamDataHeader { > > > > - uint32 id; > > > > - uint32 multi_media_time; > > > > -}; > > > > - > > > > -channel DisplayChannel : BaseChannel { > > > > - server: > > > > - message { > > > > - uint32 x_res; > > > > - uint32 y_res; > > > > - uint32 bits; > > > > - } mode = 101; > > > > - > > > > - Empty mark; > > > > - Empty reset; > > > > - > > > > - message { > > > > - DisplayBase base; > > > > - Point src_pos; > > > > - } copy_bits; > > > > - > > > > - message { > > > > - uint16 count; > > > > - ResourceID resources[count] @end; > > > > - } @ctype(SpiceResourceList) inval_list; > > > > - > > > > - message { > > > > - uint8 wait_count; > > > > - WaitForChannel wait_list[wait_count] @end; > > > > - } @ctype(SpiceMsgWaitForChannels) inval_all_pixmaps; > > > > - > > > > - message { > > > > - uint64 id; > > > > - } @ctype(SpiceMsgDisplayInvalOne) inval_palette; > > > > - > > > > - Empty inval_all_palettes; > > > > - > > > > - message { > > > > - uint32 surface_id @virtual(0); > > > > - uint32 id; > > > > - stream_flags flags; > > > > - video_codec_type codec_type; > > > > - uint64 stamp; > > > > - uint32 stream_width; > > > > - uint32 stream_height; > > > > - uint32 src_width; > > > > - uint32 src_height; > > > > - Rect dest; > > > > - Clip clip; > > > > - } stream_create = 122; > > > > - > > > > - message { > > > > - StreamDataHeader base; > > > > - uint32 data_size; > > > > - uint32 pad_size @zero; > > > > - uint8 data[data_size] @end @nomarshal; > > > > - /* Ignore: uint8 padding[pad_size] */ > > > > - } stream_data; > > > > - > > > > - message { > > > > - uint32 id; > > > > - Clip clip; > > > > - } stream_clip; > > > > - > > > > - message { > > > > - uint32 id; > > > > - } stream_destroy; > > > > - > > > > - Empty stream_destroy_all; > > > > - > > > > - message { > > > > - DisplayBase base; > > > > - struct Fill { > > > > - Brush brush @outvar(brush); > > > > - uint16 rop_descriptor; > > > > - QMask mask @outvar(mask); > > > > - } data; > > > > - } draw_fill = 302; > > > > - > > > > - message { > > > > - DisplayBase base; > > > > - struct Opaque { > > > > - Image *src_bitmap; > > > > - Rect src_area; > > > > - Brush brush; > > > > - ropd rop_descriptor; > > > > - image_scale_mode scale_mode; > > > > - QMask mask @outvar(mask); > > > > - } data; > > > > - } draw_opaque; > > > > - > > > > - message { > > > > - DisplayBase base; > > > > - struct Copy { > > > > - Image *src_bitmap; > > > > - Rect src_area; > > > > - ropd rop_descriptor; > > > > - image_scale_mode scale_mode; > > > > - QMask mask @outvar(mask); > > > > - } data; > > > > - } draw_copy; > > > > - > > > > - message { > > > > - DisplayBase base; > > > > - struct Blend { > > > > - Image *src_bitmap; > > > > - Rect src_area; > > > > - ropd rop_descriptor; > > > > - image_scale_mode scale_mode; > > > > - QMask mask @outvar(mask); > > > > - } @ctype(SpiceCopy) data; > > > > - } draw_blend; > > > > - > > > > - message { > > > > - DisplayBase base; > > > > - struct Blackness { > > > > - QMask mask @outvar(mask); > > > > - } data; > > > > - } draw_blackness; > > > > - > > > > - message { > > > > - DisplayBase base; > > > > - struct Whiteness { > > > > - QMask mask @outvar(mask); > > > > - } data; > > > > - } draw_whiteness; > > > > - > > > > - message { > > > > - DisplayBase base; > > > > - struct Invers { > > > > - QMask mask @outvar(mask); > > > > - } data; > > > > - } draw_invers; > > > > - > > > > - message { > > > > - DisplayBase base; > > > > - struct Rop3 { > > > > - Image *src_bitmap; > > > > - Rect src_area; > > > > - Brush brush; > > > > - uint8 rop3; > > > > - image_scale_mode scale_mode; > > > > - QMask mask @outvar(mask); > > > > - } data; > > > > - } draw_rop3; > > > > - > > > > - message { > > > > - DisplayBase base; > > > > - struct Stroke { > > > > - Path *path; > > > > - LineAttr attr; > > > > - Brush brush; > > > > - uint16 fore_mode; > > > > - uint16 back_mode; > > > > - } data; > > > > - } draw_stroke; > > > > - > > > > - message { > > > > - DisplayBase base; > > > > - struct Text { > > > > - String *str; > > > > - Rect back_area; > > > > - Brush fore_brush @outvar(fore_brush); > > > > - Brush back_brush @outvar(back_brush); > > > > - uint16 fore_mode; > > > > - uint16 back_mode; > > > > - } data; > > > > - } draw_text; > > > > - > > > > - message { > > > > - DisplayBase base; > > > > - struct Transparent { > > > > - Image *src_bitmap; > > > > - Rect src_area; > > > > - uint32 src_color; > > > > - uint32 true_color; > > > > - } data; > > > > - } draw_transparent; > > > > - > > > > - message { > > > > - DisplayBase base; > > > > - struct AlphaBlend { > > > > - int8 alpha_flags @virtual(0); > > > > - uint8 alpha; > > > > - Image *src_bitmap; > > > > - Rect src_area; > > > > - } data; > > > > - } draw_alpha_blend; > > > > - > > > > - client: > > > > - message { > > > > - uint8 pixmap_cache_id; > > > > - int64 pixmap_cache_size; //in pixels > > > > - uint8 glz_dictionary_id; > > > > - int32 glz_dictionary_window_size; // in pixels > > > > - } init = 101; > > > > -}; > > > > - > > > > -flags32 keyboard_modifier_flags { > > > > - SCROLL_LOCK, > > > > - NUM_LOCK, > > > > - CAPS_LOCK > > > > -}; > > > > - > > > > -enum32 mouse_button { > > > > - INVALID, > > > > - LEFT, > > > > - MIDDLE, > > > > - RIGHT, > > > > - UP, > > > > - DOWN, > > > > -}; > > > > - > > > > -flags32 mouse_button_mask { > > > > - LEFT, > > > > - MIDDLE, > > > > - RIGHT > > > > -}; > > > > - > > > > -channel InputsChannel : BaseChannel { > > > > - client: > > > > - message { > > > > - uint32 code; > > > > - } @ctype(SpiceMsgcKeyDown) key_down = 101; > > > > - > > > > - message { > > > > - uint32 code; > > > > - } @ctype(SpiceMsgcKeyUp) key_up; > > > > - > > > > - message { > > > > - keyboard_modifier_flags modifiers; > > > > - } @ctype(SpiceMsgcKeyModifiers) key_modifiers; > > > > - > > > > - message { > > > > - int32 dx; > > > > - int32 dy; > > > > - mouse_button_mask buttons_state; > > > > - } @ctype(SpiceMsgcMouseMotion) mouse_motion = 111; > > > > - > > > > - message { > > > > - uint32 x; > > > > - uint32 y; > > > > - mouse_button_mask buttons_state; > > > > - uint8 display_id; > > > > - } @ctype(SpiceMsgcMousePosition) mouse_position; > > > > - > > > > - message { > > > > - mouse_button button; > > > > - mouse_button_mask buttons_state; > > > > - } @ctype(SpiceMsgcMousePress) mouse_press; > > > > - > > > > - message { > > > > - mouse_button button; > > > > - mouse_button_mask buttons_state; > > > > - } @ctype(SpiceMsgcMouseRelease) mouse_release; > > > > - > > > > - server: > > > > - message { > > > > - keyboard_modifier_flags keyboard_modifiers; > > > > - } init = 101; > > > > - > > > > - message { > > > > - keyboard_modifier_flags modifiers; > > > > - } key_modifiers; > > > > - > > > > - Empty mouse_motion_ack = 111; > > > > -}; > > > > - > > > > -enum16 cursor_type { > > > > - ALPHA, > > > > - MONO, > > > > - COLOR4, > > > > - COLOR8, > > > > - COLOR16, > > > > - COLOR24, > > > > - COLOR32, > > > > -}; > > > > - > > > > -flags32 cursor_flags { > > > > - NONE, /* Means no cursor */ > > > > - CACHE_ME, > > > > - FROM_CACHE, > > > > -}; > > > > - > > > > -struct CursorHeader { > > > > - uint64 unique; > > > > - cursor_type type; > > > > - uint16 width; > > > > - uint16 height; > > > > - uint16 hot_spot_x; > > > > - uint16 hot_spot_y; > > > > -}; > > > > - > > > > -struct Cursor { > > > > - cursor_flags flags; > > > > - CursorHeader header; > > > > - uint8 data[] @as_ptr(data_size); > > > > -}; > > > > - > > > > -channel CursorChannel : BaseChannel { > > > > - server: > > > > - message { > > > > - Point16 position; > > > > - uint16 trail_length; > > > > - uint16 trail_frequency; > > > > - uint8 visible; > > > > - Cursor cursor; > > > > - } init = 101; > > > > - > > > > - Empty reset; > > > > - > > > > - message { > > > > - Point16 position; > > > > - uint8 visible; > > > > - Cursor cursor; > > > > - } set; > > > > - > > > > - message { > > > > - Point16 position; > > > > - } move; > > > > - > > > > - Empty hide; > > > > - > > > > - message { > > > > - uint16 length; > > > > - uint16 frequency; > > > > - } trail; > > > > - > > > > - message { > > > > - uint64 id; > > > > - } @ctype(SpiceMsgDisplayInvalOne) inval_one; > > > > - > > > > - Empty inval_all; > > > > -}; > > > > - > > > > -enum32 audio_data_mode { > > > > - INVALID, > > > > - RAW, > > > > - CELT_0_5_1, > > > > - OPUS, > > > > -}; > > > > - > > > > -enum32 audio_fmt { > > > > - INVALID, > > > > - S16, > > > > -}; > > > > - > > > > -channel PlaybackChannel : BaseChannel { > > > > - server: > > > > - message { > > > > - uint32 time; > > > > - uint8 data[] @as_ptr(data_size); > > > > - } @ctype(SpiceMsgPlaybackPacket) data = 101; > > > > - > > > > - message { > > > > - uint32 time; > > > > - audio_data_mode mode; > > > > - uint8 data[] @as_ptr(data_size); > > > > - } mode; > > > > - > > > > - message { > > > > - uint32 channels; > > > > - audio_fmt format; > > > > - uint32 frequency; > > > > - uint32 time; > > > > - } start; > > > > - > > > > - Empty stop; > > > > -}; > > > > - > > > > -channel RecordChannel : BaseChannel { > > > > - server: > > > > - message { > > > > - uint32 channels; > > > > - audio_fmt format; > > > > - uint32 frequency; > > > > - } start = 101; > > > > - > > > > - Empty stop; > > > > - client: > > > > - message { > > > > - uint32 time; > > > > - uint8 data[] @nomarshal @as_ptr(data_size); > > > > - } @ctype(SpiceMsgcRecordPacket) data = 101; > > > > - > > > > - message { > > > > - uint32 time; > > > > - audio_data_mode mode; > > > > - uint8 data[] @as_ptr(data_size); > > > > - } mode; > > > > - > > > > - message { > > > > - uint32 time; > > > > - } start_mark; > > > > -}; > > > > - > > > > -protocol Spice { > > > > - MainChannel main = 1; > > > > - DisplayChannel display; > > > > - InputsChannel inputs; > > > > - CursorChannel cursor; > > > > - PlaybackChannel playback; > > > > - RecordChannel record; > > > > -}; _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/spice-devel