mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-04-30 21:52:28 +01:00
Support proxy in connections managed by libsignal.
This commit is contained in:
committed by
Greyson Parrelli
parent
d20f588802
commit
f9a8f447d2
@@ -87,6 +87,7 @@ import org.whispersystems.signalservice.internal.util.StaticCredentialsProvider;
|
||||
import org.whispersystems.signalservice.internal.util.Util;
|
||||
import org.whispersystems.signalservice.internal.websocket.DefaultResponseMapper;
|
||||
import org.signal.core.util.Base64;
|
||||
import org.whispersystems.signalservice.internal.websocket.LibSignalNetwork;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.security.MessageDigest;
|
||||
@@ -369,7 +370,7 @@ public class SignalServiceAccountManager {
|
||||
Optional<byte[]> token,
|
||||
String mrEnclave,
|
||||
Long timeoutMs,
|
||||
@Nullable Network libsignalNetwork,
|
||||
@Nullable LibSignalNetwork libsignalNetwork,
|
||||
Consumer<byte[]> tokenSaver)
|
||||
throws IOException
|
||||
{
|
||||
|
||||
@@ -19,6 +19,7 @@ import org.whispersystems.signalservice.api.push.exceptions.NonSuccessfulRespons
|
||||
import org.whispersystems.signalservice.api.util.UuidUtil;
|
||||
import org.whispersystems.signalservice.internal.ServiceResponse;
|
||||
import org.whispersystems.signalservice.internal.configuration.SignalServiceConfiguration;
|
||||
import org.whispersystems.signalservice.internal.websocket.LibSignalNetwork;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
@@ -55,7 +56,7 @@ public final class CdsiV2Service {
|
||||
|
||||
private final CdsiRequestHandler cdsiRequestHandler;
|
||||
|
||||
public CdsiV2Service(SignalServiceConfiguration configuration, String mrEnclave, @Nullable Network network) {
|
||||
public CdsiV2Service(SignalServiceConfiguration configuration, String mrEnclave, @Nullable LibSignalNetwork network) {
|
||||
|
||||
if (network != null) {
|
||||
this.cdsiRequestHandler = (username, password, request, tokenSaver) -> {
|
||||
|
||||
@@ -5,14 +5,27 @@
|
||||
|
||||
package org.whispersystems.signalservice.internal.websocket
|
||||
|
||||
import org.signal.core.util.orNull
|
||||
import org.signal.libsignal.internal.CompletableFuture
|
||||
import org.signal.libsignal.net.CdsiLookupRequest
|
||||
import org.signal.libsignal.net.CdsiLookupResponse
|
||||
import org.signal.libsignal.net.ChatService
|
||||
import org.signal.libsignal.net.Network
|
||||
import org.whispersystems.signalservice.api.util.CredentialsProvider
|
||||
import org.whispersystems.signalservice.internal.configuration.SignalProxy
|
||||
import org.whispersystems.signalservice.internal.configuration.SignalServiceConfiguration
|
||||
import java.io.IOException
|
||||
import java.util.concurrent.ExecutionException
|
||||
import java.util.function.Consumer
|
||||
|
||||
/**
|
||||
* Makes Network API more ergonomic to use with Android client types
|
||||
*/
|
||||
class LibSignalNetwork(private val inner: Network) {
|
||||
class LibSignalNetwork(private val inner: Network, config: SignalServiceConfiguration) {
|
||||
init {
|
||||
resetSettings(config)
|
||||
}
|
||||
|
||||
fun createChatService(
|
||||
credentialsProvider: CredentialsProvider? = null
|
||||
): ChatService {
|
||||
@@ -20,4 +33,27 @@ class LibSignalNetwork(private val inner: Network) {
|
||||
val password = credentialsProvider?.password ?: ""
|
||||
return inner.createChatService(username, password)
|
||||
}
|
||||
|
||||
fun resetSettings(config: SignalServiceConfiguration) {
|
||||
resetProxy(config.signalProxy.orNull())
|
||||
}
|
||||
|
||||
private fun resetProxy(proxy: SignalProxy?) {
|
||||
if (proxy == null) {
|
||||
inner.clearProxy()
|
||||
} else {
|
||||
inner.setProxy(proxy.host, proxy.port)
|
||||
}
|
||||
}
|
||||
|
||||
// Delegates
|
||||
@Throws(IOException::class, InterruptedException::class, ExecutionException::class)
|
||||
fun cdsiLookup(
|
||||
username: String?,
|
||||
password: String?,
|
||||
request: CdsiLookupRequest?,
|
||||
tokenConsumer: Consumer<ByteArray?>
|
||||
): CompletableFuture<CdsiLookupResponse?>? {
|
||||
return inner.cdsiLookup(username, password, request, tokenConsumer)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user