[sipcore] 4244bis-05: Semantics of History-Info
"Worley, Dale R (Dale)" <dworley@avaya.com> Mon, 20 June 2011 02:52 UTC
Return-Path: <dworley@avaya.com>
X-Original-To: sipcore@ietfa.amsl.com
Delivered-To: sipcore@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 7C0F922800C for <sipcore@ietfa.amsl.com>; Sun, 19 Jun 2011 19:52:59 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -103.431
X-Spam-Level:
X-Spam-Status: No, score=-103.431 tagged_above=-999 required=5 tests=[AWL=0.168, BAYES_00=-2.599, RCVD_IN_DNSWL_LOW=-1, USER_IN_WHITELIST=-100]
Received: from mail.ietf.org ([64.170.98.30]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 7P1Fo79SgWSc for <sipcore@ietfa.amsl.com>; Sun, 19 Jun 2011 19:52:58 -0700 (PDT)
Received: from de307622-de-outbound.net.avaya.com (de307622-de-outbound.net.avaya.com [198.152.71.100]) by ietfa.amsl.com (Postfix) with ESMTP id BB48F228008 for <sipcore@ietf.org>; Sun, 19 Jun 2011 19:52:57 -0700 (PDT)
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: AhkGANq0/k3GmAcF/2dsb2JhbABSpltwB6glg2oCmkyGKgSWW4sg
X-IronPort-AV: E=Sophos;i="4.65,390,1304308800"; d="scan'208";a="252171149"
Received: from unknown (HELO co300216-co-erhwest.avaya.com) ([198.152.7.5]) by de307622-de-outbound.net.avaya.com with ESMTP; 19 Jun 2011 22:52:55 -0400
Received: from unknown (HELO DC-US1HCEX4.global.avaya.com) ([135.11.52.35]) by co300216-co-erhwest-out.avaya.com with ESMTP; 19 Jun 2011 22:52:38 -0400
Received: from DC-US1MBEX4.global.avaya.com ([169.254.2.172]) by DC-US1HCEX4.global.avaya.com ([135.11.52.35]) with mapi; Sun, 19 Jun 2011 22:52:54 -0400
From: "Worley, Dale R (Dale)" <dworley@avaya.com>
To: "sipcore@ietf.org" <sipcore@ietf.org>
Date: Sun, 19 Jun 2011 22:48:49 -0400
Thread-Topic: 4244bis-05: Semantics of History-Info
Thread-Index: AQHMLvUmSuWIGmIhe0mkrHHB6J8m8w==
Message-ID: <CD5674C3CD99574EBA7432465FC13C1B222B1F56C7@DC-US1MBEX4.global.avaya.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
acceptlanguage: en-US
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
Subject: [sipcore] 4244bis-05: Semantics of History-Info
X-BeenThere: sipcore@ietf.org
X-Mailman-Version: 2.1.12
Precedence: list
List-Id: SIP Core Working Group <sipcore.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/sipcore>, <mailto:sipcore-request@ietf.org?subject=unsubscribe>
List-Archive: <http://www.ietf.org/mail-archive/web/sipcore>
List-Post: <mailto:sipcore@ietf.org>
List-Help: <mailto:sipcore-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/sipcore>, <mailto:sipcore-request@ietf.org?subject=subscribe>
X-List-Received-Date: Mon, 20 Jun 2011 02:52:59 -0000
Here is a start for how I'd like to see section 5 organized. The idea is to describe clearly what a particular History-Info header means when you look at it. It correlates with the procedures described in the draft in the same way that the input/output specification of a module corresponds to the code of the module -- it allows you to verify that the code does what it is intended to do (and that the specification is correct). --------------------------- 5.1 Syntax of History-Info The ABNF syntax for the History-info header field and header field parameters is as follows: History-Info = "History-Info" HCOLON hi-entry *(COMMA hi-entry) hi-entry = hi-targeted-to-uri *(SEMI hi-param) hi-targeted-to-uri = name-addr hi-param = hi-index / hi-target-param / hi-extension index-val = 1*DIGIT *("." 1*DIGIT) hi-index = "index" EQUAL index-val hi-target-param = rc-param / mp-param rc-param = "rc" EQUAL index-val mp-param = "mp" EQUAL index-val hi-extension = generic-param The ABNF definitions for "generic-param" and "name-addr" are from [RFC3261]. This document also extends the "contact-params" for the Contact header field as defined in [RFC3261] with the "rc" and "mp" header field parameters defined above: contact-params =/ hi-target-param 5.2 Semantics of History-Info The History-Info header fields of a request or response together form an ordered sequence of hi-entries. The division of the hi-entries among one or more History-Info header fields is not significant. The hi-entries are a pre-order walk of a tree, the nodes of which represent requests derived from the same original request sent by the UAC. The tree is organized by the derivation of requests by forwarding and forking, with each node's request being derived (by one or more steps) from its parent node's request. [There are complexities if the UAC does not support History-Info, but downstream entities do, particularly if a first History-Info is added on two different forks -- both forks have hi-entries with index "1".] Because not all SIP entities support History-Info, the tree may not separately represent every forwarding and forking operation. (Abstractly, the tree can be derived from the tree that would be recorded if all entities supported History-Info by collapsing certain contiguous sets of nodes.) In addition, if an entity that supports History-Info receives a request whose Request-URI is different from the URI recorded in the History-Info that should correspond to the request, then the entity knows that the Request-URI has been changed by an entity that does not support History-Info, and the entity will perform a preparatory normalization by adding an additional leaf to the tree showing the new Request-URI. This operation is specified in section 9. [Note that this introduces a problem: Suppose the UAS sends "History-Info: AOR;index=1", and a non-History-Info-supporting entity forks it to two destinations, UAS A and UAS B, both of which support History-Info. UAS A normalizes the request to "History-Info: AOR;index=1, UAS-A;index=1.1" while UAS B normalizes the request to "History-Info: AOR;index=1, UAS-B;index=1.1". These two normalized requests violate the rule that everybody expects to be satisfied, viz., that all hi-entries in the entire forking structure with the same index represent the same request. As a result, the responses from the two UASs cannot be merged in any useful way. In this particular case, we are saved from a mess by the fact that the proxy will forward only one of the History-Info headers back, but we have to check whether this good fortune holds in all situations.] A SIP entity my perform "internal retargeting", multiple stages of retargeting that it models as more than one stage of forking, but without actually generating and sending a SIP request. Internal retargeting may be described in the History-Info tree as one or more nodes, as long as the semantics of the History-Info values correctly describes the derivation of the various Request-URI values. Because of the above complications, the depth of a node within the tree does not equal the number of Via headers in the corresponding request, although the number of Via headers increases as one moves downward in the tree. As forwardings or forkings of a request are generated at a SIP entity, they are numbered in time order as 1, 2, 3, etc. These numbers are the labels of the nodes of the tree, giving each node its index-val and determining the sequential ordering of the hi-entries. The trees recorded in various requests of the forwarding/forking structure are different, but all hi-entries in the trees that share the same index-val represent the same request, and will have the same hi-targeted-to-uri (excepting for changes dictated by privacy processing and changing tel: URIs to sip: URIs). [Also need to take care of the case where the UAC generates several requests as forks of a theoretical ancestral request, as is used in draft-ietf-bliss-call-completion. It seems like they should have index=1, index=2, index=3, etc.] In a request's History-Info, the only requests of the forking structure that are represented are the ones that are ancestral to the request, and subtrees that are siblings of ancestral nodes and have received non-100 responses (which may be recorded in Reason header fields in the hi-targeted-to-uri) (which must necessarily be earlier siblings) . Thus, the rightmost leaf (sequentially last) hi-entry in a request represents the request (and contains the Request-URI of the request) or it represents the latest ancestral request of this request that was constructed by a SIP entity that supports History-Info. A response contains a History-Info header only if the corresponding request contained "Supported: histinfo". As non-100 responses propagate in the reverse direction in the forwarding/forking structure, the hi-entries that they carry are recorded at each SIP entity as part of the state of SIP transactions. These hi-entries will be included in the History-Info of any responses and any additional requests that are generated. When a request or response is forwarded to a "different" domain, some or all of the hi-entries may be anonymized. If a "Privacy: history" header field is present, all hi-entries are anonymized. Any hi-targeted-to-uri that contains a Privacy header with value "history" is anonymized. An hi-entry is anonymized by replacing the URI part of the hi-targeted-to-uri with a URI with domain "anonymous.invalid". 5.3 Semantics of an hi-entry value The following provides details for the information that is captured in the History-Info header field entry (hi-entry) for each target used for forwarding a request: o hi-targeted-to-uri: A mandatory parameter for capturing the Request-URI for the specific request as it is forwarded. o hi-index: A mandatory parameter for History-Info reflecting the chronological order of the information, indexed to also reflect the forking and nesting of requests. The format for this parameter is a string of integers, separated by dots, to indicate the relationships between the requests that carried the Request-URIs captured in the hi-entries. o hi-target-param: An optional parameter reflecting the mechanism by which the Request-URI captured in the hi-targeted-to-uri in the hi-entry was determined, and the captures Request-URI from which it was derived. This parameter contains either an "rc" or "mp" header field parameter, which is interpreted as follows: "rc": The hi-targeted-to-URI is a contact bound to an AOR in an abstract location service, that AOR being the Request-URI that was retargeted. The AOR-to-contact binding has been placed into the location service by a SIP Registrar that received a SIP REGISTER request. The "rc" header field parameter contains the value of the hi-index in the hi-entry with an hi-targeted-to-uri that is the Request-URI that was retargeted "mp": The hi-targeted-to-URI represents a user other than the user associated with the Request-URI in the incoming request that was retargeted. This occurs when a request is statically or dynamically retargeted to another user. The "mp" header field parameter contains the value of the hi-index in the hi- entry with an hi-targeted-to-uri that is the Request-URI that was retargeted, thus identifying the "mapped from" target. [What if a mapping is done in some other manner? How do we record the index-val of the value from which the new Request-URI was derived?] o Extension (hi-extension): A parameter to allow for future optional extensions. As per [RFC3261], any implementation not understanding an extension MUST ignore it. In addition to the parameters defined by the ABNF, an hi-entry may also include a Reason header field and/or a Privacy header field, which are both included in the "headers" component of the hi- targeted-to-uri as described below: o Reason: An optional parameter for History-Info, reflected in the History-Info header field by including the Reason header field [RFC3326] included in the hi-targeted-to-uri. A reason is included in the hi-targeted-to-uri of an hi-entry to reflect information received in the response to the request represented by the hi-entry. [Need to detail exactly what can be included here. It seems that Reason may contain any non-2xx final SIP response code, as well as any non-SIP response codes -- see draft-jesske-dispatch-update3326-reason-responses. 2xx response codes seem to be implicit in that the hi-entry is seen in a non-descendant request or a response, but no SIP Response value is present. Do we want this irregularity for 2xx?] o Privacy: An optional parameter for History-Info, reflected in the History-Info header field values by including the Privacy Header [RFC3323] included in the hi- targeted-to-uri or by adding the Privacy header field to the request. The latter case indicates that the History-Info entries for the domain MUST be anonymized prior to forwarding, whereas the use of the Privacy header field included in the hi-targeted-to-uri means that a specific hi-entry MUST be anonymized. [This specification is vague, as it should give some indication of when anonymization is required. The discussion of "Privacy: history" should not be done here, as it is not part of the hi-entry. It looks like section 10.1.1 is OK for this. So I would revise the above paragraph to: o Privacy: An optional parameter for History-Info, reflected in the History-Info header field values by including in the hi-targeted-to-uri a Privacy Header [RFC3323] with value "history". The Privacy header field included in an hi-targeted-to-uri means that a specific hi-entry MUST be anonymized under the conditions specified in section 10.1.2. Note that since both the Reason and Privacy parameters are included in the hi-targeted-to-uri, these fields will not be available in the case that the hi-targeted-to-uri is a Tel-URI [RFC3966]. In such cases, the Tel-URI SHOULD be transformed into a SIP URI per section 19.1.6 of [RFC3261]. [Does this mean that if an entity desires or is required to apply Reason or Privacy to an hi-entry containing a tel: URI, that it MUST convert it to a sip: URI, and then proceed? If so, it would be better stated:] Note that since both the Reason and Privacy parameters are included in the hi-targeted-to-uri, these fields cannot be applied if the hi-targeted-to-uri is a Tel-URI [RFC3966]. If an entity desires or is required to apply such a parameter, the Tel-URI SHOULD be transformed into a SIP URI per section 19.1.6 of [RFC3261] and then the parameter is applied. 5.4 History-Info Header Field Examples The following provides examples of the format for the History-info header field. Note that the backslash and CRLF between the fields in the examples below are for readability purposes only. History-Info: <sip:UserA@ims.example.com>;index=1;foo=bar History-Info: <sip:UserA@ims.example.com?Reason=SIP%3B\ cause%3D302>;index=1.1,\ <sip:UserB@example.com?Privacy=history&Reason=SIP%3B\ cause%3D486>;index=1.2;mp=1.1,\ <sip:45432@192.168.0.3>;index=1.3;rc=1.2 --------------------------------------- Dale
- Re: [sipcore] 4244bis-05: Semantics of History-In… Worley, Dale R (Dale)
- [sipcore] 4244bis-05: Semantics of History-Info Worley, Dale R (Dale)
- Re: [sipcore] 4244bis-05: Semantics of History-In… Worley, Dale R (Dale)
- Re: [sipcore] 4244bis-05: Semantics of History-In… Dean Willis