From 72dd7ccb46ceac4b93f86a814e20576a5f325818 Mon Sep 17 00:00:00 2001 From: Jeremy Lainé Date: Fri, 20 Jul 2012 13:32:44 +0200 Subject: refactor SASL stanza handling --- src/server/QXmppIncomingClient.cpp | 31 +++++++++++++++---------------- 1 file changed, 15 insertions(+), 16 deletions(-) (limited to 'src/server/QXmppIncomingClient.cpp') diff --git a/src/server/QXmppIncomingClient.cpp b/src/server/QXmppIncomingClient.cpp index d9a3db0c..6fcb41b9 100644 --- a/src/server/QXmppIncomingClient.cpp +++ b/src/server/QXmppIncomingClient.cpp @@ -32,6 +32,7 @@ #include "QXmppMessage.h" #include "QXmppPasswordChecker.h" #include "QXmppSaslAuth.h" +#include "QXmppSaslAuth_p.h" #include "QXmppSessionIq.h" #include "QXmppStreamFeatures.h" #include "QXmppUtils.h" @@ -230,7 +231,7 @@ void QXmppIncomingClient::handleStanza(const QDomElement &nodeRecv) if (!d->passwordChecker) { // FIXME: what type of failure? warning("Cannot perform authentication, no password checker"); - sendData(""); + sendPacket(QXmppSaslStanza("failure")); disconnectFromHost(); return; } @@ -241,7 +242,7 @@ void QXmppIncomingClient::handleStanza(const QDomElement &nodeRecv) d->saslServer = QXmppSaslServer::create(mechanism, this); if (!d->saslServer) { // unsupported method - sendData(""); + sendPacket(QXmppSaslStanza("failure")); disconnectFromHost(); return; } @@ -253,7 +254,7 @@ void QXmppIncomingClient::handleStanza(const QDomElement &nodeRecv) QByteArray challenge; QXmppSaslServer::Response response = d->saslServer->respond(QByteArray::fromBase64(nodeRecv.text().toAscii()), challenge); if (response != QXmppSaslServer::InputNeeded) { - sendData(""); + sendPacket(QXmppSaslStanza("failure")); disconnectFromHost(); return; } @@ -275,20 +276,19 @@ void QXmppIncomingClient::handleStanza(const QDomElement &nodeRecv) d->saslDigest.setQop("auth"); d->saslDigestStep = 1; - QMap challenge; - challenge["nonce"] = d->saslDigest.nonce(); - challenge["realm"] = d->domain.toUtf8(); - challenge["qop"] = d->saslDigest.qop(); - challenge["charset"] = "utf-8"; - challenge["algorithm"] = "md5-sess"; + QMap output; + output["nonce"] = d->saslDigest.nonce(); + output["realm"] = d->domain.toUtf8(); + output["qop"] = d->saslDigest.qop(); + output["charset"] = "utf-8"; + output["algorithm"] = "md5-sess"; - const QByteArray data = QXmppSaslDigestMd5::serializeMessage(challenge); - sendData("" + data.toBase64() +""); + sendPacket(QXmppSaslStanza("challenge", QXmppSaslDigestMd5::serializeMessage(output))); } else { // unsupported method - sendData(""); + sendPacket(QXmppSaslStanza("failure")); disconnectFromHost(); return; } @@ -318,7 +318,7 @@ void QXmppIncomingClient::handleStanza(const QDomElement &nodeRecv) d->saslDigestStep = 3; d->jid = QString("%1@%2").arg(d->saslDigestUsername, d->domain); info(QString("Authentication succeeded for '%1' from %2").arg(d->jid, d->origin())); - sendData(""); + sendPacket(QXmppSaslStanza("success")); handleStart(); } } @@ -431,8 +431,7 @@ void QXmppIncomingClient::onDigestReply() QMap challenge; challenge["rspauth"] = d->saslDigest.calculateDigest( QByteArray(":") + d->saslDigest.digestUri()); - const QByteArray data = QXmppSaslDigestMd5::serializeMessage(challenge).toBase64(); - sendData("" + data +""); + sendPacket(QXmppSaslStanza("challenge", QXmppSaslDigestMd5::serializeMessage(challenge))); } void QXmppIncomingClient::onPasswordReply() @@ -448,7 +447,7 @@ void QXmppIncomingClient::onPasswordReply() case QXmppPasswordReply::NoError: d->jid = jid; info(QString("Authentication succeeded for '%1' from %2").arg(d->jid, d->origin())); - sendData(""); + sendPacket(QXmppSaslStanza("success")); handleStart(); break; case QXmppPasswordReply::AuthorizationError: -- cgit v1.2.3