summaryrefslogtreecommitdiffstats
path: root/client/red_channel.cpp
diff options
context:
space:
mode:
authorYonit Halperin <yhalperi@redhat.com>2011-09-20 14:59:36 +0300
committerYonit Halperin <yhalperi@redhat.com>2011-11-02 11:30:31 +0200
commitc39d842ff16be4303c48b4faa19f22cd7312b3c7 (patch)
tree2e1128735c57ab7b06bc8b1875a4114f61c656bc /client/red_channel.cpp
parent3a1473760c0bb5da719e39ebe5cce02f5325904c (diff)
downloadspice-c39d842ff16be4303c48b4faa19f22cd7312b3c7.tar.gz
spice-c39d842ff16be4303c48b4faa19f22cd7312b3c7.tar.xz
spice-c39d842ff16be4303c48b4faa19f22cd7312b3c7.zip
client: support semi-seamless migration between spice servers with different protocols.
It can't actually happen right now, since switch-host migration scheme will take place if the src/target server has protocol 1. (cherry picked from commit 4b2bf4d88c253502003aa5e4b93a045742eec9b4 branch 0.8)
Diffstat (limited to 'client/red_channel.cpp')
-rw-r--r--client/red_channel.cpp20
1 files changed, 20 insertions, 0 deletions
diff --git a/client/red_channel.cpp b/client/red_channel.cpp
index d85265b7..e8c058cc 100644
--- a/client/red_channel.cpp
+++ b/client/red_channel.cpp
@@ -298,6 +298,20 @@ bool RedChannelBase::test_capability(uint32_t cap)
return test_capability(_remote_caps, cap);
}
+void RedChannelBase::swap(RedChannelBase* other)
+{
+ int tmp_ver;
+
+ RedPeer::swap(other);
+ tmp_ver = _remote_major;
+ _remote_major = other->_remote_major;
+ other->_remote_major = tmp_ver;
+
+ tmp_ver = _remote_minor;
+ _remote_minor = other->_remote_minor;
+ other->_remote_minor = tmp_ver;
+}
+
SendTrigger::SendTrigger(RedChannel& channel)
: _channel (channel)
{
@@ -493,6 +507,12 @@ void RedChannel::do_migration_disconnect_src()
void RedChannel::do_migration_connect_target()
{
LOG_INFO("");
+ ASSERT(get_client().get_protocol() != 0);
+ if (get_client().get_protocol() == 1) {
+ _marshallers = spice_message_marshallers_get1();
+ } else {
+ _marshallers = spice_message_marshallers_get();
+ }
_loop.add_socket(*this);
_socket_in_loop = true;
on_connect_mig_target();