Skip to content
This repository was archived by the owner on Mar 20, 2025. It is now read-only.

Commit 550976f

Browse files
melvolnjX
authored andcommitted
Message: Add parseExtensions() for parsing additional extensions
Useful for encryption when parsing decrypted elements.
1 parent bcd1c51 commit 550976f

File tree

2 files changed

+26
-14
lines changed

2 files changed

+26
-14
lines changed

src/base/QXmppMessage.cpp

+25-14
Original file line numberDiff line numberDiff line change
@@ -1188,20 +1188,7 @@ void QXmppMessage::parse(const QDomElement &element, QXmpp::SceMode sceMode)
11881188
else
11891189
d->type = QXmppMessage::Normal;
11901190

1191-
QXmppElementList extensions;
1192-
for (auto childElement = element.firstChildElement();
1193-
!childElement.isNull();
1194-
childElement = childElement.nextSiblingElement()) {
1195-
if (!checkElement(childElement, QStringLiteral("addresses"), ns_extended_addressing) &&
1196-
childElement.tagName() != QStringLiteral("error")) {
1197-
// try to parse; add to unknown extensions, if element couldn't be parsed
1198-
if (!parseExtension(childElement, sceMode)) {
1199-
// other extensions
1200-
extensions << QXmppElement(childElement);
1201-
}
1202-
}
1203-
}
1204-
setExtensions(extensions);
1191+
parseExtensions(element, sceMode);
12051192
}
12061193

12071194
void QXmppMessage::toXml(QXmlStreamWriter *writer) const
@@ -1229,6 +1216,30 @@ void QXmppMessage::toXml(QXmlStreamWriter *writer, QXmpp::SceMode sceMode) const
12291216
}
12301217
/// \endcond
12311218

1219+
///
1220+
/// Parses all child elements of a message stanza.
1221+
///
1222+
/// \param element message element or SCE content element
1223+
/// \param sceMode mode to decide which child elements of the message to parse
1224+
///
1225+
void QXmppMessage::parseExtensions(const QDomElement &element, const QXmpp::SceMode sceMode)
1226+
{
1227+
QXmppElementList unknownExtensions;
1228+
for (auto childElement = element.firstChildElement();
1229+
!childElement.isNull();
1230+
childElement = childElement.nextSiblingElement()) {
1231+
if (!checkElement(childElement, QStringLiteral("addresses"), ns_extended_addressing) &&
1232+
childElement.tagName() != QStringLiteral("error")) {
1233+
// Try to parse the element and add it as an unknown extension if it
1234+
// fails.
1235+
if (!parseExtension(childElement, sceMode)) {
1236+
unknownExtensions << QXmppElement(childElement);
1237+
}
1238+
}
1239+
}
1240+
setExtensions(unknownExtensions);
1241+
}
1242+
12321243
///
12331244
/// Parses a child element of the message stanza.
12341245
///

src/base/QXmppMessage.h

+1
Original file line numberDiff line numberDiff line change
@@ -253,6 +253,7 @@ class QXMPP_EXPORT QXmppMessage : public QXmppStanza
253253
virtual void toXml(QXmlStreamWriter *writer, QXmpp::SceMode) const;
254254
/// \endcond
255255

256+
void parseExtensions(const QDomElement &element, QXmpp::SceMode sceMode);
256257
virtual bool parseExtension(const QDomElement &element, QXmpp::SceMode);
257258
virtual void serializeExtensions(QXmlStreamWriter *writer, QXmpp::SceMode, const QString &baseNamespace = {}) const;
258259

0 commit comments

Comments
 (0)