Preserve multi-device call signaling with legacy tunnel compatibility - #2129
Open
robertnisipeanu wants to merge 5 commits into
Open
robertnisipeanu wants to merge 5 commits into
robertnisipeanu wants to merge 5 commits into
Conversation
(cherry picked from commit f3e22de)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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 installDistpasses. 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