mirror of
https://github.com/oxen-io/session-android.git
synced 2025-12-15 18:32:18 +00:00
Add DNS fallback system.
This commit is contained in:
@@ -221,7 +221,8 @@ public class SignalServiceMessageReceiver {
|
||||
urls.getSignalServiceUrls()[0].getTrustStore(),
|
||||
Optional.of(credentialsProvider), signalAgent, connectivityListener,
|
||||
sleepTimer,
|
||||
urls.getNetworkInterceptors());
|
||||
urls.getNetworkInterceptors(),
|
||||
urls.getDns());
|
||||
|
||||
return new SignalServiceMessagePipe(webSocket, Optional.of(credentialsProvider), clientZkProfile);
|
||||
}
|
||||
@@ -231,7 +232,8 @@ public class SignalServiceMessageReceiver {
|
||||
urls.getSignalServiceUrls()[0].getTrustStore(),
|
||||
Optional.<CredentialsProvider>absent(), signalAgent, connectivityListener,
|
||||
sleepTimer,
|
||||
urls.getNetworkInterceptors());
|
||||
urls.getNetworkInterceptors(),
|
||||
urls.getDns());
|
||||
|
||||
return new SignalServiceMessagePipe(webSocket, Optional.of(credentialsProvider), clientZkProfile);
|
||||
}
|
||||
|
||||
@@ -1,7 +1,10 @@
|
||||
package org.whispersystems.signalservice.internal.configuration;
|
||||
|
||||
import org.whispersystems.libsignal.util.guava.Optional;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import okhttp3.Dns;
|
||||
import okhttp3.Interceptor;
|
||||
|
||||
public final class SignalServiceConfiguration {
|
||||
@@ -12,6 +15,7 @@ public final class SignalServiceConfiguration {
|
||||
private final SignalKeyBackupServiceUrl[] signalKeyBackupServiceUrls;
|
||||
private final SignalStorageUrl[] signalStorageUrls;
|
||||
private final List<Interceptor> networkInterceptors;
|
||||
private final Optional<Dns> dns;
|
||||
private final byte[] zkGroupServerPublicParams;
|
||||
|
||||
public SignalServiceConfiguration(SignalServiceUrl[] signalServiceUrls,
|
||||
@@ -20,6 +24,7 @@ public final class SignalServiceConfiguration {
|
||||
SignalKeyBackupServiceUrl[] signalKeyBackupServiceUrls,
|
||||
SignalStorageUrl[] signalStorageUrls,
|
||||
List<Interceptor> networkInterceptors,
|
||||
Optional<Dns> dns,
|
||||
byte[] zkGroupServerPublicParams)
|
||||
{
|
||||
this.signalServiceUrls = signalServiceUrls;
|
||||
@@ -28,6 +33,7 @@ public final class SignalServiceConfiguration {
|
||||
this.signalKeyBackupServiceUrls = signalKeyBackupServiceUrls;
|
||||
this.signalStorageUrls = signalStorageUrls;
|
||||
this.networkInterceptors = networkInterceptors;
|
||||
this.dns = dns;
|
||||
this.zkGroupServerPublicParams = zkGroupServerPublicParams;
|
||||
}
|
||||
|
||||
@@ -55,6 +61,10 @@ public final class SignalServiceConfiguration {
|
||||
return networkInterceptors;
|
||||
}
|
||||
|
||||
public Optional<Dns> getDns() {
|
||||
return dns;
|
||||
}
|
||||
|
||||
public byte[] getZkGroupServerPublicParams() {
|
||||
return zkGroupServerPublicParams;
|
||||
}
|
||||
|
||||
@@ -106,6 +106,7 @@ import javax.net.ssl.X509TrustManager;
|
||||
import okhttp3.Call;
|
||||
import okhttp3.ConnectionSpec;
|
||||
import okhttp3.Credentials;
|
||||
import okhttp3.Dns;
|
||||
import okhttp3.Interceptor;
|
||||
import okhttp3.MediaType;
|
||||
import okhttp3.MultipartBody;
|
||||
@@ -184,16 +185,16 @@ public class PushServiceSocket {
|
||||
private final SecureRandom random;
|
||||
private final ClientZkOperations clientZkOperations;
|
||||
|
||||
public PushServiceSocket(SignalServiceConfiguration signalServiceConfiguration, CredentialsProvider credentialsProvider, String signalAgent) {
|
||||
public PushServiceSocket(SignalServiceConfiguration serviceConfig, CredentialsProvider credentialsProvider, String signalAgent) {
|
||||
this.credentialsProvider = credentialsProvider;
|
||||
this.signalAgent = signalAgent;
|
||||
this.serviceClients = createServiceConnectionHolders(signalServiceConfiguration.getSignalServiceUrls(), signalServiceConfiguration.getNetworkInterceptors());
|
||||
this.cdnClients = createConnectionHolders(signalServiceConfiguration.getSignalCdnUrls(), signalServiceConfiguration.getNetworkInterceptors());
|
||||
this.contactDiscoveryClients = createConnectionHolders(signalServiceConfiguration.getSignalContactDiscoveryUrls(), signalServiceConfiguration.getNetworkInterceptors());
|
||||
this.keyBackupServiceClients = createConnectionHolders(signalServiceConfiguration.getSignalKeyBackupServiceUrls(), signalServiceConfiguration.getNetworkInterceptors());
|
||||
this.storageClients = createConnectionHolders(signalServiceConfiguration.getSignalStorageUrls(), signalServiceConfiguration.getNetworkInterceptors());
|
||||
this.serviceClients = createServiceConnectionHolders(serviceConfig.getSignalServiceUrls(), serviceConfig.getNetworkInterceptors(), serviceConfig.getDns());
|
||||
this.cdnClients = createConnectionHolders(serviceConfig.getSignalCdnUrls(), serviceConfig.getNetworkInterceptors(), serviceConfig.getDns());
|
||||
this.contactDiscoveryClients = createConnectionHolders(serviceConfig.getSignalContactDiscoveryUrls(), serviceConfig.getNetworkInterceptors(), serviceConfig.getDns());
|
||||
this.keyBackupServiceClients = createConnectionHolders(serviceConfig.getSignalKeyBackupServiceUrls(), serviceConfig.getNetworkInterceptors(), serviceConfig.getDns());
|
||||
this.storageClients = createConnectionHolders(serviceConfig.getSignalStorageUrls(), serviceConfig.getNetworkInterceptors(), serviceConfig.getDns());
|
||||
this.random = new SecureRandom();
|
||||
this.clientZkOperations = FeatureFlags.ZK_GROUPS ? new ClientZkOperations(new ServerPublicParams(signalServiceConfiguration.getZkGroupServerPublicParams())) : null;
|
||||
this.clientZkOperations = FeatureFlags.ZK_GROUPS ? new ClientZkOperations(new ServerPublicParams(serviceConfig.getZkGroupServerPublicParams())) : null;
|
||||
}
|
||||
|
||||
public void requestSmsVerificationCode(boolean androidSmsRetriever, Optional<String> captchaToken, Optional<String> challenge) throws IOException {
|
||||
@@ -1349,29 +1350,32 @@ public class PushServiceSocket {
|
||||
throw new NonSuccessfulResponseCodeException("Response: " + response);
|
||||
}
|
||||
|
||||
private ServiceConnectionHolder[] createServiceConnectionHolders(SignalUrl[] urls, List<Interceptor> interceptors) {
|
||||
private ServiceConnectionHolder[] createServiceConnectionHolders(SignalUrl[] urls,
|
||||
List<Interceptor> interceptors,
|
||||
Optional<Dns> dns)
|
||||
{
|
||||
List<ServiceConnectionHolder> serviceConnectionHolders = new LinkedList<>();
|
||||
|
||||
for (SignalUrl url : urls) {
|
||||
serviceConnectionHolders.add(new ServiceConnectionHolder(createConnectionClient(url, interceptors),
|
||||
createConnectionClient(url, interceptors),
|
||||
serviceConnectionHolders.add(new ServiceConnectionHolder(createConnectionClient(url, interceptors, dns),
|
||||
createConnectionClient(url, interceptors, dns),
|
||||
url.getUrl(), url.getHostHeader()));
|
||||
}
|
||||
|
||||
return serviceConnectionHolders.toArray(new ServiceConnectionHolder[0]);
|
||||
}
|
||||
|
||||
private ConnectionHolder[] createConnectionHolders(SignalUrl[] urls, List<Interceptor> interceptors) {
|
||||
private ConnectionHolder[] createConnectionHolders(SignalUrl[] urls, List<Interceptor> interceptors, Optional<Dns> dns) {
|
||||
List<ConnectionHolder> connectionHolders = new LinkedList<>();
|
||||
|
||||
for (SignalUrl url : urls) {
|
||||
connectionHolders.add(new ConnectionHolder(createConnectionClient(url, interceptors), url.getUrl(), url.getHostHeader()));
|
||||
connectionHolders.add(new ConnectionHolder(createConnectionClient(url, interceptors, dns), url.getUrl(), url.getHostHeader()));
|
||||
}
|
||||
|
||||
return connectionHolders.toArray(new ConnectionHolder[0]);
|
||||
}
|
||||
|
||||
private OkHttpClient createConnectionClient(SignalUrl url, List<Interceptor> interceptors) {
|
||||
private OkHttpClient createConnectionClient(SignalUrl url, List<Interceptor> interceptors, Optional<Dns> dns) {
|
||||
try {
|
||||
TrustManager[] trustManagers = BlacklistingTrustManager.createFor(url.getTrustStore());
|
||||
|
||||
@@ -1380,7 +1384,8 @@ public class PushServiceSocket {
|
||||
|
||||
OkHttpClient.Builder builder = new OkHttpClient.Builder()
|
||||
.sslSocketFactory(new Tls12SocketFactory(context.getSocketFactory()), (X509TrustManager)trustManagers[0])
|
||||
.connectionSpecs(url.getConnectionSpecs().or(Util.immutableList(ConnectionSpec.RESTRICTED_TLS)));
|
||||
.connectionSpecs(url.getConnectionSpecs().or(Util.immutableList(ConnectionSpec.RESTRICTED_TLS)))
|
||||
.dns(dns.or(Dns.SYSTEM));
|
||||
|
||||
for (Interceptor interceptor : interceptors) {
|
||||
builder.addInterceptor(interceptor);
|
||||
|
||||
@@ -33,6 +33,7 @@ import javax.net.ssl.TrustManager;
|
||||
import javax.net.ssl.X509TrustManager;
|
||||
|
||||
import okhttp3.ConnectionSpec;
|
||||
import okhttp3.Dns;
|
||||
import okhttp3.Interceptor;
|
||||
import okhttp3.OkHttpClient;
|
||||
import okhttp3.Request;
|
||||
@@ -60,6 +61,7 @@ public class WebSocketConnection extends WebSocketListener {
|
||||
private final ConnectivityListener listener;
|
||||
private final SleepTimer sleepTimer;
|
||||
private final List<Interceptor> interceptors;
|
||||
private final Optional<Dns> dns;
|
||||
|
||||
private WebSocket client;
|
||||
private KeepAliveSender keepAliveSender;
|
||||
@@ -72,7 +74,8 @@ public class WebSocketConnection extends WebSocketListener {
|
||||
String signalAgent,
|
||||
ConnectivityListener listener,
|
||||
SleepTimer timer,
|
||||
List<Interceptor> interceptors)
|
||||
List<Interceptor> interceptors,
|
||||
Optional<Dns> dns)
|
||||
{
|
||||
this.trustStore = trustStore;
|
||||
this.credentialsProvider = credentialsProvider;
|
||||
@@ -80,6 +83,7 @@ public class WebSocketConnection extends WebSocketListener {
|
||||
this.listener = listener;
|
||||
this.sleepTimer = timer;
|
||||
this.interceptors = interceptors;
|
||||
this.dns = dns;
|
||||
this.attempts = 0;
|
||||
this.connected = false;
|
||||
|
||||
@@ -108,6 +112,7 @@ public class WebSocketConnection extends WebSocketListener {
|
||||
.sslSocketFactory(new Tls12SocketFactory(socketFactory.first()), socketFactory.second())
|
||||
.connectionSpecs(Util.immutableList(ConnectionSpec.RESTRICTED_TLS))
|
||||
.readTimeout(KEEPALIVE_TIMEOUT_SECONDS + 10, TimeUnit.SECONDS)
|
||||
.dns(dns.or(Dns.SYSTEM))
|
||||
.connectTimeout(KEEPALIVE_TIMEOUT_SECONDS + 10, TimeUnit.SECONDS);
|
||||
|
||||
for (Interceptor interceptor : interceptors) {
|
||||
|
||||
Reference in New Issue
Block a user