From 41e00fd8a82cae585a797c2f9d24ca1463a2f53f Mon Sep 17 00:00:00 2001 From: Linus Jahn Date: Sun, 9 Aug 2020 11:19:54 +0200 Subject: QXmppStream: Report packet sending result using QFutures --- src/base/QXmppStream.cpp | 38 ++++++++++++++++++++++++++++---------- 1 file changed, 28 insertions(+), 10 deletions(-) (limited to 'src/base/QXmppStream.cpp') 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 #include +#include +#include #include #include #include @@ -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 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}). /// -- cgit v1.2.3