RFC 6447

Filtering Location Notifications in the Session Initiation Protocol (SIP)

πŸ“… published January 2012, from ietf

Filtering Location Notifications in the Session Initiation Protocol (SIP) πŸ’–

okay bestie, this is the spec for RFC 6447 πŸŽ€ It's a Standards Track doc from January 2012, and the title block lists three authors: R. Mahy (Individual), B. Rosen (NeuStar), and H. Tschofenig (Nokia Siemens Networks). It has ISSN 2070-1721. Nothing in the title block says it obsoletes or updates another RFC 🌸

Abstract ✨

okay so this doc is all about filters that stop location pings from spamming you 🫢 they only let through the notifications that actually matter. These filters are an extension to RFC 4661, which is an XML-based format for event notification filtering πŸ’… they're also based on RFC 3856, the SIP presence event package. The location info itself still goes out in existing location formats, wrapped in the Presence Information Data Format Location Object (PIDF-LO) πŸ¦‹

Status of This Memo ✨

this one is an Internet Standards Track document πŸ”₯

it's a product of the Internet Engineering Task Force (IETF), so it has the consensus of the IETF community πŸ‘‘ it got public review and was approved for publication by the Internet Engineering Steering Group (IESG). if you want more on Internet Standards, check Section 2 of RFC 5741 πŸ“š

the current status, any errata, and how to give feedback are at http://www.rfc-editor.org/info/rfc6447 🌈

Copyright (c) 2012 IETF Trust and the persons identified as the document authors. All rights reserved.

