From 73f0132d5dd073ae7d1b307ba0859439b41cf0ad Mon Sep 17 00:00:00 2001 From: Valere <valeref@matrix.org> Date: Tue, 10 Dec 2019 16:37:54 +0100 Subject: [PATCH] FIx / room transport was not updating state --- .../DefaultSasVerificationService.kt | 10 ++++----- .../verification/SasTransportRoomMessage.kt | 22 +++++++++++++++---- 2 files changed, 23 insertions(+), 9 deletions(-) diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/DefaultSasVerificationService.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/DefaultSasVerificationService.kt index d7e01c2fde..d54ae3a22a 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/DefaultSasVerificationService.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/DefaultSasVerificationService.kt @@ -206,7 +206,7 @@ internal class DefaultSasVerificationService @Inject constructor( Timber.e("## received invalid verification request") if (startReq.transactionID != null) { sasTransportRoomMessageFactory.createTransport(event.roomId - ?: "", cryptoService).cancelTransaction( + ?: "", cryptoService, null).cancelTransaction( startReq.transactionID ?: "", otherUserId!!, startReq.fromDevice ?: event.getSenderKey()!!, @@ -218,10 +218,10 @@ internal class DefaultSasVerificationService @Inject constructor( handleStart(otherUserId, startReq as VerificationInfoStart) { it.transport = sasTransportRoomMessageFactory.createTransport(event.roomId - ?: "", cryptoService) + ?: "", cryptoService, it) }?.let { sasTransportRoomMessageFactory.createTransport(event.roomId - ?: "", cryptoService).cancelTransaction( + ?: "", cryptoService, null).cancelTransaction( startReq.transactionID ?: "", otherUserId!!, startReq.fromDevice ?: event.getSenderKey()!!, @@ -431,7 +431,7 @@ internal class DefaultSasVerificationService @Inject constructor( val otherUserId = event.senderId!! val existing = getExistingTransaction(otherUserId, keyReq.transactionID!!) if (existing == null) { - Timber.e("## SAS Received invalid accept request") + Timber.e("## SAS Received invalid key request") return } if (existing is SASVerificationTransaction) { @@ -572,7 +572,7 @@ internal class DefaultSasVerificationService @Inject constructor( transactionId, otherUserId, otherDeviceId) - tx.transport = sasTransportRoomMessageFactory.createTransport(roomId, cryptoService) + tx.transport = sasTransportRoomMessageFactory.createTransport(roomId, cryptoService, tx) addTransaction(tx) tx.start() diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/SasTransportRoomMessage.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/SasTransportRoomMessage.kt index fc131764af..8e956fd60e 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/SasTransportRoomMessage.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/SasTransportRoomMessage.kt @@ -36,7 +36,7 @@ import javax.inject.Inject internal class SasTransportRoomMessage( private val roomId: String, private val cryptoService: CryptoService, -// private val tx: SASVerificationTransaction?, + private val tx: SASVerificationTransaction?, private val sendVerificationMessageTask: SendVerificationMessageTask, private val taskExecutor: TaskExecutor ) : SasTransport { @@ -57,6 +57,20 @@ internal class SasTransportRoomMessage( ) ) { constraints = TaskConstraints(true) + callback = object : MatrixCallback<SendResponse> { + override fun onSuccess(data: SendResponse) { + if (onDone != null) { + onDone() + } else { + tx?.state = nextState + } + } + + override fun onFailure(failure: Throwable) { + Timber.e("## SAS verification [${tx?.transactionId}] failed to send toDevice in state : ${tx?.state}") + tx?.cancel(onErrorReason) + } + } retryCount = 3 } .executeBy(taskExecutor) @@ -153,9 +167,9 @@ internal class SasTransportRoomMessageFactory @Inject constructor( private val taskExecutor: TaskExecutor) { fun createTransport(roomId: String, - cryptoService: CryptoService -// tx: SASVerificationTransaction? + cryptoService: CryptoService, + tx: SASVerificationTransaction? ): SasTransportRoomMessage { - return SasTransportRoomMessage(roomId, cryptoService, /*tx,*/ sendVerificationMessageTask, taskExecutor) + return SasTransportRoomMessage(roomId, cryptoService, tx, sendVerificationMessageTask, taskExecutor) } }