rfc-3841

Caller Preferences for the Session Initiation Protocol (SIP)

J. Rosenberg, H. Schulzrinne, P. Kyzivat
date2004-08 streamIETF arearai wgsip statusPROPOSED STANDARD pages26 canonicalhttps://www.rfc-editor.org/rfc/rfc3841 doi10.17487/RFC3841
This document describes a set of extensions to the Session Initiation Protocol (SIP) which allow a caller to express preferences about request handling in servers. These preferences include the ability to select which Uniform Resource Identifiers (URI) a request gets routed to, and to specify certain request handling directives in proxies and redirect servers. It does so by defining three new request header fields, Accept-Contact, Reject-Contact, and Request-Disposition, which specify the caller's preferences. [STANDARDS-TRACK]

Extracted elements (27)

design-rationale §7.2.4

Reject-Contact is designed to only discard contacts where the UA has explicitly indicated support for the unwanted features. A Reject-Contact predicate is discarded for a given contact if any feature tag in the predicate is absent from the contact predicate, preventing rejection of contacts that simply haven't declared the feature.

sip, realtime

design-rationale §9.1

The set of Request-Disposition directives is intentionally non-extensible to avoid proliferation of new SIP extensions tunneled through this header field.

sip, realtime

design-rationale §7.2.4

When implicit preferences cause the elimination of all potential targets, the proxy reverts to the original target set ordered by q-values rather than returning a 480. This ensures the UAC receives a 405 or 489 explaining why the request failed, rather than a misleading 480 with no indication of the true cause.

sip, realtime

normative-requirement §7.2 MUST NOT

A proxy MUST NOT apply the preferences matching operation unless it is the owner of the domain in the request URI and is accessing a location service that has capabilities associated with request targets. If it does perform matching, it MUST do so as described in Section 7.2.

sip, realtime

normative-requirement §7 MUST NOT

A proxy MUST NOT modify or remove an existing caller preferences header field value. This is particularly important when S/MIME is used, as the message signature may include these header fields.

sip, realtime, security

normative-requirement §7.2.4 MUST NOT

A redirect server returning contacts MUST NOT include feature parameters for entries in the target set after applying caller preferences, to prevent double application. If feature parameters are desired, it MUST redirect using the original target set and q-values before preference application.

sip, realtime

normative-requirement §6 MUST

A UAS SHOULD process any queue directive present in a Request-Disposition header field. All other Request-Disposition directives MUST be ignored by the UAS.

sip, realtime

normative-requirement §5 MUST

Header fields Accept-Contact, Reject-Contact, and Request-Disposition included in an ACK for a non-2xx final response, or in a CANCEL request, MUST be equal to the values in the original request being acknowledged or cancelled, to ensure proper operation through stateless proxies.

sip, realtime

normative-requirement §9.1 SHOULD NOT

If a proxy server receives a request with the cancel-directive set to 'no-cancel', it SHOULD NOT CANCEL any outstanding branches upon receipt of a 2xx. It would still send CANCEL on outstanding branches upon receipt of a 6xx.

sip, realtime

normative-requirement §6 SHOULD

If, after performing preference matching processing, a UAS finds no URIs remaining in the target set, it SHOULD reject the request with a 480 response.

sip, realtime

normative-requirement §5.2 RECOMMENDED

It is RECOMMENDED that a UAC include a term in an Accept-Contact feature set with the 'sip.methods' feature tag whose value includes the method of the request. For SUBSCRIBE, it is RECOMMENDED to include a term with the 'sip.events' feature tag matching the event package.

sip, realtime

normative-requirement §10 MUST NOT

The BNF grammar requires that there MUST NOT be more than one req-param or explicit-param in an ac-params, and there can only be one instance of any feature tag in a feature-param.

sip, realtime

normative-requirement §6 SHOULD

When a UAS receives a request whose request-URI corresponds to one of its registered contacts, it SHOULD apply the preference and capability matching behavior described in Section 7.2 as if it were a proxy, allowing caller preferences to be honored even if the proxy doesn't support the extension.

sip, realtime

protocol-element §7.2.3

Contact predicates are constructed from feature parameters in registered Contact header fields. URIs with no feature parameters are treated as immune to caller preference processing: they are temporarily removed, preference processing is applied to the remainder, and then added back with Qa=1.0.

sip, realtime

protocol-element §8

Feature parameters are mapped to RFC 2533 conjunctive normal form predicates. Base feature tag names (e.g., 'audio', 'video', 'methods') get the 'sip.' prefix added; tags with a leading '+' have the '+' stripped; '!' is negation; '#' prefix signals numeric comparison; angle-bracket-quoted values use case-sensitive string matching.

sip, realtime

protocol-element §7.2.2

Implicit preferences are derived by a proxy when no explicit Accept-Contact or Reject-Contact header fields are present. The proxy infers preferences from the request method (route to UAs supporting that method) and, for subscriptions, from the Event header field (route to UAs supporting that event package).

sip, realtime

protocol-element §9

RFC 3841 defines three new SIP request header fields: Accept-Contact (compact form 'a'), Reject-Contact (compact form 'j'), and Request-Disposition (compact form 'd'). Accept-Contact and Reject-Contact carry feature set preferences; Request-Disposition carries request handling directives.

sip, realtime

protocol-element §9.2

The Accept-Contact header field contains feature sets (parameterized with '*') describing UAs the caller wishes to reach. Optional 'require' and 'explicit' parameters control whether non-matching contacts are discarded or merely deprioritized.

sip, realtime

protocol-element §7.2.4

The matching algorithm computes a score (0 to 1) per contact against each Accept-Contact predicate by counting the fraction of predicate feature tags explicitly present in the contact predicate. The overall caller preference Qa is the arithmetic average of all per-predicate scores. Contacts are sorted first by callee-provided q-value, then within each equivalence class by Qa.

sip, realtime

protocol-element §9.2

The Reject-Contact header field contains feature sets (parameterized with '*') describing UAs that should not be contacted. A contact is discarded only if it explicitly indicates support for the features listed in a Reject-Contact predicate.

sip, realtime

protocol-element §9.1

The Request-Disposition header field carries a list of directive tokens grouped by type: proxy-directive (proxy/redirect), cancel-directive (cancel/no-cancel), fork-directive (fork/no-fork), recurse-directive (recurse/no-recurse), parallel-directive (parallel/sequential), and queue-directive (queue/no-queue). Only one directive of each type is permitted per request.

sip, realtime

registry §12

Three new SIP header fields are registered per RFC 3261 procedures: Accept-Contact (compact form 'a'), Reject-Contact (compact form 'j'), and Request-Disposition (compact form 'd'), all defined in RFC 3841.

sip, registry, realtime

security-consideration §11 SHOULD

Processing caller preferences requires set operations and searches that can consume significant computation, enabling a DoS attack via requests with large numbers of caller preferences. Servers SHOULD reject requests with too many rules; a reasonable limit is around 20.

sip, security, realtime

security-consideration §11 SHOULD

Requests containing caller preferences SHOULD be integrity-protected using the SIPS mechanism specified in RFC 3261 Section 26, because caller preferences affect request handling at servers and could be maliciously altered.

sip, security, realtime

security-consideration §7.2.4

When the caller preferences target set is empty after explicit preference processing, the proxy returns a 480 without indicating the callee's capabilities. Revealing capabilities without callee authorization would leak potentially sensitive information, so the specification deliberately provides no mechanism for it.

sip, security, privacy, realtime

wire-format §10

Accept-Contact BNF: ('Accept-Contact' / 'a') HCOLON ac-value *(COMMA ac-value), where ac-value = '*' *(SEMI ac-params) and ac-params includes feature-param, req-param ('require'), explicit-param ('explicit'), or generic-param.

sip, realtime

wire-format §10

Request-Disposition BNF: ('Request-Disposition' / 'd') HCOLON directive *(COMMA directive), where directive is one of proxy-directive, cancel-directive, fork-directive, recurse-directive, parallel-directive, or queue-directive, each being a pair of mutually exclusive token values.

sip, realtime