2 int8, uint8, 16, 32, 64
5 typedef fixed28_4 int32 @ctype(SPICE_FIXED28_4);
50 flags32 migrate_flags {
53 } @prefix(SPICE_MIGRATE_);
55 enum32 notify_severity {
61 enum32 notify_visibility {
89 uint8 data[] @end @ctype(uint8_t);
95 uint64 message_serial;
96 } @ctype(SpiceWaitForChannel);
114 uint8 data[] @ctype(uint8_t) @as_ptr(data_len);
119 ChannelWait wait_list[wait_count] @end;
125 } @ctype(SpiceMsgDisconnect) disconnecting;
129 notify_severity severity;
130 notify_visibility visibilty;
131 uint32 what; /* error_code/warn_code/info_code */
133 uint8 message[message_len] @end @nomarshal;
134 uint8 zero @end @ctype(uint8_t) @nomarshal;
147 } @ctype(SpiceMsgPing) pong;
149 Empty migrate_flush_mark;
156 } @ctype(SpiceMsgDisconnect) disconnecting;
167 uint32 host_offset @zero;
169 pubkey_type pub_key_type @minor(1);
170 uint32 pub_key_offset @minor(1) @zero;
171 uint32 pub_key_size @minor(1);
172 uint8 host_data[host_size] @as_ptr @zero_terminated;
173 uint8 pub_key_data[pub_key_size] @minor(1) @as_ptr @zero_terminated;
174 } @ctype(SpiceMigrationDstInfo);
176 channel MainChannel : BaseChannel {
180 } @ctype(SpiceMsgMainMigrationBegin) migrate_begin = 101;
182 Empty migrate_cancel;
186 uint32 display_channels_hint;
187 uint32 supported_mouse_modes;
188 uint32 current_mouse_mode;
189 uint32 agent_connected;
191 uint32 multi_media_time;
196 uint32 num_of_channels;
197 ChannelId channels[num_of_channels] @end;
198 } @ctype(SpiceMsgChannels) channels_list;
201 mouse_mode supported_modes;
202 mouse_mode current_mode @unique_flag;
207 } @ctype(SpiceMsgMainMultiMediaTime) multi_media_time;
209 Empty agent_connected;
213 } @ctype(SpiceMsgMainAgentDisconnect) agent_disconnected;
219 } @ctype(SpiceMsgMainAgentTokens) agent_token;
224 uint32 host_offset @zero;
226 uint32 cert_subject_offset @zero;
227 uint32 cert_subject_size;
228 uint8 host_data[host_size] @as_ptr @zero_terminated;
229 uint8 cert_subject_data[cert_subject_size] @as_ptr @zero_terminated;
230 } @ctype(SpiceMsgMainMigrationSwitchHost) migrate_switch_host;
235 } @ctype(SpiceMsgcClientInfo) client_info = 101;
237 Empty migrate_connected;
239 Empty migrate_connect_error;
241 Empty attach_channels;
245 } mouse_mode_request;
255 } @ctype(SpiceMsgcMainAgentTokens) agent_token;
263 flags32 path_flags { /* TODO: C enum names changes */
268 } @prefix(SPICE_PATH_);
270 enum32 video_codec_type {
274 flags32 stream_flags {
308 8BIT /* 8bit indexed mode */,
309 16BIT, /* 0555 mode */
310 24BIT /* 3 byte, brg */,
311 32BIT /* 4 byte, xrgb in little endian format */,
312 RGBA /* 4 byte, argb in little endian format */
315 flags8 bitmap_flags {
321 enum8 image_scale_mode {
357 flags16 string_flags {
364 enum8 resource_type {
367 } @prefix(SPICE_RES_TYPE_);
371 Rect rects[num_rects] @end;
377 PointFix points[count] @end;
378 } @ctype(SpicePathSeg);
381 uint32 segments_size @bytes_count(num_segments);
382 PathSegment segments[bytes(segments_size, num_segments)] @ptr_array;
389 ClipRects *rects @outvar(cliprects);
396 uint32 surface_id @virtual(0);
399 } @ctype(SpiceMsgDisplayBase);
406 struct WaitForChannel {
409 uint64 message_serial;
415 uint32 ents[num_ents] @end;
428 Palette *palette @outvar(bitmap);
430 uint8 *data[image_size(8, stride, y)] @chunk; /* pointer to array, not array of pointers as in C */
431 } @ctype(SpiceBitmap);
435 uint8 data[data_size] @nomarshal @chunk;
436 } @ctype(SpiceQUICData);
445 Palette *palette @nonnull @outvar(lzplt);
447 uint8 data[data_size] @nomarshal @chunk;
451 struct ImageDescriptor {
459 switch (descriptor.type) {
495 line_join join_style @zero;
496 line_cap end_style @zero;
498 fixed28_4 width @zero;
499 fixed28_4 miter_limit @zero;
500 fixed28_4 *style[style_nseg];
503 struct RasterGlyphA1 {
508 uint8 data[image_size(1, width, height)] @end;
509 } @ctype(SpiceRasterGlyph);
511 struct RasterGlyphA4 {
516 uint8 data[image_size(4, width, height)] @end;
517 } @ctype(SpiceRasterGlyph);
519 struct RasterGlyphA8 {
524 uint8 data[image_size(8, width, height)] @end;
525 } @ctype(SpiceRasterGlyph);
529 string_flags flags; /* Special: Only one of a1/a4/a8 set */
532 RasterGlyphA1 glyphs[length] @ctype(SpiceRasterGlyph) @ptr_array;
534 RasterGlyphA4 glyphs[length] @ctype(SpiceRasterGlyph) @ptr_array;
536 RasterGlyphA8 glyphs[length] @ctype(SpiceRasterGlyph) @ptr_array;
540 struct StreamDataHeader {
542 uint32 multi_media_time;
545 channel DisplayChannel : BaseChannel {
563 ResourceID resources[count] @end;
564 } @ctype(SpiceResourceList) inval_list;
568 WaitForChannel wait_list[wait_count] @end;
569 } @ctype(SpiceMsgWaitForChannels) inval_all_pixmaps;
573 } @ctype(SpiceMsgDisplayInvalOne) inval_palette;
575 Empty inval_all_palettes;
578 uint32 surface_id @virtual(0);
581 video_codec_type codec_type;
584 uint32 stream_height;
589 } stream_create = 122;
592 StreamDataHeader base;
594 uint32 pad_size @zero;
595 uint8 data[data_size] @end @nomarshal;
596 /* Ignore: uint8 padding[pad_size] */
608 Empty stream_destroy_all;
613 Brush brush @outvar(brush);
614 uint16 rop_descriptor;
615 QMask mask @outvar(mask);
626 image_scale_mode scale_mode;
627 QMask mask @outvar(mask);
637 image_scale_mode scale_mode;
638 QMask mask @outvar(mask);
648 image_scale_mode scale_mode;
649 QMask mask @outvar(mask);
650 } @ctype(SpiceCopy) data;
656 QMask mask @outvar(mask);
663 QMask mask @outvar(mask);
670 QMask mask @outvar(mask);
681 image_scale_mode scale_mode;
682 QMask mask @outvar(mask);
702 Brush fore_brush @outvar(fore_brush);
703 Brush back_brush @outvar(back_brush);
722 int8 alpha_flags @virtual(0);
731 uint8 pixmap_cache_id;
732 int64 pixmap_cache_size; //in pixels
733 uint8 glz_dictionary_id;
734 int32 glz_dictionary_window_size; // in pixels
738 flags32 keyboard_modifier_flags {
744 enum32 mouse_button {
753 flags32 mouse_button_mask {
759 channel InputsChannel : BaseChannel {
763 } @ctype(SpiceMsgcKeyDown) key_down = 101;
767 } @ctype(SpiceMsgcKeyUp) key_up;
770 keyboard_modifier_flags modifiers;
771 } @ctype(SpiceMsgcKeyModifiers) key_modifiers;
776 mouse_button_mask buttons_state;
777 } @ctype(SpiceMsgcMouseMotion) mouse_motion = 111;
782 mouse_button_mask buttons_state;
784 } @ctype(SpiceMsgcMousePosition) mouse_position;
788 mouse_button_mask buttons_state;
789 } @ctype(SpiceMsgcMousePress) mouse_press;
793 mouse_button_mask buttons_state;
794 } @ctype(SpiceMsgcMouseRelease) mouse_release;
798 keyboard_modifier_flags keyboard_modifiers;
802 keyboard_modifier_flags modifiers;
805 Empty mouse_motion_ack = 111;
818 flags32 cursor_flags {
819 NONE, /* Means no cursor */
824 struct CursorHeader {
836 uint8 data[] @as_ptr(data_size);
839 channel CursorChannel : BaseChannel {
844 uint16 trail_frequency;
870 } @ctype(SpiceMsgDisplayInvalOne) inval_one;
875 enum32 audio_data_mode {
886 channel PlaybackChannel : BaseChannel {
890 uint8 data[] @as_ptr(data_size);
891 } @ctype(SpiceMsgPlaybackPacket) data = 101;
895 audio_data_mode mode;
896 uint8 data[] @as_ptr(data_size);
909 channel RecordChannel : BaseChannel {
921 uint8 data[] @nomarshal @as_ptr(data_size);
922 } @ctype(SpiceMsgcRecordPacket) data = 101;
926 audio_data_mode mode;
927 uint8 data[] @as_ptr(data_size);
936 MainChannel main = 1;
937 DisplayChannel display;
938 InputsChannel inputs;
939 CursorChannel cursor;
940 PlaybackChannel playback;
941 RecordChannel record;