diff options
| author | Linus Jahn <lnj@kaidan.im> | 2023-01-22 18:06:09 +0100 |
|---|---|---|
| committer | Linus Jahn <lnj@kaidan.im> | 2023-01-22 18:10:44 +0100 |
| commit | 46f3831fd238b4c1fb10d44e4531d9e59d574c97 (patch) | |
| tree | f21c85c98502ef3821d52ee4964060a2c49885d2 /src/base | |
| parent | df37c35aa443e6ca7e3baad5f1bbeb379063df55 (diff) | |
| download | qxmpp-46f3831fd238b4c1fb10d44e4531d9e59d574c97.tar.gz | |
Use QXmppError in all IQ results instead of StanzaError
This allows us to report different error types with more information and
makes it possible to distinguish stanza errors and errors generated
locally.
Part of #501.
Diffstat (limited to 'src/base')
| -rw-r--r-- | src/base/QXmppFutureUtils_p.h | 9 | ||||
| -rw-r--r-- | src/base/QXmppStream.cpp | 9 |
2 files changed, 8 insertions, 10 deletions
diff --git a/src/base/QXmppFutureUtils_p.h b/src/base/QXmppFutureUtils_p.h index 5e6b5ca8..95150008 100644 --- a/src/base/QXmppFutureUtils_p.h +++ b/src/base/QXmppFutureUtils_p.h @@ -158,14 +158,15 @@ auto parseIq(Input &&sendResult, Converter convert) -> decltype(convert({})) IqType iq; iq.parse(element); if (iq.type() == QXmppIq::Error) { - return iq.error(); + if (auto err = iq.errorOptional()) { + return QXmppError { err->text(), std::move(*err) }; + } + return QXmppError { QStringLiteral("Unknown error.") }; } return convert(std::move(iq)); }, [](QXmppError error) -> Result { - using Error = QXmppStanza::Error; - return Error(Error::Wait, Error::UndefinedCondition, - QStringLiteral("Couldn't send request: ") + error.description); + return error; }, }, sendResult); diff --git a/src/base/QXmppStream.cpp b/src/base/QXmppStream.cpp index d1a5ccd2..7274e242 100644 --- a/src/base/QXmppStream.cpp +++ b/src/base/QXmppStream.cpp @@ -251,8 +251,8 @@ QXmppTask<QXmppStream::IqResult> QXmppStream::sendIq(QXmppPacket &&packet, const auto sendFuture = send(std::move(packet)); if (sendFuture.isFinished()) { - if (std::holds_alternative<QXmppError>(sendFuture.result())) { - // early exit (saves QFutureWatcher) + if (std::holds_alternative<QXmppError>(sendFuture.takeResult())) { + // early exit return makeReadyTask<IqResult>(std::get<QXmppError>(sendFuture.result())); } } else { @@ -266,10 +266,7 @@ QXmppTask<QXmppStream::IqResult> QXmppStream::sendIq(QXmppPacket &&packet, const }); } - IqState state { - {}, - to, - }; + IqState state { {}, to }; auto task = state.interface.task(); d->runningIqs.insert(id, std::move(state)); return task; |
