From 66af3052ce1754b8617599428b9070c0f2bb02b1 Mon Sep 17 00:00:00 2001 From: Jeremy Lainé Date: Mon, 3 Sep 2012 14:28:52 +0200 Subject: handle XMPP connections without a session --- src/client/QXmppOutgoingClient.cpp | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) (limited to 'src/client/QXmppOutgoingClient.cpp') 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(); } } } -- cgit v1.2.3