From 040b7d9a8c7625f93e93690e47dbabb71ff87fd7 Mon Sep 17 00:00:00 2001 From: Linus Jahn Date: Fri, 3 Sep 2021 18:17:40 +0200 Subject: Refactor packet sending: Add SendSuccess/SendError --- src/base/QXmppStream.cpp | 34 ++++++++++++++++------------------ 1 file changed, 16 insertions(+), 18 deletions(-) (limited to 'src/base/QXmppStream.cpp') diff --git a/src/base/QXmppStream.cpp b/src/base/QXmppStream.cpp index 28a26963..0ede6b18 100644 --- a/src/base/QXmppStream.cpp +++ b/src/base/QXmppStream.cpp @@ -176,8 +176,9 @@ bool QXmppStream::sendData(const QByteArray &data) /// bool QXmppStream::sendPacket(const QXmppNonza &stanza) { - // the first result is always reported immediately - return send(stanza).resultAt(0) != QXmpp::NotSent; + bool success; + send(stanza, success); + return success; } /// @@ -185,13 +186,19 @@ bool QXmppStream::sendPacket(const QXmppNonza &stanza) /// /// \since QXmpp 1.5 /// -QFuture QXmppStream::send(const QXmppNonza &stanza) +QFuture QXmppStream::send(const QXmppNonza &nonza) { - QXmppPacket packet(stanza); - sendPacket(packet); + bool success; + return send(nonza, success); +} + +QFuture QXmppStream::send(const QXmppNonza &nonza, bool &writtenToSocket) +{ + QXmppPacket packet(nonza); + writtenToSocket = sendData(packet.data()); // handle stream management - d->streamManager.handlePacketSent(packet); + d->streamManager.handlePacketSent(packet, writtenToSocket); return packet.future(); } @@ -222,13 +229,13 @@ QFuture QXmppStream::sendIq(const QXmppIq &iq) auto sendFuture = send(iq); if (sendFuture.isFinished()) { - if (sendFuture.result() == QXmpp::NotSent) { + if (std::holds_alternative(sendFuture.result())) { // early exit (saves QFutureWatcher) return makeReadyFuture(QXmpp::NotSent); } } else { - awaitLast(sendFuture, this, [this, id = iq.id()](QXmpp::PacketState result) { - if (result == QXmpp::NotSent) { + awaitLast(sendFuture, this, [this, id = iq.id()](QXmpp::SendResult result) { + if (std::holds_alternative(result)) { if (auto itr = d->runningIqs.find(id); itr != d->runningIqs.end()) { itr.value().reportResult(QXmpp::NotSent); itr.value().reportFinished(); @@ -427,15 +434,6 @@ void QXmppStream::processData(const QString &data) } } -void QXmppStream::sendPacket(QXmppPacket &packet) -{ - if (sendData(packet.data())) { - packet.reportResult(QXmpp::Sent); - } else { - packet.reportResult(QXmpp::NotSent); - } -} - bool QXmppStream::handleIqResponse(const QDomElement &stanza) { if (stanza.tagName() != QStringLiteral("iq")) { -- cgit v1.2.3