Internet DRAFT - draft-rosenberg-sipping-reg-sub

draft-rosenberg-sipping-reg-sub






SIPPING                                                     J. Rosenberg
Internet-Draft                                             Cisco Systems
Expires: January 14, 2006                                  July 13, 2005


 Registration Coupled Subscriptions in the Session Initiation Protocol
                                 (SIP)
                   draft-rosenberg-sipping-reg-sub-00

Status of this Memo

   By submitting this Internet-Draft, each author represents that any
   applicable patent or other IPR claims of which he or she is aware
   have been or will be disclosed, and any of which he or she becomes
   aware will be disclosed, in accordance with Section 6 of BCP 79.

   Internet-Drafts are working documents of the Internet Engineering
   Task Force (IETF), its areas, and its working groups.  Note that
   other groups may also distribute working documents as Internet-
   Drafts.

   Internet-Drafts are draft documents valid for a maximum of six months
   and may be updated, replaced, or obsoleted by other documents at any
   time.  It is inappropriate to use Internet-Drafts as reference
   material or to cite them other than as "work in progress."

   The list of current Internet-Drafts can be accessed at
   http://www.ietf.org/ietf/1id-abstracts.txt.

   The list of Internet-Draft Shadow Directories can be accessed at
   http://www.ietf.org/shadow.html.

   This Internet-Draft will expire on January 14, 2006.

Copyright Notice

   Copyright (C) The Internet Society (2005).

Abstract

   When a Session Initiation Protocol (SIP) user agent starts up, it
   registers to the network and initiates numerous subscriptions in
   order to learn about various network events.  This results in a
   chatty startup procedure which substantially impacts recovery times
   under avalanche restart.  This specification proposes a mechanism
   whereby the subscriptions can be established as a side effect of the
   registration, alleviating this problem.




Rosenberg               Expires January 14, 2006                [Page 1]

Internet-Draft     Registration Coupled Subscriptions          July 2005


Table of Contents

   1.  Introduction . . . . . . . . . . . . . . . . . . . . . . . . .  3
   2.  Requirements . . . . . . . . . . . . . . . . . . . . . . . . .  4
   3.  Proposed Solution  . . . . . . . . . . . . . . . . . . . . . .  5
     3.1   Overview of Operation  . . . . . . . . . . . . . . . . . .  5
     3.2   User Agent Behavior  . . . . . . . . . . . . . . . . . . .  8
     3.3   Registrar Behavior . . . . . . . . . . . . . . . . . . . .  9
       3.3.1   REGISTER Processing  . . . . . . . . . . . . . . . . .  9
       3.3.2   PUBLISH Processing . . . . . . . . . . . . . . . . . . 10
     3.4   Event Server Behavior  . . . . . . . . . . . . . . . . . . 11
     3.5   Subscription Header Field  . . . . . . . . . . . . . . . . 13
     3.6   Examples . . . . . . . . . . . . . . . . . . . . . . . . . 13
       3.6.1   Registrar has Dialog Ownership . . . . . . . . . . . . 14
       3.6.2   Event Server Owned Dialog  . . . . . . . . . . . . . . 16
       3.6.3   Hybrid Model . . . . . . . . . . . . . . . . . . . . . 17
   4.  References . . . . . . . . . . . . . . . . . . . . . . . . . . 18
     4.1   Normative References . . . . . . . . . . . . . . . . . . . 18
     4.2   Informative References . . . . . . . . . . . . . . . . . . 18
       Author's Address . . . . . . . . . . . . . . . . . . . . . . . 19
       Intellectual Property and Copyright Statements . . . . . . . . 20






























Rosenberg               Expires January 14, 2006                [Page 2]

Internet-Draft     Registration Coupled Subscriptions          July 2005


1.  Introduction

   When a Session Initiation Protocol (SIP) [1] user agent starts up, it
   typically follows a series of message exchanges with servers in the
   network.  At a minimum, this startup procedure involves a SIP
   registration that allows the user agent to receive incoming requests.
   However, over time, numerous event packages [2] have been defined
   that provide a user agent with useful information through the
   duration of its connection to the network.  These packages include:

   Message Waiting: RFC 3842 [11] provides a message waiting indication
      event package.  Typically, a user agent would subscribe to its own
      Address-of-Record (AOR) for this event package, in order to find
      out about messages that have been left for that user.  This
      provides the familiar "message waiting lamp" on many business
      telephones.  It is valuable for a user agent to subscribe to this
      package through the duration of its registration, in the event
      that messages are explicitly directed to a user's voicemail and do
      not ring their phone (this can happen, for example, if the caller
      utilizes the caller preferences specification [12] to direct a
      call to voicemail).

   Registration Event: RFC 3680 [13] allows a user agent to learn about
      the status of its registration.  Typically, a user agent would
      subscribe to its own AOR for this event package, in order to find
      out if the network has removed its registration.  Such removals
      happen in cases of graceful network shutdown, or when a user needs
      to re-register and re-authenticate due to concerns on validity of
      credentials.

   Presence List: A user may have a "buddy list", which contains a list
      of users whose presence is desired.  A user will subscribe to
      their buddy list using an event list subscription [14] to the
      presence event package [15].  This is done by subscribing to a
      resource that is synonomous with the user's own buddy list.

   Watcher Info: In order to find out about attempts that have been made
      to subscribe to a users presence, that user makes use of the
      watcher info event template package [16].  They would do this by
      subscribing to their own AOR with the presence.winfo event
      package.  Subscription attempts that are unauthorized will result
      in a notification, informing the user of this fact and allowing
      them to approve or deny the subscription.

   Dialog Events: Certain features, such as single line extension,
      require a user agent to find out about calls in progress on other
      user agents associated with the same AOR.  This is done through
      subscriptions to the dialog event package [17].  The user agent



Rosenberg               Expires January 14, 2006                [Page 3]

Internet-Draft     Registration Coupled Subscriptions          July 2005


      would typically subscribe to their own AOR, and learn about calls
      in progress to other user agents.

   Configuration Events: The configuration event package [18] allows a
      UA to learn about changes in its configuration.  This is done by
      having the UA subscribe to its own identity (which may be the AOR)
      for the config event package.

   As a consequence of this, each time a user agent starts up, they will
   generate a REGISTER transaction, plus a SUBSCRIBE and a NOTIFY
   transaction for each event package the user agent is interested in.
   Based on the above discussion, this could be upwards of six event
   packages, resulting in a total of fourteen transactions that take
   place on startup.  Furthermore, each of these subscriptions needs to
   be periodically refreshed (as does the registration), resulting in
   ongoing messaging.

   This overhead is particularly problematic during an avalanche
   restart.  This occurs when a failure event of some sort causes all
   user agents to simultaneously re-register.  This is most common when
   recovering after a power outage.  When the power returns, all the
   user agents will start booting simultaneously, and at the same time,
   each will execute their startup sequence.  The more complex this
   sequence, the longer it takes for the system to return to service,
   and the more robust the network has to be.  Another cause of
   avalanche restart is recovery after a catastrophic network failure,
   such as a network partition.  If a network partition should last
   longer than the subscription lifetime, once the partition heals, each
   client will discover this and attempt to re-register and re-subscribe
   to each event package.

   The overhead is also problematic on wireless links and other
   interfaces where bandwidth is at a premium.

2.  Requirements

   A solution to this problem should meet the following requirements:

   1.  The solution must substantially reduce the amount of SIP
       messaging traffic that takes place when a user agent starts up.

   2.  The solution must substantially reduce the amount of network
       processing that needs to take place when a user agent starts up.

   3.  The solution must not fundamentally alter the event model of
       RFC3265.





Rosenberg               Expires January 14, 2006                [Page 4]

Internet-Draft     Registration Coupled Subscriptions          July 2005


3.  Proposed Solution

   This document proposes a solution to this problem, based on the
   following observations:

   1.  In all of the above cases, the subscription is desired for the
       duration of the registration of the UA.

   2.  In all of the above cases, the user agent is subscribing to a
       resource which it owns; either its AOR or a related resource,
       like a buddy list.  As a consequence, the authorization policies
       for the subscriptions always allow that user to subscribe.  A
       policy in which a user can subscribe to their own events are
       called "self authorization".


3.1  Overview of Operation

   Based on these observations, the approach proposed here is to
   strongly couple subscriptions with registrations, and to actually use
   the registration to create the subscriptions.  A subscription that is
   created as a result of a successful registration is called a
   registration-coupled subscription.  The basic approach is shown in




























Rosenberg               Expires January 14, 2006                [Page 5]

Internet-Draft     Registration Coupled Subscriptions          July 2005


            +-----------+     +-----------+     +-----------+
            |           |     |           |     |           |
            | Event     |     | Event     |     | Event     |
            |   Server  |     |   Server  |     |   Server  |
            |           |     |           |     |           |
            +-----------+     +-----------+     +-----------+
                    \              |             /
                     \             |            /
                      \            |           /
                       \           |          /
                        \          |         /   PUBLISH
                         \         |        /
                          V        V       /
                           +-----------+  V
                           |           |
                           | Registrar |
                           |           |
                           |           |
                           +-----------+
                                |
                                |
                                |
                                |  REGISTER+
                                |  NOTIFY
                                |
                            +--------+
                            |        |
                            |   UA   |
                            |        |
                            +--------+

                                 Figure 1

   To create a registration-coupled subscription, a UA includes a
   Subscription header field in its REGISTER message.  This header field
   includes a list of the desired event packages, and for each, the
   resource to which a subscription is desired and any event header
   field parameters.  There is no need for a Require header field.  The
   registrar looks for the Subscription header field.  For each value,
   it examines the event package and target resource.  If the resource
   is in the domain of the registrar, and the resource has an
   authorization policy of "self", and the registrar allows registration
   coupled subscriptions for that event package, the registrar creates
   the dialog and a subscription.  The 200 OK to the REGISTER contains
   an indication of whether the subscription was created, and if so, the
   remote tag needed to complete the dialog identifier.

   The UAC will create a dialog and a subscription for each value of the



Rosenberg               Expires January 14, 2006                [Page 6]

Internet-Draft     Registration Coupled Subscriptions          July 2005


   Subscription header field in the response.  As there will be one of
   these per event package, the end result is a single dialog for each
   event package that the client wants to subscribe to.  Dialogs are not
   shared across event packages.  The dialog identifiers are obtained by
   copying the Call-ID and local tag from the REGISTER, with the remote
   tag from the Subscription header field value.  Similarly, the
   registrar will create a subscription.  The dialog identifiers and
   local sequence number are set in the same way.  Its route set is
   taken from the Path header field from the registration [4].

   At this point, a proper subscription is established at the UA and the
   registrar.  The registrar can send a NOTIFY at any time.  The initial
   NOTIFY normally sent upon receipt of a SUBSCRIBE is not required, as
   the REGISTER response serves that purpose.  The subscriptions are all
   refreshed through registration refreshes.  If the UAC omits an event
   and resource from a Subscription header field in its REGISTER, it
   means that the client wishes to unsubscribe.  Similarly, if the 200
   OK to the REGISTER omits that event package and resource, it means
   that the subscription was terminated.  However, the client cannot
   ever send a SUBSCRIBE to refresh the subscription.  Any such request
   is rejected with a 403.

   It is important to note that there is a dialog properly established
   as part of this mechanism.  The dialog is established by providing
   the dialog parameters through the registration, and then to make the
   dialog state part of the registration state.  The dialog is then
   refreshed and maintained just like registration state.  If a user has
   multiple user agents registered to the same AOR, multiple dialogs
   would be created.  This means that the dialogs terminate on the
   registrar as well.  In order for events to be delivered to the
   clients in NOTIFY messages, an event server generates a PUBLISH
   message when it wants to send an event to a user agent.  The PUBLISH
   is routed to the registrar, where it examines the URI in the request
   URI.  If the user is registered, it goes through each registered
   contact.  If the registration of that contact had created a coupled
   subscription, the registrar checks if the registration-coupled
   subscriptions include the event package in the PUBLISH.  If they do,
   the registrar copies the event data in the body of the PUBLISH into a
   NOTIFY, and sends it to the user agent.

   As an additional mechanism, the event servers themselves can
   subscribe to the registration event package for all subscribers.
   WHenever a user registers, a notification would get delivered to the
   event server.  It can then check which users are registered or not,
   and use this information to determine whether or not it wishes to
   send a PUBLISH.  Alternatively, the reg-event notifications can
   contian all of the information on the registration-coupled
   subscriptions - their dialog identifiers, event packages, and so on.



Rosenberg               Expires January 14, 2006                [Page 7]

Internet-Draft     Registration Coupled Subscriptions          July 2005


   This would allow the event server itself to "take over" the
   subscription, and take ownership of the dialog.  In that case, it can
   send the NOTIFY directly, instead of sending a PUBLISH to the
   registrar.  Indeed, the event server can make a decision on a
   subscriber-by-subscriber basis as to whether it wishes to own the
   dialogs or not.

3.2  User Agent Behavior

   A user agent SHOULD be configured with a set of event packages that
   it wishes to couple with its registrations.  For each such package,
   when the client performs its initial registration, it includes a
   Subscription header field value into its request.  That value
   contains the address-of-record for the target of the subscription.
   This AOR MUST be one within the same domain as the domain of
   registration.  Typically, it will be the same as the AOR for the user
   themselves.  The UA includes any parameters it would otherwise
   include in the Event header field into the Subscription header field.
   The UA SHOULD include an Accept header field in the request, and
   include the content types the client supports for that event package.
   Otherwise, the registration is generated identically to a normal
   registration.

   If the response to the REGISTER is a 200 OK, the client looks for the
   Subscription header field.  If the header field is not present, the
   user agent knows that either this mechanism is not supported in the
   registar, or is supported, but not in use for any of the event
   packages requested by the client.  In that case, the user agent
   SHOULD proceed with a normal subscription according to the specifics
   of the event packages the client is interested in.

   If the 200 OK response to the REGISTER did contain a Subscription
   header field, the user agent goes through each value.  It constructs
   a dialog by setting the Call-ID to the value in the REGISTER
   response, the local tag to the From tag the client placed in the
   REGISTER request, and the remote tag from the value of the
   Subscription header field.  The local URI is set to the value in the
   From header field of the REGISTER request, and the remote URI to the
   value in the To header field of the REGISTER request.  The local and
   remote CSeq are initially empty.  Since the client never sends a
   request within the dialog, the local CSeq never needs to be
   populated.  Similarly, the route set is empty.  If the REGISTER
   request was sent over TLS, and the Request-URI was a sips URI, the
   "secure" flag for the dialog is set.

   The dialog state persists for the duration of the registration of
   that contact.  When the UA determines that the contact expires, the
   dialog state is destroyed.  A UA can determine that a contact has



Rosenberg               Expires January 14, 2006                [Page 8]

Internet-Draft     Registration Coupled Subscriptions          July 2005


   expired because it times out and is not refreshed, or because the
   client receives a registration event notification informing it that
   the contact has been terminated.

   If the client had included a Subscription header field in the request
   for a particular event package, and the REGISTER response contained a
   Subscrption header field, but that package was not listed, it means
   that the registrar is either refusing a subscription-coupled
   registration for that event package, or that subscription failed for
   some reason.  To determine the exact problem, the client SHOULD
   perform a regular, separate subscription to that event package.

   At any point during the lifetime of the registration, the client may
   receive a NOTIFY on the dialog created by the registration.
   Processing of that NOTIFY happens as described in the relevant event
   package and according to the details of RFC 3265.

   A registration refresh occurs identically to an initial registration.
   A client MUST include a Subscription header field value for each
   dialog it wishes to retain.  If a client omits a Subscription header
   field value for a particular event package, the dialog associated
   with that event package is terminated upon receipt of a 200 OK to the
   REGISTER request.

   If a client wishes to perform a subscription with event filters that
   need to be placed in the body of a request, the mechanism here cannot
   be used.  Rather, the client should perform a normal subscription
   using SUBSCRIBE.  An alternative would be to include the event
   filters as a body of the REGISTER request.  Header field parameters
   could associated each MIME body with a particular event package.
   However, this introduces a lot of complexity for a corner case.  As
   such, this document recommends just performing a regular subscription
   to handle these cases.

3.3  Registrar Behavior

3.3.1  REGISTER Processing

   When a registrar receives a REGISTER request, it processes the
   registration normally per RFC 3261.  If the result would otherwise
   have been a successful registration resulting in a 200 OK, the
   procedures defined here are followed.

   The registrar checks for the presence of the Subscription header
   field in the REGISTER request.  The processing that follows is
   performed for each value of this header field.  Firstly, the
   registrar checks to see if it supports registration-coupled
   subscriptions for that particular event package.  Performing them for



Rosenberg               Expires January 14, 2006                [Page 9]

Internet-Draft     Registration Coupled Subscriptions          July 2005


   any particular event package is a matter of local policy.  Typically,
   it would be allowed when an event server is present in the network
   which supports the capabilities defined here.  If the registrar
   doesn't support registration-coupled subscriptions for that event
   package, it goes on to the next value of the Subscription header
   field.  Otherwise, processing continues.

   Next, the registrar validates that the resource in the header field
   value is a valid resource within the domain of the registrar.  If it
   is, processing continues.  Otherwise, the registrar goes on to the
   next value of the Subscription header field.  Next, it checks whether
   or not the UAC is authorized to subscribe to the resource.  The means
   by which authorization occurs is outside the scope of this
   specification.  Typically, registration-coupled subscriptions are
   performed with subscriptions where the authorization policy is such
   that a user is allowed to subscribe to themselves, and no others.
   This authorization policy, called "self", is readily provisioned on
   the registrar, and would not require complex interactions with other
   event servers.  If the registrar cannot determine authorization, or
   if the subscription is not authorized, the registrar goes on to the
   next value of the Subscription header field.  Otherwise, processing
   continues.

   At this point, the subscription has been authorized.  The registrar
   stores the event header field parameters in the Subscription header
   field value as part of the state associated with the registered
   contact.  These parameters are carried as a quoted string in the
   Subscription header field, so that they are readily separable from
   the Subscription header field parameters.  It also stores the event
   package.  The registrar chooses a tag that will serve as the remote
   tag of the dialog, according to the procedures of RFC 3261.  This tag
   is also stored as part of the state associated with the registered
   contact.  The Call-ID and From tag from the REGISTER request would
   have already been stored as part of normal registration processing,
   as would the Path header field value.  The registrar also stores the
   From header field of the REGISTER message.

   In the 200 OK to the REGISTER request, the registrar includes the
   Subscription header field.  Each value contains the event package
   name for each registration-coupled subscription that was created,
   along with the tag that completes the dialog.  The AOR SHOULD NOT be
   included.

