diff options
| author | Linus Jahn <lnj@kaidan.im> | 2020-09-09 15:32:01 +0200 |
|---|---|---|
| committer | Linus Jahn <lnj@kaidan.im> | 2021-01-09 14:37:47 +0100 |
| commit | af22e07a2300dc18ec62eee30508569062d918b3 (patch) | |
| tree | 753c28084811c1beac0d1657eb193aa756703e4d /src/client/QXmppOutgoingClient.cpp | |
| parent | 8570b4c56616547e5fa2530e6b9733fb37cf02a3 (diff) | |
| download | qxmpp-af22e07a2300dc18ec62eee30508569062d918b3.tar.gz | |
QXmppClient: Advertise stream management state
Diffstat (limited to 'src/client/QXmppOutgoingClient.cpp')
| -rw-r--r-- | src/client/QXmppOutgoingClient.cpp | 51 |
1 files changed, 50 insertions, 1 deletions
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 = "<?xml version='1.0'?><stream:stream to='"; data.append(configuration().domain().toUtf8()); @@ -682,6 +728,7 @@ void QXmppOutgoingClient::handleStanza(const QDomElement &nodeRecv) setResumeAddress(streamManagementEnabled.location()); } + d->streamManagementEnabled = true; enableStreamManagement(true); // we are connected now emit connected(); @@ -690,7 +737,9 @@ void QXmppOutgoingClient::handleStanza(const QDomElement &nodeRecv) streamManagementResumed.parse(nodeRecv); setAcknowledgedSequenceNumber(streamManagementResumed.h()); d->isResuming = false; + d->streamResumed = true; + d->streamManagementEnabled = true; enableStreamManagement(false); // we are connected now // TODO: The stream was resumed. Therefore, we should not send presence information or request the roster. |
