aboutsummaryrefslogtreecommitdiff
path: root/src/base/QXmppSasl_p.h
diff options
context:
space:
mode:
authorJeremy Lainé <jeremy.laine@m4x.org>2012-07-20 17:37:38 +0200
committerJeremy Lainé <jeremy.laine@m4x.org>2012-07-20 17:37:38 +0200
commit51eef84fd4104f19228ebd85fce89658b64464a2 (patch)
tree31db52023ae0a063714140897bcbbfb6010ba04a /src/base/QXmppSasl_p.h
parentdb4fe78387247ff039602030d964e4c0d6e39f46 (diff)
downloadqxmpp-51eef84fd4104f19228ebd85fce89658b64464a2.tar.gz
make SASL code fully private
Diffstat (limited to 'src/base/QXmppSasl_p.h')
-rw-r--r--src/base/QXmppSasl_p.h300
1 files changed, 300 insertions, 0 deletions
diff --git a/src/base/QXmppSasl_p.h b/src/base/QXmppSasl_p.h
new file mode 100644
index 00000000..636385ef
--- /dev/null
+++ b/src/base/QXmppSasl_p.h
@@ -0,0 +1,300 @@
+/*
+ * Copyright (C) 2008-2012 The QXmpp developers
+ *
+ * Authors:
+ * Manjeet Dahiya
+ * Jeremy Lainé
+ *
+ * Source:
+ * http://code.google.com/p/qxmpp
+ *
+ * This file is a part of QXmpp library.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ */
+
+#ifndef QXMPPSASL_P_H
+#define QXMPPSASL_P_H
+
+#include <QByteArray>
+#include <QMap>
+
+#include "QXmppGlobal.h"
+#include "QXmppLogger.h"
+#include "QXmppStanza.h"
+
+class QXmppSaslClientPrivate;
+class QXmppSaslServerPrivate;
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the QXmpp API. It exists for the convenience
+// of the QXmppIncomingClient and QXmppOutgoingClient classes.
+//
+// This header file may change from version to version without notice,
+// or even be removed.
+//
+// We mean it.
+//
+
+class QXmppSaslClient : public QXmppLoggable
+{
+public:
+ QXmppSaslClient(QObject *parent = 0);
+ virtual ~QXmppSaslClient();
+
+ QString host() const;
+ void setHost(const QString &host);
+
+ QString serviceType() const;
+ void setServiceType(const QString &serviceType);
+
+ QString username() const;
+ void setUsername(const QString &username);
+
+ QString password() const;
+ void setPassword(const QString &password);
+
+ virtual QString mechanism() const = 0;
+ virtual bool respond(const QByteArray &challenge, QByteArray &response) = 0;
+
+ static QStringList availableMechanisms();
+ static QXmppSaslClient* create(const QString &mechanism, QObject *parent = 0);
+
+private:
+ QXmppSaslClientPrivate *d;
+};
+
+/// The QXmppServerClient class is the base class for all SASL server
+/// authentication methods.
+
+class QXmppSaslServer : public QXmppLoggable
+{
+public:
+ enum Response {
+ Challenge = 0,
+ Succeeded = 1,
+ Failed = 2,
+ InputNeeded = 3
+ };
+
+ QXmppSaslServer(QObject *parent = 0);
+ virtual ~QXmppSaslServer();
+
+ QString username() const;
+ void setUsername(const QString &username);
+
+ QString password() const;
+ void setPassword(const QString &password);
+
+ QByteArray passwordDigest() const;
+ void setPasswordDigest(const QByteArray &digest);
+
+ QString realm() const;
+ void setRealm(const QString &realm);
+
+ virtual QString mechanism() const = 0;
+ virtual Response respond(const QByteArray &challenge, QByteArray &response) = 0;
+
+ static QXmppSaslServer* create(const QString &mechanism, QObject *parent = 0);
+
+private:
+ QXmppSaslServerPrivate *d;
+};
+
+
+class QXmppSaslDigestMd5
+{
+public:
+ static void setNonce(const QByteArray &nonce);
+
+ // message parsing and serialization
+ static QMap<QByteArray, QByteArray> parseMessage(const QByteArray &ba);
+ static QByteArray serializeMessage(const QMap<QByteArray, QByteArray> &map);
+};
+
+class QXmppSaslStanza : public QXmppStanza
+{
+public:
+ QXmppSaslStanza(const QString &type, const QByteArray &value = QByteArray());
+
+ QString type() const;
+ void setType(const QString &type);
+
+ QByteArray value() const;
+ void setValue(const QByteArray &value);
+
+ /// \cond
+ void parse(const QDomElement &element);
+ void toXml(QXmlStreamWriter *writer) const;
+ /// \endcond
+
+private:
+ QString m_type;
+ QByteArray m_value;
+};
+
+class QXmppSaslAuth : public QXmppSaslStanza
+{
+public:
+ QXmppSaslAuth(const QString &mechanism = QString(), const QByteArray &value = QByteArray());
+
+ QString mechanism() const;
+ void setMechanism(const QString &mechanism);
+
+ /// \cond
+ void parse(const QDomElement &element);
+ void toXml(QXmlStreamWriter *writer) const;
+ /// \endcond
+
+private:
+ QString m_mechanism;
+};
+
+class QXmppSaslChallenge : public QXmppSaslStanza
+{
+public:
+ QXmppSaslChallenge(const QByteArray &value = QByteArray());
+};
+
+class QXmppSaslFailure : public QXmppSaslStanza
+{
+public:
+ QXmppSaslFailure(const QString &condition = QString());
+
+ QString condition() const;
+ void setCondition(const QString &condition);
+
+ /// \cond
+ void parse(const QDomElement &element);
+ void toXml(QXmlStreamWriter *writer) const;
+ /// \endcond
+
+private:
+ QString m_condition;
+};
+
+class QXmppSaslResponse : public QXmppSaslStanza
+{
+public:
+ QXmppSaslResponse(const QByteArray &value = QByteArray());
+};
+
+class QXmppSaslSuccess : public QXmppSaslStanza
+{
+public:
+ QXmppSaslSuccess();
+};
+
+class QXmppSaslClientAnonymous : public QXmppSaslClient
+{
+public:
+ QXmppSaslClientAnonymous(QObject *parent = 0);
+ QString mechanism() const;
+ bool respond(const QByteArray &challenge, QByteArray &response);
+
+private:
+ int m_step;
+};
+
+class QXmppSaslClientDigestMd5 : public QXmppSaslClient
+{
+public:
+ QXmppSaslClientDigestMd5(QObject *parent = 0);
+ QString mechanism() const;
+ bool respond(const QByteArray &challenge, QByteArray &response);
+
+private:
+ QByteArray m_cnonce;
+ QByteArray m_nc;
+ QByteArray m_nonce;
+ QByteArray m_secret;
+ int m_step;
+};
+
+class QXmppSaslClientFacebook : public QXmppSaslClient
+{
+public:
+ QXmppSaslClientFacebook(QObject *parent = 0);
+ QString mechanism() const;
+ bool respond(const QByteArray &challenge, QByteArray &response);
+
+private:
+ int m_step;
+};
+
+class QXmppSaslClientPlain : public QXmppSaslClient
+{
+public:
+ QXmppSaslClientPlain(QObject *parent = 0);
+ QString mechanism() const;
+ bool respond(const QByteArray &challenge, QByteArray &response);
+
+private:
+ int m_step;
+};
+
+class QXmppSaslServerAnonymous : public QXmppSaslServer
+{
+public:
+ QXmppSaslServerAnonymous(QObject *parent = 0);
+ QString mechanism() const;
+
+ Response respond(const QByteArray &challenge, QByteArray &response);
+
+private:
+ int m_step;
+};
+
+class QXmppSaslServerDigestMd5 : public QXmppSaslServer
+{
+public:
+ QXmppSaslServerDigestMd5(QObject *parent = 0);
+ QString mechanism() const;
+
+ Response respond(const QByteArray &challenge, QByteArray &response);
+
+private:
+ QByteArray m_cnonce;
+ QByteArray m_nc;
+ QByteArray m_nonce;
+ QByteArray m_secret;
+ int m_step;
+};
+
+class QXmppSaslServerFacebook : public QXmppSaslServer
+{
+public:
+ QXmppSaslServerFacebook(QObject *parent = 0);
+ QString mechanism() const;
+
+ Response respond(const QByteArray &challenge, QByteArray &response);
+
+private:
+ int m_step;
+};
+
+class QXmppSaslServerPlain : public QXmppSaslServer
+{
+public:
+ QXmppSaslServerPlain(QObject *parent = 0);
+ QString mechanism() const;
+
+ Response respond(const QByteArray &challenge, QByteArray &response);
+
+private:
+ int m_step;
+};
+
+#endif