<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" >
<?rfc sortrefs='yes' ?>
<?rfc iprnotified='yes' ?>
<?rfc topblock='yes' ?>
<?rfc toc='yes' ?>
<?rfc strict='yes' ?>
<?rfc compact='yes' ?>
<?rfc subcompact='no' ?>
<?rfc symrefs='no' ?>
<?rfc notedraftinprogress='yes' ?>
<rfc ipr="trust200811" category="info" submissionType="IETF" docName="A Session Initiation Protocol (SIP) Reason Header extension for dynamic Incoming Communication Barring draft-avasarala-sipping-reason-header-dynamic-icb-00.txt">
<front>
<title abbrev="SIP Reason Header for dynamic ICB"></title>
<author fullname="Ranjit Avasarala" initials="R" surname="Avasarala" role="editor">
<organization abbrev="Motorola">Motorola India Pvt Ltd</organization>
    <address>
    <postal>
    <street> Bagamane Tech Park, C V Raman Nagar </street>
	    <city> Bangalore </city>
 	    <code> 560093 </code>
	    <country> India </country>
    </postal>
    <email>ranjit@motorola.com</email>
    </address>
</author>
<author fullname="Subir Saha" initials="S" surname="Saha">
<organization abbrev="Motorola">Motorola India Pvt Ltd</organization>
	    <address>
	    <postal>
	    <street> Bagamane Tech Park, C V Raman Nagar </street>
	    <city> Bangalore </city>
	    <code> 560093 </code>
	    <country> India </country>
	    </postal>
	  	<email>subir.saha@motorola.com</email>
	</address>
</author>
<author fullname="Victor Pascual" initials="V" surname="Pascual">
<organization abbrev="Tekelec">Tekelec</organization>
    <address>
    <postal>
    <street> Am Borsigturm 11 </street> 
    <city> Berlin </city>
    <code> D13507 </code>
    <country> Germany </country>
    </postal>
    <email>victor@iptel.org</email>
  </address>