3.3.2  PUBLISH Processing

   This specification allows a registrar to act as an event server for
   registration-coupled subscriptions.  When the registrar receives a
   PUBLISH message for a particular address-of-record, it checks that



Rosenberg               Expires January 14, 2006               [Page 10]

Internet-Draft     Registration Coupled Subscriptions          July 2005


   the PUBLISH has arrived from an event server that is authorized to
   publish events for the subscriber.  Typically, this is done based on
   the maintentance of a TLS connection between the registrar and the
   event server, used to identify the source of the messages to the
   registrar.  The registrar would typically authorize PUBLISH messages
   for a specific event package only if they came from a specific event
   server.

   Once the sender of the PUBLISH is authorized, the registrar performs
   a registration query for the AOR in the Request-URI of the PUBLISH
   message.  It checks to see if there are any contacts registered for
   that AOR that have registration-coupled subscriptions for that event
   package.  For each contact it finds, the registrar constructs a
   NOTIFY message.  The Call-ID of this NOTIFY is taken from the stored
   state associated with the registration.  The From header field URI is
   set to the AOR of the user.  The To header field URI is set to the
   value in the From header field of the most recent REGISTER message.
   The tag in the From header field is populated with the tag associated
   with the registration.  The tag in the To header field is populated
   with the tag stored with the Contact.  The Event header field of the
   NOTIFY is set to the event header field stored with the Contact.  The
   body of the NOTIFY is taken from the body of the PUBLISH.  The
   remainder of the NOTIFY is consructed as per RFC 3261, and then sent
   as a mid-dialog request.

   The registrar then generates a 200 OK to the PUBLISH request.  If the
   registrar found no matching registration-coupled subscriptions for
   the PUBLISH, it generates a 403 response to the PUBLISH request.
   This informs the event server that its event was not delivered.

3.4  Event Server Behavior

   It is assumed that event servers learn about events for a particular
   package for a particular subscriber through any number of means.
   These can include non-SIP mechanisms, SIP subscriptions to a
   resource, and so on.  However, they cannot include a SIP PUBLISH
   message sent to the AOR of the subscriber; those PUBLISH messages are
   routed to the registrar according to this specification.

   An event server MAY act as the dialog owner, or MAY leave that
   responsibility to the registrar.  However, it MUST NOT do both for
   the same subscriber within the duration of a registration from that
   subscriber.  To act as a dialog owner, the event server subscribes to
   the registration event package.  It MAY subscribe to this event
   package for each subcscriber individually, or it MAY subscribe to a
   resource that represents all subscribers or a group of users at the
   registrar (for example, sip:all-users@example.com).  The latter is
   preferable since it avoids the need for per-user subscription



Rosenberg               Expires January 14, 2006               [Page 11]

Internet-Draft     Registration Coupled Subscriptions          July 2005


   maintenance at the event server.

   The notifications of the dialog event package will contain
   information on each registration-coupled subscripton for a
   subscriber.  If the event server is acting as a dialog owner, it MUST
   store this information.  Effectively, the reg-event notification
   creates the dialog state and the event subscription at the event
   server.  When the event server wishes to send an event, it creates a
   NOTIFY using the dialog state and sends it, per RFC 3265 and RFC 3261
   procedures.  These NOTIFY messages won't even traverse the registrar.

   If the event server is not acting as a dialog owner, when it wishes
   to send a notification, it sends a PUBLISH message.  The request-URI
   of the PUBLISH is set to the AOR of the subscriber for whom a
   notification is to be delivered.  The content of the PUBLISH contains
   the event state that is to be delivered to the watcher.  The Event
   header field is populated with the value of the event package for
   which the notifications are intended.  This PUBLISH message is sent,
   and will be routed to the registrar.  The processing above will
   result in a NOTIFY being sent to each registered contact for that
   AOR.

   The choice of whether to act as dialog owner or not depends on
   several factors.  When the event server leaves dialog ownership to
   the registrar, it alleviates the need for the event server to
   maintain any kind of per-subscriber state.  However, it imposes
   additional work on the registrar to perform the registration queries
   and construction of NOTIFY messages.  Thus, this mode is useful for
   very infrequent events, such as a request to update a configuration
   profile in the configuration event package.  Dialog ownership makes
   more sense for more frequent events.  Also, since the registrar
   doesnt know the actual event state, it cannot send an initial NOTIFY
   with the current state when the dialog is first created.  It relies
   on the event server to do that.  As a result, if an event package
   requires state to be delivered as part of a NOTIFY generated when the
   subscription is created, the event server needs to maintain ownership
   of the dialog, or the hybrid model below needs to be used.

   A hybrid model is also possible.  An event server can receive reg-
   event notifications, but not store dialog state.  When it sees that
   the user has registerd or unregistered, it can send a PUBLISH
   message.  This is useful for infrequent notifications that need to be
   triggered on registration.  The hybrid model also allows the event
   server to generate a PUBLISH when a client first registers, that
   contains the current value of the event state.  This will cause the
   registrar to send a NOTIFY message with the current state.  This is
   useful for event packages where it is desireable to send event state
   as part of the initial NOTIFY.



