From 54ffb4ad7b0128b67418a0d03625e01a096dda67 Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Thu, 12 Jan 2023 17:31:22 -0500 Subject: [PATCH] Improve network reliability. --- .../InstrumentationApplicationDependencyProvider.kt | 3 ++- .../messages/BackgroundMessageRetriever.java | 3 ++- .../securesms/messages/IncomingMessageObserver.java | 9 +++++---- .../securesms/push/SignalServiceNetworkAccess.kt | 13 ++++++++++--- .../configuration/SignalServiceConfiguration.java | 9 ++++++++- 5 files changed, 27 insertions(+), 10 deletions(-) diff --git a/app/src/androidTest/java/org/thoughtcrime/securesms/dependencies/InstrumentationApplicationDependencyProvider.kt b/app/src/androidTest/java/org/thoughtcrime/securesms/dependencies/InstrumentationApplicationDependencyProvider.kt index 0a6ab0cf58..63ed8c46bf 100644 --- a/app/src/androidTest/java/org/thoughtcrime/securesms/dependencies/InstrumentationApplicationDependencyProvider.kt +++ b/app/src/androidTest/java/org/thoughtcrime/securesms/dependencies/InstrumentationApplicationDependencyProvider.kt @@ -73,7 +73,8 @@ class InstrumentationApplicationDependencyProvider(application: Application, def emptyList(), Optional.of(SignalServiceNetworkAccess.DNS), Optional.empty(), - Base64.decode(BuildConfig.ZKGROUP_SERVER_PUBLIC_PARAMS) + Base64.decode(BuildConfig.ZKGROUP_SERVER_PUBLIC_PARAMS), + true ) serviceNetworkAccessMock = mock { diff --git a/app/src/main/java/org/thoughtcrime/securesms/messages/BackgroundMessageRetriever.java b/app/src/main/java/org/thoughtcrime/securesms/messages/BackgroundMessageRetriever.java index e85b975be8..1a0eff04b2 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messages/BackgroundMessageRetriever.java +++ b/app/src/main/java/org/thoughtcrime/securesms/messages/BackgroundMessageRetriever.java @@ -132,7 +132,8 @@ public class BackgroundMessageRetriever { * care of it. */ public static boolean shouldIgnoreFetch() { - return ApplicationDependencies.getAppForegroundObserver().isForegrounded(); + return ApplicationDependencies.getAppForegroundObserver().isForegrounded() && + ApplicationDependencies.getSignalServiceNetworkAccess().supportsWebsockets(); } private static String logSuffix(long startTime) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/messages/IncomingMessageObserver.java b/app/src/main/java/org/thoughtcrime/securesms/messages/IncomingMessageObserver.java index eceac5164e..c6c20118de 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messages/IncomingMessageObserver.java +++ b/app/src/main/java/org/thoughtcrime/securesms/messages/IncomingMessageObserver.java @@ -132,7 +132,7 @@ public class IncomingMessageObserver { } public boolean isDecryptionDrained() { - return decryptionDrained; + return decryptionDrained || !networkAccess.supportsWebsockets(); } public void notifyDecryptionsDrained() { @@ -174,12 +174,13 @@ public class IncomingMessageObserver { Log.d(TAG, "Removed old keep web socket open requests."); } - Log.d(TAG, String.format("Network: %s, Foreground: %s, FCM: %s, Stay open requests: [%s], Censored: %s, Registered: %s, Proxy: %s, Force websocket: %s", - hasNetwork, appVisible, fcmEnabled, Util.join(keepAliveTokens.entrySet(), ","), networkAccess.isCensored(), registered, hasProxy, forceWebsocket)); + Log.d(TAG, String.format("Network: %s, Foreground: %s, FCM: %s, Stay open requests: [%s], Censored: %s, Supports websockets: %s, Registered: %s, Proxy: %s, Force websocket: %s", + hasNetwork, appVisible, fcmEnabled, Util.join(keepAliveTokens.entrySet(), ","), networkAccess.isCensored(), networkAccess.supportsWebsockets(), registered, hasProxy, forceWebsocket)); return registered && (appVisible || !fcmEnabled || forceWebsocket || Util.hasItems(keepAliveTokens)) && - hasNetwork; + hasNetwork && + networkAccess.supportsWebsockets(); } private synchronized void waitForConnectionNecessary() { diff --git a/app/src/main/java/org/thoughtcrime/securesms/push/SignalServiceNetworkAccess.kt b/app/src/main/java/org/thoughtcrime/securesms/push/SignalServiceNetworkAccess.kt index 325c1f5bbb..fc5a9bda7c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/push/SignalServiceNetworkAccess.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/push/SignalServiceNetworkAccess.kt @@ -173,7 +173,8 @@ open class SignalServiceNetworkAccess(context: Context) { interceptors, Optional.of(DNS), Optional.empty(), - zkGroupServerPublicParams + zkGroupServerPublicParams, + false ) private val censorshipConfiguration: Map = mapOf( @@ -224,7 +225,8 @@ open class SignalServiceNetworkAccess(context: Context) { interceptors, Optional.of(DNS), if (SignalStore.proxy().isProxyEnabled) Optional.ofNullable(SignalStore.proxy().proxy) else Optional.empty(), - zkGroupServerPublicParams + zkGroupServerPublicParams, + true ) open fun getConfiguration(): SignalServiceConfiguration { @@ -267,6 +269,10 @@ open class SignalServiceNetworkAccess(context: Context) { return defaultCensoredCountryCodes.contains(countryCode) } + fun supportsWebsockets(): Boolean { + return !isCensored() || getConfiguration().supportsWebSockets() + } + private fun buildGConfiguration( hostConfigs: List ): SignalServiceConfiguration { @@ -291,7 +297,8 @@ open class SignalServiceNetworkAccess(context: Context) { interceptors, Optional.of(DNS), Optional.empty(), - zkGroupServerPublicParams + zkGroupServerPublicParams, + true ) } diff --git a/libsignal/service/src/main/java/org/whispersystems/signalservice/internal/configuration/SignalServiceConfiguration.java b/libsignal/service/src/main/java/org/whispersystems/signalservice/internal/configuration/SignalServiceConfiguration.java index 51e65255c5..854366f72e 100644 --- a/libsignal/service/src/main/java/org/whispersystems/signalservice/internal/configuration/SignalServiceConfiguration.java +++ b/libsignal/service/src/main/java/org/whispersystems/signalservice/internal/configuration/SignalServiceConfiguration.java @@ -21,6 +21,7 @@ public final class SignalServiceConfiguration { private final Optional dns; private final Optional proxy; private final byte[] zkGroupServerPublicParams; + private final boolean supportsWebSocket; public SignalServiceConfiguration(SignalServiceUrl[] signalServiceUrls, Map signalCdnUrlMap, @@ -31,7 +32,8 @@ public final class SignalServiceConfiguration { List networkInterceptors, Optional dns, Optional proxy, - byte[] zkGroupServerPublicParams) + byte[] zkGroupServerPublicParams, + boolean supportsWebSocket) { this.signalServiceUrls = signalServiceUrls; this.signalCdnUrlMap = signalCdnUrlMap; @@ -43,6 +45,7 @@ public final class SignalServiceConfiguration { this.dns = dns; this.proxy = proxy; this.zkGroupServerPublicParams = zkGroupServerPublicParams; + this.supportsWebSocket = supportsWebSocket; } public SignalServiceUrl[] getSignalServiceUrls() { @@ -84,4 +87,8 @@ public final class SignalServiceConfiguration { public Optional getSignalProxy() { return proxy; } + + public boolean supportsWebSockets() { + return supportsWebSocket; + } }