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) {