diff options
| author | Jeremy Lainé <jeremy.laine@m4x.org> | 2012-07-20 13:40:04 +0200 |
|---|---|---|
| committer | Jeremy Lainé <jeremy.laine@m4x.org> | 2012-07-20 13:40:04 +0200 |
| commit | b45b8e0f5d4ccd8e072a93fbbe390a7a13526a23 (patch) | |
| tree | a81f7ca8c39f1a6d9600ec544e9abf9af4889944 /src | |
| parent | 72dd7ccb46ceac4b93f86a814e20576a5f325818 (diff) | |
| download | qxmpp-b45b8e0f5d4ccd8e072a93fbbe390a7a13526a23.tar.gz | |
parse SASL auth
Diffstat (limited to 'src')
| -rw-r--r-- | src/base/QXmppSaslAuth.cpp | 32 | ||||
| -rw-r--r-- | src/base/QXmppSaslAuth_p.h | 21 | ||||
| -rw-r--r-- | src/client/QXmppOutgoingClient.cpp | 8 |
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 |