this doc is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (http://trustee.ietf.org/license-info) as they were on the publication date πŸ’œ read those carefully, because they spell out your rights and restrictions for this doc. Code Components pulled out of this doc must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions, and they come without warranty as described in the Simplified BSD License 🧚

Table of Contents πŸ“

1.  Introduction . . . . . . . . . . . . . . . . . . . . . . . . .  3
2.  Terminology  . . . . . . . . . . . . . . . . . . . . . . . . .  4
3.  Filter Definitions . . . . . . . . . . . . . . . . . . . . . .  4
  3.1.  Movement . . . . . . . . . . . . . . . . . . . . . . . . .  4
  3.2.  Speed Changes  . . . . . . . . . . . . . . . . . . . . . .  5
  3.3.  Element Value Changes  . . . . . . . . . . . . . . . . . .  5
  3.4.  Entering or Exiting a Region . . . . . . . . . . . . . . .  8
  3.5.  Location Type  . . . . . . . . . . . . . . . . . . . . . . 10
  3.6.  Rate Control . . . . . . . . . . . . . . . . . . . . . . . 12
4.  XML Schema . . . . . . . . . . . . . . . . . . . . . . . . . . 14
5.  Security Considerations  . . . . . . . . . . . . . . . . . . . 15
6.  IANA Considerations  . . . . . . . . . . . . . . . . . . . . . 16
  6.1.  URN Sub-Namespace Registration for
        urn:ietf:params:xml:ns:location-filter . . . . . . . . . . 16
  6.2.  Schema Registration for location-filter  . . . . . . . . . 16
7.  Contributors . . . . . . . . . . . . . . . . . . . . . . . . . 17
8.  Acknowledgments  . . . . . . . . . . . . . . . . . . . . . . . 17
9.  References . . . . . . . . . . . . . . . . . . . . . . . . . . 17
  9.1.  Normative References . . . . . . . . . . . . . . . . . . . 17
  9.2.  Informative References . . . . . . . . . . . . . . . . . . 18

1. Introduction πŸ¦‹

okay so conveying location info wrapped in a PIDF-LO [RFC4119] document inside SIP is covered in [SIP-LOC] πŸ’– there's also an async option that uses the SIP event notification mechanisms (see RFC 3265 [RFC3265]). that one sends PIDF-LO info using the presence event package [RFC3856]. this doc focuses on the event notification paradigm ✨

deciding when to send location notifications is honestly harder than for other kinds of notifications 😭 location can be measured as a continuous gradient, so it's hard to know when a change is big enough to be worth a ping. event notifications [RFC3265] can use filters (see RFC 4661 [RFC4661]) to cut down how many get sent 🫢 this doc defines an extension to RFC 4661 [RFC4661] that only lets through location events that are relevant to the subscriber. these filters stick around until they get replaced by a newer filter or the subscription itself ends πŸ’…

the frequency you need depends a LOT on the geo app 🌸 the subscriber should be able to get async notifications at the right frequency and granularity, without getting flooded by a pile of notifications that don't matter to the app πŸ™ˆ

this doc defines new event filters and also describes some others that already exist, which might matter to a subscriber doing location filtering 🧚 with the functionality here, notifications can be sent in these cases:

  1. the Target moves more than a specified distance since the last notification (see Section 3.1).
  2. the Target exceeds a specified speed (see Section 3.2).
  3. the Target enters or exits a 2-dimensional region, described by a circle or a polygon (see Section 3.4).
  4. one or more of the values of the specified civic location have changed for the location of the Target (see Section 3.3). For example, the value of the civic address '<A1>' element has changed from 'California' to 'Nevada'.
  5. the type of location information requested (see Section 3.5) changes, for example, from civic to geodetic location or vice versa.
  6. a certain amount of time passes (see Section 3.6).

2. Terminology πŸ“š

The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC 2119 [RFC2119].

this doc also reuses terminology from [RFC6280] πŸ’œ

3. Filter Definitions πŸ’…

this spec builds on a bunch of other specs, as Section 1 mentioned 🌈 to cut down the number of options (which lowers the chance of interop problems), the parts of [RFC4661] listed here MUST be implemented: the <ns-bindings> element (see Section 3.3 of [RFC4661]); the <filter> element (Section 3.4 of [RFC4661]); and the <trigger> element (Section 3.6 of [RFC4661]), except for the <added> and <removed> sub-elements ✨

3.1. Movement πŸ¦‹

the <moved> element MUST contain a value in meters. it's the minimum distance the resource has to have moved from where it was when the last notification was sent, before this event fires 🌸 the distance MUST be measured in meters absolutely from the point of the last notification, and it has to include vertical movement too 🧚 the <moved> element MUST NOT appear more than once as a child of the <filter> element πŸ™…β€β™€οΈ

<?xml version="1.0" encoding="UTF-8"?>
<filter-set
    xmlns="urn:ietf:params:xml:ns:simple-filter"
    xmlns:lf="urn:ietf:params:xml:ns:location-filter">
    <filter id="123" uri="sip:presentity@example.com">
        <trigger>
            <lf:moved>300</lf:moved>
        </trigger>
    </filter>
</filter-set>

                  Figure 1: Movement Filter Example

3.2. Speed Changes 🏎️

speed changes can be filtered by combining RFC 4661 stuff with the PIDF-LO extensions for spatial orientation, speed, heading, and acceleration from [RFC5962] πŸ’– the value of the <speed> element from [RFC5962] MUST be defined in meters per second. also, the condition can be met by a change on any axis, altitude included πŸ¦‹

figure 2 shows an example of a trigger that fires when the Target's speed changes by 3 meters per second πŸŽ€

<?xml version="1.0" encoding="UTF-8"?>
<filter-set xmlns="urn:ietf:params:xml:ns:simple-filter">
    <ns-bindings>
        <ns-binding prefix="dyn"
            urn="urn:ietf:params:xml:schema:pidf:dynamic"/>
    </ns-bindings>
    <filter id="123" uri="sip:presentity@example.com">
        <trigger>
            <changed by="3">
              //dyn:speed
            </changed>
        </trigger>
    </filter>
</filter-set>

                   Figure 2: Speed Change Example

an implementation MUST support <ns-bindings> to replace the namespace prefix ✨ the XPath expression MUST start with a '//' followed by a single element. no other form of XPath expression is supported πŸ™…β€β™€οΈ the <changed> element has a few attributes, but only the 'by' attribute MUST be implemented by this spec πŸ‘‘

3.3. Element Value Changes ✨

okay so changes in values, like civic location info, are covered by the base functionality from RFC 4661 using the <changed> element πŸ’… no cap, it's already built in

here's a filter that fires when the Target's location changes from 'FR' (France) to some other country πŸ‡«πŸ‡·βœˆοΈ

<?xml version="1.0" encoding="UTF-8"?>
<filter-set xmlns="urn:ietf:params:xml:ns:simple-filter">
    <ns-bindings>
        <ns-binding prefix="ca"
            urn="urn:ietf:params:xml:ns:pidf:geopriv10:civicAddr"/>
    </ns-bindings>
    <filter id="123" uri="sip:presentity@example.com">
        <trigger>
            <changed from="FR">//ca:country</changed>
        </trigger>
    </filter>
</filter-set>

Figure 3: Element Value Change Example (Country Change)

now, if you want to know whether ANY one element in a list of CAtypes changes, the elements have to go into separate <changes> filters so the subscriber gets notified when any of the element values change 🫢 Figure 4 shows this and makes the difference super clear πŸ”₯

(A change in value of ANY of the five tokens triggers an event.)

<?xml version="1.0" encoding="UTF-8"?>
<filter-set xmlns="urn:ietf:params:xml:ns:simple-filter">
    <ns-bindings>
        <ns-binding prefix="ca"
            urn="urn:ietf:params:xml:ns:pidf:geopriv10:civicAddr"/>
    </ns-bindings>
    <filter id="123" uri="sip:presentity@example.com">
           <trigger>
               <changed>//ca:country</changed>
           </trigger>
           <trigger>
               <changed>//ca:A1</changed>
           </trigger>
           <trigger>
               <changed>//ca:A2</changed>
           </trigger>
           <trigger>
               <changed>//ca:A3</changed>
           </trigger>
           <trigger>
               <changed>//ca:PC</changed>
           </trigger>
    </filter>
</filter-set>

Figure 4: Element Value Change Example

finally, Figure 5 is the one where a notification goes out when the civic address tokens A3 and PC change. BOTH elements have to change for the <trigger> element to evaluate to TRUE πŸ‘‘

(Only a change in BOTH tokens triggers an event.)

<?xml version="1.0" encoding="UTF-8"?>
<filter-set xmlns="urn:ietf:params:xml:ns:simple-filter">
    <ns-bindings>
        <ns-binding prefix="ca"
            urn="urn:ietf:params:xml:ns:pidf:geopriv10:civicAddr"/>
    </ns-bindings>
    <filter id="123" uri="sip:presentity@example.com">
        <trigger>
            <changed>//ca:A3</changed>
            <changed>//ca:PC</changed>
        </trigger>
    </filter>
</filter-set>

Figure 5: Element Value Change Example

Note: the civic address tokens country, A1, A2, ..., A6 are hierarchical 🌳 so a change in one token will probably also change the tokens lower down. For example, a change in A3 ('city or town') may cause a change in A4, A5, and A6.

now the rules πŸ“œ An implementation MUST support <ns-bindings> to replace the namespace prefix. The XPath expression MUST start with a '//' followed by a single element. No other form of XPath expression is supported, and no other variant is supported either. The <changed> element comes with a few attributes, and the 'by', 'to', and 'from' attributes MUST be implemented to support this specification πŸŽ€


3.4. Entering or Exiting a Region 🌸

the <enterOrExit> condition is satisfied when the Target enters or exits a 2-dimensional region, which is either a polygon (Section 5.2.2 of [RFC5491]) or a circle (Section 5.2.3 of [RFC5491]). The <enterOrExit> element MUST contain either a polygon or a circle as a child element. It MUST NOT have more than one polygon and/or circle πŸ™…β€β™€οΈ

if the Target was previously outside the region, the notifier sends a notification once the Target's location is within the region with at least 50% confidence. Similarly, if the Target starts inside the region, a notification gets sent when the Target's location moves outside the region with at least 50% confidence πŸ¦‹

ngl this part is lowkey tricky. 50% confidence that the Target is inside does NOT mean 50% outside. The confidence that the location is within the region, plus the confidence that it's outside, is limited to the confidence of the location. The total depends on how confident the location is, which is always less than 100% (95% is recommended in [RFC5491]). The upside is that notifications are naturally limited: small movements at the borders of the region (relative to the uncertainty of the location) don't trigger notifications. big brain move 🧠✨

Figure 6 shows filter examples where a notification is sent when the Target enters or exits an area described by a circle, and Figure 7 describes an area using a polygon πŸ—ΊοΈ

<?xml version="1.0" encoding="UTF-8"?>
<filter-set
    xmlns="urn:ietf:params:xml:ns:simple-filter"
    xmlns:lf="urn:ietf:params:xml:ns:location-filter"
    xmlns:gml="http://www.opengis.net/gml"
    xmlns:gs="http://www.opengis.net/pidflo/1.0">

    <filter id="123" uri="sip:presentity@example.com">
        <trigger>
            <lf:enterOrExit>
                <gs:Circle
                    srsName="urn:ogc:def:crs:EPSG::4326">
                    <gml:pos>42.5463 -73.2512</gml:pos>
                    <gs:radius
                        uom="urn:ogc:def:uom:EPSG::9001">
                        850.24
                    </gs:radius>
                </gs:Circle>
            </lf:enterOrExit>
        </trigger>
    </filter>
</filter-set>

Figure 6: <enterOrExit> Circle Filter Example

<?xml version="1.0" encoding="UTF-8"?>
<filter-set
    xmlns="urn:ietf:params:xml:ns:simple-filter"
    xmlns:lf="urn:ietf:params:xml:ns:location-filter"
    xmlns:gml="http://www.opengis.net/gml">

    <filter id="123" uri="sip:presentity@example.com">
        <trigger>
            <lf:enterOrExit>
                <gml:Polygon srsName="urn:ogc:def:crs:EPSG::4326">
                    <gml:exterior>
                        <gml:LinearRing>
                            <gml:pos>43.311 -73.422</gml:pos>
                            <!--A-->
                            <gml:pos>43.111 -73.322</gml:pos>
                            <!--F-->
                            <gml:pos>43.111 -73.222</gml:pos>
                            <!--E-->
                            <gml:pos>43.311 -73.122</gml:pos>
                            <!--D-->
                            <gml:pos>43.411 -73.222</gml:pos>
                            <!--C-->
                            <gml:pos>43.411 -73.322</gml:pos>
                            <!--B-->
                            <gml:pos>43.311 -73.422</gml:pos>
                            <!--A-->
                        </gml:LinearRing>
                    </gml:exterior>
                </gml:Polygon>
            </lf:enterOrExit>
        </trigger>
    </filter>
</filter-set>

Figure 7: <enterOrExit> Polygon Filter Example


3.5. Location Type πŸ’œ

the <locationType> element MAY be included as a child element of the <what> element πŸ“ It holds a list of the location information types the subscriber is asking for. Here are the possible values:

  • any: The Notifier SHOULD attempt to provide location information in all forms available to it.
  • geodetic: The Notifier SHOULD return a location by value in the form of a geodetic location.
  • civic: The Notifier SHOULD return a location by value in the form of a civic address.

the Notifier SHOULD return the requested location type or types. Which types it returns also depends on the optional 'exact' attribute. If 'exact' is set to "true", then the Notifier MUST return either the requested location type or no location information at all. The 'exact' attribute doesn't apply (it's ignored) when someone asks for "any" πŸ™ˆ

