[Geopriv] GEOPRIV Event Package Drafts (draft-ietf-geopriv-loc-filters, draft-polk-sip-location-get, and draft-winterbottom-sip-location-package)

Adam Roach <adam@nostrum.com> Thu, 24 July 2008 05:30 UTC

Return-Path: <geopriv-bounces@ietf.org>
X-Original-To: geopriv-archive@megatron.ietf.org
Delivered-To: ietfarch-geopriv-archive@core3.amsl.com
Received: from [127.0.0.1] (localhost [127.0.0.1]) by core3.amsl.com (Postfix) with ESMTP id 5A1963A681B; Wed, 23 Jul 2008 22:30:25 -0700 (PDT)
X-Original-To: geopriv@core3.amsl.com
Delivered-To: geopriv@core3.amsl.com
Received: from localhost (localhost [127.0.0.1]) by core3.amsl.com (Postfix) with ESMTP id 3F43C3A67EF for <geopriv@core3.amsl.com>; Wed, 23 Jul 2008 22:30:24 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.6
X-Spam-Level:
X-Spam-Status: No, score=-2.6 tagged_above=-999 required=5 tests=[BAYES_00=-2.599, SPF_PASS=-0.001]
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 J1OV-Kf7r8RG for <geopriv@core3.amsl.com>; Wed, 23 Jul 2008 22:30:22 -0700 (PDT)
Received: from nostrum.com (unknown [IPv6:2001:470:1f03:267::2]) by core3.amsl.com (Postfix) with ESMTP id 9BBAA3A681B for <geopriv@ietf.org>; Wed, 23 Jul 2008 22:30:21 -0700 (PDT)
Received: from hydra.local (ppp-70-249-155-253.dsl.rcsntx.swbell.net [70.249.155.253]) (authenticated bits=0) by nostrum.com (8.14.2/8.14.1) with ESMTP id m6O5UZtQ028552 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Thu, 24 Jul 2008 00:30:36 -0500 (CDT) (envelope-from adam@nostrum.com)
Message-ID: <48881375.3070701@nostrum.com>
Date: Thu, 24 Jul 2008 00:30:29 -0500
From: Adam Roach <adam@nostrum.com>
User-Agent: Thunderbird 2.0.0.14 (Macintosh/20080421)
MIME-Version: 1.0
To: GEOPRIV Working Group <geopriv@ietf.org>
Received-SPF: pass (nostrum.com: 70.249.155.253 is authenticated by a trusted mechanism)
X-Virus-Scanned: ClamAV 0.93.3/7808/Wed Jul 23 21:32:26 2008 on shaman.nostrum.com
X-Virus-Status: Clean
Cc: Rohan Mahy <rohan@ekabal.com>, James Polk <jmpolk@cisco.com>, James Winterbottom <james.winterbottom@andrew.com>
Subject: [Geopriv] GEOPRIV Event Package Drafts (draft-ietf-geopriv-loc-filters, draft-polk-sip-location-get, and draft-winterbottom-sip-location-package)
X-BeenThere: geopriv@ietf.org
X-Mailman-Version: 2.1.9
Precedence: list
List-Id: Geographic Location/Privacy <geopriv.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/listinfo/geopriv>, <mailto:geopriv-request@ietf.org?subject=unsubscribe>
List-Archive: <https://www.ietf.org/mailman/private/geopriv>
List-Post: <mailto:geopriv@ietf.org>
List-Help: <mailto:geopriv-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/geopriv>, <mailto:geopriv-request@ietf.org?subject=subscribe>
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain; charset="iso-8859-1"; Format="flowed"
Sender: geopriv-bounces@ietf.org
Errors-To: geopriv-bounces@ietf.org

Robert has asked me to review the RFC3265-related work currently 
underway in GEOPRIV, and to provide feedback where necessary.

I'll preface this by saying that I am only dimly aware of the overall 
state of GEOPRIV and its documents, and I have not been following list 
discussion. Forgive me if I show naïvité in GEOPRIV-specific matters. On 
the other hand, I believe I can render an informed opinion on the 
RFC3265-related aspects of this work.

