client: don't die if initial agent timeout triggers

When the client connects to a spice VM, if an agent is detected,
there will be a few messages exchanged to exchange capabilities,
display resolutions, ... This exchange has a timeout in case
something goes wrong. However, when it fires, the client dies.
This commit changes this and lets the client connects to the
guest when the timeout happens.
rhbz #673973
This commit is contained in:
Christophe Fergeau 2011-07-21 12:11:36 +02:00
parent fc2f7d14a2
commit eb6f554094
2 changed files with 10 additions and 2 deletions

View File

@ -340,7 +340,9 @@ void AgentTimer::response(AbstractProcessLoop& events_loop)
{
Application* app = static_cast<Application*>(events_loop.get_owner());
app->deactivate_interval_timer(this);
THROW_ERR(SPICEC_ERROR_CODE_AGENT_TIMEOUT, "vdagent timeout");
LOG_WARN("timeout while waiting for agent response");
_client->send_main_attach_channels();
}
class MainChannelLoop: public MessageHandlerImp<RedClient, SPICE_CHANNEL_MAIN> {
@ -371,7 +373,7 @@ RedClient::RedClient(Application& application)
, _agent_out_msg_size (0)
, _agent_out_msg_pos (0)
, _agent_tokens (0)
, _agent_timer (new AgentTimer())
, _agent_timer (new AgentTimer(this))
, _agent_caps_size(0)
, _agent_caps(NULL)
, _migrate (*this)

View File

@ -114,8 +114,14 @@ public:
}
};
class RedClient;
class AgentTimer: public Timer {
public:
virtual void response(AbstractProcessLoop& events_loop);
AgentTimer(RedClient *client) : _client(client) {};
private:
RedClient *_client;
};
typedef std::map< int, RedPeer::ConnectionOptions::Type> PeerConnectionOptMap;