diff options
| author | Linus Jahn <lnj@kaidan.im> | 2022-12-22 16:07:15 +0100 |
|---|---|---|
| committer | Linus Jahn <lnj@kaidan.im> | 2022-12-22 16:17:19 +0100 |
| commit | 0e88e97654d46aa709378d67334119f43eeda611 (patch) | |
| tree | f8332c0b6527e07bfd9f5f3edb39a4726aa6ab87 /src/omemo/QXmppOmemoManager_p.cpp | |
| parent | be1319577af4bf5545ee645ae61e385d95a969f9 (diff) | |
| download | qxmpp-0e88e97654d46aa709378d67334119f43eeda611.tar.gz | |
OmemoManagerPrivate: Simplify setUpDeviceId()
Diffstat (limited to 'src/omemo/QXmppOmemoManager_p.cpp')
| -rw-r--r-- | src/omemo/QXmppOmemoManager_p.cpp | 66 |
1 files changed, 38 insertions, 28 deletions
diff --git a/src/omemo/QXmppOmemoManager_p.cpp b/src/omemo/QXmppOmemoManager_p.cpp index 18e0d34d..237c0a24 100644 --- a/src/omemo/QXmppOmemoManager_p.cpp +++ b/src/omemo/QXmppOmemoManager_p.cpp @@ -629,37 +629,13 @@ QFuture<bool> ManagerPrivate::setUpDeviceId() warning("Existing / Published device IDs could not be retrieved: " % errorToString(*error)); reportFinishedResult(interface, false); } else { - auto generateDeviceId = [this, interface](uint32_t &deviceId) mutable -> bool { - if (signal_protocol_key_helper_generate_registration_id(&deviceId, 0, globalContext.get()) < 0) { - warning("Device ID could not be generated"); - reportFinishedResult(interface, false); - return false; - } - - return true; - }; - // The first generated device ID can be used if no device bundle node exists. // Otherwise, duplicates must be avoided. - if (error) { - uint32_t deviceId = 0; - if (generateDeviceId(deviceId)) { - ownDevice.id = deviceId; - reportFinishedResult(interface, true); - } - } else { - const auto &deviceIds = std::get<QVector<QString>>(result); - - while (true) { - uint32_t deviceId = 0; - - if (generateDeviceId(deviceId) && !deviceIds.contains(QString::number(deviceId))) { - ownDevice.id = deviceId; - reportFinishedResult(interface, true); - break; - } - } + auto deviceId = error ? generateDeviceId() : generateDeviceId(std::get<QVector<QString>>(result)); + if (deviceId) { + ownDevice.id = *deviceId; } + reportFinishedResult(interface, deviceId.has_value()); } }); @@ -667,6 +643,40 @@ QFuture<bool> ManagerPrivate::setUpDeviceId() } // +// Generates a new device ID. +// +// Returns the device ID or an empty optional on errors. +// +std::optional<uint32_t> QXmppOmemoManagerPrivate::generateDeviceId() +{ + uint32_t deviceId = 0; + if (signal_protocol_key_helper_generate_registration_id(&deviceId, 0, globalContext.get()) < 0) { + warning("Device ID could not be generated"); + return {}; + } + return deviceId; +} + +// +// Generates a new device ID that does not exist yet. +// +// Returns the device ID or an empty optional on errors. +// +std::optional<uint32_t> QXmppOmemoManagerPrivate::generateDeviceId(const QVector<QString> &existingIds) +{ + uint32_t deviceId = 0; + + do { + if (signal_protocol_key_helper_generate_registration_id(&deviceId, 0, globalContext.get()) < 0) { + warning("Device ID could not be generated"); + return {}; + } + } while (existingIds.contains(QString::number(deviceId))); + + return deviceId; +} + +// // Sets up an identity key pair. // // The identity key pair consists of a private and a public long-term key. |
