One document matched: draft-ietf-sieve-notify-sip-message-03.xml


<?xml version="1.0" encoding="US-ASCII"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [

<!ENTITY RFC2119    PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml'>
<!ENTITY RFC5228    PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.5228.xml'>
<!ENTITY RFC5435    PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.5435.xml'>
<!ENTITY RFC3261    PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.3261.xml'>
<!ENTITY RFC3428    PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.3428.xml'>
<!ENTITY RFC3629    PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.3629.xml'>

]>

<?xml-stylesheet type='text/xsl' href='http://xml.resource.org/authoring/rfc2629.xslt' ?>
<?rfc toc="yes" ?>
<?rfc tocompact="no" ?>
<?rfc tocindent="no" ?>
<?rfc comments="yes" ?>
<?rfc inline="yes" ?>
<?rfc symrefs="yes" ?>
<?rfc sortrefs="yes"?>
<?rfc iprnotified="no" ?>
<?rfc strict="yes" ?>
<?rfc compact="yes"?>
<?rfc subcompact="yes"?>

<rfc category="std"
     docName="draft-ietf-sieve-notify-sip-message-03"
     ipr="trust200902"
     xml:lang="en">

  <front>
    <title abbrev="Sieve Notification: SIP MESSAGE">Sieve Notification Mechanism: SIP MESSAGE</title>

    <author initials='A.' surname="Melnikov" fullname='Alexey Melnikov'>
      <organization>Isode Limited</organization>
      <address>
        <postal>
          <street>5 Castle Business Village</street>
          <street>36 Station Road</street>
          <city>Hampton</city>
          <region>Middlesex</region>
          <code>TW12 2BX</code>
          <country>UK</country>
        </postal>
        <email>Alexey.Melnikov@isode.com</email>
        <uri>http://www.melnikov.ca/</uri>
      </address>
    </author>

    <author initials="H." surname="Schulzrinne" fullname="Henning Schulzrinne">
      <organization>Columbia U.</organization>
      <address>
        <postal>
          <street>Columbia University Department of Computer Science</street>
          <city>New York</city>
          <region>NY</region>
          <code>10027</code>
          <country>US</country>
        </postal>
        <phone>+1 212 939 7004</phone>
        <email>hgs@cs.columbia.edu</email>
      </address>
    </author>

    <author initials="Q." surname="Sun" fullname="Qian Sun">
      <organization>Huawei Technologies</organization>
      <address>
        <postal>
          <street>Bantian, Longgang</street>
          <city>Shenzhen</city>
          <region>Guandong</region>
          <code>518129</code>
          <country>P.R China</country>
        </postal>
        <phone>+86 755 28780808</phone>
        <email>sunqian@huawei.com</email>
      </address>
    </author>
  
    <author initials='B.' surname="Leiba" fullname='Barry Leiba'>
      <organization>Huawei Technologies</organization>
      <address>
        <phone>+1 646 827 0648</phone>
        <email>barryleiba@computer.org</email>
        <uri>http://internetmessagingtechnology.org/</uri>
      </address>
    </author>
  
    <author initials="K." surname="Li" fullname="Kepeng Li">
      <organization abbrev="Huawei Technologies">Huawei Technologies</organization>
      <address>
        <postal>
          <street>Huawei Base, Bantian, Longgang District</street>
          <city>Shenzhen</city>
          <region>Guangdong</region>
          <code>518129</code>
          <country>P. R. China</country>
        </postal>
        <phone>+86-755-28974289</phone>
        <email>likepeng@huawei.com</email>
      </address>
    </author>

    <date year="2011" />

    <area>Applications</area>
    <workgroup>Sieve Working Group</workgroup>

    <keyword>Sieve</keyword>
    <keyword>SIP</keyword>
    <keyword>notification</keyword>

    <abstract>
      <t>This document describes a profile of the Sieve extension for 
      notifications, to allow notifications to be sent over SIP MESSAGE.</t>
    </abstract>
  </front>

  <middle>
      
    <section title="Introduction" toc="default">
      <section title="Overview">
        <t>
          The <xref target="RFC5435">Notify extension</xref> to the
          <xref target="RFC5228">Sieve mail filtering language</xref>
          is a framework for providing notifications by employing URIs that specify
          the notification mechanism.
          This document defines how SIP URIs <xref target="RFC3261">RFC 3261</xref>
          are used to generate notifications via
          SIP MESSAGE <xref target="RFC3428">RFC 3428</xref>.
        </t>