My general impression, on first read, is that there is a lot of work 
underway that is either re-inventing solutions that are under 
development elsewhere; or developing point-solutions that are 
laser-specific to GEOPRIV problems, when generalized solutions can be 
developed with little or no additional effort.

In the first case, I believe (based on the constituents involved) that 
the re-invention is being done because the ongoing work elsewhere 
doesn't *quite* meet GEOPRIV's requirements. I would argue that a more 
fruitful approach would be ensuring that the mechanisms under 
development in the various SIP working groups take GEOPRIV's 
requirements into consideration (or, where RFCs are already published, 
extending those mechanisms instead of reinventing them). In the second 
case, I suspect that there has simply been no need to consider whether 
particular approaches can be made general, so the entire concept has 
simply been ignored.

Some specific examples (forgive the lack of rigor in the XML):

draft-ietf-geopriv-loc-filters defines a novel format for conveying 
event filtering, even though mechanisms developed and being developed 
elsewhere can accomplish most of what is desired. I'll take the "initial 
list of Interesting Events" as a starting point.

------------------------------------------------------------

   1.  the resource moves more than a specific distance horizontally or
       vertically since the last notification


This is currently proposed to use something like:

   <location-filter>
     <movedHoriz uom="urn:ogc:def:uom:EPSG::9001">20</movedHoriz>
     <movedVert uom="urn:ogc:def:uom:EPSG::9001">3</movedVert>
   </location-filter>

However, use of RFC4660/4661 would appear to be sufficient for this 
purpose. Keep in mind that RFC4660/4661 is *intended* to be extended by 
specific event packages to accommodate the specific data associated with 
those event packages.

I'm going to throw out a strawman based on 4660/4661:

  <filter-set xmlns="urn:ietf:params:xml:ns:simple-filter">
     <ns-bindings>
       <ns-binding prefix="pidf" urn="urn:ietf:params:xml:ns:pidf"/>
     </ns-bindings>
     <filter id="123" uri="sip:presentity@example.com">
       <trigger>
         <changed component="latlong" by="20">
           /gp:geopriv/gp:location-info/gml:location/gml:coordinates
         </changed>
       </trigger>
       <trigger>
         <changed component="altitude" by="3">
           /gp:geopriv/gp:location-info/gml:location/gml:coordinates
         </changed>
       </trigger>
     </filter>
   </filter-set>

Because <gml:coordinates> is effectively a compound type, we're having 
to define a new "component" attribute for <changed>, but this seems a 
reasonable package-specific extension. (This would be cleaner if we 
could use xpath to point at a specific component of the coordinates, but 
I'm pretty sure you can't refer to sub-portions of CDATA with xpath).

------------------------------------------------------------

   2.  the resource exceeds a specific speed

This requires just a touch of extra work which, I'm happy to notice, 
someone has already brought to the GEOPRIV working group. I would 
propose that you leverage the new elements defined in 
draft-singh-geopriv-pidf-lo-dynamic; and, define a new attribute for the 
<changed> element, called "toMoreThan":

  <filter-set xmlns="urn:ietf:params:xml:ns:simple-filter">
     <ns-bindings>
       <ns-binding prefix="pidf" urn="urn:ietf:params:xml:ns:pidf"/>
     </ns-bindings>
     <filter id="123" uri="sip:presentity@example.com">
       <trigger>
         <changed toMoreThan="3">
           /gp:geopriv/gp:location-info/gml:speed
         </changed>
       </trigger>
     </filter>
   </filter-set>

------------------------------------------------------------

   3.  the resource enters or exits one or more GML objects (for
       example, a set of 2-dimensional or 3-dimensional regions)
       included or referenced in the filter.

