Session Description Protocol (SDP) Simple Capability Declaration
Extracted elements (23)
Capability numbers are incremented by the number of formats in the fmt list (not by 1) to allow individual format-level addressing within a capability description, providing a handle for external reference mechanisms.
SDP conflates session parameters and capabilities without a clear distinction between the two. This document introduces a minimal, backwards-compatible capability declaration mechanism to address urgent needs of SIP and MGCP without waiting for the incompatible SDPng.
The capability description (cdsc) refers to send and receive capability by default because the mechanism is designed to express what an endpoint is capable of supporting, not what it commits to using — actual commitment is done via separate session negotiation (e.g., offer/answer).
The mechanism is explicitly backwards compatible with SDP: capability declarations are carried as standard SDP attributes and do not alter the semantics of 'm=' lines or other existing SDP fields. An endpoint not understanding simcap attributes will simply ignore them.
A given parameter MUST NOT be described by a 'cparmin' attribute more than once, and MUST NOT be described by a 'cparmax' attribute more than once.
A session description MUST NOT contain more than one capability set, though the capability set can describe capabilities at both the session and media level.
An endpoint MUST NOT include capabilities it knows it cannot use in a particular session. If a new capability set is received from the other endpoint, the old capability set MUST NOT be used any longer.
An endpoint receiving a capability set MUST NOT assume that a subsequent attempt to negotiate a media stream using just a declared media format will succeed.
Capability parameter lines for a capability description SHOULD immediately follow the 'cdsc' line they refer to.
It is RECOMMENDED that session-level capability descriptions with media type X, when no media streams of type X exist, be provided at the media-level instead to avoid ambiguity.
The capability set MUST begin with a single sequence number followed by one or more capability descriptions. If a media format is included in an 'm=' line, it MUST be included in either a session capability or a media stream capability for that media line.
The initial sequence number MUST be 0 and MUST be incremented by 1 modulo 256 with each new capability set issued. Receivers MUST NOT reject a capability set due to gaps in sequence numbers.
The sequence number MUST either be provided as a session-level or media-level attribute, and MUST NOT appear more than once in the session description.
When generating a capability set, the capability number MUST start with 1 in the first capability description, and be incremented by the number of media formats in the fmt list for each subsequent capability description. Receivers MUST NOT reject capability descriptions due to gaps in capability numbers.
A capability set consists of a sequence number (a=sqn) followed by one or more capability descriptions (a=cdsc). The set describes the complete media capabilities of the endpoint and supersedes any previous capability sets for the session.
Capability parameter lines (a=cpar, a=cparmin, a=cparmax) provide additional parameters for the preceding 'cdsc' line. 'cpar' specifies exact values, 'cparmin' specifies minimum numerical values, and 'cparmax' specifies maximum numerical values.
Each capability description (a=cdsc) contains a capability number, media type, transport, and format list — analogous to an SDP 'm=' line — and represents a send/receive capability by default.
Session-level capability descriptions apply to all media streams of the indicated media type, while media-level capability descriptions apply only to that particular media stream, regardless of media type.
This document registers five new SDP 'att-field' attributes: 'sqn' (sequence number), 'cdsc' (capability description), 'cpar' (capability parameter), 'cparmin' (minimum capability parameter), and 'cparmax' (maximum capability parameter), all applicable at both session-level and media-level.
Capability negotiation of security-sensitive parameters is a delicate process susceptible to downgrade attacks. Capability re-negotiation may also make the session susceptible to denial of service if authentication is not carefully designed.
Capability parameter lines have the forms 'a=cpar: <cap-par>', 'a=cparmin: <cap-par>', and 'a=cparmax: <cap-par>' where cap-par is either bandwidth information ('b=') or an attribute ('a=') in its full type=value form.
The capability description attribute has the form 'a=cdsc: <cap-num> <media> <transport> <fmt list>' where cap-num is an integer between 1 and 255 inclusive, and the remaining fields follow SDP 'm=' line syntax.
The sequence number attribute has the form 'a=sqn: <sqn-num>' where sqn-num is an integer between 0 and 255 inclusive.