Skip to content

[pull] master from jitsi:master - #836

Merged
pull[bot] merged 5 commits into
code:masterfrom
jitsi:master
Aug 18, 2026
Merged

[pull] master from jitsi:master#836
pull[bot] merged 5 commits into
code:masterfrom
jitsi:master

Conversation

@pull

@pull pull Bot commented Aug 18, 2026

Copy link
Copy Markdown

See Commits and Changes for more details.


Created by pull[bot] (v2.0.0-alpha.4)

Can you help keep this open source service alive? 💖 Please sponsor : )

damencho and others added 5 commits August 18, 2026 18:08
Wire up the breakout MUC component in the Docker test config and add an
8-test Mocha integration spec covering create, remove, rename, access
control, and non-moderator authorization for mod_muc_breakout_rooms.

The module excludes Prosody admin occupants (focus) from update
broadcasts, so tests use a JWT moderator (context.user.moderator=true)
as both the command sender and broadcast receiver.
… foreign VirtualHosts

The `c2s-session-updated` hook in mod_auth_token.lua is registered globally
(`module:hook_global`), so it fires on every VirtualHost instance of the
module — including ones with a different JWT algorithm (e.g. hs256.localhost).
When a `localhost` session undergoes SMACKS resume, the `hs256.localhost`
instance entered the cross-host branch, tried to re-verify the RS256 token
with its HS256 verifier, failed, and called `event.session:close()` — killing
the resumed session before `<resumed>` could be sent.

The fix: skip the cross-host verification path when `from_session._jitsi_auth_done`
is already true, which means the from_session was already authenticated by its
own token-auth module.  Only anonymous-host sessions (which never set this flag)
legitimately need a foreign module to run first-stage auth on their behalf.

test(prosody): add SMACKS session resume integration test

Regression test for eb43cf6 ("fix(breakout-rooms): don't clear
jitsi_breakout_main_jid on smacks resume"):

- Moderator joins the main room (jicofo/focus joins first, matching the
  real-life flow where Jicofo creates the breakout room on the component).
- A breakout room is registered via OP_ADD.
- Focus joins the breakout room to physically create it
  (`restrict_room_creation=true` is kept on the breakout component, so only
  Prosody admins like focus@auth.localhost can create rooms).
- The moderator's WebSocket is torn down with ws.terminate() (TCP RST →
  SMACKS hibernation, not session destruction).
- The reconnect URL carries `?previd=<smacks-id>` so that mod_auth_token
  preserves the UUID across SASL, allowing mod_smacks to find and resume
  the hibernating session.
- After resume, the moderator joins the breakout room.  Without eb43cf6
  the jitsi_breakout_main_jid field would be nil and the join would return
  not-allowed.

Also adds dropConnection() / waitForReconnect() helpers and a smId getter
to the XmppTestClient wrapper.
* feat: Request an in-place ICE restart when the network changes

Fires an in-place ICE restart on its own when the mobile OS reports a
network change, instead of waiting for ICE to actually fail. This is a
proactive make-before-break: the bridge keeps carrying media on the
established path while the new one comes up, so it is safe to request
whenever the local address the session was set up on may have gone
stale.

Wired into base/conference/middleware.native.ts on SET_NETWORK_INFO.
New config flag enableIceRestartOnNetworkChange (on by default, has no
effect unless enableIceRestart is also on).

Treats a reconnect after an offline gap as a network change, even when
the address ends up identical to the pre-outage baseline (for example
the same DHCP lease on the same wifi network). Without this, a device
that goes offline and reconnects to the same network would look
unchanged to a plain address comparison, even though the interface
genuinely went down and came back up, and any ICE candidates gathered
on it are stale regardless of whether the address string still matches.

Verified end to end on a real device against a boris3 standalone: wifi
off for about 20 seconds, then back on to the same network and address.
JVB completed the resulting in-place restart (generation 2, cutover in
801ms). See ~/claude/ice-restart/mobile-test-2026-08-13-wifi-toggle.md
for the full transcript.

* refactor: Reference the real IceRestartReason enum for the network-change trigger

Follow-up from a review comment on this PR. lib-jitsi-meet now exposes
IceRestartReason (jitsi/lib-jitsi-meet#3089) on JitsiMeetJS.constants
(jitsi/lib-jitsi-meet#3090, since this package ships no types and every
other enum jitsi-meet consumes goes through JitsiMeetJS.constants/
.errors/.events rather than a direct module import).

Re-export it as JitsiIceRestartReason and pass
JitsiIceRestartReason.NETWORK_CHANGE instead of the bare string
'network-change'. Also tighten IJitsiConference.restartJvbIce's
signature to the known reason values, since the shim interface still
can't import lib-jitsi-meet's real type.
@pull pull Bot locked and limited conversation to collaborators Aug 18, 2026
@pull pull Bot added the ⤵️ pull label Aug 18, 2026
@pull
pull Bot merged commit 97150e2 into code:master Aug 18, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants