diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/base/QXmppStanza.cpp | 28 | ||||
| -rw-r--r-- | src/base/QXmppStanza.h | 14 | ||||
| -rw-r--r-- | src/client/QXmppAtmManager.cpp | 3 |
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 ×tamp); 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); |
