diff options
| author | Niels Ole Salscheider <niels_ole@salscheider-online.de> | 2017-02-12 17:18:06 +0100 |
|---|---|---|
| committer | Jeremy Lainé <jeremy.laine@m4x.org> | 2017-02-12 17:18:06 +0100 |
| commit | 084eb01fb395488a0a3aee799be2b72ce11aa220 (patch) | |
| tree | 6fec32386c116b0560b9c5d81412993361a2f453 /src/base/QXmppStreamFeatures.cpp | |
| parent | 9deb86b248fee6bb9bcee14d595a933c8fdc4aa2 (diff) | |
Implement XEP-0198: Stream Management (client only) (#99)
* Some features can be available with different namespaces (e.g. SM)
* Provide static functions to convert between strings and stream errors
Stream management will reuse this for <failed />.
* [travis] test builds using clang
* Implement XEP-0198: Stream Management (client only)
* QXmppOutgoingClient: Move private methods to QXmppOutgoingClientPrivate
Diffstat (limited to 'src/base/QXmppStreamFeatures.cpp')
| -rw-r--r-- | src/base/QXmppStreamFeatures.cpp | 34 |
1 files changed, 25 insertions, 9 deletions
diff --git a/src/base/QXmppStreamFeatures.cpp b/src/base/QXmppStreamFeatures.cpp index 322530b5..fd2832dc 100644 --- a/src/base/QXmppStreamFeatures.cpp +++ b/src/base/QXmppStreamFeatures.cpp @@ -30,7 +30,8 @@ QXmppStreamFeatures::QXmppStreamFeatures() : m_bindMode(Disabled), m_sessionMode(Disabled), m_nonSaslAuthMode(Disabled), - m_tlsMode(Disabled) + m_tlsMode(Disabled), + m_streamManagementMode(Disabled) { } @@ -94,6 +95,16 @@ void QXmppStreamFeatures::setTlsMode(QXmppStreamFeatures::Mode mode) m_tlsMode = mode; } +QXmppStreamFeatures::Mode QXmppStreamFeatures::streamManagementMode() const +{ + return m_streamManagementMode; +} + +void QXmppStreamFeatures::setStreamManagementMode(QXmppStreamFeatures::Mode mode) +{ + m_streamManagementMode = mode; +} + /// \cond bool QXmppStreamFeatures::isStreamFeatures(const QDomElement &element) { @@ -104,15 +115,18 @@ bool QXmppStreamFeatures::isStreamFeatures(const QDomElement &element) static QXmppStreamFeatures::Mode readFeature(const QDomElement &element, const char *tagName, const char *tagNs) { QDomElement subElement = element.firstChildElement(tagName); - if (subElement.namespaceURI() == tagNs) - { - if (!subElement.firstChildElement("required").isNull()) - return QXmppStreamFeatures::Required; - else - return QXmppStreamFeatures::Enabled; - } else { - return QXmppStreamFeatures::Disabled; + QXmppStreamFeatures::Mode mode = QXmppStreamFeatures::Disabled; + while (!subElement.isNull()) { + if (subElement.namespaceURI() == tagNs) + { + if (!subElement.firstChildElement("required").isNull()) + mode = QXmppStreamFeatures::Required; + else if (mode != QXmppStreamFeatures::Required) + mode = QXmppStreamFeatures::Enabled; + } + subElement = subElement.nextSiblingElement(tagName); } + return mode; } void QXmppStreamFeatures::parse(const QDomElement &element) @@ -121,6 +135,7 @@ void QXmppStreamFeatures::parse(const QDomElement &element) m_sessionMode = readFeature(element, "session", ns_session); m_nonSaslAuthMode = readFeature(element, "auth", ns_authFeature); m_tlsMode = readFeature(element, "starttls", ns_tls); + m_streamManagementMode = readFeature(element, "sm", ns_stream_management); // parse advertised compression methods QDomElement compression = element.firstChildElement("compression"); @@ -165,6 +180,7 @@ void QXmppStreamFeatures::toXml(QXmlStreamWriter *writer) const writeFeature(writer, "session", ns_session, m_sessionMode); writeFeature(writer, "auth", ns_authFeature, m_nonSaslAuthMode); writeFeature(writer, "starttls", ns_tls, m_tlsMode); + writeFeature(writer, "sm", ns_stream_management, m_streamManagementMode); if (!m_compressionMethods.isEmpty()) { |
