From 3d9042871ead55f48023f17b0f6f5fbb1bfae259 Mon Sep 17 00:00:00 2001 From: Jeremy Lainé Date: Thu, 25 Feb 2010 12:26:04 +0000 Subject: don't reconnect to XMPP server after a conflict was received (issue #41) --- source/QXmppReconnectionManager.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) (limited to 'source/QXmppReconnectionManager.cpp') diff --git a/source/QXmppReconnectionManager.cpp b/source/QXmppReconnectionManager.cpp index c135860b..23993402 100644 --- a/source/QXmppReconnectionManager.cpp +++ b/source/QXmppReconnectionManager.cpp @@ -28,6 +28,7 @@ QXmppReconnectionManager::QXmppReconnectionManager(QXmppClient* client) : QObject(client), + m_receivedConflict(false), m_reconnectionTries(0), m_timer(this), m_client(client) @@ -39,12 +40,19 @@ QXmppReconnectionManager::QXmppReconnectionManager(QXmppClient* client) : void QXmppReconnectionManager::connected() { + m_receivedConflict = false; m_reconnectionTries = 0; } void QXmppReconnectionManager::error(QXmppClient::Error error) { - if(m_client && error == QXmppClient::SocketError) + if(m_client && error == QXmppClient::XmppStreamError) + { + // if we receive a resource conflict, inhibit reconnection + if(m_client->getXmppStreamError() == QXmppClient::ConflictStreamError) + m_receivedConflict = true; + } + else if(m_client && error == QXmppClient::SocketError && !m_receivedConflict) { int time = getNextReconnectingInTime(); @@ -82,5 +90,6 @@ void QXmppReconnectionManager::reconnect() void QXmppReconnectionManager::cancelReconnection() { m_timer.stop(); + m_receivedConflict = false; m_reconnectionTries = 0; } -- cgit v1.2.3