This one is, admittedly, more tricky than the rest. However, I wouldn't 
abandon the event filter framework altogether here -- it was 
specifically designed to be extended with new trigger types. So, instead 
of wrapping the <enterOrExit> in the GEOPRIV-specific <location-filter>, 
things would work just as well with:

  <filter-set xmlns="urn:ietf:params:xml:ns:simple-filter">
     <ns-bindings>
       <ns-binding prefix="pidf" urn="urn:ietf:params:xml:ns:pidf"/>
     </ns-bindings>
     <filter id="123" uri="sip:presentity@example.com">
       <trigger>
        <gp:enterOrExit>
         <my:Building>
          <gml:name>Building 10</gml:name>
          <gml:extentOf>
            <gml:Polygon
     srsName="urn:ogc:def:crs:EPSG::4326"
     xmlns:gml="http://www.opengis.net/gml">
              <gml:exterior>
                <gml:LinearRing>
                 <gml:posList
                      37.41188 -121.93243
                      37.41142 -121.93243
                      37.41142 -121.93132
                      37.41188 -121.93132
                      37.41188 -121.93243
                 </gml:posLis>
                </gml:LinearRing>
              </gml:exterior>
            </gml:Polygon>
          </gml:extentOf>
         </my:Building>
        </gp:enterOrExit>
       </trigger>
     </filter>
   </filter-set>


------------------------------------------------------------

   4.  one or more of the values of the specified address labels has
       changed for the resource (for example, the A1 value of the
       civilAddress has changed from California to Nevada)

This is the _exact_ kind of use case that RFC 4660/4661 was defined for:

  <filter-set xmlns="urn:ietf:params:xml:ns:simple-filter">
     <ns-bindings>
       <ns-binding prefix="pidf" urn="urn:ietf:params:xml:ns:pidf"/>
     </ns-bindings>
     <filter id="123" uri="sip:presentity@example.com">
       <trigger>
         
<changed>/gp:geopriv/gp:location-info/c1:civilAddress/c1:A1</changed>
       </trigger>
       <trigger>
         
<changed>/gp:geopriv/gp:location-info/c1:civilAddress/c1:A2</changed>
       </trigger>
       <trigger>
         
<changed>/gp:geopriv/gp:location-info/c1:civilAddress/c1:A3</changed>
       </trigger>
       <trigger>
         
<changed>/gp:geopriv/gp:location-info/c1:civilAddress/c1:PC</changed>
       </trigger>
     </filter>
   </filter-set>

------------------------------------------------------------

   5.  a mininum and maximum rate of reports regardless of movement

Here, we leave the 4660/4661 work behind, and start looking at 
throttling. Specifically, I point to 
draft-niemi-sipping-event-throttle-06. Admittedly, that work does not 
yet take into account the prospect of forcing a minimum rate of reports, 
but that is exactly the kind of requirement that can be added with very 
little effort.

So, for example, if notifications were to be sent no more frequently 
than once every 10 seconds, the SUBSCRIBE message would contain an Event 
header field looking something like this:

    Event: presence;throttle=10

(or, if the event package name ends up changing -- I'll comment on this 
below)

    Event: loc-event;throttle=10

Now, if we wanted to force updates to be sent even when they wouldn't 
otherwise happen, we can add another requirement to the ongoing throttle 
work. I imagine the solution would end up looking something like this 
(no more frequently than once every 10 seconds, and no less frequently 
than once every 60 seconds):

    Event: presence;throttle=10;force=60
or
    Event: loc-event;throttle=10;force=60

------------------------------------------------------------

Turning now to draft-polk-sip-location-get-00; I'll use the various 
filter types in section 6 to guide the use cases:

   Filter #1 - specifies that a watcher wants location from a specific
               presentity/target, or a group of presentities/targets
               (i.e., a bulk transfer).

This is a list subscription (RFC4662) with an ad-hoc URI list 
(draft-ietf-sip-uri-list-subscribe-02) and list subscribe bodies 
(draft-roach-sip-list-subscribe-bodies-00). It doesn't need to be a 
filter at all. (This approach also gets around the some of the 
restrictions documented in draft-polk-sip-location-get, such as having 
the same triggers for all the resources in the subscription).

------------------------------------------------------------

   Filter #2 - specifies which location format the watcher wants
               returned in the NOTIFY (coordinate, civic, or future
               location format). The watcher can place a wildcard 'any'
               format that is available to the presentity Any filter
               specifying more than one locationURI will have all other
               filters applied to it within a dialog.

This appears to be a straightforward application of the <include> and 
<exclude> elements from RFC4661. I'm concerned by suggestions that we 
might define a new set of enumerated choices, such as "geo-only", 
"civic-only", etc, when you can achieve these just fine with:

    <!-- civic only -->
    <what>
      <include 
type="xpath">/gp:geopriv/gp:location-info/c1:civilAddress</include>
      <exclude 
type="xpath">/gp:geopriv/gp:location-info/gml:location</exclude>
    </what>

(and obvious variations on the theme).

This is particularly nice, because it extends naturally without having 
to define tokens for every combination of location types one might want.

------------------------------------------------------------

   Filter #3 - a watcher could want to specify that it wants the
               subscription to last over a period of time, or for a
               specific number of updates.  This would be creating a
               dialog, to have the subscription last longer than a
               one_time_only location reply.

I don't have a specific proposal here. However, I feel rather strongly 
that any solution to this kind of filter should be crafted so as to be 
general to all event packages instead of specific to GEOPRIV. I can 
easily imagine other event packages needing to do this in the future, 
and it would be unfortunate to force them to reinvent this particular wheel.

------------------------------------------------------------

   Filter #4 - a watcher could specify exactly which elements of
               location it needs to have in the reply. 

I think this is most appropriately an extension of 4661; something like:


    <what>
      <include mandatory="true" type="xpath">
        /gp:geopriv/gp:location-info/c1:civilAddress/c1:PC
      </include>
    <what>

(where we define a new "mandatory" attribute to the <include> element, 
or something similar).

------------------------------------------------------------

   Filter #5 - a watcher could add specifically which elements of
               location it wants to have in the reply, in other words,
               which location elements are optional to include (based
               on availability and permissions), but not mandatory to
               include in the notification.

This is the RFC4661 <include> usage straight up.

------------------------------------------------------------

   Filter #6 - filter for periodic intervals

See the discussion of draft-niemi-sipping-event-throttle-06, above.

------------------------------------------------------------

   Filter #7 - filter for triggered notifications

   Filter #8 - filter for what constitutes 'movement' in Filter#7, for
               example, how many feet did a target move since the last
               notification, or how many fractions of a degree did a
               target move since the last notification.


These two filter appear to refer to most of the "Interesting Events" 
from draft-ietf-geopriv-loc-filters-02, discussed above. There may be 
some additional work necessary to specify units on the <trigger> 
predicates, but that should be straightforward work.

------------------------------------------------------------

Turning finally to draft-winterbottom-sip-location-package-00 -- I'm a 
bit befuddled by this work, and I'm relatively sure it's a lack of 
background on my part.

My initial reaction is, "Why are we defining a new event package for 
this? Why are we using a different MIME type?" As far as I am aware, the 
information that is being conveyed is precisely information about a 
user's presence, and the format being used is precisely PIDF. How is 
this not RFC 3856?

I'm sure there are good answers to these questions -- or at least, to 
the one about MIME types. I don't necessarily want them given in 
response to this email (as I can imaging they may be elementary for most 
WG participants). These reasons should, however, be addressed in the 
sip-location-package document itself -- I would suggest a "relationship 
to RFC 3856" section in the document.

Also, please keep in mind that the change of MIME type does not 
necessitate a change to the event package type. It would be eminently 
reasonable to simply define how application/held+xml is used with RFC 
3856. This would help save you the trouble of re-inventing that part of 
the wheel. (A casual read of the proposed loc-event event package 
currently being proposed doesn't reveal any implied requirements that 
make 3856 unsuitable).

/a

P.S. If you'll forgive a curmudgeonly comment that is quite squarely in 
the "bike shed painting" category -- Assuming GEOPRIV sees reason to 
define a new event package, "loc-event event package" is awkward to say 
and to type. And context makes it clear that it's an event package, so 
"-event" is completely redundant. What's wrong with calling the event 
package "location"?
_______________________________________________
Geopriv mailing list
Geopriv@ietf.org
https://www.ietf.org/mailman/listinfo/geopriv