</author>
<date></date>
<workgroup>SIPPING</workgroup>
<abstract> 
<t> The 3GPP, as part of the MITE work item, is defining the Multimedia
Telephony service and other Supplementary services using the IP
Multimedia Core Network framework.  Supplementary services include
Incoming and Outgoing Communication Barring. This document describes a
new set of procedures for Incoming Communication Barring to allow
terminating users to dynamically block unwanted incoming
communications. A new extension to SIP reason header is also
described.
</t>
</abstract>
</front>   
<middle>
<section title="Introduction" toc="default">
<t> 3GPP is currently maintaining and specifying multimedia telephony services and supplementary services.  As a part of this effort, the
procedures for Incoming and Outgoing Communication barring including Outgoing and Incoming communication barring procedures are defined in <xref target="3GPP.22.173"></xref>.
However, the current procedures do not allow terminating users to dynamically block unwanted incoming communications.
<vspace blankLines="1"></vspace>
This document proposes a mechanism to enable called users to block
unwanted incoming communications in realtime. It is achieved by
extending the SIP Reason header to be included in the SIP BYE and
CANCEL requests for blocking a calling identity from further calling.
<vspace blankLines="1"></vspace>
Also this document defines mechanisms for the called users to specify block criteria for blocking the calling users. The blocking criteria could include:
<vspace blankLines="1"></vspace>
<list style="numbers">
<t>Blocking calling users permanently so that the caller can never call the terminating user again</t>
<t>Blocking calling users for a certain period of time</t>
</list>
Further this document also defines mechanism for blocking the callers either during the call alerting phase or during call termination time.</t>
</section>
<section title="Terminology">
<t> 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 <xref target="RFC2119"></xref> and indicate requirement levels for compliant implementations.
</t>
<t>The other concepts used in this document are compatible with <xref target="RFC3261"></xref> and <xref target="RFC3326"></xref></t>
</section>
<section title="Caller Identity Blocking Events" anchor="block">
<t> As mentioned previously the blocking events occur at the terminating user agents. The terminating user agents trigger the SIP
BYE or CANCEL method with the enhanced SIP Reason header for caller identity blocking when they wish to block the caller from 
further calling. </t>
<section title="Blocking caller identity when caller identity is known">
<t> Here the identity of the caller is known to the called user and the called user can trigger the BYE or CANCEL request with the
SIP Reason header for caller identity blocking and get the caller blocked from further calling. </t>
</section>
<section title="Blocking caller identity when caller identity is unknown">
<t> Sometimes the calls from telemarketers or other businesses have vague identities or just names like "CountryClub" or "Unknown" and it would be impossible for the called users to block such callers using those identities. In such cases, the servers need to 
fetch the actual identity of the caller and use that identity for blocking callers. </t>
</section>
</section>
<section title="Reason header cause codes and semantics" anchor="semantic">
 <t> This document defines the following new protocol value for the protocol field of the Reason header defined in <xref target="RFC3326"></xref></t>
 <figure>
   <artwork>
      <![CDATA[
      block: The cause parameter contains the block code.
      ]]>
    </artwork>
 </figure>
 <t>We define the following block cause codes: </t>
 <figure>
   <artwork>
      <![CDATA[
   Value   Default Text          Description
   
     1     Block permanently     Block the calling user permanently
     2     Block temporarily     Block the calling user for a temporary
                                 period of time 
      ]]>
    </artwork>
  </figure>
 <t> Examples are:</t>
 <figure>
   <artwork>
      <![CDATA[
  Reason: block; cause=1; text="Hate This Guy"; 
                          uri="sip:telem@domain.com; Expires=99999
  Reason: block; cause=2; text="Out on Vacation"; 
                          uri="sip:Bob@example.com; Expires=604800        
  Reason: block; cause=2; text="greylisted"; 
                          uri=sip:Alice@domain.com; Expires=3600
                          
               
      ]]>
    </artwork>
 </figure>   
 <t> Sections <xref target="perm" format="counter"></xref> and <xref target="temp" format="counter"></xref> provide use cases and extended definitions for the above two cause codes.</t>
 <section title="Block Permanently Reason Code" anchor="perm">
 <t> A more elaborate description of Block Permanently Reason Code cause=1 is as follows:
 <vspace blankLines="1"></vspace>
 The called user intends to block the calling user permanently to prevent further calling.
 <vspace blankLines="1"></vspace>
 An example of this header value would be:
 <vspace blankLines="1"></vspace>
 Reason: block; cause=1; text="Telemarketer"; uri="sip:user@domain.com; Expires=99999
 <vspace blankLines="1"></vspace>
 This implies that the called user has identified the calling user identity identified by "uri" parameter defined in <xref target="RFC3261" format="title"></xref> as a Telemarketer and wants to block the caller from further calling. So here putting a value of "99999" for Expires parameter implies the blocking is for permanent duration. 
 <vspace blankLines="1"></vspace>
 The message flow for this block type is depicted in Figure <xref target="blockp" format="counter"></xref>
 </t>
 </section>
 <section title="Block Temporarily Reason Code" anchor="temp">
 <t> A more elaborate description of Block Temporarily Reason Code cause=2 is as follows:
 <vspace blankLines="1"></vspace>
 The called user intends to block the calling user for a temporary period.
 <vspace blankLines="1"></vspace>
 An example of this usage would be:
 <vspace blankLines="1"></vspace>
 Reason: block; cause=2; text="Out on Vacation"; Expires=3600
 <vspace blankLines="1"></vspace>
 This implies that the called user is Out on Vacation and wants to block the incoming calls from the caller Till
 the called user returns. The date until which the block is effective is mentioned using the Expires parameter and the
 identity of the calling user is identified by "uri" parameter defined in <xref target="RFC3261" format="title"></xref>
 <vspace blankLines="1"></vspace>
 So here the block period is mentioned in Expires parameter implies the blocking is effective from the time
 of registration till the value specified in Expires parameter.      </t>
 <t>
  <vspace blankLines="1"></vspace>
 The message flow for this block type is depicted in Figure <xref target="blockt" format="counter"></xref>
