Skip to content

Preserve multi-device call signaling with legacy tunnel compatibility - #2129

Open
robertnisipeanu wants to merge 5 commits into
AsamK:masterfrom
robertnisipeanu:fix-multidevice-signaling
Open

robertnisipeanu wants to merge 5 commits into
AsamK:masterfrom
robertnisipeanu:fix-multidevice-signaling

Conversation

@robertnisipeanu

@robertnisipeanu robertnisipeanu commented Sep 22, 2026 •

Copy link
Copy Markdown

When a peer has multiple devices, RingRTC's target device and accepted-device notification must survive the signal-cli relay. Preserve explicit/broadcast destinations, forward remote hangup/busy metadata to a capable tunnel, and avoid replacing an established call state when a late answer arrives.

The tunnel advertises signaling version 2 in ready (or a separate capability event). Older tunnels retain legacy cleanup, notification filtering and recipient selection. The CLI and tunnel can therefore merge and upgrade independently; complete multi-device behavior requires both implementations. This branch includes the attributed local account device-ID correction and its tests from #2128. That smaller PR can land first; its shared commits will then be removed from this PR diff by rebasing.

Validation: ./gradlew test installDist passes. Added tests exercise actual control-event parsing, capability negotiation, legacy cleanup dispatch, early notifications before readiness, canceled-call notification replay rejection, concurrent call removal, explicit/null/missing targets, accepted-device identity, wrong-sender/unknown-call rejection and late answers.

Companion tunnel PR: visigoth/signal-call-tunnel#8

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant