SIPPING WG                                                   A. B. Roach
Internet-Draft                                          Estacado Systems
Expires: April 17, 2007                                 October 14, 2006


  A Call Completion Service for the Session Initiation Protocol (SIP)
             Using the Binary Floor Control Protocol (BFCP)
                  draft-roach-sipping-callcomp-bfcp-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 April 17, 2007.

Copyright Notice

   Copyright (C) The Internet Society (2006).

Abstract

   This document proposes extensions to the Session Initiation Protocol
   (SIP) and the Binary Floor Control Protocol (BFCP) for service
   request and queue manipulation related to the Completion of Calls to
   Busy Subscribers (CCBS) and Completion of Calls on No Reply (CCNR)
   services.






Roach                    Expires April 17, 2007                 [Page 1]


Internet-Draft             SIP Call Completion              October 2006


Table of Contents

   1.  Conventions and Definitions  . . . . . . . . . . . . . . . . .  4
   2.  Introduction . . . . . . . . . . . . . . . . . . . . . . . . .  4
   3.  Requirements . . . . . . . . . . . . . . . . . . . . . . . . .  5
     3.1.  Service Requirements . . . . . . . . . . . . . . . . . . .  5
       3.1.1.  Service Capability Indication  . . . . . . . . . . . .  5
       3.1.2.  Queue Management and Notification  . . . . . . . . . .  5
       3.1.3.  Call Completion Call Priority  . . . . . . . . . . . .  6
     3.2.  Solution Constraints . . . . . . . . . . . . . . . . . . .  6
       3.2.1.  PSTN Interoperation  . . . . . . . . . . . . . . . . .  6
       3.2.2.  True Native Solution . . . . . . . . . . . . . . . . .  6
       3.2.3.  Protocol Consistency and Explicit Operations . . . . .  7
   4.  Mechanism Overview . . . . . . . . . . . . . . . . . . . . . .  7
     4.1.  Service Capability Indication  . . . . . . . . . . . . . .  7
     4.2.  Queue Management and Notification  . . . . . . . . . . . .  7
     4.3.  Call Completion Call Priority  . . . . . . . . . . . . . .  8
   5.  User Agent Behavior  . . . . . . . . . . . . . . . . . . . . .  8
     5.1.  Calling Party Behavior . . . . . . . . . . . . . . . . . .  9
       5.1.1.  Service Support Detection  . . . . . . . . . . . . . .  9
       5.1.2.  Service Activation . . . . . . . . . . . . . . . . . .  9
       5.1.3.  Call Re-Attempt  . . . . . . . . . . . . . . . . . . . 12
     5.2.  Called Party Behavior  . . . . . . . . . . . . . . . . . . 12
       5.2.1.  Service Support Indication . . . . . . . . . . . . . . 12
       5.2.2.  Service Activation . . . . . . . . . . . . . . . . . . 13
       5.2.3.  Call Prioritization  . . . . . . . . . . . . . . . . . 15
   6.  Protocol Extensions  . . . . . . . . . . . . . . . . . . . . . 16
     6.1.  SIP "callcomp" Option Tag  . . . . . . . . . . . . . . . . 16
     6.2.  SDP Extensions . . . . . . . . . . . . . . . . . . . . . . 16
     6.3.  BFCP Extensions  . . . . . . . . . . . . . . . . . . . . . 17
       6.3.1.  New Message Types  . . . . . . . . . . . . . . . . . . 17
       6.3.2.  "Paused" Request Status  . . . . . . . . . . . . . . . 19
       6.3.3.  "TERMINATION-CODE" Extension Attribute . . . . . . . . 19
   7.  Deployment Considerations  . . . . . . . . . . . . . . . . . . 20
   8.  Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
     8.1.  Completion of Call to Busy Subscriber  . . . . . . . . . . 21
     8.2.  Completion of Call on No Response  . . . . . . . . . . . . 22
   9.  Security Considerations  . . . . . . . . . . . . . . . . . . . 23
   10. IANA Considerations  . . . . . . . . . . . . . . . . . . . . . 24
     10.1. SIP "callcomp" Option Tag  . . . . . . . . . . . . . . . . 24
     10.2. SDP "service retention" attribute  . . . . . . . . . . . . 24
     10.3. BFCP Primitives  . . . . . . . . . . . . . . . . . . . . . 24
     10.4. BFCP "Paused" Request Status . . . . . . . . . . . . . . . 24
     10.5. BFCP "TERMINATION-CODE" Extension Attribute  . . . . . . . 24
     10.6. TERMINATION-CODE Reason Codes Registry . . . . . . . . . . 24
   11. References . . . . . . . . . . . . . . . . . . . . . . . . . . 24
     11.1. Normative References . . . . . . . . . . . . . . . . . . . 24
     11.2. Informative References . . . . . . . . . . . . . . . . . . 24



Roach                    Expires April 17, 2007                 [Page 2]


Internet-Draft             SIP Call Completion              October 2006


   Author's Address . . . . . . . . . . . . . . . . . . . . . . . . . 25
   Intellectual Property and Copyright Statements . . . . . . . . . . 26

















































Roach                    Expires April 17, 2007                 [Page 3]


Internet-Draft             SIP Call Completion              October 2006


1.  Conventions and Definitions

   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.


