aboutsummaryrefslogtreecommitdiff
path: root/src/base/QXmppStream.cpp
diff options
context:
space:
mode:
authorLinus Jahn <lnj@kaidan.im>2020-08-09 11:19:54 +0200
committerLinus Jahn <lnj@kaidan.im>2021-06-27 20:12:26 +0200
commit41e00fd8a82cae585a797c2f9d24ca1463a2f53f (patch)
tree1e61cbb0764b4b2966d99cc855c16811dfc790bd /src/base/QXmppStream.cpp
parent953d8588b94fec779bdf667c024150c9690470c4 (diff)
downloadqxmpp-41e00fd8a82cae585a797c2f9d24ca1463a2f53f.tar.gz
QXmppStream: Report packet sending result using QFutures
Diffstat (limited to 'src/base/QXmppStream.cpp')
-rw-r--r--src/base/QXmppStream.cpp38
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}).
///