aboutsummaryrefslogtreecommitdiff
path: root/source/QXmppTransferManager.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 /source/QXmppTransferManager.h
parent551c284e35280b7b91a939fe7352e496ffea402a (diff)
downloadqxmpp-40c39853816cfab113d79682c34bc76a2c79c357.tar.gz
rename "source" directory to "src"
Diffstat (limited to 'source/QXmppTransferManager.h')
-rw-r--r--source/QXmppTransferManager.h280
1 files changed, 0 insertions, 280 deletions
diff --git a/source/QXmppTransferManager.h b/source/QXmppTransferManager.h
deleted file mode 100644
index c3ef6d9a..00000000
--- a/source/QXmppTransferManager.h
+++ /dev/null
@@ -1,280 +0,0 @@
-/*
- * Copyright (C) 2008-2010 The QXmpp developers
- *
- * 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 <QCryptographicHash>
-#include <QDateTime>
-#include <QHash>
-#include <QHostAddress>
-#include <QVariant>
-
-#include "QXmppIq.h"
-#include "QXmppByteStreamIq.h"
-#include "QXmppLogger.h"
-
-class QTcpSocket;
-class QXmppByteStreamIq;
-class QXmppStream;
-class QXmppIbbCloseIq;
-class QXmppIbbDataIq;
-class QXmppIbbOpenIq;
-class QXmppSocksClient;
-class QXmppSocksServer;
-class QXmppStreamInitiationIq;
-
-class QXmppTransferFileInfo
-{
-public:
- QXmppTransferFileInfo();
-
- QDateTime date() const;
- void setDate(const QDateTime &date);
-
- QByteArray hash() const;
- void setHash(const QByteArray &hash);
-
- QString name() const;
- void setName(const QString &name);
-
- qint64 size() const;
- void setSize(qint64 size);
-
- bool operator==(const QXmppTransferFileInfo &other) const;
-
-private:
- QDateTime m_date;
- QByteArray m_hash;
- QString m_name;
- qint64 m_size;
-};
-
-/// \brief The QXmppTransferJob class represents a single file transfer job.
-///
-/// \sa QXmppTransferManager
-///
-
-class QXmppTransferJob : public QObject
-{
- Q_OBJECT
-
-public:
- /// This enum is used to describe the direction of a transfer job.
- enum Direction
- {
- IncomingDirection, ///< The file is being received.
- OutgoingDirection, ///< The file is being sent.
- };
-
- /// This enum is used to describe the type of error encountered by a transfer job.
- enum Error
- {
- NoError = 0, ///< No error occured.
- AbortError, ///< The file transfer was aborted.
- FileAccessError, ///< An error was encountered trying to access a local file.
- FileCorruptError, ///< The file is corrupt: the file size or hash do not match.
- ProtocolError, ///< An error was encountered in the file transfer protocol.
- };
-
- /// This enum is used to describe a transfer method.
- enum Method
- {
- NoMethod = 0, ///< No transfer method.
- InBandMethod = 1, ///< XEP-0047: In-Band Bytestreams
- SocksMethod = 2, ///< XEP-0065: SOCKS5 Bytestreams
- AnyMethod = 3, ///< Any supported transfer method.
- };
- Q_DECLARE_FLAGS(Methods, Method)
-
- /// This enum is used to describe the state of a transfer job.
- enum State
- {
- OfferState = 0, ///< The transfer is being offered to the remote party.
- StartState = 1, ///< The transfer is being connected.
- TransferState = 2, ///< The transfer is ongoing.
- FinishedState = 3, ///< The transfer is finished.
- };
-
- void abort();
- void accept(QIODevice *output);
-
- QVariant data(int role) const;
- void setData(int role, const QVariant &value);
-
- QXmppTransferJob::Direction direction() const;
- QXmppTransferJob::Error error() const;
- QString jid() const;
- QXmppTransferJob::Method method() const;
- QString sid() const;
- QXmppTransferJob::State state() const;
-
- // XEP-0096 : File transfer
- QXmppTransferFileInfo fileInfo() const;
- QDateTime fileDate() const;
- QByteArray fileHash() const;
- QString fileName() const;
- qint64 fileSize() const;
-
-signals:
- /// This signal is emitted when an error is encountered while
- /// processing the transfer job.
- void error(QXmppTransferJob::Error error);
-
- /// This signal is emitted when the transfer job is finished.
- ///
- /// You can determine if the job completed successfully by testing whether
- /// error() returns QXmppTransferJob::NoError.
- ///
- /// Note: Do not delete the job in the slot connected to this signal,
- /// instead use deleteLater().
- void finished();
-
- /// This signal is emitted to indicate the progress of this transfer job.
- void progress(qint64 done, qint64 total);
-
- /// This signal is emitted when the transfer job changes state.
- void stateChanged(QXmppTransferJob::State state);
-
-private slots:
- void disconnected();
- void receiveData();
- void sendData();
- void slotTerminated();
-
-private:
- QXmppTransferJob(const QString &jid, QXmppTransferJob::Direction direction, QObject *parent);
- void checkData();
- void setState(QXmppTransferJob::State state);
- void terminate(QXmppTransferJob::Error error);
- bool writeData(const QByteArray &data);
-
- int m_blockSize;
- QXmppTransferJob::Direction m_direction;
- qint64 m_done;
- QXmppTransferJob::Error m_error;
- QCryptographicHash m_hash;
- QIODevice *m_iodevice;
- QString m_offerId;
- QString m_jid;
- QString m_sid;
- Method m_method;
- QString m_mimeType;
- QString m_requestId;
- State m_state;
-
- // arbitrary data
- QHash<int, QVariant> m_data;
-
- // file meta-data
- QXmppTransferFileInfo m_fileInfo;
-
- // for in-band bytestreams
- int m_ibbSequence;
-
- // for socks5 bytestreams
- QTcpSocket *m_socksSocket;
- QXmppByteStreamIq::StreamHost m_socksProxy;
-
- friend class QXmppTransferManager;
-};
-
-/// \brief The QXmppTransferManager class provides support for sending and
-/// receiving files.
-///
-/// Stream initiation is performed as described in XEP-0095: Stream Initiation
-/// and XEP-0096: SI File Transfer. The actual file transfer is then performed
-/// using either XEP-0065: SOCKS5 Bytestreams or XEP-0047: In-Band Bytestreams.
-///
-/// \ingroup Managers
-
-class QXmppTransferManager : public QObject
-{
- Q_OBJECT
-
-public:
- QXmppTransferManager(QXmppStream *stream, QObject *parent = 0);
- QXmppTransferJob *sendFile(const QString &jid, const QString &fileName, const QString &sid = QString());
- QXmppTransferJob *sendFile(const QString &jid, QIODevice *device, const QXmppTransferFileInfo &fileInfo, const QString &sid = QString());
-
- QString proxy() const;
- void setProxy(const QString &proxyJid);
-
- bool proxyOnly() const;
- void setProxyOnly(bool proxyOnly);
-
- QXmppTransferJob::Methods supportedMethods() const;
- void setSupportedMethods(QXmppTransferJob::Methods methods);
-
-signals:
- /// This signal is emitted when a new file transfer offer is received.
- ///
- /// To accept the transfer job, call the job's QXmppTransferJob::accept() method.
- /// To refuse the transfer job, call the job's QXmppTransferJob::abort() method.
- void fileReceived(QXmppTransferJob *offer);
-
- /// This signal is emitted whenever a transfer job is finished.
- ///
- /// \sa QXmppTransferJob::finished()
- void finished(QXmppTransferJob *job);
-
- /// This signal is emitted to send logging messages.
- void logMessage(QXmppLogger::MessageType type, const QString &msg);
-
-private slots:
- void byteStreamIqReceived(const QXmppByteStreamIq&);
- void ibbCloseIqReceived(const QXmppIbbCloseIq&);
- void ibbDataIqReceived(const QXmppIbbDataIq&);
- void ibbOpenIqReceived(const QXmppIbbOpenIq&);
- void iqReceived(const QXmppIq&);
- void jobDestroyed(QObject *object);
- void jobError(QXmppTransferJob::Error error);
- void jobFinished();
- void jobStateChanged(QXmppTransferJob::State state);
- void socksServerConnected(QTcpSocket *socket, const QString &hostName, quint16 port);
- void streamInitiationIqReceived(const QXmppStreamInitiationIq&);
-
-private:
- QXmppTransferJob *getJobByRequestId(const QString &jid, const QString &id);
- QXmppTransferJob *getJobBySid(const QString &jid, const QString &sid);
- 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 socksServerSendOffer(QXmppTransferJob *job);
-
- // reference to XMPP stream (no ownership)
- QXmppStream* m_stream;
- int m_ibbBlockSize;
- QList<QXmppTransferJob*> m_jobs;
- QString m_proxy;
- bool m_proxyOnly;
- QXmppSocksServer *m_socksServer;
- QXmppTransferJob::Methods m_supportedMethods;
-};
-
-Q_DECLARE_OPERATORS_FOR_FLAGS(QXmppTransferJob::Methods)
-
-#endif