diff options
| author | Linus Jahn <lnj@kaidan.im> | 2020-08-09 11:19:54 +0200 |
|---|---|---|
| committer | Linus Jahn <lnj@kaidan.im> | 2021-06-27 20:12:26 +0200 |
| commit | 41e00fd8a82cae585a797c2f9d24ca1463a2f53f (patch) | |
| tree | 1e61cbb0764b4b2966d99cc855c16811dfc790bd /src/base/QXmppStream.cpp | |
| parent | 953d8588b94fec779bdf667c024150c9690470c4 (diff) | |
| download | qxmpp-41e00fd8a82cae585a797c2f9d24ca1463a2f53f.tar.gz | |
QXmppStream: Report packet sending result using QFutures
Diffstat (limited to 'src/base/QXmppStream.cpp')
| -rw-r--r-- | src/base/QXmppStream.cpp | 38 |
1 files changed, 28 insertions, 10 deletions
diff --git a/src/base/QXmppStream.cpp b/src/base/QXmppStream.cpp index bffaf4c7..7426f8b0 100644 --- a/src/base/QXmppStream.cpp +++ b/src/base/QXmppStream.cpp @@ -26,12 +26,15 @@ #include "QXmppConstants_p.h" #include "QXmppLogger.h" +#include "QXmppPacket_p.h" #include "QXmppStanza.h" #include "QXmppStreamManagement_p.h" #include "QXmppUtils.h" #include <QBuffer> #include <QDomDocument> +#include <QFuture> +#include <QFutureInterface> #include <QHostAddress> #include <QMap> #include <QRegularExpression> @@ -147,22 +150,28 @@ bool QXmppStream::sendData(const QByteArray &data) /// /// Sends an XMPP packet to the peer. /// -/// \param packet +/// \param stanza /// -bool QXmppStream::sendPacket(const QXmppStanza &packet) +bool QXmppStream::sendPacket(const QXmppStanza &stanza) { - // prepare packet - QByteArray data; - QXmlStreamWriter xmlStream(&data); - packet.toXml(&xmlStream); + // the first result is always reported immediately + return send(stanza).resultAt(0) != QXmpp::NotSent; +} - // send packet - bool success = sendData(data); +/// +/// Sends an XMPP packet to the peer. +/// +/// \since QXmpp 1.5 +/// +QFuture<QXmpp::PacketState> QXmppStream::send(const QXmppStanza &stanza) +{ + QXmppPacket packet(stanza); + sendPacket(packet); // handle stream management - d->streamManager.handlePacketSent(packet, data); + d->streamManager.handlePacketSent(packet); - return success; + return packet.future(); } /// @@ -334,6 +343,15 @@ void QXmppStream::processData(const QString &data) } } +void QXmppStream::sendPacket(QXmppPacket &packet) +{ + if (sendData(packet.data())) { + packet.reportResult(QXmpp::Sent); + } else { + packet.reportResult(QXmpp::NotSent); + } +} + /// /// Enables Stream Management acks / reqs (\xep{0198}). /// |
