Network Working Group                                   M. Garcia-Martin
Request for Comments: 5547                                      Ericsson
Category: Standards Track                                     M. Isomaki
                                                                  Nokia
                                                           G. Camarillo
                                                              S. Loreto
                                                               Ericsson
                                                             P. Kyzivat
                                                          Cisco Systems
                                                               May 2009


     A Session Description Protocol (SDP) Offer/Answer Mechanism
                       to Enable File Transfer

Status of This Memo

  This document specifies an Internet standards track protocol for the
  Internet community, and requests discussion and suggestions for
  improvements.  Please refer to the current edition of the "Internet
  Official Protocol Standards" (STD 1) for the standardization state
  and status of this protocol.  Distribution of this memo is unlimited.

Copyright Notice

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

  This document is subject to BCP 78 and the IETF Trust's Legal
  Provisions Relating to IETF Documents in effect on the date of
  publication of this document (http://trustee.ietf.org/license-info).
  Please review these documents carefully, as they describe your rights
  and restrictions with respect to this document.

Abstract

  This document provides a mechanism to negotiate the transfer of one
  or more files between two endpoints by using the Session Description
  Protocol (SDP) offer/answer model specified in RFC 3264.  SDP is
  extended to describe the attributes of the files to be transferred.
  The offerer can describe either the files it wants to send or the
  files it would like to receive.  The answerer can either accept or
  reject the offer separately for each individual file.  The transfer
  of one or more files is initiated after a successful negotiation.
  The Message Session Relay Protocol (MSRP) is defined as the default
  mechanism to actually carry the files between the endpoints.  The
  conventions on how to use MSRP for file transfer are also provided in
  this document.



Garcia-Martin, et al.       Standards Track                     [Page 1]

RFC 5547           SDP Offer/Answer for File Transfer           May 2009


Table of Contents

  1. Introduction ....................................................3
  2. Terminology .....................................................4
  3. Definitions .....................................................4
  4. Overview of Operation ...........................................5
  5. File Selector ...................................................6
  6. Extensions to SDP ...............................................7
  7. File Disposition Types .........................................13
  8. Protocol Operation .............................................13
     8.1. The 'file-transfer-id' Attribute ..........................14
     8.2. Offerer's Behavior ........................................17
          8.2.1. The Offerer Is a File Sender .......................17
          8.2.2. The Offerer Is a File Receiver .....................18
          8.2.3. SDP Offer for Several Files ........................18
     8.3. Answerer's Behavior .......................................19
          8.3.1. The Answerer Is a File Receiver ....................19
          8.3.2. The Answerer Is a File Sender ......................20
     8.4. Aborting an Ongoing File Transfer Operation ...............22
     8.5. Indicating File Transfer Offer/Answer Capability ..........25
     8.6. Reusage of Existing "m=" Lines in SDP .....................26
     8.7. MSRP Usage ................................................26
     8.8. Considerations about the 'file-icon' Attribute ............28
  9. Examples .......................................................28
     9.1. Offerer Sends a File to the Answerer ......................28
     9.2. Offerer Requests a File from the Answerer and
          Second File Transfer ......................................33
     9.3. Example of a Capability Indication ........................40
  10. Security Considerations .......................................41
  11. IANA Considerations ...........................................42
     11.1. Registration of New SDP Attributes .......................42
          11.1.1. Registration of the file-selector Attribute .......43
          11.1.2. Registration of the file-transfer-id Attribute ....43
          11.1.3. Registration of the file-disposition Attribute ....43
          11.1.4. Registration of the file-date Attribute ...........44
          11.1.5. Registration of the file-icon Attribute ...........44
          11.1.6. Registration of the file-range Attribute ..........45
  12. Acknowledgments ...............................................45
  13. References ....................................................45
     13.1. Normative References .....................................45
     13.2. Informative References ...................................46
  Appendix A.  Alternatives Considered ..............................48









Garcia-Martin, et al.       Standards Track                     [Page 2]

RFC 5547           SDP Offer/Answer for File Transfer           May 2009


1.  Introduction

  The Session Description Protocol (SDP) offer/answer [RFC3264]
  provides a mechanism for two endpoints to arrive at a common view of
  a multimedia session between them.  These sessions often contain
  real-time media streams such as voice and video, but are not limited
  to that.  Basically, any media component type can be supported, as
  long as there is a specification how to negotiate it within the SDP
  offer/answer exchange.

  The Message Session Relay Protocol (MSRP) [RFC4975] is a protocol for
  transmitting instant messages (IMs) in the context of a session.  The
  protocol specification describes the usage of SDP for establishing an
  MSRP session.  In addition to plain text messages, MSRP is able to
  carry arbitrary (binary) Multipurpose Internet Mail Extensions (MIME)
  [RFC2045] compliant content, such as images or video clips.

  There are many cases where the endpoints involved in a multimedia
  session would like to exchange files within the context of that
  session.  With MSRP, it is possible to embed files as MIME objects
  inside the stream of instant messages.  MSRP also has other features
  that are useful for file transfer.  Message chunking enables the
  sharing of the same transport connection between the transfer of a
  large file and interactive IM exchange without blocking the IM.  MSRP
  relays [RFC4976] provide a mechanism for Network Address Translator
  (NAT) traversal.  Finally, Secure MIME (S/MIME) [RFC3851] can be used
  for ensuring the integrity and confidentiality of the transferred
  content.

  However, the baseline MSRP does not readily meet all the requirements
  for file transfer services within multimedia sessions.  There are
  four main missing features:

  o  The recipient must be able to distinguish "file transfer" from
     "file attached to IM", allowing the recipient to treat the cases
     differently.

  o  It must be possible for the sender to send the request for a file
     transfer.  It must be possible for the recipient to accept or
     decline it, using the meta information in the request.  The actual
     transfer must take place only after acceptance by the recipient.

  o  It must be possible for the sender to pass some meta information
     on the file before the actual transfer.  This must be able to
     include at least content type, size, hash, and name of the file,
     as well as a short (human readable) description.





Garcia-Martin, et al.       Standards Track                     [Page 3]

RFC 5547           SDP Offer/Answer for File Transfer           May 2009


  o  It must be possible for the recipient to request a file from the
     sender, providing meta information about the file.  The sender
     must be able to decide whether to send a file matching the
     request.

  The rest of this document is organized as follows.  Section 3 defines
  a few terms used in this document.  Section 4 provides the overview
  of operation.  Section 5 introduces the concept of the file selector.
  The detailed syntax and semantics of the new SDP attributes and
  conventions on how the existing ones are used are defined in
  Section 6.  Section 7 discusses the file disposition types.
  Section 8 describes the protocol operation involving SDP and MSRP.
  Finally, some examples are given in Section 9.

2.  Terminology

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

3.  Definitions

  For the purpose of this document, the following definitions specified
  in RFC 3264 [RFC3264] apply:

  o  Answer

  o  Answerer

  o  Offer

  o  Offerer

  Additionally, we define the following terms:

  File sender:  The endpoint that is willing to send a file to the file
     receiver.

  File receiver:  The endpoint that is willing to receive a file from
     the file sender.

  File selector:  A tuple of file attributes that the SDP offerer
     includes in the SDP in order to select a file at the SDP answerer.
     This is described in more detail in Section 5.






Garcia-Martin, et al.       Standards Track                     [Page 4]

RFC 5547           SDP Offer/Answer for File Transfer           May 2009


  Push operation:  A file transfer operation where the SDP offerer
     takes the role of the file sender and the SDP answerer takes the
     role of the file receiver.

  Pull operation:  A file transfer operation where the SDP offerer
     takes the role of the file receiver and the SDP answerer takes the
     role of the file sender.

4.  Overview of Operation

  An SDP offerer creates an SDP body that contains the description of
  one or more files that the offerer wants to send or receive.  The
  offerer sends the SDP offer to the remote endpoint.  The SDP answerer
  can accept or reject the transfer of each of those files separately.

  The actual file transfer is carried out using the Message Session
  Relay Protocol (MSRP) [RFC4975].  Each SDP "m=" line describes an
  MSRP media stream used to transfer a single file at a time.  That is,
  the transfer of multiple simultaneous files requires multiple "m="
  lines and corresponding MSRP media streams.  It should be noted that
  multiple MSRP media streams can share a single transport layer
  connection, so this mechanism will not lead to excessive use of
  transport resources.

  Each "m=" line for an MSRP media stream is accompanied with a few
  attributes describing the file to be transferred.  If the file sender
  generates the SDP offer, the attributes describe a local file to be
  sent (push), and the file receiver can use this information to either
  accept or reject the transfer.  However, if the SDP offer is
  generated by the file receiver, the attributes are intended to
  characterize a particular file that the file receiver is willing to
  get (pull) from the file sender.  It is possible that the file sender
  does not have a matching file or does not want to send the file, in
  which case the offer is rejected.

  The attributes describing each file are provided in SDP by a set of
  new SDP attributes, most of which have been directly borrowed from
  MIME.  This way, user agents can decide whether or not to accept a
  given file transfer based on the file's name, size, description,
  hash, icon (e.g., if the file is a picture), etc.

  SDP direction attributes (e.g., 'sendonly', 'recvonly') are used to
  indicate the direction of the transfer, i.e., whether the SDP offerer
  is willing to send or receive the file.  Assuming that the answerer
  accepts the file transfer, the actual transfer of the files takes






Garcia-Martin, et al.       Standards Track                     [Page 5]

RFC 5547           SDP Offer/Answer for File Transfer           May 2009


  place with ordinary MSRP.  Note that the 'sendonly' and 'recvonly'
  attributes refer to the direction of MSRP SEND requests and do not
  preclude other protocol elements (such as 200 responses, REPORT
  requests, etc.).

     In principle the file transfer can work even with an endpoint
     supporting only regular MSRP without understanding the extensions
     defined herein, in a particular case where that endpoint is both
     the SDP answerer and the file receiver.  The regular MSRP endpoint
     answers the offer as it would answer any ordinary MSRP offer
     without paying attention to the extension attributes.  In such a
     scenario, the user experience would, however, be reduced, since
     the recipient would not know (by any protocol means) the reason
     for the session and would not be able to accept/reject it based on
     the file attributes.

5.  File Selector

  When the file receiver generates the SDP offer, this SDP offer needs
  to unambiguously identify the requested file at the file sender.  For
  this purpose, we introduce the notion of a file selector, which is a
  tuple composed of one or more of the following individual selectors:
  the name, size, type, and hash of the file.  The file selector can
  include any number of selectors, so all four of them do not always
  need to be present.

  The purpose of the file selector is to provide enough information
  about the file to the remote entity, so that both the local and the
  remote entity can refer to the same file.  The file selector is
  encoded in a 'file-selector' media attribute in SDP.  The formal
  syntax of the 'file-selector' media attribute is described in
  Figure 1.

  The file selection process is applied to all the available files at
  the host.  The process selects those files that match each of the
  selectors present in the 'file-selector' attribute.  The result can
  be zero, one, or more files, depending on the presence of the
  mentioned selectors in the SDP and depending on the available files
  in a host.  The file transfer mechanism specified in this document
  requires that a file selector eventually results at most in a single
  file to be chosen.  Typically, if the hash selector is known, it is
  enough to produce a file selector that points to exactly zero or one
  file.  However, a file selector that selects a unique file is not
  always known by the offerer.  Sometimes only the name, size, or type
  of file is known, so the file selector may result in selecting more
  than one file, which is an undesired case.  The opposite is also
  true: if the file selector contains a hash selector and a name
  selector, there is a risk that the remote host has renamed the file,



Garcia-Martin, et al.       Standards Track                     [Page 6]

RFC 5547           SDP Offer/Answer for File Transfer           May 2009


  in which case, although a file whose computed hash equals the hash
  selector exists, the file name does not match that of the name
  selector.  Thus, in this case, the file selection process will result
  in the selection of zero files.

  This specification uses the Secure Hash Algorithm 1, SHA-1 [RFC3174].
  If future needs require adding support for different hashing
  algorithms, they will be specified as extensions to this document.

  Implementations according to this specification MUST implement the
  'file-selector' attribute and MAY implement any of the other
  attributes specified in this specification.  SDP offers and answers
  for file transfer MUST contain a 'file-selector' media attribute that
  selects the file to be transferred and MAY contain any of the other
  attributes specified in this specification.

  The 'file-selector' media attribute is also useful when learning the
  support of the file transfer offer/answer capability that this
  document specifies.  This is further explained in Section 8.5.

6.  Extensions to SDP

  We define a number of new SDP [RFC4566] attributes that provide the
  required information to describe the transfer of a file with MSRP.
  These are all media-level-only attributes in SDP.  The following is
  the formal ABNF syntax [RFC5234] of these new attributes.  It is
  built above the SDP [RFC4566] grammar, RFC 2045 [RFC2045], RFC 2183
  [RFC2183], RFC 2392 [RFC2392], and RFC 5322 [RFC5322].

  attribute           =/ file-selector-attr / file-disp-attr /
                         file-tr-id-attr / file-date-attr /
                         file-icon-attr / file-range-attr
                         ; attribute is defined in RFC 4566

  file-selector-attr   = "file-selector" [":" selector *(SP selector)]
  selector             = filename-selector / filesize-selector /
                         filetype-selector / hash-selector

  filename-selector    = "name:"  DQUOTE filename-string DQUOTE
                                      ; DQUOTE defined in RFC 5234
  filename-string      = 1*(filename-char/percent-encoded)
  filename-char        = %x01-09/%x0B-0C/%x0E-21/%x23-24/%x26-FF
                                ; any byte except NUL, CR, LF,
                                ; double quotes, or percent
  percent-encoded      = "%" HEXDIG HEXDIG
                                ; HEXDIG defined in RFC 5234

  filesize-selector    = "size:" filesize-value



Garcia-Martin, et al.       Standards Track                     [Page 7]

RFC 5547           SDP Offer/Answer for File Transfer           May 2009


  filesize-value       = integer        ;integer defined in RFC 4566

  filetype-selector    = "type:" type "/" subtype *(";" ft-parameter)
  ft-parameter         = attribute "=" DQUOTE value-string DQUOTE
                                     ; attribute is defined in RFC 2045
                       ; free insertion of linear-white-space is not
                       ; permitted in this context.
                       ; note: value-string has to be re-encoded
                       ; when translating between this and a
                       ; Content-Type header.
  value-string         = filename-string

  hash-selector        = "hash:" hash-algorithm ":" hash-value
  hash-algorithm       = token     ; see IANA Hash Function
                                   ; Textual Names registry
                                   ; only "sha-1" currently supported
  hash-value           = 2HEXDIG *(":" 2HEXDIG)
                               ; Each byte in upper-case hex, separated
                               ; by colons.
                               ; HEXDIG defined in RFC 5234

  file-tr-id-attr      = "file-transfer-id:" file-tr-id-value
  file-tr-id-value     = token

  file-disp-attr       = "file-disposition:" file-disp-value
  file-disp-value      = token

  file-date-attr       = "file-date:"  date-param *(SP date-param)

  date-param           = c-date-param / m-date-param / r-date-param
  c-date-param         = "creation:" DQUOTE date-time DQUOTE
  m-date-param         = "modification:" DQUOTE date-time DQUOTE
  r-date-param         = "read:" DQUOTE date-time DQUOTE
                            ; date-time is defined in RFC 5322
                            ; numeric timezones (+HHMM or -HHMM)
                            ; must be used
                            ; DQUOTE defined in RFC 5234 files.

  file-icon-attr       = "file-icon:" file-icon-value
  file-icon-value      = cid-url        ; cid-url defined in RFC 2392

  file-range-attr      = "file-range:" start-offset "-" stop-offset
  start-offset         = integer        ; integer defined in RFC 4566
  stop-offset          = integer / "*"

                  Figure 1: Syntax of the SDP extension





Garcia-Martin, et al.       Standards Track                     [Page 8]

RFC 5547           SDP Offer/Answer for File Transfer           May 2009


  When used for capability query (see Section 8.5), the 'file-selector'
  attribute MUST NOT contain any selector, because its presence merely
  indicates compliance to this specification.

  When used in an SDP offer or answer, the 'file-selector' attribute
  MUST contain at least one selector.  Selectors characterize the file
  to be transferred.  There are four selectors in this attribute:
  'name', 'size', 'type', and 'hash'.

  The 'name' selector in the 'file-selector' attribute contains the
  filename of the content enclosed in double quotes.  The filename is
  encoded in UTF-8 [RFC3629].  Its value SHOULD be the same as the
  'filename' parameter of the Content-Disposition header field
  [RFC2183] that would be signaled by the actual file transfer.  If a
  file name contains double quotes or any other character that the
  syntax does not allow in the 'name' selector, they MUST be percent-
  encoded.  The 'name' selector MUST NOT contain characters that can be
  interpreted as directory structure by the local operating system.  If
  such characters are present in the file name, they MUST be percent-
  encoded.

     Note that the 'name' selector might still contain characters that,
     although not meaningful for the local operating system, might
     still be meaningful to the remote operating system (e.g., '\',
     '/', ':').  Therefore, implementations are responsible for
     sanitizing the input received from the remote endpoint before
     doing a local operation in the local file system, such as the
     creation of a local file.  Among other things, implementations can
     percent-encode characters that are meaningful to the local
     operating system before doing file system local calls.

  The 'size' selector in the 'file-selector' attribute indicates the
  size of the file in octets.  The value of this attribute SHOULD be
  the same as the 'size' parameter of the Content-Disposition header
  field [RFC2183] that would be signaled by the actual file transfer.
  Note that the 'size' selector merely includes the file size, and does
  not include any potential overhead added by a wrapper, such as
  message/cpim [RFC3862].

  The 'type' selector in the 'file-selector' attribute contains the
  MIME media and submedia types of the content.  In general, anything
  that can be expressed in a Content-Type header field (see RFC 2045
  [RFC2045]) can also be expressed with the 'type' selectors.  Possible
  MIME Media Type values are the ones listed in the IANA registry for
  MIME Media Types [IANA].  Zero or more parameters can follow.  When






Garcia-Martin, et al.       Standards Track                     [Page 9]

RFC 5547           SDP Offer/Answer for File Transfer           May 2009


  translating parameters from a Content-Type header and a 'type'
  selector, the parameter has to be re-encoded prior to its
  accommodation as a parameter of the 'type' selector (see the ABNF
  syntax of 'ft-parameter').

  The 'hash' selector in the 'file-selector' attribute provides a hash
  computation of the file to be transferred.  This is commonly used by
  file transfer protocols.  For example, FLUTE [FLUTE-REV] uses hashes
  (called message digests) to verify the contents of the transfer.  The
  purpose of the 'hash' selector is two-fold: On one side, in pull
  operations, it allows the file receiver to identify a remote file by
  its hash rather than by its file name, providing that the file
  receiver has learned the hash of the remote file by some out-of-band
  mechanism.  On the other side, in either push or pull operations, it
  allows the file receiver to verify the contents of the received file,
  or even avoid unnecessary transmission of an existing file.

     The address space of the SHA-1 algorithm is big enough to avoid
     any collision in hash computations in between two endpoints.  When
     transferring files, the actual file transfer protocol should
     provide reliable transmission of data, so verifications of
     received files should always succeed.  However, if endpoints need
     to protect the integrity of a file, they should use some other
     mechanism than the 'hash' selector specified in this memo.

  The 'hash' selector includes the hash algorithm and its value.
  Possible hash algorithms are those defined in the IANA registry of
  Hash Function Textual Names [IANA].  Implementations according to
  this specification MUST add a 160-bit string resulting from the
  computation of US Secure Hash Algorithm 1 (SHA1) [RFC3174] if the
  'hash' selector is present.  If need arises, extensions can be
  drafted to support several hashing algorithms.  Therefore,
  implementations according to this specification MUST be prepared to
  receive SDP containing more than a single 'hash' selector in the
  'file-selector' attribute.

  The value of the 'hash' selector is the byte string resulting from
  applying the hash algorithm to the content of the whole file, even
  when the file transfer is limited to a number of octets (i.e., the
  'file-range' attribute is indicated).

  The 'file-transfer-id' attribute provides a randomly chosen globally
  unique identification to the actual file transfer.  It is used to
  distinguish a new file transfer request from a repetition of the SDP
  (or the fraction of the SDP that deals with the file description).
  This attribute is described in much greater detail in Section 8.1.





Garcia-Martin, et al.       Standards Track                    [Page 10]

RFC 5547           SDP Offer/Answer for File Transfer           May 2009


  The 'file-disposition' attribute provides a suggestion to the other
  endpoint about the intended disposition of the file.  Section 7
  provides further discussion of the possible values.  The value of
  this attribute SHOULD be the same as the disposition type parameter
  of the Content-Disposition header field [RFC2183] that would be
  signaled by the actual file transfer protocol.

  The 'file-date' attribute indicates the dates on which the file was
  created, modified, or last read.  This attribute MAY contain a
  combination of the 'creation', 'modification', and 'read' parameters,
  but MUST NOT contain more than one of each type .

  The 'creation' parameter indicates the date on which the file was
  created.  The value MUST be a quoted string that contains a
  representation of the creation date of the file in RFC 5322 [RFC5322]
  'date-time' format.  Numeric timezones (+HHMM or -HHMM) MUST be used.
  The value of this parameter SHOULD be the same as the 'creation-date'
  parameter of the Content-Disposition header field [RFC2183] that
  would be signaled by the actual file transfer protocol.

  The 'modification' parameter indicates the date on which the file was
  last modified.  The value MUST be a quoted string that contains a
  representation of the last modification date to the file in RFC 5322
  [RFC5322] 'date-time' format.  Numeric timezones (+HHMM or -HHMM)
  MUST be used.  The value of this parameter SHOULD be the same as the
  'modification-date' parameter of the Content-Disposition header field
  [RFC2183] that would be signaled by the actual file transfer
  protocol.

  The 'read' parameter indicates the date on which the file was last
  read.  The value MUST be a quoted string that contains a
  representation of the last date the file was read in RFC 5322
  [RFC5322] 'date-time' format.  Numeric timezones (+HHMM or -HHMM)
  MUST be used.  The value of this parameter SHOULD be the same as the
  'read-date' parameter of the Content-Disposition header field
  [RFC2183] that would be signaled by the actual file transfer
  protocol.

  The 'file-icon' attribute can be useful with certain file types such
  as images.  It allows the file sender to include a pointer to a body
  that includes a small preview icon representing the contents of the
  file to be transferred, which the file receiver can use to determine
  whether it wants to receive such file.  The 'file-icon' attribute
  contains a Content-ID URL, which is specified in RFC 2392 [RFC2392].
  Section 8.8 contains further considerations about the 'file-icon'
  attribute.





Garcia-Martin, et al.       Standards Track                    [Page 11]

RFC 5547           SDP Offer/Answer for File Transfer           May 2009


  The 'file-range' attribute provides a mechanism to signal a chunk of
  a file rather than the complete file.  This enables use cases where a
  file transfer can be interrupted and resumed, even perhaps changing
  one of the endpoints.  The 'file-range' attribute contains the "start
  offset" and "stop offset" of the file, separated by a dash "-".  The
  "start offset" value refers to the octet position of the file where
  the file transfer should start.  The first octet of a file is denoted
  by the ordinal number "1".  The "stop offset" value refers to the
  octet position of the file where the file transfer should stop,
  inclusive of this octet.  The "stop offset" value MAY contain a "*"
  if the total size of the file is not known in advance.  The absence
  of this attribute indicates a complete file, i.e., as if the 'file-
  range' attribute would have been present with a value "1-*".  The
  'file-range' attribute must not be confused with the Byte-Range
  header in MSRP.  The former indicates the portion of a file that the
  application would read and pass onto the MSRP stack for
  transportation.  From the point of view of MSRP, the portion of the
  file is viewed as a whole message.  The latter indicates the number
  of bytes of that message that are carried in a chunk and the total
  size of the message.  Therefore, MSRP starts counting the delivered
  message at octet number 1, independently of the position of that
  octet in the file.

  The following is an example of an SDP body that contains the
  extensions defined in this memo:

  v=0
  o=alice 2890844526 2890844526 IN IP4 host.atlanta.example.com
  s=
  c=IN IP4 host.atlanta.example.com
  t=0 0
  m=message 7654 TCP/MSRP *
  i=This is my latest picture
  a=sendonly
  a=accept-types:message/cpim
  a=accept-wrapped-types:*
  a=path:msrp://atlanta.example.com:7654/jshA7we;tcp
  a=file-selector:name:"My cool picture.jpg" type:image/jpeg
    size:32349 hash:sha-1:
    72:24:5F:E8:65:3D:DA:F3:71:36:2F:86:D4:71:91:3E:E4:A2:CE:2E
  a=file-transfer-id:vBnG916bdberum2fFEABR1FR3ExZMUrd
  a=file-disposition:attachment
  a=file-date:creation:"Mon, 15 May 2006 15:01:31 +0300"
  a=file-icon:cid:[email protected]
  a=file-range:1-32349

           Figure 2: Example of SDP describing a file transfer




Garcia-Martin, et al.       Standards Track                    [Page 12]

RFC 5547           SDP Offer/Answer for File Transfer           May 2009


     NOTE: The 'file-selector' attribute in the above figure is split
     in three lines for formatting purposes.  Real implementations will
     encode it in a single line.

7.  File Disposition Types

  The SDP offer/answer for file transfer allows the file sender to
  indicate a preferred disposition of the file to be transferred in a
  new 'file-disposition' attribute.  In principle, any value listed in
  the IANA registry for Mail Content Disposition Values [IANA] is
  acceptable; however, most of them may not be applicable.

  There are two content dispositions of interest for file transfer
  operations.  On one hand, the file sender may just want the file to
  be rendered immediately in the file receiver's device.  On the other
  hand, the file sender may just want to indicate to the file receiver
  that the file should not be rendered at the reception of the file.
  The recipient's user agent may want to interact with the user
  regarding the file disposition or it may save the file until the user
  takes an action.  In any case, the exact actions are implementation
  dependent.

  To indicate that a file should be automatically rendered, this memo
  uses the existing 'render' value of the Content Disposition type in
  the new 'file-disposition' attribute in SDP.  To indicate that a file
  should not be automatically rendered, this memo uses the existing
  'attachment' value of the Content-Disposition type in the new 'file-
  disposition' attribute in SDP.  The default value is 'render', i.e.,
  the absence of a 'file-disposition' attribute in the SDP has the same
  semantics as 'render'.

     The disposition value 'attachment' is specified in RFC 2183
     [RFC2183] with the following definition:

        "Body parts can be designated 'attachment' to indicate that
        they are separate from the main body of the mail message, and
        that their display should not be automatic, but contingent upon
        some further action of the user."

     In the case of this specification, the 'attachment' disposition
     type is used to indicate that the display of the file should not
     be automatic, but contingent upon some further action of the user.

8.  Protocol Operation

  This section discusses how to use the parameters defined in Section 6
  in the context of an offer/answer [RFC3264] exchange.  Additionally,
  this section also discusses the behavior of the endpoints using MSRP.



Garcia-Martin, et al.       Standards Track                    [Page 13]

RFC 5547           SDP Offer/Answer for File Transfer           May 2009


  A file transfer session is initiated by the offerer sending an SDP
  offer to the answerer.  The answerer either accepts or rejects the
  file transfer session and sends an SDP answer to the offerer.

  We can differentiate two use cases, depending on whether the offerer
  is the file sender or file receiver:

  1.  The offerer is the file sender, i.e., the offerer wants to
      transmit a file to the answerer.  Consequently, the answerer is
      the file receiver.  In this case, the SDP offer contains a
      'sendonly' attribute, and accordingly the SDP answer contains a
      'recvonly' attribute.

  2.  The offerer is the file receiver, i.e., the offerer wants to
      fetch a file from the answerer.  Consequently, the answerer is
      the file sender.  In this case, the SDP offer contains a session
      or media 'recvonly' attribute, and accordingly the SDP answer
      contains a session or media 'sendonly' attribute.

8.1.  The 'file-transfer-id' Attribute

  This specification creates an extension to the SDP offer/answer model
  [RFC3264], and because of that, it is assumed that the existing SDP
  behavior is kept intact.  The SDP behavior requires, for example,
  that SDP is sent again to the remote party in situations where the
  media description or perhaps other SDP parameters have not changed
  with respect to a previous offer/answer exchange.  Let's consider the
  SIP Session Timer (RFC 4028) [RFC4028], which uses re-INVITE requests
  to refresh sessions.  RFC 4028 recommends to send unmodified SDP in a
  re-INVITE to refresh the session.  Should this re-INVITE contain SDP
  describing a file transfer operation and occur while the file
  transfer was still going on, there would be no means to detect
  whether the SDP creator wanted to abort the current file transfer
  operation and initiate a new one or the SDP file description was
  included in the SDP due to other reasons (e.g., session timer
  refresh).

  A similar scenario occurs when two endpoints have successfully agreed
  on a file transfer, which is currently taking place when one of the
  endpoints wants to add additional media streams to the existing
  session.  In this case, the endpoint sends a re-INVITE request that
  contains the SDP.  The SDP needs to maintain the media descriptions
  for the current ongoing file transfer and add the new media
  descriptions.  The problem is that the other endpoint is not able to
  determine whether or not a new file transfer is requested.






Garcia-Martin, et al.       Standards Track                    [Page 14]

RFC 5547           SDP Offer/Answer for File Transfer           May 2009


  In other cases, a file transfer was successfully completed.  Then, if
  an endpoint resends the SDP offer with the media stream for the file
  transfer, then the other endpoint wouldn't be able to determine
  whether or not a new file transfer should start.

  To address these scenarios, this specification defines the 'file-
  transfer-id' attribute, which contains a globally unique random
  identifier allocated to the file transfer operation.  The file
  transfer identifier helps both endpoints to determine whether the SDP
  offer is requesting a new file transfer or it is a repetition of the
  SDP.  A new file transfer is one that, in case of acceptance, will
  provoke the actual transfer of a file.  This is typically the case of
  new offer/answer exchanges, or in cases where an endpoint wants to
  abort the existing file transfer and restart the file transfer once
  more.  On the other hand, the repetition of the SDP does not lead to
  any actual file to be transferred, potentially because the file
  transfer is still going on or because it has already finished.  This
  is the case of repeated offer/answer exchanges, which can be due to a
  number of reasons (session timer, addition/removal of other media
  types in the SDP, update in SDP due to changes in other session
  parameters, etc.).

  Implementations according to this specification MUST include a 'file-
  transfer-id' attribute in SDP offers and answers.  The SDP offerer
  MUST select a file transfer identifier according to the syntax and
  add it to the 'file-transfer-id' attribute.  The SDP answerer MUST
  copy the value of the 'file-transfer-id' attribute in the SDP answer.

  The file transfer identifier MUST be unique within the current
  session (never used before in this session), and it is RECOMMENDED to
  be unique across different sessions.  It is RECOMMENDED to select a
  relatively big random identifier (e.g., 32 characters) to avoid
  duplications.  The SDP answerer MUST keep track of the proposed file
  transfer identifiers in each session and copy the value of the
  received file transfer identifier in the SDP answer.

  If a file transfer is suspended and resumed at a later time, the
  resumption is considered a new file transfer (even when the file to
  be transferred is the same); therefore, the SDP offerer MUST choose a
  new file transfer identifier.

  If an endpoint sets the port number to zero in the media description
  of a file transfer, for example, because it wants to reject the file
  transfer operation, then the SDP answer MUST mirror the value of the
  'file-transfer-id' attribute included in the SDP offer.  This
  effectively means that setting a media stream to zero has higher
  precedence than any value that the 'file-transfer-id' attribute can
  take.



Garcia-Martin, et al.       Standards Track                    [Page 15]

RFC 5547           SDP Offer/Answer for File Transfer           May 2009


  As a side effect, the 'file-transfer-id' attribute can be used for
  aborting and restarting again an ongoing file transfer.  Assume that
  two endpoints agree on a file transfer and the actual transfer of the
  file is taking place.  At some point in time in the middle of the
  file transfer, one endpoint sends a new SDP offer, equal to the
  initial one except for the value of the 'file-transfer-id' attribute,
  which is a new globally unique random value.  This indicates that the
  offerer wants to abort the existing transfer and start a new one,
  according to the SDP parameters.  The SDP answerer SHOULD abort the
  ongoing file transfer, according to the procedures of the file
  transfer protocol (e.g., MSRP), and start sending file once more from
  the initial requested octet.  Section 8.4 further discusses aborting
  a file transfer.

  If an endpoint creates an SDP offer where the 'file-transfer-id'
  attribute value does not change with respect to a previously sent
  one, but the file selector changes so that a new file is selected,
  then this is considered an error, and the SDP answerer MUST abort the
  file transfer operation (e.g., by setting the port number to zero in
  the SDP answer).  Note that endpoints MAY change the 'file-selector'
  attribute as long as the selected file does not change (e.g., by
  adding a hash selector); however, it is RECOMMENDED that endpoints do
  not change the value of the 'file-selector' attribute if it is
  requested to transfer the same file described in a previous SDP
  offer/answer exchange.

  Figure 3 summarizes the relation of the 'file-transfer-id' attribute
  with the file selector in subsequent SDP exchanges.

                     \                |             |               |
                      \ file selector |  different  |     same      |
    'file-transfer-id' \              |    file     |     file      |
    ==================================+=============+===============+
                                      |  new file   |   new file    |
     changed                          |  transfer   |   transfer    |
                                      |  operation  |   operation   |
    ----------------------------------+-------------+---------------+
                                      |             | existing file |
     unchanged                        |   error     |   transfer    |
                                      |             |   operation   |
    ----------------------------------+-------------+---------------+

     Figure 3: Relation of the 'file-transfer-id' attribute with the
            selector of the file in a subsequent SDP exchange

  In another scenario, an endpoint that has successfully transferred a
  file wants to send an SDP due to other reasons than the transfer of a
  file.  The SDP offerer creates an SDP file description that maintains



Garcia-Martin, et al.       Standards Track                    [Page 16]

RFC 5547           SDP Offer/Answer for File Transfer           May 2009


  the media description line corresponding to the file transfer.  The
  SDP offerer MUST then set the port number to zero and MUST keep the
  same value of the 'file-transfer-id' attribute that the initial file
  transfer got.

8.2.  Offerer's Behavior

  An offerer who wishes to send or receive one or more files to or from
  an answerer MUST build an SDP [RFC4566] description of a session
  containing one "m=" line per file.  When MSRP is used as the transfer
  mechanism, each "m=" line also describes a single MSRP session,
  according to the MSRP [RFC4975] procedures.  Any "m=" lines that may
  have already been present in a previous SDP exchange are normally
  kept unmodified; the new "m=" lines are added afterwards (Section 8.6
  describes cases when "m=" lines are reused).  All the media line
  attributes specified and required by MSRP [RFC4975] (e.g., "a=path",
  "a=accept-types", etc.)  MUST be included as well.

8.2.1.  The Offerer Is a File Sender

  In a push operation, the file sender creates an SDP offer describing
  the file to be sent.  The file sender MUST add a 'file-selector'
  attribute media line containing at least one of the 'type', 'size',
  or 'hash' selectors in indicating the type, size, or hash of the
  file, respectively.  If the file sender wishes to start a new file
  transfer, the file sender MUST add a 'file-transfer-id' attribute
  containing a new globally unique random identifier value.
  Additionally, the file sender MUST add a session or media 'sendonly'
  attribute to the SDP offer.  Then the file sender sends the SDP offer
  to the file receiver.

     Not all the selectors in the 'file-selector' attribute might be
     known when the file sender creates the SDP offer, for example,
     because the host is still processing the file.

     The 'hash' selector in the 'file-selector' attribute contains
     valuable information for the file receiver to identify whether the
     file is already available and need not be transmitted.

  The file sender MAY also add a 'name' selector in the 'file-selector'
  attribute, and 'file-icon', 'file-disposition', and 'file-date'
  attributes further describing the file to be transferred.  The 'file-
  disposition' attribute provides a presentation suggestion (for
  example: the file sender would like the file receiver to render the
  file or not).  The three date attributes provide the answerer with an
  indication of the age of the file.  The file sender MAY also add a
  'file-range' attribute indicating the start and stop offsets of the
  file.



Garcia-Martin, et al.       Standards Track                    [Page 17]

RFC 5547           SDP Offer/Answer for File Transfer           May 2009


  When the file sender receives the SDP answer, if the port number of
  the answer for a file request is non-zero, the file sender starts the
  transfer of the file according to the negotiated parameters in SDP.

8.2.2.  The Offerer Is a File Receiver

  In a pull operation, the file receiver creates the SDP offer and
  sends it to the file sender.  The file receiver MUST include a 'file-
  selector' attribute and MUST include, at least, one of the selectors
  defined for such attribute (i.e., 'name', 'type', 'size', or 'hash').
  In many cases, if the hash of the file is known, that is enough to
  identify the file; therefore, the offerer can include only a 'hash'
  selector.  However, particularly in cases where the hash of the file
  is unknown, the file name, size, and type can provide a description
  of the file to be fetched.  If the file receiver wishes to start a
  new file transfer, it MUST add a 'file-transfer-id' attribute
  containing a new globally unique random value.  The file receiver MAY
  also add a 'file-range' attribute indicating the start and stop
  offsets of the file.  There is no need for the file receiver to
  include further file attributes in the SDP offer; thus, it is
  RECOMMENDED that SDP offerers do not include any other file attribute
  defined by this specification (other than the mandatory ones).
  Additionally, the file receiver MUST add a session or media
  'recvonly' attribute in the SDP offer.  Then, the file receiver sends
  the SDP offer to the file sender.

  When the file receiver receives the SDP answer, if the port number of
  the answer for a file request is non-zero, then the file receiver
  should receive the file using the protocol indicated in the "m="
  line.  If the SDP answer contains a supported hashing algorithm in
  the 'hash' selectors of the 'file-selector' attribute, then the file
  receiver SHOULD compute the hash of the file after its reception and
  check it against the hash received in the answer.  In case the
  computed hash does not match the one contained in the SDP answer, the
  file receiver SHOULD consider that the file transfer failed and
  SHOULD inform the user.  Similarly, the file receiver SHOULD also
  verify that the other selectors declared in the SDP match the file
  properties, otherwise, the file receiver SHOULD consider that the
  file transfer failed and SHOULD inform the user.

