Commit Graph

834 Commits

Author SHA1 Message Date
zarazaex69
cc65c033e2 fix(jitsi): prevent reconnect loops and idle 2026-06-01 12:51:06 +03:00
zarazaex
2d2e772c05 Merge pull request #88 from ben73/fix/jitsi-reconnect-focus-realloc
fix(jitsi): re-allocate Jicofo focus on reconnect (non-blocking)
2026-06-01 11:58:12 +03:00
e.barskov
bd1a95cac5 fix(jitsi): re-allocate Jicofo focus on reconnect (non-blocking)
The lightweight soft-rejoin path (jSess.Rejoin) skips Jicofo focus
allocation and joins the MUC with a bare presence. After the client
leaves and Jicofo idle-terminates the now-empty conference
(session-terminate <expired/>), the room/focus is torn down. A bare
rejoin presence is then rejected by Prosody with
<presence type='error'><not-allowed/>, and the library's JoinMUC matches
a stale status-110 left in its stanza buffer and falsely reports success.
The engine then waits forever for a session-initiate that never arrives
while actually being outside the room, so the client can never reconnect.

Re-establish the session from scratch via j.JoinMUC instead, which runs
dial -> focus allocation -> MUC join in the correct order (focus first,
so Jicofo recreates the room), exactly like the initial Connect, but
WITHOUT blocking on session-initiate. The fresh session-initiate is
awaited separately via WaitJingleReinitiate once a peer rejoins, so the
non-blocking reconnect contract is preserved.

Verified on a live deployment: two consecutive reconnect cycles now
complete (bridge open sctp -> reconnected -> session opened) where the
old path hung after "waiting for session-initiate".

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-01 00:36:25 +04:00
zarazaex69
08e03d0803 build(deps): bump github.com/zarazaex69/j 2026-05-31 20:50:28 +03:00
zarazaex69
dfce46dd5f fix(jitsi): add bridge keepalive loop 2026-05-31 19:41:09 +03:00
zarazaex
9f96925758 Merge pull request #85 from openlibrecommunity/fix/jitsi-nonblocking-connect
fix(jitsi): make Connect non-blocking
2026-05-31 13:09:44 +03:00
zarazaex69
71b1fbdf27 fix(jitsi): make Connect non-blocking, wait for session-initiate async
j.Join() blocks on WaitJingle until Jicofo sends session-initiate,
which only happens when a second participant joins the room. With the
transport-level connect timeout (30-60s), the server crashes if no one
joins in time.

Switch to j.JoinMUC() which returns immediately after joining the MUC.
A background goroutine (waitForJingle) waits for session-initiate and
then opens the bridge + negotiates the PeerConnection. This way Connect
succeeds as soon as the XMPP connection is established, regardless of
whether another participant is present.
2026-05-31 13:07:22 +03:00
zarazaex
ab848b4c48 Merge pull request #84 from grandgaev/fix/rtcp-keepalive-wedge
fix(jitsi): break out of rtcpKeepalive on persistent write errors
2026-05-31 07:55:28 +03:00
Rock Brock
ffa5d4ac13 fix(jitsi): break out of rtcpKeepalive loop on persistent write errors
When the JVB bridge disconnects but the session is not yet closed
(e.g. during a pending reconnect), rtcpKeepalive spins indefinitely
logging "rtcp keepalive write: io: read/write on closed pipe" every
5 seconds. The process appears alive but is functionally dead —
systemd Restart=always never triggers and the instance becomes
permanently wedged.

