aboutsummaryrefslogtreecommitdiff
path: root/src/server/QXmppIncomingClient.cpp
diff options
context:
space:
mode:
authorJeremy Lainé <jeremy.laine@m4x.org>2012-07-20 13:32:44 +0200
committerJeremy Lainé <jeremy.laine@m4x.org>2012-07-20 13:32:44 +0200
commit72dd7ccb46ceac4b93f86a814e20576a5f325818 (patch)
treee897d81e6a5dfa504012d62bdecb59788ab1169c /src/server/QXmppIncomingClient.cpp
parent8991d3b2a9f83d84b835973f1cc272d0ef0f437c (diff)
downloadqxmpp-72dd7ccb46ceac4b93f86a814e20576a5f325818.tar.gz
refactor SASL stanza handling
Diffstat (limited to 'src/server/QXmppIncomingClient.cpp')
-rw-r--r--src/server/QXmppIncomingClient.cpp31
1 files changed, 15 insertions, 16 deletions
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("<failure xmlns='urn:ietf:params:xml:ns:xmpp-sasl'/>");
+ 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("<failure xmlns='urn:ietf:params:xml:ns:xmpp-sasl'></failure>");
+ 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("<failure xmlns='urn:ietf:params:xml:ns:xmpp-sasl'><incorrect-encoding/></failure>");
+ sendPacket(QXmppSaslStanza("failure"));
disconnectFromHost();
return;
}
@@ -275,20 +276,19 @@ void QXmppIncomingClient::handleStanza(const QDomElement &nodeRecv)
d->saslDigest.setQop("auth");
d->saslDigestStep = 1;
- QMap<QByteArray, QByteArray> 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<QByteArray, QByteArray> 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("<challenge xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>" + data.toBase64() +"</challenge>");
+ sendPacket(QXmppSaslStanza("challenge", QXmppSaslDigestMd5::serializeMessage(output)));
}
else
{
// unsupported method
- sendData("<failure xmlns='urn:ietf:params:xml:ns:xmpp-sasl'></failure>");
+ 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("<success xmlns='urn:ietf:params:xml:ns:xmpp-sasl'/>");
+ sendPacket(QXmppSaslStanza("success"));
handleStart();
}
}
@@ -431,8 +431,7 @@ void QXmppIncomingClient::onDigestReply()
QMap<QByteArray, QByteArray> challenge;
challenge["rspauth"] = d->saslDigest.calculateDigest(
QByteArray(":") + d->saslDigest.digestUri());
- const QByteArray data = QXmppSaslDigestMd5::serializeMessage(challenge).toBase64();
- sendData("<challenge xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>" + data +"</challenge>");
+ 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("<success xmlns='urn:ietf:params:xml:ns:xmpp-sasl'/>");
+ sendPacket(QXmppSaslStanza("success"));
handleStart();
break;
case QXmppPasswordReply::AuthorizationError: