QXmpp Version: 1.4.0
Loading...
Searching...
No Matches
QXmppTransferManager.h
1/*
2 * Copyright (C) 2008-2021 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 "QXmppClientExtension.h"
28
29#include <QDateTime>
30#include <QSharedData>
31#include <QUrl>
32#include <QVariant>
33
34class QTcpSocket;
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_FLAGS(Method Methods)
91 Q_PROPERTY(Direction direction READ direction CONSTANT)
93 Q_PROPERTY(QUrl localFileUrl READ localFileUrl WRITE setLocalFileUrl NOTIFY localFileUrlChanged)
95 Q_PROPERTY(QString jid READ jid CONSTANT)
97 Q_PROPERTY(Method method READ method CONSTANT)
99 Q_PROPERTY(State state READ state NOTIFY stateChanged)
100
101
102 Q_PROPERTY(QString fileName READ fileName CONSTANT)
104 Q_PROPERTY(qint64 fileSize READ fileSize CONSTANT)
105
106public:
110 OutgoingDirection
111 };
112 Q_ENUM(Direction)
113
114
115 enum Error {
116 NoError = 0,
120 ProtocolError
121 };
122 Q_ENUM(Error)
123
124
125 enum Method {
126 NoMethod = 0,
127 InBandMethod = 1,
128 SocksMethod = 2,
129 AnyMethod = 3
130 };
131 Q_ENUM(Method)
132 Q_DECLARE_FLAGS(Methods, Method)
133
134
135 enum State {
136 OfferState = 0,
137 StartState = 1,
138 TransferState = 2,
139 FinishedState = 3
140 };
141 Q_ENUM(State)
142
143 ~QXmppTransferJob() override;
144
145 // documentation needs to be here, see https://stackoverflow.com/questions/49192523/
147 QXmppTransferJob::Direction direction() const;
149 QString jid() const;
151 QXmppTransferJob::Method method() const;
153 QXmppTransferJob::State state() const;
154
155 QXmppTransferJob::Error error() const;
156 QString sid() const;
157 qint64 speed() const;
158
159 // XEP-0096 : File transfer
160 QXmppTransferFileInfo fileInfo() const;
161 // documentation needs to be here, see https://stackoverflow.com/questions/49192523/
163 QUrl localFileUrl() const;
164 void setLocalFileUrl(const QUrl &localFileUrl);
165
167 QDateTime fileDate() const;
168 QByteArray fileHash() const;
169 QString fileName() const;
170 qint64 fileSize() const;
172
173Q_SIGNALS:
177
185 void finished();
186
188 void localFileUrlChanged(const QUrl &localFileUrl);
189
191 void progress(qint64 done, qint64 total);
192
195
196public Q_SLOTS:
197 void abort();
198 void accept(const QString &filePath);
199 void accept(QIODevice *output);
200
201private Q_SLOTS:
202 void _q_terminated();
203
204private:
205 QXmppTransferJob(const QString &jid, QXmppTransferJob::Direction direction, QXmppClient *client, QObject *parent);
206 void setState(QXmppTransferJob::State state);
207 void terminate(QXmppTransferJob::Error error);
208
209 QXmppTransferJobPrivate *const d;
210 friend class QXmppTransferManager;
211 friend class QXmppTransferManagerPrivate;
212 friend class QXmppTransferIncomingJob;
213 friend class QXmppTransferOutgoingJob;
214};
215
235{
236 Q_OBJECT
237
239 Q_PROPERTY(QString proxy READ proxy WRITE setProxy)
241 Q_PROPERTY(bool proxyOnly READ proxyOnly WRITE setProxyOnly)
243 Q_PROPERTY(QXmppTransferJob::Methods supportedMethods READ supportedMethods WRITE setSupportedMethods)
244
245public:
247 ~QXmppTransferManager() override;
248
249 // documentation needs to be here, see https://stackoverflow.com/questions/49192523/
251 QString proxy() const;
252 void setProxy(const QString &proxyJid);
253
254 // documentation needs to be here, see https://stackoverflow.com/questions/49192523/
257 bool proxyOnly() const;
258 void setProxyOnly(bool proxyOnly);
259
260 // documentation needs to be here, see https://stackoverflow.com/questions/49192523/
264 QXmppTransferJob::Methods supportedMethods() const;
265 void setSupportedMethods(QXmppTransferJob::Methods methods);
266
268 QStringList discoveryFeatures() const override;
269 bool handleStanza(const QDomElement &element) override;
271
272Q_SIGNALS:
278
281
286
287public Q_SLOTS:
288 QXmppTransferJob *sendFile(const QString &jid, const QString &filePath, const QString &description = QString());
289 QXmppTransferJob *sendFile(const QString &jid, QIODevice *device, const QXmppTransferFileInfo &fileInfo, const QString &sid = QString());
290
291protected:
293 void setClient(QXmppClient *client) override;
295
296private Q_SLOTS:
297 void _q_iqReceived(const QXmppIq &);
298 void _q_jobDestroyed(QObject *object);
299 void _q_jobError(QXmppTransferJob::Error error);
300 void _q_jobFinished();
301 void _q_jobStateChanged(QXmppTransferJob::State state);
302 void _q_socksServerConnected(QTcpSocket *socket, const QString &hostName, quint16 port);
303
304private:
305 QXmppTransferManagerPrivate *d;
306
307 void byteStreamIqReceived(const QXmppByteStreamIq &);
308 void byteStreamResponseReceived(const QXmppIq &);
309 void byteStreamResultReceived(const QXmppByteStreamIq &);
310 void byteStreamSetReceived(const QXmppByteStreamIq &);
311 void ibbCloseIqReceived(const QXmppIbbCloseIq &);
312 void ibbDataIqReceived(const QXmppIbbDataIq &);
313 void ibbOpenIqReceived(const QXmppIbbOpenIq &);
314 void ibbResponseReceived(const QXmppIq &);
315 void streamInitiationIqReceived(const QXmppStreamInitiationIq &);
316 void streamInitiationResultReceived(const QXmppStreamInitiationIq &);
317 void streamInitiationSetReceived(const QXmppStreamInitiationIq &);
318 void socksServerSendOffer(QXmppTransferJob *job);
319
320 friend class QXmppTransferManagerPrivate;
321};
322
323Q_DECLARE_OPERATORS_FOR_FLAGS(QXmppTransferJob::Methods)
324
325#endif
QXmppByteStreamIq represents a SOCKS5 bytestreams negoatiation IQ as defined by XEP-0065: SOCKS5 Byte...
Definition: QXmppByteStreamIq.h:36
The QXmppClientExtension class is the base class for QXmppClient extensions.
Definition: QXmppClientExtension.h:47
The QXmppClient class is the main class for using QXmpp.
Definition: QXmppClient.h:94
QXmppIbbCloseIq represents an IBB close request as defined by XEP-0047: In-Band Bytestreams.
Definition: QXmppIbbIq.h:67
QXmppIbbCloseIq represents an IBB data request as defined by XEP-0047: In-Band Bytestreams.
Definition: QXmppIbbIq.h:93
QXmppIbbOpenIq represents an IBB open request as defined by XEP-0047: In-Band Bytestreams.
Definition: QXmppIbbIq.h:37
The QXmppIq class is the base class for all IQs.
Definition: QXmppIq.h:42
The QXmppLoggable class represents a source of logging messages.
Definition: QXmppLogger.h:124
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:125
Direction
This enum is used to describe the direction of a transfer job.
Definition: QXmppTransferManager.h:108
@ IncomingDirection
The file is being received.
Definition: QXmppTransferManager.h:109
State
This enum is used to describe the state of a transfer job.
Definition: QXmppTransferManager.h:135
Error
This enum is used to describe the type of error encountered by a transfer job.
Definition: QXmppTransferManager.h:115
@ AbortError
The file transfer was aborted.
Definition: QXmppTransferManager.h:117
@ FileAccessError
An error was encountered trying to access a local file.
Definition: QXmppTransferManager.h:118
@ FileCorruptError
The file is corrupt: the file size or hash do not match.
Definition: QXmppTransferManager.h:119
The QXmppTransferManager class provides support for sending and receiving files.
Definition: QXmppTransferManager.h:235
void fileReceived(QXmppTransferJob *job)
void jobStarted(QXmppTransferJob *job)
This signal is emitted whenever a transfer job is started.
void jobFinished(QXmppTransferJob *job)