aboutsummaryrefslogtreecommitdiff
path: root/source/QXmppReconnectionManager.cpp
diff options
context:
space:
mode:
authorJeremy Lainé <jeremy.laine@m4x.org>2010-02-25 12:26:04 +0000
committerJeremy Lainé <jeremy.laine@m4x.org>2010-02-25 12:26:04 +0000
commit3d9042871ead55f48023f17b0f6f5fbb1bfae259 (patch)
tree0d91f995e57e109d86c069cff03f4bef8eb6d3e9 /source/QXmppReconnectionManager.cpp
parent379d128e32348181e35999678fe4733bb64c4d8b (diff)
downloadqxmpp-3d9042871ead55f48023f17b0f6f5fbb1bfae259.tar.gz
don't reconnect to XMPP server after a conflict was received (issue #41)
Diffstat (limited to 'source/QXmppReconnectionManager.cpp')
-rw-r--r--source/QXmppReconnectionManager.cpp11
1 files changed, 10 insertions, 1 deletions
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;
}