aboutsummaryrefslogtreecommitdiff
path: root/src/QXmppOutgoingClient.cpp
diff options
context:
space:
mode:
authorJeremy Lainé <jeremy.laine@m4x.org>2011-09-26 10:04:48 +0000
committerJeremy Lainé <jeremy.laine@m4x.org>2011-09-26 10:04:48 +0000
commitc41e26f29be7a1371e86bc52dfb99787094415b7 (patch)
treecfcd8c97d0b841f01b2e0c625ebabe01bc728fc0 /src/QXmppOutgoingClient.cpp
parentfd00e8a4e3574633ca94ca20067ee33459c7b05f (diff)
downloadqxmpp-c41e26f29be7a1371e86bc52dfb99787094415b7.tar.gz
keep track of which SASL mechanism was actually selected
Diffstat (limited to 'src/QXmppOutgoingClient.cpp')
-rw-r--r--src/QXmppOutgoingClient.cpp30
1 files changed, 17 insertions, 13 deletions
diff --git a/src/QXmppOutgoingClient.cpp b/src/QXmppOutgoingClient.cpp
index 582959f7..19f27708 100644
--- a/src/QXmppOutgoingClient.cpp
+++ b/src/QXmppOutgoingClient.cpp
@@ -76,7 +76,8 @@ public:
// SASL
QXmppSaslDigestMd5 saslDigest;
- int saslStep;
+ int saslDigestStep;
+ int saslMechanism;
// Timers
QTimer *pingTimer;
@@ -85,7 +86,8 @@ public:
QXmppOutgoingClientPrivate::QXmppOutgoingClientPrivate()
: sessionAvailable(false),
- saslStep(0)
+ saslDigestStep(0),
+ saslMechanism(-1)
{
}
@@ -228,7 +230,8 @@ void QXmppOutgoingClient::handleStart()
QXmppStream::handleStart();
// reset authentication step
- d->saslStep = 0;
+ d->saslDigestStep = 0;
+ d->saslMechanism = -1;
d->sessionStarted = false;
// start stream
@@ -316,22 +319,23 @@ void QXmppOutgoingClient::handleStanza(const QDomElement &nodeRecv)
else if(saslAvailable)
{
// determine SASL Authentication mechanism to use
- QList<QXmppConfiguration::SASLAuthMechanism> mechanisms = features.authMechanisms();
- QXmppConfiguration::SASLAuthMechanism mechanism = configuration().sASLAuthMechanism();
+ const QList<QXmppConfiguration::SASLAuthMechanism> mechanisms = features.authMechanisms();
if (mechanisms.isEmpty())
{
warning("No supported SASL Authentication mechanism available");
disconnectFromHost();
return;
}
- else if (!mechanisms.contains(mechanism))
+ else if (!mechanisms.contains(configuration().sASLAuthMechanism()))
{
info("Desired SASL Auth mechanism is not available, selecting first available one");
- mechanism = mechanisms.first();
+ d->saslMechanism = mechanisms.first();
+ } else {
+ d->saslMechanism = configuration().sASLAuthMechanism();
}
// send SASL Authentication request
- switch(mechanism)
+ switch(d->saslMechanism)
{
case QXmppConfiguration::SASLPlain:
{
@@ -395,13 +399,11 @@ void QXmppOutgoingClient::handleStanza(const QDomElement &nodeRecv)
}
else if(nodeRecv.tagName() == "challenge")
{
- // TODO: Track which mechanism was used for when other SASL protocols which use challenges are supported
- QXmppConfiguration::SASLAuthMechanism mechanism = configuration().sASLAuthMechanism();
- switch(mechanism)
+ switch(d->saslMechanism)
{
case QXmppConfiguration::SASLDigestMD5:
- d->saslStep++;
- switch (d->saslStep)
+ d->saslDigestStep++;
+ switch (d->saslDigestStep)
{
case 1 :
sendAuthDigestMD5ResponseStep1(nodeRecv.text());
@@ -419,6 +421,8 @@ void QXmppOutgoingClient::handleStanza(const QDomElement &nodeRecv)
sendAuthXFacebookResponse(nodeRecv.text());
break;
default:
+ warning("Unexpected SASL challenge");
+ disconnectFromHost();
break;
}
}