8.2.3.  SDP Offer for Several Files

  An offerer that wishes to send or receive more than one file
  generates an "m=" line per file along with the file attributes
  described in this specification.  This way, the answerer can reject
  individual files by setting the port number of their associated "m="
  lines to zero, as per regular SDP [RFC4566] procedures.  Similarly,
  the answerer can accept each individual file separately by setting



Garcia-Martin, et al.       Standards Track                    [Page 18]

RFC 5547           SDP Offer/Answer for File Transfer           May 2009


  the port number of their associated "m=" lines to non-zero value.
  Each file has its own file transfer identifier, which uniquely
  identifies each file transfer.

  Using an "m=" line per file implies that different files are
  transferred using different MSRP sessions.  However, all those MSRP
  sessions can be set up to run over a single TCP connection, as
  described in Section 8.1 of RFC 4975 [RFC4975].  The same TCP
  connection can also be reused for sequential file transfers.

8.3.  Answerer's Behavior

  If the answerer wishes to reject a file offered by the offerer, it
  sets the port number of the "m=" line associated with the file to
  zero, as per regular SDP [RFC4566] procedures.  The rejected answer
  MUST contained a 'file-selector' and 'file-transfer-id' attributes
  whose values mirror the corresponding values of the SDP offer.

  If the answerer decides to accept the file, it proceeds as per
  regular MSRP [RFC4975] and SDP [RFC4566] procedures.

