Update libsignal-net integration to match libsignal v0.62.0.
This commit is contained in:
parent
e82dfea93c
commit
bf3012bd8a
10 changed files with 46 additions and 50 deletions
|
@ -90,7 +90,8 @@ class InstrumentationApplicationDependencyProvider(val application: Application,
|
|||
signalProxy = Optional.empty(),
|
||||
zkGroupServerPublicParams = Base64.decode(BuildConfig.ZKGROUP_SERVER_PUBLIC_PARAMS),
|
||||
genericServerPublicParams = Base64.decode(BuildConfig.GENERIC_SERVER_PUBLIC_PARAMS),
|
||||
backupServerPublicParams = Base64.decode(BuildConfig.BACKUP_SERVER_PUBLIC_PARAMS)
|
||||
backupServerPublicParams = Base64.decode(BuildConfig.BACKUP_SERVER_PUBLIC_PARAMS),
|
||||
censored = false
|
||||
)
|
||||
|
||||
serviceNetworkAccessMock = mock {
|
||||
|
|
|
@ -435,8 +435,7 @@ public class ApplicationDependencyProvider implements AppDependencies.Provider {
|
|||
return new LibSignalChatConnection(
|
||||
"libsignal-unauth",
|
||||
LibSignalNetworkExtensions.createChatService(network, null, Stories.isFeatureEnabled()),
|
||||
healthMonitor,
|
||||
false);
|
||||
healthMonitor);
|
||||
} else {
|
||||
return new OkHttpWebSocketConnection("unidentified",
|
||||
signalServiceConfigurationSupplier.get(),
|
||||
|
|
|
@ -189,7 +189,8 @@ open class SignalServiceNetworkAccess(context: Context) {
|
|||
signalProxy = Optional.empty(),
|
||||
zkGroupServerPublicParams = zkGroupServerPublicParams,
|
||||
genericServerPublicParams = genericServerPublicParams,
|
||||
backupServerPublicParams = backupServerPublicParams
|
||||
backupServerPublicParams = backupServerPublicParams,
|
||||
censored = true
|
||||
)
|
||||
|
||||
private val censorshipConfiguration: Map<Int, SignalServiceConfiguration> = mapOf(
|
||||
|
@ -247,7 +248,8 @@ open class SignalServiceNetworkAccess(context: Context) {
|
|||
signalProxy = if (SignalStore.proxy.isProxyEnabled) Optional.ofNullable(SignalStore.proxy.proxy) else Optional.empty(),
|
||||
zkGroupServerPublicParams = zkGroupServerPublicParams,
|
||||
genericServerPublicParams = genericServerPublicParams,
|
||||
backupServerPublicParams = backupServerPublicParams
|
||||
backupServerPublicParams = backupServerPublicParams,
|
||||
censored = false
|
||||
)
|
||||
|
||||
open fun getConfiguration(): SignalServiceConfiguration {
|
||||
|
@ -316,7 +318,8 @@ open class SignalServiceNetworkAccess(context: Context) {
|
|||
signalProxy = Optional.empty(),
|
||||
zkGroupServerPublicParams = zkGroupServerPublicParams,
|
||||
genericServerPublicParams = genericServerPublicParams,
|
||||
backupServerPublicParams = backupServerPublicParams
|
||||
backupServerPublicParams = backupServerPublicParams,
|
||||
censored = true
|
||||
)
|
||||
}
|
||||
|
||||
|
|
|
@ -15,7 +15,7 @@ dependencyResolutionManagement {
|
|||
version("exoplayer", "2.19.0")
|
||||
version("glide", "4.15.1")
|
||||
version("kotlin", "1.9.20")
|
||||
version("libsignal-client", "0.60.1")
|
||||
version("libsignal-client", "0.62.0")
|
||||
version("mp4parser", "1.9.39")
|
||||
version("android-gradle-plugin", "8.4.0")
|
||||
version("accompanist", "0.28.0")
|
||||
|
|
|
@ -8971,20 +8971,20 @@ https://docs.gradle.org/current/userguide/dependency_verification.html
|
|||
<sha256 value="cf341613dbc8aa7107f9971bfd25c51fc7ea8e789890d643b0015b8ce33c1558" origin="Generated by Gradle"/>
|
||||
</artifact>
|
||||
</component>
|
||||
<component group="org.signal" name="libsignal-android" version="0.60.1">
|
||||
<artifact name="libsignal-android-0.60.1.aar">
|
||||
<sha256 value="883fe0df856f88889024dc83a14c0ccda8ddb181b4adcfbb087e10eeb1e9a25b" origin="Generated by Gradle"/>
|
||||
<component group="org.signal" name="libsignal-android" version="0.62.0">
|
||||
<artifact name="libsignal-android-0.62.0.aar">
|
||||
<sha256 value="5bfd9f822274a2dc5e79ef7799acc415cda6f9672233b450be5666797e4d8e35" origin="Generated by Gradle"/>
|
||||
</artifact>
|
||||
<artifact name="libsignal-android-0.60.1.module">
|
||||
<sha256 value="20589d089af667c5fddba272f0bb391413b0b41b157cebb92dfafc15092def02" origin="Generated by Gradle"/>
|
||||
<artifact name="libsignal-android-0.62.0.module">
|
||||
<sha256 value="cf08e06a2f6ea745cb486757a596d4a7d6dd01d6e5dcd2597d6a38d090da9730" origin="Generated by Gradle"/>
|
||||
</artifact>
|
||||
</component>
|
||||
<component group="org.signal" name="libsignal-client" version="0.60.1">
|
||||
<artifact name="libsignal-client-0.60.1.jar">
|
||||
<sha256 value="0d2fe21579b89bd39466df3cf3b4ecce828dcda7f99ddb3d9bbef0a8a0b01173" origin="Generated by Gradle"/>
|
||||
<component group="org.signal" name="libsignal-client" version="0.62.0">
|
||||
<artifact name="libsignal-client-0.62.0.jar">
|
||||
<sha256 value="b4397fe8695698a626e818b2cbfced78f33e27f7acd7fb540684f32d37495c86" origin="Generated by Gradle"/>
|
||||
</artifact>
|
||||
<artifact name="libsignal-client-0.60.1.module">
|
||||
<sha256 value="ac7b7726438d72e962a0329d481c0d1c5ac6ee73589a1b51b298bbb4eced22bd" origin="Generated by Gradle"/>
|
||||
<artifact name="libsignal-client-0.62.0.module">
|
||||
<sha256 value="c2eb94fc6c54a63257a888796d7abd05cd1b04fd22440462aabfb2f4834cdcd2" origin="Generated by Gradle"/>
|
||||
</artifact>
|
||||
</component>
|
||||
<component group="org.signal" name="ringrtc-android" version="2.48.4">
|
||||
|
|
|
@ -19,7 +19,8 @@ data class SignalServiceConfiguration(
|
|||
val signalProxy: Optional<SignalProxy>,
|
||||
val zkGroupServerPublicParams: ByteArray,
|
||||
val genericServerPublicParams: ByteArray,
|
||||
val backupServerPublicParams: ByteArray
|
||||
val backupServerPublicParams: ByteArray,
|
||||
val censored: Boolean
|
||||
) {
|
||||
|
||||
/** Convenience operator overload for combining the URL lists. Does not add the other fields together, as those wouldn't make sense. */
|
||||
|
|
|
@ -11,7 +11,9 @@ import io.reactivex.rxjava3.schedulers.Schedulers
|
|||
import io.reactivex.rxjava3.subjects.BehaviorSubject
|
||||
import io.reactivex.rxjava3.subjects.SingleSubject
|
||||
import org.signal.core.util.logging.Log
|
||||
import org.signal.libsignal.net.AuthenticatedChatService
|
||||
import org.signal.libsignal.net.ChatService
|
||||
import org.signal.libsignal.net.UnauthenticatedChatService
|
||||
import org.whispersystems.signalservice.api.websocket.HealthMonitor
|
||||
import org.whispersystems.signalservice.api.websocket.WebSocketConnectionState
|
||||
import org.whispersystems.signalservice.internal.util.whenComplete
|
||||
|
@ -37,8 +39,7 @@ import org.signal.libsignal.net.ChatService.Response as LibSignalResponse
|
|||
class LibSignalChatConnection(
|
||||
name: String,
|
||||
private val chatService: ChatService,
|
||||
private val healthMonitor: HealthMonitor,
|
||||
val isAuthenticated: Boolean
|
||||
private val healthMonitor: HealthMonitor
|
||||
) : WebSocketConnection {
|
||||
|
||||
companion object {
|
||||
|
@ -86,12 +87,7 @@ class LibSignalChatConnection(
|
|||
override fun connect(): Observable<WebSocketConnectionState> {
|
||||
Log.i(TAG, "$name Connecting...")
|
||||
state.onNext(WebSocketConnectionState.CONNECTING)
|
||||
val connect = if (isAuthenticated) {
|
||||
chatService::connectAuthenticated
|
||||
} else {
|
||||
chatService::connectUnauthenticated
|
||||
}
|
||||
connect()
|
||||
chatService.connect()
|
||||
.whenComplete(
|
||||
onSuccess = { debugInfo ->
|
||||
Log.i(TAG, "$name Connected")
|
||||
|
@ -128,12 +124,7 @@ class LibSignalChatConnection(
|
|||
override fun sendRequest(request: WebSocketRequestMessage): Single<WebsocketResponse> {
|
||||
val single = SingleSubject.create<WebsocketResponse>()
|
||||
val internalRequest = request.toLibSignalRequest()
|
||||
val send = if (isAuthenticated) {
|
||||
throw NotImplementedError("Authenticated socket is not yet supported")
|
||||
} else {
|
||||
chatService::unauthenticatedSend
|
||||
}
|
||||
send(internalRequest)
|
||||
chatService.send(internalRequest)
|
||||
.whenComplete(
|
||||
onSuccess = { response ->
|
||||
when (response!!.status) {
|
||||
|
@ -143,7 +134,7 @@ class LibSignalChatConnection(
|
|||
}
|
||||
// Here success means "we received the response" even if it is reporting an error.
|
||||
// This is consistent with the behavior of the OkHttpWebSocketConnection.
|
||||
single.onSuccess(response.toWebsocketResponse(isUnidentified = !isAuthenticated))
|
||||
single.onSuccess(response.toWebsocketResponse(isUnidentified = (chatService is UnauthenticatedChatService)))
|
||||
},
|
||||
onFailure = { throwable ->
|
||||
Log.i(TAG, "$name sendRequest failed", throwable)
|
||||
|
@ -155,12 +146,7 @@ class LibSignalChatConnection(
|
|||
|
||||
override fun sendKeepAlive() {
|
||||
Log.i(TAG, "$name Sending keep alive...")
|
||||
val send = if (isAuthenticated) {
|
||||
throw NotImplementedError("Authenticated socket is not yet supported")
|
||||
} else {
|
||||
chatService::unauthenticatedSendAndDebug
|
||||
}
|
||||
send(KEEP_ALIVE_REQUEST)
|
||||
chatService.sendAndDebug(KEEP_ALIVE_REQUEST)
|
||||
.whenComplete(
|
||||
onSuccess = { debugResponse ->
|
||||
Log.i(TAG, "$name Keep alive - success")
|
||||
|
@ -174,7 +160,7 @@ class LibSignalChatConnection(
|
|||
}
|
||||
|
||||
in 400..599 -> {
|
||||
healthMonitor.onMessageError(debugResponse.response.status, isAuthenticated)
|
||||
healthMonitor.onMessageError(debugResponse.response.status, (chatService is AuthenticatedChatService))
|
||||
}
|
||||
|
||||
else -> {
|
||||
|
|
|
@ -21,7 +21,11 @@ fun Network.createChatService(
|
|||
): ChatService {
|
||||
val username = credentialsProvider?.username ?: ""
|
||||
val password = credentialsProvider?.password ?: ""
|
||||
return this.createChatService(username, password, receiveStories)
|
||||
return if (username.isEmpty() && password.isEmpty()) {
|
||||
this.createUnauthChatService(null)
|
||||
} else {
|
||||
this.createAuthChatService(username, password, receiveStories, null)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -35,4 +39,6 @@ fun Network.applyConfiguration(config: SignalServiceConfiguration) {
|
|||
} else {
|
||||
this.setProxy(proxy.host, proxy.port)
|
||||
}
|
||||
|
||||
this.setCensorshipCircumventionEnabled(config.censored)
|
||||
}
|
||||
|
|
|
@ -70,7 +70,7 @@ class ShadowingWebSocketConnection(
|
|||
|
||||
override fun connect(): Observable<WebSocketConnectionState> {
|
||||
executor.submit {
|
||||
chatService.connectUnauthenticated().whenComplete(
|
||||
chatService.connect().whenComplete(
|
||||
onSuccess = {
|
||||
canShadow.set(true)
|
||||
Log.i(TAG, "Shadow socket connected.")
|
||||
|
@ -140,7 +140,7 @@ class ShadowingWebSocketConnection(
|
|||
ByteArray(0),
|
||||
KEEP_ALIVE_TIMEOUT.inWholeMilliseconds.toInt()
|
||||
)
|
||||
chatService.unauthenticatedSendAndDebug(request)
|
||||
chatService.sendAndDebug(request)
|
||||
.whenComplete(
|
||||
onSuccess = {
|
||||
stats.requestsCompared.incrementAndGet()
|
||||
|
|
|
@ -25,7 +25,7 @@ class LibSignalChatConnectionTest {
|
|||
private val executor: ExecutorService = Executors.newSingleThreadExecutor()
|
||||
private val healthMonitor = mockk<HealthMonitor>()
|
||||
private val chatService = mockk<ChatService>()
|
||||
private val connection = LibSignalChatConnection("test", chatService, healthMonitor, isAuthenticated = false)
|
||||
private val connection = LibSignalChatConnection("test", chatService, healthMonitor)
|
||||
|
||||
@Before
|
||||
fun before() {
|
||||
|
@ -38,7 +38,7 @@ class LibSignalChatConnectionTest {
|
|||
fun orderOfStatesOnSuccessfulConnect() {
|
||||
val latch = CountDownLatch(1)
|
||||
|
||||
every { chatService.connectUnauthenticated() } answers {
|
||||
every { chatService.connect() } answers {
|
||||
delay {
|
||||
it.complete(DEBUG_INFO)
|
||||
latch.countDown()
|
||||
|
@ -65,7 +65,7 @@ class LibSignalChatConnectionTest {
|
|||
val connectionException = RuntimeException("connect failed")
|
||||
val latch = CountDownLatch(1)
|
||||
|
||||
every { chatService.connectUnauthenticated() } answers {
|
||||
every { chatService.connect() } answers {
|
||||
delay {
|
||||
it.completeExceptionally(connectionException)
|
||||
}
|
||||
|
@ -91,7 +91,7 @@ class LibSignalChatConnectionTest {
|
|||
val connectLatch = CountDownLatch(1)
|
||||
val disconnectLatch = CountDownLatch(1)
|
||||
|
||||
every { chatService.connectUnauthenticated() } answers {
|
||||
every { chatService.connect() } answers {
|
||||
delay {
|
||||
it.complete(DEBUG_INFO)
|
||||
connectLatch.countDown()
|
||||
|
@ -155,7 +155,7 @@ class LibSignalChatConnectionTest {
|
|||
fun keepAliveSuccess() {
|
||||
val latch = CountDownLatch(1)
|
||||
|
||||
every { chatService.unauthenticatedSendAndDebug(any()) } answers {
|
||||
every { chatService.sendAndDebug(any()) } answers {
|
||||
delay {
|
||||
it.complete(make_debug_response(RESPONSE_SUCCESS))
|
||||
latch.countDown()
|
||||
|
@ -179,7 +179,7 @@ class LibSignalChatConnectionTest {
|
|||
for (response in listOf(RESPONSE_ERROR, RESPONSE_SERVER_ERROR)) {
|
||||
val latch = CountDownLatch(1)
|
||||
|
||||
every { chatService.unauthenticatedSendAndDebug(any()) } answers {
|
||||
every { chatService.sendAndDebug(any()) } answers {
|
||||
delay {
|
||||
it.complete(make_debug_response(response))
|
||||
}
|
||||
|
@ -203,7 +203,7 @@ class LibSignalChatConnectionTest {
|
|||
val latch = CountDownLatch(1)
|
||||
|
||||
every {
|
||||
chatService.unauthenticatedSendAndDebug(any())
|
||||
chatService.sendAndDebug(any())
|
||||
} answers {
|
||||
delay {
|
||||
it.completeExceptionally(connectionFailure)
|
||||
|
|
Loading…
Add table
Reference in a new issue