Add an error counter that triggers requestReconnect after 3
consecutive WriteRTCP failures, allowing the supervisor to
tear down and re-establish the bridge connection. Reset the
counter on any successful write.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-31 07:23:23 +05:00
zarazaex69
efadd37df4 fix: golangci 2026-05-30 12:16:20 +03:00
zarazaex69
da3bf43721 style: normalize dash usage in comments and logs 2026-05-29 22:08:36 +03:00
zarazaex69
c4984f65d6 fix(jitsi): reuse xmpp session on reconnect. fix #82 2026-05-29 22:07:15 +03:00
zarazaex69
52aea2d79d fix(vp8channel): add byte-rate pacer to prevent policer collapse 2026-05-29 19:16:59 +03:00
zarazaex69
cb4d5c93f9 chore(deps): bump zarazaex69/j to 20260528155819 2026-05-28 19:00:20 +03:00
zarazaex69
1f1eabc420 chore(deps): bump zarazaex69/gr from v0.1.4 to v0.1.5 2026-05-28 17:15:52 +03:00
zarazaex69
33f46460dc test(e2e): tune videochannel params and reduce chunk timeout 2026-05-28 13:19:14 +03:00
zarazaex69
b190c8c878 style: reformat python files 2026-05-28 13:18:59 +03:00
zarazaex69
1427c0d3c7 fix(videochannel): increase timeouts to handle SFU renegotiation delays 2026-05-28 05:54:18 +03:00
zarazaex69
5a3b5bbdce test: reduce videochannel e2e transport options for faster tests 2026-05-28 03:56:12 +03:00
zarazaex69
579687e7e3 docs: add olcrtc section to readme 2026-05-28 02:58:12 +03:00
zarazaex69
9f25ac59fc perf(videochannel): reduce ack timeout and multiplier 2026-05-28 02:42:50 +03:00
zarazaex69
cfa1bd6083 test(e2e): mark jitsi video transports as unstable
- temporary crutch
2026-05-27 14:05:23 +03:00
zarazaex69
15e597cff9 test(e2e): update carrier/transport expectations matrix 2026-05-27 13:12:06 +03:00
zarazaex69
e15170bb15 chore(e2e): remove -race flag from E2e target 2026-05-27 13:09:16 +03:00
zarazaex69
b5c6e1a14a doc: repository was hijacked by Israeli hackers 2026-05-27 12:58:30 +03:00
zarazaex69
94d646b9f2 refactor(magefile): move package path before flags in test commands 2026-05-27 12:53:11 +03:00
zarazaex69
8b424bc16b docs: update Go requirement to 1.26 and expand mage targets 2026-05-27 12:20:17 +03:00
zarazaex69
3552a51be4 feat(mage): add grouped pipelines and test targets 2026-05-27 12:16:00 +03:00
zarazaex69
57db32f70c chore: remove gr git submodule 2026-05-27 11:31:19 +03:00
zarazaex69
4ab4413f50 refactor(videochannel): remove ffmpeg support and fix lint 2026-05-27 11:08:49 +03:00
zarazaex69
552151fece fix(videochannel): force VP8 keyframes and drop bad frames 2026-05-27 10:55:37 +03:00
zarazaex69
0a5d3fb922 fix(videochannel): ignore vp8 missing reference errors 2026-05-27 07:54:33 +03:00
zarazaex69
8ca59975c3 docs(readme): update project status and contact info 2026-05-26 20:03:44 +03:00
zarazaex69
65dbb93221 refactor(videochannel): replace ffmpeg with Go VP8 codec
- thnks rape4me/kc for vp8 enc/dec
2026-05-26 19:11:11 +03:00
zarazaex69
d7c813265b fix(vp8channel): rotate epoch header on KCP reset 2026-05-26 12:42:41 +03:00
zarazaex69
b8933e10b5 docs: replace em dashes with hyphens in docs and comments 2026-05-26 10:27:04 +03:00
zarazaex69
d57878584a docs: add multi-instance setup guide to fast and manual docs 2026-05-26 10:26:10 +03:00
zarazaex69
b9b8c8137e fix(e2e): skip soak test on auth failure instead of failing 2026-05-26 02:54:14 +03:00
zarazaex69
10c7c655b6 fix(vp8channel): reset peer state on KCP restart 2026-05-26 02:50:29 +03:00
zarazaex69
8a9672b6cd ci: add nightly soak job and shift schedule to 00:17 UTC 2026-05-26 01:21:44 +03:00
zarazaex69
78bb27670d feat(mage): add TestFull, Soak, and LocalSoak targets 2026-05-26 01:16:19 +03:00
zarazaex69
1f26687c48 test(e2e): support multiple carriers in real soak test 2026-05-26 01:14:05 +03:00
zarazaex69
2feef3aacb Merge branch 'pr-75' into fix/all 2026-05-26 01:07:55 +03:00
zarazaex69
4fce5773f8 fix(goolom): remove premature onReconnect callback invocation 2026-05-26 01:05:31 +03:00
zarazaex69
743dc5c1bf fix(client): return after liveness reconnect to avoid deadlock #72 2026-05-25 23:33:51 +03:00
zarazaex69
9597a4ebb6 test(e2e): add chaos mode to local soak test 2026-05-25 22:54:00 +03:00
zarazaex69
7a416cbde7 test(e2e): add real-carrier throughput soak test 2026-05-25 22:44:03 +03:00
zarazaex69
b797858857 perf(seichannel): increase frame rate and batch size defaults 2026-05-25 22:39:41 +03:00
zarazaex69
e9a49239ef test(e2e): update seichannel options to match vp8channel settings 2026-05-25 22:38:38 +03:00
zarazaex69
09f591a26b fix(seichannel): scale ack timeout with fragment count and skip
re-enqueue on retry
2026-05-25 22:21:42 +03:00