[sipcore] Required normative revisions to support 199 response

Paul Kyzivat <pkyzivat@cisco.com> Tue, 07 December 2010 01:43 UTC

Return-Path: <pkyzivat@cisco.com>
X-Original-To: sipcore@core3.amsl.com
Delivered-To: sipcore@core3.amsl.com
Received: from localhost (localhost []) by core3.amsl.com (Postfix) with ESMTP id 6DA733A68DA for <sipcore@core3.amsl.com>; Mon, 6 Dec 2010 17:43:17 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -110.494
X-Spam-Status: No, score=-110.494 tagged_above=-999 required=5 tests=[AWL=0.105, BAYES_00=-2.599, RCVD_IN_DNSWL_HI=-8, USER_IN_WHITELIST=-100]
Received: from mail.ietf.org ([]) by localhost (core3.amsl.com []) (amavisd-new, port 10024) with ESMTP id X+SQCRe+nt5Z for <sipcore@core3.amsl.com>; Mon, 6 Dec 2010 17:43:15 -0800 (PST)
Received: from rtp-iport-2.cisco.com (rtp-iport-2.cisco.com []) by core3.amsl.com (Postfix) with ESMTP id 483FE3A67EF for <sipcore@ietf.org>; Mon, 6 Dec 2010 17:43:15 -0800 (PST)
Authentication-Results: rtp-iport-2.cisco.com; dkim=neutral (message not signed) header.i=none
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: AvsEAPQf/UxAZnwM/2dsb2JhbACjOHGkB5tLhUkEhF+GD4MT
X-IronPort-AV: E=Sophos;i="4.59,308,1288569600"; d="scan'208";a="189917671"
Received: from rtp-core-1.cisco.com ([]) by rtp-iport-2.cisco.com with ESMTP; 07 Dec 2010 01:44:39 +0000
Received: from [] (dhcp-161-44-174-115.cisco.com []) by rtp-core-1.cisco.com (8.13.8/8.14.3) with ESMTP id oB71idXi022333 for <sipcore@ietf.org>; Tue, 7 Dec 2010 01:44:39 GMT
Message-ID: <4CFD9187.3090207@cisco.com>
Date: Mon, 06 Dec 2010 20:44:39 -0500
From: Paul Kyzivat <pkyzivat@cisco.com>
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv: Gecko/20101027 Thunderbird/3.1.6
MIME-Version: 1.0
To: SIPCORE <sipcore@ietf.org>
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit
Subject: [sipcore] Required normative revisions to support 199 response
X-BeenThere: sipcore@ietf.org
X-Mailman-Version: 2.1.9
Precedence: list
List-Id: SIP Core Working Group <sipcore.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/listinfo/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: Tue, 07 Dec 2010 01:43:17 -0000

In offline discussions, Robert, Cullen (and maybe others?) have 
questioned whether draft-ietf-sipcore-199-02.txt requires a normative 
change to RFC 3262 (100rel). We've gotten deep enough into this that it 
seemed proper to bring it back to the list for further discussion.

The issue is that this draft, as currently written, requires that the 
199 response be sent *un*reliably even if Require:100rel was specified 
by the UAC. It is (partially) mitigated by the introduction of a new 
'199' option tag. If Supported:199 is not present in the request, the 
199 response can't be sent. So the draft makes the argument that there 
is no backward compatibility issue, making this an extension rather than 
a change.

BUT, there is still a potential backward compatibility issue for other 
proxies that don't know about the 199 option. A dialog-stateful proxy 
upstream of the 199-sender might observe the unreliable 199 and not it 
to be inconsistent with the Require:100rel.

In addition, I realized that this draft also extends RFC 3261, in that 
it for the first time introduces a case where a *proxy* may *originate* 
(not just forward) a response in the context of an existing (early) 
dialog. According to 3261 a proxy that initiates a response is actually 
doing so in the role of a UAS, and so must add its own to-tag, thus 
creating a new dialog.

So, I have proposed that the specification for what goes on when sending 
199 be tweaked, in a way that is trivially different from an 
implementation perspective but that is conceptually significant. Namely:

- There should be no exception from Require:100rel. When a UAS sends
   a 199, if Require:100rel is in effect it MUST send the 199 reliably.

- When a *proxy* *originates*a 199, it is considered to be operating
   as a *proxy*, not as a UAS. Hence it is not bound by Require:100rel.
   Rather it is bound by Proxy-Require:100rel. The proposal is to
   make a revision to 3262 that says 100rel MUST NOT be used in
   Proxy-Require. And as now the proxy MUST NOT send the 199 reliably.
   That ensures there won't be a PRACK that would then possibly be
   forwarded on to the UAS that doesn't expect it.

   But the proxy is *originating* the 199 response in the context of the
   existing (early) dialog. It must make a response that is valid in that
   context. (E.g. the to-tag.)

This does not eliminate the impact on upstream proxies. They will still 
see an unreliable provisional response that might be surprising. So this 
still requires a revision to 3262. I really hated the idea of making a 
special case for the single 199 response code. So my proposal is:

- in any case where a proxy is permitted to originate a provisional
   response within an existing dialog (early or not) it must do so
   unreliably. (For now the only case this applies to is 199.)

- the 100rel option MUST NOT be sent (ever) in Proxy-Require.

The effect of this is that UACs and proxies may see unreliable 
provisionals even when Require:100rel is in effect. This is a (hopefully 
insignificant) backward incompatibility from 3262.

*** I'm requesting feedback on the above approach.
*** Are you happy with it?
*** Do you have a better idea?

While writing this I thought of another issue that needs discussion. 
When the proxy is constructing the 199, to be in the context of the 
dialog, how should it be constructed? The following are questionable:

- Contact address
- Record-Route
- History-Info
- (did I forget any that matter?)

The straightforward answer is that these should all be copied from the 
final response that triggered the sending of the 199. An alternative 
might be to copy from the response that the proxy considers to have 
established the early dialog. These *might* not be the same.

Alternatively, perhaps the proxy should generate the 199 response 
without the Contact since the contact does not reflect the sender of the 
response. But that would be contrary to some discussions that occurred a 
couple of years ago (aug 2008) on the sip-implementors list, which 
concluded (IMO) that 3261 implies Contact is required in all provisional 

*** Feedback on this issue also requested.

Disclaimer - the following is my take on things. While this has been 
discussed with Christer and Robert, they have not seen this message.