aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJeremy Lainé <jeremy.laine@m4x.org>2012-07-20 13:40:04 +0200
committerJeremy Lainé <jeremy.laine@m4x.org>2012-07-20 13:40:04 +0200
commitb45b8e0f5d4ccd8e072a93fbbe390a7a13526a23 (patch)
treea81f7ca8c39f1a6d9600ec544e9abf9af4889944 /src
parent72dd7ccb46ceac4b93f86a814e20576a5f325818 (diff)
downloadqxmpp-b45b8e0f5d4ccd8e072a93fbbe390a7a13526a23.tar.gz
parse SASL auth
Diffstat (limited to 'src')
-rw-r--r--src/base/QXmppSaslAuth.cpp32
-rw-r--r--src/base/QXmppSaslAuth_p.h21
-rw-r--r--src/client/QXmppOutgoingClient.cpp8
3 files changed, 55 insertions, 6 deletions
diff --git a/src/base/QXmppSaslAuth.cpp b/src/base/QXmppSaslAuth.cpp
index ab0c6bcb..2f332454 100644
--- a/src/base/QXmppSaslAuth.cpp
+++ b/src/base/QXmppSaslAuth.cpp
@@ -35,6 +35,38 @@
const char *ns_xmpp_sasl = "urn:ietf:params:xml:ns:xmpp-sasl";
+QXmppSaslAuth::QXmppSaslAuth(const QString &mechanism, const QByteArray &value)
+ : m_mechanism(mechanism)
+ , m_value(value)
+{
+}
+
+QByteArray QXmppSaslAuth::value() const
+{
+ return m_value;
+}
+
+void QXmppSaslAuth::setValue(const QByteArray &value)
+{
+ m_value = value;
+}
+
+void QXmppSaslAuth::parse(const QDomElement &element)
+{
+ m_mechanism = element.attribute("mechanism");
+ m_value = QByteArray::fromBase64(element.text().toAscii());
+}
+
+void QXmppSaslAuth::toXml(QXmlStreamWriter *writer) const
+{
+ writer->writeStartElement("auth");
+ writer->writeAttribute("xmlns", ns_xmpp_sasl);
+ writer->writeAttribute("mechanism", m_mechanism);
+ if (!m_value.isEmpty())
+ writer->writeCharacters(m_value.toBase64());
+ writer->writeEndElement();
+}
+
QXmppSaslStanza::QXmppSaslStanza(const QString &type, const QByteArray &value)
: m_type(type)
, m_value(value)
diff --git a/src/base/QXmppSaslAuth_p.h b/src/base/QXmppSaslAuth_p.h
index e98cf802..8d52a09b 100644
--- a/src/base/QXmppSaslAuth_p.h
+++ b/src/base/QXmppSaslAuth_p.h
@@ -38,6 +38,27 @@
// We mean it.
//
+class QXmppSaslAuth : public QXmppStanza
+{
+public:
+ QXmppSaslAuth(const QString &mechanism = QString(), const QByteArray &value = QByteArray());
+
+ QString mechanism() const;
+ void setMechanism(const QString &mechanism);
+
+ QByteArray value() const;
+ void setValue(const QByteArray &value);
+
+ /// \cond
+ void parse(const QDomElement &element);
+ void toXml(QXmlStreamWriter *writer) const;
+ /// \endcond
+
+private:
+ QString m_mechanism;
+ QByteArray m_value;
+};
+
class QXmppSaslStanza : public QXmppStanza
{
public:
diff --git a/src/client/QXmppOutgoingClient.cpp b/src/client/QXmppOutgoingClient.cpp
index 56d1b1e1..a34ac2ec 100644
--- a/src/client/QXmppOutgoingClient.cpp
+++ b/src/client/QXmppOutgoingClient.cpp
@@ -38,6 +38,7 @@
#include "QXmppStreamFeatures.h"
#include "QXmppNonSASLAuth.h"
#include "QXmppSaslAuth.h"
+#include "QXmppSaslAuth_p.h"
#include "QXmppUtils.h"
// IQ types
@@ -383,12 +384,7 @@ void QXmppOutgoingClient::handleStanza(const QDomElement &nodeRecv)
disconnectFromHost();
return;
}
- QByteArray data = "<auth xmlns='urn:ietf:params:xml:ns:xmpp-sasl' mechanism='"+ d->saslClient->mechanism().toLatin1() + "'";
- if (response.isEmpty())
- data += "/>";
- else
- data += ">" + response.toBase64() + "</auth>";
- sendData(data);
+ sendPacket(QXmppSaslAuth(d->saslClient->mechanism().toLatin1(), response));
}
// check whether bind is available