Skip to content

Commit

Permalink
Improve network reliability.
Browse files Browse the repository at this point in the history
  • Loading branch information
greyson-signal committed Jan 12, 2023
1 parent 28531bb commit 54ffb4a
Show file tree
Hide file tree
Showing 5 changed files with 27 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,8 @@ private boolean executeBackgroundRetrieval(@NonNull Context context, long startT
* care of it.
*/
public static boolean shouldIgnoreFetch() {
return ApplicationDependencies.getAppForegroundObserver().isForegrounded();
return ApplicationDependencies.getAppForegroundObserver().isForegrounded() &&
ApplicationDependencies.getSignalServiceNetworkAccess().supportsWebsockets();
}

private static String logSuffix(long startTime) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,7 @@ public synchronized void addDecryptionDrainedListener(@NonNull Runnable listener
}

public boolean isDecryptionDrained() {
return decryptionDrained;
return decryptionDrained || !networkAccess.supportsWebsockets();
}

public void notifyDecryptionsDrained() {
Expand Down Expand Up @@ -174,12 +174,13 @@ private synchronized boolean isConnectionNecessary() {
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() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -173,7 +173,8 @@ open class SignalServiceNetworkAccess(context: Context) {
interceptors,
Optional.of(DNS),
Optional.empty(),
zkGroupServerPublicParams
zkGroupServerPublicParams,
false
)

private val censorshipConfiguration: Map<Int, SignalServiceConfiguration> = mapOf(
Expand Down Expand Up @@ -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 {
Expand Down Expand Up @@ -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<HostConfig>
): SignalServiceConfiguration {
Expand All @@ -291,7 +297,8 @@ open class SignalServiceNetworkAccess(context: Context) {
interceptors,
Optional.of(DNS),
Optional.empty(),
zkGroupServerPublicParams
zkGroupServerPublicParams,
true
)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ public final class SignalServiceConfiguration {
private final Optional<Dns> dns;
private final Optional<SignalProxy> proxy;
private final byte[] zkGroupServerPublicParams;
private final boolean supportsWebSocket;

public SignalServiceConfiguration(SignalServiceUrl[] signalServiceUrls,
Map<Integer, SignalCdnUrl[]> signalCdnUrlMap,
Expand All @@ -31,7 +32,8 @@ public SignalServiceConfiguration(SignalServiceUrl[] signalServiceUrls,
List<Interceptor> networkInterceptors,
Optional<Dns> dns,
Optional<SignalProxy> proxy,
byte[] zkGroupServerPublicParams)
byte[] zkGroupServerPublicParams,
boolean supportsWebSocket)
{
this.signalServiceUrls = signalServiceUrls;
this.signalCdnUrlMap = signalCdnUrlMap;
Expand All @@ -43,6 +45,7 @@ public SignalServiceConfiguration(SignalServiceUrl[] signalServiceUrls,
this.dns = dns;
this.proxy = proxy;
this.zkGroupServerPublicParams = zkGroupServerPublicParams;
this.supportsWebSocket = supportsWebSocket;
}

public SignalServiceUrl[] getSignalServiceUrls() {
Expand Down Expand Up @@ -84,4 +87,8 @@ public byte[] getZkGroupServerPublicParams() {
public Optional<SignalProxy> getSignalProxy() {
return proxy;
}

public boolean supportsWebSockets() {
return supportsWebSocket;
}
}

0 comments on commit 54ffb4a

Please sign in to comment.