Skip to content

Commit fafb80f

Browse files
committed
Improve crypto log to debug UISI
1 parent 0c4dee8 commit fafb80f

File tree

9 files changed

+150
-101
lines changed

9 files changed

+150
-101
lines changed

matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/logger/LoggerTag.kt

+1
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ open class LoggerTag(_value: String, parentTag: LoggerTag? = null) {
2626

2727
object SYNC : LoggerTag("SYNC")
2828
object VOIP : LoggerTag("VOIP")
29+
object CRYPTO : LoggerTag("CRYPTO")
2930

3031
val value: String = if (parentTag == null) {
3132
_value

matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/DefaultCryptoService.kt

+36-32
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ import org.matrix.android.sdk.api.crypto.MXCryptoConfig
3636
import org.matrix.android.sdk.api.extensions.tryOrNull
3737
import org.matrix.android.sdk.api.failure.Failure
3838
import org.matrix.android.sdk.api.listeners.ProgressListener
39+
import org.matrix.android.sdk.api.logger.LoggerTag
3940
import org.matrix.android.sdk.api.session.crypto.CryptoService
4041
import org.matrix.android.sdk.api.session.crypto.MXCryptoError
4142
import org.matrix.android.sdk.api.session.crypto.crosssigning.KEYBACKUP_SECRET_SSSS_NAME
@@ -110,6 +111,9 @@ import kotlin.math.max
110111
* CryptoService maintains all necessary keys and their sharing with other devices required for the crypto.
111112
* Specially, it tracks all room membership changes events in order to do keys updates.
112113
*/
114+
115+
private val loggerTag = LoggerTag("DefaultCryptoService", LoggerTag.CRYPTO)
116+
113117
@SessionScope
114118
internal class DefaultCryptoService @Inject constructor(
115119
// Olm Manager
@@ -346,7 +350,7 @@ internal class DefaultCryptoService @Inject constructor(
346350
deviceListManager.startTrackingDeviceList(listOf(userId))
347351
deviceListManager.refreshOutdatedDeviceLists()
348352
} catch (failure: Throwable) {
349-
Timber.e(failure, "## CRYPTO onSyncWillProcess ")
353+
Timber.tag(loggerTag.value).e(failure, "onSyncWillProcess ")
350354
}
351355
}
352356
}
@@ -379,7 +383,7 @@ internal class DefaultCryptoService @Inject constructor(
379383
{
380384
isStarting.set(false)
381385
isStarted.set(false)
382-
Timber.e(it, "Start failed")
386+
Timber.tag(loggerTag.value).e(it, "Start failed")
383387
}
384388
)
385389
}
@@ -551,14 +555,14 @@ internal class DefaultCryptoService @Inject constructor(
551555
val existingAlgorithm = cryptoStore.getRoomAlgorithm(roomId)
552556

553557
if (!existingAlgorithm.isNullOrEmpty() && existingAlgorithm != algorithm) {
554-
Timber.e("## CRYPTO | setEncryptionInRoom() : Ignoring m.room.encryption event which requests a change of config in $roomId")
558+
Timber.tag(loggerTag.value).e("setEncryptionInRoom() : Ignoring m.room.encryption event which requests a change of config in $roomId")
555559
return false
556560
}
557561

558562
val encryptingClass = MXCryptoAlgorithms.hasEncryptorClassForAlgorithm(algorithm)
559563

560564
if (!encryptingClass) {
561-
Timber.e("## CRYPTO | setEncryptionInRoom() : Unable to encrypt room $roomId with $algorithm")
565+
Timber.tag(loggerTag.value).e("setEncryptionInRoom() : Unable to encrypt room $roomId with $algorithm")
562566
return false
563567
}
564568

@@ -577,7 +581,7 @@ internal class DefaultCryptoService @Inject constructor(
577581
// e2e rooms with them, so there is room for optimisation here, but for now
578582
// we just invalidate everyone in the room.
579583
if (null == existingAlgorithm) {
580-
Timber.v("Enabling encryption in $roomId for the first time; invalidating device lists for all users therein")
584+
Timber.tag(loggerTag.value).d("Enabling encryption in $roomId for the first time; invalidating device lists for all users therein")
581585

582586
val userIds = ArrayList(membersId)
583587

@@ -655,17 +659,17 @@ internal class DefaultCryptoService @Inject constructor(
655659
val safeAlgorithm = alg
656660
if (safeAlgorithm != null) {
657661
val t0 = System.currentTimeMillis()
658-
Timber.v("## CRYPTO | encryptEventContent() starts")
662+
Timber.tag(loggerTag.value).v("encryptEventContent() starts")
659663
runCatching {
660664
val content = safeAlgorithm.encryptEventContent(eventContent, eventType, userIds)
661-
Timber.v("## CRYPTO | encryptEventContent() : succeeds after ${System.currentTimeMillis() - t0} ms")
665+
Timber.tag(loggerTag.value).v("## CRYPTO | encryptEventContent() : succeeds after ${System.currentTimeMillis() - t0} ms")
662666
MXEncryptEventContentResult(content, EventType.ENCRYPTED)
663667
}.foldToCallback(callback)
664668
} else {
665669
val algorithm = getEncryptionAlgorithm(roomId)
666670
val reason = String.format(MXCryptoError.UNABLE_TO_ENCRYPT_REASON,
667671
algorithm ?: MXCryptoError.NO_MORE_ALGORITHM_REASON)
668-
Timber.e("## CRYPTO | encryptEventContent() : $reason")
672+
Timber.tag(loggerTag.value).e("encryptEventContent() : failed $reason")
669673
callback.onFailure(Failure.CryptoError(MXCryptoError.Base(MXCryptoError.ErrorType.UNABLE_TO_ENCRYPT, reason)))
670674
}
671675
}
@@ -677,7 +681,7 @@ internal class DefaultCryptoService @Inject constructor(
677681
if (roomEncryptor is IMXGroupEncryption) {
678682
roomEncryptor.discardSessionKey()
679683
} else {
680-
Timber.e("## CRYPTO | discardOutboundSession() for:$roomId: Unable to handle IMXGroupEncryption")
684+
Timber.tag(loggerTag.value).e("discardOutboundSession() for:$roomId: Unable to handle IMXGroupEncryption")
681685
}
682686
}
683687
}
@@ -768,44 +772,44 @@ internal class DefaultCryptoService @Inject constructor(
768772
*/
769773
private fun onRoomKeyEvent(event: Event) {
770774
val roomKeyContent = event.getClearContent().toModel<RoomKeyContent>() ?: return
771-
Timber.i("## CRYPTO | onRoomKeyEvent() from: ${event.senderId} type<${event.getClearType()}> , sessionId<${roomKeyContent.sessionId}>")
775+
Timber.tag(loggerTag.value).i("onRoomKeyEvent() from: ${event.senderId} type<${event.getClearType()}> , sessionId<${roomKeyContent.sessionId}>")
772776
if (roomKeyContent.roomId.isNullOrEmpty() || roomKeyContent.algorithm.isNullOrEmpty()) {
773-
Timber.e("## CRYPTO | onRoomKeyEvent() : missing fields")
777+
Timber.tag(loggerTag.value).e("onRoomKeyEvent() : missing fields")
774778
return
775779
}
776780
val alg = roomDecryptorProvider.getOrCreateRoomDecryptor(roomKeyContent.roomId, roomKeyContent.algorithm)
777781
if (alg == null) {
778-
Timber.e("## CRYPTO | GOSSIP onRoomKeyEvent() : Unable to handle keys for ${roomKeyContent.algorithm}")
782+
Timber.tag(loggerTag.value).e("GOSSIP onRoomKeyEvent() : Unable to handle keys for ${roomKeyContent.algorithm}")
779783
return
780784
}
781785
alg.onRoomKeyEvent(event, keysBackupService)
782786
}
783787

784788
private fun onKeyWithHeldReceived(event: Event) {
785789
val withHeldContent = event.getClearContent().toModel<RoomKeyWithHeldContent>() ?: return Unit.also {
786-
Timber.i("## CRYPTO | Malformed onKeyWithHeldReceived() : missing fields")
790+
Timber.tag(loggerTag.value).i("Malformed onKeyWithHeldReceived() : missing fields")
787791
}
788-
Timber.i("## CRYPTO | onKeyWithHeldReceived() received from:${event.senderId}, content <$withHeldContent>")
792+
Timber.tag(loggerTag.value).i("onKeyWithHeldReceived() received from:${event.senderId}, content <$withHeldContent>")
789793
val alg = roomDecryptorProvider.getOrCreateRoomDecryptor(withHeldContent.roomId, withHeldContent.algorithm)
790794
if (alg is IMXWithHeldExtension) {
791795
alg.onRoomKeyWithHeldEvent(withHeldContent)
792796
} else {
793-
Timber.e("## CRYPTO | onKeyWithHeldReceived() from:${event.senderId}: Unable to handle WithHeldContent for ${withHeldContent.algorithm}")
797+
Timber.tag(loggerTag.value).e("onKeyWithHeldReceived() from:${event.senderId}: Unable to handle WithHeldContent for ${withHeldContent.algorithm}")
794798
return
795799
}
796800
}
797801

798802
private fun onSecretSendReceived(event: Event) {
799-
Timber.i("## CRYPTO | GOSSIP onSecretSend() from ${event.senderId} : onSecretSendReceived ${event.content?.get("sender_key")}")
803+
Timber.tag(loggerTag.value).i("GOSSIP onSecretSend() from ${event.senderId} : onSecretSendReceived ${event.content?.get("sender_key")}")
800804
if (!event.isEncrypted()) {
801805
// secret send messages must be encrypted
802-
Timber.e("## CRYPTO | GOSSIP onSecretSend() :Received unencrypted secret send event")
806+
Timber.tag(loggerTag.value).e("GOSSIP onSecretSend() :Received unencrypted secret send event")
803807
return
804808
}
805809

806810
// Was that sent by us?
807811
if (event.senderId != userId) {
808-
Timber.e("## CRYPTO | GOSSIP onSecretSend() : Ignore secret from other user ${event.senderId}")
812+
Timber.tag(loggerTag.value).e("GOSSIP onSecretSend() : Ignore secret from other user ${event.senderId}")
809813
return
810814
}
811815

@@ -815,13 +819,13 @@ internal class DefaultCryptoService @Inject constructor(
815819
.getOutgoingSecretKeyRequests().firstOrNull { it.requestId == secretContent.requestId }
816820

817821
if (existingRequest == null) {
818-
Timber.i("## CRYPTO | GOSSIP onSecretSend() : Ignore secret that was not requested: ${secretContent.requestId}")
822+
Timber.tag(loggerTag.value).i("GOSSIP onSecretSend() : Ignore secret that was not requested: ${secretContent.requestId}")
819823
return
820824
}
821825

822826
if (!handleSDKLevelGossip(existingRequest.secretName, secretContent.secretValue)) {
823827
// TODO Ask to application layer?
824-
Timber.v("## CRYPTO | onSecretSend() : secret not handled by SDK")
828+
Timber.tag(loggerTag.value).v("onSecretSend() : secret not handled by SDK")
825829
}
826830
}
827831

@@ -858,7 +862,7 @@ internal class DefaultCryptoService @Inject constructor(
858862
private fun onRoomEncryptionEvent(roomId: String, event: Event) {
859863
if (!event.isStateEvent()) {
860864
// Ignore
861-
Timber.w("Invalid encryption event")
865+
Timber.tag(loggerTag.value).w("Invalid encryption event")
862866
return
863867
}
864868
cryptoCoroutineScope.launch(coroutineDispatchers.crypto) {
@@ -912,7 +916,7 @@ internal class DefaultCryptoService @Inject constructor(
912916
*/
913917
private suspend fun uploadDeviceKeys() {
914918
if (cryptoStore.areDeviceKeysUploaded()) {
915-
Timber.d("Keys already uploaded, nothing to do")
919+
Timber.tag(loggerTag.value).d("Keys already uploaded, nothing to do")
916920
return
917921
}
918922
// Prepare the device keys data to send
@@ -971,21 +975,21 @@ internal class DefaultCryptoService @Inject constructor(
971975
password: String,
972976
progressListener: ProgressListener?): ImportRoomKeysResult {
973977
return withContext(coroutineDispatchers.crypto) {
974-
Timber.v("## CRYPTO | importRoomKeys starts")
978+
Timber.tag(loggerTag.value).v("importRoomKeys starts")
975979

976980
val t0 = System.currentTimeMillis()
977981
val roomKeys = MXMegolmExportEncryption.decryptMegolmKeyFile(roomKeysAsArray, password)
978982
val t1 = System.currentTimeMillis()
979983

980-
Timber.v("## CRYPTO | importRoomKeys : decryptMegolmKeyFile done in ${t1 - t0} ms")
984+
Timber.tag(loggerTag.value).v("importRoomKeys : decryptMegolmKeyFile done in ${t1 - t0} ms")
981985

982986
val importedSessions = MoshiProvider.providesMoshi()
983987
.adapter<List<MegolmSessionData>>(Types.newParameterizedType(List::class.java, MegolmSessionData::class.java))
984988
.fromJson(roomKeys)
985989

986990
val t2 = System.currentTimeMillis()
987991

988-
Timber.v("## CRYPTO | importRoomKeys : JSON parsing ${t2 - t1} ms")
992+
Timber.tag(loggerTag.value).v("importRoomKeys : JSON parsing ${t2 - t1} ms")
989993

990994
if (importedSessions == null) {
991995
throw Exception("Error")
@@ -1122,7 +1126,7 @@ internal class DefaultCryptoService @Inject constructor(
11221126
*/
11231127
override fun reRequestRoomKeyForEvent(event: Event) {
11241128
val wireContent = event.content.toModel<EncryptedEventContent>() ?: return Unit.also {
1125-
Timber.e("## CRYPTO | reRequestRoomKeyForEvent Failed to re-request key, null content")
1129+
Timber.tag(loggerTag.value).e("reRequestRoomKeyForEvent Failed to re-request key, null content")
11261130
}
11271131

11281132
val requestBody = RoomKeyRequestBody(
@@ -1137,7 +1141,7 @@ internal class DefaultCryptoService @Inject constructor(
11371141

11381142
override fun requestRoomKeyForEvent(event: Event) {
11391143
val wireContent = event.content.toModel<EncryptedEventContent>() ?: return Unit.also {
1140-
Timber.e("## CRYPTO | requestRoomKeyForEvent Failed to request key, null content eventId: ${event.eventId}")
1144+
Timber.tag(loggerTag.value).e("requestRoomKeyForEvent Failed to request key, null content eventId: ${event.eventId}")
11411145
}
11421146

11431147
cryptoCoroutineScope.launch(coroutineDispatchers.crypto) {
@@ -1148,7 +1152,7 @@ internal class DefaultCryptoService @Inject constructor(
11481152
roomDecryptorProvider
11491153
.getOrCreateRoomDecryptor(event.roomId, wireContent.algorithm)
11501154
?.requestKeysForEvent(event, false) ?: run {
1151-
Timber.v("## CRYPTO | requestRoomKeyForEvent() : No room decryptor for roomId:${event.roomId} algorithm:${wireContent.algorithm}")
1155+
Timber.tag(loggerTag.value).v("requestRoomKeyForEvent() : No room decryptor for roomId:${event.roomId} algorithm:${wireContent.algorithm}")
11521156
}
11531157
}
11541158
}
@@ -1287,12 +1291,12 @@ internal class DefaultCryptoService @Inject constructor(
12871291

12881292
override fun prepareToEncrypt(roomId: String, callback: MatrixCallback<Unit>) {
12891293
cryptoCoroutineScope.launch(coroutineDispatchers.crypto) {
1290-
Timber.d("## CRYPTO | prepareToEncrypt() : Check room members up to date")
1294+
Timber.tag(loggerTag.value).d("prepareToEncrypt() roomId:$roomId Check room members up to date")
12911295
// Ensure to load all room members
12921296
try {
12931297
loadRoomMembersTask.execute(LoadRoomMembersTask.Params(roomId))
12941298
} catch (failure: Throwable) {
1295-
Timber.e("## CRYPTO | prepareToEncrypt() : Failed to load room members")
1299+
Timber.tag(loggerTag.value).e("prepareToEncrypt() : Failed to load room members")
12961300
callback.onFailure(failure)
12971301
return@launch
12981302
}
@@ -1305,7 +1309,7 @@ internal class DefaultCryptoService @Inject constructor(
13051309

13061310
if (alg == null) {
13071311
val reason = String.format(MXCryptoError.UNABLE_TO_ENCRYPT_REASON, MXCryptoError.NO_MORE_ALGORITHM_REASON)
1308-
Timber.e("## CRYPTO | prepareToEncrypt() : $reason")
1312+
Timber.tag(loggerTag.value).e("prepareToEncrypt() : $reason")
13091313
callback.onFailure(IllegalArgumentException("Missing algorithm"))
13101314
return@launch
13111315
}
@@ -1315,7 +1319,7 @@ internal class DefaultCryptoService @Inject constructor(
13151319
}.fold(
13161320
{ callback.onSuccess(Unit) },
13171321
{
1318-
Timber.e("## CRYPTO | prepareToEncrypt() failed.")
1322+
Timber.tag(loggerTag.value).e(it, "prepareToEncrypt() failed.")
13191323
callback.onFailure(it)
13201324
}
13211325
)

0 commit comments

Comments
 (0)