From 4bfd864f10b68b71482b35c818559068ef8d5797 Mon Sep 17 00:00:00 2001 From: Thomas Voss Date: Wed, 27 Nov 2024 20:54:24 +0100 Subject: doc: Add RFC documents --- doc/rfc/rfc3841.txt | 1459 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 1459 insertions(+) create mode 100644 doc/rfc/rfc3841.txt (limited to 'doc/rfc/rfc3841.txt') diff --git a/doc/rfc/rfc3841.txt b/doc/rfc/rfc3841.txt new file mode 100644 index 0000000..605981d --- /dev/null +++ b/doc/rfc/rfc3841.txt @@ -0,0 +1,1459 @@ + + + + + + +Network Working Group J. Rosenberg +Request for Comments: 3841 dynamicsoft +Category: Standards Track H. Schulzrinne + Columbia University + P. Kyzivat + Cisco Systems + August 2004 + + + Caller Preferences for the Session Initiation Protocol (SIP) + +Status of this Memo + + This document specifies an Internet standards track protocol for the + Internet community, and requests discussion and suggestions for + improvements. Please refer to the current edition of the "Internet + Official Protocol Standards" (STD 1) for the standardization state + and status of this protocol. Distribution of this memo is unlimited. + +Copyright Notice + + Copyright (C) The Internet Society (2004). + +Abstract + + 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. + + + + + + + + + + + + + + + + + + +Rosenberg, et al. Standards Track [Page 1] + +RFC 3841 Caller Preferences for SIP August 2004 + + +Table of Contents + + 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 2 + 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 4 + 3. Definitions . . . . . . . . . . . . . . . . . . . . . . . . . 4 + 4. Overview of Operation . . . . . . . . . . . . . . . . . . . . 4 + 5. UAC Behavior . . . . . . . . . . . . . . . . . . . . . . . . . 5 + 5.1. Request Handling Preferences . . . . . . . . . . . . . . 6 + 5.2. Feature Set Preferences . . . . . . . . . . . . . . . . 6 + 6. UAS Behavior . . . . . . . . . . . . . . . . . . . . . . . . . 8 + 7. Proxy Behavior . . . . . . . . . . . . . . . . . . . . . . . . 9 + 7.1. Request-Disposition Processing . . . . . . . . . . . . . 9 + 7.2. Preference and Capability Matching . . . . . . . . . . . 9 + 7.2.1. Extracting Explicit Preferences . . . . . . . . . 10 + 7.2.2. Extracting Implicit Preferences . . . . . . . . . 10 + 7.2.2.1. Methods. . . . . . . . . . . . . . . . . 10 + 7.2.2.2. Event Packages . . . . . . . . . . . . . 11 + 7.2.3. Constructing Contact Predicates . . . . . . . . . 11 + 7.2.4. Matching. . . . . . . . . . . . . . . . . . . . . 12 + 7.2.5. Example . . . . . . . . . . . . . . . . . . . . . 16 + 8. Mapping Feature Parameters to a Predicate. . . . . . . . . . . 17 + 9. Header Field Definitions . . . . . . . . . . . . . . . . . . . 19 + 9.1. Request Disposition . . . . . . . . . . . . . . . . . . 20 + 9.2. Accept-Contact and Reject-Contact Header Fields . . . . 21 + 10. Augmented BNF . . . . . . . . . . . . . . . . . . . . . . . . 22 + 11. Security Considerations . . . . . . . . . . . . . . . . . . . 22 + 12. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 23 + 13. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 23 + 14. References . . . . . . . . . . . . . . . . . . . . . . . . . . 24 + 14.1. Normative References . . . . . . . . . . . . . . . . . . 24 + 14.2. Informative References . . . . . . . . . . . . . . . . . 24 + 15. Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . 25 + 16. Full Copyright Statements. . . . . . . . . . . . . . . . . . . 26 + +1. Introduction + + When a Session Initiation Protocol (SIP) [1] server receives a + request, there are a number of decisions it can make regarding the + processing of the request. These include: + + o whether to proxy or redirect the request + + o which URIs to proxy or redirect to + + o whether to fork or not + + o whether to search recursively or not + + + + +Rosenberg, et al. Standards Track [Page 2] + +RFC 3841 Caller Preferences for SIP August 2004 + + + o whether to search in parallel or sequentially + + The server can base these decisions on any local policy. This policy + can be statically configured, or can be based on execution of a + program or database access. + + However, the administrator of the server is the not the only entity + with an interest in request processing. There are at least three + parties which have an interest: (1) the administrator of the server, + (2) the user that sent the request, and (3) the user to whom the + request is directed. The directives of the administrator are + embedded in the policy of the server. The preferences of the user to + whom the request is directed (referred to as the callee, even though + the request method may not be INVITE) can be expressed most easily + through a script written in some type of scripting language, such as + the Call Processing Language (CPL) [11]. However, no mechanism + exists to incorporate the preferences of the user that sent the + request (also referred to as the caller, even though the request + method may not be INVITE). For example, the caller might want to + speak to a specific user, but wants to reach them only at work, + because the call is a business call. As another example, the caller + might want to reach a user, but not their voicemail, since it is + important that the caller talk to the called party. In both of these + examples, the caller's preference amounts to having a proxy make a + particular routing choice based on the preferences of the caller. + + This extension allows the caller to have these preferences met. It + does so by specifying mechanisms by which a caller can provide + preferences on processing of a request. There are two types of + preferences. One of them, called request handling preferences, are + encapsulated in the Request-Disposition header field. They provide + specific request handling directives for a server. The other, called + feature preferences, is present in the Accept-Contact and Reject- + Contact header fields. They allow the caller to provide a feature + set [2] that expresses its preferences on the characteristics of the + UA that is to be reached. These are matched with a feature set + provided by a UA to its registrar [3]. The extension is very general + purpose, and not tied to a particular service. Rather, it is a tool + that can be used in the development of many services. + + One example of a service enabled by caller preferences is a "one + number" service. A user can have a single identity (their SIP URI) + for all of their devices - their cell phone, PDA, work phone, home + phone, and so on. If the caller wants to reach the user at their + business phone, they simply select "business phone" from a pull-down + menu of options when calling that URI. Users would no longer need to + maintain and distribute separate identities for each device. + + + + +Rosenberg, et al. Standards Track [Page 3] + +RFC 3841 Caller Preferences for SIP August 2004 + + +2. Terminology + + In this document, the key words "MUST", "MUST NOT", "REQUIRED", + "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", + and "OPTIONAL" are to be interpreted as described in BCP 14, RFC 2119 + [4] and indicate requirement levels for compliant implementations. + +3. Definitions + + Much of the terminology used in this specification is presented in + [3]. This specification defines the following additional terms: + + Caller: Within the context of this specification, a caller refers to + the user on whose behalf a UAC is operating. It is not limited to + a user whose UAC sends an INVITE request. + + Feature Preferences: Caller preferences that describe desired + properties of a UA to which the request is to be routed. Feature + preferences can be made explicit with the Accept-Contact and + Reject-Contact header fields. + + Request Handling Preferences: Caller preferences that describe + desired request treatment at a server. These preferences are + carried in the Request-Disposition header field. + + Target Set: A target set is a set of candidate URIs to which a proxy + or redirect server can send or redirect a request. Frequently, + target sets are obtained from a registration, but they need not + be. + + Explicit Preference: A caller preference indicated explicitly in the + Accept-Contact or Reject-Contact header fields. + + Implicit Preference: A caller preference that is implied through the + presence of other aspects of a request. For example, if the + request method is INVITE, it represents an implicit caller + preference to route the request to a UA that supports the INVITE + method. + +4. Overview of Operation + + When a caller sends a request, it can optionally include new header + fields which request certain handling at a server. These preferences + fall into two categories. The first category, called request + handling preferences, is carried in the Request-Disposition header + field. It describes specific behavior that is desired at a server. + Request handling preferences include whether the caller wishes the + + + + +Rosenberg, et al. Standards Track [Page 4] + +RFC 3841 Caller Preferences for SIP August 2004 + + + server to proxy or redirect, and whether sequential or parallel + search is desired. These preferences can be applied at every proxy + or redirect server on the call signaling path. + + The second category of preferences, called feature preferences, is + carried in the Accept-Contact and Reject-Contact header fields. + These header fields contain feature sets, represented by the same + feature parameters that are used to indicate capabilities [3]. Here, + the feature parameters represent the caller's preferences. The + Accept-Contact header field contains feature sets that describe UAs + that the caller would like to reach. The Reject-Contact header field + contains feature sets which, if matched by a UA, imply that the + request should not be routed to that UA. + + Proxies use the information in the Accept-Contact and Reject-Contact + header fields to select amongst contacts in their target set. When + neither of those header fields are present, the proxy computes + implicit preferences from the request. These are caller preferences + that are not explicitly placed into the request, but can be inferred + from the presence of other message components. As an example, if the + request method is INVITE, this is an implicit preference to route the + call to a UA that supports the INVITE method. + + Both request handling and feature preferences can appear in any + request, not just INVITE. However, they are only useful in requests + where proxies need to determine a request target. If the domain in + the request URI is not owned by any proxies along the request path, + those proxies will never access a location service, and therefore, + never have the opportunity to apply the caller preferences. This + makes sense because typically, the request URI will identify a UAS + for mid-dialog requests. In those cases, the routing decisions were + already made on the initial request, and it makes no sense to redo + them for subsequent requests in the dialog. + +5. UAC Behavior + + A caller wishing to express preferences for a request includes + Accept-Contact, Reject-Contact, or Request-Disposition header fields + in the request, depending on their particular preferences. No + additional behavior is required after the request is sent. + + The Accept-Contact, Reject-Contact, and Request-Disposition header + fields 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. This is to ensure proper operation + through stateless proxies. + + + + + +Rosenberg, et al. Standards Track [Page 5] + +RFC 3841 Caller Preferences for SIP August 2004 + + + If the UAC wants to determine whether servers along the path + understand the header fields described in this specification, it + includes a Proxy-Require header field with a value of "pref" [3] in + its request. If the request should fail with a 420 response code, + the UAC knows that the extension is not supported. In that case, it + SHOULD retry, and may decide whether or not to use caller + preferences. A UA should only use Proxy-Require if knowledge about + support is essential for handling of the request. Note that, in any + case, caller preferences can only be considered preferences - there + is no guarantee that the requested service will be executed. As + such, inclusion of a Proxy-Require header field does not mean that + the preferences will be executed, just that the caller preferences + extension is understood by the proxies. + +5.1. Request Handling Preferences + + The Request-Disposition header field specifies caller preferences for + how a server should process a request. Its value is a list of + tokens, each of which specifies a particular processing directive. + + The syntax of the header field can be found in Section 10, and the + semantics of the directives are described in Section 9.1. + +5.2. Feature Set Preferences + + A UAC can indicate caller preferences for the capabilities of a UA + that should be reached or not reached as a result of sending a SIP + request. To do that, it adds one or more Accept-Contact and Reject- + Contact header field values. Each header field value contains a set + of feature parameters that define a feature set. The syntax of the + header field can be found in Section 10, and a discussion of their + usage in Section 9.2. + + Each feature set is constructed as described in Section 5 of [3]. + The feature sets placed into these header fields MAY overlap; that + is, a UA MAY indicate preferences for feature sets that match + according to the matching algorithm of RFC 2533 [2]. + + A UAC can express explicit preferences for the methods and event + packages supported by a UA. It is RECOMMENDED that a UA include a + term in an Accept-Contact feature set with the "sip.methods" feature + tag (note, however, that even though the name of this feature tag is + sip.methods, it would be encoded into the Accept-Contact header field + as just "methods"), whose value includes the method of the request. + When a UA sends a SUBSCRIBE request, it is RECOMMENDED that a UA + include a term in an Accept-Contact feature set with the "sip.events" + feature tag, whose value includes the event package of the request. + Whether these terms are placed into a new feature set, or whether + + + +Rosenberg, et al. Standards Track [Page 6] + +RFC 3841 Caller Preferences for SIP August 2004 + + + they are included in each feature set, is at the discretion of the + implementor. In most cases, the right effect is achieved by + including a term in each feature set. + + As an example, the following Accept-Contact header field expresses a + desire to route a call to a mobile device, using feature parameters + taken from [3]: + + Accept-Contact: *;mobility="mobile";methods="INVITE" + + The Reject-Contact header field allows the UAC to specify that a UA + should not be contacted if it matches any of the values of the header + field. Each value of the Reject-Contact header field contains a "*", + purely to align the syntax with guidelines for SIP extensions [12], + and is parameterized by a set of feature parameters. Any UA whose + capabilities match the feature set described by the feature + parameters matches the value. + + The Accept-Contact header field allows the UAC to specify that a UA + should be contacted if it matches some or all of the values of the + header field. Each value of the Accept-Contact header field contains + a "*", and is parameterized by a set of feature parameters. Any UA + whose capabilities match the feature set described by the feature + parameters matches the value. The precise behavior depends heavily + on whether the "require" and "explicit" parameters are present. When + both of them are present, a proxy will only forward the request to + contacts which have explicitly indicated that they support the + desired feature set. Any others are discarded. As such, a UAC + should only use "require" and "explicit" together when it wishes the + call to fail unless a contact definitively matches. It's possible + that a UA supports a desired feature, but did not indicate it in its + registration. When a UAC uses both "explicit" and "require", such a + contact would not be reached. As a result, this combination is often + not the one a UAC will want. + + When only "require" is present, it means that a contact will not be + used if it doesn't match. If it does match, or if it's not known + whether it's a complete match, the contact is still used. A UAC + would use "require" alone when a non-matching contact is useless. + This is common for services where the request simply can't be + serviced without the necessary features. An example is support for + specific methods or event packages. When only "require" is present, + the proxy will also preferentially route the request to the UA which + represents the "best" match. Here, "best" means that the UA has + explicitly indicated it supports more of the desired features than + any other. Note, however, that this preferential routing will never + override an ordering provided by the called party. The preferential + routing will only choose amongst contacts of equal q-value. + + + +Rosenberg, et al. Standards Track [Page 7] + +RFC 3841 Caller Preferences for SIP August 2004 + + + When only "explicit" is present, it means that all contacts provided + by the callee will be used. However, if the contact isn't an + explicit match, it is tried last amongst all other contacts with the + same q-value. The principle difference, therefore, between this + configuration and the usage of both "require" and "explicit" is the + fallback behavior for contacts that don't match explicitly. Here, + they are tried as a last resort. If "require" is also present, they + are never tried. + + Finally, if neither "require" nor "explicit" are present, it means + that all contacts provided by the callee will be used. However, if + the contact doesn't match, it is tried last amongst all other + contacts with the same q-value. If it does match, the request is + routed preferentially to the "best" match. This is a common + configuration for preferences that, if not honored, will still allow + for a successful call, and the greater the match, the better. + +6. UAS Behavior + + When a UAS compliant to this specification receives a request whose + request-URI corresponds to one of its registered contacts, it SHOULD + apply the behavior described in Section 7.2 as if it were a proxy for + the domain in the request-URI. The UAS acts as if its location + database contains a single request target for the request-URI. That + target is associated with a feature set. The feature set is the same + as the one placed in the registration of the URI in the request-URI. + If a UA had registered against multiple separate addresses-of-record, + and the contacts registered for each had different capabilities, it + will have used a different URI in each registration, so it can + determine which feature set to use. + + This processing occurs after the client authenticates and authorizes + the request, but before the remainder of the general UAS processing + described in Section 8.2.1 of RFC 3261. + + If, after performing this processing, there are no URI left in the + target set, the UA SHOULD reject the request with a 480 response. If + there is a URI remaining (there was only one to begin with), the UA + proceeds with request processing as per RFC 3261. + + Having a UAS perform the matching operations as if it were a proxy + allows certain caller preferences to be honored, even if the proxy + doesn't support the extension. + + A UAS SHOULD process any queue directive present in a Request- + Disposition header field in the request. All other directives MUST + be ignored. + + + + +Rosenberg, et al. Standards Track [Page 8] + +RFC 3841 Caller Preferences for SIP August 2004 + + +7. Proxy Behavior + + Proxy behavior consists of two orthogonal sets of rules - one for + processing the Request-Disposition header field, and one for + processing the URI and feature set preferences in the Accept-Contact + and Reject-Contact header fields. + + In addition to processing these headers, a proxy MAY add one if not + present, or add a value to an existing header field, as if it were a + UAC. This is useful for a proxy to request processing in downstream + proxies in the implementation of a feature. However, a proxy MUST + NOT modify or remove an existing header field value. This is + particularly important when S/MIME is used. The message signature + could include the caller preferences header fields, allowing the UAS + to verify that, even though proxies may have added header fields, the + original caller preferences were still present. + +7.1. Request-Disposition Processing + + If the request contains a Request-Disposition header field and it is + the owner of the domain in the Request URI, the server SHOULD execute + the directives as described in Section 9.1, unless it has local + policy configured to direct it otherwise. + +7.2. Preference and Capability Matching + + A proxy compliant to this specification MUST NOT apply the + preferences matching operation described here to a request unless it + is the owner of the domain in the request URI, and accessing a + location service that has capabilities associated with request + targets. However, if it is the owner of the domain, and accessing a + location service that has capabilities associated with request + targets, it SHOULD apply the processing described in this section. + Typically, this is a proxy that is using a registration database to + determine the request targets. However, if a proxy knows about + capabilities through some other means, it SHOULD apply the processing + defined here as well. If it does perform the processing, it MUST do + so as described below. + + The processing is described through a conversion from the syntax + described in this specification to RFC 2533 [2] syntax, followed by a + matching operation and a sorting of resulting contact values. The + usage of RFC 2533 syntax as an intermediate step is not required; it + only serves as a useful tool to describe the behavior required of the + proxy. A proxy can use any steps it likes, so long as the results + are identical to the ones that would be achieved with the processing + described here. + + + + +Rosenberg, et al. Standards Track [Page 9] + +RFC 3841 Caller Preferences for SIP August 2004 + + +7.2.1. Extracting Explicit Preferences + + The first step in proxy processing is to extract explicit + preferences. To do that, it looks for the Accept-Contact and + Reject-Contact header fields. + + For each value of those header fields, it extracts the feature + parameters. These are the header field parameters whose name is + "audio", "automata", "class", "duplex", "data", "control", + "mobility", "description", "events", "priority", "methods", + "extensions", "schemes", "application", "video", "language", "type", + "isfocus", "actor", or "text", or whose name begins with a plus (+) + [3]. The proxy converts all of those parameters to the syntax of RFC + 2533, based on the rules in Section 8. + + The result will be a set of feature set predicates in conjunctive + normal form, each of which is associated with one of the two + preference header fields. If there was a req-parameter associated + with a header field value in the Accept-Contact header field, the + feature set predicate derived from that header field value is said to + have its require flag set. Similarly, if there was an explicit-param + associated with a header field value in the Accept-Contact header + field, the feature set predicate derived from that header field value + is said to have its explicit flag set. + +7.2.2. Extracting Implicit Preferences + + If, and only if, the proxy did not find any explicit preferences in + the request (because there was no Accept-Contact or Reject-Contact + header field), the proxy extracts implicit preferences. These + preferences are ones implied by the presence of other information in + the request. + + First, the proxy creates a conjunction with no terms. This + conjunction represents a feature set that will be associated with the + Accept-Contact header field, as if it were included there. Note that + there is no modification of the message implied - only an association + for the purposes of processing. Furthermore, this feature set has + its require flag set, but not its explicit flag. + + The proxy then adds terms to the conjunction for the two implicit + preference types below. + +7.2.2.1. Methods + + One implicit preference is the method. When a UAC sends a request + with a specific method, it is an implicit preference to have the + request routed only to UAs that support that method. To support this + + + +Rosenberg, et al. Standards Track [Page 10] + +RFC 3841 Caller Preferences for SIP August 2004 + + + implicit preference, the proxy adds a term to the conjunction of the + following form: + + (sip.methods=[method of request]) + +7.2.2.2. Event Packages + + For requests that establish a subscription [5], the Event header + field is another expression of an implicit preference. It expresses + a desire for the request to be routed only to a server that supports + the given event package. To support this implicit preference, the + proxy adds a term to the conjunction of the following form: + + (sip.events=[value of the Event header field]) + +7.2.3. Constructing Contact Predicates + + The proxy then takes each URI in the target set (the set of URI it is + going to proxy or redirect to), and obtains its capabilities as an + RFC 2533 formatted feature set predicate. This is called a contact + predicate. If the target URI was obtained through a registration, + the proxy computes the contact predicate by extracting the feature + parameters from the Contact header field [3] and then converting them + to a feature predicate. To extract the feature parameters, the proxy + follows these steps: + + 1. Create an initial, empty list of feature parameters. + + 2. If the Contact URI parameters included the "audio", "automata", + "class", "duplex", "data", "control", "mobility", "description", + "events", "priority", "methods", "schemes", "application", + "video", "actor", "language", "isfocus", "type", "extensions", or + "text" parameters, those are copied into the list. + + 3. If any Contact URI parameter name begins with a "+", it is copied + into the list if the list does not already contain that name with + the plus removed. In other words, if the "video" feature + parameter is in the list, the "+video" parameter would not be + placed into the list. This conflict should never arise if the + client were compliant to [3], since it is illegal to use the + + form for encoding of a feature tag in the base set. + + If the URI in the target set had no feature parameters, it is said to + be immune to caller preference processing. This means that the URI + is removed from the target set temporarily, the caller preferences + processing described below is executed, and then the URI is added + back in. + + + + +Rosenberg, et al. Standards Track [Page 11] + +RFC 3841 Caller Preferences for SIP August 2004 + + + Assuming the URI has feature parameters, they are converted to RFC + 2533 syntax using the rules of Section 8. + + The resulting predicate is associated with a q-value. If the contact + predicate was learned through a REGISTER request, the q-value is + equal to the q-value in the Contact header field parameter, else + "1.0" if not specified. + + As an example, consider the following registered Contact header + field: + + Contact: ;audio;video;mobility="fixed"; + +sip.message="TRUE";other-param=66372; + methods="INVITE,OPTIONS,BYE,CANCEL,ACK";schemes="sip,http" + + This would be converted into the following predicate: + + (& (sip.audio=TRUE) + (sip.video=TRUE) + (sip.mobility=fixed) + (sip.message=TRUE) + (| (sip.methods=INVITE) (sip.methods=OPTIONS) (sip.methods=BYE) + (sip.methods=CANCEL) (sip.methods=ACK)) + (| (sip.schemes=sip) (sip.schemes=http))) + + Note that "other-param" was not considered a feature parameter, since + it is neither a base tag nor did it begin with a leading +. + +7.2.4. Matching + + It is important to note that the proxy does not have to know anything + about the meaning of the feature tags that it is comparing in order + to perform the matching operation. The rules for performing the + comparison depend on syntactic hints present in the values of each + feature tag. For example, a predicate such as: + + (foo>=4) + + implies that the feature tag "foo" is a numeric value. The matching + rules in RFC 2533 only require an implementation to know whether the + feature tag is a numeric, token, or quoted string (booleans can be + treated as tokens). Quoted strings are always matched using a case- + sensitive matching operation. Tokens are matched using case- + insensitive matching. These two cases are differentiated by the + presence of angle brackets around the feature tag value. When these + brackets are present (i.e., ;+sip.foo=""), it implies case + + + + + +Rosenberg, et al. Standards Track [Page 12] + +RFC 3841 Caller Preferences for SIP August 2004 + + + sensitive string comparison. When they are not present, (i.e., + (;+sip.bar="val"), it implies case insensitivity. Numerics are + matched using normal mathematical comparisons. + + First, the proxy applies the predicates associated with the Reject- + Contact header field. + + For each contact predicate, each Reject-Contact predicate (that is, + each predicate associated with the Reject-Contact header field) is + examined. If that Reject-Contact predicate contains a filter for a + feature tag, and that feature tag is not present anywhere in the + contact predicate, that Reject-Contact predicate is discarded for the + processing of that contact predicate. If the Reject-Contact + predicate is not discarded, it is matched with the contact predicate + using the matching operation of RFC 2533 [2]. If the result is a + match, the URI corresponding to that contact predicate is discarded + from the target set. + + The result is that Reject-Contact will only discard URIs where the UA + has explicitly indicated support for the features that are not + wanted. + + Next, the proxy applies the predicates associated with the Accept- + Contact header field. For each contact that remains in the target + set, the proxy constructs a matching set, Ms. Initially, this set + contains all of the Accept-Contact predicates. Each of those + predicates is examined. It is matched with the contact predicate + using the matching operation of RFC 2533 [2]. If the result is not a + match, and the Accept-Contact predicate had its require flag set, the + URI corresponding to that contact predicate is discarded from the + target set. If the result is not a match, but the Accept-Contact + predicate did not have its require flag set, that contact URI is not + discarded from the target set, however, the Accept-Contact predicate + is removed from the matching set for that contact. + + For each contact that remains in the target set, the proxy computes a + score for that contact against each predicate in the contact's + matching set. Let the number of terms in the Accept-Contact + predicate conjunction be equal to N. Each term in that predicate + contains a single feature tag. If the contact predicate has a term + containing that same feature tag, the score is incremented by 1/N. + If the feature tag was not present in the contact predicate, the + score remains unchanged. Based on these rules, the score can range + between zero and one. + + + + + + + +Rosenberg, et al. Standards Track [Page 13] + +RFC 3841 Caller Preferences for SIP August 2004 + + + T + +----------> DROP Contact + | + | + / \ + / \ + T / \ F + +---->/require\------> Set score=0 + | \ / + | \ / + / \ \ / + / \ \/ + score<1 / \ + +-------> /explicit----> Score unchanged + | \ / F + | \ / + / \ \ / + / \ \/ + +--------+ / \ + -->|Compute |--> /Score \ --------> Score unchanged + | Score | \ / score=1 + +--------+ \ / + \ / + \/ + + Figure 1: Applying the Score + + The require and explicit tags are then applied, resulting in + potential modification of the score and the target set. This process + is summarized in Figure 1. If the score for the contact predicate + against that Accept-Contact predicate was less than one, the Accept- + Contact predicate had an explicit tag, and if the predicate also had + a require tag, the Contact URI corresponding to that contact + predicate is dropped. If, however, the predicate did not have a + require tag, the score is set to zero. If there was no explicit tag, + the score is unchanged. + + The next step is to combine the scores and the q-values associated + with the predicates in the matching set, to arrive at an overall + caller preference, Qa. For those URIs in the target set which + remain, there will be a score which indicates its match against each + Accept-Contact predicate in the matching set. If there are M + Accept-Contact predicates in the matching set, there will be M scores + S1 through SM, for each contact. The overall caller preference, Qa, + is the arithmetic average of S1 through SM. + + + + + + +Rosenberg, et al. Standards Track [Page 14] + +RFC 3841 Caller Preferences for SIP August 2004 + + + At this point, any URIs that were removed from the target set because + they were immune from caller preferences are added back in, and Qa + for that URI is set to 1.0. + + The purpose of the caller preference Qa is to provide an ordering for + any contacts remaining in the target set, if the callee has not + provided an ordering. To do this, the contacts remaining in the + target set are sorted by the q-value provided by the callee. Once + sorted, they are grouped into equivalence classes, such that all + contacts with the same q-value are in the same equivalence class. + Within each equivalence class, the contacts are then ordered based on + their values of Qa. The result is an ordered list of contacts that + is used by the proxy. + + If there were no URIs in the target set after the application of the + processing in this section, and the caller preferences were based on + implicit preferences (Section 7.2.2), the processing in this section + is discarded, and the original target set, ordered by their original + q-values, is used. + + This handles the case where implicit preferences for the method or + event packages resulted in the elimination of all potential + targets. By going back to the original target set, those URIs + will be tried, and result in the generation of a 405 or 489 + response. The UAC can then use this information to try again, or + report the error to the user. Without reverting to the original + target set, the UAC would see a 480 response, and have no + knowledge of why their request failed. Of course, the target set + can also be empty after the application of explicit preferences. + This will result in the generation of a 480 by the proxy. This + behavior is acceptable, and indeed, desirable in the case of + explicit preferences. When the caller makes an explicit + preference, it is agreeing that its request might fail because of + a preference mismatch. One might try to return an error + indicating the capabilities of the callee, so that the caller + could perhaps try again. However, doing so results in the leaking + of potentially sensitive information to the caller without + authorization from the callee, and therefore this specification + does not provide a means for it. + + If a proxy server is recursing, it adds the Contact header fields + returned in the redirect responses to the target set, and re-applies + the caller preferences algorithm. + + If the server is redirecting, it returns all entries in the target + set. It assigns q-values to those entries so that the ordering is + identical to the ordering determined by the processing above. + However, it MUST NOT include the feature parameters for the entries + + + +Rosenberg, et al. Standards Track [Page 15] + +RFC 3841 Caller Preferences for SIP August 2004 + + + in the target set. If it did, the upstream proxy server would apply + the same caller preferences once more, resulting in a double + application of those preferences. If the redirect server does wish + to include the feature parameters in the Contact header field, it + MUST redirect using the original target set and original q-values, + before the application of caller preferences. + +7.2.5. Example + + Consider the following example, which is contrived but illustrative + of the various components of the matching process. There are five + registered Contacts for sip:user@example.com. They are: + + Contact: sip:u1@h.example.com;audio;video;methods="INVITE,BYE";q=0.2 + Contact: sip:u2@h.example.com;audio="FALSE"; + methods="INVITE";actor="msg-taker";q=0.2 + Contact: sip:u3@h.example.com;audio;actor="msg-taker"; + methods="INVITE";video;q=0.3 + Contact: sip:u4@h.example.com;audio;methods="INVITE,OPTIONS";q=0.2 + Contact: sip:u5@h.example.com;q=0.5 + + An INVITE sent to sip:user@example.com contained the following caller + preferences header fields: + + Reject-Contact: *;actor="msg-taker";video + Accept-Contact: *;audio;require + Accept-Contact: *;video;explicit + Accept-Contact: *;methods="BYE";class="business";q=1.0 + + There are no implicit preferences in this example, because explicit + preferences are provided. + + The proxy first removes u5 from the target set, since it is immune + from caller preferences processing. + + Next, the proxy processes the Reject-Contact header field. It is a + match for all four remaining contacts, but only an explicit match for + u3. That is because u3 is the only one that explicitly indicated + support for video, and explicitly indicated it is a message taker. + So, u3 gets discarded, and the others remain. + + Next, each of the remaining three contacts is compared against each + of the three Accept-Contact predicates. u1 is a match to all three, + earning a score of 1.0 for the first two predicates, and 0.5 for the + third (the methods feature tag was present in the contact predicate, + but the class tag was not). u2 doesn't match the first predicate. + Because that predicate has a require tag, u2 is discarded. u4 + matches the first predicate, earning a score of 1.0. u4 matches the + + + +Rosenberg, et al. Standards Track [Page 16] + +RFC 3841 Caller Preferences for SIP August 2004 + + + second predicate, but since the match is not explicit (the score is + 0.0, in fact), the score is set to zero (it was already zero, so + nothing changes). u4 does not match the third predicate. + + At this point, u1 and u4 remain. u1 matched all three Accept-Contact + predicates, so its matching set contains all three, with scores of 1, + 1, and 0.5. u4 matches the first two predicates, with scores of 1.0 + and 0.0. Qa for u1 is 0.83 and Qa for u4 is 0.5. u5 is added back + in with a Qa of 1.0. + + Next, the remaining contacts in the target set are sorted by q-value. + u5 has a value of 0.5, u1 has a q-value of 0.2 and so does u4. There + are two equivalence classes. The first has a q-value of 0.5, and + consists of just u5. Since there is only one member of the class, + sorting within the class has no impact. The second equivalence class + has a q-value of 0.2. Within that class, the two contacts, u1 and + u4, are ordered based on their values of Qa. u1 has a Qa of 0.83, + and u4, a Qa of 0.5. Thus, u1 comes first, followed by u4. The + resulting overall ordered set of contacts in the target set is u5, + u1, and then u4. + +8. Mapping Feature Parameters to a Predicate + + Mapping between feature parameters and a feature set predicate, + formatted according to the syntax of RFC 2533 [2], is trivial. It is + just the opposite of the process described in Section 5 of [3]. + + Starting from a set of feature-param, the procedure is as follows. + Construct a conjunction. Each term in the conjunction derives from + one feature-param. If the feature-param has no value, it is + equivalent, in terms of the processing which follows, as if it had a + value of "TRUE". + + If the feature-param value is a tag-value-list, the element of the + conjunction is a disjunction. There is one term in the disjunction + for each tag-value in the tag-value-list. + + Consider now the construction of a filter from a tag-value. If the + tag-value starts with an exclamation mark (!), the filter is of the + form: + + (! ) + + where "" refers to the filter that would be + constructed from the tag-value if the exclamation mark had not been + present. + + + + + +Rosenberg, et al. Standards Track [Page 17] + +RFC 3841 Caller Preferences for SIP August 2004 + + + If the tag-value starts with an octothorpe (#), the filter is a + numeric comparison. The comparator is either =, >=, <=, or a range + based on the next characters in the phrase. If the next characters + are =, >=, or <=, the filter is of the form: + + (name comparator compare-value) + + where name is the name of the feature parameter after it has been + decoded (see below), and the comparator is either =, >=, or <= + depending of the initial characters in the phrase. If the remainder + of the text in the tag-value after the equal contains a decimal point + (implying a rational number), the decimal point is shifted right N + times until it is an integer, I. Compare-value above is then set to + "I / 10**N", where 10**N is the result of computing the number 10 to + the Nth power. + + If the value after the octothorpe is a number, the filter is a range. + The format of the filter is: + + (name=) + + where "name" is the feature-tag after it has been decoded (see + below), and "" is the remainder of the text in the tag- + value after the #, with any decimal numbers converted to a rational + form, and the colon replaced by a double dot (..). + + If the tag-value does not begin with an octothorpe (it is a token- + nobang or boolean), the filter is of the form: + + (name=tag-value) + + where name is the feature-tag after it has been decoded (see below). + + If the feature-param contains a string-value (based on the fact that + it begins with a left angle bracket ("<") and ends with a right angle + bracket (">")), the filter is of the form: + + (name="qdtext") + + Note the explicit usage of quotes around the qdtext, which indicate + that the value is a string. In RFC 2533, strings are compared using + case sensitive rules, and tokens are compared using case insensitive + rules. + + Feature tags, as specified in RFC 2506 [13], cannot be directly + represented as header field parameters in the Contact, Accept- + Contact, and Reject-Contact header fields. This is due to an + inconsistency in the grammars, and in the need to differentiate + + + +Rosenberg, et al. Standards Track [Page 18] + +RFC 3841 Caller Preferences for SIP August 2004 + + + feature parameters from parameters used by other extensions. As + such, feature tag values are encoded from RFC 2506 format to yield an + enc-feature-tag, and then are decoded into RFC 2506 format. The + decoding process is simple. If there is a leading plus (+) sign, it + is removed. Any exclamation point (!) is converted to a colon (:) + and any single quote (') is converted to a forward slash (/). If + there was no leading plus sign, and the remainder of the encoded name + was "audio", "automata", "class", "duplex", "data", "control", + "mobility", "description", "events", "priority", "methods", + "schemes", "application", "video", "actor", "isfocus", "extensions" + or "text", the prefix "sip." is added to the remainder of the encoded + name to compute the feature tag name. + + As an example, the Accept-Contact header field: + + Accept-Contact:*;mobility="fixed" + ;events="!presence,message-summary" + ;language="en,de";description="";+sip.newparam + ;+rangeparam="#-4:+5.125" + + would be converted to the following feature predicate: + + (& (sip.mobility=fixed) + (| (! (sip.events=presence)) (sip.events=message-summary)) + (| (language=en) (language=de)) + (sip.description="PC") + (sip.newparam=TRUE) + (rangeparam=-4..5125/1000)) + +9. Header Field Definitions + + This specification defines three new header fields - Accept-Contact, + Reject-Contact, and Request-Disposition. + + Figure 2 and Figure 3 are an extension of Tables 2 and 3 in RFC 3261 + [1] for the Accept-Contact, Reject-Contact, and Request-Disposition + header fields. The column "INF" is for the INFO method [6], "PRA" is + for the PRACK method [7], "UPD" is for the UPDATE method [8], "SUB" + is for the SUBSCRIBE method [5], "NOT" is for the NOTIFY method [5], + "MSG" is for the MESSAGE method [9], and "REF" is for the REFER + method [10]. + + + + + + + + + + +Rosenberg, et al. Standards Track [Page 19] + +RFC 3841 Caller Preferences for SIP August 2004 + + + Header field where proxy ACK BYE CAN INV OPT REG + + Accept-Contact R ar o o o o o - + Reject-Contact R ar o o o o o - + Request-Disposition R ar o o o o o o + + Figure 2: Accept-Contact, Reject-Contact, and Request-Disposition + header fields + + Header field where proxy PRA UPD SUB NOT INF MSG REF + + Accept-Contact R ar o o o o o o o + Reject-Contact R ar o o o o o o o + Request-Disposition R ar o o o o o o o + + Figure 3: Accept-Contact, Reject-Contact, and Request-Disposition + header fields + +9.1. Request Disposition + + The Request-Disposition header field specifies caller preferences for + how a server should process a request. Its value is a list of + tokens, each of which specifies a particular directive. Its syntax + is specified in Section 10. Note that a compact form, using the + letter d, has been defined. The directives are grouped into types. + There can only be one directive of each type per request (e.g., you + cannot have both "proxy" and "redirect" in the same Request- + Disposition header field). + + When the caller specifies a directive, the server SHOULD honor that + directive. + + The following types of directives are defined: + + proxy-directive: This type of directive indicates whether the caller + would like each server to proxy ("proxy") or redirect + ("redirect"). + + cancel-directive: This type of directive indicates whether the caller + would like each proxy server to send a CANCEL request downstream + ("cancel") in response to a 200 OK from the downstream server + (which is the normal mode of operation, making it redundant), or + whether this function should be left to the caller ("no-cancel"). + If a proxy receives a request with this parameter set to "no- + cancel", it SHOULD NOT CANCEL any outstanding branches upon + receipt of a 2xx. However, it would still send CANCEL on any + outstanding branches upon receipt of a 6xx. + + + + +Rosenberg, et al. Standards Track [Page 20] + +RFC 3841 Caller Preferences for SIP August 2004 + + + fork-directive: This type of directive indicates whether a proxy + should fork a request ("fork"), or proxy to only a single address + ("no-fork"). If the server is requested not to fork, the server + SHOULD proxy the request to the "best" address (generally the one + with the highest q-value). If there are multiple addresses with + the highest q-value, the server chooses one based on its local + policy. The directive is ignored if "redirect" has been + requested. + + recurse-directive: This type of directive indicates whether a proxy + server receiving a 3xx response should send requests to the + addresses listed in the response ("recurse"), or forward the list + of addresses upstream towards the caller ("no-recurse"). The + directive is ignored if "redirect" has been requested. + + parallel-directive: For a forking proxy server, this type of + directive indicates whether the caller would like the proxy server + to proxy the request to all known addresses at once ("parallel"), + or go through them sequentially, contacting the next address only + after it has received a non-2xx or non-6xx final response for the + previous one ("sequential"). The directive is ignored if + "redirect" has been requested. + + queue-directive: If the called party is temporarily unreachable, + e.g., because it is in another call, the caller can indicate that + it wants to have its call queued ("queue") or rejected immediately + ("no-queue"). If the call is queued, the server returns "182 + Queued". A queued call can be terminated as described in [1]. + + Example: + + Request-Disposition: proxy, recurse, parallel + + The set of request disposition directives is not extensible on + purpose. This is to avoid a proliferation of new extensions to SIP + that are "tunneled" through this header field. + +9.2. Accept-Contact and Reject-Contact Header Fields + + The syntax for these header fields is described in Section 10. A + compact form, with the letter a, has been defined for the Accept- + Contact header field, and with the letter j for the Reject-Contact + header field. + + + + + + + + +Rosenberg, et al. Standards Track [Page 21] + +RFC 3841 Caller Preferences for SIP August 2004 + + +10. Augmented BNF + + The BNF for the Request-Disposition header field is: + + Request-Disposition = ( "Request-Disposition" / "d" ) HCOLON + directive *(COMMA directive) + directive = proxy-directive / cancel-directive / + fork-directive / recurse-directive / + parallel-directive / queue-directive + proxy-directive = "proxy" / "redirect" + cancel-directive = "cancel" / "no-cancel" + fork-directive = "fork" / "no-fork" + recurse-directive = "recurse" / "no-recurse" + parallel-directive = "parallel" / "sequential" + queue-directive = "queue" / "no-queue" + + The BNF for the Accept-Contact and Reject-Contact header fields is: + + Accept-Contact = ("Accept-Contact" / "a") HCOLON ac-value + *(COMMA ac-value) + Reject-Contact = ("Reject-Contact" / "j") HCOLON rc-value + *(COMMA rc-value) + ac-value = "*" *(SEMI ac-params) + rc-value = "*" *(SEMI rc-params) + ac-params = feature-param / req-param + / explicit-param / generic-param + ;;feature param from RFC 3840 + ;;generic-param from RFC 3261 + rc-params = feature-param / generic-param + req-param = "require" + explicit-param = "explicit" + + Despite the BNF, there MUST NOT be more than one req-param or + explicit-param in an ac-params. Furthermore, there can only be one + instance of any feature tag in feature-param. + +11. Security Considerations + + The presence of caller preferences in a request has an effect on the + ways in which the request is handled at a server. As a result, + requests with caller preferences SHOULD be integrity-protected with + the sips mechanism specified in RFC 3261, Section 26. + + Processing of caller preferences requires set operations and searches + which can require some amount of computation. This enables a DOS + attack whereby a user can send requests with substantial numbers of + + + + + +Rosenberg, et al. Standards Track [Page 22] + +RFC 3841 Caller Preferences for SIP August 2004 + + + caller preferences, in the hopes of overloading the server. To + counter this, servers SHOULD reject requests with too many rules. A + reasonable number is around 20. + +12. IANA Considerations + + This specification registers three new SIP header fields, according + to the process of RFC 3261 [1]. + + The following is the registration for the Accept-Contact header + field: + + RFC Number: RFC 3841 + + Header Field Name: Accept-Contact + + Compact Form: a + + The following is the registration for the Reject-Contact header + field: + + RFC Number: RFC 3841 + + Header Field Name: Reject-Contact + + Compact Form: j + + The following is the registration for the Request-Disposition header + field: + + RFC Number: RFC 3841 + + Header Field Name: Request-Disposition + + Compact Form: d + +13. Acknowledgments + + The initial set of media feature tags used by this specification were + influenced by Scott Petrack's CMA design. Jonathan Lennox, Bob + Penfield, Ben Campbell, Mary Barnes, Rohan Mahy, and John Hearty + provided helpful comments. Graham Klyne provided assistance on the + usage of RFC 2533. + + + + + + + + +Rosenberg, et al. Standards Track [Page 23] + +RFC 3841 Caller Preferences for SIP August 2004 + + +14. References + +14.1. Normative References + + [1] Rosenberg, J., Schulzrinne, H., Camarillo, G., Johnston, A., + Peterson, J., Sparks, R., Handley, M., and E. Schooler, "SIP: + Session Initiation Protocol", RFC 3261, June 2002. + + [2] Klyne, G., "A Syntax for Describing Media Feature Sets", RFC + 2533, March 1999. + + [3] Rosenberg, J., Schulzrinne, J., and P. Kyzivat, "Indicating + User Agent Capabilities in the Session Initiation Protocol + (SIP)", RFC 3840, August 2004. + + [4] Bradner, S., "Key words for use in RFCs to Indicate Requirement + Levels", BCP 14, RFC 2119, March 1997. + + [5] Roach, A.B., "Session Initiation Protocol (SIP)-Specific Event + Notification", RFC 3265, June 2002. + + [6] Donovan, S., "The SIP INFO Method", RFC 2976, October 2000. + + [7] Rosenberg, J. and H. Schulzrinne, "Reliability of Provisional + Responses in Session Initiation Protocol (SIP)", RFC 3262, June + 2002. + + [8] Rosenberg, J., "The Session Initiation Protocol (SIP) UPDATE + Method", RFC 3311, October 2002. + + [9] Campbell, B., Ed., Rosenberg, J., Schulzrinne, H., Huitema, C., + and D. Gurle, "Session Initiation Protocol (SIP) Extension for + Instant Messaging", RFC 3428, December 2002. + + [10] Sparks, R., "The Session Initiation Protocol (SIP) Refer + Method", RFC 3515, April 2003. + +14.2. Informative References + + [11] Lennox, J. and H. Schulzrinne, "Call Processing Language + Framework and Requirements", RFC 2824, May 2000. + + [12] Rosenberg, J., "Guidelines for Authors of Extensions to the + Session Initiation Protocol (SIP)", Work in Progress, November + 2002. + + [13] Holtman, K., Muntz, A., and T. Hardie, "Media Feature Tag + Registration Procedure", BCP 31, RFC 2506, March 1999. + + + +Rosenberg, et al. Standards Track [Page 24] + +RFC 3841 Caller Preferences for SIP August 2004 + + +15. Authors' Addresses + + Jonathan Rosenberg + dynamicsoft + 600 Lanidex Plaza + Parsippany, NJ 07054 + US + + Phone: +1 973 952-5000 + EMail: jdrosen@dynamicsoft.com + URI: http://www.jdrosen.net + + + Henning Schulzrinne + Columbia University + M/S 0401 + 1214 Amsterdam Ave. + New York, NY 10027 + US + + EMail: schulzrinne@cs.columbia.edu + URI: http://www.cs.columbia.edu/~hgs + + + Paul Kyzivat + Cisco Systems + 1414 Massachusetts Avenue + BXB500 C2-2 + Boxboro, MA 01719 + US + + EMail: pkyzivat@cisco.com + + + + + + + + + + + + + + + + + + + +Rosenberg, et al. Standards Track [Page 25] + +RFC 3841 Caller Preferences for SIP August 2004 + + +16. Full Copyright Statement + + Copyright (C) The Internet Society (2004). This document is subject + to the rights, licenses and restrictions contained in BCP 78, and + except as set forth therein, the authors retain all their rights. + + This document and the information contained herein are provided on an + "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS + OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET + ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, + INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE + INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED + WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. + +Intellectual Property + + The IETF takes no position regarding the validity or scope of any + Intellectual Property Rights or other rights that might be claimed to + pertain to the implementation or use of the technology described in + this document or the extent to which any license under such rights + might or might not be available; nor does it represent that it has + made any independent effort to identify any such rights. Information + on the procedures with respect to rights in RFC documents can be + found in BCP 78 and BCP 79. + + Copies of IPR disclosures made to the IETF Secretariat and any + assurances of licenses to be made available, or the result of an + attempt made to obtain a general license or permission for the use of + such proprietary rights by implementers or users of this + specification can be obtained from the IETF on-line IPR repository at + http://www.ietf.org/ipr. + + The IETF invites any interested party to bring to its attention any + copyrights, patents or patent applications, or other proprietary + rights that may cover technology that may be required to implement + this standard. Please address the information to the IETF at ietf- + ipr@ietf.org. + +Acknowledgement + + Funding for the RFC Editor function is currently provided by the + Internet Society. + + + + + + + + + +Rosenberg, et al. Standards Track [Page 26] + -- cgit v1.2.3