diff options
| author | Linus Jahn <lnj@kaidan.im> | 2022-05-31 12:22:48 +0200 |
|---|---|---|
| committer | Linus Jahn <lnj@kaidan.im> | 2022-08-13 15:55:03 +0200 |
| commit | f0e0e1cd227c08ffd97aa42813a479b8c3ca6d23 (patch) | |
| tree | 12ca6aefdef9195ee8937406db86e73cf1a5f820 /src/omemo/QXmppOmemoMemoryStorage.cpp | |
| parent | 87df8a8dda385558d39639ce09e2717974264ab6 (diff) | |
| download | qxmpp-f0e0e1cd227c08ffd97aa42813a479b8c3ca6d23.tar.gz | |
Split up OMEMO into extra module
Diffstat (limited to 'src/omemo/QXmppOmemoMemoryStorage.cpp')
| -rw-r--r-- | src/omemo/QXmppOmemoMemoryStorage.cpp | 119 |
1 files changed, 119 insertions, 0 deletions
diff --git a/src/omemo/QXmppOmemoMemoryStorage.cpp b/src/omemo/QXmppOmemoMemoryStorage.cpp new file mode 100644 index 00000000..6ff81002 --- /dev/null +++ b/src/omemo/QXmppOmemoMemoryStorage.cpp @@ -0,0 +1,119 @@ +// SPDX-FileCopyrightText: 2022 Melvin Keskin <melvo@olomono.de> +// +// SPDX-License-Identifier: LGPL-2.1-or-later + +#include "QXmppOmemoMemoryStorage.h" + +#include "QXmppFutureUtils_p.h" + +using namespace QXmpp::Private; + +/// +/// \class QXmppOmemoMemoryStorage +/// +/// \brief The QXmppOmemoMemoryStorage class stores data used by +/// \xep{0384, OMEMO Encryption} in the memory. +/// +/// \warning THIS API IS NOT FINALIZED YET! +/// +/// \since QXmpp 1.5 +/// + +class QXmppOmemoMemoryStoragePrivate +{ +public: + bool isSetUp = false; + + std::optional<QXmppOmemoStorage::OwnDevice> ownDevice; + + // IDs of pre key pairs mapped to pre key pairs + QHash<uint32_t, QByteArray> preKeyPairs; + + // IDs of signed pre key pairs mapped to signed pre key pairs + QHash<uint32_t, QXmppOmemoStorage::SignedPreKeyPair> signedPreKeyPairs; + + // recipient JID mapped to device ID mapped to device + QHash<QString, QHash<uint32_t, QXmppOmemoStorage::Device>> devices; +}; + +/// +/// Constructs an OMEMO memory storage. +/// +QXmppOmemoMemoryStorage::QXmppOmemoMemoryStorage() + : d(new QXmppOmemoMemoryStoragePrivate) +{ +} + +QXmppOmemoMemoryStorage::~QXmppOmemoMemoryStorage() = default; + +/// \cond +QFuture<QXmppOmemoStorage::OmemoData> QXmppOmemoMemoryStorage::allData() +{ + return makeReadyFuture(std::move(OmemoData { d->ownDevice, + d->signedPreKeyPairs, + d->preKeyPairs, + d->devices })); +} + +QFuture<void> QXmppOmemoMemoryStorage::setOwnDevice(const std::optional<OwnDevice> &device) +{ + d->ownDevice = device; + return makeReadyFuture(); +} + +QFuture<void> QXmppOmemoMemoryStorage::addSignedPreKeyPair(const uint32_t keyId, const SignedPreKeyPair &keyPair) +{ + d->signedPreKeyPairs.insert(keyId, keyPair); + return makeReadyFuture(); +} + +QFuture<void> QXmppOmemoMemoryStorage::removeSignedPreKeyPair(const uint32_t keyId) +{ + d->signedPreKeyPairs.remove(keyId); + return makeReadyFuture(); +} + +QFuture<void> QXmppOmemoMemoryStorage::addPreKeyPairs(const QHash<uint32_t, QByteArray> &keyPairs) +{ + d->preKeyPairs.insert(keyPairs); + return makeReadyFuture(); +} + +QFuture<void> QXmppOmemoMemoryStorage::removePreKeyPair(const uint32_t keyId) +{ + d->preKeyPairs.remove(keyId); + return makeReadyFuture(); +} + +QFuture<void> QXmppOmemoMemoryStorage::addDevice(const QString &jid, const uint32_t deviceId, const QXmppOmemoStorage::Device &device) +{ + d->devices[jid].insert(deviceId, device); + return makeReadyFuture(); +} + +QFuture<void> QXmppOmemoMemoryStorage::removeDevice(const QString &jid, const uint32_t deviceId) +{ + auto &devices = d->devices[jid]; + devices.remove(deviceId); + + // Remove the container for the passed JID if the container stores no + // devices anymore. + if (devices.isEmpty()) { + d->devices.remove(jid); + } + + return makeReadyFuture(); +} + +QFuture<void> QXmppOmemoMemoryStorage::removeDevices(const QString &jid) +{ + d->devices.remove(jid); + return makeReadyFuture(); +} + +QFuture<void> QXmppOmemoMemoryStorage::resetAll() +{ + d.reset(new QXmppOmemoMemoryStoragePrivate()); + return makeReadyFuture(); +} +/// \endcond |
