00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef QXMPPSTREAM_H
00026 #define QXMPPSTREAM_H
00027
00028 #include <QObject>
00029 #include <QSslSocket>
00030 #include "QXmppClient.h"
00031 #include "QXmppLogger.h"
00032 #include "QXmppStanza.h"
00033
00034 class QDomElement;
00035
00036 class QXmppClient;
00037 class QXmppConfiguration;
00038 class QXmppPacket;
00039 class QXmppPresence;
00040 class QXmppIq;
00041 class QXmppBind;
00042 class QXmppRosterIq;
00043 class QXmppVCard;
00044 class QXmppMessage;
00045 class QXmppRpcResponseIq;
00046 class QXmppRpcErrorIq;
00047 class QXmppArchiveChatIq;
00048 class QXmppArchiveListIq;
00049 class QXmppArchivePrefIq;
00050 class QXmppByteStreamIq;
00051 class QXmppDiscoveryIq;
00052 class QXmppIbbCloseIq;
00053 class QXmppIbbDataIq;
00054 class QXmppIbbOpenIq;
00055 class QXmppJingleIq;
00056 class QXmppMucAdminIq;
00057 class QXmppMucOwnerIq;
00058 class QXmppStreamInitiationIq;
00059 class QXmppStreamPrivate;
00060 class QXmppVersionIq;
00061
00062 class QXmppStream : public QObject
00063 {
00064 Q_OBJECT
00065
00066 public:
00067 QXmppStream(QSslSocket *socket, QObject *parent);
00068 ~QXmppStream();
00069 void connectToHost();
00070 void disconnectFromHost();
00071 bool isConnected() const;
00072 bool sendData(const QByteArray&);
00073 bool sendPacket(const QXmppPacket&);
00074
00075 QAbstractSocket::SocketError socketError();
00076 QXmppStanza::Error::Condition xmppStreamError();
00077
00078 QXmppConfiguration& configuration();
00079
00080 QXmppLogger *logger();
00081 void setLogger(QXmppLogger *logger);
00082
00083 QXmppElementList presenceExtensions() const;
00084
00085 signals:
00086
00087 void hostFound();
00088
00089
00090 void connected();
00091
00092
00093 void disconnected();
00094
00095
00096 void xmppConnected();
00097
00099 void logMessage(QXmppLogger::MessageType type, const QString &msg);
00100
00101 void error(QXmppClient::Error);
00102 void elementReceived(const QDomElement &element, bool &handled);
00103 void presenceReceived(const QXmppPresence&);
00104 void messageReceived(const QXmppMessage&);
00105 void iqReceived(const QXmppIq&);
00106 void rosterIqReceived(const QXmppRosterIq&);
00107 void vCardIqReceived(const QXmppVCard&);
00108
00109 void rpcCallInvoke(const QXmppRpcInvokeIq &invoke);
00110 void rpcCallResponse(const QXmppRpcResponseIq& result);
00111 void rpcCallError(const QXmppRpcErrorIq &err);
00112
00113 void archiveChatIqReceived(const QXmppArchiveChatIq&);
00114 void archiveListIqReceived(const QXmppArchiveListIq&);
00115 void archivePrefIqReceived(const QXmppArchivePrefIq&);
00116
00117 void discoveryIqReceived(const QXmppDiscoveryIq&);
00118
00119 void byteStreamIqReceived(const QXmppByteStreamIq&);
00120 void ibbCloseIqReceived(const QXmppIbbCloseIq&);
00121 void ibbDataIqReceived(const QXmppIbbDataIq&);
00122 void ibbOpenIqReceived(const QXmppIbbOpenIq&);
00123 void streamInitiationIqReceived(const QXmppStreamInitiationIq&);
00124
00125
00126 void mucAdminIqReceived(const QXmppMucAdminIq&);
00127 void mucOwnerIqReceived(const QXmppMucOwnerIq&);
00128
00129
00130 void jingleIqReceived(const QXmppJingleIq&);
00131
00132 protected:
00133
00134 void debug(const QString&);
00135 void info(const QString&);
00136 void warning(const QString&);
00137
00138
00139 virtual void handleStanza(const QDomElement &element);
00140 virtual void handleStream(const QDomElement &element);
00141 virtual bool sendStartStream();
00142 virtual bool sendEndStream();
00143
00144 private slots:
00145 void socketHostFound();
00146 void socketReadReady();
00147 void socketEncrypted();
00148 void socketConnected();
00149 void socketDisconnected();
00150 void socketError(QAbstractSocket::SocketError);
00151 void socketSslErrors(const QList<QSslError>&);
00152
00153 void pingStart();
00154 void pingStop();
00155 void pingSend();
00156 void pingTimeout();
00157
00158 private:
00159 QXmppDiscoveryIq capabilities() const;
00160 void flushDataBuffer();
00161 void parser(const QByteArray&);
00162 void sendNonSASLAuth(bool plaintext);
00163 void sendNonSASLAuthQuery();
00164 void sendAuthDigestMD5ResponseStep1(const QString& challenge);
00165 void sendAuthDigestMD5ResponseStep2();
00166 void sendBindIQ();
00167 void sendSessionIQ();
00168
00169 QXmppStreamPrivate * const d;
00170 };
00171
00172 #endif // QXMPPSTREAM_H