diff options
| author | Jeremy Lainé <jeremy.laine@m4x.org> | 2010-02-25 12:27:19 +0000 |
|---|---|---|
| committer | Jeremy Lainé <jeremy.laine@m4x.org> | 2010-02-25 12:27:19 +0000 |
| commit | 4833759c62915f433ba20910f1cf4ec17baea9c4 (patch) | |
| tree | a8f794f27721a102ace4eacbbc4f13ecb177171a /source/QXmppTransferManager.h | |
| parent | 3d9042871ead55f48023f17b0f6f5fbb1bfae259 (diff) | |
| download | qxmpp-4833759c62915f433ba20910f1cf4ec17baea9c4.tar.gz | |
add basic support for SOCKS5 bytestreams
Diffstat (limited to 'source/QXmppTransferManager.h')
| -rw-r--r-- | source/QXmppTransferManager.h | 49 |
1 files changed, 45 insertions, 4 deletions
diff --git a/source/QXmppTransferManager.h b/source/QXmppTransferManager.h index bfd781b3..927d5c8e 100644 --- a/source/QXmppTransferManager.h +++ b/source/QXmppTransferManager.h @@ -25,15 +25,18 @@ #define QXMPPTRANSFERMANAGER_H #include <QDateTime> +#include <QHostAddress> #include "QXmppIq.h" +class QXmppByteStreamIq; class QXmppClient; class QXmppIbbCloseIq; class QXmppIbbDataIq; class QXmppIbbOpenIq; +class QXmppSocksClient; +class QXmppSocksServer; class QXmppStreamInitiationIq; - class QXmppTransferManager; class QXmppTransferJob : public QObject @@ -50,14 +53,25 @@ public: enum Method { - InBandByteStream = 1, - SocksByteStream = 2, + NoMethod = 0, + InBandMethod = 1, + SocksMethod = 2, + AnyMethod = 3, + }; + + enum State + { + StartState = 0, + TransferState = 1, + FinishedState = 2, }; void accept(QIODevice *output); QXmppTransferJob::Error error() const; QString jid() const; + QXmppTransferJob::Method method() const; + QXmppTransferJob::State state() const; // XEP-0096 : File transfer QDateTime fileDate() const; @@ -69,26 +83,38 @@ signals: void error(QXmppTransferJob::Error error); void finished(); void progress(qint64 done, qint64 total); + void stateChanged(QXmppTransferJob::State state); private: QXmppTransferJob(const QString &jid, QXmppTransferManager *manager); + void setState(QXmppTransferJob::State state); void terminate(QXmppTransferJob::Error error); + int m_blockSize; int m_done; QXmppTransferJob::Error m_error; QIODevice *m_iodevice; QString m_jid; QString m_sid; + Method m_method; int m_methods; QString m_mimeType; + QString m_requestId; + State m_state; + // file meta-data QDateTime m_fileDate; QString m_fileHash; QString m_fileName; int m_fileSize; - QString m_requestId; + // for in-band bytestreams int m_ibbSequence; + + // for socks5 bytestreams + QXmppSocksClient *m_socksClient; + QXmppSocksServer *m_socksServer; + friend class QXmppTransferManager; }; @@ -99,27 +125,42 @@ class QXmppTransferManager : public QObject public: QXmppTransferManager(QXmppClient* client); QXmppTransferJob *sendFile(const QString &jid, const QString &fileName); + int supportedMethods() const; + void setSupportedMethods(int methods); signals: void fileReceived(QXmppTransferJob *offer); private slots: + void byteStreamIqReceived(const QXmppByteStreamIq&); void ibbCloseIqReceived(const QXmppIbbCloseIq&); void ibbDataIqReceived(const QXmppIbbDataIq&); void ibbOpenIqReceived(const QXmppIbbOpenIq&); void iqReceived(const QXmppIq&); + void socksClientDataReceived(); + void socksClientDisconnected(); + void socksServerDataSent(); + void socksServerDisconnected(); void streamInitiationIqReceived(const QXmppStreamInitiationIq&); private: QXmppTransferJob *getJobByRequestId(const QString &jid, const QString &id); QXmppTransferJob *getJobBySid(const QString &jid, const QString &sid); + QXmppTransferJob *getJobBySocksClient(QXmppSocksClient *socksClient); + QXmppTransferJob *getJobBySocksServer(QXmppSocksServer *socksServer); + void byteStreamResponseReceived(const QXmppIq&); + void byteStreamResultReceived(const QXmppByteStreamIq&); + void byteStreamSetReceived(const QXmppByteStreamIq&); + void ibbResponseReceived(const QXmppIq&); void streamInitiationResultReceived(const QXmppStreamInitiationIq&); void streamInitiationSetReceived(const QXmppStreamInitiationIq&); + void socksServerSendData(QXmppTransferJob *job); // reference to client object (no ownership) QXmppClient* m_client; QList<QXmppTransferJob*> m_jobs; int m_ibbBlockSize; + int m_supportedMethods; }; #endif |
