QXmpp Version: 0.9.3
Loading...
Searching...
No Matches
QXmppTransferManager.h
1/*
2 * Copyright (C) 2008-2014 The QXmpp developers
3 *
4 * Author:
5 * Jeremy Lainé
6 *
7 * Source:
8 * https://github.com/qxmpp-project/qxmpp
9 *
10 * This file is a part of QXmpp library.
11 *
12 * This library is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU Lesser General Public
14 * License as published by the Free Software Foundation; either
15 * version 2.1 of the License, or (at your option) any later version.
16 *
17 * This library is distributed in the hope that it will be useful,
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20 * Lesser General Public License for more details.
21 *
22 */
23
24#ifndef QXMPPTRANSFERMANAGER_H
25#define QXMPPTRANSFERMANAGER_H
26
27#include <QDateTime>
28#include <QSharedData>
29#include <QUrl>
30#include <QVariant>
31
32#include "QXmppClientExtension.h"
33
34class QTcpSocket;
35class QXmppByteStreamIq;
36class QXmppIbbCloseIq;
37class QXmppIbbDataIq;
38class QXmppIbbOpenIq;
39class QXmppIq;
40class QXmppStreamInitiationIq;
41class QXmppTransferFileInfoPrivate;
42class QXmppTransferJobPrivate;
44class QXmppTransferManagerPrivate;
45
46class QXMPP_EXPORT QXmppTransferFileInfo
47{
48public:
49 QXmppTransferFileInfo();
50 QXmppTransferFileInfo(const QXmppTransferFileInfo &other);
51 ~QXmppTransferFileInfo();
52
53 QDateTime date() const;
54 void setDate(const QDateTime &date);
55
56 QByteArray hash() const;
57 void setHash(const QByteArray &hash);
58
59 QString name() const;
60 void setName(const QString &name);
61
62 QString description() const;
63 void setDescription(const QString &description);
64
65 qint64 size() const;
66 void setSize(qint64 size);
67
68 bool isNull() const;
69 QXmppTransferFileInfo& operator=(const QXmppTransferFileInfo &other);
70 bool operator==(const QXmppTransferFileInfo &other) const;
71
73 void parse(const QDomElement &element);
74 void toXml(QXmlStreamWriter *writer) const;
76
77private:
78 QSharedDataPointer<QXmppTransferFileInfoPrivate> d;
79};
80
85
86class QXMPP_EXPORT QXmppTransferJob : public QXmppLoggable
87{
88 Q_OBJECT
89 Q_ENUMS(Direction Error State)
90 Q_FLAGS(Method Methods)
91 Q_PROPERTY(Direction direction READ direction CONSTANT)
92 Q_PROPERTY(QUrl localFileUrl READ localFileUrl WRITE setLocalFileUrl NOTIFY localFileUrlChanged)
93 Q_PROPERTY(QString jid READ jid CONSTANT)
94 Q_PROPERTY(Method method READ method CONSTANT)
95 Q_PROPERTY(State state READ state NOTIFY stateChanged)
96
97 Q_PROPERTY(QString fileName READ fileName CONSTANT)
98 Q_PROPERTY(qint64 fileSize READ fileSize CONSTANT)
99
100public:
103 {
105 OutgoingDirection
106 };
107
109 enum Error
110 {
111 NoError = 0,
115 ProtocolError
116 };
117
120 {
121 NoMethod = 0,
122 InBandMethod = 1,
123 SocksMethod = 2,
124 AnyMethod = 3
125 };
126 Q_DECLARE_FLAGS(Methods, Method)
127
128
129 enum State
130 {
131 OfferState = 0,
132 StartState = 1,
133 TransferState = 2,
134 FinishedState = 3
135 };
136
138
139 QXmppTransferJob::Direction direction() const;
140 QXmppTransferJob::Error error() const;
141 QString jid() const;
142 QXmppTransferJob::Method method() const;
143 QString sid() const;
144 qint64 speed() const;
145 QXmppTransferJob::State state() const;
146
147 // XEP-0096 : File transfer
148 QXmppTransferFileInfo fileInfo() const;
149 QUrl localFileUrl() const;
150 void setLocalFileUrl(const QUrl &localFileUrl);
151
153 QDateTime fileDate() const;
154 QByteArray fileHash() const;
155 QString fileName() const;
156 qint64 fileSize() const;
158
159signals:
163
171 void finished();
172
174 void localFileUrlChanged(const QUrl &localFileUrl);
175
177 void progress(qint64 done, qint64 total);
178
181
182public slots:
183 void abort();
184 void accept(const QString &filePath);
185 void accept(QIODevice *output);
186
187private slots:
188 void _q_terminated();
189
190private:
191 QXmppTransferJob(const QString &jid, QXmppTransferJob::Direction direction, QXmppClient *client, QObject *parent);
192 void setState(QXmppTransferJob::State state);
193 void terminate(QXmppTransferJob::Error error);
194
195 QXmppTransferJobPrivate *const d;
196 friend class QXmppTransferManager;
197 friend class QXmppTransferManagerPrivate;
198 friend class QXmppTransferIncomingJob;
199 friend class QXmppTransferOutgoingJob;
200};
201
218
220{
221 Q_OBJECT
222 Q_PROPERTY(QString proxy READ proxy WRITE setProxy)
223 Q_PROPERTY(bool proxyOnly READ proxyOnly WRITE setProxyOnly)
224 Q_PROPERTY(QXmppTransferJob::Methods supportedMethods READ supportedMethods WRITE setSupportedMethods)
225
226public:
229
230 QString proxy() const;
231 void setProxy(const QString &proxyJid);
232
233 bool proxyOnly() const;
234 void setProxyOnly(bool proxyOnly);
235
236 QXmppTransferJob::Methods supportedMethods() const;
237 void setSupportedMethods(QXmppTransferJob::Methods methods);
238
240 QStringList discoveryFeatures() const;
241 bool handleStanza(const QDomElement &element);
243
244signals:
250
253
258
259public slots:
260 QXmppTransferJob *sendFile(const QString &jid, const QString &filePath, const QString &description = QString());
261 QXmppTransferJob *sendFile(const QString &jid, QIODevice *device, const QXmppTransferFileInfo &fileInfo, const QString &sid = QString());
262
263protected:
265 void setClient(QXmppClient* client);
267
268private slots:
269 void _q_iqReceived(const QXmppIq&);
270 void _q_jobDestroyed(QObject *object);
271 void _q_jobError(QXmppTransferJob::Error error);
272 void _q_jobFinished();
273 void _q_jobStateChanged(QXmppTransferJob::State state);
274 void _q_socksServerConnected(QTcpSocket *socket, const QString &hostName, quint16 port);
275
276private:
277 QXmppTransferManagerPrivate *d;
278
279 void byteStreamIqReceived(const QXmppByteStreamIq&);
280 void byteStreamResponseReceived(const QXmppIq&);
281 void byteStreamResultReceived(const QXmppByteStreamIq&);
282 void byteStreamSetReceived(const QXmppByteStreamIq&);
283 void ibbCloseIqReceived(const QXmppIbbCloseIq&);
284 void ibbDataIqReceived(const QXmppIbbDataIq&);
285 void ibbOpenIqReceived(const QXmppIbbOpenIq&);
286 void ibbResponseReceived(const QXmppIq&);
287 void streamInitiationIqReceived(const QXmppStreamInitiationIq&);
288 void streamInitiationResultReceived(const QXmppStreamInitiationIq&);
289 void streamInitiationSetReceived(const QXmppStreamInitiationIq&);
290 void socksServerSendOffer(QXmppTransferJob *job);
291
292 friend class QXmppTransferManagerPrivate;
293};
294
295Q_DECLARE_OPERATORS_FOR_FLAGS(QXmppTransferJob::Methods)
296
297#endif
The QXmppClientExtension class is the base class for QXmppClient extensions.
Definition: QXmppClientExtension.h:48
The QXmppClient class is the main class for using QXmpp.
Definition: QXmppClient.h:81
The QXmppIq class is the base class for all IQs.
Definition: QXmppIq.h:43
The QXmppLoggable class represents a source of logging messages.
Definition: QXmppLogger.h:112
The QXmppTransferJob class represents a single file transfer job.
Definition: QXmppTransferManager.h:87
void stateChanged(QXmppTransferJob::State state)
This signal is emitted when the transfer job changes state.
void progress(qint64 done, qint64 total)
This signal is emitted to indicate the progress of this transfer job.
void error(QXmppTransferJob::Error error)
void localFileUrlChanged(const QUrl &localFileUrl)
This signal is emitted when the local file URL changes.
Method
This enum is used to describe a transfer method.
Definition: QXmppTransferManager.h:120
Direction
This enum is used to describe the direction of a transfer job.
Definition: QXmppTransferManager.h:103
@ IncomingDirection
The file is being received.
Definition: QXmppTransferManager.h:104
State
This enum is used to describe the state of a transfer job.
Definition: QXmppTransferManager.h:130
Error
This enum is used to describe the type of error encountered by a transfer job.
Definition: QXmppTransferManager.h:110
@ AbortError
The file transfer was aborted.
Definition: QXmppTransferManager.h:112
@ FileAccessError
An error was encountered trying to access a local file.
Definition: QXmppTransferManager.h:113
@ FileCorruptError
The file is corrupt: the file size or hash do not match.
Definition: QXmppTransferManager.h:114
The QXmppTransferManager class provides support for sending and receiving files.
Definition: QXmppTransferManager.h:220
void fileReceived(QXmppTransferJob *job)
void jobStarted(QXmppTransferJob *job)
This signal is emitted whenever a transfer job is started.
void jobFinished(QXmppTransferJob *job)