if you ask for specific locationType(s) and 'exact' is "false", the Notifier MAY provide additional location types, or it MAY provide alternative types if the request can't be satisfied for a requested location type 🧚

if the <locationType> element is absent, a value of "any" MUST be assumed as the default πŸ’–

the Notifier SHOULD provide civic and geodetic location info in the response in the same order they were included in the "locationType" element of the request, if both were explicitly requested. The main reason to include specific location types with 'exact' set to "false" is to make sure you get the available locations in a specific order 🎯 For example, a subscription for "civic" (with 'exact' set to "false") could come back with any of these:

  • civic
  • civic, geodetic
  • geodetic (only if civic is not available)

the default value of "false" for 'exact' lets the Notifier choose to return something beyond what you specified, like a set of location URIs when only a civic location was requested ✨

here's Figure 8, which uses the <locationType> element with the 'exact' attribute πŸ‘€

<?xml version="1.0" encoding="UTF-8"?>
<filter-set
    xmlns="urn:ietf:params:xml:ns:simple-filter"
    xmlns:lf="urn:ietf:params:xml:ns:location-filter">
    <filter id="123" uri="sip:presentity@example.com">
        <what>
            <lf:locationType exact="true">
              geodetic
            </lf:locationType>
        </what>
    </filter>
</filter-set>

