From 7241bb8dc5edcff9c4a9754049ad279c80b7143a Mon Sep 17 00:00:00 2001 From: td Date: Tue, 11 Jun 2024 18:11:44 +0530 Subject: [PATCH 1/2] revert: "feat: retry call encryption key request logic" This reverts commit 9896ebb8145bc37ae8f650b218cdf5d8f3847243. --- lib/src/models/retry_event_model.dart | 19 -------------- lib/src/voip/backend/livekit_backend.dart | 31 ++--------------------- 2 files changed, 2 insertions(+), 48 deletions(-) delete mode 100644 lib/src/models/retry_event_model.dart diff --git a/lib/src/models/retry_event_model.dart b/lib/src/models/retry_event_model.dart deleted file mode 100644 index dcda3ec6..00000000 --- a/lib/src/models/retry_event_model.dart +++ /dev/null @@ -1,19 +0,0 @@ -import 'dart:async'; - -/// Retries the `retryFunction` after a set `timeInterval` until `dispose` is called -class RetryEventModel { - final Duration timeInterval; - void Function(Timer? timer) retryFunction; - - final Timer? _timer; - - RetryEventModel({ - required this.timeInterval, - required this.retryFunction, - }) : _timer = Timer.periodic(timeInterval, retryFunction) { - // run it once because timer.periodic waits for duration before first run - retryFunction(null); - } - - void dispose() => _timer?.cancel(); -} diff --git a/lib/src/voip/backend/livekit_backend.dart b/lib/src/voip/backend/livekit_backend.dart index acc91dd5..13ad6baf 100644 --- a/lib/src/voip/backend/livekit_backend.dart +++ b/lib/src/voip/backend/livekit_backend.dart @@ -3,7 +3,6 @@ import 'dart:convert'; import 'dart:typed_data'; import 'package:matrix/matrix.dart'; -import 'package:matrix/src/models/retry_event_model.dart'; import 'package:matrix/src/utils/crypto/crypto.dart'; import 'package:matrix/src/voip/models/call_membership.dart'; @@ -303,16 +302,11 @@ class LiveKitBackend extends CallBackend { }; } - Map requestEncrytionKeyPending = {}; - @override Future requestEncrytionKey( GroupCallSession groupCall, List remoteParticipants, ) async { - Logs().v( - '[VOIP E2EE] requesting stream encryption keys from ${remoteParticipants.map((e) => e.id)}'); - final Map data = { 'conf_id': groupCall.groupCallId, 'device_id': groupCall.client.deviceID!, @@ -325,14 +319,6 @@ class LiveKitBackend extends CallBackend { data, EventTypes.GroupCallMemberEncryptionKeysRequest, ); - - for (final rp in remoteParticipants) { - requestEncrytionKeyPending.remove(rp)?.dispose(); - requestEncrytionKeyPending[rp] = RetryEventModel( - timeInterval: Duration(seconds: 2), - retryFunction: (_) => requestEncrytionKey(groupCall, [rp]), - ); - } } @override @@ -350,34 +336,21 @@ class LiveKitBackend extends CallBackend { final callId = keyContent.callId; - final p = - CallParticipant(groupCall.voip, userId: userId, deviceId: deviceId); - if (keyContent.keys.isEmpty) { Logs().w( '[VOIP E2EE] Received m.call.encryption_keys where keys is empty: callId=$callId'); return; } else { Logs().i( - '[VOIP E2EE]: onCallEncryption, got keys from ${p.id} ${keyContent.toJson()}'); + '[VOIP E2EE]: onCallEncryption, got keys from $userId:$deviceId ${keyContent.toJson()}'); } - // TODO (td): this could potentially cancel a retry request for a different keyId - // something like - // 1. undecryptable frame - // 2. request keys - // 3. stream change - // 4. request keys - // 5. answer for 2. - // 6. cancel request for 4. - requestEncrytionKeyPending.remove(p)?.dispose(); - for (final key in keyContent.keys) { final encryptionKey = key.key; final encryptionKeyIndex = key.index; await _setEncryptionKey( groupCall, - p, + CallParticipant(groupCall.voip, userId: userId, deviceId: deviceId), encryptionKeyIndex, // base64Decode here because we receive base64Encoded version base64Decode(encryptionKey), From 325fb19f55875007ee78f9d0da862df23aa72fbb Mon Sep 17 00:00:00 2001 From: td Date: Tue, 11 Jun 2024 18:18:32 +0530 Subject: [PATCH 2/2] chore: do not create participant object on every key --- lib/src/voip/backend/livekit_backend.dart | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/src/voip/backend/livekit_backend.dart b/lib/src/voip/backend/livekit_backend.dart index 13ad6baf..8f0ff189 100644 --- a/lib/src/voip/backend/livekit_backend.dart +++ b/lib/src/voip/backend/livekit_backend.dart @@ -335,6 +335,8 @@ class LiveKitBackend extends CallBackend { final keyContent = EncryptionKeysEventContent.fromJson(content); final callId = keyContent.callId; + final p = + CallParticipant(groupCall.voip, userId: userId, deviceId: deviceId); if (keyContent.keys.isEmpty) { Logs().w( @@ -342,7 +344,7 @@ class LiveKitBackend extends CallBackend { return; } else { Logs().i( - '[VOIP E2EE]: onCallEncryption, got keys from $userId:$deviceId ${keyContent.toJson()}'); + '[VOIP E2EE]: onCallEncryption, got keys from ${p.id} ${keyContent.toJson()}'); } for (final key in keyContent.keys) { @@ -350,7 +352,7 @@ class LiveKitBackend extends CallBackend { final encryptionKeyIndex = key.index; await _setEncryptionKey( groupCall, - CallParticipant(groupCall.voip, userId: userId, deviceId: deviceId), + p, encryptionKeyIndex, // base64Decode here because we receive base64Encoded version base64Decode(encryptionKey),