Skip to content

fix(airplay): restore the transient pairing and control channel work lost in #42 - #43

Merged
Developer1010x merged 1 commit into
masterfrom
fix/airplay-recover-transient
Aug 26, 2026
Merged

fix(airplay): restore the transient pairing and control channel work lost in #42#43
Developer1010x merged 1 commit into
masterfrom
fix/airplay-recover-transient

Conversation

@snadahalli

Copy link
Copy Markdown
Owner

What happened

#41  11:40:23Z  master ← fix/airplay-hkp-header
#42  11:40:35Z  fix/airplay-hkp-header ← fix/airplay-srp-proof-hash-g

#42 was stacked on #41. Twelve seconds after #41 merged that branch into master, #42 merged into the same branch — which master had already taken and moved past. Both merges reported success and both PRs show as merged, but #42's commits landed on a branch nothing points at.

Why it matters

Master currently has the X-Apple-HKP header from #41 and none of what it was a prerequisite for:

  • the SRP proof still hashes g padded → pair-setup fails at M4 with HAP error 2
  • transient pairing still runs M5/M6 → the receiver closes the connection after a successful M4
  • there is no encrypted control channel at all

So AirPlay pairing on master is broken in exactly the way #42 fixed, while looking like it was fixed. This restores it.

Why this is a replay, not a merge

The obvious repair — merge fix/airplay-hkp-header into master — is wrong and destructive. That branch was cut before #35, #36, #37, #39 and #40 merged, so its diff against master reads as:

crates/openplay-discovery/src/address.rs      | 135 -------   ← deletes #37 entirely
crates/openplay-sender/src/app.rs             | 244 ++-----   ← reverts #35 and #40
crates/openplay-pipeline/.../airplay_...rs    |  21 +-        ← reverts #36
crates/openplay-receiver/src/main.rs          |  20 +-        ← reverts #39

Merging it would silently undo five landed fixes to repair one. Only the range between #42 and its own parent is safe to replay, and that range touches nothing outside openplay-airplay:

 examples/control_probe.rs |  79 ++++++
 examples/pair_probe.rs    |  29 ++-
 src/control_channel.rs    | 213 ++++++++++++++
 src/hap_pairing.rs        |  55 +++-
 src/http_session.rs       |  46 ++++
 src/lib.rs                |   1 +
 src/session.rs            |  59 ++---
 src/srp.rs                |  16 +-

That is what this PR contains — #42's content, unchanged, on top of current master.

Verification

Note for future stacked PRs

Merging a stack bottom-up in quick succession does this silently. Either merge the top of the stack first, or re-target the child PR to master and let GitHub recompute its diff before merging.

#42 was merged twelve seconds after #41, into `fix/airplay-hkp-header` —
which #41 had just merged into master and left behind. The merge succeeded,
so nothing looked wrong, but the commits landed on a branch nothing points at
and master never received them.

Master therefore has the `X-Apple-HKP` header from #41 and none of what it was
a prerequisite for: the SRP proof still hashes g padded, transient pairing
still runs M5/M6 and gets the connection closed, and there is no encrypted
control channel. Pairing is broken on master in exactly the way #42 fixed.

This restores #42's own diff — the eight `openplay-airplay` files it actually
touched — on top of current master.

Deliberately *not* a merge of `fix/airplay-hkp-header`. That branch was cut
before #35, #36, #37, #39 and #40 merged, so a diff against it reads as
deleting `openplay-discovery/src/address.rs` and reverting 244 lines of
`openplay-sender/src/app.rs`. Merging it would silently undo five landed
fixes. Only the range between #42 and its own parent is safe to replay, and
that range touches nothing outside `openplay-airplay`.

Verified after the replay: 233 tests pass, clippy and fmt clean, and the work
from #35/#36/#37/#40 is still in the tree.
@Developer1010x
Developer1010x merged commit bd7060c into master Aug 26, 2026
5 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.

2 participants