@@ -36,6 +36,7 @@ import org.matrix.android.sdk.api.crypto.MXCryptoConfig
36
36
import org.matrix.android.sdk.api.extensions.tryOrNull
37
37
import org.matrix.android.sdk.api.failure.Failure
38
38
import org.matrix.android.sdk.api.listeners.ProgressListener
39
+ import org.matrix.android.sdk.api.logger.LoggerTag
39
40
import org.matrix.android.sdk.api.session.crypto.CryptoService
40
41
import org.matrix.android.sdk.api.session.crypto.MXCryptoError
41
42
import org.matrix.android.sdk.api.session.crypto.crosssigning.KEYBACKUP_SECRET_SSSS_NAME
@@ -110,6 +111,9 @@ import kotlin.math.max
110
111
* CryptoService maintains all necessary keys and their sharing with other devices required for the crypto.
111
112
* Specially, it tracks all room membership changes events in order to do keys updates.
112
113
*/
114
+
115
+ private val loggerTag = LoggerTag (" DefaultCryptoService" , LoggerTag .CRYPTO )
116
+
113
117
@SessionScope
114
118
internal class DefaultCryptoService @Inject constructor(
115
119
// Olm Manager
@@ -346,7 +350,7 @@ internal class DefaultCryptoService @Inject constructor(
346
350
deviceListManager.startTrackingDeviceList(listOf (userId))
347
351
deviceListManager.refreshOutdatedDeviceLists()
348
352
} catch (failure: Throwable ) {
349
- Timber .e(failure, " ## CRYPTO onSyncWillProcess " )
353
+ Timber .tag(loggerTag.value). e(failure, " onSyncWillProcess " )
350
354
}
351
355
}
352
356
}
@@ -379,7 +383,7 @@ internal class DefaultCryptoService @Inject constructor(
379
383
{
380
384
isStarting.set(false )
381
385
isStarted.set(false )
382
- Timber .e(it, " Start failed" )
386
+ Timber .tag(loggerTag.value). e(it, " Start failed" )
383
387
}
384
388
)
385
389
}
@@ -551,14 +555,14 @@ internal class DefaultCryptoService @Inject constructor(
551
555
val existingAlgorithm = cryptoStore.getRoomAlgorithm(roomId)
552
556
553
557
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 " )
555
559
return false
556
560
}
557
561
558
562
val encryptingClass = MXCryptoAlgorithms .hasEncryptorClassForAlgorithm(algorithm)
559
563
560
564
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 " )
562
566
return false
563
567
}
564
568
@@ -577,7 +581,7 @@ internal class DefaultCryptoService @Inject constructor(
577
581
// e2e rooms with them, so there is room for optimisation here, but for now
578
582
// we just invalidate everyone in the room.
579
583
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" )
581
585
582
586
val userIds = ArrayList (membersId)
583
587
@@ -655,17 +659,17 @@ internal class DefaultCryptoService @Inject constructor(
655
659
val safeAlgorithm = alg
656
660
if (safeAlgorithm != null ) {
657
661
val t0 = System .currentTimeMillis()
658
- Timber .v(" ## CRYPTO | encryptEventContent() starts" )
662
+ Timber .tag(loggerTag.value). v(" encryptEventContent() starts" )
659
663
runCatching {
660
664
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" )
662
666
MXEncryptEventContentResult (content, EventType .ENCRYPTED )
663
667
}.foldToCallback(callback)
664
668
} else {
665
669
val algorithm = getEncryptionAlgorithm(roomId)
666
670
val reason = String .format(MXCryptoError .UNABLE_TO_ENCRYPT_REASON ,
667
671
algorithm ? : MXCryptoError .NO_MORE_ALGORITHM_REASON )
668
- Timber .e(" ## CRYPTO | encryptEventContent() : $reason " )
672
+ Timber .tag(loggerTag.value). e(" encryptEventContent() : failed $reason " )
669
673
callback.onFailure(Failure .CryptoError (MXCryptoError .Base (MXCryptoError .ErrorType .UNABLE_TO_ENCRYPT , reason)))
670
674
}
671
675
}
@@ -677,7 +681,7 @@ internal class DefaultCryptoService @Inject constructor(
677
681
if (roomEncryptor is IMXGroupEncryption ) {
678
682
roomEncryptor.discardSessionKey()
679
683
} 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" )
681
685
}
682
686
}
683
687
}
@@ -768,44 +772,44 @@ internal class DefaultCryptoService @Inject constructor(
768
772
*/
769
773
private fun onRoomKeyEvent (event : Event ) {
770
774
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} >" )
772
776
if (roomKeyContent.roomId.isNullOrEmpty() || roomKeyContent.algorithm.isNullOrEmpty()) {
773
- Timber .e(" ## CRYPTO | onRoomKeyEvent() : missing fields" )
777
+ Timber .tag(loggerTag.value). e(" onRoomKeyEvent() : missing fields" )
774
778
return
775
779
}
776
780
val alg = roomDecryptorProvider.getOrCreateRoomDecryptor(roomKeyContent.roomId, roomKeyContent.algorithm)
777
781
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} " )
779
783
return
780
784
}
781
785
alg.onRoomKeyEvent(event, keysBackupService)
782
786
}
783
787
784
788
private fun onKeyWithHeldReceived (event : Event ) {
785
789
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" )
787
791
}
788
- Timber .i(" ## CRYPTO | onKeyWithHeldReceived() received from:${event.senderId} , content <$withHeldContent >" )
792
+ Timber .tag(loggerTag.value). i(" onKeyWithHeldReceived() received from:${event.senderId} , content <$withHeldContent >" )
789
793
val alg = roomDecryptorProvider.getOrCreateRoomDecryptor(withHeldContent.roomId, withHeldContent.algorithm)
790
794
if (alg is IMXWithHeldExtension ) {
791
795
alg.onRoomKeyWithHeldEvent(withHeldContent)
792
796
} 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} " )
794
798
return
795
799
}
796
800
}
797
801
798
802
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" )} " )
800
804
if (! event.isEncrypted()) {
801
805
// 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" )
803
807
return
804
808
}
805
809
806
810
// Was that sent by us?
807
811
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} " )
809
813
return
810
814
}
811
815
@@ -815,13 +819,13 @@ internal class DefaultCryptoService @Inject constructor(
815
819
.getOutgoingSecretKeyRequests().firstOrNull { it.requestId == secretContent.requestId }
816
820
817
821
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} " )
819
823
return
820
824
}
821
825
822
826
if (! handleSDKLevelGossip(existingRequest.secretName, secretContent.secretValue)) {
823
827
// 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" )
825
829
}
826
830
}
827
831
@@ -858,7 +862,7 @@ internal class DefaultCryptoService @Inject constructor(
858
862
private fun onRoomEncryptionEvent (roomId : String , event : Event ) {
859
863
if (! event.isStateEvent()) {
860
864
// Ignore
861
- Timber .w(" Invalid encryption event" )
865
+ Timber .tag(loggerTag.value). w(" Invalid encryption event" )
862
866
return
863
867
}
864
868
cryptoCoroutineScope.launch(coroutineDispatchers.crypto) {
@@ -912,7 +916,7 @@ internal class DefaultCryptoService @Inject constructor(
912
916
*/
913
917
private suspend fun uploadDeviceKeys () {
914
918
if (cryptoStore.areDeviceKeysUploaded()) {
915
- Timber .d(" Keys already uploaded, nothing to do" )
919
+ Timber .tag(loggerTag.value). d(" Keys already uploaded, nothing to do" )
916
920
return
917
921
}
918
922
// Prepare the device keys data to send
@@ -971,21 +975,21 @@ internal class DefaultCryptoService @Inject constructor(
971
975
password : String ,
972
976
progressListener : ProgressListener ? ): ImportRoomKeysResult {
973
977
return withContext(coroutineDispatchers.crypto) {
974
- Timber .v(" ## CRYPTO | importRoomKeys starts" )
978
+ Timber .tag(loggerTag.value). v(" importRoomKeys starts" )
975
979
976
980
val t0 = System .currentTimeMillis()
977
981
val roomKeys = MXMegolmExportEncryption .decryptMegolmKeyFile(roomKeysAsArray, password)
978
982
val t1 = System .currentTimeMillis()
979
983
980
- Timber .v(" ## CRYPTO | importRoomKeys : decryptMegolmKeyFile done in ${t1 - t0} ms" )
984
+ Timber .tag(loggerTag.value). v(" importRoomKeys : decryptMegolmKeyFile done in ${t1 - t0} ms" )
981
985
982
986
val importedSessions = MoshiProvider .providesMoshi()
983
987
.adapter<List <MegolmSessionData >>(Types .newParameterizedType(List ::class .java, MegolmSessionData ::class .java))
984
988
.fromJson(roomKeys)
985
989
986
990
val t2 = System .currentTimeMillis()
987
991
988
- Timber .v(" ## CRYPTO | importRoomKeys : JSON parsing ${t2 - t1} ms" )
992
+ Timber .tag(loggerTag.value). v(" importRoomKeys : JSON parsing ${t2 - t1} ms" )
989
993
990
994
if (importedSessions == null ) {
991
995
throw Exception (" Error" )
@@ -1122,7 +1126,7 @@ internal class DefaultCryptoService @Inject constructor(
1122
1126
*/
1123
1127
override fun reRequestRoomKeyForEvent (event : Event ) {
1124
1128
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" )
1126
1130
}
1127
1131
1128
1132
val requestBody = RoomKeyRequestBody (
@@ -1137,7 +1141,7 @@ internal class DefaultCryptoService @Inject constructor(
1137
1141
1138
1142
override fun requestRoomKeyForEvent (event : Event ) {
1139
1143
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} " )
1141
1145
}
1142
1146
1143
1147
cryptoCoroutineScope.launch(coroutineDispatchers.crypto) {
@@ -1148,7 +1152,7 @@ internal class DefaultCryptoService @Inject constructor(
1148
1152
roomDecryptorProvider
1149
1153
.getOrCreateRoomDecryptor(event.roomId, wireContent.algorithm)
1150
1154
?.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} " )
1152
1156
}
1153
1157
}
1154
1158
}
@@ -1287,12 +1291,12 @@ internal class DefaultCryptoService @Inject constructor(
1287
1291
1288
1292
override fun prepareToEncrypt (roomId : String , callback : MatrixCallback <Unit >) {
1289
1293
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" )
1291
1295
// Ensure to load all room members
1292
1296
try {
1293
1297
loadRoomMembersTask.execute(LoadRoomMembersTask .Params (roomId))
1294
1298
} 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" )
1296
1300
callback.onFailure(failure)
1297
1301
return @launch
1298
1302
}
@@ -1305,7 +1309,7 @@ internal class DefaultCryptoService @Inject constructor(
1305
1309
1306
1310
if (alg == null ) {
1307
1311
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 " )
1309
1313
callback.onFailure(IllegalArgumentException (" Missing algorithm" ))
1310
1314
return @launch
1311
1315
}
@@ -1315,7 +1319,7 @@ internal class DefaultCryptoService @Inject constructor(
1315
1319
}.fold(
1316
1320
{ callback.onSuccess(Unit ) },
1317
1321
{
1318
- Timber .e( " ## CRYPTO | prepareToEncrypt() failed." )
1322
+ Timber .tag(loggerTag.value).e(it, " prepareToEncrypt() failed." )
1319
1323
callback.onFailure(it)
1320
1324
}
1321
1325
)
0 commit comments