diff options
| author | Melvin Keskin <melvo@olomono.de> | 2022-05-12 17:56:51 +0200 |
|---|---|---|
| committer | Linus Jahn <lnj@kaidan.im> | 2022-06-14 11:26:04 +0200 |
| commit | 550976fa4027177be540275c62db57283a40b3e9 (patch) | |
| tree | fb22b140bf3376da631a99ee882bd9de5fb78e39 /src/base/QXmppMessage.cpp | |
| parent | bcd1c5197ca924ab1c0e9d3444436c166a8f8542 (diff) | |
| download | qxmpp-550976fa4027177be540275c62db57283a40b3e9.tar.gz | |
Message: Add parseExtensions() for parsing additional extensions
Useful for encryption when parsing decrypted elements.
Diffstat (limited to 'src/base/QXmppMessage.cpp')
| -rw-r--r-- | src/base/QXmppMessage.cpp | 39 |
1 files changed, 25 insertions, 14 deletions
diff --git a/src/base/QXmppMessage.cpp b/src/base/QXmppMessage.cpp index cf361a95..ee03cbbf 100644 --- a/src/base/QXmppMessage.cpp +++ b/src/base/QXmppMessage.cpp @@ -1188,20 +1188,7 @@ void QXmppMessage::parse(const QDomElement &element, QXmpp::SceMode sceMode) else d->type = QXmppMessage::Normal; - QXmppElementList extensions; - for (auto childElement = element.firstChildElement(); - !childElement.isNull(); - childElement = childElement.nextSiblingElement()) { - if (!checkElement(childElement, QStringLiteral("addresses"), ns_extended_addressing) && - childElement.tagName() != QStringLiteral("error")) { - // try to parse; add to unknown extensions, if element couldn't be parsed - if (!parseExtension(childElement, sceMode)) { - // other extensions - extensions << QXmppElement(childElement); - } - } - } - setExtensions(extensions); + parseExtensions(element, sceMode); } void QXmppMessage::toXml(QXmlStreamWriter *writer) const @@ -1230,6 +1217,30 @@ void QXmppMessage::toXml(QXmlStreamWriter *writer, QXmpp::SceMode sceMode) const /// \endcond /// +/// Parses all child elements of a message stanza. +/// +/// \param element message element or SCE content element +/// \param sceMode mode to decide which child elements of the message to parse +/// +void QXmppMessage::parseExtensions(const QDomElement &element, const QXmpp::SceMode sceMode) +{ + QXmppElementList unknownExtensions; + for (auto childElement = element.firstChildElement(); + !childElement.isNull(); + childElement = childElement.nextSiblingElement()) { + if (!checkElement(childElement, QStringLiteral("addresses"), ns_extended_addressing) && + childElement.tagName() != QStringLiteral("error")) { + // Try to parse the element and add it as an unknown extension if it + // fails. + if (!parseExtension(childElement, sceMode)) { + unknownExtensions << QXmppElement(childElement); + } + } + } + setExtensions(unknownExtensions); +} + +/// /// Parses a child element of the message stanza. /// /// Allows inherited classes to parse additional extension elements. This |
