aboutsummaryrefslogtreecommitdiff
path: root/src/base/QXmppMessage.cpp
diff options
context:
space:
mode:
authorMelvin Keskin <melvo@olomono.de>2022-05-12 17:56:51 +0200
committerLinus Jahn <lnj@kaidan.im>2022-06-14 11:26:04 +0200
commit550976fa4027177be540275c62db57283a40b3e9 (patch)
treefb22b140bf3376da631a99ee882bd9de5fb78e39 /src/base/QXmppMessage.cpp
parentbcd1c5197ca924ab1c0e9d3444436c166a8f8542 (diff)
downloadqxmpp-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.cpp39
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