aboutsummaryrefslogtreecommitdiff
path: root/src/base/QXmppStreamManagement_p.h
diff options
context:
space:
mode:
authorLinus Jahn <lnj@kaidan.im>2020-07-26 20:33:07 +0200
committerLinus Jahn <lnj@kaidan.im>2021-01-09 14:37:47 +0100
commit8570b4c56616547e5fa2530e6b9733fb37cf02a3 (patch)
treedd25156ba0680c964eef13828cb1de0bdf7b48ee /src/base/QXmppStreamManagement_p.h
parent9d181aa8e4d31612391586785144dfefa75356ff (diff)
downloadqxmpp-8570b4c56616547e5fa2530e6b9733fb37cf02a3.tar.gz
QXmppStream: Move stream management into separate class
Diffstat (limited to 'src/base/QXmppStreamManagement_p.h')
-rw-r--r--src/base/QXmppStreamManagement_p.h36
1 files changed, 36 insertions, 0 deletions
diff --git a/src/base/QXmppStreamManagement_p.h b/src/base/QXmppStreamManagement_p.h
index ab250109..389276d7 100644
--- a/src/base/QXmppStreamManagement_p.h
+++ b/src/base/QXmppStreamManagement_p.h
@@ -30,6 +30,9 @@
#include <QDomDocument>
#include <QXmlStreamWriter>
+class QXmppStream;
+
+//
// W A R N I N G
// -------------
//
@@ -191,4 +194,37 @@ public:
/// \endcond
};
+//
+// This manager is used in the QXmppStream. It contains the parts of stream
+// management that are shared between server and client connections.
+//
+class QXmppStreamManager
+{
+public:
+ explicit QXmppStreamManager(QXmppStream *stream);
+
+ unsigned int lastIncomingSequenceNumber() const;
+
+ void handleDisconnect();
+ void handleStart();
+ void handlePacketSent(const QXmppStanza &packet, const QByteArray &data);
+ bool handleStanza(const QDomElement &stanza);
+
+ void enableStreamManagement(bool resetSequenceNumber);
+ void setAcknowledgedSequenceNumber(unsigned int sequenceNumber);
+
+private:
+ void handleAcknowledgement(const QDomElement &element);
+
+ void sendAcknowledgement();
+ void sendAcknowledgementRequest();
+
+ QXmppStream *stream;
+
+ bool m_enabled = false;
+ QMap<unsigned int, QByteArray> m_unacknowledgedStanzas;
+ unsigned int m_lastOutgoingSequenceNumber = 0;
+ unsigned int m_lastIncomingSequenceNumber = 0;
+};
+
#endif