diff --git a/app/src/main/java/org/thoughtcrime/securesms/contacts/sync/ContactDiscoveryRefreshV2.kt b/app/src/main/java/org/thoughtcrime/securesms/contacts/sync/ContactDiscoveryRefreshV2.kt index efcc309e2f..4980ea0caf 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/contacts/sync/ContactDiscoveryRefreshV2.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/contacts/sync/ContactDiscoveryRefreshV2.kt @@ -96,7 +96,8 @@ object ContactDiscoveryRefreshV2 { SignalDatabase.recipients.getAllServiceIdProfileKeyPairs(), Optional.empty(), 10_000, - AppDependencies.libsignalNetwork + AppDependencies.libsignalNetwork, + RemoteConfig.libsignalRouteBasedCDSILookup ) { Log.i(TAG, "Ignoring token for one-off lookup.") } @@ -160,7 +161,8 @@ object ContactDiscoveryRefreshV2 { SignalDatabase.recipients.getAllServiceIdProfileKeyPairs(), Optional.ofNullable(token), timeoutMs, - AppDependencies.libsignalNetwork + AppDependencies.libsignalNetwork, + RemoteConfig.libsignalRouteBasedCDSILookup ) { tokenToSave -> stopwatch.split("network-pre-token") if (!isPartialRefresh) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/RemoteConfig.kt b/app/src/main/java/org/thoughtcrime/securesms/util/RemoteConfig.kt index c452792c0c..97236a85b9 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/RemoteConfig.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/util/RemoteConfig.kt @@ -1134,5 +1134,12 @@ object RemoteConfig { hotSwappable = true ) + /** Whether or not libsignal-net's CDSI lookups use the new route-based internals or the old ones */ + val libsignalRouteBasedCDSILookup: Boolean by remoteBoolean( + key = "android.libsignal.libsignalRouteBasedCDSILookup", + defaultValue = true, + hotSwappable = true + ) + // endregion } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 9df715de12..6e9d3256dc 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -13,7 +13,7 @@ androidx-window = "1.3.0" glide = "4.15.1" gradle = "8.7.3" kotlin = "2.1.0" -libsignal-client = "0.66.2" +libsignal-client = "0.67.0" mp4parser = "1.9.39" android-gradle-plugin = "8.7.2" accompanist = "0.28.0" diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml index 853a2e155a..0cbdda5437 100644 --- a/gradle/verification-metadata.xml +++ b/gradle/verification-metadata.xml @@ -6604,20 +6604,20 @@ https://docs.gradle.org/current/userguide/dependency_verification.html - - - + + + - - + + - - - + + + - - + + diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/SignalServiceAccountManager.java b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/SignalServiceAccountManager.java index 3cb1b3ecd9..3df7ca0468 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/SignalServiceAccountManager.java +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/SignalServiceAccountManager.java @@ -221,11 +221,12 @@ public class SignalServiceAccountManager { Optional token, Long timeoutMs, @Nonnull Network libsignalNetwork, + boolean useLibsignalRouteBasedCDSIConnectionLogic, Consumer tokenSaver) throws IOException { CdsiAuthResponse auth = pushServiceSocket.getCdsiAuth(); - CdsiV2Service service = new CdsiV2Service(libsignalNetwork); + CdsiV2Service service = new CdsiV2Service(libsignalNetwork, useLibsignalRouteBasedCDSIConnectionLogic); CdsiV2Service.Request request = new CdsiV2Service.Request(previousE164s, newE164s, serviceIds, token); Single> single = service.getRegisteredUsers(auth.getUsername(), auth.getPassword(), request, tokenSaver); diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/services/CdsiV2Service.java b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/services/CdsiV2Service.java index ad1f32b891..cf393c860b 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/services/CdsiV2Service.java +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/services/CdsiV2Service.java @@ -53,10 +53,10 @@ public final class CdsiV2Service { private final CdsiRequestHandler cdsiRequestHandler; - public CdsiV2Service(@Nonnull Network network) { + public CdsiV2Service(@Nonnull Network network, boolean useLibsignalRouteBasedCDSIConnectionLogic) { this.cdsiRequestHandler = (username, password, request, tokenSaver) -> { try { - Future cdsiRequest = network.cdsiLookup(username, password, buildLibsignalRequest(request), tokenSaver); + Future cdsiRequest = network.cdsiLookup(username, password, buildLibsignalRequest(request), tokenSaver, useLibsignalRouteBasedCDSIConnectionLogic); return Single.fromFuture(cdsiRequest) .onErrorResumeNext((Throwable err) -> { if (err instanceof ExecutionException && err.getCause() != null) {