</t>
</section>
</section>
 <section title="Examples of Blocking events">
   <section title="Blocking caller during ringing phase">
   <t> As mentioned earlier, the called user (UAS) can block the incoming caller (UAC) during ringing phase by looking at the   number displayed on the phone.
 Below is the call flow for blocking a caller (UAC) in ringing phase</t>
 <figure title="Blocking Permanently" anchor="blockp">
  <artwork>
    <![CDATA[
   
  Alice                      Proxy                      Bob
   
   |   INVITE                |                          |
   |------------------------>|   INVITE                 |
   |                         |------------------------->|
   |                         |   180 RINGING            |
   |    180 RINGING          |<-------------------------|
   |<------------------------|                          |
   |                         |                          |
   | +------------------------------------------------+ |
   | | Looking at Caller ID, the called user decides  | |
   | | to block the calling user from further calling | |
   | +------------------------------------------------+ |
   |                                                    |
   |                               4xx                  |
   |        4xx              |<-------------------------|
   |<------------------------|Reason:block; cause=1     |
   |                         | text="Hate This Guy"     |
   |                         | uri="sip:Alice@domain.com|
   |                         | Expires=99999            |
   |----------------------------------------------------|
   
   ]]>
  </artwork>
 </figure>
<t> Here the UAS sends a 4xx message with the enhanced Reason header indicating block semantics.</t>
</section>
<section title="Blocking caller during call termination phase">
<t> Here the called user (UAS) blocks the incoming caller (UAC) during the call termination phase - i.e at the time of termination of the call</t>
<figure title="Blocking for Temporary Period" anchor="blockt">
   <artwork>
     <![CDATA[
  Bob                      Proxy                       Carol
   
   |   INVITE                |                          |
   |------------------------>|   INVITE                 |
   |                         |------------------------->|
   |                         |   180 RINGING            |
   |    180 RINGING          |<-------------------------|
   |<------------------------|                          |
   |                         |   200 OK                 |
   |    200 OK               |<-------------------------|
   |<------------------------|                          |
   |        In Conversation                             |
   |<==================================================>|
   |                                                    |
   | +-------------------------------------------------+|
   | | Here the called user (UAS) decides to block the ||
   | | the caller from further calling                 ||
   | +-------------------------------------------------+|
   |                                                    |
   |                         |    BYE                   |
   |                         |<-------------------------|
   |    BYE                  |Reason: block; cause=2    |
   |<------------------------| text="In Meeting"        |
   |                         | uri="sip:bob@example.com |  
   |                         | Expires=3600             |
   |                         |                          |
   |    200 OK               |                          |
   |------------------------>|      200 OK              |
   |                         |------------------------->|
   
  ]]>                                                                                                                              
 </artwork>
</figure>
</section>
</section>
<section title="Security Considerations">
<t> Eavesdropping on this header field should not prevent proper
   operation of the SIP protocol, although some domains utilizing this
   mechanism for notifying and synchronizing SIP elements will likely
   want the integrity to be assured.  It is therefore RECOMMENDED to
   apply integrity protection when using this header to prevent
   unwanted changes to the field and snooping of the messages. The
   accepted choices to provide integrity protection in SIP are TLS and
   S/MIME. If a caller manages to impersonate a calling party (i.e. 
   identity impersonation), it could trigger called parties to block 
   incoming calls from the supplanted identity. 
</t>
</section>
<section title="IANA Considerations">
<t> This document adds to one existing IANA Registry and creates one new
   Registry.  The existing IANA Registry for the SIP Reason Header is
   as follows: </t>
   <figure>
      <artwork>
         <![CDATA[
Protocol Value   Protocol Cause            Reference
--------------   --------------            ---------
 SIP              Status code               RFC 3261
 Q.850            Cause value in decimal    ITU-T Q.850
 
 This document adds to that Registry with the following entry 
 (including the '*' comment)
 
 Protocol Value  Protocol Cause            Reference
 --------------  --------------            ----------
 block           Cause value in decimal*   RFCXXXX
 
 Parameter: Expires  Defined in RFC3261
 Parameter: uri      Defined in RFC3261
 
 * See the separate "block" Registry for default reason-text
   strings
   
  ]]>
 </artwork>
