mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-02-23 19:26:17 +00:00
Use extension functions instead of LibSignalNetwork class.
This commit is contained in:
committed by
Cody Henthorne
parent
6069dfc6f8
commit
3d382ee15e
@@ -105,7 +105,7 @@ class InternalSvrPlaygroundViewModel : ViewModel() {
|
||||
private fun SvrImplementation.toImplementation(): SecureValueRecovery {
|
||||
return when (this) {
|
||||
SvrImplementation.SVR2 -> AppDependencies.signalServiceAccountManager.getSecureValueRecoveryV2(BuildConfig.SVR2_MRENCLAVE)
|
||||
SvrImplementation.SVR3 -> AppDependencies.signalServiceAccountManager.getSecureValueRecoveryV3(AppDependencies.libsignalNetwork.network, TestShareSetStorage())
|
||||
SvrImplementation.SVR3 -> AppDependencies.signalServiceAccountManager.getSecureValueRecoveryV3(AppDependencies.libsignalNetwork, TestShareSetStorage())
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -9,6 +9,7 @@ import io.reactivex.rxjava3.subjects.Subject
|
||||
import okhttp3.OkHttpClient
|
||||
import org.signal.core.util.concurrent.DeadlockDetector
|
||||
import org.signal.core.util.resettableLazy
|
||||
import org.signal.libsignal.net.Network
|
||||
import org.signal.libsignal.zkgroup.profiles.ClientZkProfileOperations
|
||||
import org.signal.libsignal.zkgroup.receipts.ClientZkReceiptOperations
|
||||
import org.thoughtcrime.securesms.components.TypingStatusRepository
|
||||
@@ -50,7 +51,6 @@ import org.whispersystems.signalservice.api.services.DonationsService
|
||||
import org.whispersystems.signalservice.api.services.ProfileService
|
||||
import org.whispersystems.signalservice.api.websocket.WebSocketConnectionState
|
||||
import org.whispersystems.signalservice.internal.configuration.SignalServiceConfiguration
|
||||
import org.whispersystems.signalservice.internal.websocket.LibSignalNetwork
|
||||
import java.util.function.Supplier
|
||||
|
||||
/**
|
||||
@@ -249,7 +249,7 @@ object AppDependencies {
|
||||
get() = networkModule.incomingMessageObserver
|
||||
|
||||
@JvmStatic
|
||||
val libsignalNetwork: LibSignalNetwork
|
||||
val libsignalNetwork: Network
|
||||
get() = networkModule.libsignalNetwork
|
||||
|
||||
@JvmStatic
|
||||
@@ -330,7 +330,7 @@ object AppDependencies {
|
||||
fun provideSignalCallManager(): SignalCallManager
|
||||
fun providePendingRetryReceiptManager(): PendingRetryReceiptManager
|
||||
fun providePendingRetryReceiptCache(): PendingRetryReceiptCache
|
||||
fun provideSignalWebSocket(signalServiceConfigurationSupplier: Supplier<SignalServiceConfiguration>, libSignalNetworkSupplier: Supplier<LibSignalNetwork?>): SignalWebSocket
|
||||
fun provideSignalWebSocket(signalServiceConfigurationSupplier: Supplier<SignalServiceConfiguration>, libSignalNetworkSupplier: Supplier<Network>): SignalWebSocket
|
||||
fun provideProtocolStore(): SignalServiceDataStoreImpl
|
||||
fun provideGiphyMp4Cache(): GiphyMp4Cache
|
||||
fun provideExoPlayerPool(): SimpleExoPlayerPool
|
||||
@@ -341,6 +341,6 @@ object AppDependencies {
|
||||
fun provideDeadlockDetector(): DeadlockDetector
|
||||
fun provideClientZkReceiptOperations(signalServiceConfiguration: SignalServiceConfiguration): ClientZkReceiptOperations
|
||||
fun provideScheduledMessageManager(): ScheduledMessageManager
|
||||
fun provideLibsignalNetwork(config: SignalServiceConfiguration): LibSignalNetwork
|
||||
fun provideLibsignalNetwork(config: SignalServiceConfiguration): Network
|
||||
}
|
||||
}
|
||||
|
||||
@@ -92,7 +92,7 @@ import org.whispersystems.signalservice.api.util.SleepTimer;
|
||||
import org.whispersystems.signalservice.api.util.UptimeSleepTimer;
|
||||
import org.whispersystems.signalservice.api.websocket.WebSocketFactory;
|
||||
import org.whispersystems.signalservice.internal.configuration.SignalServiceConfiguration;
|
||||
import org.whispersystems.signalservice.internal.websocket.LibSignalNetwork;
|
||||
import org.whispersystems.signalservice.internal.websocket.LibSignalNetworkExtensions;
|
||||
import org.whispersystems.signalservice.internal.websocket.ShadowingWebSocketConnection;
|
||||
import org.whispersystems.signalservice.internal.websocket.WebSocketConnection;
|
||||
import org.whispersystems.signalservice.internal.websocket.LibSignalChatConnection;
|
||||
@@ -237,8 +237,10 @@ public class ApplicationDependencyProvider implements AppDependencies.Provider {
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NonNull LibSignalNetwork provideLibsignalNetwork(@NonNull SignalServiceConfiguration config) {
|
||||
return new LibSignalNetwork(new Network(BuildConfig.LIBSIGNAL_NET_ENV, StandardUserAgentInterceptor.USER_AGENT), config);
|
||||
public @NonNull Network provideLibsignalNetwork(@NonNull SignalServiceConfiguration config) {
|
||||
Network network = new Network(BuildConfig.LIBSIGNAL_NET_ENV, StandardUserAgentInterceptor.USER_AGENT);
|
||||
LibSignalNetworkExtensions.applyConfiguration(network, config);
|
||||
return network;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -294,7 +296,7 @@ public class ApplicationDependencyProvider implements AppDependencies.Provider {
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NonNull SignalWebSocket provideSignalWebSocket(@NonNull Supplier<SignalServiceConfiguration> signalServiceConfigurationSupplier, @NonNull Supplier<LibSignalNetwork> libSignalNetworkSupplier) {
|
||||
public @NonNull SignalWebSocket provideSignalWebSocket(@NonNull Supplier<SignalServiceConfiguration> signalServiceConfigurationSupplier, @NonNull Supplier<Network> libSignalNetworkSupplier) {
|
||||
SleepTimer sleepTimer = !SignalStore.account().isFcmEnabled() || SignalStore.internalValues().isWebsocketModeForced() ? new AlarmSleepTimer(context) : new UptimeSleepTimer() ;
|
||||
SignalWebSocketHealthMonitor healthMonitor = new SignalWebSocketHealthMonitor(context, sleepTimer);
|
||||
WebSocketShadowingBridge bridge = new DefaultWebSocketShadowingBridge(context);
|
||||
@@ -407,7 +409,7 @@ public class ApplicationDependencyProvider implements AppDependencies.Provider {
|
||||
|
||||
@NonNull WebSocketFactory provideWebSocketFactory(@NonNull Supplier<SignalServiceConfiguration> signalServiceConfigurationSupplier,
|
||||
@NonNull SignalWebSocketHealthMonitor healthMonitor,
|
||||
@NonNull Supplier<LibSignalNetwork> libSignalNetworkSupplier,
|
||||
@NonNull Supplier<Network> libSignalNetworkSupplier,
|
||||
@NonNull WebSocketShadowingBridge bridge)
|
||||
{
|
||||
return new WebSocketFactory() {
|
||||
@@ -432,16 +434,16 @@ public class ApplicationDependencyProvider implements AppDependencies.Provider {
|
||||
BuildConfig.SIGNAL_AGENT,
|
||||
healthMonitor,
|
||||
Stories.isFeatureEnabled(),
|
||||
libSignalNetworkSupplier.get().createChatService(null),
|
||||
LibSignalNetworkExtensions.createChatService(libSignalNetworkSupplier.get(), null),
|
||||
shadowPercentage,
|
||||
bridge
|
||||
);
|
||||
}
|
||||
if (FeatureFlags.libSignalWebSocketEnabled()) {
|
||||
LibSignalNetwork network = libSignalNetworkSupplier.get();
|
||||
Network network = libSignalNetworkSupplier.get();
|
||||
return new LibSignalChatConnection(
|
||||
"libsignal-unauth",
|
||||
network.createChatService(null),
|
||||
LibSignalNetworkExtensions.createChatService(network, null),
|
||||
healthMonitor,
|
||||
false);
|
||||
} else {
|
||||
|
||||
@@ -12,6 +12,7 @@ import io.reactivex.rxjava3.subjects.Subject
|
||||
import okhttp3.ConnectionSpec
|
||||
import okhttp3.OkHttpClient
|
||||
import org.signal.core.util.resettableLazy
|
||||
import org.signal.libsignal.net.Network
|
||||
import org.signal.libsignal.zkgroup.receipts.ClientZkReceiptOperations
|
||||
import org.thoughtcrime.securesms.crypto.storage.SignalServiceDataStoreImpl
|
||||
import org.thoughtcrime.securesms.groups.GroupsV2Authorization
|
||||
@@ -35,7 +36,6 @@ import org.whispersystems.signalservice.api.util.Tls12SocketFactory
|
||||
import org.whispersystems.signalservice.api.websocket.WebSocketConnectionState
|
||||
import org.whispersystems.signalservice.internal.util.BlacklistingTrustManager
|
||||
import org.whispersystems.signalservice.internal.util.Util
|
||||
import org.whispersystems.signalservice.internal.websocket.LibSignalNetwork
|
||||
import java.security.KeyManagementException
|
||||
import java.security.NoSuchAlgorithmException
|
||||
import javax.net.ssl.SSLContext
|
||||
@@ -75,7 +75,7 @@ class NetworkDependenciesModule(
|
||||
provider.provideSignalServiceAccountManager(signalServiceNetworkAccess.getConfiguration(), groupsV2Operations)
|
||||
}
|
||||
|
||||
val libsignalNetwork: LibSignalNetwork by lazy {
|
||||
val libsignalNetwork: Network by lazy {
|
||||
provider.provideLibsignalNetwork(signalServiceNetworkAccess.getConfiguration())
|
||||
}
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@ package org.thoughtcrime.securesms.dependencies;
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import org.signal.core.util.concurrent.DeadlockDetector;
|
||||
import org.signal.libsignal.net.Network;
|
||||
import org.signal.libsignal.zkgroup.profiles.ClientZkProfileOperations;
|
||||
import org.signal.libsignal.zkgroup.receipts.ClientZkReceiptOperations;
|
||||
import org.thoughtcrime.securesms.components.TypingStatusRepository;
|
||||
@@ -42,7 +43,6 @@ import org.whispersystems.signalservice.api.services.CallLinksService;
|
||||
import org.whispersystems.signalservice.api.services.DonationsService;
|
||||
import org.whispersystems.signalservice.api.services.ProfileService;
|
||||
import org.whispersystems.signalservice.internal.configuration.SignalServiceConfiguration;
|
||||
import org.whispersystems.signalservice.internal.websocket.LibSignalNetwork;
|
||||
|
||||
import java.util.function.Supplier;
|
||||
|
||||
@@ -181,7 +181,7 @@ public class MockApplicationDependencyProvider implements AppDependencies.Provid
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NonNull SignalWebSocket provideSignalWebSocket(@NonNull Supplier<SignalServiceConfiguration> signalServiceConfigurationSupplier, @NonNull Supplier<LibSignalNetwork> libSignalNetworkSupplier) {
|
||||
public @NonNull SignalWebSocket provideSignalWebSocket(@NonNull Supplier<SignalServiceConfiguration> signalServiceConfigurationSupplier, @NonNull Supplier<Network> libSignalNetworkSupplier) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -235,7 +235,7 @@ public class MockApplicationDependencyProvider implements AppDependencies.Provid
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NonNull LibSignalNetwork provideLibsignalNetwork(@NonNull SignalServiceConfiguration config) {
|
||||
public @NonNull Network provideLibsignalNetwork(@NonNull SignalServiceConfiguration config) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -88,7 +88,6 @@ 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;
|
||||
@@ -371,7 +370,7 @@ public class SignalServiceAccountManager {
|
||||
Optional<byte[]> token,
|
||||
String mrEnclave,
|
||||
Long timeoutMs,
|
||||
@Nullable LibSignalNetwork libsignalNetwork,
|
||||
@Nullable Network libsignalNetwork,
|
||||
Consumer<byte[]> tokenSaver)
|
||||
throws IOException
|
||||
{
|
||||
|
||||
@@ -19,13 +19,11 @@ 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;
|
||||
import java.lang.IllegalArgumentException;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.time.Duration;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
@@ -57,7 +55,7 @@ public final class CdsiV2Service {
|
||||
|
||||
private final CdsiRequestHandler cdsiRequestHandler;
|
||||
|
||||
public CdsiV2Service(SignalServiceConfiguration configuration, String mrEnclave, @Nullable LibSignalNetwork network) {
|
||||
public CdsiV2Service(SignalServiceConfiguration configuration, String mrEnclave, @Nullable Network network) {
|
||||
|
||||
if (network != null) {
|
||||
this.cdsiRequestHandler = (username, password, request, tokenSaver) -> {
|
||||
|
||||
@@ -1,59 +0,0 @@
|
||||
/*
|
||||
* Copyright 2024 Signal Messenger, LLC
|
||||
* SPDX-License-Identifier: AGPL-3.0-only
|
||||
*/
|
||||
|
||||
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(val network: Network, config: SignalServiceConfiguration) {
|
||||
init {
|
||||
resetSettings(config)
|
||||
}
|
||||
|
||||
fun createChatService(
|
||||
credentialsProvider: CredentialsProvider? = null
|
||||
): ChatService {
|
||||
val username = credentialsProvider?.username ?: ""
|
||||
val password = credentialsProvider?.password ?: ""
|
||||
return network.createChatService(username, password)
|
||||
}
|
||||
|
||||
fun resetSettings(config: SignalServiceConfiguration) {
|
||||
resetProxy(config.signalProxy.orNull())
|
||||
}
|
||||
|
||||
private fun resetProxy(proxy: SignalProxy?) {
|
||||
if (proxy == null) {
|
||||
network.clearProxy()
|
||||
} else {
|
||||
network.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 network.cdsiLookup(username, password, request, tokenConsumer)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
/*
|
||||
* Copyright 2024 Signal Messenger, LLC
|
||||
* SPDX-License-Identifier: AGPL-3.0-only
|
||||
*/
|
||||
@file:JvmName("LibSignalNetworkExtensions")
|
||||
|
||||
package org.whispersystems.signalservice.internal.websocket
|
||||
|
||||
import org.signal.core.util.orNull
|
||||
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.SignalServiceConfiguration
|
||||
|
||||
/**
|
||||
* Helper method to create a ChatService with optional credentials.
|
||||
*/
|
||||
fun Network.createChatService(
|
||||
credentialsProvider: CredentialsProvider? = null
|
||||
): ChatService {
|
||||
val username = credentialsProvider?.username ?: ""
|
||||
val password = credentialsProvider?.password ?: ""
|
||||
return this.createChatService(username, password)
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper method to apply settings from the SignalServiceConfiguration.
|
||||
*/
|
||||
fun Network.applyConfiguration(config: SignalServiceConfiguration) {
|
||||
val proxy = config.signalProxy.orNull()
|
||||
|
||||
if (proxy == null) {
|
||||
this.clearProxy()
|
||||
} else {
|
||||
this.setProxy(proxy.host, proxy.port)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user