Rosenberg               Expires January 14, 2006               [Page 12]

Internet-Draft     Registration Coupled Subscriptions          July 2005


   The hybrid model is particularly attractive, since it alleviates the
   need for the event server to maintain any kind of dialog state or
   per-subscriber subscription state, and yet it allows for the full
   features of a traditional event subscription.

3.5  Subscription Header Field

   The grammar for the Subscription header field is:



   Subscription    =  "Subscription" HCOLON (sub-param *(COMMA
                      sub-param))
   sub-param       =  event-type *(SEMI sub-param)
   sub-event-param =  sub-aor / sub-event-param / tag-param / generic-param
   sub-aor         =  "aor" EQUAL (SIP-URI / SIPS-URI)
   sub-event-param =  "e-param" EQUAL quoted-string

   Figure 3 and Figure 4 are an extension of  Tables 2 and 3 in RFC 3261
   [1] for the Subscription header field.  The column "INF" is for the
   INFO method [5], "PRA" is for the PRACK method [6], "UPD" is for the
   UPDATE method [7], "SUB" is for the SUBSCRIBE method [2], "NOT" is
   for the NOTIFY method [2], "MSG" is for the MESSAGE method [8], "PUB"
   is for the PUBLISH method [9], and "REF" is for the REFER method
   [10].


   Header field          where  proxy  ACK BYE CAN INV OPT REG REF

   Subscription            R      -     -   -   -   -   -   o   -
   Subscription          2xx      -     -   -   -   -   -   o   -

                    Figure 3: Subscription header field



   Header field          where  proxy  PRA UPD SUB NOT INF MSG PUB

   Subscription            R      -     -   -   -   -   -   -   -
   Subscription          2xx      -     -   -   -   -   -   -   -


                    Figure 4: Subscription header field


3.6  Examples





Rosenberg               Expires January 14, 2006               [Page 13]

Internet-Draft     Registration Coupled Subscriptions          July 2005


3.6.1  Registrar has Dialog Ownership

   In this example, the registrar holds ownership of the dialog.  The
   event server is a message waiting indicator server that publishes MWI
   events.


            UA          Registrar     MWI Server
             |(1) REGISTER  |              |
             |------------->|              |
             |(2) 200 OK    |              |
             |<-------------|              |
             |              |(3) PUBLISH   |
             |              |<-------------|
             |              |(4) 200 OK    |
             |              |------------->|
             |(5) NOTIFY    |              |
             |<-------------|              |
             |(6) 200 OK    |              |
             |------------->|              |


                     Figure 5: Registrar Owned Dialogs

   The REGISTER message (1) would look like:


   REGISTER sip:example.com SIP/2.0
   To: sip:joe@example.com
   From: sip:joe@example.com;tag=asd9887g
   Subscription: message-summary;aor=sip:joe@example.com
   Expires: 3600
   Via: SIP/2.0/UDP client.biloxi.example.com;branch=z9hG4bKnashds7
   Max-Forwards: 70
   Call-ID: 1j9FpLxk3uxtm8tn@biloxi.example.com
   CSeq: 1 REGISTER
   Content-Length: 0
   Contact: sip:client.biloxi.example.com

   The 200 OK to the REGISTER indicates successful creation of the
   dialog:










Rosenberg               Expires January 14, 2006               [Page 14]