2.  Introduction

   Many legacy phone systems -- including the Public Switched Telephony
   Network (PSTN) and Private Branch Exchanges (PBXes) -- include
   services intended to allows calls that have otherwise failed to
   complete at a later time.  The European Telecommunications Standards
   Institute (ETSI) has defined specific semantics for the behavior of
   such services, and given them the names "Completion of Calls to Busy
   Subscribers (CCBS)" and "Completion of Calls on No Reply (CCNR)."
   For simplicity, this document refers to both services as "Call
   Completion," except in cases in which a distinction between the two
   service is useful.

   CCBS provides the caller with the ability to complete a requested
   call to a busy callee without having to make a new call attempt when
   the callee becomes not busy.  The CCBS supplementary service
   description is defined in ETSI EN 300 357 [TODO: add ref].

   CCNR provides the caller with the ability to complete a requested
   call to a callee without having to make a new call attempt when the
   callee becomes not busy after having initiated an activity.  The CCNR
   supplementary service description is defined in ETSI EN 301 134
   [TODO: add ref].

   Typically, the caller initiates a call in the normal fashion for
   their access device (e.g. dialing a number, selecting an entry from
   an address book application).  When the user receives indication of
   "ringing" or "busy," they may choose to activate the Call Completion
   service.  The method of activation will vary depending on the user's
   access device.  For a PBX phone, there will typically be a dedicated
   "callback" button; PC-based clients may have a menu option and/or a
   hot key; and PSTN terminals will generally activate the service
   through a set of DTMF tones.  The user receives an indication of
   service activation success or failure.

   Once the callee's device becomes available, the caller's phone will
   indicate that the Call Completion service has been triggered.  For
   PBX phones and PSTN terminals, this will typically be a distinctive
   ring; for PC-based clients, it may be an audio alert accompanied by a
   dialog box.




Roach                    Expires April 17, 2007                 [Page 4]


Internet-Draft             SIP Call Completion              October 2006


   The user responds to this alerting as if he were answering an
   incoming call.  Upon doing so, he receives indication of the far end
   alerting, and the call proceeds as normal.

   At any time before the Call Completion service is triggered by the
   callee's device becoming available, the caller may suspend or cancel
   outstanding Call Completion requests.

   Of particular note for the Call Completion services as defined by
   ETSI is the fact that the interaction between multiple callers is
   rigidly defined.  If a single callee has multiple callers waiting for
   that callee to become available, those callers will receive
   indication that the callee is available on a service-specific basis
   (typically, this is first-come-first-served, although other schemes
   are possible).  This aspect of the service requires the maintenance
   of a queue of waiting callers, as well as a means for callers to
   manipulate their request in this queue.

   If not for this rigidly defined queue behavior, implementation of
   call completion services could be trivially effected in SIP using
   existing mechanisms.


3.  Requirements

   The following sections outline requirements for the Call Completion
   services.  Such requirement are broken into two categories: those
   that are necessary to implement the SIP Call Completion service in a
   way that is consistent with the ETSI-defined CCBS and CCNR services;
   and constraints that interested parties have imposed on the solution
   to meet their deployment needs.

3.1.  Service Requirements

   These requirements detail requirements on the SIP Call Completion
   service necessary to fully emulate the ETSI-defined Call Completion
   services.

3.1.1.  Service Capability Indication

   Legacy Call Completion services provide the calling party with an
   indication that the Call Completion service is available for
   activation.

3.1.2.  Queue Management and Notification

   When callers attempt to activate a Call Completion service, they need
   to be informed whether the activation has succeeded or failed.



Roach                    Expires April 17, 2007                 [Page 5]


Internet-Draft             SIP Call Completion              October 2006


   Callers also need to be notified of changes in the status of their
   service request, such as a subsequent failure after successful
   activation.

   Users may need to temporarily suspend their request for a Call
   Completion service (e.g. due to becoming unavailable or busy).
   Legacy Call Completion services allow users to perform such request
   suspensions without losing their position in the Call Completion
   queue associated with the called party.  In order to match such
   functionality, the SIP Call Completion service must allow queue
   manipulation capabilities that at least include the ability to
   suspend and resume queued requests.

3.1.3.  Call Completion Call Priority

   Legacy Call Completion services prioritize Call Completion calls over
   normal (non-Call Completion) calls for each called party.  In other
   words, the Call Completion service ensures that the callers who have
   been waiting for a particular callee are connected to that callee
   before other potential callers.

3.2.  Solution Constraints

   These requirements detail constraints on the potential SIP Call
   Completion service solutions to meet operational requirements of
   parties interested in the Call Completion service.

3.2.1.  PSTN Interoperation

   A key motivation in fully replicating the behavior of the ETSI-
   defined Call Completion services in SIP is the ability to
   interoperate a SIP Call Completion service with the Legacy Call
   Completion services defined in existing networks.

   In particular, the PSTN-based Call Completion services require the
   presence of a Call Completion Service Setup (CCSS) indication in any
   ISUP Initial Address Messages (IAMs) that are sent as a result of the
   Call-Completion service.

   As a result of this requirement, the called SIP user agent must be
   capable of distinguishing between normal calls and calls that are set
   up as a result of a Call Completion service.

3.2.2.  True Native Solution

   Although legacy network interoperation is a key motivator for certain
   aspects of this solution, a SIP Call Completion service is first and
   foremost a SIP service.  This means that any such solution must be



Roach                    Expires April 17, 2007                 [Page 6]


