From 2312f95365b03b3fedd2e672b2e0cec98dae3cde Mon Sep 17 00:00:00 2001 From: Melvin Keskin Date: Thu, 27 Jan 2022 17:06:12 +0100 Subject: Add QXmppOmemoIq The IQ is only used internally and is private. --- src/base/QXmppOmemoData.cpp | 57 +++++++++++++++++++++++++++++++++++++++++++++ src/base/QXmppOmemoIq_p.h | 30 ++++++++++++++++++++++++ 2 files changed, 87 insertions(+) create mode 100644 src/base/QXmppOmemoIq_p.h (limited to 'src/base') diff --git a/src/base/QXmppOmemoData.cpp b/src/base/QXmppOmemoData.cpp index c19f9b88..206e78f2 100644 --- a/src/base/QXmppOmemoData.cpp +++ b/src/base/QXmppOmemoData.cpp @@ -9,6 +9,7 @@ #include "QXmppOmemoDeviceList.h" #include "QXmppOmemoElement.h" #include "QXmppOmemoEnvelope.h" +#include "QXmppOmemoIq_p.h" #include "QXmppUtils.h" #include @@ -790,3 +791,59 @@ bool QXmppOmemoElement::isOmemoElement(const QDomElement &element) return element.tagName() == QStringLiteral("encrypted") && element.namespaceURI() == ns_omemo_2; } + +/// +/// \class QXmppOmemoIq +/// +/// \brief The QXmppOmemoIq class represents an encrypted IQ stanza as defined +/// by \xep{0384, OMEMO Encryption} and \xep{0420, Stanza Content Encryption} +/// (SCE). +/// +/// \ingroup Stanzas +/// + +/// +/// Returns the OMEMO element which contains the data used by OMEMO. +/// +/// \return the OMEMO element +/// +QXmppOmemoElement QXmppOmemoIq::omemoElement() +{ + return m_omemoElement; +} + +/// +/// Sets the OMEMO element which contains the data used by OMEMO. +/// +/// \param omemoElement OMEMO element +/// +void QXmppOmemoIq::setOmemoElement(const QXmppOmemoElement &omemoElement) +{ + m_omemoElement = omemoElement; +} + +/// \cond +void QXmppOmemoIq::parseElementFromChild(const QDomElement &element) +{ + QDomElement child = element.firstChildElement(); + m_omemoElement.parse(child); +} + +void QXmppOmemoIq::toXmlElementFromChild(QXmlStreamWriter *writer) const +{ + m_omemoElement.toXml(writer); +} +/// \endcond + +/// +/// Determines whether the given DOM element is an OMEMO IQ stanza. +/// +/// \param element DOM element being checked +/// +/// \return true if element is an OMEMO IQ stanza, otherwise false +/// +bool QXmppOmemoIq::isOmemoIq(const QDomElement &element) +{ + auto child = element.firstChildElement(); + return !child.isNull() && QXmppOmemoElement::isOmemoElement(child); +} diff --git a/src/base/QXmppOmemoIq_p.h b/src/base/QXmppOmemoIq_p.h new file mode 100644 index 00000000..36b53adf --- /dev/null +++ b/src/base/QXmppOmemoIq_p.h @@ -0,0 +1,30 @@ +// SPDX-FileCopyrightText: 2022 Melvin Keskin +// +// SPDX-License-Identifier: LGPL-2.1-or-later + +#ifndef QXMPPOMEMOIQ_H +#define QXMPPOMEMOIQ_H + +#include "QXmppIq.h" +#include "QXmppOmemoElement.h" + +class QXmppOmemoIqPrivate; + +class QXmppOmemoIq : public QXmppIq +{ +public: + QXmppOmemoElement omemoElement(); + void setOmemoElement(const QXmppOmemoElement &omemoElement); + + /// \cond + void parseElementFromChild(const QDomElement &element) override; + void toXmlElementFromChild(QXmlStreamWriter *writer) const override; + /// \endcond + + static bool isOmemoIq(const QDomElement &element); + +private: + QXmppOmemoElement m_omemoElement; +}; + +#endif // QXMPPOMEMOIQ_H -- cgit v1.2.3