<t>        
<cref anchor="REVIEW NOTES">
Notes are placed below to document Adam Roach's RAI review of the -00 version
( http://www.ietf.org/mail-archive/web/rai/current/msg00345.html )
and Ben Campbell's review of the -02 version
( http://www.ietf.org/mail-archive/web/rai/current/msg00925.html )
</cref>
</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">RFC 2119</xref>.
        </t>
        <t>
          This document inherits terminology from the
          <xref target="RFC5228">Sieve email filtering language</xref>, the
          <xref target="RFC5435">Sieve Notify extension</xref>, and
          <xref target="RFC3261">RFC 3261</xref>.
        </t>
      </section>
    </section>

    <section title="Definition">
      <t>
        The SIP MESSAGE mechanism defined in this document results in the sending of a SIP MESSAGE request to notify a recipient about an email message.
      </t>
        
      <section title='Notify parameter "method"'>
        <t>
          The "method" parameter MUST be a URI that conforms to the SIP 
          (or SIPS) URI scheme (as specified in <xref target="RFC3261">RFC 3261</xref>)
          and that identifies a SIP (or SIPS) recipient of the notification.

          The URI MAY include the resource identifier portion of a SIP address and URI parameters.

          The URI parameter "method" MUST be included and MUST contain the value "MESSAGE".
          (Note that future specifications might extend this document and define
          Sieve notifications that use other SIP methods.)

          The processing application MUST form a request according to the rules 
          specified in <xref target="RFC3261">RFC 3261</xref>.
        </t>

<t>        
<cref anchor="BEN'S REVIEW, MINOR 1; ** resolved **">
I think you've got the right idea here, but the terminology is wrong--I.e. the SIP URI _is_ the  SIP address. I think what you are after is something more along the lines of forming a SIP Request based on an "external" URI, similarly to what you might do with a URI in a hypertext link or on a business card. I suggest merely saying something along the lines of "form a SIP request according to the rules in rfc 3261"
</cref>
</t>

        <section title='Notify parameter "method" RAI review notes'>
<t>        
<cref anchor="RAI REVIEW NOTES">
This section and its subsections are included for editing purposes, and will be
removed before the document is final, when the issues are resolved.
</cref>
</t>

          <section title='RAI review notes from Adam Roach'>
<t>        
<cref anchor="ADAM'S REVIEW 1">
These are the notes on section 2.1 from Adam Roach's review of 9 Jan 2009.
</cref>
</t>
<t>
My first area of concern is that, while this seems a reasonable way to perform this functionality in SIP, I don't think it's the only reasonable way to do it in SIP. Consequently, this document needs to take care not to preclude future SIP mechanisms for SIEVE notifications. For example, the conveyance of more semantic information in a PUBLISH message would be quite useful when there is a dynamically changing community of parties interested in receiving notifications. (The PUBLISH would be sent to an event agent, which could then receive SUBSCRIBE requests from interested parties). This may be applicable, for example, when monitoring shared resources, such as technical support email queues.
</t>
<t>
However, the draft makes an implicit assumption that any SIEVE notification method URI starting with "sip:" necessarily will make use of the mechanism it defines, and never any other. There is no means for disambiguating among multiple mechanisms. In fact, the draft seems to go out of its way to ruin an extensibility mechanism that it would have automatically inherited from SIP: "The URI parameter 'method' MUST be ignored, because only the MESSAGE method is allowed by this specification."
</t>
<t>
I would suggest that the draft be amended to either *require* a "method" URI parameter (with "MESSAGE" indicating the mechanism described in this document), or to include additional information in the ":options" tag that explicitly indicates the use of this document's mechanism.
</t>
          </section>
          <section title='RAI review notes from Ben Campbell'>
<t>
<cref anchor="BEN'S REVIEW, MAJOR 1a">
These are the notes on section 2.1 from Ben Campbell's review of 1 Sep 2010.
</cref>
</t>
<t>
You limit the method parameter to SIP or SIPS URIs. I can imagine several reasons you might have done this, most likely to cut down on the number of URIs that could would indicate the SIEVE rule was for SIP. But there are other perfectly legitimate URI types for SIP MESSAGE requests. For example TEL URIs are fairly common. IM URIs are also legal for SIP MESSAGE, although you're not likely to see those in the wild--but that could change in the future. SIP may add new legal URI types in the future.
</t>
<t>
One way around this would be to have some other part of the notify "method" parameter identify the fact that a SIP MESSAGE request is intended, and then allow any URI type that is legal for SIP MESSAGE.
</t>
<t>
You also include the SIP URI method=parameter for the sake of extensibility. This would be an issue if you allowed other URI types, since the method parameter is not necessarily defined for all URI types. I'm also not sure this gives you the extensibility you want--you would not be able to do anything useful with "method=FOO" without some additional SIEVE spec on how to send SIP FOO requests. I think you would be better off leaving off the method URI parameter, and instead encode something in the :options parameter. 
</t>
<t>
[Note: I assume you added the method parameter based on feedback from Adam from a while back. I note that he suggested using either the method parameter, or something in :options. I am not disagreeing with him--I'm just suggesting that the :options approach is the better choice.]
</t>
          </section>

          <section title='Editor responses to RAI reviews'>
<t>        
<cref anchor="EDITOR NOTES TO RAI REVIEWS">
These are the editor's responses, to note work that still needs to be done.
</cref>
</t>
<t>
Both of these reviews bring up the same issue: we painted ourselves into a corner when
we designed the Sieve Notify framework <xref target="RFC5435"/> in the first place,
by making the "method" parameter a URI, and having the URI be the only way to distinguish
the notification method.
That means that the Sieve engine needs to be able to take a URI and know how to process it,
and it also means that there's no way to use the same URI for different notification
methods, depending upon the situation.
</t>
<t>
One problem with that is that we can't use "mailto:joe@example.org" for any
notification mechanism other than email, even if some other notification mechanism
keys off of an email address, and that if we use a "tel:" URI for SIP,
we can't use "tel:" URIs for anything else.
</t>
<t>
Another problem is that we have to know, in advance, all the URI schemas that apply
to a given notification method.
</t>
<t>
I don't know how to resolve these issues within the Sieve Notify framework.  (Barry)
</t>
          </section>

        </section>

      </section>

      <section anchor="from-tag" title='Notify tag ":from"'>
        <t>
          The value of the ":from" tag MUST use the SIP 
          "From" header field syntax; if the :from value is specified, has valid 
          syntax, and is valid according to the implementation-specific security checks
          (see Section 3.3 of Sieve Notify <xref target="RFC5435"/>),
          then the notification SHOULD
          include the "From" SIP header field containing the value of
          the :from notify tag. If the specified value is not valid,
          then it is ignored.
        </t>
        <t>
          All SIP authentication, including challenges and client certificates,
          SHOULD be done in the context of the Sieve engine -- the Sieve engine
          is the identity being authenticated.
          This avoids security issues associated with the Sieve engine's having
          access to the end user's SIP authentication credentials.
          The Sieve engine MAY use server-wide credentials (including applicable
          certificates) that are the same for all scripts.
          Alternatively, it MAY, for auditing purposes, use different sets
          of Sieve-engine credentials when operating on behalf of different users.
        </t>
        <t>
          See section 22 of RFC 3261 <xref target="RFC3261"/> for more information
          about SIP authentication.
        </t>

<t>
<cref anchor="ADAM'S REVIEW 2; ** resolved **">
My second area of concern is with the handling of the "From" header field. The draft-ietf-sieve-notify document clearly intends the ":from" value to indicate the value that is typically rendered to the contacted party as the source of the message. This intended behavior is upheld by the language in section 2.3 of draft-ietf-sieve-notify-mailto-10 (it places this value in the SMTP "From:" header, and even suggests using the value in the "RCPT FROM" command -- despite the easy availability of an SMTP "Reply-To:" header). This mismatch in semantics between the protocols causes me concern, as it may surprise users to have radically different treatment of the value in the ":from" tag among protocols. Given the text in the base sieve-notify document, I believe that the behavior in sieve-notify-mailto is correct, and that the behavior in sieve-notify-sip should be modified to align with it. (Indication of the sending server can be made via other means, such as the SIP Call-Info: header field). 
</cref>
</t>

<t>        
<cref anchor="BEN'S REVIEW, MAJOR 2a; ** resolved **">
You need to consider how the SIEVE implementation deals with SIP authentication, digest challenges, etc. For example, if the peer SIP device responds with a 401 or 407 containing a digest-challenge, what credentials should be used to respond to the challenge? Would you suggest the credentials of a particular user? If so, are their security considerations around having the SIEVE implementation know the credentials of a particular user? Or should the SIEVE implementation authenticate with server-wide credentials?
</cref>
</t>

<t>        
<cref anchor="BEN'S REVIEW, MAJOR 2b; ** resolved **">
Do you allow TLS mutual authentication? If so, what client certificate should be presented?
</cref>
</t>
      </section>

      <section title='Notify tag ":options"'>
        <t>
          Handling of the ":options" tag is implementation specific. This document
          doesn't require presence of any option and doesn't define how options
          are processed.
        </t>
      </section>
      
      <section title='Notify tag ":importance"'>
        <t>
          The ":importance" tag is intended to convey the importance of the
          SIP MESSAGE notification, not the importance of the email message
          that generated the notification.
          The value of the ":importance" tag MAY, therefore, be transformed into SIP 
          "Priority" header field (in addition to or instead of including it in the
          body of the message).
          If this is done, the value of the "Priority" header field MUST be
          "urgent" if the value of the ":importance" tag is "1", 
          "normal" if the value of the ":importance" tag is "2",
          and "non-urgent" if the value of the ":importance" tag is "3".
        </t>
<t>        
<cref anchor="BEN'S REVIEW, MINOR 2; ** resolved **">
Do you expect the :importance tag to set the importance of the SIP MESSAGE request, or to convey the importance of the email that generated the notification in the first place? If the first, then you're doing it right. If the second, it might be more reasonable to put something in the body.
</cref>
</t>
      </section>
     
      <section anchor="message-tag" title='Notify tag ":message"'>
        <t>
          If the ":message" tag is included, it MUST be transformed into the 
          message-body of a SIP MESSAGE, which MUST have Content-Type value of
          "text/plain" with CHARSET="UTF-8". 
          If the ":message" tag is not included, a default message will be used.
          The default message body SHOULD contain the values
          of the "From" and "Subject" header fields of the triggering email message
          (and MAY include the value of the ":importance" tag, if one is specified),
          as shown in <xref target="Example2"/> below.
        </t>
        <t>
          Implementations MUST comply with the SIP MESSAGE size limits, as discussed in
          section 8 of RFC 3428 <xref target="RFC3428"/>.
        </t>
<t>        
<cref anchor="BEN'S REVIEW, MINOR 3; ** resolved **">
This section needs to mention the SIP MESSAGE request size limits from RFC 3428. Is the body still expected to have a content-type of text/plain if no :message tag is present?
</cref>
</t>
      </section> 
      
      <section anchor="other-req" title="Other Definitions">          
        <t>
          An implementation MUST ignore any URI parameter it does not 
          understand (the URI MUST be processed as if the parameter were 
          not present).
          Implementations SHOULD NOT use the hname "body" parameter 
          value as the message-body of the SIP MESSAGE request.
          If the hname "body" parameter and ":message" tag are present at the same time,
          the "body" parameter MUST be ignored.
        </t>
        <t>
          If the notification request fails, there will be a SIP error code
          describing the failure.
          The policy for retrying delivery of failed notifications is specified in
          RFC 3261 <xref target="RFC3261"/>, according to the error code.
          In other words, unlike the situation with some other Sieve notification
          methods, retries for SIP MESSAGE notifications are controlled by
          the notification protocol itself (SIP).
        </t>
<t>        
<cref anchor="BEN'S REVIEW, MAJOR 3; ** resolved **">
I'm not sure what you have in mind here. If you are talking about request retransmission as described in 3261, those are not suggestions--they are mandatory parts of the SIP state machine. If you mean something like "try again later because the destination party is offline" SIP doesn't have much to say about that except in a few specific response scenarios.
</cref>
</t>
      </section>
        
      <section anchor="notify_method_capability" title="Test notify_method_capability">
        <t>
          Because it is impossible to tell in advance whether the notification recipient
          is online and able to receive a SIP MESSAGE,
          the notify_method_capability test for "online" will always return "maybe" for
          this notification method.
        </t>
<t>        
<cref anchor="BEN'S REVIEW, MINOR 4; ** resolved **">
How could you ever know this, short of trying the message? The implementation would have to be presence aware to ever return something other than "maybe", and even then it can't be certain.
</cref>
</t>
      </section>
    </section>
      
    <section title="Examples">
      <t>
        In the following examples, the sender of the email has an address of 
        juliet@example.org, the entity to be notified has a SIP address
        of <sip:romeo@example.com>, and the notification service has a SIP 
        address <sip:notifier@example.com>.
      </t>

      <section anchor="Example1" title="Example 1">
      <t>
        The following is a basic Sieve notify action with only a method:
      </t>
      <t>
        notify "sip:romeo@example.com;method=MESSAGE"
      </t>
      <t>
        The resulting SIP MESSAGE request might be as follows:
      </t>

      <figure>
<artwork><![CDATA[
   MESSAGE sip:romeo@example.com SIP/2.0
   Via: SIP/2.0/TCP notifier.example.com;branch=z9hG4bK776sgdkse
   Max-Forwards: 70
   From: sip:notifier@example.com;tag=32328
   To: sip:romeo@example.com
   Call-ID: asd88asd77a@1.2.3.4
   CSeq: 1 MESSAGE
   Date: Sat, 13 Nov 2010 23:29:00 GMT
   Content-Type: text/plain
   Content-Length: 53   

   <juliet@example.com> wrote: Contact me immediately!
]]></artwork>
        <postamble>
          In the example above the email message was received from
          juliet@example.com and had "Subject: Contact me immediately!"
        </postamble>
      </figure>
      </section>

      <section anchor="Example2" title="Example 2">
      <t>
        The following is a more advanced Sieve notify action with a method,
        importance, subject, and message:
      </t>

      <figure>
<artwork><![CDATA[
   notify :importance "1"
       :message "You got new mail!"
       "sip:romeo@example.com;method=MESSAGE?subject=SIEVE"

   MESSAGE sip:romeo@example.com SIP/2.0
   Via: SIP/2.0/TCP notifier.example.com;branch=z9hG4bK776sgdkse
   Max-Forwards: 70
   From: sip:notifier@example.com;tag=32328
   To: sip:romeo@example.com
   Subject: SIEVE
   Priority: urgent
   Call-ID: asd88asd77a@1.2.3.4
   CSeq: 1 MESSAGE
   Date: Fri, 08 Apr 2011 06:54:00 GMT
   Content-Type: text/plain
   Content-Length: 19

   You got new mail!
]]></artwork>
      </figure>
      </section>

    </section>

    <section title="Requirements Conformance Checklist" toc="default">        
<?rfc subcompact="no"?>
        <t>
          Section 3.8 of Sieve Notify <xref target="RFC5435"/> specifies
          a set of requirements for Sieve notification methods.
          A checklist is provided here to show
          conformance of the SIP MESSAGE notification method.
        
          <list style="numbers">
            <t>
              No new Sieve tags have been added to the "notify" action.
            </t>
            <t>
              An implementation of the SIP MESSAGE notification method SHOULD NOT
              modify the final notification text, except to comply with SIP
              MESSAGE length limits.
              Deployments MAY make operational decisions about notification text,
              for reasons such as privacy and confidentiality.
              Modification of
              characters themselves should not be necessary, since the SIP MESSAGE
              body is encoded in UTF-8 <xref target="RFC3629"/>.                    
<vspace blankLines="1"/>        
<cref anchor="BEN'S REVIEW, MINOR 5; ** resolved **">
There are length limits for SIP MESSAGE requests that this draft should consider. They are large enough to be generally non constraining for this usage, but they exist.
</cref>
            </t>
            <t>
              An implementation MAY ignore parameters specified in the
              ":importance", and ":options" tags.
            </t>
            <t>
              A default message is suggested in <xref target="message-tag"/>.
            </t>
            <t>
              A notification sent via the SIP MESSAGE notification method MAY include
              the Date header field containing the date-time of the moment when the SIP MESSAGE
              notification was generated.
            </t>
            <t>
              The notification source is identified through the SIP "From:" header field,
              via the Sieve Notify ":from" tag (see <xref target="from-tag"/>.
            </t>
            <t>
              An implementation MUST NOT include any other extraneous
              information not specified in parameters to the notify action.
            </t>
            <t>
              An implementation MUST ignore any URI parameters it does not
              understand (i.e., the URI MUST be processed as if the action
              or parameter were not present). See <xref target="other-req"/>
              for more details.
            </t>
            <t>
              The notify_method_capability test for the "online" notification-capability
              behaves as described in <xref target="notify_method_capability"/>.
            </t>
            <t>
              The policy for retrying delivery of failed notifications is specified in
              RFC 3261 <xref target="RFC3261"/>, as noted in <xref target="other-req"/>.
            </t>
          </list>
        </t>
<?rfc subcompact="yes"?>
    </section>
    
    <section anchor="security" title="Security Considerations" toc="default">
      <t>
        Depending on the information included, sending a notification can be
        comparable to forwarding mail to the notification recipient.
        Care must be taken when forwarding mail automatically, to ensure that
        confidential information is not sent into an insecure environment
        or over an insecure channel.
      </t>
      <t>
        User agents that support the SIP MESSAGE request MUST implement end-to-end 
        authentication, body integrity, and body confidentiality mechanisms.
      </t>
      <t>
        The Sieve Notify extension specifies that
        notification methods MUST provide mechanisms for avoiding notification loops.
        In this case, the SIP protocol itself prevents loops, and no explicit
        work is needed within the notification mechanism.
        In situations where
        a SIP MESSAGE notification can result in an email message, which could
        generate another SIP MESSAGE notification, loop prevention through rate
        limiting might be necessary.
      </t>
      <t>
        Other security considerations given in
        the Sieve base specification <xref target="RFC5228"/>,
        the Sieve Notify extension <xref target="RFC5435"/>, and
        RFC 3261 <xref target="RFC3261"/>
        are also relevant to this document.
      </t>
    </section>
        
    <section title="IANA Considerations">
      <t>
        The following template provides the IANA registration of the Sieve
        notification mechanism specified in this document.
        This information should be added to the list of Sieve notification
        mechanisms maintained at
        <http://www.iana.org/assignments/sieve-notification>.
      </t>
      <t>
        To: iana@iana.org<vspace/>
        Subject: Registration of new Sieve notification mechanism<vspace/>
        Mechanism name: sip-message<vspace/>
        Mechanism URI: SIP/SIPS as specified in <xref target="RFC3261">RFC 3261</xref><vspace/>
        Mechanism-specific options: none<vspace/>
        Standards Track/IESG-approved experimental RFC number: [RFC XXXX]<vspace/>
        Person and email address to contact for further information:<vspace/>
            See authors of [RFC XXXX]
      </t>
    </section>        
    
    <section title="Acknowledgements">
      <t>
        This document borrows some text from draft-ietf-sieve-notify-xmpp.
      </t>
      <t>
        The authors would like to specially thank Adam Roach and Eric Burger
        for their helpful comments.
      </t>
    </section>
  </middle>

  <back>
    <references title="Normative References">
      &RFC2119;  <!-- Keywords -->
      &RFC5228;  <!-- Sieve -->
      &RFC5435;  <!-- Notify -->
      &RFC3261;  <!-- SIP -->
      &RFC3428;  <!-- SIP IM -->
      &RFC3629;  <!-- UTF-8 -->
    </references>
  </back>
</rfc>

PAFTECH AB 2003-20262026-04-24 07:27:50