Internet-Draft             SIP Call Completion              October 2006


   useful as a stand-alone SIP service.

   In general, this means that such a solution should be defined as it
   applies to native SIP user agents, not as it relates to
   interoperation with legacy networks.

3.2.3.  Protocol Consistency and Explicit Operations

   Additionally, as a SIP Call Completion service is a SIP service, it
   must be consistent with existing SIP protocol mechanisms.
   Consequently, any requests to activate the service (i.e., insert the
   caller into the queue) and to pause and unpause the service (i.e.,
   manipulation the callee's queue request) needs to be explicit and
   consistent with the meaning of the message in which it is carried.
   In particular, this means that such a solution must not make service
   activation and manipulation implicit as a side effect of an already
   well-defined SIP mechanism.


4.  Mechanism Overview

   The following sections provide a high-level overview of the
   mechanisms designed to meet the requirements described in Section 3.

4.1.  Service Capability Indication

   Called parties indicate support for SIP Call Completion services by
   including the option tag "callcomp" in a "Supported" header field in
   a response code.

4.2.  Queue Management and Notification

   The SIP protocol does not presently contain any methods that perform
   queue manipulation or any similar operations.  Consequently, any
   solution that describes a Call Completion service for SIP in a way
   that is consistent with existing SIP mechanisms must either define
   new SIP methods explicitly designed for Call Completion queue
   manipulation or use the SIP INVITE method to establish a queue-
   control session.

   Historically, new SIP methods have been reserved for functionality
   that provides a versatile tool that can be applied to a wide variety
   of problems; for example, the broad REFER method was selected over a
   proposed TRANSFER method for its wide, non-service-specific
   application.

   The foregoing indicates that there is only one viable approach for
   the queue management functionality required for a Call Completion



Roach                    Expires April 17, 2007                 [Page 7]


Internet-Draft             SIP Call Completion              October 2006


   mechanism which meets all the requirements defined in Section 3: the
   use of INVITE to establish a queue manipulation connection.

   Rather than define a new protocol for manipulation of Call Completion
   queues, this document proposes the re-use of an existing protocol.
   Fundamentally, Call Completion services can be abstracted to the
   general problem of multiple users (one or more callers) attempting to
   access a shared resource (the called party), and being granted access
   to that resource in a very specific and controlled fashion.  This is
   the precise general problem that the Binary Floor Control Protocol
   (BFCP), defined in RFC 4582 [TODO: ref].

   In particular, when a called party indicates support for the
   mechanism described in this document, the calling party can activate
   the Call Completion service by sending a new INVITE request to the
   called party, containing a "Require: callcomp" header field.  This
   INVITE contains SDP which establishes a BFCP connection.  This BFCP
   connection is then used to add requests to the Call Completion queue
   (using a FloorRequest message); receive indication of current request
   status, including indication of when the the caller is available (by
   way of the FloorRequestStatus message); cancel an outstanding request
   (using the FloorRelease message); and manipulate the caller's request
   in the queue (using new FloorRequestPause and FloorRequestResume
   messages).

4.3.  Call Completion Call Priority

   In order for the called party to recognize an incoming call as a Call
   Completion call, called parties provide the calling party with a
   unique activation URI that the called party can recognize as being
   associated with the Call Completion service.  Although it is
   perfectly acceptable to generate the URI in other ways, one obvious
   mechanism that can be used to generate such URIs is through the use
   of the "grid" parameter on a Globally Routable User-Agent URI (GRUU)
   [TODO: add ref].

   This URI that the called party recognizes as being associated with
   the call completion service is conveyed to the calling party in the
   Contact: header field of the response to the BFCP-establishing INVITE
   request.


5.  User Agent Behavior

   Parties to the Call Completion service behave as described in the
   following subsections.

   The calling party MUST send a SIP BYE to terminate the BFCP session



Roach                    Expires April 17, 2007                 [Page 8]


Internet-Draft             SIP Call Completion              October 2006


   upon receipt of a "FloorRequestStatus" message that indicates a
   status other than "Pending," "Accepted," or "Granted".

5.1.  Calling Party Behavior

   The calling part has three primary responsibilities to implement the
   Call Completion service: detecting support for the Call Completion
   service, activation of the Call Completion service, and re-attempting
   to contact the called party once the called party becomes available.

5.1.1.  Service Support Detection

   Calling parties detect support for the SIP Call Completion service by
   observing a "Supported: callcomp" header field in any response to an
   INVITE request.  See Section 6.1 for details on the callcomp option
   tag.

   Because INVITE requests may fork, calling parties MUST be prepared to
   receive indication of support for the Call Completion service on
   several different early dialogs.

   For each early dialog established, the calling party's user agent
   stores the value in the Contact header field, to facilitate
   activation of the service.

   Because the called party needs to receive an indication of service
   support before activating a Call Completion service, user agents that
   support the service described in this document SHOULD apply the
   mechanism described in RFC 3262 [TODO: ref] to ensure that
   provisional responses conveying support for the Call Completion
   service are delivered reliably.

5.1.2.  Service Activation

   Service activation consists of two tasks: establishment of a BFCP
   session; and use of the BFCP session to send queue requests and
   receive service request status.

5.1.2.1.  BFCP Session Establishment

   Once the user indicates the desire to activate the Call Completion
   service, the calling party sends INVITE requests to each and every
   URI collected from Contact header fields during the procedure
   described in Section 5.1.1.  These INVITE requests contain "Required:
   callcomp" header fields.

   The calling party uses the procedures described in RFC 4583 [TODO:
   ref] to establish one or more BFCP connections with the called party.



Roach                    Expires April 17, 2007                 [Page 9]


Internet-Draft             SIP Call Completion              October 2006


   Calling parties MUST NOT send media sections in such INVITE requests
   to establish media other than BFCP.

   To avoid any doubt about the setting of attributes in the SDP:

   o  The calling party indicates "c-only" in the "floorctrl" attribute
      associated with the BFCP media line.


   Additionally, this specification adds a new attribute to be
   associated with BFCP m-lines:

   o  A new "service-retention" attribute.  The valid values for this
      attribute are "true" and "false."  If this attribute is not
      present, it is presumed to be "false."  The called party includes
      the "service-retention" attribute to indicate support of the
      "retain" option defined by ETSI.  The retain option, if supported
      by both the calling party and the called party, will maintain the
      Call Completion request in the destination B queue, if a Call
      Completion call has failed due to destination busy condition.
      [TODO: this should be explained more clearly]


   Establishment of the BFCP sessions does not activate the Call
   Completion service.  Activation of the service itself is performed
   via BFCP messages.

5.1.2.2.  BFCP Usage

   Once one or more BFCP sessions are established, the calling party
   will send BFCP messages to activate, deactivate, pause, and resume
   the Call Completion service.  The syntax and semantics of these
   requests are described in RFC 4582.

   In the context of the Call Completion service, the "floor"
   corresponds to permission to place a Call Completion call to the
   called party.

   Consequently, the calling party activates the Call Completion service
   by sending a "FloorRequest" message on each of the established BFCP
   sessions.

   Similarly, the calling party learns the status of the Call Completion
   service request by receiving "FloorRequestStatus" messages.  The
   state of the request can be determined by examining the status field
   of these floor status requests:





Roach                    Expires April 17, 2007                [Page 10]


Internet-Draft             SIP Call Completion              October 2006


   Pending: The activation request has been received, but has not
      necessarily succeeded yet.

   Accepted: The activation request has succeeded.  If non-zero, the
      "Queue Position" field will indicate the user's position in the
      call completion queue.

   Paused: The activation request has been suspended at the calling
      party's request.  If non-zero, the "Queue Position" field will
      indicate the user's position in the call completion queue.

   Granted: The called party is now available.  The calling party user
      agent attempts to establish a call between the calling party and
      the called party as described in Section 5.1.3.  If the call is
      not placed quickly enough, the calling party may receive another
      "FloorRequestStatus" message with a status of "Accepted," which
      indicates that the user has been placed back in the Call
      Completion queue.

   Denied: The called party has refused the request to activate the Call
      Completion service.  If present, the STATUS-INFO attribute
      contains additional human-readable information, such as why the
      request was denied.  If present, the TERMINATION-CODE attribute
      (defined in Section 6.3.3) may give additional machine-
      interpretable information about the nature of the denial.

   Canceled: The Call Completion request has been canceled, either at
      the calling party's request, or due to some administrative reason,
      such as a service timeout.  If present, the TERMINATION-CODE
      attribute (defined in Section 6.3.3) may give additional machine-
      interpretable information about the nature of the cancellation.


   To pause or resume the Call Completion service request without giving
   up their location in the Call Completion queue, the calling party
   uses the "FloorRequestPause" and "FloorRequestResume" messages,
   respectively.

   To cancel the Call Completion service, the calling party sends a
   "FloorRelease" message.  The calling party also sends a
   "FloorRelease" message once the called party has been successfully
   contacted.

   If the called party terminates the BFCP session unexpectedly, the
   calling party MUST consider the Call Completion service activation
   request to be canceled.





Roach                    Expires April 17, 2007                [Page 11]


Internet-Draft             SIP Call Completion              October 2006


5.1.3.  Call Re-Attempt

   When the calling party receives a "FloorRequestStatus" message with a
   status of "Granted," it MUST alert its user of the called party's
   availability.  When the calling party indicates that they are ready
   for the call to proceed, the calling party user agent initiates the
   call.  It does so by sending an INVITE request to the URI that it
   received in the Contact header field of the 200-class response to the
   INVITE that set up the BFCP session.

   Once the call succeeds, the calling party user agent SHOULD cancel
   any other outstanding Call Completion requests that relate to the
   same call attempt.

5.2.  Called Party Behavior

   The called party has three primary responsibilities to implement the
   Call Completion service: indicating support for the Call Completion
   service, activation of the Call Completion service, and
   prioritization of Call Completion calls over ordinary calls.

5.2.1.  Service Support Indication

   If a called party supports the SIP Call Completion service described
   in this document, it MUST include "Supported: callcomp" all non-100
   INVITE provisional responses (i.e. 101 through 199) and in any other
   response that indicates that the called party's endpoint is
   temporarily unavailable.  Called parties MAY include such an
   indication in other responses.

   Because the called party needs to receive such an indication before
   activating a Call Completion service, user agents that support the
   service described in this document SHOULD send a non-100 provisional
   response immediately upon receipt of an INVITE request, even if a
   final response will be sent immediately.  If no other provisional
   response is appropriate, the 183 (Session Progress) response code can
   be used.

   Any provisional responses containing a "Supported: callcomp" header
   field MUST also contain a Contact header field that is guaranteed to
   route back to the same user agent.

   Additionally, because the called party needs to receive an indication
   of service support before activating a Call Completion service, user
   agents that support the service described in this document SHOULD
   apply the mechanism described in RFC 3262 [TODO: ref] to ensure that
   provisional responses conveying support for the Call Completion
   service are delivered reliably.



Roach                    Expires April 17, 2007                [Page 12]


Internet-Draft             SIP Call Completion              October 2006


5.2.2.  Service Activation

   Service activation consists of two tasks: establishment of a BFCP
   session; and use of the BFCP session to receive queue requests and
   update the calling party about service request status.

5.2.2.1.  BFCP Session Establishment

   If an INVITE containing "Require: callcomp" is received by a user
   agent supporting this specification (assuming the request is
   acceptable to the user agent), it immediately responds by sending a
   200-class response to accept the session.

   The 200-class response to such a request MUST also contain a Contact
   header field that is both guaranteed to route back to the same user
   agent and which the user agent recognizes as being associated with
   the Call Completion service.  This MAY be the same URI that was
   returned in the original INVITE provisional response, but it is not
   required to be the same.

   The called party uses the procedures described in RFC 4583 [TODO:
   ref] to establish a BFCP connection from the calling party to the
   called party.  If the SDP in an INVITE with "Require: callcomp"
   contains m= lines other than those used to establish BFCP
   connections, the called party MUST reject the INVITE with a 488 (Not
   Acceptable here) response.

   To avoid any doubt about the setting of attributes in the SDP:

   o  The called party indicates "s-only" in the "floorctrl" attribute
      associated with the BFCP media line.

   o  The called party sets the "confid" and "userid" attributes to any
      value that it desires.  These values will be reflected back to the
      called party in subsequent BFCP messages.

   o  The called party sets the "floorid" attribute to any value that it
      desires.  These values will be reflected back to the called party
      in subsequent BFCP messages.  The "floorid" attribute will not
      contain an "mstrm" portion, since the floor is not associated with
      any media streams.


   Additionally, this specification adds a new attribute to be
   associated with BFCP m-lines:






Roach                    Expires April 17, 2007                [Page 13]


Internet-Draft             SIP Call Completion              October 2006


   o  A new "service-retention" attribute.  The valid values for this
      attribute are "true" and "false."  If this attribute is not
      present, it is presumed to be "false."  The called party includes
      the "service-retention" attribute to indicate support of the
      "retain" option defined by ETSI.  The retain option, if supported
      by both the calling party and the called party, will maintain the
      Call Completion request in the destination B queue, if a Call
      Completion call has failed due to destination busy condition.
      [TODO: this should be explained more clearly]


   Establishment of the BFCP session does not activate the Call
   Completion service.  Activation of the service itself is performed
   via BFCP messages.

5.2.2.2.  BFCP Usage

   Once the BFCP session is established, the called party will receive
   BFCP messages from the calling party intended to activate,
   deactivate, pause, and resume the Call Completion service.  The
   syntax and semantics of these requests are described in RFC 4582.

   In the context of the Call Completion service, the "floor"
   corresponds to permission to place a Call Completion call to the
   called party.

   Consequently, the called party activates the Call Completion service
   upon receipt of a "FloorRequest" message from the calling party.

   Similarly, the called party conveys the status of the Call Completion
   service request by sending the calling party "FloorRequestStatus"
   messages.

   Upon receipt of a "FloorRequest," the called party will respond with
   a "FloorRequestStatus" containing a status of "Pending."

   Once the Call Completion service activation has been successfully
   completed, the called party sends an additional "FloorRequestStatus"
   with a status of "Accepted."  If the called party wishes to share
   such information with the calling party, this "FloorRequestStatus"
   message MAY also contain a "Queue Position" field that indicates the
   calling party's position in the Call Completion queue.  The called
   party MAY send new "FloorRequestStatus" messages with "Accepted"
   status from time to time to update the calling party regarding their
   position in the queue.

   When the calling party reaches the front of the Call Completion queue
   (i.e., is permitted to re-attempt their original call), the called



Roach                    Expires April 17, 2007                [Page 14]


Internet-Draft             SIP Call Completion              October 2006


   party sends a "FloorRequestStatus" message with a status of
   "Granted."  If the calling party does not place the call re-attempt
   quickly enough, the called party may place that caller back in the
   queue and send another "FloorRequestStatus" message containing a
   status of "Accepted."  Determination of what constitutes "fast
   enough" and where in the queue the calling party is placed are
   implementation-dependent.

   If the called party denies the calling party's request to activate
   the Call Completion service, then the called party sends a
   "FloorRequestStatus" message with a status of "Denied."  The STATUS-
   INFO attribute MAY be used to convey additional human-readable
   information, such as why the request was denied.

   If the calling party's request fails due to an administrative reason
   -- such as a service timeout -- then the called party sends a
   "FloorRequestStatus" with a status of "Canceled."

   If the called party sends a "FloorRequestStatus" with a status of
   either "Denied" or "Canceled", it MAY include a TERMINATION-CODE
   attribute, as defined in Section 6.3.3.

   If the called party receives a "FloorRequestPause" message, it should
   suspend the calling party's progression through the queue, and send
   the calling party a "FloorRequestStatus" message with a status of
   "Paused."  While in the "Paused" state, a calling party's position in
   the queue will not switch to "Granted" until the calling party sends
   a "FloorRequestResume" message.  Upon receipt of a
   "FloorRequestResume" message, the called party will resume
   progression of the calling party through the Call Completion queue.

   Upon receipt of a "FloorRelease" message, the called party can
   consider the Call Completion service activation to be canceled or
   completed (depending on whether the calling party successfully
   contacted the called party).  The called party MUST send a SIP BYE to
   terminate the BFCP session upon receipt of a "FloorRelease" message.

   If the calling party terminates the BFCP session unexpectedly, the
   called party can also consider the Call Completion service activation
   request to be canceled.

5.2.3.  Call Prioritization

   When the called party user agent receives an INVITE request sent to a
   URI that is associated with a Call Completion attempt, it first
   checks whether the calling party matches the user that is currently
   considered "Active" in its call completion queue.  If the user does
   not match, the user agent replies with a 480 (Temporarily



Roach                    Expires April 17, 2007                [Page 15]


Internet-Draft             SIP Call Completion              October 2006


   Unavailable) response.

   If the user does match, then the called party user agent alerts its
   user, and allows the call to proceed as normal.

   If a called party user agent receives an INVITE request sent to a URI
   that is not related to the Call Completion service while it has users
   in its Call Completion queue, it responds with a 480 (Temporarily
   Unavailable) response.


6.  Protocol Extensions

   Extensions to existing protocols necessary to support the mechanism
   described in this document are minimal.  The following sections
   detail minor extensions to SIP, SDP, and BFCP.

6.1.  SIP "callcomp" Option Tag

   This specification uses the SIP option tag mechanism for negotiating
   support for the Call Completion service.  Refer to RFC 3261 [TODO:
   ref] for the normative description of processing of the "Supported"
   and "Require" header fields.

   In practice, this specification's use of the the option tag mechanism
   guarantees success except in the most degenerate corner cases: UACs
   never indicate that support for the "callcomp" option tag is required
   unless they have already contacted the UAS to which the request is
   addressed, and already received indication that the UAS supports the
   "callcomp" extension.

   Use of "Require: callcomp" in INVITE messages meant to establish BFCP
   sessions used to control the Call Completion service is included to
   satisfy the RFC 3261 requirement that a UAC MUST insert a Require
   header field into a request if the UAC wishes to insist that a UAS
   understand an extension in order to process the request.  Because the
   INVITE would not be usable without applying the extension defined in
   this document, the calling party is obligated to include it in such
   INVITE requests.

6.2.  SDP Extensions

   This document makes use of the SDP extensions defined in RFC 4583
   [TODO: add ref].  In addition to these extensions, This specification
   adds one more attribute which is applicable to BFCP-establishing m=
   lines when they are used to set up Call Completion BFCP sessions.

   The Augmented BNF notation which defined this new attribute is as



Roach                    Expires April 17, 2007                [Page 16]


Internet-Draft             SIP Call Completion              October 2006


   follows:

       sr-attribute  = "a=service-retention:" sr-value
       sr-value      = "true" / "false"

6.3.  BFCP Extensions

   This document adds mechanisms to BFCP that allow the pausing and un-
   pausing of floor control requests that have not yet been granted.

   The sections that follow define these extensions in a generic fashion
   that apply to all usages of BFCP.  In practice, their use in the SIP
   Call Completion service will be limited to use on a single floor at a
   time.

6.3.1.  New Message Types

   This specification defines two new message types ("Primitives") for
   the Binary Floor Control Protocol defined by RFC 4582 [TODO: ref].
   The new primitive types are as follows; these extend Table 1 in RFC
   4582 [TODO: ref]:


                +-------+--------------------+------------------+
                | Value | Primitive          | Direction        |
                +-------+--------------------+------------------+
                |   20  | FloorRequestPause  | P -> S           |
                |   21  | FloorRequestResume | P -> S           |
                +-------+--------------------+------------------+
                            S:  Floor Control Server
                            P:  Floor Participant


6.3.1.1.  FloorRequestPause message

   Floor participants use the FloorRequestPause message to suspend
   pending floor requests.  While paused, floor requests remain in the
   floor control queue; however, they will not enter the "Granted" state
   until the floor participant resumes the floor request using a
   "FloorRequestResume" message.  The following is the format of the
   FloorRequestPause message:

      FloorRequestPause =   (COMMON-HEADER)
                            (FLOOR-REQUEST-ID)
                           *[EXTENSION-ATTRIBUTE]

   The floor participant uses the FLOOR-REQUEST-ID that was received in
   the response to the FloorRequest message that the FloorRequestPause



Roach                    Expires April 17, 2007                [Page 17]


Internet-Draft             SIP Call Completion              October 2006


   message is suspending.

   Note that if the floor participant requested several floors as an
   atomic operation (i.e., in a single FloorRequest message), all the
   floors are suspended as an atomic operation as well (i.e., all are
   suspended at the same time).

   A message from the floor control server is considered a response to
   the FloorRequestPause message if the message from the floor control
   server has the same Conference ID, Transaction ID, and User ID as the
   FloorRequestPause message, as described in RFC 4582 [TODO: ref].

   If the response is a FloorRequestStatus message, the Request Status
   value in the OVERALL-REQUEST-STATUS attribute (within the FLOOR-
   REQUEST-INFORMATION grouped attribute) will be Paused.  If the
   response is an Error message, the floor control server could not
   process the FloorRequestPause message for some reason, which is
   described in the Error message.

6.3.1.2.  FloorRequestResume message

   Floor participants use the FloorRequestResume message to resume a
   floor control request that had previously been suspended by use of a
   FloorRequestPause message.  The following is the format of the
   FloorRequestResume message:

      FloorRequestResume =   (COMMON-HEADER)
                             (FLOOR-REQUEST-ID)
                            *[EXTENSION-ATTRIBUTE]

   The floor participant uses the FLOOR-REQUEST-ID that was received in
   the response to the FloorRequest message that the FloorRequestResume
   message is resuming.

   Note that if the floor participant requested several floors as an
   atomic operation (i.e., in a single FloorRequest message), all the
   floors are resumed as an atomic operation as well (i.e., all are
   resumed at the same time).

   A message from the floor control server is considered a response to
   the FloorRequestResume message if the message from the floor control
   server has the same Conference ID, Transaction ID, and User ID as the
   FloorRequestResume message, as described in RFC 4582 [TODO: ref].

   If the response is a FloorRequestStatus message, the Request Status
   value in the OVERALL-REQUEST-STATUS attribute (within the FLOOR-
   REQUEST-INFORMATION grouped attribute) will be Active or Granted.  If
   the response is an Error message, the floor control server could not



Roach                    Expires April 17, 2007                [Page 18]


Internet-Draft             SIP Call Completion              October 2006


   process the FloorRequestResume message for some reason, which is
   described in the Error message.

6.3.2.  "Paused" Request Status

   The use of the FloorRequestPause and FloorRequestResume messages
   introduces a new request status of "Paused" for the REQUEST-STATUS
   attribute.  This extends Table 4 in RFC 4582:

                              +-------+-----------+
                              | Value | Status    |
                              +-------+-----------+
                              |   8   | Paused    |
                              +-------+-----------+

   While paused, floor requests remain in the floor control queue;
   however, they will not enter the "Granted" state until the floor
   participant resumes the floor request using a "FloorRequestResume"
   message.

6.3.3.  "TERMINATION-CODE" Extension Attribute

   To convey additional information about floor cancellation and denial
   situations, this specification defines a new attribute, called
   TERMINATION-CODE, which can appear in the FLOOR-REQUEST-STATUS
   grouped attribute.  This attribute only appears in FLOOR-REQUEST-
   STATUS attributes in which the REQUEST-STATUS attribute is set to
   'Canceled' or 'Denied'.  The following is the format of the
   TERMINATION-CODE attribute:

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |0 0 1 0 1 0 0|M|    Length     |    Family     |     Reason    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   The TERMINATION-CODE attribute is given an attribute type number of
   20.

   The "Family" field defines a group of reason codes specific to a
   particular usage of the TERMINATION-CODE attribute.  This
   specification defines reasons in family 1.  Other specifications may
   make use of other families.








Roach                    Expires April 17, 2007                [Page 19]


Internet-Draft             SIP Call Completion              October 2006


   +-------+-----------------------------------------------------------+
   | Value | Meaning                                                   |
   +-------+-----------------------------------------------------------+
   |   1   | Operation Timeout                                         |
   |   2   | Service Duration                                          |
   |   3   | Recall Timeout                                            |
   |   4   | Service Completed                                         |
   |   5   | Short Term Denial                                         |
   |   6   | Long Term Denial                                          |
   +-------+-----------------------------------------------------------+

   The reason code have the following meanings:

   Operation Timeout: [TODO: describe CCBS-T2 in layman's terms here]

   Service Duration: The Call Completion request has remained pending
      for longer than the calling party is willing to allow.  (This
      corresponds to the CCBS-T7 timer used in the PSTN).

   Recall Timeout: [TODO: describe CCBS-T9 in layman's terms here]

   Service Completed: [Open issue: I don't think we actually need this]

   Short Term Denial: The called party cannot accept a Call Completion
      request from the calling party at the current time, although
      future attempts may succeed.  This may occur, for example, if the
      called party's Call Completion queue is currently full.

   Long Term Denial: The called party cannot accept a Call Completion
      request from the calling party.  Future attempts will also be
      denied.



7.  Deployment Considerations

   [This section is not yet written.  Eventually, it will explain how
   the service can be deployed without called party terminal support.
   At a high level: a proxy on the called party's end of the call forks
   the INVITE to the terminal and to a Call Completion server.  The call
   completion server returns a 183 response with indication of support
   for callcomp.  Then, it sends an error response of some kind so as to
   terminate that fork.  The 183 gets back to the calling user, who may
   then activate the service with the Call Completion server.  The Call
   Completion server maintains the Call Completion queue, and monitors
   the state of the called party terminal(s) either by use of the dialog
   event package or by obtaining dialog state from a call-stateful proxy
   using a proprietary mechanism.  In practice, such Call Completion



Roach                    Expires April 17, 2007                [Page 20]


Internet-Draft             SIP Call Completion              October 2006


   servers can be co-located with the proxy, so that this proprietary
   mechanism never crosses a network.  Such co-location also allows the
   proxy to prevent "normal" calls from getting through when callers are
   queued in the Call Completion queue].


8.  Examples

   [TODO: the examples need to be expanded with message details]

8.1.  Completion of Call to Busy Subscriber


   Caller                            Callee
      |(1) INVITE caller                |
      |-------------------------------->|
      |                                 |180 contains Contact with GRUU
      |                                 |pointing to this terminal. We
      |                                 |will call this GRUU "[a]"
      |(2) 180                          |
      |<--------------------------------|
      |(3) PRACK                        |
      |-------------------------------->|
      |(4) 200 (PRACK)                  |
      |<--------------------------------|
      |(5) 486 Busy                     |
      |<--------------------------------|
      |(6) ACK                          |
      |-------------------------------->|
      |                                 |INVITE sets up BFCP session
      |(7) INVITE [a]                   |
      |-------------------------------->|
      |(8) 200 (INVITE) (contact=[a])   |
      |<--------------------------------|
      |(9) ACK                          |
      |-------------------------------->|
      |(10) BFCP connection             |
      |.................................|
      |(11) FloorRequest                |
      |-------------------------------->|
      |(12) FloorRequestStatus (Pending)|
      |<--------------------------------|
      |                                 |Callee accepts CCBS request
      |(13) FloorRequestStatus (Accepted)
      |<--------------------------------|
      |                                 |Called party becomes available
      |(14) FloorRequestStatus (Granted)|
      |<--------------------------------|



Roach                    Expires April 17, 2007                [Page 21]


Internet-Draft             SIP Call Completion              October 2006


      |                                 |Calling party is alerted and
      |                                 |initiates call completion
      |(15) INVITE [a]                  |
      |-------------------------------->|
      |(16) 180                         |
      |<--------------------------------|
      |(17) PRACK                       |
      |-------------------------------->|
      |(18) 200 (PRACK)                 |
      |<--------------------------------|
      |(19) 200 (INVITE)                |
      |<--------------------------------|
      |(20) ACK                         |
      |-------------------------------->|
      |(21) FloorRelease                |
      |-------------------------------->|
      |(22) BYE (BFCP session)          |
      |<--------------------------------|
      |(23) 200                         |
      |-------------------------------->|
      |(24) Media                       |
      |.................................|


8.2.  Completion of Call on No Response


   Caller                            Callee
     |(1) INVITE caller                |
     |-------------------------------->|
     |                                 |180 contains Contact with GRUU
     |                                 |pointing to this terminal. We
     |                                 |will call this GRUU "[a]"
     |(2) 180                          |
     |<--------------------------------|
     |(3) PRACK                        |
     |-------------------------------->|
     |(4) 200 (PRACK)                  |
     |<--------------------------------|
     |(5) CANCEL                       |
     |-------------------------------->|
     |(6) 200 (CANCEL)                 |
     |<--------------------------------|
     |(7) 487 Request Terminated       |
     |<--------------------------------|
     |(8) ACK                          |
     |-------------------------------->|
     |                                 |INVITE sets up a BFCP session



Roach                    Expires April 17, 2007                [Page 22]


Internet-Draft             SIP Call Completion              October 2006


     |(9) INVITE [a]                   |
     |-------------------------------->|
     |(10) 200 (INVITE) (contact=[a])  |
     |<--------------------------------|
     |(11) ACK                         |
     |-------------------------------->|
     |(12) BFCP connection             |
     |.................................|
     |(13) FloorRequest                |
     |-------------------------------->|
     |(14) FloorRequestStatus (Pending)|
     |<--------------------------------|
     |                                 |Callee accepts CCBS request
     |(15) FloorRequestStatus (Accepted)
     |<--------------------------------|
     |                                 |Callee becomes available
     |(16) FloorRequestStatus (Granted)|
     |<--------------------------------|
     |                                 |Calling party is alerted and
     |                                 |initiates call completion
     |(17) INVITE [a]                  |
     |-------------------------------->|
     |(18) 180                         |
     |<--------------------------------|
     |(19) PRACK                       |
     |-------------------------------->|
     |(20) 200 (PRACK)                 |
     |<--------------------------------|
     |(21) 200 (INVITE)                |
     |<--------------------------------|
     |(22) ACK                         |
     |-------------------------------->|
     |(23) FloorRelease                |
     |-------------------------------->|
     |(24) BYE (BFCP session)          |
     |<--------------------------------|
     |(25) 200                         |
     |-------------------------------->|
     |(26) Media                       |
     |.................................|



9.  Security Considerations

   [TODO: not that it's not important, just that I'm out of time]





Roach                    Expires April 17, 2007                [Page 23]


Internet-Draft             SIP Call Completion              October 2006


10.  IANA Considerations

10.1.  SIP "callcomp" Option Tag

   [TODO: fill this in]

10.2.  SDP "service retention" attribute

   [TODO: fill this in]

10.3.  BFCP Primitives

   [TODO: fill this in]

10.4.  BFCP "Paused" Request Status

   [TODO: fill this in]

10.5.  BFCP "TERMINATION-CODE" Extension Attribute

   [TODO: fill this in]

10.6.  TERMINATION-CODE Reason Codes Registry

   [TODO: fill this in]


11.  References

11.1.  Normative References

11.2.  Informative References



















Roach                    Expires April 17, 2007                [Page 24]


Internet-Draft             SIP Call Completion              October 2006


Author's Address

   Adam Roach
   Estacado Systems
   17210 Campbell Rd.
   Suite 250
   Dallas, TX  75252
   US

   Phone: sip:adam@estacado.net
   Email: adam@estacado.net








































Roach                    Expires April 17, 2007                [Page 25]


Internet-Draft             SIP Call Completion              October 2006


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 (2006).  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.




Roach                    Expires April 17, 2007                [Page 26]