From f6ccf6db46079db47dd5147334264d84d86f21aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= Date: Wed, 4 Mar 2015 15:29:38 +0100 Subject: [PATCH] Update to spice-gtk v0.28 --- .gitignore | 30 +-- ...ssion-keep-main-channel-on-reconnect.patch | 115 ----------- ...nnel-factorize-failed-authentication.patch | 126 ------------ ...enter-channel-iterate-on-early-error.patch | 129 ------------ ...uce-SPICE_CHANNEL_STATE_RECONNECTING.patch | 107 ---------- ...throw-auth-error-when-coroutine-ends.patch | 54 ----- ...clear-channel-error-after-auth-error.patch | 37 ---- ...vent-crash-when-calling-without-host.patch | 70 ------- ...event-report-to-after-coroutine-exit.patch | 187 ------------------ ...-tls-state-when-client-calls-connect.patch | 82 -------- ...nnel-reset-connection-state-on-error.patch | 28 --- sources | 2 +- spice-gtk.spec | 27 +-- 13 files changed, 7 insertions(+), 987 deletions(-) delete mode 100644 0001-session-keep-main-channel-on-reconnect.patch delete mode 100644 0002-channel-factorize-failed-authentication.patch delete mode 100644 0003-channel-do-not-enter-channel-iterate-on-early-error.patch delete mode 100644 0004-channel-introduce-SPICE_CHANNEL_STATE_RECONNECTING.patch delete mode 100644 0005-channel-throw-auth-error-when-coroutine-ends.patch delete mode 100644 0006-channel-clear-channel-error-after-auth-error.patch delete mode 100644 0007-usbredir-prevent-crash-when-calling-without-host.patch delete mode 100644 0008-channel-delay-event-report-to-after-coroutine-exit.patch delete mode 100644 0009-channel-reset-tls-state-when-client-calls-connect.patch delete mode 100644 0010-channel-reset-connection-state-on-error.patch diff --git a/.gitignore b/.gitignore index c393672..725d5ee 100644 --- a/.gitignore +++ b/.gitignore @@ -1,29 +1 @@ -/spice-gtk-0.4.tar.bz2 -/spice-gtk-0.5.tar.bz2 -/spice-gtk-0.6.tar.bz2 -/spice-gtk-0.7.tar.bz2 -/spice-gtk-0.7.1-d5a8.tar.bz2 -/spice-gtk-0.7.39-ab64.tar.bz2 -/spice-gtk-0.8.tar.bz2 -/spice-gtk-0.9.tar.bz2 -/spice-gtk-0.10.tar.bz2 -/spice-gtk-0.11.tar.bz2 -/spice-gtk-0.12.tar.bz2 -/spice-gtk-0.12.101.tar.bz2 -/spice-gtk-0.13.tar.bz2 -/spice-gtk-0.13.29-f256.tar.bz2 -/spice-gtk-0.14.tar.bz2 -/spice-gtk-0.15.tar.bz2 -/spice-gtk-0.15.3-76cb.tar.bz2 -/spice-gtk-0.16.tar.bz2 -/spice-gtk-0.17.tar.bz2 -/spice-gtk-0.18.tar.bz2 -/spice-gtk-0.19.tar.bz2 -/spice-gtk-0.20.tar.bz2 -/spice-gtk-0.21.tar.bz2 -/spice-gtk-0.22.tar.bz2 -/spice-gtk-0.23.tar.bz2 -/spice-gtk-0.24.tar.bz2 -/spice-gtk-0.25.tar.bz2 -/spice-gtk-0.26.tar.bz2 -/spice-gtk-0.27.tar.bz2 +/spice-gtk-*.tar.bz2 diff --git a/0001-session-keep-main-channel-on-reconnect.patch b/0001-session-keep-main-channel-on-reconnect.patch deleted file mode 100644 index 7e5d5cd..0000000 --- a/0001-session-keep-main-channel-on-reconnect.patch +++ /dev/null @@ -1,115 +0,0 @@ -From 6b475802d78f2a4f2110738cb360b496dc85336c Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= -Date: Tue, 16 Dec 2014 15:11:19 +0100 -Subject: [PATCH spice-gtk 1/6] session: keep main channel on reconnect - -For legacy reasons, spice-gtk should keep at least one channel in the -session when reconnecting (clients may decide that the session is -disconnected when all channels are gone). The most obvious is to -keep and reuse the main channel. ---- - gtk/spice-session.c | 30 +++++++++++++++++------------- - 1 file changed, 17 insertions(+), 13 deletions(-) - -diff --git a/gtk/spice-session.c b/gtk/spice-session.c -index c80c8dc..7971f3c 100644 ---- a/gtk/spice-session.c -+++ b/gtk/spice-session.c -@@ -258,19 +258,23 @@ static void spice_session_init(SpiceSession *session) - } - - static void --session_disconnect(SpiceSession *self) -+session_disconnect(SpiceSession *self, gboolean keep_main) - { - SpiceSessionPrivate *s; - struct channel *item; - RingItem *ring, *next; - - s = self->priv; -- s->cmain = NULL; - - for (ring = ring_get_head(&s->channels); ring != NULL; ring = next) { - next = ring_next(&s->channels, ring); - item = SPICE_CONTAINEROF(ring, struct channel, link); -- spice_session_channel_destroy(self, item->channel); -+ -+ if (keep_main && item->channel == s->cmain) { -+ spice_channel_disconnect(item->channel, SPICE_CHANNEL_NONE); -+ } else { -+ spice_session_channel_destroy(self, item->channel); -+ } - } - - s->connection_id = 0; -@@ -290,7 +294,7 @@ spice_session_dispose(GObject *gobject) - - SPICE_DEBUG("session dispose"); - -- session_disconnect(session); -+ session_disconnect(session, FALSE); - - g_warn_if_fail(s->migration == NULL); - g_warn_if_fail(s->migration_left == NULL); -@@ -1410,12 +1414,12 @@ gboolean spice_session_connect(SpiceSession *session) - s = session->priv; - g_return_val_if_fail(!s->disconnecting, FALSE); - -- session_disconnect(session); -+ session_disconnect(session, TRUE); - - s->client_provided_sockets = FALSE; - -- g_warn_if_fail(s->cmain == NULL); -- s->cmain = spice_channel_new(session, SPICE_CHANNEL_MAIN, 0); -+ if (s->cmain == NULL) -+ s->cmain = spice_channel_new(session, SPICE_CHANNEL_MAIN, 0); - - glz_decoder_window_clear(s->glz_window); - return spice_channel_connect(s->cmain); -@@ -1445,12 +1449,12 @@ gboolean spice_session_open_fd(SpiceSession *session, int fd) - s = session->priv; - g_return_val_if_fail(!s->disconnecting, FALSE); - -- session_disconnect(session); -+ session_disconnect(session, TRUE); - - s->client_provided_sockets = TRUE; - -- g_warn_if_fail(s->cmain == NULL); -- s->cmain = spice_channel_new(session, SPICE_CHANNEL_MAIN, 0); -+ if (s->cmain == NULL) -+ s->cmain = spice_channel_new(session, SPICE_CHANNEL_MAIN, 0); - - glz_decoder_window_clear(s->glz_window); - return spice_channel_open_fd(s->cmain, fd); -@@ -1602,7 +1606,7 @@ void spice_session_abort_migration(SpiceSession *session) - end: - g_list_free(s->migration_left); - s->migration_left = NULL; -- session_disconnect(s->migration); -+ session_disconnect(s->migration, FALSE); - g_object_unref(s->migration); - s->migration = NULL; - -@@ -1642,7 +1646,7 @@ void spice_session_channel_migrate(SpiceSession *session, SpiceChannel *channel) - - if (g_list_length(s->migration_left) == 0) { - CHANNEL_DEBUG(channel, "migration: all channel migrated, success"); -- session_disconnect(s->migration); -+ session_disconnect(s->migration, FALSE); - g_object_unref(s->migration); - s->migration = NULL; - spice_session_set_migration_state(session, SPICE_SESSION_MIGRATION_NONE); -@@ -1749,7 +1753,7 @@ static gboolean session_disconnect_idle(SpiceSession *self) - { - SpiceSessionPrivate *s = self->priv; - -- session_disconnect(self); -+ session_disconnect(self, FALSE); - s->disconnecting = 0; - - g_object_unref(self); --- -2.1.0 - diff --git a/0002-channel-factorize-failed-authentication.patch b/0002-channel-factorize-failed-authentication.patch deleted file mode 100644 index 27e318c..0000000 --- a/0002-channel-factorize-failed-authentication.patch +++ /dev/null @@ -1,126 +0,0 @@ -From 21acda1c51241ff2cce013509900e0a8373d409d Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= -Date: Tue, 16 Dec 2014 14:24:24 +0100 -Subject: [PATCH spice-gtk 2/6] channel: factorize failed authentication - -There are a few things that should be common to all wrong authentication -cases. Let's put them all in the same function. ---- - gtk/spice-channel-priv.h | 1 + - gtk/spice-channel.c | 62 ++++++++++++++++++++++++++---------------------- - 2 files changed, 34 insertions(+), 29 deletions(-) - -diff --git a/gtk/spice-channel-priv.h b/gtk/spice-channel-priv.h -index 07012db..671e9fe 100644 ---- a/gtk/spice-channel-priv.h -+++ b/gtk/spice-channel-priv.h -@@ -66,6 +66,7 @@ struct _SpiceMsgIn { - - enum spice_channel_state { - SPICE_CHANNEL_STATE_UNCONNECTED = 0, -+ SPICE_CHANNEL_STATE_FAILED_AUTHENTICATION, - SPICE_CHANNEL_STATE_CONNECTING, - SPICE_CHANNEL_STATE_READY, - SPICE_CHANNEL_STATE_SWITCHING, -diff --git a/gtk/spice-channel.c b/gtk/spice-channel.c -index ea0ed34..d0e6df8 100644 ---- a/gtk/spice-channel.c -+++ b/gtk/spice-channel.c -@@ -1052,6 +1052,29 @@ static void spice_channel_send_spice_ticket(SpiceChannel *channel) - } - - /* coroutine context */ -+static void spice_channel_failed_authentication(SpiceChannel *channel) -+{ -+ SpiceChannelPrivate *c = channel->priv; -+ -+ if (c->auth_needs_username_and_password) -+ g_set_error_literal(&c->error, -+ SPICE_CLIENT_ERROR, -+ SPICE_CLIENT_ERROR_AUTH_NEEDS_PASSWORD_AND_USERNAME, -+ _("Authentication failed: password and username are required")); -+ else -+ g_set_error_literal(&c->error, -+ SPICE_CLIENT_ERROR, -+ SPICE_CLIENT_ERROR_AUTH_NEEDS_PASSWORD, -+ _("Authentication failed: password is required")); -+ -+ c->state = SPICE_CHANNEL_STATE_FAILED_AUTHENTICATION; -+ -+ g_coroutine_signal_emit(channel, signals[SPICE_CHANNEL_EVENT], 0, SPICE_CHANNEL_ERROR_AUTH); -+ -+ c->has_error = TRUE; /* force disconnect */ -+} -+ -+/* coroutine context */ - static void spice_channel_recv_auth(SpiceChannel *channel) - { - SpiceChannelPrivate *c = channel->priv; -@@ -1068,7 +1091,7 @@ static void spice_channel_recv_auth(SpiceChannel *channel) - - if (link_res != SPICE_LINK_ERR_OK) { - CHANNEL_DEBUG(channel, "link result: reply %d", link_res); -- g_coroutine_signal_emit(channel, signals[SPICE_CHANNEL_EVENT], 0, SPICE_CHANNEL_ERROR_AUTH); -+ spice_channel_failed_authentication(channel); - return; - } - -@@ -1310,22 +1333,6 @@ spice_channel_gather_sasl_credentials(SpiceChannel *channel, - #define SASL_MAX_MECHNAME_LEN 100 - #define SASL_MAX_DATA_LEN (1024 * 1024) - --static void spice_channel_set_detailed_authentication_error(SpiceChannel *channel) --{ -- SpiceChannelPrivate *c = channel->priv; -- -- if (c->auth_needs_username_and_password) -- g_set_error_literal(&c->error, -- SPICE_CLIENT_ERROR, -- SPICE_CLIENT_ERROR_AUTH_NEEDS_PASSWORD_AND_USERNAME, -- _("Authentication failed: password and username are required")); -- else -- g_set_error_literal(&c->error, -- SPICE_CLIENT_ERROR, -- SPICE_CLIENT_ERROR_AUTH_NEEDS_PASSWORD, -- _("Authentication failed: password is required")); --} -- - /* Perform the SASL authentication process - */ - static gboolean spice_channel_perform_auth_sasl(SpiceChannel *channel) -@@ -1644,23 +1651,20 @@ restart: - complete: - CHANNEL_DEBUG(channel, "%s", "SASL authentication complete"); - spice_channel_read(channel, &len, sizeof(len)); -- if (len != SPICE_LINK_ERR_OK) { -- spice_channel_set_detailed_authentication_error(channel); -- g_coroutine_signal_emit(channel, signals[SPICE_CHANNEL_EVENT], 0, SPICE_CHANNEL_ERROR_AUTH); -+ if (len == SPICE_LINK_ERR_OK) { -+ ret = TRUE; -+ /* This must come *after* check-auth-result, because the former -+ * is defined to be sent unencrypted, and setting saslconn turns -+ * on the SSF layer encryption processing */ -+ c->sasl_conn = saslconn; -+ goto cleanup; - } -- ret = len == SPICE_LINK_ERR_OK; -- /* This must come *after* check-auth-result, because the former -- * is defined to be sent unencrypted, and setting saslconn turns -- * on the SSF layer encryption processing */ -- c->sasl_conn = saslconn; -- goto cleanup; - - error: - if (saslconn) - sasl_dispose(&saslconn); -- spice_channel_set_detailed_authentication_error(channel); -- g_coroutine_signal_emit(channel, signals[SPICE_CHANNEL_EVENT], 0, SPICE_CHANNEL_ERROR_AUTH); -- c->has_error = TRUE; /* force disconnect */ -+ -+ spice_channel_failed_authentication(channel); - ret = FALSE; - - cleanup: --- -2.1.0 - diff --git a/0003-channel-do-not-enter-channel-iterate-on-early-error.patch b/0003-channel-do-not-enter-channel-iterate-on-early-error.patch deleted file mode 100644 index e67494e..0000000 --- a/0003-channel-do-not-enter-channel-iterate-on-early-error.patch +++ /dev/null @@ -1,129 +0,0 @@ -From 14ce8b8dabf47ec208148a83490503084445ba1d Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= -Date: Tue, 16 Dec 2014 17:19:00 +0100 -Subject: [PATCH spice-gtk 3/6] channel: do not enter channel iterate on early - error - -There is no need to enter channel_iterate() if we found an early -connection steps error. ---- - gtk/spice-channel.c | 32 +++++++++++++++++--------------- - 1 file changed, 17 insertions(+), 15 deletions(-) - -diff --git a/gtk/spice-channel.c b/gtk/spice-channel.c -index d0e6df8..524a13e 100644 ---- a/gtk/spice-channel.c -+++ b/gtk/spice-channel.c -@@ -1075,7 +1075,7 @@ static void spice_channel_failed_authentication(SpiceChannel *channel) - } - - /* coroutine context */ --static void spice_channel_recv_auth(SpiceChannel *channel) -+static gboolean spice_channel_recv_auth(SpiceChannel *channel) - { - SpiceChannelPrivate *c = channel->priv; - uint32_t link_res; -@@ -1086,13 +1086,13 @@ static void spice_channel_recv_auth(SpiceChannel *channel) - CHANNEL_DEBUG(channel, "incomplete auth reply (%d/%" G_GSIZE_FORMAT ")", - rc, sizeof(link_res)); - g_coroutine_signal_emit(channel, signals[SPICE_CHANNEL_EVENT], 0, SPICE_CHANNEL_ERROR_LINK); -- return; -+ return FALSE; - } - - if (link_res != SPICE_LINK_ERR_OK) { - CHANNEL_DEBUG(channel, "link result: reply %d", link_res); - spice_channel_failed_authentication(channel); -- return; -+ return FALSE; - } - - c->state = SPICE_CHANNEL_STATE_READY; -@@ -1105,6 +1105,8 @@ static void spice_channel_recv_auth(SpiceChannel *channel) - - if (c->state != SPICE_CHANNEL_STATE_MIGRATING) - spice_channel_up(channel); -+ -+ return TRUE; - } - - G_GNUC_INTERNAL -@@ -1678,14 +1680,14 @@ cleanup: - #endif /* HAVE_SASL */ - - /* coroutine context */ --static void spice_channel_recv_link_msg(SpiceChannel *channel, gboolean *switch_tls) -+static gboolean spice_channel_recv_link_msg(SpiceChannel *channel, gboolean *switch_tls) - { - SpiceChannelPrivate *c; - int rc, num_caps, i; - uint32_t *caps; - -- g_return_if_fail(channel != NULL); -- g_return_if_fail(channel->priv != NULL); -+ g_return_val_if_fail(channel != NULL, FALSE); -+ g_return_val_if_fail(channel->priv != NULL, FALSE); - - c = channel->priv; - -@@ -1696,7 +1698,7 @@ static void spice_channel_recv_link_msg(SpiceChannel *channel, gboolean *switch_ - g_critical("%s: %s: incomplete link reply (%d/%d)", - c->name, __FUNCTION__, rc, c->peer_hdr.size); - g_coroutine_signal_emit(channel, signals[SPICE_CHANNEL_EVENT], 0, SPICE_CHANNEL_ERROR_LINK); -- return; -+ return FALSE; - } - switch (c->peer_msg->error) { - case SPICE_LINK_ERR_OK: -@@ -1705,7 +1707,7 @@ static void spice_channel_recv_link_msg(SpiceChannel *channel, gboolean *switch_ - case SPICE_LINK_ERR_NEED_SECURED: - *switch_tls = true; - CHANNEL_DEBUG(channel, "switching to tls"); -- return; -+ return FALSE; - default: - g_warning("%s: %s: unhandled error %d", - c->name, __FUNCTION__, c->peer_msg->error); -@@ -1744,7 +1746,8 @@ static void spice_channel_recv_link_msg(SpiceChannel *channel, gboolean *switch_ - CHANNEL_DEBUG(channel, "Choosing SASL mechanism"); - auth.auth_mechanism = SPICE_COMMON_CAP_AUTH_SASL; - spice_channel_write(channel, &auth, sizeof(auth)); -- spice_channel_perform_auth_sasl(channel); -+ if (!spice_channel_perform_auth_sasl(channel)) -+ return FALSE; - } else - #endif - if (spice_channel_test_common_capability(channel, SPICE_COMMON_CAP_AUTH_SPICE)) { -@@ -1759,11 +1762,12 @@ static void spice_channel_recv_link_msg(SpiceChannel *channel, gboolean *switch_ - c->use_mini_header = spice_channel_test_common_capability(channel, - SPICE_COMMON_CAP_MINI_HEADER); - CHANNEL_DEBUG(channel, "use mini header: %d", c->use_mini_header); -- return; -+ return TRUE; - - error: - SPICE_CHANNEL_GET_CLASS(channel)->channel_disconnect(channel); - g_coroutine_signal_emit(channel, signals[SPICE_CHANNEL_EVENT], 0, SPICE_CHANNEL_ERROR_LINK); -+ return FALSE; - } - - /* system context */ -@@ -2411,12 +2415,10 @@ connected: - } - - spice_channel_send_link(channel); -- if (spice_channel_recv_link_hdr(channel, &switch_protocol) == FALSE) -- goto cleanup; -- spice_channel_recv_link_msg(channel, &switch_tls); -- if (switch_tls) -+ if (!spice_channel_recv_link_hdr(channel, &switch_protocol) || -+ !spice_channel_recv_link_msg(channel, &switch_tls) || -+ !spice_channel_recv_auth(channel)) - goto cleanup; -- spice_channel_recv_auth(channel); - - while (spice_channel_iterate(channel)) - ; --- -2.1.0 - diff --git a/0004-channel-introduce-SPICE_CHANNEL_STATE_RECONNECTING.patch b/0004-channel-introduce-SPICE_CHANNEL_STATE_RECONNECTING.patch deleted file mode 100644 index 8fce97f..0000000 --- a/0004-channel-introduce-SPICE_CHANNEL_STATE_RECONNECTING.patch +++ /dev/null @@ -1,107 +0,0 @@ -From 9969d042bbedfddfb9589bdcc05d877a3bd1fa84 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= -Date: Tue, 16 Dec 2014 17:56:37 +0100 -Subject: [PATCH spice-gtk 4/6] channel: introduce - SPICE_CHANNEL_STATE_RECONNECTING - -Add a new state that permits reconnection, because it's < CONNECTING. -It also simplifies some code by removing unneeded variables in -spice_channel_coroutine(): the channel.tls and session.protocol version -properties are already modified during initial connection steps. ---- - gtk/spice-channel-priv.h | 1 + - gtk/spice-channel.c | 19 ++++++++----------- - 2 files changed, 9 insertions(+), 11 deletions(-) - -diff --git a/gtk/spice-channel-priv.h b/gtk/spice-channel-priv.h -index 671e9fe..bd7f490 100644 ---- a/gtk/spice-channel-priv.h -+++ b/gtk/spice-channel-priv.h -@@ -67,6 +67,7 @@ struct _SpiceMsgIn { - enum spice_channel_state { - SPICE_CHANNEL_STATE_UNCONNECTED = 0, - SPICE_CHANNEL_STATE_FAILED_AUTHENTICATION, -+ SPICE_CHANNEL_STATE_RECONNECTING, - SPICE_CHANNEL_STATE_CONNECTING, - SPICE_CHANNEL_STATE_READY, - SPICE_CHANNEL_STATE_SWITCHING, -diff --git a/gtk/spice-channel.c b/gtk/spice-channel.c -index 524a13e..4081e0b 100644 ---- a/gtk/spice-channel.c -+++ b/gtk/spice-channel.c -@@ -1183,12 +1183,11 @@ static void spice_channel_send_link(SpiceChannel *channel) - } - - /* coroutine context */ --static gboolean spice_channel_recv_link_hdr(SpiceChannel *channel, gboolean *switch_protocol) -+static gboolean spice_channel_recv_link_hdr(SpiceChannel *channel) - { - SpiceChannelPrivate *c = channel->priv; - int rc; - -- *switch_protocol = FALSE; - rc = spice_channel_read(channel, &c->peer_hdr, sizeof(c->peer_hdr)); - if (rc != sizeof(c->peer_hdr)) { - g_warning("incomplete link header (%d/%" G_GSIZE_FORMAT ")", -@@ -1221,7 +1220,7 @@ error: - incompatible. Try with the oldest protocol in this case: */ - if (c->link_hdr.major_version != 1) { - SPICE_DEBUG("%s: error, switching to protocol 1 (spice 0.4)", c->name); -- *switch_protocol = TRUE; -+ c->state = SPICE_CHANNEL_STATE_RECONNECTING; - g_object_set(c->session, "protocol", 1, NULL); - return FALSE; - } -@@ -1680,7 +1679,7 @@ cleanup: - #endif /* HAVE_SASL */ - - /* coroutine context */ --static gboolean spice_channel_recv_link_msg(SpiceChannel *channel, gboolean *switch_tls) -+static gboolean spice_channel_recv_link_msg(SpiceChannel *channel) - { - SpiceChannelPrivate *c; - int rc, num_caps, i; -@@ -1705,8 +1704,9 @@ static gboolean spice_channel_recv_link_msg(SpiceChannel *channel, gboolean *swi - /* nothing */ - break; - case SPICE_LINK_ERR_NEED_SECURED: -- *switch_tls = true; -+ c->state = SPICE_CHANNEL_STATE_RECONNECTING; - CHANNEL_DEBUG(channel, "switching to tls"); -+ c->tls = TRUE; - return FALSE; - default: - g_warning("%s: %s: unhandled error %d", -@@ -2280,8 +2280,6 @@ static void *spice_channel_coroutine(void *data) - SpiceChannelPrivate *c = channel->priv; - guint verify; - int rc, delay_val = 1; -- gboolean switch_tls = FALSE; -- gboolean switch_protocol = FALSE; - /* When some other SSL/TLS version becomes obsolete, add it to this - * variable. */ - long ssl_options = SSL_OP_NO_SSLv2 | SSL_OP_NO_SSLv3; -@@ -2415,8 +2413,8 @@ connected: - } - - spice_channel_send_link(channel); -- if (!spice_channel_recv_link_hdr(channel, &switch_protocol) || -- !spice_channel_recv_link_msg(channel, &switch_tls) || -+ if (!spice_channel_recv_link_hdr(channel) || -+ !spice_channel_recv_link_msg(channel) || - !spice_channel_recv_auth(channel)) - goto cleanup; - -@@ -2428,8 +2426,7 @@ cleanup: - - SPICE_CHANNEL_GET_CLASS(channel)->channel_disconnect(channel); - -- if (switch_protocol || (switch_tls && !c->tls)) { -- c->tls = switch_tls; -+ if (c->state == SPICE_CHANNEL_STATE_RECONNECTING) { - spice_channel_connect(channel); - g_object_unref(channel); - } else --- -2.1.0 - diff --git a/0005-channel-throw-auth-error-when-coroutine-ends.patch b/0005-channel-throw-auth-error-when-coroutine-ends.patch deleted file mode 100644 index 607170b..0000000 --- a/0005-channel-throw-auth-error-when-coroutine-ends.patch +++ /dev/null @@ -1,54 +0,0 @@ -From 201a8c2e36e250f49d5c729b11563730dfa4c484 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= -Date: Tue, 16 Dec 2014 18:04:53 +0100 -Subject: [PATCH spice-gtk 5/6] channel: throw auth error when coroutine ends - -It is common that clients attempt to reconnect during the -SPICE_CHANNEL_ERROR_AUTH callback. However, the channel must exit -the coroutine first before reconnection can happen. ---- - gtk/spice-channel.c | 7 ++++--- - 1 file changed, 4 insertions(+), 3 deletions(-) - -diff --git a/gtk/spice-channel.c b/gtk/spice-channel.c -index 4081e0b..c00bb42 100644 ---- a/gtk/spice-channel.c -+++ b/gtk/spice-channel.c -@@ -1069,8 +1069,6 @@ static void spice_channel_failed_authentication(SpiceChannel *channel) - - c->state = SPICE_CHANNEL_STATE_FAILED_AUTHENTICATION; - -- g_coroutine_signal_emit(channel, signals[SPICE_CHANNEL_EVENT], 0, SPICE_CHANNEL_ERROR_AUTH); -- - c->has_error = TRUE; /* force disconnect */ - } - -@@ -2182,6 +2180,9 @@ static gboolean spice_channel_delayed_unref(gpointer data) - - g_return_val_if_fail(c->coroutine.coroutine.exited == TRUE, FALSE); - -+ if (c->state == SPICE_CHANNEL_STATE_FAILED_AUTHENTICATION) -+ g_coroutine_signal_emit(channel, signals[SPICE_CHANNEL_EVENT], 0, SPICE_CHANNEL_ERROR_AUTH); -+ - g_object_unref(G_OBJECT(data)); - - return FALSE; -@@ -2458,6 +2459,7 @@ static gboolean connect_delayed(gpointer data) - return FALSE; - } - -+/* any context */ - static gboolean channel_connect(SpiceChannel *channel) - { - SpiceChannelPrivate *c = channel->priv; -@@ -2639,7 +2641,6 @@ static void channel_disconnect(SpiceChannel *channel) - if (c->state == SPICE_CHANNEL_STATE_READY) - g_coroutine_signal_emit(channel, signals[SPICE_CHANNEL_EVENT], 0, SPICE_CHANNEL_CLOSED); - -- c->state = SPICE_CHANNEL_STATE_UNCONNECTED; - spice_channel_reset(channel, FALSE); - - g_return_if_fail(SPICE_IS_CHANNEL(channel)); --- -2.1.0 - diff --git a/0006-channel-clear-channel-error-after-auth-error.patch b/0006-channel-clear-channel-error-after-auth-error.patch deleted file mode 100644 index f34b7ac..0000000 --- a/0006-channel-clear-channel-error-after-auth-error.patch +++ /dev/null @@ -1,37 +0,0 @@ -From 43fc492149767bdade118d586572a2ce5abe63fc Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= -Date: Tue, 16 Dec 2014 18:30:02 +0100 -Subject: [PATCH spice-gtk 6/6] channel: clear channel error after auth error - -When entered authentication details are wrong, spice-gtk will reset -channel error, which will result in the following warning: - -(remote-viewer:20753): GLib-WARNING **: GError set over the top of a -previous GError or uninitialized memory. -This indicates a bug in someone's code. You must ensure an error is NULL -before it's set. - -Clear channel error after reporting authentication error. ---- - gtk/spice-channel.c | 4 +++- - 1 file changed, 3 insertions(+), 1 deletion(-) - -diff --git a/gtk/spice-channel.c b/gtk/spice-channel.c -index c00bb42..fb7b0d5 100644 ---- a/gtk/spice-channel.c -+++ b/gtk/spice-channel.c -@@ -2180,8 +2180,10 @@ static gboolean spice_channel_delayed_unref(gpointer data) - - g_return_val_if_fail(c->coroutine.coroutine.exited == TRUE, FALSE); - -- if (c->state == SPICE_CHANNEL_STATE_FAILED_AUTHENTICATION) -+ if (c->state == SPICE_CHANNEL_STATE_FAILED_AUTHENTICATION) { - g_coroutine_signal_emit(channel, signals[SPICE_CHANNEL_EVENT], 0, SPICE_CHANNEL_ERROR_AUTH); -+ g_clear_error(&c->error); -+ } - - g_object_unref(G_OBJECT(data)); - --- -2.1.0 - diff --git a/0007-usbredir-prevent-crash-when-calling-without-host.patch b/0007-usbredir-prevent-crash-when-calling-without-host.patch deleted file mode 100644 index 87c6d88..0000000 --- a/0007-usbredir-prevent-crash-when-calling-without-host.patch +++ /dev/null @@ -1,70 +0,0 @@ -From 5b252b0f499601bcf387c02a4dd35d27ed34c07c Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= -Date: Sat, 20 Dec 2014 01:03:09 +0100 -Subject: [PATCH spice-gtk] usbredir: prevent crash when calling without host - -Quite annoyingly, usbredir doesn't have public functions arguments -preconditions, and will weirdly run the flush callback during -initialization. - -With 201a8c2 change, the channel state is kept as it is when calling -reset. This will result in the following crash that was avoided before -thanks to a precondition on the channel to be ready. Adding a further -precondition check on priv->host != NULL solves the following crash -during reset(): - -Program received signal SIGSEGV, Segmentation fault. -usbredirhost_write_guest_data (host=0x0) at usbredirhost.c:868 -868 return -usbredirparser_do_write(host->parser); -(gdb) bt - #0 0x00007fffb2ed24d0 in usbredirhost_write_guest_data (host=0x0) at - #usbredirhost.c:868 - #1 0x00007fffc81d463b in - #usbredir_write_flush_callback (user_data=0x2d95250) at - #channel-usbredir.c:469 - #2 0x00007fffb2ed23f9 in usbredirhost_open_full (usb_ctx=0x2baba70, - #usb_dev_handle=0x0, log_func=, - #read_guest_data_func=0x7fffc81d482c , - #write_guest_data_func=0x7fffc81d4952 , - #flush_writes_func=0x7fffc81d45c3 , - #alloc_lock_func=0x7fffc81d49f1 , - #lock_func=0x7fffc81d4a41 , - #unlock_func=0x7fffc81d4a86 , - #free_lock_func=0x7fffc81d4acb , - #func_priv=0x2d95250, version=0x7fffc8283dcf "spice-gtk - #0.27.7-89db-dirty", verbose=4, flags=1) at usbredirhost.c:748 - #3 0x00007fffc81d3b22 in - #spice_usbredir_channel_set_context (channel=0x2d95250 - #[SpiceUsbredirChannel], context=0x2baba70) at channel-usbredir.c:212 - #4 0x00007fffc81d37a9 in spice_usbredir_channel_reset (c=0x2d95250 - #[SpiceUsbredirChannel], migrating=0) - at channel-usbredir.c:125 - #5 0x00007fffc81b7f8d in spice_channel_reset (channel=0x2d95250 - [SpiceUsbredirChannel], migrating=0) - at spice-channel.c:2688 - #6 0x00007fffc81b8057 in channel_disconnect (channel=0x2d95250 - [SpiceUsbredirChannel]) at spice-channel.c:2706 - #7 0x00007fffc81b7559 in - spice_channel_coroutine (data=0x2d95250) at spice-channel.c:2490 ---- - gtk/channel-usbredir.c | 3 +++ - 1 file changed, 3 insertions(+) - -diff --git a/gtk/channel-usbredir.c b/gtk/channel-usbredir.c -index 5238566..b1a91fb 100644 ---- a/gtk/channel-usbredir.c -+++ b/gtk/channel-usbredir.c -@@ -466,6 +466,9 @@ static void usbredir_write_flush_callback(void *user_data) - SPICE_CHANNEL_STATE_READY) - return; - -+ if (!priv->host) -+ return; -+ - usbredirhost_write_guest_data(priv->host); - } - --- -2.1.0 - diff --git a/0008-channel-delay-event-report-to-after-coroutine-exit.patch b/0008-channel-delay-event-report-to-after-coroutine-exit.patch deleted file mode 100644 index 00b61fa..0000000 --- a/0008-channel-delay-event-report-to-after-coroutine-exit.patch +++ /dev/null @@ -1,187 +0,0 @@ -From 940c5f59f97861a33010c1fde5d8bce38d9f6c68 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= -Date: Tue, 13 Jan 2015 14:51:31 +0100 -Subject: [PATCH spice-gtk 1/3] channel: delay event report to after coroutine - exit - -Move to a common place error reporting, after the coroutine exits. ---- - gtk/spice-channel-priv.h | 3 ++- - gtk/spice-channel.c | 41 ++++++++++++++++++++++------------------- - 2 files changed, 24 insertions(+), 20 deletions(-) - -diff --git a/gtk/spice-channel-priv.h b/gtk/spice-channel-priv.h -index bd7f490..d70cf86 100644 ---- a/gtk/spice-channel-priv.h -+++ b/gtk/spice-channel-priv.h -@@ -66,7 +66,6 @@ struct _SpiceMsgIn { - - enum spice_channel_state { - SPICE_CHANNEL_STATE_UNCONNECTED = 0, -- SPICE_CHANNEL_STATE_FAILED_AUTHENTICATION, - SPICE_CHANNEL_STATE_RECONNECTING, - SPICE_CHANNEL_STATE_CONNECTING, - SPICE_CHANNEL_STATE_READY, -@@ -110,6 +109,8 @@ struct _SpiceChannelPrivate { - - char name[16]; - enum spice_channel_state state; -+ SpiceChannelEvent event; -+ - spice_parse_channel_func_t parser; - SpiceMessageMarshallers *marshallers; - guint channel_watch; -diff --git a/gtk/spice-channel.c b/gtk/spice-channel.c -index fb7b0d5..204b250 100644 ---- a/gtk/spice-channel.c -+++ b/gtk/spice-channel.c -@@ -1067,7 +1067,7 @@ static void spice_channel_failed_authentication(SpiceChannel *channel) - SPICE_CLIENT_ERROR_AUTH_NEEDS_PASSWORD, - _("Authentication failed: password is required")); - -- c->state = SPICE_CHANNEL_STATE_FAILED_AUTHENTICATION; -+ c->event = SPICE_CHANNEL_ERROR_AUTH; - - c->has_error = TRUE; /* force disconnect */ - } -@@ -1083,7 +1083,7 @@ static gboolean spice_channel_recv_auth(SpiceChannel *channel) - if (rc != sizeof(link_res)) { - CHANNEL_DEBUG(channel, "incomplete auth reply (%d/%" G_GSIZE_FORMAT ")", - rc, sizeof(link_res)); -- g_coroutine_signal_emit(channel, signals[SPICE_CHANNEL_EVENT], 0, SPICE_CHANNEL_ERROR_LINK); -+ c->event = SPICE_CHANNEL_ERROR_LINK; - return FALSE; - } - -@@ -1223,7 +1223,7 @@ error: - return FALSE; - } - -- g_coroutine_signal_emit(channel, signals[SPICE_CHANNEL_EVENT], 0, SPICE_CHANNEL_ERROR_LINK); -+ c->event = SPICE_CHANNEL_ERROR_LINK; - return FALSE; - } - -@@ -1694,8 +1694,7 @@ static gboolean spice_channel_recv_link_msg(SpiceChannel *channel) - if (c->peer_pos != c->peer_hdr.size) { - g_critical("%s: %s: incomplete link reply (%d/%d)", - c->name, __FUNCTION__, rc, c->peer_hdr.size); -- g_coroutine_signal_emit(channel, signals[SPICE_CHANNEL_EVENT], 0, SPICE_CHANNEL_ERROR_LINK); -- return FALSE; -+ goto error; - } - switch (c->peer_msg->error) { - case SPICE_LINK_ERR_OK: -@@ -1764,7 +1763,7 @@ static gboolean spice_channel_recv_link_msg(SpiceChannel *channel) - - error: - SPICE_CHANNEL_GET_CLASS(channel)->channel_disconnect(channel); -- g_coroutine_signal_emit(channel, signals[SPICE_CHANNEL_EVENT], 0, SPICE_CHANNEL_ERROR_LINK); -+ c->event = SPICE_CHANNEL_ERROR_LINK; - return FALSE; - } - -@@ -2154,12 +2153,15 @@ static gboolean spice_channel_iterate(SpiceChannel *channel) - /* We don't want to report an error if the socket was closed gracefully - * on the other end (VM shutdown) */ - ret = g_socket_condition_check(c->sock, G_IO_IN | G_IO_ERR | G_IO_HUP); -+ - if (ret & (G_IO_ERR|G_IO_HUP)) { - CHANNEL_DEBUG(channel, "channel got error"); -+ - if (c->state > SPICE_CHANNEL_STATE_CONNECTING) { -- g_coroutine_signal_emit(channel, signals[SPICE_CHANNEL_EVENT], 0, -- c->state == SPICE_CHANNEL_STATE_READY ? -- SPICE_CHANNEL_ERROR_IO : SPICE_CHANNEL_ERROR_LINK); -+ if (c->state == SPICE_CHANNEL_STATE_READY) -+ c->event = SPICE_CHANNEL_ERROR_IO; -+ else -+ c->event = SPICE_CHANNEL_ERROR_LINK; - } - } - return FALSE; -@@ -2180,8 +2182,9 @@ static gboolean spice_channel_delayed_unref(gpointer data) - - g_return_val_if_fail(c->coroutine.coroutine.exited == TRUE, FALSE); - -- if (c->state == SPICE_CHANNEL_STATE_FAILED_AUTHENTICATION) { -- g_coroutine_signal_emit(channel, signals[SPICE_CHANNEL_EVENT], 0, SPICE_CHANNEL_ERROR_AUTH); -+ if (c->event != SPICE_CHANNEL_NONE) { -+ g_coroutine_signal_emit(channel, signals[SPICE_CHANNEL_EVENT], 0, c->event); -+ c->event = SPICE_CHANNEL_NONE; - g_clear_error(&c->error); - } - -@@ -2292,13 +2295,13 @@ static void *spice_channel_coroutine(void *data) - if (spice_session_get_client_provided_socket(c->session)) { - if (c->fd < 0) { - g_critical("fd not provided!"); -- g_coroutine_signal_emit(channel, signals[SPICE_CHANNEL_EVENT], 0, SPICE_CHANNEL_ERROR_CONNECT); -+ c->event = SPICE_CHANNEL_ERROR_CONNECT; - goto cleanup; - } - - if (!(c->sock = g_socket_new_from_fd(c->fd, NULL))) { - CHANNEL_DEBUG(channel, "Failed to open socket from fd %d", c->fd); -- g_coroutine_signal_emit(channel, signals[SPICE_CHANNEL_EVENT], 0, SPICE_CHANNEL_ERROR_CONNECT); -+ c->event = SPICE_CHANNEL_ERROR_CONNECT; - goto cleanup; - } - -@@ -2318,8 +2321,7 @@ reconnect: - goto reconnect; - } else { - CHANNEL_DEBUG(channel, "Connect error"); -- g_coroutine_signal_emit(channel, signals[SPICE_CHANNEL_EVENT], 0, SPICE_CHANNEL_ERROR_CONNECT); -- g_clear_error(&c->error); -+ c->event = SPICE_CHANNEL_ERROR_CONNECT; - goto cleanup; - } - } -@@ -2331,7 +2333,7 @@ reconnect: - c->ctx = SSL_CTX_new(SSLv23_method()); - if (c->ctx == NULL) { - g_critical("SSL_CTX_new failed"); -- g_coroutine_signal_emit(channel, signals[SPICE_CHANNEL_EVENT], 0, SPICE_CHANNEL_ERROR_TLS); -+ c->event = SPICE_CHANNEL_ERROR_TLS; - goto cleanup; - } - -@@ -2347,7 +2349,7 @@ reconnect: - g_warning("only pubkey active"); - verify = SPICE_SESSION_VERIFY_PUBKEY; - } else { -- g_coroutine_signal_emit(channel, signals[SPICE_CHANNEL_EVENT], 0, SPICE_CHANNEL_ERROR_TLS); -+ c->event = SPICE_CHANNEL_ERROR_TLS; - goto cleanup; - } - } -@@ -2365,7 +2367,7 @@ reconnect: - c->ssl = SSL_new(c->ctx); - if (c->ssl == NULL) { - g_critical("SSL_new failed"); -- g_coroutine_signal_emit(channel, signals[SPICE_CHANNEL_EVENT], 0, SPICE_CHANNEL_ERROR_TLS); -+ c->event = SPICE_CHANNEL_ERROR_TLS; - goto cleanup; - } - -@@ -2394,7 +2396,7 @@ ssl_reconnect: - } else { - g_warning("%s: SSL_connect: %s", - c->name, ERR_error_string(rc, NULL)); -- g_coroutine_signal_emit(channel, signals[SPICE_CHANNEL_EVENT], 0, SPICE_CHANNEL_ERROR_TLS); -+ c->event = SPICE_CHANNEL_ERROR_TLS; - goto cleanup; - } - } -@@ -2430,6 +2432,7 @@ cleanup: - SPICE_CHANNEL_GET_CLASS(channel)->channel_disconnect(channel); - - if (c->state == SPICE_CHANNEL_STATE_RECONNECTING) { -+ g_warn_if_fail(c->event == SPICE_CHANNEL_NONE); - spice_channel_connect(channel); - g_object_unref(channel); - } else --- -2.1.0 - diff --git a/0009-channel-reset-tls-state-when-client-calls-connect.patch b/0009-channel-reset-tls-state-when-client-calls-connect.patch deleted file mode 100644 index 921e6cf..0000000 --- a/0009-channel-reset-tls-state-when-client-calls-connect.patch +++ /dev/null @@ -1,82 +0,0 @@ -From 26b7767d4831be91ccc3c922276b04118f8b3277 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= -Date: Tue, 13 Jan 2015 17:26:18 +0100 -Subject: [PATCH spice-gtk 2/3] channel: reset tls state when client calls - connect - -The channel TLS state is kept during disconnection and reset, for -automatic reconnection and migrations reasons. However, when -spice_channel_connect() is called by client, it should first try -non-TLS connection. ---- - gtk/spice-channel.c | 12 +++++++----- - 1 file changed, 7 insertions(+), 5 deletions(-) - -diff --git a/gtk/spice-channel.c b/gtk/spice-channel.c -index 204b250..99065d3 100644 ---- a/gtk/spice-channel.c -+++ b/gtk/spice-channel.c -@@ -55,6 +55,7 @@ static void channel_disconnect(SpiceChannel *channel); - static void channel_reset(SpiceChannel *channel, gboolean migrating); - static void spice_channel_reset_capabilities(SpiceChannel *channel); - static void spice_channel_send_migration_handshake(SpiceChannel *channel); -+static gboolean channel_connect(SpiceChannel *channel, gboolean tls); - - /** - * SECTION:spice-channel -@@ -2433,7 +2434,7 @@ cleanup: - - if (c->state == SPICE_CHANNEL_STATE_RECONNECTING) { - g_warn_if_fail(c->event == SPICE_CHANNEL_NONE); -- spice_channel_connect(channel); -+ channel_connect(channel, c->tls); - g_object_unref(channel); - } else - g_idle_add(spice_channel_delayed_unref, data); -@@ -2465,7 +2466,7 @@ static gboolean connect_delayed(gpointer data) - } - - /* any context */ --static gboolean channel_connect(SpiceChannel *channel) -+static gboolean channel_connect(SpiceChannel *channel, gboolean tls) - { - SpiceChannelPrivate *c = channel->priv; - -@@ -2478,6 +2479,7 @@ static gboolean channel_connect(SpiceChannel *channel) - } - - c->state = SPICE_CHANNEL_STATE_CONNECTING; -+ c->tls = tls; - - if (spice_session_get_client_provided_socket(c->session)) { - if (c->fd == -1) { -@@ -2519,7 +2521,7 @@ gboolean spice_channel_connect(SpiceChannel *channel) - - g_return_val_if_fail(channel->priv->fd == -1, FALSE); - -- return channel_connect(channel); -+ return channel_connect(channel, FALSE); - } - - /** -@@ -2552,7 +2554,7 @@ gboolean spice_channel_open_fd(SpiceChannel *channel, int fd) - - c->fd = fd; - -- return channel_connect(channel); -+ return channel_connect(channel, FALSE); - } - - /* system or coroutine context */ -@@ -2651,7 +2653,7 @@ static void channel_disconnect(SpiceChannel *channel) - g_return_if_fail(SPICE_IS_CHANNEL(channel)); - - if (c->state == SPICE_CHANNEL_STATE_SWITCHING) { -- spice_channel_connect(channel); -+ channel_connect(channel, c->tls); - spice_session_set_migration_state(spice_channel_get_session(channel), - SPICE_SESSION_MIGRATION_NONE); - } --- -2.1.0 - diff --git a/0010-channel-reset-connection-state-on-error.patch b/0010-channel-reset-connection-state-on-error.patch deleted file mode 100644 index b5b4f3b..0000000 --- a/0010-channel-reset-connection-state-on-error.patch +++ /dev/null @@ -1,28 +0,0 @@ -From 61f70b689044ea53f4103e79a128af640c003f48 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= -Date: Tue, 13 Jan 2015 16:33:52 +0100 -Subject: [PATCH spice-gtk 3/3] channel: reset connection state on error - -Fix regression introduced in 6b475802, to permit reconnection on error, -the channel state must be < STATE_CONNECTING. Since the error is -reported after coroutine exits and channel is reset, the state can be -modified before throwing the error now. ---- - gtk/spice-channel.c | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/gtk/spice-channel.c b/gtk/spice-channel.c -index 99065d3..eec63b1 100644 ---- a/gtk/spice-channel.c -+++ b/gtk/spice-channel.c -@@ -2184,6 +2184,7 @@ static gboolean spice_channel_delayed_unref(gpointer data) - g_return_val_if_fail(c->coroutine.coroutine.exited == TRUE, FALSE); - - if (c->event != SPICE_CHANNEL_NONE) { -+ c->state = SPICE_CHANNEL_STATE_UNCONNECTED; - g_coroutine_signal_emit(channel, signals[SPICE_CHANNEL_EVENT], 0, c->event); - c->event = SPICE_CHANNEL_NONE; - g_clear_error(&c->error); --- -2.1.0 - diff --git a/sources b/sources index bc906d0..57cfd7d 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -722105732b37bbcd04c4051ff44c2fdd spice-gtk-0.27.tar.bz2 +ad07d438ce6dfbb038aa8e28f5a2fb81 spice-gtk-0.28.tar.bz2 diff --git a/spice-gtk.spec b/spice-gtk.spec index 709583c..ea45526 100644 --- a/spice-gtk.spec +++ b/spice-gtk.spec @@ -6,8 +6,8 @@ #define _version_suffix Name: spice-gtk -Version: 0.27 -Release: 6%{?dist} +Version: 0.28 +Release: 1%{?dist} Summary: A GTK+ widget for SPICE clients Group: System Environment/Libraries @@ -15,16 +15,6 @@ License: LGPLv2+ URL: http://spice-space.org/page/Spice-Gtk #VCS: git:git://anongit.freedesktop.org/spice/spice-gtk Source0: http://www.spice-space.org/download/gtk/%{name}-%{version}%{?_version_suffix}.tar.bz2 -Patch0001: 0001-session-keep-main-channel-on-reconnect.patch -Patch0002: 0002-channel-factorize-failed-authentication.patch -Patch0003: 0003-channel-do-not-enter-channel-iterate-on-early-error.patch -Patch0004: 0004-channel-introduce-SPICE_CHANNEL_STATE_RECONNECTING.patch -Patch0005: 0005-channel-throw-auth-error-when-coroutine-ends.patch -Patch0006: 0006-channel-clear-channel-error-after-auth-error.patch -Patch0007: 0007-usbredir-prevent-crash-when-calling-without-host.patch -Patch0008: 0008-channel-delay-event-report-to-after-coroutine-exit.patch -Patch0009: 0009-channel-reset-tls-state-when-client-calls-connect.patch -Patch0010: 0010-channel-reset-connection-state-on-error.patch BuildRequires: intltool BuildRequires: gtk2-devel >= 2.14 @@ -155,16 +145,6 @@ fi pushd spice-gtk-%{version} find . -name '*.stamp' | xargs touch -%patch0001 -p1 -%patch0002 -p1 -%patch0003 -p1 -%patch0004 -p1 -%patch0005 -p1 -%patch0006 -p1 -%patch0007 -p1 -%patch0008 -p1 -%patch0009 -p1 -%patch0010 -p1 popd %if %{with_gtk3} @@ -286,6 +266,9 @@ rm -rf %{buildroot}%{_datadir}/pkgconfig/spice-protocol.pc %{_bindir}/spicy-stats %changelog +* Wed Mar 4 2015 Marc-André Lureau 0.28-1 +- Update to spice-gtk v0.28 + * Mon Feb 23 2015 Christophe Fergeau 0.27-6 - Rebuild for phodav soname bump