Move more networking stuff into SignalNetwork.
This commit is contained in:
parent
e247d311d8
commit
7835b1d1fc
10 changed files with 61 additions and 15 deletions
|
@ -45,7 +45,9 @@ import org.whispersystems.signalservice.api.SignalServiceMessageReceiver
|
||||||
import org.whispersystems.signalservice.api.SignalServiceMessageSender
|
import org.whispersystems.signalservice.api.SignalServiceMessageSender
|
||||||
import org.whispersystems.signalservice.api.SignalWebSocket
|
import org.whispersystems.signalservice.api.SignalWebSocket
|
||||||
import org.whispersystems.signalservice.api.archive.ArchiveApi
|
import org.whispersystems.signalservice.api.archive.ArchiveApi
|
||||||
|
import org.whispersystems.signalservice.api.attachment.AttachmentApi
|
||||||
import org.whispersystems.signalservice.api.groupsv2.GroupsV2Operations
|
import org.whispersystems.signalservice.api.groupsv2.GroupsV2Operations
|
||||||
|
import org.whispersystems.signalservice.api.keys.KeysApi
|
||||||
import org.whispersystems.signalservice.api.services.CallLinksService
|
import org.whispersystems.signalservice.api.services.CallLinksService
|
||||||
import org.whispersystems.signalservice.api.services.DonationsService
|
import org.whispersystems.signalservice.api.services.DonationsService
|
||||||
import org.whispersystems.signalservice.api.services.ProfileService
|
import org.whispersystems.signalservice.api.services.ProfileService
|
||||||
|
@ -284,6 +286,14 @@ object AppDependencies {
|
||||||
val archiveApi: ArchiveApi
|
val archiveApi: ArchiveApi
|
||||||
get() = networkModule.archiveApi
|
get() = networkModule.archiveApi
|
||||||
|
|
||||||
|
@JvmStatic
|
||||||
|
val keysApi: KeysApi
|
||||||
|
get() = networkModule.keysApi
|
||||||
|
|
||||||
|
@JvmStatic
|
||||||
|
val attachmentApi: AttachmentApi
|
||||||
|
get() = networkModule.attachmentApi
|
||||||
|
|
||||||
@JvmStatic
|
@JvmStatic
|
||||||
val okHttpClient: OkHttpClient
|
val okHttpClient: OkHttpClient
|
||||||
get() = networkModule.okHttpClient
|
get() = networkModule.okHttpClient
|
||||||
|
@ -344,5 +354,7 @@ object AppDependencies {
|
||||||
fun provideLibsignalNetwork(config: SignalServiceConfiguration): Network
|
fun provideLibsignalNetwork(config: SignalServiceConfiguration): Network
|
||||||
fun provideBillingApi(): BillingApi
|
fun provideBillingApi(): BillingApi
|
||||||
fun provideArchiveApi(pushServiceSocket: PushServiceSocket): ArchiveApi
|
fun provideArchiveApi(pushServiceSocket: PushServiceSocket): ArchiveApi
|
||||||
|
fun provideKeysApi(pushServiceSocket: PushServiceSocket): KeysApi
|
||||||
|
fun provideAttachmentApi(signalWebSocket: SignalWebSocket, pushServiceSocket: PushServiceSocket): AttachmentApi
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -83,10 +83,13 @@ import org.whispersystems.signalservice.api.SignalServiceMessageReceiver;
|
||||||
import org.whispersystems.signalservice.api.SignalServiceMessageSender;
|
import org.whispersystems.signalservice.api.SignalServiceMessageSender;
|
||||||
import org.whispersystems.signalservice.api.SignalWebSocket;
|
import org.whispersystems.signalservice.api.SignalWebSocket;
|
||||||
import org.whispersystems.signalservice.api.archive.ArchiveApi;
|
import org.whispersystems.signalservice.api.archive.ArchiveApi;
|
||||||
|
import org.whispersystems.signalservice.api.attachment.AttachmentApi;
|
||||||
import org.whispersystems.signalservice.api.groupsv2.ClientZkOperations;
|
import org.whispersystems.signalservice.api.groupsv2.ClientZkOperations;
|
||||||
import org.whispersystems.signalservice.api.groupsv2.GroupsV2Operations;
|
import org.whispersystems.signalservice.api.groupsv2.GroupsV2Operations;
|
||||||
|
import org.whispersystems.signalservice.api.keys.KeysApi;
|
||||||
import org.whispersystems.signalservice.api.push.ServiceId.ACI;
|
import org.whispersystems.signalservice.api.push.ServiceId.ACI;
|
||||||
import org.whispersystems.signalservice.api.push.ServiceId.PNI;
|
import org.whispersystems.signalservice.api.push.ServiceId.PNI;
|
||||||
|
import org.whispersystems.signalservice.api.registration.RegistrationApi;
|
||||||
import org.whispersystems.signalservice.api.services.CallLinksService;
|
import org.whispersystems.signalservice.api.services.CallLinksService;
|
||||||
import org.whispersystems.signalservice.api.services.DonationsService;
|
import org.whispersystems.signalservice.api.services.DonationsService;
|
||||||
import org.whispersystems.signalservice.api.services.ProfileService;
|
import org.whispersystems.signalservice.api.services.ProfileService;
|
||||||
|
@ -455,6 +458,16 @@ public class ApplicationDependencyProvider implements AppDependencies.Provider {
|
||||||
return new ArchiveApi(pushServiceSocket);
|
return new ArchiveApi(pushServiceSocket);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NonNull KeysApi provideKeysApi(@NonNull PushServiceSocket pushServiceSocket) {
|
||||||
|
return new KeysApi(pushServiceSocket);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NonNull AttachmentApi provideAttachmentApi(@NonNull SignalWebSocket signalWebSocket, @NonNull PushServiceSocket pushServiceSocket) {
|
||||||
|
return new AttachmentApi(signalWebSocket, pushServiceSocket);
|
||||||
|
}
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
static class DynamicCredentialsProvider implements CredentialsProvider {
|
static class DynamicCredentialsProvider implements CredentialsProvider {
|
||||||
|
|
||||||
|
|
|
@ -28,7 +28,9 @@ import org.whispersystems.signalservice.api.SignalServiceMessageReceiver
|
||||||
import org.whispersystems.signalservice.api.SignalServiceMessageSender
|
import org.whispersystems.signalservice.api.SignalServiceMessageSender
|
||||||
import org.whispersystems.signalservice.api.SignalWebSocket
|
import org.whispersystems.signalservice.api.SignalWebSocket
|
||||||
import org.whispersystems.signalservice.api.archive.ArchiveApi
|
import org.whispersystems.signalservice.api.archive.ArchiveApi
|
||||||
|
import org.whispersystems.signalservice.api.attachment.AttachmentApi
|
||||||
import org.whispersystems.signalservice.api.groupsv2.GroupsV2Operations
|
import org.whispersystems.signalservice.api.groupsv2.GroupsV2Operations
|
||||||
|
import org.whispersystems.signalservice.api.keys.KeysApi
|
||||||
import org.whispersystems.signalservice.api.push.TrustStore
|
import org.whispersystems.signalservice.api.push.TrustStore
|
||||||
import org.whispersystems.signalservice.api.services.CallLinksService
|
import org.whispersystems.signalservice.api.services.CallLinksService
|
||||||
import org.whispersystems.signalservice.api.services.DonationsService
|
import org.whispersystems.signalservice.api.services.DonationsService
|
||||||
|
@ -128,6 +130,14 @@ class NetworkDependenciesModule(
|
||||||
provider.provideArchiveApi(pushServiceSocket)
|
provider.provideArchiveApi(pushServiceSocket)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val keysApi: KeysApi by lazy {
|
||||||
|
provider.provideKeysApi(pushServiceSocket)
|
||||||
|
}
|
||||||
|
|
||||||
|
val attachmentApi: AttachmentApi by lazy {
|
||||||
|
provider.provideAttachmentApi(signalWebSocket, pushServiceSocket)
|
||||||
|
}
|
||||||
|
|
||||||
val okHttpClient: OkHttpClient by lazy {
|
val okHttpClient: OkHttpClient by lazy {
|
||||||
OkHttpClient.Builder()
|
OkHttpClient.Builder()
|
||||||
.addInterceptor(StandardUserAgentInterceptor())
|
.addInterceptor(StandardUserAgentInterceptor())
|
||||||
|
|
|
@ -19,6 +19,7 @@ import org.thoughtcrime.securesms.dependencies.AppDependencies
|
||||||
import org.thoughtcrime.securesms.jobmanager.Job
|
import org.thoughtcrime.securesms.jobmanager.Job
|
||||||
import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint
|
import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint
|
||||||
import org.thoughtcrime.securesms.jobs.protos.ArchiveAttachmentBackfillJobData
|
import org.thoughtcrime.securesms.jobs.protos.ArchiveAttachmentBackfillJobData
|
||||||
|
import org.thoughtcrime.securesms.net.SignalNetwork
|
||||||
import org.whispersystems.signalservice.api.NetworkResult
|
import org.whispersystems.signalservice.api.NetworkResult
|
||||||
import org.whispersystems.signalservice.api.archive.ArchiveMediaResponse
|
import org.whispersystems.signalservice.api.archive.ArchiveMediaResponse
|
||||||
import org.whispersystems.signalservice.api.archive.ArchiveMediaUploadFormStatusCodes
|
import org.whispersystems.signalservice.api.archive.ArchiveMediaUploadFormStatusCodes
|
||||||
|
@ -156,8 +157,7 @@ class ArchiveAttachmentBackfillJob private constructor(
|
||||||
}
|
}
|
||||||
|
|
||||||
Log.d(TAG, "Beginning upload...")
|
Log.d(TAG, "Beginning upload...")
|
||||||
val attachmentApi = AppDependencies.signalServiceMessageSender.attachmentApi
|
val uploadResult: AttachmentUploadResult = when (val result = SignalNetwork.attachments.uploadAttachmentV4(attachmentStream)) {
|
||||||
val uploadResult: AttachmentUploadResult = when (val result = attachmentApi.uploadAttachmentV4(attachmentStream)) {
|
|
||||||
is NetworkResult.Success -> result.result
|
is NetworkResult.Success -> result.result
|
||||||
is NetworkResult.ApplicationError -> throw result.throwable
|
is NetworkResult.ApplicationError -> throw result.throwable
|
||||||
is NetworkResult.NetworkError -> return Result.retry(defaultBackoff())
|
is NetworkResult.NetworkError -> return Result.retry(defaultBackoff())
|
||||||
|
|
|
@ -28,6 +28,7 @@ import org.thoughtcrime.securesms.jobmanager.persistence.JobSpec
|
||||||
import org.thoughtcrime.securesms.jobs.protos.AttachmentUploadJobData
|
import org.thoughtcrime.securesms.jobs.protos.AttachmentUploadJobData
|
||||||
import org.thoughtcrime.securesms.keyvalue.SignalStore
|
import org.thoughtcrime.securesms.keyvalue.SignalStore
|
||||||
import org.thoughtcrime.securesms.net.NotPushRegisteredException
|
import org.thoughtcrime.securesms.net.NotPushRegisteredException
|
||||||
|
import org.thoughtcrime.securesms.net.SignalNetwork
|
||||||
import org.thoughtcrime.securesms.recipients.Recipient
|
import org.thoughtcrime.securesms.recipients.Recipient
|
||||||
import org.thoughtcrime.securesms.service.AttachmentProgressService
|
import org.thoughtcrime.securesms.service.AttachmentProgressService
|
||||||
import org.thoughtcrime.securesms.util.RemoteConfig
|
import org.thoughtcrime.securesms.util.RemoteConfig
|
||||||
|
@ -138,7 +139,6 @@ class AttachmentUploadJob private constructor(
|
||||||
SignalDatabase.attachments.createKeyIvIfNecessary(attachmentId)
|
SignalDatabase.attachments.createKeyIvIfNecessary(attachmentId)
|
||||||
|
|
||||||
val messageSender = AppDependencies.signalServiceMessageSender
|
val messageSender = AppDependencies.signalServiceMessageSender
|
||||||
val attachmentApi = messageSender.attachmentApi
|
|
||||||
val databaseAttachment = SignalDatabase.attachments.getAttachment(attachmentId) ?: throw InvalidAttachmentException("Cannot find the specified attachment.")
|
val databaseAttachment = SignalDatabase.attachments.getAttachment(attachmentId) ?: throw InvalidAttachmentException("Cannot find the specified attachment.")
|
||||||
|
|
||||||
val timeSinceUpload = System.currentTimeMillis() - databaseAttachment.uploadTimestamp
|
val timeSinceUpload = System.currentTimeMillis() - databaseAttachment.uploadTimestamp
|
||||||
|
@ -156,10 +156,10 @@ class AttachmentUploadJob private constructor(
|
||||||
|
|
||||||
if (uploadSpec == null) {
|
if (uploadSpec == null) {
|
||||||
Log.d(TAG, "Need an upload spec. Fetching...")
|
Log.d(TAG, "Need an upload spec. Fetching...")
|
||||||
uploadSpec = attachmentApi
|
uploadSpec = SignalNetwork.attachments
|
||||||
.getAttachmentV4UploadForm()
|
.getAttachmentV4UploadForm()
|
||||||
.then { form ->
|
.then { form ->
|
||||||
attachmentApi.getResumableUploadSpec(
|
SignalNetwork.attachments.getResumableUploadSpec(
|
||||||
key = Base64.decode(databaseAttachment.remoteKey!!),
|
key = Base64.decode(databaseAttachment.remoteKey!!),
|
||||||
iv = databaseAttachment.remoteIv!!,
|
iv = databaseAttachment.remoteIv!!,
|
||||||
uploadForm = form
|
uploadForm = form
|
||||||
|
@ -175,7 +175,7 @@ class AttachmentUploadJob private constructor(
|
||||||
try {
|
try {
|
||||||
getAttachmentNotificationIfNeeded(databaseAttachment).use { notification ->
|
getAttachmentNotificationIfNeeded(databaseAttachment).use { notification ->
|
||||||
buildAttachmentStream(databaseAttachment, notification, uploadSpec!!).use { localAttachment ->
|
buildAttachmentStream(databaseAttachment, notification, uploadSpec!!).use { localAttachment ->
|
||||||
val uploadResult: AttachmentUploadResult = attachmentApi.uploadAttachmentV4(localAttachment).successOrThrow()
|
val uploadResult: AttachmentUploadResult = SignalNetwork.attachments.uploadAttachmentV4(localAttachment).successOrThrow()
|
||||||
SignalDatabase.attachments.finalizeAttachmentAfterUpload(databaseAttachment.attachmentId, uploadResult)
|
SignalDatabase.attachments.finalizeAttachmentAfterUpload(databaseAttachment.attachmentId, uploadResult)
|
||||||
ArchiveThumbnailUploadJob.enqueueIfNecessary(databaseAttachment.attachmentId)
|
ArchiveThumbnailUploadJob.enqueueIfNecessary(databaseAttachment.attachmentId)
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,6 +16,7 @@ import org.thoughtcrime.securesms.jobmanager.Job
|
||||||
import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint
|
import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint
|
||||||
import org.thoughtcrime.securesms.jobs.protos.PreKeysSyncJobData
|
import org.thoughtcrime.securesms.jobs.protos.PreKeysSyncJobData
|
||||||
import org.thoughtcrime.securesms.keyvalue.SignalStore
|
import org.thoughtcrime.securesms.keyvalue.SignalStore
|
||||||
|
import org.thoughtcrime.securesms.net.SignalNetwork
|
||||||
import org.thoughtcrime.securesms.util.RemoteConfig
|
import org.thoughtcrime.securesms.util.RemoteConfig
|
||||||
import org.whispersystems.signalservice.api.NetworkResult
|
import org.whispersystems.signalservice.api.NetworkResult
|
||||||
import org.whispersystems.signalservice.api.SignalServiceAccountDataStore
|
import org.whispersystems.signalservice.api.SignalServiceAccountDataStore
|
||||||
|
@ -261,7 +262,7 @@ class PreKeysSyncJob private constructor(
|
||||||
@Throws(IOException::class)
|
@Throws(IOException::class)
|
||||||
private fun checkPreKeyConsistency(serviceIdType: ServiceIdType, protocolStore: SignalServiceAccountDataStore, metadataStore: PreKeyMetadataStore): Boolean {
|
private fun checkPreKeyConsistency(serviceIdType: ServiceIdType, protocolStore: SignalServiceAccountDataStore, metadataStore: PreKeyMetadataStore): Boolean {
|
||||||
val result: NetworkResult<Unit> = try {
|
val result: NetworkResult<Unit> = try {
|
||||||
AppDependencies.signalServiceAccountManager.keysApi.checkRepeatedUseKeys(
|
SignalNetwork.keys.checkRepeatedUseKeys(
|
||||||
serviceIdType = serviceIdType,
|
serviceIdType = serviceIdType,
|
||||||
identityKey = protocolStore.identityKeyPair.publicKey,
|
identityKey = protocolStore.identityKeyPair.publicKey,
|
||||||
signedPreKeyId = metadataStore.activeSignedPreKeyId,
|
signedPreKeyId = metadataStore.activeSignedPreKeyId,
|
||||||
|
|
|
@ -7,6 +7,8 @@ package org.thoughtcrime.securesms.net
|
||||||
|
|
||||||
import org.thoughtcrime.securesms.dependencies.AppDependencies
|
import org.thoughtcrime.securesms.dependencies.AppDependencies
|
||||||
import org.whispersystems.signalservice.api.archive.ArchiveApi
|
import org.whispersystems.signalservice.api.archive.ArchiveApi
|
||||||
|
import org.whispersystems.signalservice.api.attachment.AttachmentApi
|
||||||
|
import org.whispersystems.signalservice.api.keys.KeysApi
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A convenient way to access network operations, similar to [org.thoughtcrime.securesms.database.SignalDatabase] and [org.thoughtcrime.securesms.keyvalue.SignalStore].
|
* A convenient way to access network operations, similar to [org.thoughtcrime.securesms.database.SignalDatabase] and [org.thoughtcrime.securesms.keyvalue.SignalStore].
|
||||||
|
@ -14,4 +16,10 @@ import org.whispersystems.signalservice.api.archive.ArchiveApi
|
||||||
object SignalNetwork {
|
object SignalNetwork {
|
||||||
val archive: ArchiveApi
|
val archive: ArchiveApi
|
||||||
get() = AppDependencies.archiveApi
|
get() = AppDependencies.archiveApi
|
||||||
|
|
||||||
|
val attachments: AttachmentApi
|
||||||
|
get() = AppDependencies.attachmentApi
|
||||||
|
|
||||||
|
val keys: KeysApi
|
||||||
|
get() = AppDependencies.keysApi
|
||||||
}
|
}
|
||||||
|
|
|
@ -39,7 +39,9 @@ import org.whispersystems.signalservice.api.SignalServiceMessageReceiver
|
||||||
import org.whispersystems.signalservice.api.SignalServiceMessageSender
|
import org.whispersystems.signalservice.api.SignalServiceMessageSender
|
||||||
import org.whispersystems.signalservice.api.SignalWebSocket
|
import org.whispersystems.signalservice.api.SignalWebSocket
|
||||||
import org.whispersystems.signalservice.api.archive.ArchiveApi
|
import org.whispersystems.signalservice.api.archive.ArchiveApi
|
||||||
|
import org.whispersystems.signalservice.api.attachment.AttachmentApi
|
||||||
import org.whispersystems.signalservice.api.groupsv2.GroupsV2Operations
|
import org.whispersystems.signalservice.api.groupsv2.GroupsV2Operations
|
||||||
|
import org.whispersystems.signalservice.api.keys.KeysApi
|
||||||
import org.whispersystems.signalservice.api.services.CallLinksService
|
import org.whispersystems.signalservice.api.services.CallLinksService
|
||||||
import org.whispersystems.signalservice.api.services.DonationsService
|
import org.whispersystems.signalservice.api.services.DonationsService
|
||||||
import org.whispersystems.signalservice.api.services.ProfileService
|
import org.whispersystems.signalservice.api.services.ProfileService
|
||||||
|
@ -207,4 +209,12 @@ class MockApplicationDependencyProvider : AppDependencies.Provider {
|
||||||
override fun provideArchiveApi(pushServiceSocket: PushServiceSocket): ArchiveApi {
|
override fun provideArchiveApi(pushServiceSocket: PushServiceSocket): ArchiveApi {
|
||||||
return mockk()
|
return mockk()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun provideKeysApi(pushServiceSocket: PushServiceSocket): KeysApi {
|
||||||
|
return mockk()
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun provideAttachmentApi(signalWebSocket: SignalWebSocket, pushServiceSocket: PushServiceSocket): AttachmentApi {
|
||||||
|
return mockk()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -862,10 +862,6 @@ public class SignalServiceAccountManager {
|
||||||
return new GroupsV2Api(pushServiceSocket, groupsV2Operations);
|
return new GroupsV2Api(pushServiceSocket, groupsV2Operations);
|
||||||
}
|
}
|
||||||
|
|
||||||
public KeysApi getKeysApi() {
|
|
||||||
return KeysApi.create(pushServiceSocket);
|
|
||||||
}
|
|
||||||
|
|
||||||
public RegistrationApi getRegistrationApi() {
|
public RegistrationApi getRegistrationApi() {
|
||||||
return new RegistrationApi(pushServiceSocket);
|
return new RegistrationApi(pushServiceSocket);
|
||||||
}
|
}
|
||||||
|
|
|
@ -213,10 +213,6 @@ public class SignalServiceMessageSender {
|
||||||
this.scheduler = Schedulers.from(executor, false, false);
|
this.scheduler = Schedulers.from(executor, false, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public AttachmentApi getAttachmentApi() {
|
|
||||||
return AttachmentApi.create(webSocket, socket);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Send a read receipt for a received message.
|
* Send a read receipt for a received message.
|
||||||
*
|
*
|
||||||
|
|
Loading…
Add table
Reference in a new issue