From c2f58492ad2df22c4eb4e6c04750010113dce567 Mon Sep 17 00:00:00 2001 From: Yonit Halperin Date: Mon, 2 Jul 2012 13:23:32 +0300 Subject: support seamless migration see spice-protocol for more details commit 3838ad140a046c4ddf42fef58c9727ecfdc09f9f --- common/client_marshallers.h | 1 + common/messages.h | 15 ++++++++++++++- spice-protocol | 2 +- spice.proto | 24 +++++++++++++++++++++--- spice1.proto | 10 +++++++--- 5 files changed, 44 insertions(+), 8 deletions(-) diff --git a/common/client_marshallers.h b/common/client_marshallers.h index 1bd95ae..1da7ff9 100644 --- a/common/client_marshallers.h +++ b/common/client_marshallers.h @@ -42,6 +42,7 @@ typedef struct { void (*msgc_main_mouse_mode_request)(SpiceMarshaller *m, SpiceMsgcMainMouseModeRequest *msg); void (*msgc_main_agent_start)(SpiceMarshaller *m, SpiceMsgcMainAgentStart *msg); void (*msgc_main_agent_token)(SpiceMarshaller *m, SpiceMsgcMainAgentTokens *msg); + void (*msgc_main_migrate_dst_do_seamless)(SpiceMarshaller *m, SpiceMsgcMainMigrateDstDoSeamless *msg); void (*msgc_display_init)(SpiceMarshaller *m, SpiceMsgcDisplayInit *msg); void (*msgc_inputs_key_down)(SpiceMarshaller *m, SpiceMsgcKeyDown *msg); void (*msgc_inputs_key_up)(SpiceMarshaller *m, SpiceMsgcKeyUp *msg); diff --git a/common/messages.h b/common/messages.h index 6df0fc3..95549c8 100644 --- a/common/messages.h +++ b/common/messages.h @@ -67,7 +67,7 @@ typedef struct SpiceMsgMainMultiMediaTime { uint32_t time; } SpiceMsgMainMultiMediaTime; -typedef struct SpiceMsgMainMigrationBegin { +typedef struct SpiceMigrationDstInfo { uint16_t port; uint16_t sport; uint32_t host_size; @@ -77,8 +77,21 @@ typedef struct SpiceMsgMainMigrationBegin { uint8_t *pub_key_data; uint32_t cert_subject_size; uint8_t *cert_subject_data; +} SpiceMigrationDstInfo; + +typedef struct SpiceMsgMainMigrationBegin { + SpiceMigrationDstInfo dst_info; } SpiceMsgMainMigrationBegin; +typedef struct SpiceMsgMainMigrateBeginSeamless { + SpiceMigrationDstInfo dst_info; + uint32_t src_mig_version; +} SpiceMsgMainMigrateBeginSeamless; + +typedef struct SpiceMsgcMainMigrateDstDoSeamless { + uint32_t src_version; +} SpiceMsgcMainMigrateDstDoSeamless; + typedef struct SpiceMsgMainMigrationSwitchHost { uint16_t port; uint16_t sport; diff --git a/spice-protocol b/spice-protocol index c20bc58..3838ad1 160000 --- a/spice-protocol +++ b/spice-protocol @@ -1 +1 @@ -Subproject commit c20bc58c4e44b6403b7e7a9efc4f12dee0fc100e +Subproject commit 3838ad140a046c4ddf42fef58c9727ecfdc09f9f diff --git a/spice.proto b/spice.proto index 271e35d..2ef4dd6 100644 --- a/spice.proto +++ b/spice.proto @@ -193,15 +193,19 @@ struct ChannelId { uint8 id; }; -channel MainChannel : BaseChannel { - server: - message { +struct DstInfo { uint16 port; uint16 sport; uint32 host_size; uint8 *host_data[host_size] @zero_terminated @marshall @nonnull; uint32 cert_subject_size; uint8 *cert_subject_data[cert_subject_size] @zero_terminated @marshall; +} @ctype(SpiceMigrationDstInfo); + +channel MainChannel : BaseChannel { + server: + message { + DstInfo dst_info; } @ctype(SpiceMsgMainMigrationBegin) migrate_begin = 101; Empty migrate_cancel; @@ -267,6 +271,14 @@ channel MainChannel : BaseChannel { uint32 num_tokens; } agent_connected_tokens; + message { + DstInfo dst_info; + uint32 src_mig_version; + } migrate_begin_seamless; + + Empty migrate_dst_seamless_ack; + Empty migrate_dst_seamless_nack; + client: message { uint64 cache_size; @@ -293,6 +305,12 @@ channel MainChannel : BaseChannel { } @ctype(SpiceMsgcMainAgentTokens) agent_token; Empty migrate_end; + + message { + uint32 src_version; + } migrate_dst_do_seamless; + + Empty migrate_connected_seamless; }; enum8 clip_type { diff --git a/spice1.proto b/spice1.proto index 2ed1058..2d22cdf 100644 --- a/spice1.proto +++ b/spice1.proto @@ -161,9 +161,7 @@ struct ChannelId { uint8 id; }; -channel MainChannel : BaseChannel { - server: - message { +struct DstInfo { uint16 port; uint16 sport; uint32 host_offset @zero; @@ -173,6 +171,12 @@ channel MainChannel : BaseChannel { 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; -- cgit v1.2.3