Improve network reliability.

main
Greyson Parrelli 2023-01-12 17:31:22 -05:00
rodzic 28531bb415
commit 54ffb4ad7b
5 zmienionych plików z 27 dodań i 10 usunięć

Wyświetl plik

@ -73,7 +73,8 @@ class InstrumentationApplicationDependencyProvider(application: Application, def
emptyList(), emptyList(),
Optional.of(SignalServiceNetworkAccess.DNS), Optional.of(SignalServiceNetworkAccess.DNS),
Optional.empty(), Optional.empty(),
Base64.decode(BuildConfig.ZKGROUP_SERVER_PUBLIC_PARAMS) Base64.decode(BuildConfig.ZKGROUP_SERVER_PUBLIC_PARAMS),
true
) )
serviceNetworkAccessMock = mock { serviceNetworkAccessMock = mock {

Wyświetl plik

@ -132,7 +132,8 @@ public class BackgroundMessageRetriever {
* care of it. * care of it.
*/ */
public static boolean shouldIgnoreFetch() { public static boolean shouldIgnoreFetch() {
return ApplicationDependencies.getAppForegroundObserver().isForegrounded(); return ApplicationDependencies.getAppForegroundObserver().isForegrounded() &&
ApplicationDependencies.getSignalServiceNetworkAccess().supportsWebsockets();
} }
private static String logSuffix(long startTime) { private static String logSuffix(long startTime) {

Wyświetl plik

@ -132,7 +132,7 @@ public class IncomingMessageObserver {
} }
public boolean isDecryptionDrained() { public boolean isDecryptionDrained() {
return decryptionDrained; return decryptionDrained || !networkAccess.supportsWebsockets();
} }
public void notifyDecryptionsDrained() { public void notifyDecryptionsDrained() {
@ -174,12 +174,13 @@ public class IncomingMessageObserver {
Log.d(TAG, "Removed old keep web socket open requests."); 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", 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(), registered, hasProxy, forceWebsocket)); hasNetwork, appVisible, fcmEnabled, Util.join(keepAliveTokens.entrySet(), ","), networkAccess.isCensored(), networkAccess.supportsWebsockets(), registered, hasProxy, forceWebsocket));
return registered && return registered &&
(appVisible || !fcmEnabled || forceWebsocket || Util.hasItems(keepAliveTokens)) && (appVisible || !fcmEnabled || forceWebsocket || Util.hasItems(keepAliveTokens)) &&
hasNetwork; hasNetwork &&
networkAccess.supportsWebsockets();
} }
private synchronized void waitForConnectionNecessary() { private synchronized void waitForConnectionNecessary() {

Wyświetl plik

@ -173,7 +173,8 @@ open class SignalServiceNetworkAccess(context: Context) {
interceptors, interceptors,
Optional.of(DNS), Optional.of(DNS),
Optional.empty(), Optional.empty(),
zkGroupServerPublicParams zkGroupServerPublicParams,
false
) )
private val censorshipConfiguration: Map<Int, SignalServiceConfiguration> = mapOf( private val censorshipConfiguration: Map<Int, SignalServiceConfiguration> = mapOf(
@ -224,7 +225,8 @@ open class SignalServiceNetworkAccess(context: Context) {
interceptors, interceptors,
Optional.of(DNS), Optional.of(DNS),
if (SignalStore.proxy().isProxyEnabled) Optional.ofNullable(SignalStore.proxy().proxy) else Optional.empty(), if (SignalStore.proxy().isProxyEnabled) Optional.ofNullable(SignalStore.proxy().proxy) else Optional.empty(),
zkGroupServerPublicParams zkGroupServerPublicParams,
true
) )
open fun getConfiguration(): SignalServiceConfiguration { open fun getConfiguration(): SignalServiceConfiguration {
@ -267,6 +269,10 @@ open class SignalServiceNetworkAccess(context: Context) {
return defaultCensoredCountryCodes.contains(countryCode) return defaultCensoredCountryCodes.contains(countryCode)
} }
fun supportsWebsockets(): Boolean {
return !isCensored() || getConfiguration().supportsWebSockets()
}
private fun buildGConfiguration( private fun buildGConfiguration(
hostConfigs: List<HostConfig> hostConfigs: List<HostConfig>
): SignalServiceConfiguration { ): SignalServiceConfiguration {
@ -291,7 +297,8 @@ open class SignalServiceNetworkAccess(context: Context) {
interceptors, interceptors,
Optional.of(DNS), Optional.of(DNS),
Optional.empty(), Optional.empty(),
zkGroupServerPublicParams zkGroupServerPublicParams,
true
) )
} }

Wyświetl plik

@ -21,6 +21,7 @@ public final class SignalServiceConfiguration {
private final Optional<Dns> dns; private final Optional<Dns> dns;
private final Optional<SignalProxy> proxy; private final Optional<SignalProxy> proxy;
private final byte[] zkGroupServerPublicParams; private final byte[] zkGroupServerPublicParams;
private final boolean supportsWebSocket;
public SignalServiceConfiguration(SignalServiceUrl[] signalServiceUrls, public SignalServiceConfiguration(SignalServiceUrl[] signalServiceUrls,
Map<Integer, SignalCdnUrl[]> signalCdnUrlMap, Map<Integer, SignalCdnUrl[]> signalCdnUrlMap,
@ -31,7 +32,8 @@ public final class SignalServiceConfiguration {
List<Interceptor> networkInterceptors, List<Interceptor> networkInterceptors,
Optional<Dns> dns, Optional<Dns> dns,
Optional<SignalProxy> proxy, Optional<SignalProxy> proxy,
byte[] zkGroupServerPublicParams) byte[] zkGroupServerPublicParams,
boolean supportsWebSocket)
{ {
this.signalServiceUrls = signalServiceUrls; this.signalServiceUrls = signalServiceUrls;
this.signalCdnUrlMap = signalCdnUrlMap; this.signalCdnUrlMap = signalCdnUrlMap;
@ -43,6 +45,7 @@ public final class SignalServiceConfiguration {
this.dns = dns; this.dns = dns;
this.proxy = proxy; this.proxy = proxy;
this.zkGroupServerPublicParams = zkGroupServerPublicParams; this.zkGroupServerPublicParams = zkGroupServerPublicParams;
this.supportsWebSocket = supportsWebSocket;
} }
public SignalServiceUrl[] getSignalServiceUrls() { public SignalServiceUrl[] getSignalServiceUrls() {
@ -84,4 +87,8 @@ public final class SignalServiceConfiguration {
public Optional<SignalProxy> getSignalProxy() { public Optional<SignalProxy> getSignalProxy() {
return proxy; return proxy;
} }
public boolean supportsWebSockets() {
return supportsWebSocket;
}
} }