aboutsummaryrefslogtreecommitdiff
path: root/src/base
diff options
context:
space:
mode:
authorMelvin Keskin <melvo@olomono.de>2021-09-02 23:24:07 +0200
committerLinus Jahn <lnj@kaidan.im>2021-09-03 16:16:06 +0200
commit7587dfafe8917fccf5917682a7e5e9657cfa6d08 (patch)
tree5340e7e8a9a1e4c8582eeb08a5bcd2b59dd6df9a /src/base
parentd422c44bb0e908a56058caf1cfdd605756ca6b64 (diff)
downloadqxmpp-7587dfafe8917fccf5917682a7e5e9657cfa6d08.tar.gz
Add QXmppOmemoDeviceElement
Co-authored-by: Germán Márquez Mejía <mancho@olomono.de>
Diffstat (limited to 'src/base')
-rw-r--r--src/base/QXmppConstants.cpp1
-rw-r--r--src/base/QXmppConstants_p.h1
-rw-r--r--src/base/QXmppOmemoData.cpp162
-rw-r--r--src/base/QXmppOmemoDeviceElement.h65
4 files changed, 229 insertions, 0 deletions
diff --git a/src/base/QXmppConstants.cpp b/src/base/QXmppConstants.cpp
index 00b7cabb..db896683 100644
--- a/src/base/QXmppConstants.cpp
+++ b/src/base/QXmppConstants.cpp
@@ -175,6 +175,7 @@ const char* ns_eme = "urn:xmpp:eme:0";
const char* ns_spoiler = "urn:xmpp:spoiler:0";
// XEP-0384: OMEMO Encryption
const char* ns_omemo = "eu.siacs.conversations.axolotl";
+const char* ns_omemo_1 = "urn:xmpp:omemo:1";
// XEP-0405: Mediated Information eXchange (MIX): Participant Server Requirements
const char* ns_mix_pam = "urn:xmpp:mix:pam:1";
const char* ns_mix_roster = "urn:xmpp:mix:roster:0";
diff --git a/src/base/QXmppConstants_p.h b/src/base/QXmppConstants_p.h
index 20f8c6ea..1d55ad03 100644
--- a/src/base/QXmppConstants_p.h
+++ b/src/base/QXmppConstants_p.h
@@ -187,6 +187,7 @@ extern const char* ns_eme;
extern const char* ns_spoiler;
// XEP-0384: OMEMO Encryption
extern const char* ns_omemo;
+extern const char* ns_omemo_1;
// XEP-0405: Mediated Information eXchange (MIX): Participant Server Requirements
extern const char* ns_mix_pam;
extern const char* ns_mix_roster;
diff --git a/src/base/QXmppOmemoData.cpp b/src/base/QXmppOmemoData.cpp
new file mode 100644
index 00000000..c714e8f0
--- /dev/null
+++ b/src/base/QXmppOmemoData.cpp
@@ -0,0 +1,162 @@
+/*
+ * Copyright (C) 2008-2021 The QXmpp developers
+ *
+ * Author:
+ * Germán Márquez Mejía
+ * Melvin Keskin
+ *
+ * Source:
+ * https://github.com/qxmpp-project/qxmpp
+ *
+ * This file is a part of QXmpp library.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ */
+
+#include "QXmppConstants_p.h"
+#include "QXmppOmemoDeviceElement.h"
+#include "QXmppUtils.h"
+
+#include <QDomElement>
+
+///
+/// \class QXmppOmemoDeviceElement
+///
+/// \brief The QXmppOmemoDeviceElement class represents an element of the
+/// OMEMO device list as defined by \xep{0384, OMEMO Encryption}.
+///
+/// \since QXmpp 1.5
+///
+
+class QXmppOmemoDeviceElementPrivate : public QSharedData
+{
+public:
+ uint32_t id = 0;
+ QString label;
+};
+
+///
+/// Constructs an OMEMO device element.
+///
+QXmppOmemoDeviceElement::QXmppOmemoDeviceElement()
+ : d(new QXmppOmemoDeviceElementPrivate)
+{
+}
+
+///
+/// Constructs a copy of \a other.
+///
+/// \param other
+///
+QXmppOmemoDeviceElement::QXmppOmemoDeviceElement(const QXmppOmemoDeviceElement &other) = default;
+
+QXmppOmemoDeviceElement::~QXmppOmemoDeviceElement() = default;
+
+///
+/// Assigns \a other to this OMEMO device element.
+///
+/// \param other
+///
+QXmppOmemoDeviceElement &QXmppOmemoDeviceElement::operator=(const QXmppOmemoDeviceElement &other) = default;
+
+///
+/// Returns true if the IDs of both elements match.
+///
+bool QXmppOmemoDeviceElement::operator==(const QXmppOmemoDeviceElement &other) const
+{
+ return d->id == other.id();
+}
+
+///
+/// Returns the ID of this device element.
+///
+/// The ID is used to identify a device and fetch its bundle.
+/// The ID is 0 if it is unset.
+///
+/// \see QXmppOmemoDeviceBundle
+///
+/// \return this device element's ID
+///
+uint32_t QXmppOmemoDeviceElement::id() const
+{
+ return d->id;
+}
+
+///
+/// Sets the ID of this device element.
+///
+/// A valid ID must be at least 1 and at most 2^32-1.
+///
+/// \param id this device element's ID
+///
+void QXmppOmemoDeviceElement::setId(const uint32_t id)
+{
+ d->id = id;
+}
+
+///
+/// Returns the label of this device element.
+///
+/// The label is a human-readable string used to identify the device by users.
+/// If no label is set, a default-constructed QString is returned.
+///
+/// \return this device element's label
+///
+QString QXmppOmemoDeviceElement::label() const
+{
+ return d->label;
+}
+
+///
+/// Sets the optional label of this device element.
+///
+/// The label should not contain more than 53 characters.
+///
+/// \param label this device element's label
+///
+void QXmppOmemoDeviceElement::setLabel(const QString &label)
+{
+ d->label = label;
+}
+
+/// \cond
+void QXmppOmemoDeviceElement::parse(const QDomElement &element)
+{
+ d->id = element.attribute("id").toInt();
+ d->label = element.attribute("label");
+}
+
+void QXmppOmemoDeviceElement::toXml(QXmlStreamWriter *writer) const
+{
+ writer->writeStartElement("device");
+
+ writer->writeAttribute("id", QString::number(d->id));
+ if (!d->label.isEmpty()) {
+ writer->writeAttribute("label", d->label);
+ }
+
+ writer->writeEndElement(); // device
+}
+/// \endcond
+
+///
+/// Determines whether the given DOM element is an OMEMO device element.
+///
+/// \param element DOM element being checked
+///
+/// \return true if element is an OMEMO device element, otherwise false
+///
+bool QXmppOmemoDeviceElement::isOmemoDeviceElement(const QDomElement &element)
+{
+ return element.tagName() == QStringLiteral("device") &&
+ element.namespaceURI() == ns_omemo_1;
+}
diff --git a/src/base/QXmppOmemoDeviceElement.h b/src/base/QXmppOmemoDeviceElement.h
new file mode 100644
index 00000000..27ee908d
--- /dev/null
+++ b/src/base/QXmppOmemoDeviceElement.h
@@ -0,0 +1,65 @@
+/*
+ * Copyright (C) 2008-2021 The QXmpp developers
+ *
+ * Author:
+ * Germán Márquez Mejía
+ * Melvin Keskin
+ *
+ * Source:
+ * https://github.com/qxmpp-project/qxmpp
+ *
+ * This file is a part of QXmpp library.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ */
+
+#ifndef QXMPPOMEMODEVICEELEMENT_H
+#define QXMPPOMEMODEVICEELEMENT_H
+
+#include "QXmppGlobal.h"
+
+#include <QSharedDataPointer>
+
+class QDomElement;
+class QXmppOmemoDeviceElementPrivate;
+class QXmlStreamWriter;
+
+class QXMPP_EXPORT QXmppOmemoDeviceElement
+{
+public:
+ QXmppOmemoDeviceElement();
+ QXmppOmemoDeviceElement(const QXmppOmemoDeviceElement &other);
+ ~QXmppOmemoDeviceElement();
+
+ QXmppOmemoDeviceElement &operator=(const QXmppOmemoDeviceElement &other);
+ bool operator==(const QXmppOmemoDeviceElement &other) const;
+
+ uint32_t id() const;
+ void setId(uint32_t id);
+
+ QString label() const;
+ void setLabel(const QString &label);
+
+ /// \cond
+ void parse(const QDomElement &element);
+ void toXml(QXmlStreamWriter *writer) const;
+ /// \endcond
+
+ static bool isOmemoDeviceElement(const QDomElement &element);
+
+private:
+ QSharedDataPointer<QXmppOmemoDeviceElementPrivate> d;
+};
+
+Q_DECLARE_TYPEINFO(QXmppOmemoDeviceElement, Q_MOVABLE_TYPE);
+
+#endif // QXMPPOMEMODEVICEELEMENT_H