aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/base/QXmppStanza.cpp28
-rw-r--r--src/base/QXmppStanza.h14
-rw-r--r--src/client/QXmppAtmManager.cpp3
3 files changed, 37 insertions, 8 deletions
diff --git a/src/base/QXmppStanza.cpp b/src/base/QXmppStanza.cpp
index 25b9baac..3aff0404 100644
--- a/src/base/QXmppStanza.cpp
+++ b/src/base/QXmppStanza.cpp
@@ -525,6 +525,24 @@ QXmppE2eeMetadata::QXmppE2eeMetadata(const QXmppE2eeMetadata &other) = default;
QXmppE2eeMetadata::~QXmppE2eeMetadata() = default;
+/// \cond
+QXmppE2eeMetadata::QXmppE2eeMetadata(const std::optional<QXmppE2eeMetadata> &other)
+ : d(nullptr)
+{
+ if (other) {
+ *this = *other;
+ }
+}
+
+std::optional<QXmppE2eeMetadata> QXmppE2eeMetadata::toOptional() const
+{
+ if (d) {
+ return *this;
+ }
+ return {};
+}
+/// \endcond
+
///
/// Assigns \a other to this end-to-end encryption metadata class.
///
@@ -618,7 +636,7 @@ public:
QXmppStanza::Error error;
QXmppElementList extensions;
QList<QXmppExtendedAddress> extendedAddresses;
- QXmppE2eeMetadata e2eeMetadata;
+ QXmppE2eeMetadata e2eeMetadata = QXmppE2eeMetadata(std::nullopt);
};
///
@@ -776,9 +794,9 @@ void QXmppStanza::setExtendedAddresses(const QList<QXmppExtendedAddress> &addres
///
/// \since QXmpp 1.5
///
-QXmppE2eeMetadata QXmppStanza::e2eeMetadata() const
+std::optional<QXmppE2eeMetadata> QXmppStanza::e2eeMetadata() const
{
- return d->e2eeMetadata;
+ return d->e2eeMetadata.toOptional();
}
///
@@ -786,9 +804,9 @@ QXmppE2eeMetadata QXmppStanza::e2eeMetadata() const
///
/// \since QXmpp 1.5
///
-void QXmppStanza::setE2eeMetadata(const QXmppE2eeMetadata &e2eeMetadata)
+void QXmppStanza::setE2eeMetadata(const std::optional<QXmppE2eeMetadata> &e2eeMetadata)
{
- d->e2eeMetadata = e2eeMetadata;
+ d->e2eeMetadata = QXmppE2eeMetadata(e2eeMetadata);
}
/// \cond
diff --git a/src/base/QXmppStanza.h b/src/base/QXmppStanza.h
index 34cd1aed..91c01af0 100644
--- a/src/base/QXmppStanza.h
+++ b/src/base/QXmppStanza.h
@@ -8,6 +8,8 @@
#ifndef QXMPPSTANZA_H
#define QXMPPSTANZA_H
+#include <optional>
+
#include <QByteArray>
#include <QSharedData>
#include <QString>
@@ -83,6 +85,14 @@ public:
void setSceTimestamp(const QDateTime &timestamp);
private:
+ friend class QXmppStanza;
+ friend class QXmppStanzaPrivate;
+
+ /// \cond
+ explicit QXmppE2eeMetadata(const std::optional<QXmppE2eeMetadata> &other);
+ std::optional<QXmppE2eeMetadata> toOptional() const;
+ /// \endcond
+
QSharedDataPointer<QXmppE2eeMetadataPrivate> d;
};
@@ -225,8 +235,8 @@ public:
QList<QXmppExtendedAddress> extendedAddresses() const;
void setExtendedAddresses(const QList<QXmppExtendedAddress> &extendedAddresses);
- QXmppE2eeMetadata e2eeMetadata() const;
- void setE2eeMetadata(const QXmppE2eeMetadata &e2eeMetadata);
+ std::optional<QXmppE2eeMetadata> e2eeMetadata() const;
+ void setE2eeMetadata(const std::optional<QXmppE2eeMetadata> &e2eeMetadata);
/// \cond
void parse(const QDomElement &element) override;
diff --git a/src/client/QXmppAtmManager.cpp b/src/client/QXmppAtmManager.cpp
index 957ed8ef..2c9a8568 100644
--- a/src/client/QXmppAtmManager.cpp
+++ b/src/client/QXmppAtmManager.cpp
@@ -297,7 +297,8 @@ QFuture<void> QXmppAtmManager::handleMessage(const QXmppMessage &message)
trustMessageElement->usage() == ns_atm &&
message.from() != client()->configuration().jid()) {
const auto senderJid = QXmppUtils::jidToBareJid(message.from());
- const auto senderKey = message.e2eeMetadata().senderKey();
+ const auto e2eeMetadata = message.e2eeMetadata();
+ const auto senderKey = e2eeMetadata ? e2eeMetadata->senderKey() : QByteArray();
const auto encryption = trustMessageElement->encryption();
auto future = m_trustStorage->trustLevel(encryption, senderKey);