Skip to content

Call accept stanza

Signalling - call-accept

SIG-03 - status: review - audio, video

The callee answers an offer with a stanza whose child selects the media format and commits the call to the v2 SRTP key path.

The <call> wrapper MUST carry to (the offering peer); it MAY omit id. The <accept> child MUST carry call-id and call-creator, both echoed verbatim from the offer.

<accept> children MUST appear in this order:

audio(rate)… → [te(priority=2)] → net(medium=2) → encopt(keygen=2)
             → [capability] → [rte] → [voip_settings]

Required children:

  • One <audio enc="opus" rate="…"> per accepted rate, in preference order, no body. rate="8000" selects 8 kHz narrowband Opus; rate="16000" selects 16 kHz.
  • <net medium="2"> — selects the relay transport medium (offer advertises medium="3"; accept commits to medium="2").
  • <encopt keygen="2"> — pins the v2 SRTP key derivation path (see srtp-master-key), matching the offer's encopt.

Optional children:

  • <te priority="2"> — relay transport-endpoint blob; MUST be placed immediately after the <audio> nodes.
  • <capability ver="1"> — body is the fixed 7-byte blob 01 05 f7 09 e4 bb 13.
  • <rte> — relay-token-extension blob, no attributes.
  • <voip_settings uncompressed="1"> — VoIP settings blob; MUST be the last child.

Requires: call-offer, call-preaccept, srtp-master-key
Breakdown: call-preaccept, flow-call-missed, flow-call-rejected, flow-incoming-1to1, flow-outgoing-1to1, video-call

Implemented by

Flavor Status Source Notes
whatsapp-rust working history - blame - commits 674e851
zapo-caller working

Annotation wacrg:SIG-03 — 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
Rajeh Taher Rajeh Taher wrote initial spec

protocol history / diff - blame

Open questions - Byte layout and semantics of the relay transport-endpoint blob. - Contents of the relay-token-extension blob and the body. - Whether the server enforces the child order with a 439-style rejection as it does for .

References - RFC 3711 — SRTP

Changelog

  • 2026-06-21 — Initial spec entry.

Back to the full spec