aboutsummaryrefslogtreecommitdiff
path: root/src/client/QXmppOutgoingClient.cpp
diff options
context:
space:
mode:
authorJeremy Lainé <jeremy.laine@m4x.org>2012-09-03 14:28:52 +0200
committerJeremy Lainé <jeremy.laine@m4x.org>2012-09-03 14:28:52 +0200
commit66af3052ce1754b8617599428b9070c0f2bb02b1 (patch)
tree900de14912047b6026cf1dd3df96cd70f024407d /src/client/QXmppOutgoingClient.cpp
parente183eaf9d383fdf31c4949c864e5e8cfb8c347ce (diff)
downloadqxmpp-66af3052ce1754b8617599428b9070c0f2bb02b1.tar.gz
handle XMPP connections without a session
Diffstat (limited to 'src/client/QXmppOutgoingClient.cpp')
-rw-r--r--src/client/QXmppOutgoingClient.cpp28
1 files changed, 24 insertions, 4 deletions
diff --git a/src/client/QXmppOutgoingClient.cpp b/src/client/QXmppOutgoingClient.cpp
index b7241b04..2fae2736 100644
--- a/src/client/QXmppOutgoingClient.cpp
+++ b/src/client/QXmppOutgoingClient.cpp
@@ -220,7 +220,6 @@ void QXmppOutgoingClient::_q_dnsLookupFinished()
}
/// Returns true if the socket is connected and a session has been started.
-///
bool QXmppOutgoingClient::isConnected() const
{
@@ -405,10 +404,15 @@ void QXmppOutgoingClient::handleStanza(const QDomElement &nodeRecv)
return;
}
sendPacket(QXmppSaslAuth(d->saslClient->mechanism(), response));
+ return;
} else if(nonSaslAvailable && configuration().useNonSASLAuthentication()) {
sendNonSASLAuthQuery();
+ return;
}
+ // store whether session is available
+ d->sessionAvailable = (features.sessionMode() != QXmppStreamFeatures::Disabled);
+
// check whether bind is available
if (features.bindMode() != QXmppStreamFeatures::Disabled)
{
@@ -417,11 +421,23 @@ void QXmppOutgoingClient::handleStanza(const QDomElement &nodeRecv)
bind.setResource(configuration().resource());
d->bindId = bind.id();
sendPacket(bind);
+ return;
}
// check whether session is available
- if (features.sessionMode() != QXmppStreamFeatures::Disabled)
- d->sessionAvailable = true;
+ if (d->sessionAvailable)
+ {
+ // start session if it is available
+ QXmppSessionIq session;
+ session.setType(QXmppIq::Set);
+ session.setTo(configuration().domain());
+ d->sessionId = session.id();
+ sendPacket(session);
+ } else {
+ // otherwise we are done
+ d->sessionStarted = true;
+ emit connected();
+ }
}
else if(ns == ns_stream && nodeRecv.tagName() == "error")
{
@@ -532,14 +548,18 @@ void QXmppOutgoingClient::handleStanza(const QDomElement &nodeRecv)
}
}
- // start session if it is available
if (d->sessionAvailable)
{
+ // start session if it is available
QXmppSessionIq session;
session.setType(QXmppIq::Set);
session.setTo(configuration().domain());
d->sessionId = session.id();
sendPacket(session);
+ } else {
+ // otherwise we are done
+ d->sessionStarted = true;
+ emit connected();
}
}
}