aboutsummaryrefslogtreecommitdiff
path: root/src/base/QXmppStreamFeatures.cpp
diff options
context:
space:
mode:
authorLinus Jahn <lnj@kaidan.im>2020-04-05 16:56:18 +0200
committerLNJ <lnj@kaidan.im>2020-04-05 21:25:54 +0200
commitb833a5ae93b00b973c06018b6615526e0a8e1719 (patch)
treeb58b429a852fb91b17fcfe208aa7c29bb600c282 /src/base/QXmppStreamFeatures.cpp
parent1e2aba332b0a92a028045ffdd5c33fec2a944116 (diff)
Add roster versioning stream feature
Diffstat (limited to 'src/base/QXmppStreamFeatures.cpp')
-rw-r--r--src/base/QXmppStreamFeatures.cpp43
1 files changed, 35 insertions, 8 deletions
diff --git a/src/base/QXmppStreamFeatures.cpp b/src/base/QXmppStreamFeatures.cpp
index 25626aa0..70d4dc46 100644
--- a/src/base/QXmppStreamFeatures.cpp
+++ b/src/base/QXmppStreamFeatures.cpp
@@ -40,6 +40,7 @@ public:
QXmppStreamFeatures::Mode csiMode;
QXmppStreamFeatures::Mode registerMode;
bool preApprovedSubscriptionsSupported;
+ bool rosterVersioningSupported;
QStringList authMechanisms;
QStringList compressionMethods;
};
@@ -206,6 +207,26 @@ void QXmppStreamFeatures::setPreApprovedSubscriptionsSupported(bool supported)
d->preApprovedSubscriptionsSupported = supported;
}
+///
+/// Returns whether roster versioning from RFC6121 is supported.
+///
+/// \since QXmpp 1.3
+///
+bool QXmppStreamFeatures::rosterVersioningSupported() const
+{
+ return d->rosterVersioningSupported;
+}
+
+///
+/// Sets whether roster versioning from RFC6121 is supported.
+///
+/// \since QXmpp 1.3
+///
+void QXmppStreamFeatures::setRosterVersioningSupported(bool supported)
+{
+ d->rosterVersioningSupported = supported;
+}
+
/// \cond
bool QXmppStreamFeatures::isStreamFeatures(const QDomElement &element)
{
@@ -251,6 +272,7 @@ void QXmppStreamFeatures::parse(const QDomElement &element)
d->csiMode = readFeature(element, "csi", ns_csi);
d->registerMode = readFeature(element, "register", ns_register_feature);
d->preApprovedSubscriptionsSupported = readBooleanFeature(element, QStringLiteral("sub"), ns_pre_approval);
+ d->rosterVersioningSupported = readBooleanFeature(element, QStringLiteral("ver"), ns_rosterver);
// parse advertised compression methods
QDomElement compression = element.firstChildElement(QStringLiteral("compression"));
@@ -284,6 +306,15 @@ static void writeFeature(QXmlStreamWriter *writer, const char *tagName, const ch
}
}
+static void writeBoolenFeature(QXmlStreamWriter *writer, const QString &tagName, const QString &xmlns, bool enabled)
+{
+ if (enabled) {
+ writer->writeStartElement(tagName);
+ writer->writeDefaultNamespace(xmlns);
+ writer->writeEndElement();
+ }
+}
+
void QXmppStreamFeatures::toXml(QXmlStreamWriter *writer) const
{
writer->writeStartElement(QStringLiteral("stream:features"));
@@ -294,24 +325,20 @@ void QXmppStreamFeatures::toXml(QXmlStreamWriter *writer) const
writeFeature(writer, "sm", ns_stream_management, d->streamManagementMode);
writeFeature(writer, "csi", ns_csi, d->csiMode);
writeFeature(writer, "register", ns_register_feature, d->registerMode);
-
- if (d->preApprovedSubscriptionsSupported) {
- writer->writeStartElement(QStringLiteral("sub"));
- writer->writeDefaultNamespace(ns_pre_approval);
- writer->writeEndElement();
- }
+ writeBoolenFeature(writer, QStringLiteral("sub"), ns_pre_approval, d->preApprovedSubscriptionsSupported);
+ writeBoolenFeature(writer, QStringLiteral("ver"), ns_rosterver, d->rosterVersioningSupported);
if (!d->compressionMethods.isEmpty()) {
writer->writeStartElement(QStringLiteral("compression"));
writer->writeDefaultNamespace(ns_compressFeature);
- for (const auto &method : d->compressionMethods)
+ for (const auto &method : qAsConst(d->compressionMethods))
writer->writeTextElement(QStringLiteral("method"), method);
writer->writeEndElement();
}
if (!d->authMechanisms.isEmpty()) {
writer->writeStartElement(QStringLiteral("mechanisms"));
writer->writeDefaultNamespace(ns_sasl);
- for (const auto &mechanism : d->authMechanisms)
+ for (const auto &mechanism : qAsConst(d->authMechanisms))
writer->writeTextElement(QStringLiteral("mechanism"), mechanism);
writer->writeEndElement();
}