From 2b58502113b3479f92f0bd4ee1c16ac9a00b3424 Mon Sep 17 00:00:00 2001 From: Philipp Hancke Date: Mon, 20 Apr 2020 07:32:08 +0200 Subject: [PATCH 1/2] e2ee: also enable on p2p connections also enables e2ee on peer-to-peer connections. While a bit unnecessary it avoids the confusing UX of things working until a third person joins --- modules/RTC/RTC.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/RTC/RTC.js b/modules/RTC/RTC.js index d37fb4a0c3..0bc8aad704 100644 --- a/modules/RTC/RTC.js +++ b/modules/RTC/RTC.js @@ -506,7 +506,7 @@ export default class RTC extends Listenable { // FIXME: We should rename iceConfig to pcConfig. - if (!isP2P && browser.supportsInsertableStreams()) { + if (browser.supportsInsertableStreams()) { logger.debug('E2EE - setting insertable streams constraints'); iceConfig.forceEncodedAudioInsertableStreams = true; iceConfig.forceEncodedVideoInsertableStreams = true; From c785849c8fb90f89b597b440a1547f1dd8ff86ff Mon Sep 17 00:00:00 2001 From: Philipp Hancke Date: Mon, 20 Apr 2020 20:26:22 +0200 Subject: [PATCH 2/2] find all the other places --- JitsiConference.js | 47 ++++++++++++++++++++++++++++++---------------- 1 file changed, 31 insertions(+), 16 deletions(-) diff --git a/JitsiConference.js b/JitsiConference.js index e5fc9491ec..c7f54620b2 100644 --- a/JitsiConference.js +++ b/JitsiConference.js @@ -1113,8 +1113,6 @@ JitsiConference.prototype._setupNewTrack = function(newTrack) { newTrack._setConference(this); this.eventEmitter.emit(JitsiConferenceEvents.TRACK_ADDED, newTrack); - - this._setupSenderE2EEForTrack(newTrack); }; /** @@ -1694,6 +1692,14 @@ JitsiConference.prototype.onRemoteTrackAdded = function(track) { JitsiConference.prototype.onCallAccepted = function(session, answer) { if (this.p2pJingleSession === session) { logger.info('P2P setAnswer'); + + // Setup E2EE. + const localTracks = this.getLocalTracks(); + + for (const track of localTracks) { + this._setupSenderE2EEForTrack(session, track); + } + this.p2pJingleSession.setAnswer(answer); } }; @@ -1873,7 +1879,7 @@ JitsiConference.prototype._acceptJvbIncomingCall = function( // Setup E2EE. for (const track of localTracks) { - this._setupSenderE2EEForTrack(track); + this._setupSenderE2EEForTrack(jingleSession, track); } }, error => { @@ -2633,6 +2639,11 @@ JitsiConference.prototype._acceptP2PIncomingCall = function( jingleOffer, () => { logger.debug('Got RESULT for P2P "session-accept"'); + + // Setup E2EE. + for (const track of localTracks) { + this._setupSenderE2EEForTrack(jingleSession, track); + } }, error => { logger.error( @@ -3320,17 +3331,17 @@ JitsiConference.prototype.setE2EEKey = function(key) { * * @returns {void} */ -JitsiConference.prototype._setupSenderE2EEForTrack = function(track) { - const jvbPc = this.jvbJingleSession ? this.jvbJingleSession.peerconnection : null; - - if (jvbPc && this._e2eeCtx) { - const sender = jvbPc.findSenderForTrack(track.track); +JitsiConference.prototype._setupSenderE2EEForTrack = function(session, track) { + if (!this._e2eeCtx) { + return; + } + const pc = session.peerconnection; + const sender = pc.findSenderForTrack(track.track); - if (sender) { - this._e2eeCtx.handleSender(sender, track.getType()); - } else { - logger.warn(`Could not handle E2EE for local ${track.getType()} track: sender not found`); - } + if (sender) { + this._e2eeCtx.handleSender(sender, track.getType()); + } else { + logger.warn(`Could not handle E2EE for local ${track.getType()} track: sender not found`); } }; @@ -3341,10 +3352,14 @@ JitsiConference.prototype._setupSenderE2EEForTrack = function(track) { * @returns {void} */ JitsiConference.prototype._setupReceiverE2EEForTrack = function(track) { - const jvbPc = this.jvbJingleSession ? this.jvbJingleSession.peerconnection : null; + if (!this._e2eeCtx) { + return; + } + const session = track.isP2P ? this.p2pJingleSession : this.jvbJingleSession; + const pc = session && session.peerconnection; - if (jvbPc && this._e2eeCtx) { - const receiver = jvbPc.findReceiverForTrack(track.track); + if (pc) { + const receiver = pc.findReceiverForTrack(track.track); if (receiver) { this._e2eeCtx.handleReceiver(receiver, track.getType());