Call offer stanza¶
Signalling - call-offer
SIG-01 - status: review - audio, video
A caller opens a 1:1 call with a
Send a top-level <call> stanza with id (stanza id, correlates the server
<ack>), from, and to. Its <offer> child MUST carry call-id (opaque
logical call identifier, echoed in every later stanza for this call) and
call-creator.
<offer> children MUST appear in this exact order; a mis-ordered offer is
rejected by the server with error 439:
privacy → audio(8000) → audio(16000) → net(medium) → capability
→ (destination | enc) → encopt(keygen) → device-identity
- Media: two nodes
<audio enc="opus" rate="8000">and<audio enc="opus" rate="16000">. <capability ver="1">body MUST be the fixed 7-byte blob01 05 f7 09 e4 bb 13.<encopt keygen="2">selects the v2 SRTP key path.- Each recipient device MUST receive its own
<enc>node carrying the call key encrypted to that device's Signal session:type="pkmsg"to establish,type="msg"to reuse. A multi-device callee receives several<enc>nodes.
Breakdown: call-key, group-call-crypto, srtp-master-key, warp-crypto, opus, video-packetization, stun-relay, call-accept, call-ack, call-mute, call-preaccept, call-reject, call-relaylatency, call-terminate, call-transport, flow-call-missed, flow-call-rejected, flow-incoming-1to1, flow-outgoing-1to1, group-call, video-call
Implemented by
| Flavor | Status | Source | Notes |
|---|---|---|---|
whatsapp-rust |
working | history - blame - commits 674e851 |
— |
zapo-caller |
working | — | — |
Annotation wacrg:SIG-01 — a flavor marks its implementation site in source with this comment; a script clones the source, finds it, and attaches the commit blame/permalink.
Contributors
| Contributor | Role |
|---|---|
| wrote initial spec |
protocol history / diff - blame
Open questions
- Full meaning of the packed
References - Signal Protocol (X3DH + Double Ratchet)
Changelog¶
- 2026-06-21 — Initial spec entry.