8.3.1.  The Answerer Is a File Receiver

  In a push operation, the SDP answerer is the file receiver.  When the
  file receiver gets the SDP offer, it first examines the port number.
  If the port number is set to zero, the file transfer operation is
  closed, and no more data is expected over the media stream.  Then, if
  the port number is different than zero, the file receiver inspects
  the 'file-transfer-id' attribute.  If the value of the 'file-
  transfer-id' attribute has been previously used, then the existing
  session remains without changes; perhaps the file transfer is still
  in progress, or perhaps it has concluded, but there are no changes
  with respect to the current status.  In any case, independently of
  the port number, the SDP answerer creates a regular SDP answer and
  sends it to the offerer.

  If the port number is different than zero and the SDP offer contains
  a new 'file-transfer-id' attribute, then it is signaling a request
  for a new file transfer.  The SDP answerer extracts the attributes
  and parameters that describe the file and typically requests
  permission from the user to accept or reject the reception of the
  file.  If the file transfer operation is accepted, the file receiver
  MUST create an SDP answer according to the procedures specified in
  RFC 3264 [RFC3264].  If the offer contains 'name', 'type', or 'size'
  selectors in the 'file-selector' attribute, the answerer MUST copy
  them into the answer.  The file receiver copies the value of the
  'file-transfer-id' attribute to the SDP answer.  Then the file
  receiver MUST add a session or media 'recvonly' attribute according



Garcia-Martin, et al.       Standards Track                    [Page 19]

RFC 5547           SDP Offer/Answer for File Transfer           May 2009


  to the procedures specified in RFC 3264 [RFC3264].  The file receiver
  MUST NOT include 'file-icon', 'file-disposition', or 'file-date'
  attributes in the SDP answer.

  The file receiver can use the hash to find out if a local file with
  the same hash is already available, in which case, this could imply
  the reception of a duplicated file.  It is up to the answerer to
  determine whether or not the file transfer is accepted in case of a
  duplicated file.

  If the SDP offer contains a 'file-range' attribute and the file
  receiver accepts to receive the range of octets declared in there,
  the file receiver MUST include a 'file-range' attribute in the SDP
  answer with the same range of values.  If the file receiver does not
  accept the reception of that range of octets, it SHOULD reject the
  transfer of the file.

  When the file transfer operation is complete, the file receiver
  computes the hash of the file and SHOULD verify that it matches the
  hash declared in the SDP.  If they do not match, the file receiver
  SHOULD consider that the file transfer failed and SHOULD inform the
  user.  Similarly, the file receiver SHOULD also verify that the other
  selectors declared in the SDP match the file properties; otherwise,
  the file receiver SHOULD consider that the file transfer failed and
  SHOULD inform the user.

8.3.2.  The Answerer Is a File Sender

  In a pull operation the answerer is the file sender.  In this case,
  the SDP answerer MUST first inspect the value of the
  'file-transfer-id' attribute.  If it has not been previously used
  throughout the session, then acceptance of the file MUST provoke the
  transfer of the file over the negotiated protocol.  However, if the
  value has been previously used by another file transfer operation
  within the session, then the file sender MUST NOT alert the user and
  MUST NOT start a new transfer of the file.  No matter whether or not
  an actual file transfer is initiated, the file sender MUST create a
  proper SDP answer that contains the 'file-transfer-id' attribute with
  the same value received in the SDP offer, and then it MUST continue
  processing the SDP answer.

  The file sender MUST always create an SDP answer according to the SDP
  offer/answer procedures specified in RFC 3264 [RFC3264].  The file
  sender inspects the file selector of the received SDP offer, which is
  encoded in the 'file-selector' media attribute line.  Then the file
  sender applies the file selector, which implies selecting those files
  that match one by one with the 'name', 'type', 'size', and 'hash'
  selectors of the 'file-selector' attribute line (if they are



Garcia-Martin, et al.       Standards Track                    [Page 20]

RFC 5547           SDP Offer/Answer for File Transfer           May 2009


  present).  The file selector identifies zero or more candidate files
  to be sent.  If the file selector is unable to identify any file,
  then the answerer MUST reject the MSRP stream for file transfer by
  setting the port number to zero, and then the answerer SHOULD also
  reject the SDP as per procedures in RFC 3264 [RFC3264], if this is
  the only stream described in the SDP offer.

  If the file selector points to a single file and the file sender
  decides to accept the file transfer, the file sender MUST create an
  SDP answer that contains a 'sendonly' attribute, according to the
  procedures described in RFC 3264 [RFC3264].  The file sender SHOULD
  add a 'hash' selector in the answer with the locally computed SHA-1
  hash over the complete file.  If a hash value computed by the file
  sender differs from that specified by the file receiver, the file
  sender can either send the file without that hash value or reject the
  request by setting the port in the media stream to zero.  The file
  sender MAY also include a 'type' selector in the 'file-selector'
  attribute line of the SDP answer.  The answerer MAY also include
  'file-icon' and 'file-disposition' attributes to further describe the
  file.  Although the answerer MAY also include a 'name' and 'size'
  selectors in the 'file-selector' attribute, and a 'file-date'
  attribute, it is RECOMMENDED not to include them in the SDP answer if
  the actual file transfer protocol (e.g., MSRP [RFC4975]) can
  accommodate a Content-Disposition header field [RFC2183] with the
  equivalent parameters.

     The whole idea of adding file descriptors to SDP is to provide a
     mechanism where a file transfer can be accepted prior to its
     start.  Adding any SDP attributes that are otherwise signaled
     later in the file transfer protocol would just duplicate the
     information, but will not provide any information to the offerer
     to accept or reject the file transfer (note that the offerer is
     requesting a file).

  Last, if the file selector points to multiple candidate files, the
  answerer MAY use some local policy, e.g., consulting the user, to
  choose one of them to be defined in the SDP answer.  If that choice
  cannot be done, the answerer SHOULD reject the MSRP media stream for
  file transfer (by setting the port number to zero).

     If the need arises, future specifications can provide a suitable
     mechanism that allows to either select multiple files or, e.g.,
     resolve ambiguities by returning a list of files that match the
     file selector.

  If the SDP offer contains a 'file-range' attribute and the file
  sender accepts to send the range of octets declared in there, the
  file sender MUST include a 'file-range' attribute in the SDP answer



Garcia-Martin, et al.       Standards Track                    [Page 21]

RFC 5547           SDP Offer/Answer for File Transfer           May 2009


  with the same range of values.  If the file sender does not accept
  sending that range of octets, it SHOULD reject the transfer of the
  file.

8.4.  Aborting an Ongoing File Transfer Operation

  Either the file sender or the file receiver can abort an ongoing file
  transfer at any time.  Unless otherwise noted, the entity that aborts
  an ongoing file transfer operation MUST follow the procedures at the
  media level (e.g., MSRP) and at the signaling level (SDP offer/
  answer), as described below.

  Assume the scenario depicted in Figure 4 where a file sender wishes
  to abort an ongoing file transfer without initiating an alternative
  file transfer.  Assume that an ongoing MSRP SEND request is being
  transmitted.  The file sender aborts the MSRP message by including
  the '#' character in the continuation field of the end-line of a SEND
  request, according to the MSRP procedures (see Section 7.1 of RFC
  4975 [RFC4975]).  Since a file is transmitted as one MSRP message,
  aborting the MSRP message effectively aborts the file transfer.  The
  file receiver acknowledges the MSRP SEND request with a 200 response.
  Then the file sender SHOULD close the MSRP session by creating a new
  SDP offer that sets the port number to zero in the related "m=" line
  that describes the file transfer (see Section 8.2 of RFC 3264
  [RFC3264]).  This SDP offer MUST conform with the requirements of
  Section 8.2.1.  The 'file-transfer-id' attribute MUST be the same
  attribute that identifies the ongoing transfer.  Then the file sender
  sends this SDP offer to the file receiver.

     Rather than close the MSRP session by setting the port number to
     zero in the related "m=" line, the file sender could also tear
     down the whole session, e.g., by sending a SIP BYE request.

  Note that it is the responsibility of the file sender to tear down
  the MSRP session.  Implementations should be prepared for
  misbehaviors and implement measures to avoid hang states.  For
  example, upon expiration of a timer the file receiver can close the
  aborted MSRP session by using regular MSRP procedures.

  A file receiver that receives the above SDP offer creates an SDP
  answer according to the procedures of the SDP offer/answer (RFC 3264
  [RFC3264]).  This SDP answer MUST conform with the requirements of
  Section 8.3.1.  Then the file receiver sends this SDP answer to the
  file sender.