Figure 8: <locationType> Filter Example

3.6. Rate Control πŸŽ€

Okay so [RFC6446] levels up the SIP events framework with three Event header field parameters. Subscribers can set a minimum, a maximum, and an adaptive minimum for how many event notifications the notifier sends them πŸ’…. That means the subscriber is basically in charge of the notification stream, which is super useful if you don't want to get flooded 🌊. This document only uses two of them: min-rate (the minimum notifications per second) and max-rate (the maximum notifications per second) πŸ’–. From everything in [RFC6446], only these two need to be implemented ✨. Also, whenever the time since the latest notification goes past the interval for 1 / "min-rate", the notifier sends the whole current state again, just like it does after a subscription refresh πŸ”.

The notifier has to send a NOTIFY request right after the subscription gets created 🫢. If there's no state available yet, that NOTIFY can go out with no content πŸ™ˆ. Then a separate NOTIFY with location gets generated later, so that the rate of notifications since the last NOTIFY lands somewhere between min-rate and max-rate πŸ¦‹. Location apps care a LOT about how that first NOTIFY behaves and what it returns, like in emergency call routing 🚨. The first NOTIFY might not have the full state, and that's totally fine, it's just how it works 😭.

      Subscriber          Notifier
          |---SUBSCRIBE(1)--->|  Create subscription (w/large value
          |<-------200--------|    for min-rate and max-rate)
          |<-----NOTIFY(2)----|  Return initial notify with no state
          |--------200------->|
          |        ...        |
          |<-----NOTIFY(3)----|  Return full state (between min-rate
          |--------200------->|    and max-rate)
          |---SUBSCRIBE(4)--->|  Update subscription (to update
          |<-------200--------|    min-rate and max-rate)

               Figure 9: SUBSCRIBE/NOTIFY with Rate Control

