aboutsummaryrefslogtreecommitdiff
path: root/source/QXmppTransferManager.h
diff options
context:
space:
mode:
authorJeremy Lainé <jeremy.laine@m4x.org>2010-02-24 10:33:02 +0000
committerJeremy Lainé <jeremy.laine@m4x.org>2010-02-24 10:33:02 +0000
commit95d3dfef904b3a90b64c8b28f93b3f4c04701048 (patch)
tree99fa0ba9138ad6de46464f921c121f955f690b99 /source/QXmppTransferManager.h
parenteaa17977f41d1fa3568540824bf33fd725c40afa (diff)
downloadqxmpp-95d3dfef904b3a90b64c8b28f93b3f4c04701048.tar.gz
replace QXmppIbbTransfer* by QXmppTransferManager
Diffstat (limited to 'source/QXmppTransferManager.h')
-rw-r--r--source/QXmppTransferManager.h125
1 files changed, 125 insertions, 0 deletions
diff --git a/source/QXmppTransferManager.h b/source/QXmppTransferManager.h
new file mode 100644
index 00000000..bfd781b3
--- /dev/null
+++ b/source/QXmppTransferManager.h
@@ -0,0 +1,125 @@
+/*
+ * Copyright (C) 2010 Bolloré telecom
+ *
+ * Author:
+ * 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 QXMPPTRANSFERMANAGER_H
+#define QXMPPTRANSFERMANAGER_H
+
+#include <QDateTime>
+
+#include "QXmppIq.h"
+
+class QXmppClient;
+class QXmppIbbCloseIq;
+class QXmppIbbDataIq;
+class QXmppIbbOpenIq;
+class QXmppStreamInitiationIq;
+
+class QXmppTransferManager;
+
+class QXmppTransferJob : public QObject
+{
+ Q_OBJECT
+
+public:
+ enum Error
+ {
+ NoError = 0,
+ FileCorruptError,
+ ProtocolError,
+ };
+
+ enum Method
+ {
+ InBandByteStream = 1,
+ SocksByteStream = 2,
+ };
+
+ void accept(QIODevice *output);
+
+ QXmppTransferJob::Error error() const;
+ QString jid() const;
+
+ // XEP-0096 : File transfer
+ QDateTime fileDate() const;
+ QString fileHash() const;
+ QString fileName() const;
+ int fileSize() const;
+
+signals:
+ void error(QXmppTransferJob::Error error);
+ void finished();
+ void progress(qint64 done, qint64 total);
+
+private:
+ QXmppTransferJob(const QString &jid, QXmppTransferManager *manager);
+ void terminate(QXmppTransferJob::Error error);
+
+ int m_done;
+ QXmppTransferJob::Error m_error;
+ QIODevice *m_iodevice;
+ QString m_jid;
+ QString m_sid;
+ int m_methods;
+ QString m_mimeType;
+
+ QDateTime m_fileDate;
+ QString m_fileHash;
+ QString m_fileName;
+ int m_fileSize;
+
+ QString m_requestId;
+ int m_ibbSequence;
+ friend class QXmppTransferManager;
+};
+
+class QXmppTransferManager : public QObject
+{
+ Q_OBJECT
+
+public:
+ QXmppTransferManager(QXmppClient* client);
+ QXmppTransferJob *sendFile(const QString &jid, const QString &fileName);
+
+signals:
+ void fileReceived(QXmppTransferJob *offer);
+
+private slots:
+ void ibbCloseIqReceived(const QXmppIbbCloseIq&);
+ void ibbDataIqReceived(const QXmppIbbDataIq&);
+ void ibbOpenIqReceived(const QXmppIbbOpenIq&);
+ void iqReceived(const QXmppIq&);
+ void streamInitiationIqReceived(const QXmppStreamInitiationIq&);
+
+private:
+ QXmppTransferJob *getJobByRequestId(const QString &jid, const QString &id);
+ QXmppTransferJob *getJobBySid(const QString &jid, const QString &sid);
+ void streamInitiationResultReceived(const QXmppStreamInitiationIq&);
+ void streamInitiationSetReceived(const QXmppStreamInitiationIq&);
+
+ // reference to client object (no ownership)
+ QXmppClient* m_client;
+ QList<QXmppTransferJob*> m_jobs;
+ int m_ibbBlockSize;
+};
+
+#endif