Internet-Draft     Registration Coupled Subscriptions          July 2005


   SIP/2.0 200 OK
   To: sip:joe@example.com;tag=99j9jj
   From: sip:joe@example.com;tag=asd9887g
   Subscription: message-summary;tag=ghghghg
   Expires: 3600
   Via: SIP/2.0/UDP client.biloxi.example.com;branch=z9hG4bKnashds7
   Max-Forwards: 70
   Call-ID: 1j9FpLxk3uxtm8tn@biloxi.example.com
   CSeq: 1 REGISTER
   Content-Length: 0

   The PUBLISH from the event server comes when a new message arrives:


   PUBLISH sip:joe@example.com SIP/2.0
   To: sip:joe@example.com
   From: sip:mwi-server@example.com
   Event: message-summary
   Via: SIP/2.0/UDP mwi.example.com;branch=z9hG4bKnashas--d9
   Call-ID: 3k9FpLxhg88asd7m8tn@mwi.example.com
   CSeq: 1 PUBLISH
   Content-Type: application/simple-message-summary
   Content-Length: ---

   Messages-Waiting: yes
   Message-Account: sip:joe@mwi.example.com
   Voice-Message: 2/8 (0/2)

   This results in a notification from the registrar:


   NOTIFY sip:client.biloxi.example.com SIP/2.0
   To: sip:joe@example.com;tag=asd9887g
   From: sip:joe@example.com;tag=ghghghg
   Event: message-summary
   Via: SIP/2.0/UDP reg.example.com;branch=z9hG4bKnashas--d10
   Call-ID: 1j9FpLxk3uxtm8tn@biloxi.example.com
   CSeq: 1 NOTIFY
   Content-Type: application/simple-message-summary
   Content-Length: ---

   Messages-Waiting: yes
   Message-Account: sip:joe@mwi.example.com
   Voice-Message: 2/8 (0/2)







Rosenberg               Expires January 14, 2006               [Page 15]

Internet-Draft     Registration Coupled Subscriptions          July 2005


3.6.2  Event Server Owned Dialog


            UA          Registrar     MWI Server
             |              |(1) SUBSCRIBE |
             |              |<-------------|
             |              |(2) 200 OK    |
             |              |------------->|
             |              |(3) NOTIFY    |
             |              |------------->|
             |              |(4) 200 OK    |
             |              |<-------------|
             |(5) REGISTER  |              |
             |------------->|              |
             |(6) 200 OK    |              |
             |<-------------|              |
             |              |(7) NOTIFY    |
             |              |------------->|
             |              |(8) 200 OK    |
             |              |<-------------|
             |(9) NOTIFY    |              |
             |<----------------------------|
             |(10) 200 OK   |              |
             |---------------------------->|

   When the message waiting server starts up, it subscribes to the
   registration event package at the registrar (message 1).  The request
   URI identifies all users in the domain.  This generates a 200 OK
   (message 2), followed by a NOTIFY (message 3).  This NOTIFY doesn't
   contain any event state (there is too much), but it confirms the
   subscription.

   At some point later, the UA in question registers.  The registration
   sequence (messages 5/6) are as above.  This causes a reg-event NOTIFY
   to be sent to the mwi server (message 7).  This tells the server
   about the creation of a new contact, and also tells it that a MWI
   registration-coupled subscription was created.  It provides the
   dialog identifiers to the MWI server.  Next, the MWI server generates
   a NOTIFY to tell the client about the event state (9).












Rosenberg               Expires January 14, 2006               [Page 16]

Internet-Draft     Registration Coupled Subscriptions          July 2005


3.6.3  Hybrid Model


            UA          Registrar     MWI Server
             |              |(1) SUBSCRIBE |
             |              |<-------------|
             |              |(2) 200 OK    |
             |              |------------->|
             |              |(3) NOTIFY    |
             |              |------------->|
             |              |(4) 200 OK    |
             |              |<-------------|
             |(5) REGISTER  |              |
             |------------->|              |
             |(6) 200 OK    |              |
             |<-------------|              |
             |              |(7) NOTIFY    |
             |              |------------->|
             |              |(8) 200 OK    |
             |              |<-------------|
             |              |(9) PUBLISH   |
             |              |<-------------|
             |              |(10) 200 OK   |
             |              |------------->|
             |(11) NOTIFY   |              |
             |<-------------|              |
             |(12) 200 OK   |              |
             |------------->|              |

   When the message waiting server starts up, it subscribes to the
   registration event package at the registrar (message 1).  The request
   URI identifies all users in the domain.  This generates a 200 OK
   (message 2), followed by a NOTIFY (message 3).  This NOTIFY doesn't
   contain any event state (there is too much), but it confirms the
   subscription.

   At some point later, the UA in question registers.  The registration
   sequence (messages 5/6) are as above.  This causes a reg-event NOTIFY
   to be sent to the mwi server (message 7).  This tells the server
   about the creation of a new contact, and also tells it that a MWI
   registration-coupled subscription was created.  It provides the
   dialog identifiers to the MWI server.  However, instead of sending
   the NOTIFY, the MWI server discards the dialog information.  It sends
   a PUBLISH request (message 9) identically to the case where the
   registrar owns the dialog.  This causes the registrar to send the
   notification (message 11).

4.  References



Rosenberg               Expires January 14, 2006               [Page 17]

Internet-Draft     Registration Coupled Subscriptions          July 2005