Figure 9 shows the whole SUBSCRIBE/NOTIFY flow πŸ‘‘. The first SUBSCRIBE (message 1) comes with filters and a min-rate rate control parameter 🧚. Sometimes you need some location info really fast, even if it's kind of fuzzy, because more accurate info might show up later ✨. Emergency call routing is the classic example: an emergency services routing proxy needs location good enough for routing pretty quickly, and then a Public Safety Answering Point asks for location to dispatch help πŸš‘πŸ’œ.

So to get location in a timely way with SUBSCRIBE/NOTIFY, it is RECOMMENDED that the first SUBSCRIBE includes a min-rate with a big value, which means a super short wait before the next notification 🌸. Then you update it in a later message to something more sensible πŸ“. This does the same job as the responseTime attribute in Section 6.1 of [RFC5985] πŸ’…. So the min-rate on that first request is way bigger (way faster) than the value you update it to later πŸ’–. Depending on what min-rate is set to, the notifier might send the initial NOTIFY (message 2) right away with no body if there's no location info yet πŸ™ˆ. The good stuff can then show up in the next NOTIFY (message 3) πŸŽ‰. You can update min-rate either in the 200 response to the NOTIFY that carries location state (message 3), or in a later SUBSCRIBE request (message 4) πŸ¦‹.


4. XML Schema πŸ’œ

  <?xml version="1.0" encoding="UTF-8"?>
  <xs:schema
      targetNamespace="urn:ietf:params:xml:ns:location-filter"
      xmlns:filter="urn:ietf:params:xml:ns:location-filter"
      xmlns:xs="http://www.w3.org/2001/XMLSchema"
      xmlns:gml="http://www.opengis.net/gml">

      <xs:element name="enterOrExit" type="gml:GeometryPropertyType"/>

      <xs:element name="moved" type="filter:movedType"/>

      <xs:complexType name="movedType">
         <xs:simpleContent>
            <xs:extension base="xs:double">
              <xs:anyAttribute namespace="##any" processContents="lax"/>
            </xs:extension>
         </xs:simpleContent>
      </xs:complexType>

      <xs:element name="locationType" type="filter:locationTypeType"/>

      <xs:simpleType name="locationTypeBase">
          <xs:union>
              <xs:simpleType>
                  <xs:restriction base="xs:token">
                      <xs:enumeration value="any"/>
                  </xs:restriction>
              </xs:simpleType>
              <xs:simpleType>
                  <xs:restriction base="filter:locationTypeList">
                      <xs:minLength value="1"/>
                  </xs:restriction>
              </xs:simpleType>
          </xs:union>
      </xs:simpleType>

      <xs:simpleType name="locationTypeList">
          <xs:list>
              <xs:simpleType>
                  <xs:restriction base="xs:token">
                      <xs:enumeration value="civic"/>
                      <xs:enumeration value="geodetic"/>
                  </xs:restriction>
              </xs:simpleType>
          </xs:list>
      </xs:simpleType>
      <xs:complexType name="locationTypeType">
            <xs:simpleContent>
                <xs:extension base="filter:locationTypeBase">
                    <xs:attribute name="exact" type="xs:boolean"
                        use="optional" default="false"/>
                </xs:extension>
            </xs:simpleContent>
        </xs:complexType>
  </xs:schema>

                           Figure 10: XML Schema

