QXmpp Version: 1.10.3
Loading...
Searching...
No Matches
QXmppTransferManager.h
1// SPDX-FileCopyrightText: 2010 Jeremy Lainé <jeremy.laine@m4x.org>
2//
3// SPDX-License-Identifier: LGPL-2.1-or-later
4
5#ifndef QXMPPTRANSFERMANAGER_H
6#define QXMPPTRANSFERMANAGER_H
7
8#include "QXmppClientExtension.h"
9
10#include <QDateTime>
11#include <QSharedData>
12#include <QUrl>
13#include <QVariant>
14
15class QTcpSocket;
17class QXmppIbbCloseIq;
18class QXmppIbbDataIq;
19class QXmppIbbOpenIq;
20class QXmppIq;
21class QXmppStreamInitiationIq;
22class QXmppTransferFileInfoPrivate;
23class QXmppTransferJobPrivate;
25class QXmppTransferManagerPrivate;
26
27class QXMPP_EXPORT QXmppTransferFileInfo
28{
29public:
30 QXmppTransferFileInfo();
31 QXmppTransferFileInfo(const QXmppTransferFileInfo &other);
32 ~QXmppTransferFileInfo();
33
34 QDateTime date() const;
35 void setDate(const QDateTime &date);
36
37 QByteArray hash() const;
38 void setHash(const QByteArray &hash);
39
40 QString name() const;
41 void setName(const QString &name);
42
43 QString description() const;
44 void setDescription(const QString &description);
45
46 qint64 size() const;
47 void setSize(qint64 size);
48
49 bool isNull() const;
50 QXmppTransferFileInfo &operator=(const QXmppTransferFileInfo &other);
51 bool operator==(const QXmppTransferFileInfo &other) const;
52
54 void parse(const QDomElement &element);
55 void toXml(QXmlStreamWriter *writer) const;
57
58private:
59 QSharedDataPointer<QXmppTransferFileInfoPrivate> d;
60};
61
62class QXMPP_EXPORT QXmppTransferJob : public QXmppLoggable
63{
64 Q_OBJECT
65 Q_FLAGS(Method Methods)
67 Q_PROPERTY(Direction direction READ direction CONSTANT)
71 Q_PROPERTY(QString jid READ jid CONSTANT)
73 Q_PROPERTY(Method method READ method CONSTANT)
75 Q_PROPERTY(State state READ state NOTIFY stateChanged)
76
78 Q_PROPERTY(QString fileName READ fileName CONSTANT)
80 Q_PROPERTY(qint64 fileSize READ fileSize CONSTANT)
81
82public:
88 Q_ENUM(Direction)
89
90
98 Q_ENUM(Error)
99
100
107 Q_ENUM(Method)
108 Q_DECLARE_FLAGS(Methods, Method)
109
110
117 Q_ENUM(State)
118
119 ~QXmppTransferJob() override;
120
121 // documentation needs to be here, see https://stackoverflow.com/questions/49192523/
123 QXmppTransferJob::Direction direction() const;
125 QString jid() const;
127 QXmppTransferJob::Method method() const;
129 QXmppTransferJob::State state() const;
130
131 QXmppTransferJob::Error error() const;
132 QString sid() const;
133 qint64 speed() const;
134
135 // XEP-0096 : File transfer
136 QXmppTransferFileInfo fileInfo() const;
137 // documentation needs to be here, see https://stackoverflow.com/questions/49192523/
139 QUrl localFileUrl() const;
140 void setLocalFileUrl(const QUrl &localFileUrl);
141
143 QDateTime fileDate() const;
144 QByteArray fileHash() const;
145 QString fileName() const;
146 qint64 fileSize() const;
148
149Q_SIGNALS:
153
161 void finished();
162
165
167 void progress(qint64 done, qint64 total);
168
171
172public Q_SLOTS:
173 void abort();
174 void accept(const QString &filePath);
175 void accept(QIODevice *output);
176
177private Q_SLOTS:
178 void _q_terminated();
179
180private:
181 QXmppTransferJob(const QString &jid, QXmppTransferJob::Direction direction, QXmppClient *client, QObject *parent);
182 void setState(QXmppTransferJob::State state);
183 void terminate(QXmppTransferJob::Error error);
184
185 const std::unique_ptr<QXmppTransferJobPrivate> d;
186 friend class QXmppTransferManager;
187 friend class QXmppTransferManagerPrivate;
188 friend class QXmppTransferIncomingJob;
189 friend class QXmppTransferOutgoingJob;
190};
191
193{
194 Q_OBJECT
195
197 Q_PROPERTY(QString proxy READ proxy WRITE setProxy)
199 Q_PROPERTY(bool proxyOnly READ proxyOnly WRITE setProxyOnly)
202
203public:
205 ~QXmppTransferManager() override;
206
207 // documentation needs to be here, see https://stackoverflow.com/questions/49192523/
209 QString proxy() const;
210 void setProxy(const QString &proxyJid);
211
212 // documentation needs to be here, see https://stackoverflow.com/questions/49192523/
215 bool proxyOnly() const;
216 void setProxyOnly(bool proxyOnly);
217
218 // documentation needs to be here, see https://stackoverflow.com/questions/49192523/
222 QXmppTransferJob::Methods supportedMethods() const;
223 void setSupportedMethods(QXmppTransferJob::Methods methods);
224
226 QStringList discoveryFeatures() const override;
227 bool handleStanza(const QDomElement &element) override;
229
230Q_SIGNALS:
236
239
244
245public Q_SLOTS:
246 QXmppTransferJob *sendFile(const QString &jid, const QString &filePath, const QString &description = QString());
247 QXmppTransferJob *sendFile(const QString &jid, QIODevice *device, const QXmppTransferFileInfo &fileInfo, const QString &sid = QString());
248
249protected:
251 void onRegistered(QXmppClient *client) override;
252 void onUnregistered(QXmppClient *client) override;
254
255private Q_SLOTS:
256 void _q_iqReceived(const QXmppIq &);
257 void _q_jobDestroyed(QObject *object);
258 void _q_jobError(QXmppTransferJob::Error error);
259 void _q_jobFinished();
260 void _q_jobStateChanged(QXmppTransferJob::State state);
261 void _q_socksServerConnected(QTcpSocket *socket, const QString &hostName, quint16 port);
262
263private:
264 const std::unique_ptr<QXmppTransferManagerPrivate> d;
265
266 void byteStreamIqReceived(const QXmppByteStreamIq &);
267 void byteStreamResponseReceived(const QXmppIq &);
268 void byteStreamResultReceived(const QXmppByteStreamIq &);
269 void byteStreamSetReceived(const QXmppByteStreamIq &);
270 void ibbCloseIqReceived(const QXmppIbbCloseIq &);
271 void ibbDataIqReceived(const QXmppIbbDataIq &);
272 void ibbOpenIqReceived(const QXmppIbbOpenIq &);
273 void ibbResponseReceived(const QXmppIq &);
274 void streamInitiationIqReceived(const QXmppStreamInitiationIq &);
275 void streamInitiationResultReceived(const QXmppStreamInitiationIq &);
276 void streamInitiationSetReceived(const QXmppStreamInitiationIq &);
277 void socksServerSendOffer(QXmppTransferJob *job);
278
279 friend class QXmppTransferManagerPrivate;
280};
281
282Q_DECLARE_OPERATORS_FOR_FLAGS(QXmppTransferJob::Methods)
283
284#endif
Definition QXmppByteStreamIq.h:13
virtual QStringList discoveryFeatures() const
Definition QXmppClientExtension.cpp:22
virtual void onUnregistered(QXmppClient *client)
Definition QXmppClientExtension.cpp:95
virtual void onRegistered(QXmppClient *client)
Definition QXmppClientExtension.cpp:85
QXmppClient * client() const
Definition QXmppClientExtension.cpp:57
QXmppClientExtension()
Definition QXmppClientExtension.cpp:12
virtual bool handleStanza(const QDomElement &stanza)
You need to implement this method to process incoming XMPP stanzas.
Definition client/compat/removed_api.cpp:26
Main class for starting and managing connections to XMPP servers.
Definition QXmppClient.h:62
Definition QXmppIbbIq.h:36
Definition QXmppIbbIq.h:12
The QXmppIq class is the base class for all IQs.
Definition QXmppIq.h:23
QXmppLoggable(QObject *parent=nullptr)
Definition QXmppLogger.cpp:57
Definition QXmppTransferManager.h:28
QDateTime date() const
Definition QXmppTransferManager.cpp:75
void setHash(const QByteArray &hash)
Definition QXmppTransferManager.cpp:99
void setName(const QString &name)
Definition QXmppTransferManager.cpp:115
bool isNull() const
Definition QXmppTransferManager.cpp:155
void setSize(qint64 size)
Definition QXmppTransferManager.cpp:147
QXmppTransferFileInfo(const QXmppTransferFileInfo &other)
Default copy-constructor.
QXmppTransferFileInfo & operator=(const QXmppTransferFileInfo &other)
Default assignment operator.
void setDescription(const QString &description)
Definition QXmppTransferManager.cpp:131
bool operator==(const QXmppTransferFileInfo &other) const
Definition QXmppTransferManager.cpp:167
QString name() const
Definition QXmppTransferManager.cpp:107
qint64 size() const
Definition QXmppTransferManager.cpp:139
QByteArray hash() const
Definition QXmppTransferManager.cpp:91
QString description() const
Definition QXmppTransferManager.cpp:123
void setDate(const QDateTime &date)
Definition QXmppTransferManager.cpp:83
Definition QXmppTransferManager.h:63
void stateChanged(QXmppTransferJob::State state)
This signal is emitted when the transfer job changes state.
QString fileName
The name of the file.
Definition QXmppTransferManager.h:78
QXmppTransferJob::Error error() const
Definition QXmppTransferManager.cpp:322
void abort()
Definition QXmppTransferManager.cpp:279
void progress(qint64 done, qint64 total)
This signal is emitted to indicate the progress of this transfer job.
Method method
The job's transfer method.
Definition QXmppTransferManager.h:73
void setLocalFileUrl(const QUrl &localFileUrl)
Definition QXmppTransferManager.cpp:343
void error(QXmppTransferJob::Error error)
void localFileUrlChanged(const QUrl &localFileUrl)
This signal is emitted when the local file URL changes.
qint64 fileSize
The size of the file.
Definition QXmppTransferManager.h:80
Method
This enum is used to describe a transfer method.
Definition QXmppTransferManager.h:101
@ AnyMethod
Any supported transfer method.
Definition QXmppTransferManager.h:105
@ NoMethod
No transfer method.
Definition QXmppTransferManager.h:102
@ SocksMethod
XEP-0065: SOCKS5 Bytestreams
Definition QXmppTransferManager.h:104
@ InBandMethod
XEP-0047: In-Band Bytestreams
Definition QXmppTransferManager.h:103
Direction
This enum is used to describe the direction of a transfer job.
Definition QXmppTransferManager.h:84
@ OutgoingDirection
The file is being sent.
Definition QXmppTransferManager.h:86
@ IncomingDirection
The file is being received.
Definition QXmppTransferManager.h:85
QString jid
The remote party's JID.
Definition QXmppTransferManager.h:71
State
This enum is used to describe the state of a transfer job.
Definition QXmppTransferManager.h:111
@ OfferState
The transfer is being offered to the remote party.
Definition QXmppTransferManager.h:112
@ FinishedState
The transfer is finished.
Definition QXmppTransferManager.h:115
@ StartState
The transfer is being connected.
Definition QXmppTransferManager.h:113
@ TransferState
The transfer is ongoing.
Definition QXmppTransferManager.h:114
QUrl localFileUrl
The local file URL.
Definition QXmppTransferManager.h:69
Error
This enum is used to describe the type of error encountered by a transfer job.
Definition QXmppTransferManager.h:91
@ AbortError
The file transfer was aborted.
Definition QXmppTransferManager.h:93
@ FileAccessError
An error was encountered trying to access a local file.
Definition QXmppTransferManager.h:94
@ ProtocolError
An error was encountered in the file transfer protocol.
Definition QXmppTransferManager.h:96
@ FileCorruptError
The file is corrupt: the file size or hash do not match.
Definition QXmppTransferManager.h:95
@ NoError
No error occurred.
Definition QXmppTransferManager.h:92
Direction direction
The job's transfer direction.
Definition QXmppTransferManager.h:67
void accept(const QString &filePath)
Definition QXmppTransferManager.cpp:287
State state
The job's state.
Definition QXmppTransferManager.h:75
Definition QXmppTransferManager.h:193
void fileReceived(QXmppTransferJob *job)
void setSupportedMethods(QXmppTransferJob::Methods methods)
Definition QXmppTransferManager.cpp:1620
void jobStarted(QXmppTransferJob *job)
This signal is emitted whenever a transfer job is started.
QXmppTransferJob * sendFile(const QString &jid, const QString &filePath, const QString &description=QString())
Definition QXmppTransferManager.cpp:1257
QString proxy
The JID of the bytestream proxy to use for outgoing transfers.
Definition QXmppTransferManager.h:197
void setProxyOnly(bool proxyOnly)
Definition QXmppTransferManager.cpp:1603
QXmppTransferManager()
Definition QXmppTransferManager.cpp:789
bool proxyOnly
Whether the proxy will systematically be used for outgoing SOCKS5 bytestream transfers.
Definition QXmppTransferManager.h:199
void setProxy(const QString &proxyJid)
Definition QXmppTransferManager.cpp:1586
QXmppTransferJob::Methods supportedMethods
The supported stream methods.
Definition QXmppTransferManager.h:201
void jobFinished(QXmppTransferJob *job)