aboutsummaryrefslogtreecommitdiff
path: root/source/QXmppTransferManager.h
diff options
context:
space:
mode:
authorJeremy Lainé <jeremy.laine@m4x.org>2010-02-25 12:27:19 +0000
committerJeremy Lainé <jeremy.laine@m4x.org>2010-02-25 12:27:19 +0000
commit4833759c62915f433ba20910f1cf4ec17baea9c4 (patch)
treea8f794f27721a102ace4eacbbc4f13ecb177171a /source/QXmppTransferManager.h
parent3d9042871ead55f48023f17b0f6f5fbb1bfae259 (diff)
downloadqxmpp-4833759c62915f433ba20910f1cf4ec17baea9c4.tar.gz
add basic support for SOCKS5 bytestreams
Diffstat (limited to 'source/QXmppTransferManager.h')
-rw-r--r--source/QXmppTransferManager.h49
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