Re: [sipcore] draft-ietf-sipcore-location-conveyance-04
"James M. Polk" <jmpolk@cisco.com> Thu, 28 October 2010 04:09 UTC
Return-Path: <jmpolk@cisco.com>
X-Original-To: sipcore@core3.amsl.com
Delivered-To: sipcore@core3.amsl.com
Received: from localhost (localhost [127.0.0.1]) by core3.amsl.com (Postfix) with ESMTP id 48C643A684C for <sipcore@core3.amsl.com>; Wed, 27 Oct 2010 21:09:09 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -110.545
X-Spam-Level:
X-Spam-Status: No, score=-110.545 tagged_above=-999 required=5 tests=[AWL=0.054, BAYES_00=-2.599, RCVD_IN_DNSWL_HI=-8, USER_IN_WHITELIST=-100]
Received: from mail.ietf.org ([64.170.98.32]) by localhost (core3.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id dn6PRPQL8O3O for <sipcore@core3.amsl.com>; Wed, 27 Oct 2010 21:09:05 -0700 (PDT)
Received: from sj-iport-5.cisco.com (sj-iport-5.cisco.com [171.68.10.87]) by core3.amsl.com (Postfix) with ESMTP id 27A373A683E for <sipcore@ietf.org>; Wed, 27 Oct 2010 21:08:53 -0700 (PDT)
Authentication-Results: sj-iport-5.cisco.com; dkim=neutral (message not signed) header.i=none
X-IronPort-AV: E=Sophos;i="4.58,249,1286150400"; d="scan'208";a="276996155"
Received: from sj-core-1.cisco.com ([171.71.177.237]) by sj-iport-5.cisco.com with ESMTP; 28 Oct 2010 04:10:44 +0000
Received: from jmpolk-wxp01.cisco.com (rcdn-jmpolk-8715.cisco.com [10.99.80.22]) by sj-core-1.cisco.com (8.13.8/8.14.3) with ESMTP id o9S4AhY6012387; Thu, 28 Oct 2010 04:10:43 GMT
Message-Id: <201010280410.o9S4AhY6012387@sj-core-1.cisco.com>
X-Mailer: QUALCOMM Windows Eudora Version 7.1.0.9
Date: Wed, 27 Oct 2010 23:10:42 -0500
To: Paul Kyzivat <pkyzivat@cisco.com>, "James M. Polk" <jmpolk@cisco.com>
From: "James M. Polk" <jmpolk@cisco.com>
In-Reply-To: <4CC8BAC5.4030005@cisco.com>
References: <20101025195020.1DA5A3A68E5@core3.amsl.com> <4CC78202.6090700@cisco.com> <201010271832.o9RIWAKi005558@sj-core-2.cisco.com> <4CC8BAC5.4030005@cisco.com>
Mime-Version: 1.0
Content-Type: text/plain; charset="us-ascii"; format="flowed"
Cc: SIPCORE <sipcore@ietf.org>
Subject: Re: [sipcore] draft-ietf-sipcore-location-conveyance-04
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: Thu, 28 Oct 2010 04:09:09 -0000
At 06:50 PM 10/27/2010, Paul Kyzivat wrote: >I have a bunch inline here. I'll say ;-) >This supersedes my earlier suggested ABNF change. ack >On 10/27/2010 2:32 PM, James M. Polk wrote: >>Paul >> >>in-line >> >>At 08:36 PM 10/26/2010, Paul Kyzivat wrote: >>>I took a quick look at the new version, and it seems to have cleanup a >>>lot. But there *still* seems to be a problem with the syntax. >>>(Interplay between ABNF and text.) From the text, I find: >>> >>>The placement of the "routing-allowed" header field parameter, >>>strongly encouraged by [RFC5606], is outside the locationValue, and >>>MUST always be last in the header field value. The routing-allowed >>>parameter MUST be present, even when no locationValue is present. >>> >>>This is questionably supported by the ABNF: >>> >>>Geolocation-header = "Geolocation" HCOLON Geolocation-value >>>Geolocation-value = ( locationValue [ COMMA locationValue ] ) >>>/ routing-param >> >>the above, I believe - but am open to be corrected by those better at >>ABNF syntax that I, says >> >>- the Geolocation header can optionally have one or more locationValues >>- which are where the location URIs go > >The above says *a* Geolocation header can have >- one or two locationValues >- OR one routing-param > >(The slash means OR) > >But it doesn't state that the Geolocation header itself can appear >only once. And obviously if the goal is to have a locationValue AND >a routing-param in the message, then with the above syntax at least >TWO Geolocation headers will be required. > >>- but that the Geolocation header *will* have a routing-param >>- which is the "routing-allowed" paramter that RFC 5606 wanted included > >Since the slash means OR, it doesn't mean it *will*. > >>The text of the ID then says that only zero, one or two locationValues >>are allowed, which we all agreed to in Maastricht (in SIPCORE and >>ECRIT/GEOPRIV). >> >>>locationValue = LAQUOT locationURI RAQUOT >>>*(SEMI geoloc-param) >>>locationURI = sip-URI / sips-URI / pres-URI >>>/ http-URI / HTTPS-URI >>>/ cid-url ; (from RFC 2392) >>>/ absoluteURI ; (from RFC 3261) >>>geoloc-param = generic-param; (from RFC 3261) >>>routing-param = "routing-allowed" EQUAL "yes" / "no" >>> >>>It only works if you presume that there are separate occurrences of >>>GeoLocation-header in the message, one with just locations, another >>>with just the routing-param. >> >>I don't get that part of your point, but I guess Martin's next message >>says I need to add a "COMMA" after the ']' but before the ')'. Would >>this satisfy your issue? > >Adding the COMMA and removing the slash would require the >routing-param, and would separate it from the location-value. But >then if you only wanted the routing-param without any locationValues >you would have to write: > >Geolocation:,routing-allowed=no > >which is at least a bit weird, which I think is what Martin meant. > >>>The routing-param certainly can't be "last in the header field value" >>>except in the degenerate sense, since it must be first and only in a >>>Geolocation-header. >> >>If the routing-param was intended to be first, wouldn't it appear first >>on this line? > >My point was that the syntax as written only allows routing-param by >itself in a geolocation-header. E.g. > >Geolocation:routing-allowed=no > >It can't share a single Geolocation header with a locationValue. >Hence it is *both* first and last in that header. > >>>Geolocation-value = ( locationValue [ COMMA locationValue ] ) >>>/ routing-param >> >>but it doesn't, so I'm confused. > >Again, the slash means OR. So you have: > > Geolocation-value = ( locationValue [ COMMA locationValue ] ) >OR > Geolocation-value = routing-param > >(Though you can't write it that way in ABNF. > >>>Below are some specific cases - both valid and invalid. In each case I >>>show some headers bracketed by "...". That is intended to mean other >>>headers in a message, but all in the same message. (And when I show >>>multiple headers, there could be other non-geoloc headers interleaved.) >>> >>>* The following are legal according to the above, and probably within >>>expected usage: >>> >>>... >>>Geolocation: cid:foo@example.com >>>Geolocation: routing-allowed=yes >>>... >>> >>>... >>>Geolocation: cid:foo@example.com,cid:bar@example.com >>>Geolocation: routing-allowed=yes >>>... >>> >>>... >>>Geolocation: routing-allowed=no >>>... >>> >>>* IIUC the following are allowed by the above both syntactically and >>>according to the text, but is presumably not *intended* to be valid. >>>(Its legal because the in each instance of Geolocation-header its last.) >>> >>>... >>>Geolocation: routing-allowed=no >>>Geolocation: routing-allowed=yes >>>... >>> >>>The following is also allowed - I don't know if its intended or not: >>> >>>... >>>Geolocation: routing-allowed=yes >>>Geolocation: cid:foo@example.com,cid:bar@example.com >>>... >>> >>>* The following is allowed by the ABNF though disallowed by the text: >>> >>>... >>>Geolocation: cid:foo@example.com,cid:bar@example.com >>>Geolocation: cid:baz@example.com >>>... >>> >>>* The following is *not* allowed by the ABNF. I suspect it might be >>>intended to be valid, but I'm far from sure about it: >>> >>>... >>>Geolocation: cid:foo@example.com,routing-allowed=yes >>>... >> >>to get this above example "allowed", would I correct the existing ABNF >>to be >> >>>Geolocation-value = ( locationValue [ COMMA locationValue ] COMMA ) >>>/ routing-param >> >>? > >No. *That* would allow all of the following but not the example above: > > Geolocation: cid:foo@example.com, > Geolocation: cid:foo@example.com,cid:bar@example.com, > Geolocation: routing-allowed=yes > >>>In addition to that, the text is very explicit that: >>> >>>The routing-allowed >>>parameter MUST be present, even when no locationValue is present. >>> >>>but then it says: >>> >>>If no routing-allowed parameter >>>is present in a SIP request, a SIP intermediary MAY insert this >>>value with a RECOMMENDED value of "no" by default. >>> >>>So its required, but we have rules to follow if its missing. But I >>>don't understand how it *can* be required, since the sender of the >>>request may not understand/support Geolocation and so won't include it. >> >>What we're trying to do here is explicitly give instructions to SIP >>intermediary implementers to include the routing-allowed parameter if >>one isn't present, with a default value of =no. > >I went back and reread the section containing this text. It is in a >section explicitly about this header. So on reflection I suppose the >"MUST be present" was intended to imply "in the Geolocation >*header". I took it to mean "in the request". > >Requiring it to be in the header only makes sense if there can be at >most one header. And then it only makes sense if the syntax is >altered to allow both the routing-parameter and the locationValue in >the same header. > >>>ISTM that in reality its only *required* if the is a locationValue >>>present, and is otherwise optional. >> >>which is how most would read it if ... >> >>>If no routing-allowed parameter >>>is present in a SIP request, a SIP intermediary MAY insert this >>>value with a RECOMMENDED value of "no" by default. >> >>... weren't present in the document. But, there is no permission to >>allow SIP intermediaries to add the routing-allowed parameter, which we >>wanted to cover. > >I'm still confused. Let me state what I think you are after: > >- a request may or may not contain a Geolocation header >- a request may not contain more than one Geolocation header of what you have, this one is one I hadn't considered important, but if that gets everything aligned, then I'm all for adding it in. >- a Geolocation header MUST contain a routing-param >- a Geolocation header Must contain zero, one, or two locationValues >- you prefer the routing-param to be the last field in the header >- a proxy MAY add a Geolocation header if one is not present > (in which case it MUST include a routing-param) >- a proxy MAY add a locationValue to an existing Geolocation header > if it doesn't already have two locationValues. (And I guess it > could add two if there initially were none.) > >And you would like ABNF that is consistent with the above. with the one caveat, yes. >I'm going to give you some alternatives that should all be >syntactically correct. I'll give you one that meets the above, and >some others that may be more appealing variations. Then we can see >which people prefer. > >1) The following tries to meet the requirements I spelled out above: > > Geolocation-header = "Geolocation" HCOLON Geolocation-value > Geolocation-value = locationValue [ COMMA locationValue] > COMMA routing-param > / routing-param I hadn't even thought that was possible, but seeing it, I'm amazed I didn't try it (i.e., it's another classic "I could've had a v8" moment)... I'm not as smart as you, Paul <:-| > locationValue = LAQUOT locationURI RAQUOT > *(SEMI geoloc-param) > locationURI = sip-URI / sips-URI / pres-URI > / http-URI / HTTPS-URI > / cid-url ; (from RFC 2392) > / absoluteURI ; (from RFC 3261) > geoloc-param = generic-param; (from RFC 3261) > routing-param = "routing-allowed" EQUAL "yes" / "no" > > This must be accompanied by text stating that there MUST be at most > one Geolocation-header in a request. you've sold me on this one (and yes, I examined all the others before jumping on this first one!). Do others have strong opinions about why not #1? thank you for this! James >2) The following is similar to (1), but allows more than two > 'locationValue's > > Geolocation-header = "Geolocation" HCOLON Geolocation-value > Geolocation-value = *(locationValue COMMA) routing-param > locationValue = LAQUOT locationURI RAQUOT > *(SEMI geoloc-param) > locationURI = sip-URI / sips-URI / pres-URI > / http-URI / HTTPS-URI > / cid-url ; (from RFC 2392) > / absoluteURI ; (from RFC 3261) > geoloc-param = generic-param; (from RFC 3261) > routing-param = "routing-allowed" EQUAL "yes" / "no" > > The same wording is required with it > >3) The following is a copy from my earlier posting: > > Geolocation-header = "Geolocation" HCOLON Geolocation-value > *( COMMA Geolocation-value) > Geolocation-value = locationValue / routing-param > locationValue = LAQUOT locationURI RAQUOT > *(SEMI geoloc-param) > locationURI = sip-URI / sips-URI / pres-URI > / http-URI / HTTPS-URI > / cid-url ; (from RFC 2392) > / absoluteURI ; (from RFC 3261) > geoloc-param = generic-param; (from RFC 3261) > routing-param = "routing-allowed" EQUAL "yes" / "no" > > The above is overly forgiving, in that it permits zero or more > locationURIs and zero or more routing-params. That then needs to be > tightened up with text. I think the text needs to say, more or less: > > - if there are any locationURIs in a sip request, > then a routing-param MUST be present in the request > - there MUST NOT be more than one routing-param present in a > sip request. > - there MUST NOT be more than two locationURIs in a sip request > (if there is really a reason for such a restriction) > >4) The following is a more radical change: > > Geolocation-header = "Geolocation" HCOLON locationValue > [ COMMA locationValue ] > locationValue = LAQUOT locationURI RAQUOT > *(SEMI geoloc-param) > locationURI = sip-URI / sips-URI / pres-URI > / http-URI / HTTPS-URI > / cid-url ; (from RFC 2392) > / absoluteURI ; (from RFC 3261) > geoloc-param = generic-param; (from RFC 3261) > > Georouting-header = "Geolocation-Routing" HCOLON > ( "yes" / "no" / gen-value ) > > This one needs to be accompanied by text stating that each of > Geolocation-header and Georouting-header may appear at most once > in a request, and that if Georouting-header is absent it defaults > to "no". > >5) A more lenient variant on (4): > > Geolocation-header = "Geolocation" HCOLON locationValue > *( COMMA locationValue ) > locationValue = LAQUOT locationURI RAQUOT > *(SEMI geoloc-param) > locationURI = sip-URI / sips-URI / pres-URI > / http-URI / HTTPS-URI > / cid-url ; (from RFC 2392) > / absoluteURI ; (from RFC 3261) > geoloc-param = generic-param; (from RFC 3261) > > Georouting-header = "Geolocation-Routing" HCOLON > ( "yes" / "no" / gen-value ) > > This one needs to be accompanied by text stating that > Georouting-header may appear at most once in a request, and that > if Georouting-header is absent it defaults to "no". > > (The Geolocation-header can appear zero or more times.) > > This is only preferred to (4) if more than two locationValues > are acceptable. ISTM that once we allowed two, allowing more > makes sense, with the same limitations imposed with two - that > its up to the recipient to figure out which to use. > >Of the above, I technically and esthetically prefer (5) - or (4) if >the limitation to two URIs is important. I see no reason to >*require* the routing-param if the default is understood to be "no". > >Pragmatically I think I prefer (1) - its the least variation from >what has been recently discussed that, IMO, makes any sense. > > >>>In that case, an intermediary that adds a locationValue not only MAY, >>>but presumably MUST add a missing routing-param if it adds a >>>locationValue. >> >>We can get there (i.e., allow this) without stating this is a MUST, >>can't we? > >>>I have never understood why the routing-param is required to be last. >> >>maybe it doesn't need to be, but it certainly is easier for >>monitoring/reading human to find if it is last when looking at a decode. >> >>>And as my examples show, its difficult/impossible to enforce this in >>>ABNF. >>> >>>Thanks, >>>Paul >>
- Re: [sipcore] draft-ietf-sipcore-location-conveya… Paul Kyzivat
- Re: [sipcore] draft-ietf-sipcore-location-conveya… Thomson, Martin
- Re: [sipcore] draft-ietf-sipcore-location-conveya… Paul Kyzivat
- Re: [sipcore] draft-ietf-sipcore-location-conveya… James M. Polk
- Re: [sipcore] draft-ietf-sipcore-location-conveya… James M. Polk
- Re: [sipcore] draft-ietf-sipcore-location-conveya… James M. Polk
- Re: [sipcore] draft-ietf-sipcore-location-conveya… Paul Kyzivat
- Re: [sipcore] draft-ietf-sipcore-location-conveya… James M. Polk
- Re: [sipcore] draft-ietf-sipcore-location-conveya… Anders Kristensen
- Re: [sipcore] draft-ietf-sipcore-location-conveya… Elwell, John
- Re: [sipcore] draft-ietf-sipcore-location-conveya… James M. Polk
- Re: [sipcore] draft-ietf-sipcore-location-conveya… Paul Kyzivat
- Re: [sipcore] draft-ietf-sipcore-location-conveya… James M. Polk