This the second stage in our E2EE journey.
Instead of using a single pre-shared passphrase for deriving the key used for
E2EE, we now establish a secure E2EE communication channel amongst peers.
This channel is implemented using libolm, using XMPP groupchat or JVB channels
as the transport.
Once the secure E2EE channel has been established each participant will generate
a random 32 byte key and exchange it over this channel.
Keys are rotated (well, just re-created at the moment) when a participant joins
or leaves.
ref: Moves xmpp logs to be accessed from connection. (#1284)
* ref: Moves xmpp logs to be accessed from connection.
In cases where there is no room like pre-join and lobby screen we still want to be able to debug xmpp messages.
* squash: Remove getLogs from Conference.
* squash: Fix catch.
* squash: Print the error.
Add a performance stat around long tasks. Chrome supports PerformanceObserver API that lets us
register for long tasks event. Any task that takes longer than 50ms is considered a long task.
fix(JitsiConference): skip participant kicked event for kicker
With the introduction of lobby the ChatRoom KICKED event is now also emitted for
ourselves (the kicker) so we want to avoid emitting an event where `undefined`
kicked someone.
Delays e2e encryption initialization until any encryption key is set.
Recreates peerconnections in order to enable insertable streams
only if the e2ee is used. This is to avoid bug around insertable streams
which may cause audio issue when the main JavaScript thread is loaded:
https://bugs.chromium.org/p/chromium/issues/detail?id=1103280
fix: RTC track events emitted when switching jvb<->p2p
JitsiConference should emit JitsiConference events instead of RTC events
when adding/removing tracks on jvb<->p2p switch. This behaviour was mixing RTC layer
with the conference one. When conference switches from jvb to p2p it wants to make
the application switch to use p2p JitsiTracks, but it doesn't mean that the JVB tracks
have been removed on the RTC/peer connection level.
feat: use getSynchronizationSources on the receiver for remote audio levels (#1245)
* feat: use getSynchronizationSources on the receiver for remote audio levels
Use getSynchronizationSources if it is supported, fallback to using getStats otherwise.
* feat/ref: Use the local audio levels from LocalStatsCollector
When using getSynchronizationSources, use the audio levels from LocalStatsCollector for NoAudioSignalDetection.js
Remove obsolete code - TalkMutedDetection feature using audio levels is not used anymore
Adds extra 15 seconds before emitting ICE failed event. If the OS is capable of
reporting internet offline status then will start counting when the internet
comes back online.
The reason for that is when ICE restarts are disabled a user will get the page reload
screen immediately, but there's a chance to recover as long as the channels have not
expired on the bridge.
Refactors the way send/receive video constraints are managed and puts the high level
logic in a separate module. See QualityController.js for high level overview on how
the constraints are managed now.
Adds events to JitsiConference fired whenever it starts new jvb/p2p session.
Adds event to JingleSessionPC.js when remote party signals receive max frame height.
Also adds signaling of the local recv preference for the p2p mode(only existed for JVB).
* Initial impl of lobby rooms.
* Fixes tests to check the new fulljid added to MUC_MEMBER_JOINED.
* Updates few of the comments, renaming some functions.
* Renames disableLobby ChatRoom option to enableLobby.
* Fixes a comment.
* Moves setMembersOnly method to ChatRoom.
* Fixes counting members, to exclude jicofo.
* Moves setLobbyRoomJid earlier and renames a method.
Rename _maybeEnableDisable to maybeJoinLeaveLobbyRoom.
* Drops using custom roomconfig lobbypassword field and reuse room lock.
* Handles destroying the lobby room.
* Handles clear lobby room on destroy for moderators.
We do not try to leave the lobby room as it is server-side destroyed and we handle that. The only case of leaving a lobby room is when request to join room is being approved.
* Join main room if lobby is disabled while waiting.
* Adds MEMBERS_ONLY_CHANGED conference event.
* fix: Make sure we leave lobby if main room is joined.
* fix: Setting password when joining locked room.
* fix: Fixes case where we enable lobby for already locked room.
* fix: Fixes case where we enable lobby and then lock room.
* fix: Fixes lint.
* ref: Removes shared password for lobby.
This functionality is handled by the lock room password and handled there.
Removes duplication and unnecessary complicated API for lobby room.
* fix: Fixes comments.
moves the cryptography bit to a datastructure which allows per-sender keys.
Does not yet use per-sender keys.
Also fixes lots of lint errors in the worker.
Adds ICE_FAILED event emitted when ICE fails and disables it by default.
The reason for that it's currently causing issues with signaling when
Octo is enabled. Also when we do an "ICE restart"(which is not a real
ICE restart), the client maintains the TCC sequence number counter, but
the bridge resets it. The bridge sends media packets with TCC sequence
numbers starting from 0.
The 'enableIceRestart' config option can be used to force it, but it's
not recommended.
fix(E2EE): Apply E2EE on RTCRtpSender when track is replaced on pc
Make sure we inject the encoding function on RTCRtpsenders when tracks are replaced on the peerconnection.
Update the MediaStreamTrack on the JitsiLocalTrack when effects are applied or removed so that
we can find the RTCRtpSender using the MediaStreamTrack
Audio fails on Safari when we try to re-use audio m-lines whose direction has been set to 'inactive'
when the remote source left the conference.
Disable noisy mic detection on Safari as this causes audio input to fail on Safari on iPadOS
feat(video-quality): control the sender resolution based on video quality settings (#1119)
* feat(video-quality): control the sender resolution based on video quality settings
* fix(video-quality): Apply the settings on newly created p2p/jvb jingle sessions
If a p2p/jvb session is not present when setSenderVideoConstraint is called,
make sure the settings are applied when they are created
ref(JitsiConference): mention ping type and include the error message
There are different types of pings in the app, so it's good to mention
which one is the error being logged for. Also extracts the error
message to give any details about the error.