5#ifndef QXMPPSTREAMMANAGEMENT_P_H
6#define QXMPPSTREAMMANAGEMENT_P_H
8#include "QXmppConstants_p.h"
9#include "QXmppGlobal.h"
10#include "QXmppSendResult.h"
11#include "QXmppStanza.h"
14#include <QDomDocument>
15#include <QXmlStreamWriter>
19namespace QXmpp::Private {
37namespace QXmpp::Private {
40 static constexpr std::tuple XmlTag = { u
"sm", QXmpp::Private::ns_stream_management };
44 static constexpr std::tuple XmlTag = { u
"enable", QXmpp::Private::ns_stream_management };
45 static std::optional<SmEnable> fromDom(
const QDomElement &);
46 void toXml(XmlWriter &w)
const;
53 static constexpr std::tuple XmlTag = { u
"enabled", QXmpp::Private::ns_stream_management };
54 static std::optional<SmEnabled> fromDom(
const QDomElement &);
55 void toXml(XmlWriter &w)
const;
64 static constexpr std::tuple XmlTag = { u
"resume", QXmpp::Private::ns_stream_management };
65 static std::optional<SmResume> fromDom(
const QDomElement &);
66 void toXml(XmlWriter &w)
const;
73 static constexpr std::tuple XmlTag = { u
"resumed", QXmpp::Private::ns_stream_management };
74 static std::optional<SmResumed> fromDom(
const QDomElement &);
75 void toXml(XmlWriter &w)
const;
82 static constexpr std::tuple XmlTag = { u
"failed", QXmpp::Private::ns_stream_management };
83 static std::optional<SmFailed> fromDom(
const QDomElement &);
84 void toXml(XmlWriter &w)
const;
86 std::optional<QXmppStanza::Error::Condition> error;
90 static constexpr std::tuple XmlTag = { u
"a", QXmpp::Private::ns_stream_management };
91 static std::optional<SmAck> fromDom(
const QDomElement &);
92 void toXml(XmlWriter &w)
const;
98 static constexpr std::tuple XmlTag = { u
"r", QXmpp::Private::ns_stream_management };
99 static std::optional<SmRequest> fromDom(
const QDomElement &);
100 void toXml(XmlWriter &w)
const;
107class StreamAckManager
110 explicit StreamAckManager(XmppSocket &socket);
112 bool enabled()
const {
return m_enabled; }
113 unsigned int lastIncomingSequenceNumber()
const {
return m_lastIncomingSequenceNumber; }
115 void handlePacketSent(QXmppPacket &packet,
bool sentData);
116 bool handleStanza(
const QDomElement &stanza);
117 void onSessionClosed();
120 void enableStreamManagement(
bool resetSequenceNumber);
121 void setAcknowledgedSequenceNumber(
unsigned int sequenceNumber);
124 bool sendPacketCompat(QXmppPacket &&);
125 std::tuple<bool, QXmppTask<QXmpp::SendResult>> internalSend(QXmppPacket &&);
127 void sendAcknowledgementRequest();
130 void handleAcknowledgement(SmAck ack);
132 void sendAcknowledgement();
134 QXmpp::Private::XmppSocket &socket;
136 bool m_enabled =
false;
137 QMap<unsigned int, QXmppPacket> m_unacknowledgedStanzas;
138 unsigned int m_lastOutgoingSequenceNumber = 0;
139 unsigned int m_lastIncomingSequenceNumber = 0;
Definition QXmppTask.h:46