Introduce SignalNetwork, share PushServiceSocket.

This commit is contained in:
Greyson Parrelli
2024-09-03 15:20:31 -04:00
committed by Cody Henthorne
parent 4e35906680
commit 00d20a1917
18 changed files with 190 additions and 268 deletions

View File

@@ -46,12 +46,14 @@ import org.whispersystems.signalservice.api.SignalServiceDataStore
import org.whispersystems.signalservice.api.SignalServiceMessageReceiver
import org.whispersystems.signalservice.api.SignalServiceMessageSender
import org.whispersystems.signalservice.api.SignalWebSocket
import org.whispersystems.signalservice.api.archive.ArchiveApi
import org.whispersystems.signalservice.api.groupsv2.GroupsV2Operations
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.api.websocket.WebSocketConnectionState
import org.whispersystems.signalservice.internal.configuration.SignalServiceConfiguration
import org.whispersystems.signalservice.internal.push.PushServiceSocket
import java.util.function.Supplier
/**
@@ -290,6 +292,10 @@ object AppDependencies {
val donationsService: DonationsService
get() = networkModule.donationsService
@JvmStatic
val archiveApi: ArchiveApi
get() = networkModule.archiveApi
@JvmStatic
val okHttpClient: OkHttpClient
get() = networkModule.okHttpClient
@@ -310,10 +316,11 @@ object AppDependencies {
}
interface Provider {
fun providePushServiceSocket(signalServiceConfiguration: SignalServiceConfiguration, groupsV2Operations: GroupsV2Operations): PushServiceSocket
fun provideGroupsV2Operations(signalServiceConfiguration: SignalServiceConfiguration): GroupsV2Operations
fun provideSignalServiceAccountManager(signalServiceConfiguration: SignalServiceConfiguration, groupsV2Operations: GroupsV2Operations): SignalServiceAccountManager
fun provideSignalServiceMessageSender(signalWebSocket: SignalWebSocket, protocolStore: SignalServiceDataStore, signalServiceConfiguration: SignalServiceConfiguration): SignalServiceMessageSender
fun provideSignalServiceMessageReceiver(signalServiceConfiguration: SignalServiceConfiguration): SignalServiceMessageReceiver
fun provideSignalServiceAccountManager(pushServiceSocket: PushServiceSocket, groupsV2Operations: GroupsV2Operations): SignalServiceAccountManager
fun provideSignalServiceMessageSender(signalWebSocket: SignalWebSocket, protocolStore: SignalServiceDataStore, pushServiceSocket: PushServiceSocket): SignalServiceMessageSender
fun provideSignalServiceMessageReceiver(pushServiceSocket: PushServiceSocket): SignalServiceMessageReceiver
fun provideSignalServiceNetworkAccess(): SignalServiceNetworkAccess
fun provideRecipientCache(): LiveRecipientCache
fun provideJobManager(): JobManager
@@ -341,13 +348,14 @@ object AppDependencies {
fun provideGiphyMp4Cache(): GiphyMp4Cache
fun provideExoPlayerPool(): SimpleExoPlayerPool
fun provideAndroidCallAudioManager(): AudioManagerCompat
fun provideDonationsService(signalServiceConfiguration: SignalServiceConfiguration, groupsV2Operations: GroupsV2Operations): DonationsService
fun provideCallLinksService(signalServiceConfiguration: SignalServiceConfiguration, groupsV2Operations: GroupsV2Operations): CallLinksService
fun provideDonationsService(pushServiceSocket: PushServiceSocket): DonationsService
fun provideCallLinksService(pushServiceSocket: PushServiceSocket): CallLinksService
fun provideProfileService(profileOperations: ClientZkProfileOperations, signalServiceMessageReceiver: SignalServiceMessageReceiver, signalWebSocket: SignalWebSocket): ProfileService
fun provideDeadlockDetector(): DeadlockDetector
fun provideClientZkReceiptOperations(signalServiceConfiguration: SignalServiceConfiguration): ClientZkReceiptOperations
fun provideScheduledMessageManager(): ScheduledMessageManager
fun provideLibsignalNetwork(config: SignalServiceConfiguration): Network
fun provideBillingApi(): BillingApi
fun provideArchiveApi(pushServiceSocket: PushServiceSocket): ArchiveApi
}
}

View File

@@ -82,6 +82,7 @@ import org.whispersystems.signalservice.api.SignalServiceDataStore;
import org.whispersystems.signalservice.api.SignalServiceMessageReceiver;
import org.whispersystems.signalservice.api.SignalServiceMessageSender;
import org.whispersystems.signalservice.api.SignalWebSocket;
import org.whispersystems.signalservice.api.archive.ArchiveApi;
import org.whispersystems.signalservice.api.groupsv2.ClientZkOperations;
import org.whispersystems.signalservice.api.groupsv2.GroupsV2Operations;
import org.whispersystems.signalservice.api.push.ServiceId.ACI;
@@ -94,6 +95,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.push.PushServiceSocket;
import org.whispersystems.signalservice.internal.websocket.LibSignalChatConnection;
import org.whispersystems.signalservice.internal.websocket.LibSignalNetworkExtensions;
import org.whispersystems.signalservice.internal.websocket.OkHttpWebSocketConnection;
@@ -120,42 +122,39 @@ public class ApplicationDependencyProvider implements AppDependencies.Provider {
return ClientZkOperations.create(signalServiceConfiguration);
}
@Override
public @NonNull PushServiceSocket providePushServiceSocket(@NonNull SignalServiceConfiguration signalServiceConfiguration, @NonNull GroupsV2Operations groupsV2Operations) {
return new PushServiceSocket(signalServiceConfiguration,
new DynamicCredentialsProvider(),
BuildConfig.SIGNAL_AGENT,
groupsV2Operations.getProfileOperations(),
RemoteConfig.okHttpAutomaticRetry());
}
@Override
public @NonNull GroupsV2Operations provideGroupsV2Operations(@NonNull SignalServiceConfiguration signalServiceConfiguration) {
return new GroupsV2Operations(provideClientZkOperations(signalServiceConfiguration), RemoteConfig.groupLimits().getHardLimit());
}
@Override
public @NonNull SignalServiceAccountManager provideSignalServiceAccountManager(@NonNull SignalServiceConfiguration signalServiceConfiguration, @NonNull GroupsV2Operations groupsV2Operations) {
return new SignalServiceAccountManager(signalServiceConfiguration,
new DynamicCredentialsProvider(),
BuildConfig.SIGNAL_AGENT,
groupsV2Operations,
RemoteConfig.okHttpAutomaticRetry());
public @NonNull SignalServiceAccountManager provideSignalServiceAccountManager(@NonNull PushServiceSocket pushServiceSocket, @NonNull GroupsV2Operations groupsV2Operations) {
return new SignalServiceAccountManager(pushServiceSocket, groupsV2Operations);
}
@Override
public @NonNull SignalServiceMessageSender provideSignalServiceMessageSender(@NonNull SignalWebSocket signalWebSocket, @NonNull SignalServiceDataStore protocolStore, @NonNull SignalServiceConfiguration signalServiceConfiguration) {
return new SignalServiceMessageSender(signalServiceConfiguration,
new DynamicCredentialsProvider(),
public @NonNull SignalServiceMessageSender provideSignalServiceMessageSender(@NonNull SignalWebSocket signalWebSocket, @NonNull SignalServiceDataStore protocolStore, @NonNull PushServiceSocket pushServiceSocket) {
return new SignalServiceMessageSender(pushServiceSocket,
protocolStore,
ReentrantSessionLock.INSTANCE,
BuildConfig.SIGNAL_AGENT,
signalWebSocket,
Optional.of(new SecurityEventListener(context)),
provideGroupsV2Operations(signalServiceConfiguration).getProfileOperations(),
SignalExecutors.newCachedBoundedExecutor("signal-messages", ThreadUtil.PRIORITY_IMPORTANT_BACKGROUND_THREAD, 1, 16, 30),
ByteUnit.KILOBYTES.toBytes(256),
RemoteConfig.okHttpAutomaticRetry());
ByteUnit.KILOBYTES.toBytes(256));
}
@Override
public @NonNull SignalServiceMessageReceiver provideSignalServiceMessageReceiver(@NonNull SignalServiceConfiguration signalServiceConfiguration) {
return new SignalServiceMessageReceiver(signalServiceConfiguration,
new DynamicCredentialsProvider(),
BuildConfig.SIGNAL_AGENT,
provideGroupsV2Operations(signalServiceConfiguration).getProfileOperations(),
RemoteConfig.okHttpAutomaticRetry());
public @NonNull SignalServiceMessageReceiver provideSignalServiceMessageReceiver(@NonNull PushServiceSocket pushServiceSocket) {
return new SignalServiceMessageReceiver(pushServiceSocket);
}
@Override
@@ -371,21 +370,13 @@ public class ApplicationDependencyProvider implements AppDependencies.Provider {
}
@Override
public @NonNull DonationsService provideDonationsService(@NonNull SignalServiceConfiguration signalServiceConfiguration, @NonNull GroupsV2Operations groupsV2Operations) {
return new DonationsService(signalServiceConfiguration,
new DynamicCredentialsProvider(),
BuildConfig.SIGNAL_AGENT,
groupsV2Operations,
RemoteConfig.okHttpAutomaticRetry());
public @NonNull DonationsService provideDonationsService(@NonNull PushServiceSocket pushServiceSocket) {
return new DonationsService(pushServiceSocket);
}
@Override
public @NonNull CallLinksService provideCallLinksService(@NonNull SignalServiceConfiguration signalServiceConfiguration, @NonNull GroupsV2Operations groupsV2Operations) {
return new CallLinksService(signalServiceConfiguration,
new DynamicCredentialsProvider(),
BuildConfig.SIGNAL_AGENT,
groupsV2Operations,
RemoteConfig.okHttpAutomaticRetry());
public @NonNull CallLinksService provideCallLinksService(@NonNull PushServiceSocket pushServiceSocket) {
return new CallLinksService(pushServiceSocket);
}
@Override
@@ -464,6 +455,11 @@ public class ApplicationDependencyProvider implements AppDependencies.Provider {
return BillingFactory.create(context, RemoteConfig.messageBackups());
}
@Override
public @NonNull ArchiveApi provideArchiveApi(@NonNull PushServiceSocket pushServiceSocket) {
return new ArchiveApi(pushServiceSocket);
}
@VisibleForTesting
static class DynamicCredentialsProvider implements CredentialsProvider {

View File

@@ -27,6 +27,7 @@ import org.whispersystems.signalservice.api.SignalServiceAccountManager
import org.whispersystems.signalservice.api.SignalServiceMessageReceiver
import org.whispersystems.signalservice.api.SignalServiceMessageSender
import org.whispersystems.signalservice.api.SignalWebSocket
import org.whispersystems.signalservice.api.archive.ArchiveApi
import org.whispersystems.signalservice.api.groupsv2.GroupsV2Operations
import org.whispersystems.signalservice.api.push.TrustStore
import org.whispersystems.signalservice.api.services.CallLinksService
@@ -34,6 +35,7 @@ import org.whispersystems.signalservice.api.services.DonationsService
import org.whispersystems.signalservice.api.services.ProfileService
import org.whispersystems.signalservice.api.util.Tls12SocketFactory
import org.whispersystems.signalservice.api.websocket.WebSocketConnectionState
import org.whispersystems.signalservice.internal.push.PushServiceSocket
import org.whispersystems.signalservice.internal.util.BlacklistingTrustManager
import org.whispersystems.signalservice.internal.util.Util
import java.security.KeyManagementException
@@ -63,7 +65,7 @@ class NetworkDependenciesModule(
val protocolStore: SignalServiceDataStoreImpl by _protocolStore
private val _signalServiceMessageSender = resettableLazy {
provider.provideSignalServiceMessageSender(signalWebSocket, protocolStore, signalServiceNetworkAccess.getConfiguration())
provider.provideSignalServiceMessageSender(signalWebSocket, protocolStore, pushServiceSocket)
}
val signalServiceMessageSender: SignalServiceMessageSender by _signalServiceMessageSender
@@ -71,8 +73,12 @@ class NetworkDependenciesModule(
provider.provideIncomingMessageObserver()
}
val pushServiceSocket: PushServiceSocket by lazy {
provider.providePushServiceSocket(signalServiceNetworkAccess.getConfiguration(), groupsV2Operations)
}
val signalServiceAccountManager: SignalServiceAccountManager by lazy {
provider.provideSignalServiceAccountManager(signalServiceNetworkAccess.getConfiguration(), groupsV2Operations)
provider.provideSignalServiceAccountManager(pushServiceSocket, groupsV2Operations)
}
val libsignalNetwork: Network by lazy {
@@ -99,7 +105,7 @@ class NetworkDependenciesModule(
}
val signalServiceMessageReceiver: SignalServiceMessageReceiver by lazy {
provider.provideSignalServiceMessageReceiver(signalServiceNetworkAccess.getConfiguration())
provider.provideSignalServiceMessageReceiver(pushServiceSocket)
}
val payments: Payments by lazy {
@@ -107,7 +113,7 @@ class NetworkDependenciesModule(
}
val callLinksService: CallLinksService by lazy {
provider.provideCallLinksService(signalServiceNetworkAccess.getConfiguration(), groupsV2Operations)
provider.provideCallLinksService(pushServiceSocket)
}
val profileService: ProfileService by lazy {
@@ -115,7 +121,11 @@ class NetworkDependenciesModule(
}
val donationsService: DonationsService by lazy {
provider.provideDonationsService(signalServiceNetworkAccess.getConfiguration(), groupsV2Operations)
provider.provideDonationsService(pushServiceSocket)
}
val archiveApi: ArchiveApi by lazy {
provider.provideArchiveApi(pushServiceSocket)
}
val okHttpClient: OkHttpClient by lazy {