5. Security Considerations πŸ”

This document only specifies one element, namely filters, which gets used inside bigger systems 🧩. Because of that, it builds on a bunch of other specs for security of the whole solution, namely:

  • the SIP event notification mechanism, described in RFC 3265 [RFC3265], which defines the SUBSCRIBE/NOTIFY messages.
  • the presence event package, described in RFC 3856 [RFC3856], which is a concrete version of the general event notification framework.
  • the filter framework, described in RFC 4661 [RFC4661], which offers a way to cut down on how many notifications get sent.

Last but not least, this document indirectly (through the SIP presence event package) relies on PIDF-LO, described in RFC 4119 [RFC4119], as the XML container that carries location information πŸ“¦.

Each of the documents above has its own Security Considerations section, but the security and privacy stuff is best covered by the SIP presence event package, so check Section 9 of [RFC3856], plus the GEOPRIV architectural description in [RFC6280] πŸ•΅οΈβ€β™€οΈ.

The authorization policies that limit access to location information come from other protocols, like Common Policy [RFC4745], Geolocation Policy [GEO-POLICY], or the newer work around HTTP-Enabled Location Delivery (HELD) context [HELD] πŸ—οΈ. Even though [GEO-POLICY] defines a standardized format for geolocation authorization policies, it doesn't define any specific policies for controlling filters πŸ™ƒ.

This document extends the filter framework with location-specific filters πŸ—ΊοΈ. Local policies might be tied to using certain filter constructs, and to how many notifications specific filter settings could cause πŸ“ˆ. Uploading filters have a big impact on how a server handles the request 😳. So it's especially important that messages with this extension are authenticated and authorized πŸ”‘. RFC 4661 [RFC4661] discusses this threat and proposes authentication and authorization solutions that apply to this specification πŸ’€.


6. IANA Considerations 🌈

6.1. URN Sub-Namespace Registration for urn:ietf:params:xml:ns:location-filter πŸ¦„

This section registers a new XML namespace, following the guidelines in [RFC3688] πŸ“.

  • URI: urn:ietf:params:xml:ns:location-filter
  • Registrant Contact: IETF, GEOPRIV working group, <geopriv@ietf.org>, as delegated by the IESG <iesg@ietf.org>.
  • XML:
BEGIN
<?xml version="1.0"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.0//EN"
          "http://www.w3.org/TR/xhtml-basic/xhtml-basic10.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <meta http-equiv="content-type"
     content="text/html;charset=iso-8859-1"/>
  <title>Location Filter Namespace</title>
</head>
<body>
  <h1>Namespace for PIDF-LO Location Filters</h1>
  <h2>urn:ietf:params:xml:ns:location-filter</h2>
  <p>See <a href="http://www.rfc-editor.org/rfc/rfc6447.txt">
         RFC 6447</a>.</p>
</body>
</html>
END

6.2. Schema Registration for location-filter 🧾

This specification registers a schema, following the guidelines in [RFC3688] ✨.

  • URI: urn:ietf:params:xml:schema:location-filter
  • Registrant Contact: IETF, GEOPRIV Working Group (geopriv@ietf.org), as delegated by the IESG (iesg@ietf.org).
  • XML: The XML can be found as the sole content of Section 4 πŸ’–.

7. Contributors 🫢

We would like to thank Martin Thomson and James Polk for their contributions to this document 🌷.

8. Acknowledgments πŸŽ€

Thanks to Richard Barnes, Alissa Cooper, Randall Gellens, Carl Reed, Ben Campbell, Adam Roach, Allan Thomson, and James Winterbottom for their comments πŸ’….

