aboutsummaryrefslogtreecommitdiff
path: root/src/client/QXmppOutgoingClient.cpp
diff options
context:
space:
mode:
authorLinus Jahn <lnj@kaidan.im>2020-09-09 15:05:23 +0200
committerLinus Jahn <lnj@kaidan.im>2021-06-27 20:17:17 +0200
commit3caffcebf16680576d8dd785437eed16a6c5f36d (patch)
tree0805a42decacdda2ace8d43196c25fe21a6fad79 /src/client/QXmppOutgoingClient.cpp
parent7e936d200db4855ceaf9eabc1e84c3574a12ec98 (diff)
Add reporting of IQ responses with QFutures
Diffstat (limited to 'src/client/QXmppOutgoingClient.cpp')
-rw-r--r--src/client/QXmppOutgoingClient.cpp16
1 files changed, 15 insertions, 1 deletions
diff --git a/src/client/QXmppOutgoingClient.cpp b/src/client/QXmppOutgoingClient.cpp
index a8bfb62d..6479f334 100644
--- a/src/client/QXmppOutgoingClient.cpp
+++ b/src/client/QXmppOutgoingClient.cpp
@@ -213,6 +213,20 @@ QXmppOutgoingClient::QXmppOutgoingClient(QObject *parent)
connect(this, &QXmppStream::connected, this, &QXmppOutgoingClient::pingStart);
connect(this, &QXmppStream::disconnected, this, &QXmppOutgoingClient::pingStop);
+
+ // IQ response handling
+ connect(this, &QXmppStream::connected, this, [=]() {
+ if (!d->streamResumed) {
+ // we can't expect a response because this is a new stream
+ cancelOngoingIqs();
+ }
+ });
+ connect(this, &QXmppStream::disconnected, this, [=]() {
+ if (!d->canResume) {
+ // this stream can't be resumed; we can cancel all ongoing IQs
+ cancelOngoingIqs();
+ }
+ });
}
/// Destroys an outgoing client stream.
@@ -510,7 +524,7 @@ void QXmppOutgoingClient::handleStanza(const QDomElement &nodeRecv)
d->bindModeAvailable = (features.bindMode() != QXmppStreamFeatures::Disabled);
d->streamManagementAvailable = (features.streamManagementMode() != QXmppStreamFeatures::Disabled);
- // chech whether the stream can be resumed
+ // check whether the stream can be resumed
if (d->streamManagementAvailable && d->canResume) {
d->isResuming = true;
QXmppStreamManagementResume streamManagementResume(lastIncomingSequenceNumber(), d->smId);