diff options
| author | Jeremy Lainé <jeremy.laine@m4x.org> | 2012-09-03 14:28:52 +0200 |
|---|---|---|
| committer | Jeremy Lainé <jeremy.laine@m4x.org> | 2012-09-03 14:28:52 +0200 |
| commit | 66af3052ce1754b8617599428b9070c0f2bb02b1 (patch) | |
| tree | 900de14912047b6026cf1dd3df96cd70f024407d /src/client/QXmppOutgoingClient.cpp | |
| parent | e183eaf9d383fdf31c4949c864e5e8cfb8c347ce (diff) | |
| download | qxmpp-66af3052ce1754b8617599428b9070c0f2bb02b1.tar.gz | |
handle XMPP connections without a session
Diffstat (limited to 'src/client/QXmppOutgoingClient.cpp')
| -rw-r--r-- | src/client/QXmppOutgoingClient.cpp | 28 |
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(); } } } |