Furthermore, we would like to thank Alexey Melnikov for his IESG review comments πŸ‘‘.

9. References πŸ“š

9.1. Normative References

Okay bestie, these are the must-reads πŸ“š Every one of these is load-bearing, so no skipping! πŸ’…

[GML]         OpenGIS, "Open Geography Markup Language (GML)
              Implementation Specification", OpenGIS OGC 02-023r4,
              January 2003,
              <http://www.opengis.org/techno/implementation.htm>.

[RFC2119]     Bradner, S., "Key words for use in RFCs to Indicate
              Requirement Levels", BCP 14, RFC 2119, March 1997.

[RFC3265]     Roach, A., "Session Initiation Protocol (SIP)-Specific
              Event Notification", RFC 3265, June 2002.

[RFC3856]     Rosenberg, J., "A Presence Event Package for the
              Session Initiation Protocol (SIP)", RFC 3856,
              August 2004.

[RFC4119]     Peterson, J., "A Presence-based GEOPRIV Location Object
              Format", RFC 4119, December 2005.

[RFC4661]     Khartabil, H., Leppanen, E., Lonnfors, M., and J.
              Costa-Requena, "An Extensible Markup Language (XML)-
              Based Format for Event Notification Filtering",
              RFC 4661, September 2006.

[RFC5491]     Winterbottom, J., Thomson, M., and H. Tschofenig,
              "GEOPRIV Presence Information Data Format Location
              Object (PIDF-LO) Usage Clarification, Considerations,
              and Recommendations", RFC 5491, March 2009.

[RFC5962]     Schulzrinne, H., Singh, V., Tschofenig, H., and M.
              Thomson, "Dynamic Extensions to the Presence
              Information Data Format Location Object (PIDF-LO)",
              RFC 5962, September 2010.

[RFC6280]     Barnes, R., Lepinski, M., Cooper, A., Morris, J.,
              Tschofenig, H., and H. Schulzrinne, "An Architecture
              for Location and Location Privacy in Internet
              Applications", BCP 160, RFC 6280, July 2011.

[RFC6446]     Niemi, A., Kiss, K., and S. Loreto, "Session Initiation
              Protocol (SIP) Event Notification Extension for
              Notification Rate Control", RFC 6446, January 2012.

9.2. Informative References

These ones are the helpful extras 🧚 Not strictly required to build the thing, but SO worth a read for the backstory ✨

[GEO-POLICY]  Schulzrinne, H., Tschofenig, H., Cuellar, J., Polk, J.,
              Morris, J., and M. Thomson, "Geolocation Policy: A
              Document Format for Expressing Privacy Preferences for
              Location Information", Work in Progress, October 2011.

[HELD]        Winterbottom, J., Tschofenig, H., and M. Thomson,
              "Location URI Contexts in HTTP-Enabled Location
              Delivery (HELD)", Work in Progress, October 2009.

[RFC3688]     Mealling, M., "The IETF XML Registry", BCP 81,
              RFC 3688, January 2004.

[RFC4745]     Schulzrinne, H., Tschofenig, H., Morris, J., Cuellar,
              J., Polk, J., and J. Rosenberg, "Common Policy: A
              Document Format for Expressing Privacy Preferences",
              RFC 4745, February 2007.

[RFC5985]     Barnes, M., "HTTP-Enabled Location Delivery (HELD)",
              RFC 5985, September 2010.

[SIP-LOC]     Polk, J., Rosen, B., and J. Peterson, "Location
              Conveyance for the Session Initiation Protocol", Work
              in Progress, September 2011.

Authors' Addresses πŸŽ€

Meet the squad who wrote this! 🫢

Rohan Mahy
Individual

EMail: rohan@ekabal.com


Brian Rosen
NeuStar
470 Conrad Dr.
Mars, PA  16046
US

Phone: +1 724 382 1051
EMail: br@brianrosen.net


Hannes Tschofenig
Nokia Siemens Networks
Linnoitustie 6
Espoo  02600
Finland

Phone: +358 (50) 4871445
EMail: Hannes.Tschofenig@gmx.net
URI:   http://www.tschofenig.priv.at
πŸ“¦ where this page comes from