From: Victor Toso <me@xxxxxxxxxxxxxx> There is no need to wait till migrate_connect() being called to set information about target host. We create new SpiceSession and can set related info similar place. Moved to a utility function. This is a preparatory patch on refactoring migration code. Signed-off-by: Victor Toso <victortoso@xxxxxxxxxx> --- src/channel-main.c | 56 +++++++++++++++++++++++++--------------------- 1 file changed, 31 insertions(+), 25 deletions(-) diff --git a/src/channel-main.c b/src/channel-main.c index 3fe8d64..3dba399 100644 --- a/src/channel-main.c +++ b/src/channel-main.c @@ -2284,8 +2284,6 @@ static gboolean migrate_connect(gpointer data) { spice_migrate *mig = data; SpiceChannelPrivate *c; - int port, sport; - const char *host; g_return_val_if_fail(mig != NULL, FALSE); g_return_val_if_fail(mig->info != NULL, FALSE); @@ -2299,43 +2297,49 @@ static gboolean migrate_connect(gpointer data) SpiceMigrationDstInfo *info = mig->info; SPICE_DEBUG("migrate_begin %u %s %d %d", info->host_size, info->host_data, info->port, info->sport); - port = info->port; - sport = info->sport; - host = (char*)info->host_data; + + g_signal_connect(mig->session, "channel-new", + G_CALLBACK(migrate_channel_new_cb), mig); + + g_signal_emit(mig->src_channel, signals[SPICE_MIGRATION_STARTED], 0, + mig->session); + + /* the migration process is in 2 steps, first the main channel and + then the rest of the channels */ + migrate_channel_connect(mig, SPICE_CHANNEL_MAIN, 0); + + return FALSE; +} + +static void +migration_session_set_destination_info(SpiceSession *target_session, + SpiceMigrationDstInfo *info) +{ + const char *host = (const char *) info->host_data; + + if (g_getenv("SPICE_MIG_HOST")) { + host = g_getenv("SPICE_MIG_HOST"); + } + + g_object_set(target_session, "host", host, NULL); + spice_session_set_port(target_session, info->port, FALSE); + spice_session_set_port(target_session, info->sport, TRUE); if (info->cert_subject_size == 0 || strlen((const char*)info->cert_subject_data) == 0) { /* only verify hostname if no cert subject */ - g_object_set(mig->session, "verify", SPICE_SESSION_VERIFY_HOSTNAME, NULL); + g_object_set(target_session, "verify", SPICE_SESSION_VERIFY_HOSTNAME, NULL); } else { gchar *subject = g_alloca(info->cert_subject_size + 1); strncpy(subject, (const char*)info->cert_subject_data, info->cert_subject_size); subject[info->cert_subject_size] = '\0'; // session data are already copied - g_object_set(mig->session, + g_object_set(target_session, "cert-subject", subject, "verify", SPICE_SESSION_VERIFY_SUBJECT, NULL); } - - if (g_getenv("SPICE_MIG_HOST")) - host = g_getenv("SPICE_MIG_HOST"); - - g_object_set(mig->session, "host", host, NULL); - spice_session_set_port(mig->session, port, FALSE); - spice_session_set_port(mig->session, sport, TRUE); - g_signal_connect(mig->session, "channel-new", - G_CALLBACK(migrate_channel_new_cb), mig); - - g_signal_emit(mig->src_channel, signals[SPICE_MIGRATION_STARTED], 0, - mig->session); - - /* the migration process is in 2 steps, first the main channel and - then the rest of the channels */ - migrate_channel_connect(mig, SPICE_CHANNEL_MAIN, 0); - - return FALSE; } /* coroutine context */ @@ -2363,6 +2367,8 @@ static void main_migrate_connect(SpiceChannel *channel, goto end; } + migration_session_set_destination_info(mig.session, dst_info); + main_priv->migrate_data = &mig; /* no need to track idle, call is sync for this coroutine */ -- 2.21.0 _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/spice-devel