aboutsummaryrefslogtreecommitdiff
path: root/src/QXmppStream.h
diff options
context:
space:
mode:
authorJeremy Lainé <jeremy.laine@m4x.org>2010-08-11 07:31:23 +0000
committerJeremy Lainé <jeremy.laine@m4x.org>2010-08-11 07:31:23 +0000
commit40c39853816cfab113d79682c34bc76a2c79c357 (patch)
treee4d6a184cf565cb87477339ce738299ff9787bc3 /src/QXmppStream.h
parent551c284e35280b7b91a939fe7352e496ffea402a (diff)
downloadqxmpp-40c39853816cfab113d79682c34bc76a2c79c357.tar.gz
rename "source" directory to "src"
Diffstat (limited to 'src/QXmppStream.h')
-rw-r--r--src/QXmppStream.h188
1 files changed, 188 insertions, 0 deletions
diff --git a/src/QXmppStream.h b/src/QXmppStream.h
new file mode 100644
index 00000000..139635e0
--- /dev/null
+++ b/src/QXmppStream.h
@@ -0,0 +1,188 @@
+/*
+ * Copyright (C) 2008-2010 The QXmpp developers
+ *
+ * Author:
+ * Manjeet Dahiya
+ *
+ * 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 QXMPPSTREAM_H
+#define QXMPPSTREAM_H
+
+#include <QObject>
+#include <QSslSocket>
+#include "QXmppClient.h"
+#include "QXmppConfiguration.h"
+#include "QXmppLogger.h"
+#include "QXmppStanza.h"
+
+class QDomElement;
+class QTimer;
+
+class QXmppClient;
+class QXmppPacket;
+class QXmppPresence;
+class QXmppIq;
+class QXmppBind;
+class QXmppRosterIq;
+class QXmppVCard;
+class QXmppMessage;
+class QXmppRpcResponseIq;
+class QXmppRpcErrorIq;
+class QXmppArchiveChatIq;
+class QXmppArchiveListIq;
+class QXmppArchivePrefIq;
+class QXmppByteStreamIq;
+class QXmppDiscoveryIq;
+class QXmppIbbCloseIq;
+class QXmppIbbDataIq;
+class QXmppIbbOpenIq;
+class QXmppJingleIq;
+class QXmppMucAdminIq;
+class QXmppMucOwnerIq;
+class QXmppStreamInitiationIq;
+class QXmppStreamPrivate;
+class QXmppVersionIq;
+
+class QXmppStream : public QObject
+{
+ Q_OBJECT
+
+public:
+ QXmppStream(QObject *parent);
+ ~QXmppStream();
+ void connect();
+ void acceptSubscriptionRequest(const QString& from, bool accept = true);
+ void sendSubscriptionRequest(const QString& to);
+ void disconnect();
+ bool isConnected() const;
+ bool sendPacket(const QXmppPacket&);
+
+ QAbstractSocket::SocketError socketError();
+ QXmppStanza::Error::Condition xmppStreamError();
+
+ QXmppConfiguration& configuration();
+
+ QXmppLogger *logger();
+ void setLogger(QXmppLogger *logger);
+
+ QXmppElementList presenceExtensions() const;
+
+signals:
+ // socket host found
+ void hostFound();
+
+ // socket connected
+ void connected();
+
+ // socket disconnected
+ void disconnected();
+
+ // xmpp connected
+ void xmppConnected();
+
+ /// This signal is emitted to send logging messages.
+ void logMessage(QXmppLogger::MessageType type, const QString &msg);
+
+ void error(QXmppClient::Error);
+ void elementReceived(const QDomElement &element, bool &handled);
+ void presenceReceived(const QXmppPresence&);
+ void messageReceived(const QXmppMessage&);
+ void iqReceived(const QXmppIq&);
+ void rosterIqReceived(const QXmppRosterIq&);
+ void vCardIqReceived(const QXmppVCard&);
+
+ void rpcCallInvoke(const QXmppRpcInvokeIq &invoke);
+ void rpcCallResponse(const QXmppRpcResponseIq& result);
+ void rpcCallError(const QXmppRpcErrorIq &err);
+
+ void archiveChatIqReceived(const QXmppArchiveChatIq&);
+ void archiveListIqReceived(const QXmppArchiveListIq&);
+ void archivePrefIqReceived(const QXmppArchivePrefIq&);
+
+ void discoveryIqReceived(const QXmppDiscoveryIq&);
+
+ void byteStreamIqReceived(const QXmppByteStreamIq&);
+ void ibbCloseIqReceived(const QXmppIbbCloseIq&);
+ void ibbDataIqReceived(const QXmppIbbDataIq&);
+ void ibbOpenIqReceived(const QXmppIbbOpenIq&);
+ void streamInitiationIqReceived(const QXmppStreamInitiationIq&);
+
+ // XEP-0045: Multi-User Chat
+ void mucAdminIqReceived(const QXmppMucAdminIq&);
+ void mucOwnerIqReceived(const QXmppMucOwnerIq&);
+
+ // XEP-0166: Jingle
+ void jingleIqReceived(const QXmppJingleIq&);
+
+private slots:
+ void socketHostFound();
+ void socketReadReady();
+ void socketEncrypted();
+ void socketConnected();
+ void socketDisconnected();
+ void socketError(QAbstractSocket::SocketError);
+ void socketSslErrors(const QList<QSslError>&);
+
+ void pingStart();
+ void pingStop();
+ void pingSend();
+ void pingTimeout();
+
+private:
+ QXmppConfiguration m_config; ///< This object provides the configuration
+ ///< required for connecting to the XMPP server.
+ QXmppLogger* m_logger;
+ QString m_sessionId;
+ QString m_bindId;
+ QByteArray m_dataBuffer;
+ bool m_sessionAvailable;
+ QString m_streamId;
+ QString m_nonSASLAuthId;
+ QString m_XMPPVersion;
+ QXmppStanza::Error::Condition m_xmppStreamError;
+ QTimer *m_pingTimer;
+ QTimer *m_timeoutTimer;
+
+ int m_authStep;
+
+ QXmppDiscoveryIq capabilities() const;
+ void debug(const QString&);
+ void info(const QString&);
+ void warning(const QString&);
+ void parser(const QByteArray&);
+ void sendStartStream();
+ void sendEndStream();
+ void sendNonSASLAuth(bool);
+ void sendNonSASLAuthQuery( const QString &to );
+ void sendAuthDigestMD5ResponseStep1(const QString& challenge);
+ void sendAuthDigestMD5ResponseStep2();
+ void sendBindIQ();
+ void sendSessionIQ();
+ void sendRosterRequest();
+ bool sendToServer(const QByteArray&);
+ bool hasStartStreamElement(const QByteArray&);
+ bool hasEndStreamElement(const QByteArray&);
+
+ void flushDataBuffer();
+
+ QXmppStreamPrivate * const d;
+};
+
+#endif // QXMPPSTREAM_H