4.1  Normative References

   [1]   Rosenberg, J., Schulzrinne, H., Camarillo, G., Johnston, A.,
         Peterson, J., Sparks, R., Handley, M., and E. Schooler, "SIP:
         Session Initiation Protocol", RFC 3261, June 2002.

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

   [3]   Willis, D. and B. Hoeneisen, "Session Initiation Protocol (SIP)
         Extension Header Field for Service Route Discovery During
         Registration", RFC 3608, October 2003.

   [4]   Willis, D. and B. Hoeneisen, "Session Initiation Protocol (SIP)
         Extension Header Field for Registering Non-Adjacent Contacts",
         RFC 3327, December 2002.

   [5]   Donovan, S., "The SIP INFO Method", RFC 2976, October 2000.

   [6]   Rosenberg, J. and H. Schulzrinne, "Reliability of Provisional
         Responses in Session Initiation Protocol (SIP)", RFC 3262,
         June 2002.

   [7]   Rosenberg, J., "The Session Initiation Protocol (SIP) UPDATE
         Method", RFC 3311, October 2002.

   [8]   Campbell, B., Rosenberg, J., Schulzrinne, H., Huitema, C., and
         D. Gurle, "Session Initiation Protocol (SIP) Extension for
         Instant Messaging", RFC 3428, December 2002.

   [9]   Niemi, A., "Session Initiation Protocol (SIP) Extension for
         Event State Publication", RFC 3903, October 2004.

   [10]  Sparks, R., "The Session Initiation Protocol (SIP) Refer
         Method", RFC 3515, April 2003.

4.2  Informative References

   [11]  Mahy, R., "A Message Summary and Message Waiting Indication
         Event Package for the Session Initiation Protocol (SIP)",
         RFC 3842, August 2004.

   [12]  Rosenberg, J., Schulzrinne, H., and P. Kyzivat, "Caller
         Preferences for the Session Initiation Protocol (SIP)",
         RFC 3841, August 2004.

   [13]  Rosenberg, J., "A Session Initiation Protocol (SIP) Event
         Package for Registrations", RFC 3680, March 2004.



Rosenberg               Expires January 14, 2006               [Page 18]

Internet-Draft     Registration Coupled Subscriptions          July 2005


   [14]  Roach, A., Rosenberg, J., and B. Campbell, "A Session
         Initiation Protocol (SIP) Event Notification Extension for
         Resource Lists", draft-ietf-simple-event-list-07 (work in
         progress), January 2005.

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

   [16]  Rosenberg, J., "A Watcher Information Event Template-Package
         for the Session Initiation Protocol (SIP)", RFC 3857,
         August 2004.

   [17]  Rosenberg, J., "An INVITE Inititiated Dialog Event Package for
         the Session Initiation  Protocol (SIP)",
         draft-ietf-sipping-dialog-package-06 (work in progress),
         April 2005.

   [18]  Petrie, D., "A Framework for Session Initiation Protocol User
         Agent Profile Delivery", draft-ietf-sipping-config-framework-06
         (work in progress), February 2005.


Author's Address

   Jonathan Rosenberg
   Cisco Systems
   600 Lanidex Plaza
   Parsippany, NJ  07054
   US

   Phone: +1 973 952-5000
   Email: jdrosen@cisco.com
   URI:   http://www.jdrosen.net


















Rosenberg               Expires January 14, 2006               [Page 19]

Internet-Draft     Registration Coupled Subscriptions          July 2005


Intellectual Property Statement

   The IETF takes no position regarding the validity or scope of any
   Intellectual Property Rights or other rights that might be claimed to
   pertain to the implementation or use of the technology described in
   this document or the extent to which any license under such rights
   might or might not be available; nor does it represent that it has
   made any independent effort to identify any such rights.  Information
   on the procedures with respect to rights in RFC documents can be
   found in BCP 78 and BCP 79.

   Copies of IPR disclosures made to the IETF Secretariat and any
   assurances of licenses to be made available, or the result of an
   attempt made to obtain a general license or permission for the use of
   such proprietary rights by implementers or users of this
   specification can be obtained from the IETF on-line IPR repository at
   http://www.ietf.org/ipr.

   The IETF invites any interested party to bring to its attention any
   copyrights, patents or patent applications, or other proprietary
   rights that may cover technology that may be required to implement
   this standard.  Please address the information to the IETF at
   ietf-ipr@ietf.org.


Disclaimer of Validity

   This document and the information contained herein are provided on an
   "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS
   OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET
   ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED,
   INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE
   INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
   WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.


Copyright Statement

   Copyright (C) The Internet Society (2005).  This document is subject
   to the rights, licenses and restrictions contained in BCP 78, and
   except as set forth therein, the authors retain all their rights.


Acknowledgment

   Funding for the RFC Editor function is currently provided by the
   Internet Society.




Rosenberg               Expires January 14, 2006               [Page 20]