From b7010fb164381e3852b4b43658910014ac374259 Mon Sep 17 00:00:00 2001 From: Linus Jahn Date: Sun, 5 Dec 2021 16:07:38 +0100 Subject: QXmppPacket: Use QFutureInterface directly without shared_ptr --- src/client/QXmppClient.cpp | 45 ++++++++++++++++++++++----------------------- 1 file changed, 22 insertions(+), 23 deletions(-) (limited to 'src/client/QXmppClient.cpp') diff --git a/src/client/QXmppClient.cpp b/src/client/QXmppClient.cpp index 00fc3201..9787f4b5 100644 --- a/src/client/QXmppClient.cpp +++ b/src/client/QXmppClient.cpp @@ -363,20 +363,20 @@ bool QXmppClient::sendPacket(const QXmppNonza &packet) QFuture QXmppClient::send(QXmppStanza &&stanza) { const auto sendEncrypted = [this](QFuture &&future) { - auto interface = std::make_shared>(QFutureInterfaceBase::Started); + QFutureInterface interface(QFutureInterfaceBase::Started); - await(future, this, [this, interface](EncryptMessageResult &&result) { + await(future, this, [this, interface](EncryptMessageResult &&result) mutable { if (const auto *xml = std::get_if(&result)) { auto future = d->stream->send(QXmppPacket(*xml, true, interface)); - await(future, this, [=](QXmpp::SendResult &&result) { - reportFinishedResult(*interface, result); + await(future, this, [interface](QXmpp::SendResult &&result) mutable { + reportFinishedResult(interface, result); }); } else { - reportFinishedResult(*interface, { std::get(result) }); + reportFinishedResult(interface, { std::get(result) }); } }); - return interface->future(); + return interface.future(); }; if (d->encryptionExtension) { @@ -444,49 +444,48 @@ QFuture QXmppClient::sendIq(QXmppIq &&iq) QFuture QXmppClient::sendSensitiveIq(QXmppIq &&iq) { const auto sendEncrypted = [this](QFuture &&future, const QString &id) { - auto interface = std::make_shared>(QFutureInterfaceBase::Started); - - await(future, this, [this, interface, id](IqEncryptResult result) { + QFutureInterface interface(QFutureInterfaceBase::Started); + await(future, this, [this, interface, id](IqEncryptResult result) mutable { if (const auto *xml = std::get_if(&result)) { // encrypted successfully - auto future = d->stream->sendIq(QXmppPacket(*xml, true, std::make_shared>()), id); - await(future, this, [this, interface](QXmppStream::IqResult result) { + auto future = d->stream->sendIq(QXmppPacket(*xml, true), id); + await(future, this, [this, interface](QXmppStream::IqResult result) mutable { if (const auto encryptedDom = std::get_if(&result)) { // received result (should be encrypted) if (d->encryptionExtension) { // decrypt auto future = d->encryptionExtension->decryptIq(*encryptedDom); - await(future, this, [interface, encryptedDom = *encryptedDom](IqDecryptResult result) { + await(future, this, [interface, encryptedDom = *encryptedDom](IqDecryptResult result) mutable { if (const auto dom = std::get_if(&result)) { // decrypted result - interface->reportResult(*dom); + interface.reportResult(*dom); } else if (std::holds_alternative(result)) { // the IQ response from the other entity was not encrypted // then report IQ response without modifications - interface->reportResult(encryptedDom); + interface.reportResult(encryptedDom); } else if (const auto error = std::get_if(&result)) { - interface->reportResult(*error); + interface.reportResult(*error); } - interface->reportFinished(); + interface.reportFinished(); }); } else { - interface->reportResult(QXmpp::SendError { + interface.reportResult(QXmpp::SendError { QStringLiteral("No decryption extension found."), QXmpp::SendError::EncryptionError }); - interface->reportFinished(); + interface.reportFinished(); } } else { - interface->reportResult(std::get(result)); - interface->reportFinished(); + interface.reportResult(std::get(result)); + interface.reportFinished(); } }); } else { - interface->reportResult(std::get(result)); - interface->reportFinished(); + interface.reportResult(std::get(result)); + interface.reportFinished(); } }); - return interface->future(); + return interface.future(); }; if (iq.id().isEmpty() || d->stream->hasIqId(iq.id())) { -- cgit v1.2.3