From af22e07a2300dc18ec62eee30508569062d918b3 Mon Sep 17 00:00:00 2001 From: Linus Jahn Date: Wed, 9 Sep 2020 15:32:01 +0200 Subject: QXmppClient: Advertise stream management state --- src/client/QXmppOutgoingClient.cpp | 51 +++++++++++++++++++++++++++++++++++++- 1 file changed, 50 insertions(+), 1 deletion(-) (limited to 'src/client/QXmppOutgoingClient.cpp') diff --git a/src/client/QXmppOutgoingClient.cpp b/src/client/QXmppOutgoingClient.cpp index 9f3e5e58..e5338a72 100644 --- a/src/client/QXmppOutgoingClient.cpp +++ b/src/client/QXmppOutgoingClient.cpp @@ -107,6 +107,8 @@ public: bool isResuming; QString resumeHost; quint16 resumePort; + bool streamManagementEnabled; + bool streamResumed; // Client State Indication bool clientStateIndicationEnabled; @@ -120,7 +122,23 @@ private: }; QXmppOutgoingClientPrivate::QXmppOutgoingClientPrivate(QXmppOutgoingClient *qq) - : nextSrvRecordIdx(0), redirectPort(0), bindModeAvailable(false), sessionAvailable(false), sessionStarted(false), isAuthenticated(false), saslClient(nullptr), streamManagementAvailable(false), canResume(false), isResuming(false), resumePort(0), clientStateIndicationEnabled(false), pingTimer(nullptr), timeoutTimer(nullptr), q(qq) + : nextSrvRecordIdx(0), + redirectPort(0), + bindModeAvailable(false), + sessionAvailable(false), + sessionStarted(false), + isAuthenticated(false), + saslClient(nullptr), + streamManagementAvailable(false), + canResume(false), + isResuming(false), + resumePort(0), + streamManagementEnabled(false), + streamResumed(false), + clientStateIndicationEnabled(false), + pingTimer(nullptr), + timeoutTimer(nullptr), + q(qq) { } @@ -285,6 +303,30 @@ bool QXmppOutgoingClient::isClientStateIndicationEnabled() const return d->clientStateIndicationEnabled; } +/// +/// Returns whether Stream Management is currently enabled. +/// +/// \since QXmpp 1.4 +/// +bool QXmppOutgoingClient::isStreamManagementEnabled() const +{ + return d->streamManagementEnabled; +} + +/// +/// Returns true if the current stream is a successful resumption of a previous +/// stream. +/// +/// In case a stream has been resumed, some tasks like fetching the roster again +/// are not required. +/// +/// \since QXmpp 1.4 +/// +bool QXmppOutgoingClient::isStreamResumed() const +{ + return d->streamResumed; +} + void QXmppOutgoingClient::_q_socketDisconnected() { debug("Socket disconnected"); @@ -346,6 +388,10 @@ void QXmppOutgoingClient::handleStart() d->sessionAvailable = false; d->sessionStarted = false; + // reset stream management + d->streamResumed = false; + d->streamManagementEnabled = false; + // start stream QByteArray data = "