Skip to content

feat: blind call transfer via REFER (RFC 3515)#45

Merged
wavekat-eason merged 1 commit into
mainfrom
feat/blind-transfer
Jun 28, 2026
Merged

feat: blind call transfer via REFER (RFC 3515)#45
wavekat-eason merged 1 commit into
mainfrom
feat/blind-transfer

Conversation

@wavekat-eason

Copy link
Copy Markdown
Contributor

What

Blind call transfer (RFC 3515) — the SIP signaling half of WaveKat Voice's call-transfer feature.

  • Call::blind_transfer(target) sends an in-dialog REFER with Refer-To and returns once the peer accepts (202).
  • Transfer-progress NOTIFYs (a message/sipfrag status line) are surfaced on the existing Call::inbound_requests stream; parse_sipfrag_status / is_final_sipfrag read the result so a consumer can drop its leg once the target answers.
  • The endpoint router now forwards inbound REFER / NOTIFY to the owning Call (instead of auto-200-ing them), so a consumer can also reject a peer-initiated transfer.

Attended transfer (Replaces, RFC 3891) is intentionally out of scope.

Tests

  • refer.rs unit tests (Refer-To header, sipfrag parsing, finality threshold).
  • stack::ua refer_sends_in_dialog_and_returns_202 — asserts the in-dialog REFER carries the target and is a non-INVITE transaction.
  • Full suite green; RFC-COVERAGE.md + CHANGELOG updated.

Consumed by wavekat-voice's blind-transfer PR, which patches to this branch until this releases.

🤖 Generated with Claude Code

https://claude.ai/code/session_01GKGMQeftv6ztjoq1zXCL7g

Call::blind_transfer sends an in-dialog REFER with Refer-To; the
transfer-progress NOTIFYs (message/sipfrag) arrive on the call's
inbound_requests stream and are parsed with parse_sipfrag_status /
is_final_sipfrag. Inbound REFER/NOTIFY now route to the owning Call
instead of being auto-answered, so a consumer can reject a
peer-initiated transfer or follow the sipfrag.

Attended transfer (Replaces, RFC 3891) is not included.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GKGMQeftv6ztjoq1zXCL7g
@wavekat-eason
wavekat-eason merged commit 97715b6 into main Jun 28, 2026
1 check passed
@wavekat-eason
wavekat-eason deleted the feat/blind-transfer branch June 28, 2026 08:51
@github-actions github-actions Bot mentioned this pull request Jun 28, 2026
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