Garcia-Martin, et al.       Standards Track                    [Page 22]

RFC 5547           SDP Offer/Answer for File Transfer           May 2009


                       File sender            File receiver
                           |                        |
                           |\                       |
                           | \                      |
                           |  \                     |
                           |   \                    |
                           |    \                   |
                           |     \                  |
                    abort->|      \  MSRP SEND (#)  |
                           |       +--------------->|
                           | MSRP 200               |
                           |<-----------------------|
                           | re-INVITE (SDP offer)  |
                           |----------------------->|
                           | SIP 200 OK (SDP answer)|
                           |<-----------------------|
                           | SIP ACK                |
                           |----------------------->|
                           |                        |

          Figure 4: File sender aborts an ongoing file transfer

  When the file receiver wants to abort the file transfer, there are
  two possible scenarios, depending on the value of the Failure-Report
  header in the ongoing MSRP SEND request.  Assume now the scenario
  depicted in Figure 5 where the MSRP SEND request includes a Failure-
  Report header set to a value different than "no".  When the file
  receiver wishes to abort the ongoing file transfer, the file receiver
  generates an MSRP 413 response to the current MSRP SEND request (see
  Section 10.5 of RFC 4975 [RFC4975]).  Then the file receiver MUST
  close the MSRP session by generating a new SDP offer that sets the
  port number to zero in the related "m=" line that describes the file
  transfer (see Section 8.2 of RFC 3264 [RFC3264]).  This SDP offer
  MUST conform with the requirements expressed in Section 8.2.2.  The
  'file-transfer-id' attribute MUST be the same attribute that
  identifies the ongoing transfer.  Then the file receiver sends this
  SDP offer to the file sender.














Garcia-Martin, et al.       Standards Track                    [Page 23]

RFC 5547           SDP Offer/Answer for File Transfer           May 2009


                    File sender            File receiver
                        |                        |
                        |\                       |
                        | \  MSRP SEND           |
                        |  \ Failure-Report: yes |
                        |   \                    |
                        |    \                   |
                        |     \                  |
                        |      \                 |
                        |       \                |
                        |        \               |
                        | MSRP 413               |<-abort
                        |<-----------------------|
                        |          \   (#)       |
                        |           +----------->|
                        | re-INVITE (SDP offer)  |
                        |<-----------------------|
                        | SIP 200 OK (SDP answer)|
                        |----------------------->|
                        | SIP ACK                |
                        |<-----------------------|
                        |                        |

   Figure 5: File receiver aborts an ongoing file transfer.  Failure-
            Report set to a value different than "no" in MSRP

  In another scenario, depicted in Figure 6, an ongoing file transfer
  is taking place, where the MSRP SEND request contains a Failure-
  Report header set to the value "no".  When the file receiver wants to
  abort the ongoing transfer, it MUST close the MSRP session by
  generating a new SDP offer that sets the port number to zero in the
  related "m=" line that describes the file transfer (see Section 8.2
  of RFC 3264 [RFC3264]).  This SDP offer MUST conform with the
  requirements expressed in Section 8.2.2.  The 'file-transfer-id'
  attribute MUST be the same attribute that identifies the ongoing
  transfer.  Then the file receiver sends this SDP offer to the file
  sender.














Garcia-Martin, et al.       Standards Track                    [Page 24]

RFC 5547           SDP Offer/Answer for File Transfer           May 2009


                    File sender            File receiver
                        |                        |
                        |\                       |
                        | \  MSRP SEND           |
                        |  \ Failure-Report: no  |
                        |   \                    |
                        |    \                   |
                        |     \                  |
                        |      \                 |
                        |       \                |
                        |        \               |
                        | re-INVITE (SDP offer)  |<-abort
                        |<-----------------------|
                        |          \   (#)       |
                        |           +----------->|
                        | MSRP 200               |
                        |<-----------------------|
                        | SIP 200 OK (SDP answer)|
                        |----------------------->|
                        | SIP ACK                |
                        |<-----------------------|
                        |                        |

   Figure 6: File receiver aborts an ongoing file transfer.  Failure-
                       Report set to "no" in MSRP

  A file sender that receives an SDP offer setting the port number to
  zero in the related "m=" line for file transfer, first, if an ongoing
  MSRP SEND request is being transmitted, aborts the MSRP message by
  including the '#' character in the continuation field of the end-line
  of a SEND request, according to the MSRP procedures (see Section 7.1
  of RFC 4975 [RFC4975]).  Since a file is transmitted as one MSRP
  message, aborting the MSRP message effectively aborts the file
  transfer.  Then the file sender creates an SDP answer according to
  the procedures of the SDP offer/answer (RFC 3264 [RFC3264]).  This
  SDP answer MUST conform with the requirements of Section 8.3.2.  Then
  the file sender sends this SDP answer to the file receiver.

8.5.  Indicating File Transfer Offer/Answer Capability

  The SDP offer/answer model [RFC3264] provides provisions for
  indicating a capability to another endpoint (see Section 9 of RFC
  3264 [RFC3264]).  The mechanism assumes a high-level protocol, such
  as SIP [RFC3261], that provides a capability query (such as a SIP
  OPTIONS request).  RFC 3264 [RFC3264] indicates how to build the SDP
  that is included in the response to such capability query.  As such,
  RFC 3264 indicates that an endpoint builds an SDP body that contains




Garcia-Martin, et al.       Standards Track                    [Page 25]

RFC 5547           SDP Offer/Answer for File Transfer           May 2009


  an "m=" line containing the media type (message, for MSRP).  An
  endpoint that implements the procedures specified in this document
  SHOULD also add a 'file-selector' media attribute for the "m=message"
  line.  The 'file-selector' media attribute MUST be empty, i.e., it
  MUST NOT contain any selector.  The endpoint MUST NOT add any of the
  other file attributes defined in this specification.

8.6.  Reusage of Existing "m=" Lines in SDP

  The SDP offer/answer model [RFC3264] provides rules that allow SDP
  offerers and answerers to modify an existing media line, i.e., reuse
  an existing media line with different attributes.  The same is also
  possible when SDP signals a file transfer operation according to the
  rules of this memo.  Therefore, the procedures defined in RFC 3264
  [RFC3264], in particular those defined in Section 8.3, MUST apply for
  file transfer operations.  An endpoint that wants to reuse an
  existing "m=" line to start the file transfer of another file creates
  a different 'file-selector' attribute and selects a new globally
  unique random value of the 'file-transfer-id' attribute.

  If the file offerer resends an SDP offer with a port different than
  zero, then the 'file-transfer-id' attribute determines whether a new
  file transfer will start or whether the file transfer does not need
  to start.  If the SDP answerer accepts the SDP, then file transfer
  starts from the indicated octet (if a 'file-range' attribute is
  present).

8.7.  MSRP Usage

  The file transfer service specified in this document uses "m=" lines
  in SDP to describe the unidirectional transfer of a file.
  Consequently, each MSRP session established following the procedures
  in Section 8.2 and Section 8.3 is only used to transfer a single
  file.  So, senders MUST only use the dedicated MSRP session to send
  the file described in the SDP offer or answer.  That is, senders MUST
  NOT send additional files over the same MSRP session.

  File transfer may be accomplished using a new multimedia session
  established for the purpose.  Alternatively, a file transfer may be
  conducted within an existing multimedia session, without regard for
  the media in use within that session.  Of particular note, file
  transfer may be done within a multimedia session containing an MSRP
  session used for regular instant messaging.  If file transfer is
  initiated within an existing multimedia session, the SDP offerer MUST
  NOT reuse an existing "m=" line that is still being used by MSRP
  (either regular MSRP for instant messaging or an ongoing file
  transfer).  Rather, it MUST add an additional "m=" line or else reuse
  an "m=" line that is no longer being used.



Garcia-Martin, et al.       Standards Track                    [Page 26]

RFC 5547           SDP Offer/Answer for File Transfer           May 2009


  Additionally, implementations according to this specification MUST
  include a single file in a single MSRP message.  Notice that the MSRP
  specification defines "MSRP message" as a complete unit of MIME or
  text content, which can be split and delivered in more than one MSRP
  request; each of these portions of the complete message is called a
  "chunk".  So, it is still valid to send a file in several chunks, but
  from the MSRP point of view, all the chunks together form an MSRP
  message: the Common Presence and Instant Messaging (CPIM) message
  that wraps the file.  When chunking is used, it should be noticed
  that MSRP does not require to wait for a 200-class response for a
  chunk before sending the following one.  Therefore, it is valid to
  send pipelined MSRP SEND requests containing chunks of the same MSRP
  message (the file).  Section 9.1 contains an example of a file
  transfer using pipelined MSRP requests.

  The MSRP specification [RFC4975] defines a 'max-size' SDP attribute.
  This attribute specifies the maximum number of octets of an MSRP
  message that the creator of the SDP is willing to receive (notice
  once more the definition of "MSRP message").  File receivers MAY add
  a 'max-size' attribute to the MSRP "m=" line that specifies the file,
  indicating the maximum number of octets of an MSRP message.  File
  senders MUST NOT exceed the 'max-size' limit for any message sent in
  the resulting session.

  In the absence of a 'file-range' attribute in the SDP, the MSRP file
  transfer MUST start with the first octet of the file and end with the
  last octet (i.e., the whole file is transferred).  If a 'file-range'
  attribute is present in SDP, the file sender application MUST extract
  the indicated range of octets from the file (start and stop offset
  octets, both inclusive).  Then the file sender application MAY wrap
  those octets in an appropriate wrapper.  MSRP mandates
  implementations to implement the message/cpim wrapper [RFC3862].
  Usage of a wrapper is negotiated in the SDP (see Section 8.6 in RFC
  4975 [RFC4975]).  Last, the file sender application delivers the
  content (e.g., the message/cpim body) to MSRP for transportation.
  MSRP will consider the delivered content as a whole message, and will
  start numbering bytes with the number 1.

  Note that the default content disposition of MSRP bodies is 'render'.
  When MSRP is used to transfer files, the MSRP Content-Disposition
  header can also take the value 'attachment' as indicated in
  Section 7.

  Once the file transfer is completed, the file sender SHOULD close the
  MSRP session and MUST behave according to the MSRP [RFC4975]
  procedures with respect to closing MSRP sessions.  Note that MSRP





Garcia-Martin, et al.       Standards Track                    [Page 27]

RFC 5547           SDP Offer/Answer for File Transfer           May 2009


  session management is not related to TCP connection management.  As a
  matter of fact, MSRP allows multiple MSRP sessions to share the same
  TCP connection.

8.8.  Considerations about the 'file-icon' Attribute

  This specification allows a file sender to include a small preview of
  an image file: an icon.  A 'file-icon' attribute contains a
  Content-ID (CID) URL [RFC2392] pointing to an additional body that
  contains the actual icon.  Since the icon is sent as a separate body
  along the SDP body, the file sender MUST wrap the SDP body and the
  icon bodies in a MIME multipart/related body.  Therefore,
  implementations according to this specification MUST implement the
  multipart/related MIME type [RFC2387].  When creating a multipart/
  related MIME wrapper, the SDP body MUST be the root body, which
  according to RFC 2387 [RFC2387] is identified as the first body in
  the multipart/related MIME wrapper or explicitly identified by the
  'start' parameter.  According to RFC 2387 [RFC2387], the 'type'
  parameter MUST be present and point to the root body, i.e., the SDP
  body.

  Assume that an endpoint behaving according to this specification
  tries to send a file to a remote endpoint that neither implements
  this specification nor implements multipart MIME bodies.  The file
  sender sends an SDP offer that contains a multipart/related MIME body
  that includes an SDP body part and an icon body part.  The file
  receiver, not supporting multipart MIME types, will reject the SDP
  offer via a higher protocol mechanism (e.g., SIP).  In this case, it
  is RECOMMENDED that the file sender removes the icon body part,
  creates a single SDP body (i.e., without multipart MIME), and resends
  the SDP offer.  This provides some backwards compatibility with file
  receives that do not implement this specification and increases the
  chances of getting the SDP accepted at the file receiver.

  Since the icon is sent as part of the signaling, it is RECOMMENDED to
  keep the size of icons restricted to the minimum number of octets
  that provide significance.

9.  Examples

9.1.  Offerer Sends a File to the Answerer

  This section shows an example flow for a file transfer scenario.  The
  example assumes that SIP [RFC3261] is used to transport the SDP
  offer/answer exchange, although the SIP details are briefly shown for
  the sake of brevity.





Garcia-Martin, et al.       Standards Track                    [Page 28]

RFC 5547           SDP Offer/Answer for File Transfer           May 2009


  Alice, the SDP offerer, wishes to send an image file to Bob (the
  answerer).  Alice's User Agent Client (UAC) creates a unidirectional
  SDP offer that contains the description of the file that she wants to
  send to Bob's User Agent Server (UAS).  The description also includes
  an icon representing the contents of the file to be transferred.  The
  sequence flow is shown in Figure 7.

                  Alice's UAC                 Bob's UAS
                        |                        |
                        |(1) (SIP) INVITE        |
                        |----------------------->|
                        |(2) (SIP) 200 OK        |
                        |<-----------------------|
                        |(3) (SIP) ACK           |
                        |----------------------->|
                        |                        |
                        |(4) (MSRP) SEND (chunk) |
                        |----------------------->|
                        |(5) (MSRP) SEND (chunk) |
                        |----------------------->|
                        |(6) (MSRP) 200 OK       |
                        |<-----------------------|
                        |(7) (MSRP) 200 OK       |
                        |<-----------------------|
                        |                        |
                        |(8) (SIP) BYE           |
                        |----------------------->|
                        |(9) (SIP) 200 OK        |
                        |<-----------------------|
                        |                        |
                        |                        |

   Figure 7: Flow diagram of an offerer sending a file to an answerer

  F1: Alice constructs an SDP description of the file to be sent and
  attaches it to a SIP INVITE request addressed to Bob.















Garcia-Martin, et al.       Standards Track                    [Page 29]

RFC 5547           SDP Offer/Answer for File Transfer           May 2009


  INVITE sip:[email protected] SIP/2.0
  To: Bob <sip:[email protected]>
  From: Alice <sip:[email protected]>;tag=1928301774
  Call-ID: a84b4c76e66710
  CSeq: 1 INVITE
  Max-Forwards: 70
  Date: Sun, 21 May 2006 13:02:03 GMT
  Contact: <sip:[email protected]>
  Content-Type: multipart/related; type="application/sdp";
                boundary="boundary71"
  Content-Length: [length]

  --boundary71
  Content-Type: application/sdp
  Content-Length: [length of SDP]

  v=0
  o=alice 2890844526 2890844526 IN IP4 alicepc.example.com
  s=
  c=IN IP4 alicepc.example.com
  t=0 0
  m=message 7654 TCP/MSRP *
  i=This is my latest picture
  a=sendonly
  a=accept-types:message/cpim
  a=accept-wrapped-types:*
  a=path:msrp://alicepc.example.com:7654/jshA7we;tcp
  a=file-selector:name:"My cool picture.jpg" type:image/jpeg
    size:4092 hash:sha-1:
    72:24:5F:E8:65:3D:DA:F3:71:36:2F:86:D4:71:91:3E:E4:A2:CE:2E
  a=file-transfer-id:Q6LMoGymJdh0IKIgD6wD0jkcfgva4xvE
  a=file-disposition:render
  a=file-date:creation:"Mon, 15 May 2006 15:01:31 +0300"
  a=file-icon:cid:[email protected]

  --boundary71
  Content-Type: image/jpeg
  Content-Transfer-Encoding: binary
  Content-ID: <[email protected]>
  Content-Length: [length of image]
  Content-Disposition: icon

  [...small preview icon of the file...]

  --boundary71--

   Figure 8: INVITE request containing an SDP offer for file transfer




Garcia-Martin, et al.       Standards Track                    [Page 30]

RFC 5547           SDP Offer/Answer for File Transfer           May 2009


     NOTE: The Content-Type header field and the 'file-selector'
     attribute in the above figure are split in several lines for
     formatting purposes.  Real implementations will encode it in a
     single line.

  From now on we omit the SIP details for the sake of brevity.

  F2: Bob receives the INVITE request, inspects the SDP offer and
  extracts the icon body, checks the creation date and file size, and
  decides to accept the file transfer.  So Bob creates the following
  SDP answer:

  v=0
  o=bob 2890844656 2890844656 IN IP4 bobpc.example.com
  s=
  c=IN IP4 bobpc.example.com
  t=0 0
  m=message 8888 TCP/MSRP *
  a=recvonly
  a=accept-types:message/cpim
  a=accept-wrapped-types:*
  a=path:msrp://bobpc.example.com:8888/9di4ea;tcp
  a=file-selector:name:"My cool picture.jpg" type:image/jpeg
    size:4092 hash:sha-1:
    72:24:5F:E8:65:3D:DA:F3:71:36:2F:86:D4:71:91:3E:E4:A2:CE:2E
  a=file-transfer-id:Q6LMoGymJdh0IKIgD6wD0jkcfgva4xvE

     Figure 9: SDP answer accepting the SDP offer for file transfer

     NOTE: The 'file-selector' attribute in the above figure is split
     in three lines for formatting purposes.  Real implementations will
     encode it in a single line.

  F4: Alice opens a TCP connection to Bob and creates an MSRP SEND
  request.  This SEND request contains the first chunk of the file.
















Garcia-Martin, et al.       Standards Track                    [Page 31]

RFC 5547           SDP Offer/Answer for File Transfer           May 2009


  MSRP d93kswow SEND
  To-Path: msrp://bobpc.example.com:8888/9di4ea;tcp
  From-Path: msrp://alicepc.example.com:7654/iau39;tcp
  Message-ID: 12339sdqwer
  Byte-Range: 1-2048/4385
  Content-Type: message/cpim

  To: Bob <sip:[email protected]>
  From: Alice <sip:[email protected]>
  DateTime: 2006-05-15T15:02:31-03:00
  Content-Disposition: render; filename="My cool picture.jpg";
                     creation-date="Mon, 15 May 2006 15:01:31 +0300";
                     size=4092
  Content-Type: image/jpeg

  ... first set of bytes of the JPEG image ...
  -------d93kswow+

  Figure 10: MSRP SEND request containing the first chunk of actual
  file

  F5: Alice sends the second and last chunk.  Note that MSRP allows to
  send pipelined chunks, so there is no need to wait for the 200 (OK)
  response from the previous chunk.

  MSRP op2nc9a SEND
  To-Path: msrp://bobpc.example.com:8888/9di4ea;tcp
  From-Path: msrp://alicepc.example.com:7654/iau39;tcp
  Message-ID: 12339sdqwer
  Byte-Range: 2049-4385/4385
  Content-Type: message/cpim

  ... second set of bytes of the JPEG image ...
  -------op2nc9a$

  Figure 11: MSRP SEND request containing the second chunk of actual
  file

  F6: Bob acknowledges the reception of the first chunk.

  MSRP d93kswow 200 OK
  To-Path: msrp://alicepc.example.com:7654/iau39;tcp
  From-Path: msrp://bobpc.example.com:8888/9di4ea;tcp
  Byte-Range: 1-2048/4385
  -------d93kswow$

                     Figure 12: MSRP 200 OK response




Garcia-Martin, et al.       Standards Track                    [Page 32]

RFC 5547           SDP Offer/Answer for File Transfer           May 2009


  F7: Bob acknowledges the reception of the second chunk.

  MSRP op2nc9a 200 OK
  To-Path: msrp://alicepc.example.com:7654/iau39;tcp
  From-Path: msrp://bobpc.example.com:8888/9di4ea;tcp
  Byte-Range: 2049-4385/4385
  -------op2nc9a$

                     Figure 13: MSRP 200 OK response

  F8: Alice terminates the SIP session by sending a SIP BYE request.

  F9: Bob acknowledges the reception of the BYE request and sends a 200
  (OK) response.

9.2.  Offerer Requests a File from the Answerer and Second File Transfer

  In this example, Alice, the SDP offerer, first wishes to fetch a file
  from Bob, the SDP answerer.  Alice knows that Bob has a specific file
  she wants to download.  She has learned the hash of the file by some
  out-of-band mechanism.  The hash selector is enough to produce a file
  selector that points to the specific file.  So, Alice creates an SDP
  offer that contains the file descriptor.  Bob accepts the file
  transfer and sends the file to Alice.  When Alice has completely
  received Bob's file, she intends to send a new image file to Bob.
  Therefore, Alice reuses the existing SDP media line with different
  attributes and updates the description of the new file she wants to
  send to Bob's User Agent Server (UAS).  In particular, Alice creates
  a new file transfer identifier since this is a new file transfer
  operation.  Figure 14 shows the sequence flow.





















Garcia-Martin, et al.       Standards Track                    [Page 33]

RFC 5547           SDP Offer/Answer for File Transfer           May 2009


                  Alice's UAC                 Bob's UAS
                        |                        |
                        |(1) (SIP) INVITE        |
                        |----------------------->|
                        |(2) (SIP) 200 OK        |
                        |<-----------------------|
                        |(3) (SIP) ACK           |
                        |----------------------->|
                        |                        |
                        |(4) (MSRP) SEND (file)  |
                        |<-----------------------|
                        |(5) (MSRP) 200 OK       |
                        |----------------------->|
                        |                        |
                        |(6) (SIP) INVITE        |
                        |----------------------->|
                        |(7) (SIP) 200 OK        |
                        |<-----------------------|
                        |(8) (SIP) ACK           |
                        |----------------------->|
                        |                        |
                        |(9) (MSRP) SEND (file)  |
                        |----------------------->|
                        |(10) (MSRP) 200 OK      |
                        |<-----------------------|
                        |                        |
                        |(11) (SIP) BYE          |
                        |<-----------------------|
                        |(12) (SIP) 200 OK       |
                        |----------------------->|
                        |                        |
                        |                        |

    Figure 14: Flow diagram of an offerer requesting a file from the
             answerer and then sending a file to the answer

  F1: Alice constructs an SDP description of the file she wants to
  receive and attaches the SDP offer to a SIP INVITE request addressed
  to Bob.












Garcia-Martin, et al.       Standards Track                    [Page 34]

RFC 5547           SDP Offer/Answer for File Transfer           May 2009


  INVITE sip:[email protected] SIP/2.0
  To: Bob <sip:[email protected]>
  From: Alice <sip:[email protected]>;tag=1928301774
  Call-ID: a84b4c76e66710
  CSeq: 1 INVITE
  Max-Forwards: 70
  Date: Sun, 21 May 2006 13:02:03 GMT
  Contact: <sip:[email protected]>
  Content-Type: application/sdp
  Content-Length: [length of SDP]

  v=0
  o=alice 2890844526 2890844526 IN IP4 alicepc.example.com
  s=
  c=IN IP4 alicepc.example.com
  t=0 0
  m=message 7654 TCP/MSRP *
  a=recvonly
  a=accept-types:message/cpim
  a=accept-wrapped-types:*
  a=path:msrp://alicepc.example.com:7654/jshA7we;tcp
  a=file-selector:hash:sha-1:
    72:24:5F:E8:65:3D:DA:F3:71:36:2F:86:D4:71:91:3E:E4:A2:CE:2E
  a=file-transfer-id:aCQYuBRVoUPGVsFZkCK98vzcX2FXDIk2

   Figure 15: INVITE request containing an SDP offer for file transfer

     NOTE: The 'file-selector' attribute in the above figure is split
     in two lines for formatting purposes.  Real implementations will
     encode it in a single line.

  From now on we omit the SIP details for the sake of brevity.

  F2: Bob receives the INVITE request, inspects the SDP offer, computes
  the file descriptor, and finds a local file whose hash equals the one
  indicated in the SDP.  Bob accepts the file transfer and creates an
  SDP answer as follows:














Garcia-Martin, et al.       Standards Track                    [Page 35]

RFC 5547           SDP Offer/Answer for File Transfer           May 2009


  v=0
  o=bob 2890844656 2890855439 IN IP4 bobpc.example.com
  s=
  c=IN IP4 bobpc.example.com
  t=0 0
  m=message 8888 TCP/MSRP *
  a=sendonly
  a=accept-types:message/cpim
  a=accept-wrapped-types:*
  a=path:msrp://bobpc.example.com:8888/9di4ea;tcp
  a=file-selector:type:image/jpeg hash:sha-1:
    72:24:5F:E8:65:3D:DA:F3:71:36:2F:86:D4:71:91:3E:E4:A2:CE:2E
  a=file-transfer-id:aCQYuBRVoUPGVsFZkCK98vzcX2FXDIk2

     Figure 16: SDP answer accepting the SDP offer for file transfer

     NOTE: The 'file-selector' attribute in the above figure is split
     in two lines for formatting purposes.  Real implementations will
     encode it in a single line.

  F4: Alice opens a TCP connection to Bob.  Bob then creates an MSRP
  SEND request that contains the file.


  MSRP d93kswow SEND
  To-Path: msrp://alicepc.example.com:7654/jshA7we;tcp
  From-Path: msrp://bobpc.example.com:8888/9di4ea;tcp
  Message-ID: 12339sdqwer
  Byte-Range: 1-2027/2027
  Content-Type: message/cpim

  To: Bob <sip:[email protected]>
  From: Alice <sip:[email protected]>
  DateTime: 2006-05-15T15:02:31-03:00
  Content-Disposition: render; filename="My cool photo.jpg";
                 creation-date="Mon, 15 May 2006 15:01:31 +0300";
                 modification-date="Mon, 15 May 2006 16:04:53 +0300";
                 read-date="Mon, 16 May 2006 09:12:27 +0300";
                 size=1931
  Content-Type: image/jpeg

  ...binary JPEG image...
  -------d93kswow$

         Figure 17: MSRP SEND request containing the actual file

  F5: Alice acknowledges the reception of the SEND request.




Garcia-Martin, et al.       Standards Track                    [Page 36]

RFC 5547           SDP Offer/Answer for File Transfer           May 2009


  MSRP d93kswow 200 OK
  To-Path: msrp://bobpc.example.com:8888/9di4ea;tcp
  From-Path: msrp://alicepc.example.com:7654/jshA7we;tcp
  Byte-Range: 1-2027/2027
  -------d93kswow$

                     Figure 18: MSRP 200 OK response

  F6: Alice reuses the existing SDP media line inserting the
  description of the file to be sent and attaches it to a SIP re-INVITE
  request addressed to Bob.  Alice reuses the TCP port number for the
  MSRP stream, but changes the MSRP session and the 'file-transfer-id'
  value according to this specification.






































Garcia-Martin, et al.       Standards Track                    [Page 37]

RFC 5547           SDP Offer/Answer for File Transfer           May 2009


  INVITE sip:[email protected] SIP/2.0
  To: Bob <sip:[email protected]>;tag=1928323431
  From: Alice <sip:[email protected]>;tag=1928301774
  Call-ID: a84b4c76e66710
  CSeq: 2 INVITE
  Max-Forwards: 70
  Date: Sun, 21 May 2006 13:02:33 GMT
  Contact: <sip:[email protected]>
  Content-Type: multipart/related; type="application/sdp";
                boundary="boundary71"
  Content-Length: [length of multipart]

  --boundary71
  Content-Type: application/sdp
  Content-Length: [length of SDP]

  v=0
  o=alice 2890844526 2890844527 IN IP4 alicepc.example.com
  s=
  c=IN IP4 alicepc.example.com
  t=0 0
  m=message 7654 TCP/MSRP *
  i=This is my latest picture
  a=sendonly
  a=accept-types:message/cpim
  a=accept-wrapped-types:*
  a=path:msrp://alicepc.example.com:7654/iau39;tcp
  a=file-selector:name:"sunset.jpg" type:image/jpeg
    size:4096 hash:sha-1:
    58:23:1F:E8:65:3B:BC:F3:71:36:2F:86:D4:71:91:3E:E4:B1:DF:2F
  a=file-transfer-id:ZVE8MfI9mhAdZ8GyiNMzNN5dpqgzQlCO
  a=file-disposition:render
  a=file-date:creation:"Sun, 21 May 2006 13:02:15 +0300"
  a=file-icon:cid:[email protected]

  --boundary71
  Content-Type: image/jpeg
  Content-Transfer-Encoding: binary
  Content-ID: <[email protected]>
  Content-Length: [length of image]
  Content-Disposition: icon

  [..small preview icon...]

  --boundary71--

          Figure 19: Reuse of the SDP in a second file transfer




Garcia-Martin, et al.       Standards Track                    [Page 38]

RFC 5547           SDP Offer/Answer for File Transfer           May 2009


     NOTE: The Content-Type header field and the 'file-selector'
     attribute in the above figure are split in several lines for
     formatting purposes.  Real implementations will encode it in a
     single line.

  F7: Bob receives the re-INVITE request, inspects the SDP offer and
  extracts the icon body, checks the creation date and the file size,
  and decides to accept the file transfer.  So Bob creates an SDP
  answer where he reuses the same TCP port number, but changes his MSRP
  session, according to the procedures of this specification.

  v=0
  o=bob 2890844656 2890855440 IN IP4 bobpc.example.com
  s=
  c=IN IP4 bobpc.example.com
  t=0 0
  m=message 8888 TCP/MSRP *
  a=recvonly
  a=accept-types:message/cpim
  a=accept-wrapped-types:*
  a=path:msrp://bobpc.example.com:8888/eh10dsk;tcp
  a=file-selector:name:"sunset.jpg" type:image/jpeg
    size:4096 hash:sha-1:
    58:23:1F:E8:65:3B:BC:F3:71:36:2F:86:D4:71:91:3E:E4:B1:DF:2F
  a=file-transfer-id:ZVE8MfI9mhAdZ8GyiNMzNN5dpqgzQlCO
  a=file-disposition:render

     Figure 20: SDP answer accepting the SDP offer for file transfer

     NOTE: The 'file-selector' attribute in the above figure is split
     in three lines for formatting purposes.  Real implementations will
     encode it in a single line.

  F9: If a TCP connection towards Bob is already open, Alice reuses
  that TCP connection to send an MSRP SEND request that contains the
  file.















Garcia-Martin, et al.       Standards Track                    [Page 39]

RFC 5547           SDP Offer/Answer for File Transfer           May 2009


  MSRP d95ksxox SEND
  To-Path: msrp://bobpc.example.com:8888/eh10dsk;tcp
  From-Path: msrp://alicepc.example.com:7654/iau39;tcp
  Message-ID: 13449sdqwer
  Byte-Range: 1-2027/2027
  Content-Type: message/cpim

  To: Bob <sip:[email protected]>
  From: Alice <sip:[email protected]>
  DateTime: 2006-05-21T13:02:15-03:00
  Content-Disposition: render; filename="Sunset.jpg";
                     creation-date="Sun, 21 May 2006 13:02:15 -0300";
                     size=1931
  Content-Type: image/jpeg

  ...binary JPEG image...
  -------d95ksxox+

         Figure 21: MSRP SEND request containing the actual file

  F10: Bob acknowledges the reception of the SEND request.

  MSRP d95ksxox 200 OK
  To-Path: msrp://alicepc.example.com:7654/iau39;tcp
  From-Path: msrp://bobpc.example.com:8888/eh10dsk;tcp
  Byte-Range: 1-2027/2027
  -------d95ksxox$

                     Figure 22: MSRP 200 OK response

  F11: Then Bob terminates the SIP session by sending a SIP BYE
  request.

  F12: Alice acknowledges the reception of the BYE request and sends a
  200 (OK) response.

9.3.  Example of a Capability Indication

  Alice sends an OPTIONS request to Bob (this request does not contain
  SDP).  Bob answers with a 200 (OK) response that contain the SDP
  shown in Figure 24.  The SDP indicates support for CPIM messages that
  can contain other MIME types.  The maximum MSRP message size that the
  endpoint can receive is 20000 octets.  The presence of the 'file-
  selector' attribute indicates support for the file transfer offer/
  answer mechanism.






Garcia-Martin, et al.       Standards Track                    [Page 40]

RFC 5547           SDP Offer/Answer for File Transfer           May 2009


                  Alice's UAC                 Bob's UAS
                        |                        |
                        |(1) (SIP) OPTIONS       |
                        |----------------------->|
                        |(2) (SIP) 200 OK        |
                        |          with SDP      |
                        |<-----------------------|
                        |                        |
                        |                        |

             Figure 23: Flow diagram of a capability request

  v=0
  o=bob 2890844656 2890855439 IN IP4 bobpc.example.com
  s=-
  c=IN IP4 bobpc.example.com
  t=0 0
  m=message 0 TCP/MSRP *
  a=accept-types:message/cpim
  a=accept-wrapped-types:*
  a=max-size:20000
  a=file-selector

      Figure 24: SDP of the 200 (OK) response to an OPTIONS request

10.  Security Considerations

  The SDP attributes defined in this specification identify a file to
  be transferred between two endpoints.  An endpoint can offer to send
  the file to the other endpoint or request to receive the file from
  the other endpoint.  In the former case, an attacker modifying those
  SDP attributes could cheat the receiver making it think that the file
  to be transferred was a different one.  In the latter case, the
  attacker could make the sender send a different file than the one
  requested by the receiver.  Consequently, it is RECOMMENDED that
  integrity protection be applied to the SDP session descriptions
  carrying the attributes specified in this specification.
  Additionally, it is RECOMMENDED that senders verify the properties of
  the file against the selectors that describe it.

  The descriptions of the files being transferred between endpoints may
  reveal information the endpoints may consider confidential.
  Therefore, it is RECOMMENDED that SDP session descriptions carrying
  the attributes specified in this specification are encrypted.

  TLS and S/MIME are the natural choices to provide offer/answer
  exchanges with integrity protection and confidentiality.




Garcia-Martin, et al.       Standards Track                    [Page 41]

RFC 5547           SDP Offer/Answer for File Transfer           May 2009


  When an SDP offer contains the description of a file to be sent or
  received, the SDP answerer MUST first authenticate the SDP offerer
  and then it MUST authorize the file transfer operation, typically
  according to a local policy.  Typically, these functions are
  integrated in the high-level protocol that carries SDP (e.g., SIP),
  and in the file transfer protocol (e.g., MSRP).  If SIP [RFC3261] and
  MSRP [RFC4975] are used, the standard mechanisms for user
  authentication and authorization are sufficient.

  It is possible that a malicious or misbehaving implementation tries
  to exhaust the resources of the remote endpoint, e.g., the internal
  memory or the file system, by sending very large files.  To protect
  from this attack, an SDP answer SHOULD first verify the identity of
  the SDP offerer, and perhaps only accept file transfers from trusted
  sources.  Mechanisms to verify the identity of the file sender depend
  on the high-level protocol that carries the SDP, for example, SIP
  [RFC3261] and MSRP [RFC4975].

  It is also RECOMMENDED that implementations take measures to avoid
  attacks on resource exhaustion, for example, by limiting the size of
  received files, verifying that there is enough space in the file
  system to store the file prior to its reception, or limiting the
  number of simultaneous file transfers.

  File receivers MUST also sanitize all input, such as the local file
  name, prior to making calls to the local file system to store a file.
  This is to prevent the existence of meaningful characters to the
  local operating system that could damage it.

  Once a file has been transferred, the file receiver must take care of
  it.  Typically, file transfer is a commonly used mechanism for
  transmitting computer virus, spyware, and other types of malware.
  File receivers should apply all possible security technologies (e.g.,
  anti-virus, anti-spyware) to mitigate the risk of damage at their
  host.

11.  IANA Considerations

  IANA has registered a number of SDP attributes according to the
  following.

11.1.  Registration of New SDP Attributes

  IANA has registered a number of media-level-only attributes in the
  Session Description Protocol Parameters registry [IANA].  The
  registration data, according to RFC 4566 [RFC4566], follows.





Garcia-Martin, et al.       Standards Track                    [Page 42]

RFC 5547           SDP Offer/Answer for File Transfer           May 2009


11.1.1.  Registration of the file-selector Attribute

  Contact:  Miguel Garcia <[email protected]>

  Phone:  +34 91 339 1000

  Attribute name:  file-selector

  Long-form attribute name:  File Selector

  Type of attribute:  media level only
     This attribute is subject to the charset attribute

  Description:  This attribute unambiguously identifies a file by
     indicating a combination of the 4-tuple composed of the name,
     size, type, and hash of the file.

  Specification:  RFC 5547

11.1.2.  Registration of the file-transfer-id Attribute

  Contact:  Miguel Garcia <[email protected]>

  Phone:  +34 91 339 1000

  Attribute name:  file-transfer-id

  Long-form attribute name:  File Transfer Identifier

  Type of attribute:  media level only
     This attribute is subject to the charset attribute

  Description:  This attribute contains a unique identifier of the file
     transfer operation within the session.

  Specification:  RFC 5547

11.1.3.  Registration of the file-disposition Attribute

  Contact:  Miguel Garcia <[email protected]>

  Phone:  +34 91 339 1000

  Attribute name:  file-disposition

  Long-form attribute name:  File Disposition

  Type of attribute:  media level only



Garcia-Martin, et al.       Standards Track                    [Page 43]

RFC 5547           SDP Offer/Answer for File Transfer           May 2009


     This attribute is not subject to the charset attribute

  Description:  This attribute provides a suggestion to the other
     endpoint about the intended disposition of the file.

  Specification:  RFC 5547

11.1.4.  Registration of the file-date Attribute

  Contact:  Miguel Garcia <[email protected]>

  Phone:  +34 91 339 1000

  Attribute name:  file-date

  Long-form attribute name:

  Type of attribute:  media level only
     This attribute is not subject to the charset attribute

  Description:  This attribute indicates the dates on which the file
     was created, modified, or last read.

  Specification:  RFC 5547

11.1.5.  Registration of the file-icon Attribute

  Contact:  Miguel Garcia <[email protected]>

  Phone:  +34 91 339 1000

  Attribute name:  file-icon

  Long-form attribute name:  File Icon

  Type of attribute:  media level only
     This attribute is not subject to the charset attribute

  Description:  For image files, this attribute contains a pointer to a
     body that includes a small preview icon representing the contents
     of the file to be transferred.

  Specification:  RFC 5547








Garcia-Martin, et al.       Standards Track                    [Page 44]

RFC 5547           SDP Offer/Answer for File Transfer           May 2009


11.1.6.  Registration of the file-range Attribute

  Contact:  Miguel Garcia <[email protected]>

  Phone:  +34 91 339 1000

  Attribute name:  file-range

  Long-form attribute name:  File Range

  Type of attribute:  media level only
     This attribute is not subject to the charset attribute

  Description:  This attribute contains the range of transferred octets
     of the file.

  Specification:  RFC 5547

12.  Acknowledgments

  The authors would like to thank Mats Stille, Nancy Greene, Adamu
  Haruna, and Arto Leppisaari for discussing initial concepts described
  in this memo.  Thanks to Pekka Kuure for reviewing initial versions
  of this document and providing helpful comments.  Joerg Ott, Jiwey
  Wang, Amitkumar Goel, Sudha Vs, Dan Wing, Juuso Lehtinen, Remi Denis-
  Courmont, Colin Perkins, Sudhakar An, Peter Saint-Andre, Jonathan
  Rosenberg, Eric Rescorla, Vikram Chhibber, Ben Campbell, Richard
  Barnes, and Chris Newman discussed and provided comments and
  improvements to this document.

13.  References

13.1.  Normative References

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

  [RFC2045]    Freed, N. and N. Borenstein, "Multipurpose Internet Mail
               Extensions (MIME) Part One: Format of Internet Message
               Bodies", RFC 2045, November 1996.

  [RFC2183]    Troost, R., Dorner, S., and K. Moore, "Communicating
               Presentation Information in Internet Messages: The
               Content-Disposition Header Field", RFC 2183,
               August 1997.






Garcia-Martin, et al.       Standards Track                    [Page 45]

RFC 5547           SDP Offer/Answer for File Transfer           May 2009


  [RFC2387]    Levinson, E., "The MIME Multipart/Related Content-type",
               RFC 2387, August 1998.

  [RFC2392]    Levinson, E., "Content-ID and Message-ID Uniform
               Resource Locators", RFC 2392, August 1998.

  [RFC3174]    Eastlake, D. and P. Jones, "US Secure Hash Algorithm 1
               (SHA1)", RFC 3174, September 2001.

  [RFC3264]    Rosenberg, J. and H. Schulzrinne, "An Offer/Answer Model
               with Session Description Protocol (SDP)", RFC 3264,
               June 2002.

  [RFC3629]    Yergeau, F., "UTF-8, a transformation format of ISO
               10646", STD 63, RFC 3629, November 2003.

  [RFC3851]    Ramsdell, B., "Secure/Multipurpose Internet Mail
               Extensions (S/MIME) Version 3.1 Message Specification",
               RFC 3851, July 2004.

  [RFC3862]    Klyne, G. and D. Atkins, "Common Presence and Instant
               Messaging (CPIM): Message Format", RFC 3862,
               August 2004.

  [RFC4566]    Handley, M., Jacobson, V., and C. Perkins, "SDP: Session
               Description Protocol", RFC 4566, July 2006.

  [RFC4975]    Campbell, B., Mahy, R., and C. Jennings, "The Message
               Session Relay Protocol (MSRP)", RFC 4975,
               September 2007.

  [RFC5234]    Crocker, D. and P. Overell, "Augmented BNF for Syntax
               Specifications: ABNF", STD 68, RFC 5234, January 2008.

  [RFC5322]    Resnick, P., Ed., "Internet Message Format", RFC 5322,
               October 2008.

13.2.  Informative References

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

  [RFC4028]    Donovan, S. and J. Rosenberg, "Session Timers in the
               Session Initiation Protocol (SIP)", RFC 4028,
               April 2005.




Garcia-Martin, et al.       Standards Track                    [Page 46]

RFC 5547           SDP Offer/Answer for File Transfer           May 2009


  [RFC4483]    Burger, E., "A Mechanism for Content Indirection in
               Session Initiation Protocol (SIP) Messages", RFC 4483,
               May 2006.

  [RFC4976]    Jennings, C., Mahy, R., and A. Roach, "Relay Extensions
               for the Message Sessions Relay Protocol (MSRP)",
               RFC 4976, September 2007.

  [IANA]       IANA, "Internet Assigned Numbers Authority",
               <http://www.iana.org>.

  [FLUTE-REV]  Luby, M., Lehtonen, R., Roca, V., and T. Paila, "FLUTE -
               File Delivery over Unidirectional Transport", Work
               in Progress, September 2008.





































Garcia-Martin, et al.       Standards Track                    [Page 47]

RFC 5547           SDP Offer/Answer for File Transfer           May 2009


Appendix A.  Alternatives Considered

  The requirements are related to the description and negotiation of
  the session, not to the actual file transfer mechanism.  Thus, it is
  natural that in order to meet them it is enough to define attribute
  extensions and usage conventions to SDP, while MSRP itself needs no
  extensions and can be used as it is.  This is effectively the
  approach taken in this specification.  Another goal has been to
  specify the SDP extensions in such a way that a regular MSRP endpoint
  that does not support them could still in some cases act as an
  endpoint in a file transfer session, albeit with a somewhat reduced
  functionality.

  In some ways, the aim of this specification is similar to the aim of
  content indirection mechanism in the Session Initiation Protocol
  (SIP) [RFC4483].  Both mechanisms allow a user agent to decide
  whether or not to download a file based on information about the
  file.  However, there are some differences.  With content
  indirection, it is not possible for the other endpoint to explicitly
  accept or reject the file transfer.  Also, it is not possible for an
  endpoint to request a file from another endpoint.  Furthermore,
  content indirection is not tied to the context of a media session,
  which is sometimes a desirable property.  Finally, content
  indirection typically requires some server infrastructure, which may
  not always be available.  It is possible to use content indirection
  directly between the endpoints too, but in that case there is no
  definition for how it works for endpoints behind NATs.  The level of
  requirements in implementations decides which solution meets the
  requirements.

  Based on the argumentation above, this document defines the SDP
  attribute extensions and usage conventions needed for meeting the
  requirements on file transfer services with the SDP offer/answer
  model, using MSRP as the transfer protocol within the session.

     In principle, it is possible to use the SDP extensions defined
     here and replace MSRP with any other similar protocol that can
     carry MIME objects.  This kind of specification can be written as
     a separate document if the need arises.  Essentially, such a
     protocol should be able to be negotiated on an SDP offer/answer
     exchange (RFC 3264 [RFC3264]), be able to describe the file to be
     transferred in SDP offer/answer exchange, be able to carry MIME
     objects between two endpoints, and use a reliable transport
     protocol (e.g., TCP).

  This specification defines a set of SDP attributes that describe a
  file to be transferred between two endpoints.  The information needed
  to describe a file could be potentially encoded in a few different



Garcia-Martin, et al.       Standards Track                    [Page 48]

RFC 5547           SDP Offer/Answer for File Transfer           May 2009


  ways.  The MMUSIC working group considered a few alternative
  approaches before deciding to use the encoding described in
  Section 6.  In particular, the working group looked at the MIME
  'external-body' type and the use of a single SDP attribute or
  parameter.

  A MIME 'external-body' could potentially be used to describe the file
  to be transferred.  In fact, many of the SDP parameters this
  specification defines are also supported by 'external-body' body
  parts.  The MMUSIC working group decided not to use 'external-body'
  body parts because a number of existing offer/answer implementations
  do not support multipart bodies.

  The information carried in the SDP attributes defined in Section 6
  could potentially be encoded in a single SDP attribute.  The MMUSIC
  working group decided not to follow this approach because it is
  expected that implementations support only a subset of the parameters
  defined in Section 6.  Those implementations will be able to use
  regular SDP rules in order to ignore non-supported SDP parameters.
  If all the information was encoded in a single SDP attribute, those
  rules, which relate to backwards compatibility, would need to be
  redefined specifically for that parameter.





























Garcia-Martin, et al.       Standards Track                    [Page 49]

RFC 5547           SDP Offer/Answer for File Transfer           May 2009


Authors' Addresses

  Miguel A. Garcia-Martin
  Ericsson
  Calle Via de los Poblados 13
  Madrid, ES  28033
  Spain

  EMail: [email protected]


  Markus Isomaki
  Nokia
  Keilalahdentie 2-4
  Espoo  02150
  Finland

  EMail: [email protected]


  Gonzalo Camarillo
  Ericsson
  Hirsalantie 11
  Jorvas  02420
  Finland

  EMail: [email protected]


  Salvatore Loreto
  Ericsson
  Hirsalantie 11
  Jorvas  02420
  Finland

  EMail: [email protected]


  Paul H. Kyzivat
  Cisco Systems
  1414 Massachusetts Avenue
  Boxborough, MA  01719
  USA

  EMail: [email protected]






Garcia-Martin, et al.       Standards Track                    [Page 50]