aboutsummaryrefslogtreecommitdiff
path: root/src/omemo/QXmppOmemoManager_p.cpp
diff options
context:
space:
mode:
authorLinus Jahn <lnj@kaidan.im>2022-12-22 16:07:15 +0100
committerLinus Jahn <lnj@kaidan.im>2022-12-22 16:17:19 +0100
commit0e88e97654d46aa709378d67334119f43eeda611 (patch)
treef8332c0b6527e07bfd9f5f3edb39a4726aa6ab87 /src/omemo/QXmppOmemoManager_p.cpp
parentbe1319577af4bf5545ee645ae61e385d95a969f9 (diff)
downloadqxmpp-0e88e97654d46aa709378d67334119f43eeda611.tar.gz
OmemoManagerPrivate: Simplify setUpDeviceId()
Diffstat (limited to 'src/omemo/QXmppOmemoManager_p.cpp')
-rw-r--r--src/omemo/QXmppOmemoManager_p.cpp66
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.