Ensure websockets are restarted after changing proxy.

fork-5.53.8
Greyson Parrelli 2022-09-23 14:18:05 -04:00 zatwierdzone przez GitHub
rodzic e845860c7c
commit 87f206fdc4
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: 4AEE18F83AFDEB23
3 zmienionych plików z 14 dodań i 8 usunięć

Wyświetl plik

@ -63,6 +63,7 @@ import org.whispersystems.signalservice.internal.util.Util;
import java.security.KeyManagementException; import java.security.KeyManagementException;
import java.security.KeyStore; import java.security.KeyStore;
import java.security.NoSuchAlgorithmException; import java.security.NoSuchAlgorithmException;
import java.util.function.Supplier;
import javax.net.ssl.SSLContext; import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager; import javax.net.ssl.TrustManager;
@ -260,6 +261,9 @@ public class ApplicationDependencies {
public static void resetNetworkConnectionsAfterProxyChange() { public static void resetNetworkConnectionsAfterProxyChange() {
synchronized (LOCK) { synchronized (LOCK) {
closeConnections(); closeConnections();
if (signalWebSocket != null) {
signalWebSocket.forceNewWebSockets();
}
} }
} }
@ -570,7 +574,7 @@ public class ApplicationDependencies {
if (signalWebSocket == null) { if (signalWebSocket == null) {
synchronized (LOCK) { synchronized (LOCK) {
if (signalWebSocket == null) { if (signalWebSocket == null) {
signalWebSocket = provider.provideSignalWebSocket(getSignalServiceNetworkAccess().getConfiguration()); signalWebSocket = provider.provideSignalWebSocket(() -> getSignalServiceNetworkAccess().getConfiguration());
} }
} }
} }
@ -696,7 +700,7 @@ public class ApplicationDependencies {
@NonNull SignalCallManager provideSignalCallManager(); @NonNull SignalCallManager provideSignalCallManager();
@NonNull PendingRetryReceiptManager providePendingRetryReceiptManager(); @NonNull PendingRetryReceiptManager providePendingRetryReceiptManager();
@NonNull PendingRetryReceiptCache providePendingRetryReceiptCache(); @NonNull PendingRetryReceiptCache providePendingRetryReceiptCache();
@NonNull SignalWebSocket provideSignalWebSocket(@NonNull SignalServiceConfiguration signalServiceConfiguration); @NonNull SignalWebSocket provideSignalWebSocket(@NonNull Supplier<SignalServiceConfiguration> signalServiceConfigurationSupplier);
@NonNull SignalServiceDataStoreImpl provideProtocolStore(); @NonNull SignalServiceDataStoreImpl provideProtocolStore();
@NonNull GiphyMp4Cache provideGiphyMp4Cache(); @NonNull GiphyMp4Cache provideGiphyMp4Cache();
@NonNull SimpleExoPlayerPool provideExoPlayerPool(); @NonNull SimpleExoPlayerPool provideExoPlayerPool();

Wyświetl plik

@ -95,6 +95,7 @@ import org.whispersystems.signalservice.internal.websocket.WebSocketConnection;
import java.security.KeyStore; import java.security.KeyStore;
import java.util.Optional; import java.util.Optional;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.util.function.Supplier;
/** /**
* Implementation of {@link ApplicationDependencies.Provider} that provides real app dependencies. * Implementation of {@link ApplicationDependencies.Provider} that provides real app dependencies.
@ -281,10 +282,10 @@ public class ApplicationDependencyProvider implements ApplicationDependencies.Pr
} }
@Override @Override
public @NonNull SignalWebSocket provideSignalWebSocket(@NonNull SignalServiceConfiguration signalServiceConfiguration) { public @NonNull SignalWebSocket provideSignalWebSocket(@NonNull Supplier<SignalServiceConfiguration> signalServiceConfigurationSupplier) {
SleepTimer sleepTimer = SignalStore.account().isFcmEnabled() ? new UptimeSleepTimer() : new AlarmSleepTimer(context); SleepTimer sleepTimer = SignalStore.account().isFcmEnabled() ? new UptimeSleepTimer() : new AlarmSleepTimer(context);
SignalWebSocketHealthMonitor healthMonitor = new SignalWebSocketHealthMonitor(context, sleepTimer); SignalWebSocketHealthMonitor healthMonitor = new SignalWebSocketHealthMonitor(context, sleepTimer);
SignalWebSocket signalWebSocket = new SignalWebSocket(provideWebSocketFactory(signalServiceConfiguration, healthMonitor)); SignalWebSocket signalWebSocket = new SignalWebSocket(provideWebSocketFactory(signalServiceConfigurationSupplier, healthMonitor));
healthMonitor.monitor(signalWebSocket); healthMonitor.monitor(signalWebSocket);
@ -389,12 +390,12 @@ public class ApplicationDependencyProvider implements ApplicationDependencies.Pr
10); 10);
} }
private @NonNull WebSocketFactory provideWebSocketFactory(@NonNull SignalServiceConfiguration signalServiceConfiguration, @NonNull SignalWebSocketHealthMonitor healthMonitor) { @NonNull WebSocketFactory provideWebSocketFactory(@NonNull Supplier<SignalServiceConfiguration> signalServiceConfigurationSupplier, @NonNull SignalWebSocketHealthMonitor healthMonitor) {
return new WebSocketFactory() { return new WebSocketFactory() {
@Override @Override
public WebSocketConnection createWebSocket() { public WebSocketConnection createWebSocket() {
return new WebSocketConnection("normal", return new WebSocketConnection("normal",
signalServiceConfiguration, signalServiceConfigurationSupplier.get(),
Optional.of(new DynamicCredentialsProvider()), Optional.of(new DynamicCredentialsProvider()),
BuildConfig.SIGNAL_AGENT, BuildConfig.SIGNAL_AGENT,
healthMonitor); healthMonitor);
@ -403,7 +404,7 @@ public class ApplicationDependencyProvider implements ApplicationDependencies.Pr
@Override @Override
public WebSocketConnection createUnidentifiedWebSocket() { public WebSocketConnection createUnidentifiedWebSocket() {
return new WebSocketConnection("unidentified", return new WebSocketConnection("unidentified",
signalServiceConfiguration, signalServiceConfigurationSupplier.get(),
Optional.empty(), Optional.empty(),
BuildConfig.SIGNAL_AGENT, BuildConfig.SIGNAL_AGENT,
healthMonitor); healthMonitor);

Wyświetl plik

@ -45,6 +45,7 @@ import org.whispersystems.signalservice.api.services.ProfileService;
import org.whispersystems.signalservice.internal.configuration.SignalServiceConfiguration; import org.whispersystems.signalservice.internal.configuration.SignalServiceConfiguration;
import java.security.KeyStore; import java.security.KeyStore;
import java.util.function.Supplier;
import static org.mockito.Mockito.mock; import static org.mockito.Mockito.mock;
@ -186,7 +187,7 @@ public class MockApplicationDependencyProvider implements ApplicationDependencie
} }
@Override @Override
public @NonNull SignalWebSocket provideSignalWebSocket(@NonNull SignalServiceConfiguration signalServiceConfiguration) { public @NonNull SignalWebSocket provideSignalWebSocket(@NonNull Supplier<SignalServiceConfiguration> signalServiceConfigurationSupplier) {
return null; return null;
} }