</figure>
<t> The cause values created by the Block protocol namespace in this document are defined in Section <xref target="BlockN"></xref>.
<vspace blankLines="1"></vspace>
Each cause value has a Reason-text string as a general description of what the cause value is for, This is shown for the existing
Reason header in Section 2 of <xref target="RFC3326"></xref> Before this document, the Reason-text was taken from the SIP
Response code string from all SIP Response codes, or the default description from Q.850 cause codes.  Currently, there is no place
to register new reason-text strings other than from those two sources. Because this document defines a new Reason header protocol
namespace, a new IANA Registry is created in Section <xref target="defaultR" format="counter"></xref> just for this and future Reason header
protocol namespaces (other than SIP Response codes or Q.850 cause values) to register their respective general descriptive text
strings.  These text strings are non-binding and merely the default for human understanding, but they are deemed important enough
to have their own Registry </t>
<section title="Block Namespace Registry" anchor="BlockN">
  <t> RFC [xxxx] (this document) creates the new SIP Reason header <xref target="RFC3326"></xref> protocol namespace: "block", with 2 defined cause codes. 
  <vspace blankLines="1"></vspace>
  In instances where this namespace is used for permanently blocking a caller at the UA, the following syntax shall be used (the reason-text is a default string, it is not mandatory, and may be different): 
  <vspace blankLines="1"></vspace>  </t>
  <figure>
    <artwork>                                                            
      <![CDATA[
      Reason: block; cause=1; text="block permanently";
      uri="sip:user@domain.com"; Expires=NNNNN
      
      The value NNNNN is 99999 indicating a permanent block
      ]]>
    </artwork>
  </figure>
<t> <xref target="semantic"></xref> of this document describes in detail the semantics of this cause code.
<vspace blankLines="1"></vspace>
The default text is part of a new IANA Registry for default text strings for any new protocol namespace cause code. See Section <xref target="defaultR"></xref> for details.
<vspace blankLines="1"></vspace>
In instances where this namespace is used for temporarily blocking a caller at the UA, the following syntax shall be used (the reason-text is a default string, it is not mandatory, and may be different): </t>
<figure>
  <artwork>
    <![CDATA[
Reason: block; cause=2; text="block temporarily"; 
         uri="sip:user@domain.com"; Expires=XYZ
         
The value XYZ indicates time of block in seconds
   ]]>                                                     
 </artwork>
</figure>
</section>
<section title="Default Reason-Text IANA Registry for the SIP Reason header" anchor="defaultR">
<t> Below is the creation of a new IANA Registry for SIP Reason Header reason-text strings, associated with their respective protocol type and Reason-param cause values.  Per RFC 3326, the Reason-text string is a quoted default string with only human understandability meant. These strings can be changed by local policy </t>
  <figure>
    <artwork>
      <![CDATA[
      
              Reason-
 Protocol     param      Reason-Text         Reference
 --------     -------    ------------        ---------
 Block        Cause=1    Block permanently   RFC XXXX [this document]
 Block        Cause=2    Block temporarily   RFC XXXX [this document]
                           

      ]]>
    </artwork>
  </figure>
</section>  
</section>
<section title="Acknowledgements" toc="default">
<t> The Authors would like to thank Samir Saklikar for initial contribution, to Jette Alan and Ian Doig for providing the support in 3GPP and to Joachim Charzinki for valuable comments and suggestions.</t>
</section>
</middle>
<back>
<references title="Normative References">
<?rfc include="reference.RFC.2119.xml" ?>
<?rfc include="reference.RFC.3261.xml" ?>
<?rfc include="reference.RFC.3326.xml" ?>
</references>
<references title="Informative References">
<?rfc include="reference.3GPP.22.173.xml" ?>
</references>
<section title="Change Log" anchor="change">
<t> New document </t>
</section>
<section title="Open Issues" anchor="open">
<t> Some (offline?) mechanism for unblocking user identities is expected 
</t>
</section>
</back>
</rfc>
