Skip to content

fix(streamer): stop SETUP at first 200 and fall back to bundle peer when rigs omit Transport - #998

Merged
zortos293 merged 1 commit into
devfrom
fix/nvst-peerless-setup-bundle-fallback
Sep 20, 2026
Merged

zortos293 merged 1 commit into
devfrom
fix/nvst-peerless-setup-bundle-fallback

Conversation

@zortos293

Copy link
Copy Markdown
Collaborator

Summary

Live YES/ABYA rigs 200 the first video SETUP with an empty Transport header and 400 every further form; ANNOUNCE after such an 8-SETUP burst is then rejected (400), while a single SETUP followed by ANNOUNCE succeeds (proven with a raw-protocol prober on a live YES seat, 2 rigs x 2 games). Sweeping all forms poisons these sessions.

This stops each sweep at the first 200 (with or without a peer). Peerless 200s still re-issue the same stopped-at form on the bounded #993 pace for late-starting encoders, and terminal exhaustion with a CloudMatch bundle peer proceeds on it (mirroring the official client, which carries on when the server omits transport) instead of failing the seat. Pure rejections still fail fast without retries, and the first SETUP request is byte-identical, so all previously-working paths are unchanged.

Also adds redaction-safe DESCRIBE shape logging (\describe-shape) and an \OPENNOW_STREAMER_LOG_FILE\ sink for the standalone child so headless negotiation failures stay diagnosable (previously all \log_line\ output was silently dropped there).

Verification

  • \cargo test -p opennow-streamer-core: 143 passed, 0 failed (4 new/rewritten setup tests pinning early-stop, bounded resweep, degraded-round code, and bundle substitution with peerless ping headers); fmt + clippy clean.
  • Live YES seat: negotiation now reaches ANNOUNCE-accepted + media armed (previously \missing-video-peer/ANNOUNCE-400). Inbound media still under investigation (rig silent across VPN/direct paths) — tracked separately; this PR strictly advances the state machine without changing any working flow.

…hen rigs omit Transport

Live YES/ABYA rigs 200 the first video SETUP with an empty Transport
header and 400 every further form; ANNOUNCE after such a burst is then
rejected, while a single SETUP followed by ANNOUNCE succeeds. Sweeping
all forms poisons these sessions, and the old code did exactly that.

Stop each sweep at the first 200 (with or without a peer). Peerless 200s
still re-issue the same stopped-at form on the bounded #993 pace for
late-starting encoders, and terminal exhaustion with a CloudMatch bundle
peer proceeds on it (mirroring the official client, which carries on when
the server omits transport) instead of failing the seat. Pure rejections
still fail fast; the first SETUP request is byte-identical.

Also adds redaction-safe DESCRIBE shape logging and an
OPENNOW_STREAMER_LOG_FILE sink for the standalone child so headless
negotiation failures stay diagnosable.
@coderabbitai

coderabbitai Bot commented Sep 20, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Advanced

Run ID: 2b67f528-1964-4a2d-8fcd-a164f01fe89a

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@zortos293
zortos293 merged commit e518df2 into dev Sep 20, 2026
14 checks passed
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