draft-ietf-mmusic-file-transfer-mech-08.txt | draft-ietf-mmusic-file-transfer-mech-09.txt | |||
---|---|---|---|---|
MMUSIC Working Group M. Garcia-Martin | MMUSIC Working Group M. Garcia-Martin | |||
Internet-Draft Nokia Siemens Networks | Internet-Draft Ericsson | |||
Intended status: Standards Track M. Isomaki | Intended status: Standards Track M. Isomaki | |||
Expires: November 21, 2008 Nokia | Expires: May 7, 2009 Nokia | |||
G. Camarillo | G. Camarillo | |||
S. Loreto | S. Loreto | |||
Ericsson | Ericsson | |||
P. Kyzivat | P. Kyzivat | |||
Cisco Systems | Cisco Systems | |||
May 20, 2008 | November 3, 2008 | |||
A Session Description Protocol (SDP) Offer/Answer Mechanism to Enable | A Session Description Protocol (SDP) Offer/Answer Mechanism to Enable | |||
File Transfer | File Transfer | |||
draft-ietf-mmusic-file-transfer-mech-08.txt | draft-ietf-mmusic-file-transfer-mech-09.txt | |||
Status of this Memo | Status of this Memo | |||
By submitting this Internet-Draft, each author represents that any | By submitting this Internet-Draft, each author represents that any | |||
applicable patent or other IPR claims of which he or she is aware | applicable patent or other IPR claims of which he or she is aware | |||
have been or will be disclosed, and any of which he or she becomes | have been or will be disclosed, and any of which he or she becomes | |||
aware will be disclosed, in accordance with Section 6 of BCP 79. | aware will be disclosed, in accordance with Section 6 of BCP 79. | |||
Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
Task Force (IETF), its areas, and its working groups. Note that | Task Force (IETF), its areas, and its working groups. Note that | |||
skipping to change at page 1, line 41 | skipping to change at page 1, line 41 | |||
and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
The list of current Internet-Drafts can be accessed at | The list of current Internet-Drafts can be accessed at | |||
http://www.ietf.org/ietf/1id-abstracts.txt. | http://www.ietf.org/ietf/1id-abstracts.txt. | |||
The list of Internet-Draft Shadow Directories can be accessed at | The list of Internet-Draft Shadow Directories can be accessed at | |||
http://www.ietf.org/shadow.html. | http://www.ietf.org/shadow.html. | |||
This Internet-Draft will expire on November 21, 2008. | This Internet-Draft will expire on May 7, 2009. | |||
Abstract | Abstract | |||
This document provides a mechanism to negotiate the transfer of one | This document provides a mechanism to negotiate the transfer of one | |||
or more files between two endpoints by using the Session Description | or more files between two endpoints by using the Session Description | |||
Protocol (SDP) offer/answer model specified in RFC 3264. SDP is | Protocol (SDP) offer/answer model specified in RFC 3264. SDP is | |||
extended to describe the attributes of the files to be transferred. | extended to describe the attributes of the files to be transferred. | |||
The offerer can either describe the files it wants to send, or the | The offerer can either describe the files it wants to send, or the | |||
files it would like to receive. The answerer can either accept or | files it would like to receive. The answerer can either accept or | |||
reject the offer separately for each individual file. The transfer | reject the offer separately for each individual file. The transfer | |||
skipping to change at page 3, line 15 | skipping to change at page 3, line 15 | |||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 4 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 5 | 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 5 | |||
3. Definitions . . . . . . . . . . . . . . . . . . . . . . . . . 5 | 3. Definitions . . . . . . . . . . . . . . . . . . . . . . . . . 5 | |||
4. Overview of Operation . . . . . . . . . . . . . . . . . . . . 5 | 4. Overview of Operation . . . . . . . . . . . . . . . . . . . . 5 | |||
5. File selector . . . . . . . . . . . . . . . . . . . . . . . . 7 | 5. File selector . . . . . . . . . . . . . . . . . . . . . . . . 7 | |||
6. Extensions to SDP . . . . . . . . . . . . . . . . . . . . . . 8 | 6. Extensions to SDP . . . . . . . . . . . . . . . . . . . . . . 8 | |||
7. File Disposition Types . . . . . . . . . . . . . . . . . . . . 13 | 7. File Disposition Types . . . . . . . . . . . . . . . . . . . . 13 | |||
8. Protocol Operation . . . . . . . . . . . . . . . . . . . . . . 14 | 8. Protocol Operation . . . . . . . . . . . . . . . . . . . . . . 14 | |||
8.1. Offerer's Behavior . . . . . . . . . . . . . . . . . . . . 14 | 8.1. The 'file-transfer-id' attribute . . . . . . . . . . . . . 14 | |||
8.1.1. The Offerer is a File Sender . . . . . . . . . . . . . 15 | 8.2. Offerer's Behavior . . . . . . . . . . . . . . . . . . . . 17 | |||
8.1.2. The Offerer is a File Receiver . . . . . . . . . . . . 15 | 8.2.1. The Offerer is a File Sender . . . . . . . . . . . . . 17 | |||
8.1.3. SDP Offer for Several Files . . . . . . . . . . . . . 16 | 8.2.2. The Offerer is a File Receiver . . . . . . . . . . . . 18 | |||
8.2. Answerer's Behavior . . . . . . . . . . . . . . . . . . . 17 | 8.2.3. SDP Offer for Several Files . . . . . . . . . . . . . 19 | |||
8.2.1. The Answerer is a File Receiver . . . . . . . . . . . 17 | 8.3. Answerer's Behavior . . . . . . . . . . . . . . . . . . . 19 | |||
8.2.2. The Answerer is a File Sender . . . . . . . . . . . . 18 | 8.3.1. The Answerer is a File Receiver . . . . . . . . . . . 19 | |||
8.3. The 'file-transfer-id' attribute . . . . . . . . . . . . . 19 | 8.3.2. The Answerer is a File Sender . . . . . . . . . . . . 20 | |||
8.4. Aborting an ongoing file transfer operation . . . . . . . 21 | 8.4. Aborting an ongoing file transfer operation . . . . . . . 22 | |||
8.5. Indicating File Transfer Offer/Answer Capability . . . . . 24 | 8.5. Indicating File Transfer Offer/Answer Capability . . . . . 25 | |||
8.6. Re-usage of Existing "m=" Lines in SDP . . . . . . . . . . 25 | 8.6. Re-usage of Existing "m=" Lines in SDP . . . . . . . . . . 26 | |||
8.7. MSRP Usage . . . . . . . . . . . . . . . . . . . . . . . . 25 | 8.7. MSRP Usage . . . . . . . . . . . . . . . . . . . . . . . . 26 | |||
8.8. Considerations about the 'file-icon' attribute . . . . . . 27 | 8.8. Considerations about the 'file-icon' attribute . . . . . . 28 | |||
9. Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 | 9. Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 | |||
9.1. Offerer sends a file to the Answerer . . . . . . . . . . . 27 | 9.1. Offerer sends a file to the Answerer . . . . . . . . . . . 28 | |||
9.2. Offerer requests a file from the Answerer and second | 9.2. Offerer requests a file from the Answerer and second | |||
file transfer . . . . . . . . . . . . . . . . . . . . . . 32 | file transfer . . . . . . . . . . . . . . . . . . . . . . 33 | |||
9.3. Example of a capability indication . . . . . . . . . . . . 39 | 9.3. Example of a capability indication . . . . . . . . . . . . 40 | |||
10. Security Considerations . . . . . . . . . . . . . . . . . . . 40 | 10. Security Considerations . . . . . . . . . . . . . . . . . . . 41 | |||
11. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 41 | 11. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 42 | |||
11.1. Registration of new SDP attributes . . . . . . . . . . . . 41 | 11.1. Registration of new SDP attributes . . . . . . . . . . . . 42 | |||
11.1.1. Registration of the file-selector attribute . . . . . 41 | 11.1.1. Registration of the file-selector attribute . . . . . 42 | |||
11.1.2. Registration of the file-transfer-id attribute . . . . 42 | 11.1.2. Registration of the file-transfer-id attribute . . . . 43 | |||
11.1.3. Registration of the file-disposition attribute . . . . 42 | 11.1.3. Registration of the file-disposition attribute . . . . 43 | |||
11.1.4. Registration of the file-date attribute . . . . . . . 42 | 11.1.4. Registration of the file-date attribute . . . . . . . 43 | |||
11.1.5. Registration of the file-icon attribute . . . . . . . 43 | 11.1.5. Registration of the file-icon attribute . . . . . . . 44 | |||
11.1.6. Registration of the file-range attribute . . . . . . . 43 | 11.1.6. Registration of the file-range attribute . . . . . . . 44 | |||
12. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 43 | 12. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 44 | |||
13. References . . . . . . . . . . . . . . . . . . . . . . . . . . 43 | 13. References . . . . . . . . . . . . . . . . . . . . . . . . . . 44 | |||
13.1. Normative References . . . . . . . . . . . . . . . . . . . 43 | 13.1. Normative References . . . . . . . . . . . . . . . . . . . 44 | |||
13.2. Informational References . . . . . . . . . . . . . . . . . 44 | 13.2. Informational References . . . . . . . . . . . . . . . . . 45 | |||
Appendix A. Alternatives Considered . . . . . . . . . . . . . . . 45 | Appendix A. Alternatives Considered . . . . . . . . . . . . . . . 46 | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 47 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 48 | |||
Intellectual Property and Copyright Statements . . . . . . . . . . 48 | Intellectual Property and Copyright Statements . . . . . . . . . . 49 | |||
1. Introduction | 1. Introduction | |||
The Session Description Protocol (SDP) Offer/Answer [RFC3264] | The Session Description Protocol (SDP) Offer/Answer [RFC3264] | |||
provides a mechanism for two endpoints to arrive at a common view of | provides a mechanism for two endpoints to arrive at a common view of | |||
a multimedia session between them. These sessions often contain | a multimedia session between them. These sessions often contain | |||
real-time media streams such as voice and video, but are not limited | real-time media streams such as voice and video, but are not limited | |||
to that. Basically, any media component type can be supported, as | to that. Basically, any media component type can be supported, as | |||
long as there is a specification how to negotiate it within the SDP | long as there is a specification how to negotiate it within the SDP | |||
offer/answer exchange. | offer/answer exchange. | |||
skipping to change at page 8, line 18 | skipping to change at page 8, line 18 | |||
support of the file transfer offer/answer capability that this | support of the file transfer offer/answer capability that this | |||
document specifies. This is further explained in Section 8.5. | document specifies. This is further explained in Section 8.5. | |||
6. Extensions to SDP | 6. Extensions to SDP | |||
We define a number of new SDP [RFC4566] attributes that provide the | We define a number of new SDP [RFC4566] attributes that provide the | |||
required information to describe the transfer of a file with MSRP. | required information to describe the transfer of a file with MSRP. | |||
These are all media level only attributes in SDP. The following is | These are all media level only attributes in SDP. The following is | |||
the formal ABNF syntax [RFC5234] of these new attributes. It is | the formal ABNF syntax [RFC5234] of these new attributes. It is | |||
built above the SDP [RFC4566] grammar, RFC 2045 [RFC2045], RFC 2183 | built above the SDP [RFC4566] grammar, RFC 2045 [RFC2045], RFC 2183 | |||
[RFC2183], RFC 2392 [RFC2392], and RFC 2822 [RFC2822]. | [RFC2183], RFC 2392 [RFC2392], and RFC 5322 [RFC5322]. | |||
attribute = file-selector-attr / file-disp-attr / | attribute = file-selector-attr / file-disp-attr / | |||
file-tr-id-attr / file-date-attr / | file-tr-id-attr / file-date-attr / | |||
file-icon-attr / file-range-attr | file-icon-attr / file-range-attr | |||
;attribute is defined in RFC 4566 | ;attribute is defined in RFC 4566 | |||
file-selector-attr = "file-selector" [":" selector *(SP selector)] | file-selector-attr = "file-selector" [":" selector *(SP selector)] | |||
selector = filename-selector / filesize-selector / | selector = filename-selector / filesize-selector / | |||
filetype-selector / hash-selector | filetype-selector / hash-selector | |||
filename-selector = "name:" DQUOTE filename-string DQUOTE | filename-selector = "name:" DQUOTE filename-string DQUOTE | |||
; DQUOTE defined in RFC 5234 | ; DQUOTE defined in RFC 5234 | |||
filename-string = 1*(filename-char/percent-encoded) | filename-string = 1*(filename-char/percent-encoded) | |||
filename-char = %x01-09/%x0B-0C/%x0E-21/%x23-24/%26-FF) | filename-char = %x01-09/%x0B-0C/%x0E-21/%x23-24/%x26-FF | |||
;any byte except NUL, CR, LF, | ;any byte except NUL, CR, LF, | |||
;double quotes, or percent | ;double quotes, or percent | |||
percent-encoded = "%" HEXDIG HEXDIG | percent-encoded = "%" HEXDIG HEXDIG | |||
; HEXDIG defined in RFC 5234 | ; HEXDIG defined in RFC 5234 | |||
filesize-selector = "size:" filesize-value | filesize-selector = "size:" filesize-value | |||
filesize-value = integer ;integer defined in RFC 4566 | filesize-value = integer ;integer defined in RFC 4566 | |||
filetype-selector = "type:" type "/" subtype *(";"parameter) | filetype-selector = "type:" type "/" subtype *(";"parameter) | |||
; parameter defined in RFC 2045 | ; parameter defined in RFC 2045 | |||
skipping to change at page 9, line 20 | skipping to change at page 9, line 20 | |||
file-disp-attr = "file-disposition:" file-disp-value | file-disp-attr = "file-disposition:" file-disp-value | |||
file-disp-value = token | file-disp-value = token | |||
file-date-attr = "file-date:" date-param *(SP date-param) | file-date-attr = "file-date:" date-param *(SP date-param) | |||
date-param = c-date-param / m-date-param / r-date-param | date-param = c-date-param / m-date-param / r-date-param | |||
c-date-param = "creation:" DQUOTE date-time DQUOTE | c-date-param = "creation:" DQUOTE date-time DQUOTE | |||
m-date-param = "modification:" DQUOTE date-time DQUOTE | m-date-param = "modification:" DQUOTE date-time DQUOTE | |||
r-date-param = "read:" DQUOTE date-time DQUOTE | r-date-param = "read:" DQUOTE date-time DQUOTE | |||
; date-time is defined in RFC 2822 | ; date-time is defined in RFC 5322 | |||
; numeric timezones (+HHMM or -HHMM) | ; numeric timezones (+HHMM or -HHMM) | |||
; must be used | ; must be used | |||
; DQUOTE defined in RFC 5234 files. | ; DQUOTE defined in RFC 5234 files. | |||
file-icon-attr = "file-icon:" file-icon-value | file-icon-attr = "file-icon:" file-icon-value | |||
file-icon-value = cid-url ;cid-url defined in RFC 2392 | file-icon-value = cid-url ;cid-url defined in RFC 2392 | |||
file-range-attr = "file-range:" start-offset "-" stop-offset | file-range-attr = "file-range:" start-offset "-" stop-offset | |||
start-offset = integer ;integer defined in RFC 4566 | start-offset = integer ;integer defined in RFC 4566 | |||
stop-offset = integer / "*" | stop-offset = integer / "*" | |||
skipping to change at page 11, line 25 | skipping to change at page 11, line 25 | |||
The value of the 'hash' selector is the byte string resulting of | The value of the 'hash' selector is the byte string resulting of | |||
applying the hash algorithm to the content of the whole file, even | 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 | when the file transfer is limited to a number of octets (i.e., the | |||
'file-range' attribute is indicated). | 'file-range' attribute is indicated). | |||
The 'file-transfer-id' attribute provides a randomly chosen globally | The 'file-transfer-id' attribute provides a randomly chosen globally | |||
unique identification to the actual file transfer. It is used to | unique identification to the actual file transfer. It is used to | |||
distinguish a new file transfer request from a repetition of the SDP | distinguish a new file transfer request from a repetition of the SDP | |||
(or the fraction of the SDP that deals with the file description). | (or the fraction of the SDP that deals with the file description). | |||
This attribute is described in much greater detail in Section 8.3. | This attribute is described in much greater detail in Section 8.1. | |||
The 'file-disposition' attribute provides a suggestion to the other | The 'file-disposition' attribute provides a suggestion to the other | |||
endpoint about the intended disposition of the file. Section 7 | endpoint about the intended disposition of the file. Section 7 | |||
provides further discussion of the possible values. The value of | provides further discussion of the possible values. The value of | |||
this attribute SHOULD be the same as the disposition type parameter | this attribute SHOULD be the same as the disposition type parameter | |||
of the Content-Disposition header field [RFC2183] that would be | of the Content-Disposition header field [RFC2183] that would be | |||
signaled by the actual file transfer protocol. | signaled by the actual file transfer protocol. | |||
The 'file-date' attribute indicates the dates at which the file was | The 'file-date' attribute indicates the dates at which the file was | |||
created, modified, or last read. This attribute MAY contain a | created, modified, or last read. This attribute MAY contain a | |||
combination of the 'creation', 'modification', and 'read' parameters, | combination of the 'creation', 'modification', and 'read' parameters, | |||
but MUST NOT contain more than one of each type . | but MUST NOT contain more than one of each type . | |||
The 'creation' parameter indicates the date at which the file was | The 'creation' parameter indicates the date at which the file was | |||
created. The value MUST be a quoted string which contains a | created. The value MUST be a quoted string which contains a | |||
representation of the creation date of the file in RFC 2822 [RFC2822] | representation of the creation date of the file in RFC 5322 [RFC5322] | |||
'date-time' format. Numeric timezones (+HHMM or -HHMM) MUST be used. | 'date-time' format. Numeric timezones (+HHMM or -HHMM) MUST be used. | |||
The value of this parameter SHOULD be the same as the 'creation-date' | The value of this parameter SHOULD be the same as the 'creation-date' | |||
parameter of the Content-Disposition header field [RFC2183] that | parameter of the Content-Disposition header field [RFC2183] that | |||
would be signaled by the actual file transfer protocol. | would be signaled by the actual file transfer protocol. | |||
The 'modification' parameter indicates the date at which the file was | The 'modification' parameter indicates the date at which the file was | |||
last modified. The value MUST be a quoted string which contains a | last modified. The value MUST be a quoted string which contains a | |||
representation of the last modification date to the file in RFC 2822 | representation of the last modification date to the file in RFC 5322 | |||
[RFC2822] 'date-time' format. Numeric timezones (+HHMM or -HHMM) | [RFC5322] 'date-time' format. Numeric timezones (+HHMM or -HHMM) | |||
MUST be used. The value of this parameter SHOULD be the same as the | MUST be used. The value of this parameter SHOULD be the same as the | |||
'modification-date' parameter of the Content-Disposition header field | 'modification-date' parameter of the Content-Disposition header field | |||
[RFC2183] that would be signaled by the actual file transfer | [RFC2183] that would be signaled by the actual file transfer | |||
protocol. | protocol. | |||
The 'read' parameter indicates the date at which the file was last | The 'read' parameter indicates the date at which the file was last | |||
read. The value MUST be a quoted string which contains a | read. The value MUST be a quoted string which contains a | |||
representation of the last date the file was read in RFC 2822 | representation of the last date the file was read in RFC 5322 | |||
[RFC2822] 'date-time' format. Numeric timezones (+HHMM or -HHMM) | [RFC5322] 'date-time' format. Numeric timezones (+HHMM or -HHMM) | |||
MUST be used. The value of this parameter SHOULD be the same as the | MUST be used. The value of this parameter SHOULD be the same as the | |||
'read-date' parameter of the Content-Disposition header field | 'read-date' parameter of the Content-Disposition header field | |||
[RFC2183] that would be signaled by the actual file transfer | [RFC2183] that would be signaled by the actual file transfer | |||
protocol. | protocol. | |||
The 'file-icon' attribute can be useful with certain file types such | 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 | 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 | that includes a small preview icon representing the contents of the | |||
file to be transferred, which the file receiver can use to determine | file to be transferred, which the file receiver can use to determine | |||
whether it wants to receive such file. The 'file-icon' attribute | whether it wants to receive such file. The 'file-icon' attribute | |||
contains a Content-ID URL, which is specified in RFC 2392 [RFC2392]. | contains a Content-ID URL, which is specified in RFC 2392 [RFC2392]. | |||
Section 8.8 contains further considerations about the 'file-icon' | Section 8.8 contains further considerations about the 'file-icon' | |||
attribute. | attribute. | |||
The 'file-range' attribute provides a mechanism to signal a chunk of | The 'file-range' attribute provides a mechanism to signal a chunk of | |||
a file rather than the complete file. This enable use cases where a | a file rather than the complete file. This enable use cases where a | |||
file transfer can be interrupted, resumed, even perhaps changing one | file transfer can be interrupted, resumed, even perhaps changing one | |||
of the endpoints. The 'file-range' attribute contains the "start | of the endpoints. The 'file-range' attribute contains the "start | |||
offset" and "stop offset" of the file, separated by a dash "-". The | offset" and "stop offset" of the file, separated by a dash "-". The | |||
"start offset" value refers to the position of the file where the | "start offset" value refers to the octet position of the file where | |||
file transfer should start. The first byte of a file is denoted by | the file transfer should start. The first octet of a file is denoted | |||
the ordinal number "1". The "stop offset" value refers position of | by the ordinal number "1". The "stop offset" value refers to the | |||
the file where the file transfer should stop. The "stop offset" | octet position of the file where the file transfer should stop, | |||
value MAY contain a "*" if the total size of the file is not known in | inclusive of this octet. The "stop offset" value MAY contain a "*" | |||
advance. The absence of this attribute indicates a complete file, | if the total size of the file is not known in advance. The absence | |||
i.e., as if the 'file-range' attribute would have been present with a | of this attribute indicates a complete file, i.e., as if the 'file- | |||
value "1-*". The 'file-range' attribute must not be confused with | range' attribute would have been present with a value "1-*". The | |||
the Byte-Range header in MSRP. The former indicates the portion of a | 'file-range' attribute must not be confused with the Byte-Range | |||
file that the application would read and pass onto the MSRP stack for | 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 | transportation. From the point of view of MSRP, the portion of the | |||
file is viewed as a whole message. The latter indicates the number | 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 | of bytes of that message that are carried in a chunk and the total | |||
size of the message. Therefore, MSRP starts counting the delivered | size of the message. Therefore, MSRP starts counting the delivered | |||
message at byte number 1, independently of position of that byte in | message at octet number 1, independently of position of that octet in | |||
the file. | the file. | |||
The following is an example of an SDP body that contains the | The following is an example of an SDP body that contains the | |||
extensions defined in this memo: | extensions defined in this memo: | |||
v=0 | v=0 | |||
o=alice 2890844526 2890844526 IN IP4 host.atlanta.example.com | o=alice 2890844526 2890844526 IN IP4 host.atlanta.example.com | |||
s= | s= | |||
c=IN IP4 host.atlanta.example.com | c=IN IP4 host.atlanta.example.com | |||
t=0 0 | t=0 0 | |||
skipping to change at page 14, line 45 | skipping to change at page 14, line 45 | |||
transmit a file to the answerer. Consequently the answerer is | transmit a file to the answerer. Consequently the answerer is | |||
the file receiver. In this case the SDP offer contains a | the file receiver. In this case the SDP offer contains a | |||
'sendonly' attribute, and accordingly the SDP answer contains a | 'sendonly' attribute, and accordingly the SDP answer contains a | |||
'recvonly' attribute. | 'recvonly' attribute. | |||
2. The offerer is the file receiver, i.e., the offerer wants to | 2. The offerer is the file receiver, i.e., the offerer wants to | |||
fetch a file from the answerer. Consequently the answerer is the | fetch a file from the answerer. Consequently the answerer is the | |||
file sender. In this case the SDP offer contains a session or | file sender. In this case the SDP offer contains a session or | |||
media 'recvonly' attribute, and accordingly the SDP answer | media 'recvonly' attribute, and accordingly the SDP answer | |||
contains a session or media 'sendonly' attribute. | contains a session or media 'sendonly' attribute. | |||
8.1. Offerer's Behavior | 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 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 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 if a | ||||
new file transfer is requested or not. | ||||
In other cases, a file transfer was successfully completed. Then, if | ||||
an endpoint re-sends the SDP offer with the media stream for the file | ||||
transfer, then the other endpoint wouldn't be able to determine | ||||
whether a new file transfer should start or not. | ||||
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 re-start 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. | ||||
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 file | ||||
transfer abortion. | ||||
If an endpoint creates an SDP offer where the 'file-transfer-id' | ||||
attribute value does not change with respect a previously sent one, | ||||
but the file selector changes so that a new file is selected, then | ||||
this is considered and 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 | ||||
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 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 | an answerer MUST build an SDP [RFC4566] description of a session | |||
containing one "m=" line per file. When MSRP is used as the transfer | containing one "m=" line per file. When MSRP is used as the transfer | |||
mechanism, each "m=" line also describes a single MSRP session, | mechanism, each "m=" line also describes a single MSRP session, | |||
according to the MSRP [RFC4975] procedures. Any "m=" lines that may | according to the MSRP [RFC4975] procedures. Any "m=" lines that may | |||
have already been present in a previous SDP exchange are normally | have already been present in a previous SDP exchange are normally | |||
kept unmodified; the new "m=" lines are added afterwards (Section 8.6 | kept unmodified; the new "m=" lines are added afterwards (Section 8.6 | |||
describes cases when "m=" lines are re-used). All the media line | describes cases when "m=" lines are re-used). All the media line | |||
attributes specified and required by MSRP [RFC4975] (e.g., "a=path", | attributes specified and required by MSRP [RFC4975] (e.g., "a=path", | |||
"a=accept-types", etc.) MUST be included as well. | "a=accept-types", etc.) MUST be included as well. | |||
8.1.1. The Offerer is a File Sender | 8.2.1. The Offerer is a File Sender | |||
In a push operation, the file sender creates and SDP offer describing | In a push operation, the file sender creates and SDP offer describing | |||
the file to be sent. The file sender MUST add a 'file-selector' | the file to be sent. The file sender MUST add a 'file-selector' | |||
attribute media line containing at least one of the 'type', 'size', | attribute media line containing at least one of the 'type', 'size', | |||
'hash' selectors in indicating the type, size, or hash of the file, | 'hash' selectors in indicating the type, size, or hash of the file, | |||
respectively. If the file sender wishes to start a new file | respectively. If the file sender wishes to start a new file | |||
transfer, the file sender MUST add a 'file-transfer-id' attribute | transfer, the file sender MUST add a 'file-transfer-id' attribute | |||
containing a new globally unique random identifier value. | containing a new globally unique random identifier value. | |||
Additionally, the file sender MUST add a session or media 'sendonly' | Additionally, the file sender MUST add a session or media 'sendonly' | |||
attribute to the SDP offer. Then the file sender sends the SDP offer | attribute to the SDP offer. Then the file sender sends the SDP offer | |||
to the file receiver. | to the file receiver. | |||
Not all the selectors in the 'file-selector' attribute might be | Not all the selectors in the 'file-selector' attribute might be | |||
known when the file sender creates the SDP offer, for example, | known when the file sender creates the SDP offer, for example, | |||
because the host is still processing the file. | because the host is still processing the file. | |||
The 'hash' selector in the 'file-selector' attribute contains | The 'hash' selector in the 'file-selector' attribute contains | |||
valuable information to the file receiver to identify whether the | valuable information to the file receiver to identify whether the | |||
skipping to change at page 15, line 46 | skipping to change at page 18, line 31 | |||
example: the file sender would like the file receiver to render the | example: the file sender would like the file receiver to render the | |||
file or not). The three date attributes provide the answerer with an | 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 | 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-range' attribute indicating the start and stop offsets of the | |||
file. | file. | |||
When the file sender receives the SDP answer, if the port number of | 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 | 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. | transfer of the file according to the negotiated parameters in SDP. | |||
8.1.2. The Offerer is a File Receiver | 8.2.2. The Offerer is a File Receiver | |||
In a pull operation, the file receiver creates the SDP offer and | 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- | sends it to the file sender. The file receiver MUST include a 'file- | |||
selector' attribute and SHOULD add, at least, one of the selector | selector' attribute and SHOULD add, at least, one of the selector | |||
defined for that attribute (i.e., 'name', 'type', 'size', or 'hash'). | defined for that attribute (i.e., 'name', 'type', 'size', or 'hash'). | |||
In many cases, if the hash of the file is known, that is enough to | 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' | identify the file, therefore, the offerer can include only a 'hash' | |||
selector. However, specially in cases where the hash of the file is | selector. However, specially in cases where the hash of the file is | |||
unknown, the file name, size, and type can provide a description of | 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 | 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 | file transfer it MUST add a 'file-transfer-id' attribute containing a | |||
new globally unique random value. The file receiver MAY also add 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-range' attribute indicating the start and stop offsets of the | |||
file. There is no need to for the file receiver to include further | file. There is no need to for the file receiver to include further | |||
file attributes in the SDP offer, thus it is RECOMMENDED that SDP | file attributes in the SDP offer, thus it is RECOMMENDED that SDP | |||
skipping to change at page 16, line 32 | skipping to change at page 19, line 16 | |||
the answer for a file request is non-zero, then the file receiver | the answer for a file request is non-zero, then the file receiver | |||
should receive the file using the protocol indicated in the "m=" | should receive the file using the protocol indicated in the "m=" | |||
line. If the SDP answer contains a supported hashing algorithm in | line. If the SDP answer contains a supported hashing algorithm in | |||
the 'hash' selectors of the 'file-selector' attribute, then the file | the 'hash' selectors of the 'file-selector' attribute, then the file | |||
receiver SHOULD compute the hash of the file after its reception and | receiver SHOULD compute the hash of the file after its reception and | |||
check it against the hash received in the answer. In case the | 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 | computed hash does not match the one contained in the SDP answer, the | |||
file receiver SHOULD consider that the file transfer failed and | file receiver SHOULD consider that the file transfer failed and | |||
SHOULD inform the user. | SHOULD inform the user. | |||
8.1.3. SDP Offer for Several Files | 8.2.3. SDP Offer for Several Files | |||
An offerer that wishes to send or receive more than one file | An offerer that wishes to send or receive more than one file | |||
generates an "m=" line per file along with the file attributes | generates an "m=" line per file along with the file attributes | |||
described in this specification. This way, the answerer can reject | described in this specification. This way, the answerer can reject | |||
individual files by setting the port number of their associated "m=" | individual files by setting the port number of their associated "m=" | |||
lines to zero, as per regular SDP [RFC4566] procedures. Similarly, | lines to zero, as per regular SDP [RFC4566] procedures. Similarly, | |||
the answerer can accept each individual file separately by setting | the answerer can accept each individual file separately by setting | |||
the port number of their associated "m=" lines to non-zero value. | the port number of their associated "m=" lines to non-zero value. | |||
Each file has its own file transfer identifier, which uniquely | Each file has its own file transfer identifier, which uniquely | |||
identifies each file transfer. | identifies each file transfer. | |||
Using an "m=" line per file implies that different files are | Using an "m=" line per file implies that different files are | |||
transferred using different MSRP sessions. However, all those MSRP | transferred using different MSRP sessions. However, all those MSRP | |||
sessions can be set up to run over a single TCP connection, as | 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 | described in Section 8.1 of RFC 4975 [RFC4975]. The same TCP | |||
connection can also be re-used for sequential file transfers. | connection can also be re-used for sequential file transfers. | |||
8.2. Answerer's Behavior | 8.3. Answerer's Behavior | |||
If the answerer wishes to reject a file offered by the offerer, it | 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 | sets the port number of the "m=" line associated with the file to | |||
zero, as per regular SDP [RFC4566] procedures. The rejected answer | zero, as per regular SDP [RFC4566] procedures. The rejected answer | |||
MUST contained a 'file-selector' and 'file-transfer-id' attributes | MUST contained a 'file-selector' and 'file-transfer-id' attributes | |||
whose values mirror the corresponding values of the SDP offer. | whose values mirror the corresponding values of the SDP offer. | |||
If the answerer decides to accept the file, it proceeds as per | If the answerer decides to accept the file, it proceeds as per | |||
regular MSRP [RFC4975] and SDP [RFC4566] procedures. | regular MSRP [RFC4975] and SDP [RFC4566] procedures. | |||
8.2.1. The Answerer is a File Receiver | 8.3.1. The Answerer is a File Receiver | |||
In a push operation the SDP answerer is the file receiver. When the | 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. | 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 | 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 | 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 port number is different than zero, the file receiver inspects | |||
the 'file-transfer-id' attribute. If the value of the 'file- | the 'file-transfer-id' attribute. If the value of the 'file- | |||
transfer-id' attribute has been previously used then the existing | transfer-id' attribute has been previously used then the existing | |||
session remains without changes, perhaps the file transfer is still | session remains without changes, perhaps the file transfer is still | |||
in progress, or perhaps it has concluded, but there are no change | in progress, or perhaps it has concluded, but there are no change | |||
skipping to change at page 18, line 6 | skipping to change at page 20, line 34 | |||
'file-icon', 'file-disposition', or 'file-date' attributes in the SDP | 'file-icon', 'file-disposition', or 'file-date' attributes in the SDP | |||
answer. | answer. | |||
The file receiver can use the hash to find out if a local file with | 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 same hash is already available, in which case, this could imply | |||
the reception of a duplicated file. It is up to the answerer to | the reception of a duplicated file. It is up to the answerer to | |||
determine whether the file transfer is accepted or not in case of a | determine whether the file transfer is accepted or not in case of a | |||
duplicated file. | duplicated file. | |||
If the SDP offer contains a 'file-range' attribute and the file | If the SDP offer contains a 'file-range' attribute and the file | |||
receiver accepts to receive the range of bytes declared in there, the | receiver accepts to receive the range of octets declared in there, | |||
file receiver MUST include a 'file-range' attribute in the SDP answer | the file receiver MUST include a 'file-range' attribute in the SDP | |||
with the same range of values. If the file receiver does not accept | answer with the same range of values. If the file receiver does not | |||
the reception of that range of bytes, it SHOULD reject the transfer | accept the reception of that range of octets, it SHOULD reject the | |||
of the file. | transfer of the file. | |||
8.2.2. The Answerer is a File Sender | 8.3.2. The Answerer is a File Sender | |||
In a pull operation the answerer is the file sender. In this case, | In a pull operation the answerer is the file sender. In this case, | |||
the SDP answerer MUST first inspect the value of the | the SDP answerer MUST first inspect the value of the | |||
'file-transfer-id' attribute. If it has not been previously been | 'file-transfer-id' attribute. If it has not been previously been | |||
used throughout the session, then acceptance of the file MUST provoke | used throughout the session, then acceptance of the file MUST provoke | |||
the transfer of the file over the negotiated protocol. However, if | the transfer of the file over the negotiated protocol. However, if | |||
the value has been previously used by another file transfer operation | the value has been previously used by another file transfer operation | |||
within the session, then the file sender MUST NOT alert the user and | 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 an | MUST NOT start a new transfer of the file. No matter whether an | |||
actual file transfer is initiated or not, the file sender MUST create | actual file transfer is initiated or not, the file sender MUST create | |||
skipping to change at page 19, line 30 | skipping to change at page 22, line 11 | |||
choose one of them to be defined in the SDP answer. If that choice | 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 | cannot be done, the answerer SHOULD reject the MSRP media stream for | |||
file transfer (by setting the port number to zero). | file transfer (by setting the port number to zero). | |||
If the need arises, future specifications can provide a suitable | If the need arises, future specifications can provide a suitable | |||
mechanism that allows to either select multiple files or, e.g., | mechanism that allows to either select multiple files or, e.g., | |||
resolve ambiguities by returning a list of files that match the | resolve ambiguities by returning a list of files that match the | |||
file selector. | file selector. | |||
If the SDP offer contains a 'file-range' attribute and the file | If the SDP offer contains a 'file-range' attribute and the file | |||
sender accepts to send the range of bytes declared in there, the file | sender accepts to send the range of octets declared in there, the | |||
sender MUST include a 'file-range' attribute in the SDP answer with | file sender MUST include a 'file-range' attribute in the SDP answer | |||
the same range of values. If the file sender does not accept sending | with the same range of values. If the file sender does not accept | |||
that range of bytes, it SHOULD reject the transfer of the file. | sending that range of octets, it SHOULD reject the transfer of the | |||
file. | ||||
8.3. 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 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 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 if a | ||||
new file transfer is requested or not. | ||||
In other cases, a file transfer was successfully completed. Then, if | ||||
an endpoint re-sends the SDP offer with the media stream for the file | ||||
transfer, then the other endpoint wouldn't be able to determine | ||||
whether a new file transfer should start or not. | ||||
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 re-start 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. | ||||
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 file | ||||
transfer abortion. | ||||
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 | ||||
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.4. Aborting an ongoing file transfer operation | 8.4. Aborting an ongoing file transfer operation | |||
Either the file sender or the file receiver can abort an ongoing file | Either the file sender or the file receiver can abort an ongoing file | |||
transfer at any time. Unless otherwise noted, the entity that aborts | transfer at any time. Unless otherwise noted, the entity that aborts | |||
an ongoing file transfer operation MUST follow the procedures at the | an ongoing file transfer operation MUST follow the procedures at the | |||
media level (e.g., MSRP) and at the signaling level (SDP Offer/ | media level (e.g., MSRP) and at the signaling level (SDP Offer/ | |||
answer), as described below. | answer), as described below. | |||
Assume the scenario depicted in Figure 3 where a file sender wishes | Assume the scenario depicted in Figure 4 where a file sender wishes | |||
to abort an ongoing file transfer without initiating an alternative | to abort an ongoing file transfer without initiating an alternative | |||
file transfer. Assume that an ongoing MSRP SEND request is being | file transfer. Assume that an ongoing MSRP SEND request is being | |||
transmitted. The file sender aborts the MSRP message by including | transmitted. The file sender aborts the MSRP message by including | |||
the '#' character in the continuation field of the end-line of a SEND | 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 | request, according to the MSRP procedures (see Section 7.1 of RFC | |||
4975 [RFC4975]). Since a file is transmitted as one MSRP message, | 4975 [RFC4975]). Since a file is transmitted as one MSRP message, | |||
aborting the MSRP message effectively aborts the file transfer. The | aborting the MSRP message effectively aborts the file transfer. The | |||
file receiver acknowledges the MSRP SEND request with a 200 response. | file receiver acknowledges the MSRP SEND request with a 200 response. | |||
Then the file sender SHOULD close the MSRP session by creating a new | 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 | 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 | that describes the file transfer (see Section 8.2 of RFC 3264 | |||
[RFC3264]). This SDP offer MUST conform with the requirements of | [RFC3264]). This SDP offer MUST conform with the requirements of | |||
Section 8.1.1. The 'file-transfer-id' attribute MUST be the same | Section 8.2.1. The 'file-transfer-id' attribute MUST be the same | |||
that identifies the ongoing transfer. Then the file sender sends | that identifies the ongoing transfer. Then the file sender sends | |||
this SDP offer to the file receiver. | 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 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 | A file receiver that receives the above SDP offer creates an SDP | |||
answer according to the procedures of the SDP offer/answer (RFC 3264 | answer according to the procedures of the SDP offer/answer (RFC 3264 | |||
[RFC3264]). This SDP answer MUST conform with the requirements of | [RFC3264]). This SDP answer MUST conform with the requirements of | |||
Section 8.2.1. Then the file receiver sends this SDP answer to the | Section 8.3.1. Then the file receiver sends this SDP answer to the | |||
file sender. | file sender. | |||
File sender File receiver | File sender File receiver | |||
| | | | | | |||
|\ | | |\ | | |||
| \ | | | \ | | |||
| \ | | | \ | | |||
| \ | | | \ | | |||
| \ | | | \ | | |||
| \ | | | \ | | |||
skipping to change at page 22, line 39 | skipping to change at page 23, line 29 | |||
| MSRP 200 | | | MSRP 200 | | |||
|<-----------------------| | |<-----------------------| | |||
| re-INVITE (SDP offer) | | | re-INVITE (SDP offer) | | |||
|----------------------->| | |----------------------->| | |||
| SIP 200 OK (SDP answer)| | | SIP 200 OK (SDP answer)| | |||
|<-----------------------| | |<-----------------------| | |||
| SIP ACK | | | SIP ACK | | |||
|----------------------->| | |----------------------->| | |||
| | | | | | |||
Figure 3: File sender aborts an ongoing file transfer | Figure 4: File sender aborts an ongoing file transfer | |||
When the file receiver wants to abort the file transfer, there are | When the file receiver wants to abort the file transfer, there are | |||
two possible scenarios, depending on the value of the Failure-Report | two possible scenarios, depending on the value of the Failure-Report | |||
header in the ongoing MSRP SEND request. Assume now the scenario | header in the ongoing MSRP SEND request. Assume now the scenario | |||
depicted in Figure 4 where the MSRP SEND request includes a Failure- | depicted in Figure 5 where the MSRP SEND request includes a Failure- | |||
Report header set to a value different than "no". When the file | Report header set to a value different than "no". When the file | |||
receiver wishes to abort the ongoing file transfer, the file receiver | receiver wishes to abort the ongoing file transfer, the file receiver | |||
generates an MSRP 413 response to the current MSRP SEND request (see | generates an MSRP 413 response to the current MSRP SEND request (see | |||
Section 10.5 of RFC 4975 [RFC4975]). Then the file receiver MUST | 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 | 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 | 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 | transfer (see Section 8.2 of RFC 3264 [RFC3264]). This SDP offer | |||
MUST conform with the requirements expressed in Section 8.1.2. The | MUST conform with the requirements expressed in Section 8.2.2. The | |||
'file-transfer-id' attribute MUST be the same that identifies the | 'file-transfer-id' attribute MUST be the same that identifies the | |||
ongoing transfer. Then the file receiver sends this SDP offer to the | ongoing transfer. Then the file receiver sends this SDP offer to the | |||
file sender. | file sender. | |||
File sender File receiver | File sender File receiver | |||
| | | | | | |||
|\ | | |\ | | |||
| \ MSRP SEND | | | \ MSRP SEND | | |||
| \ Failure-Report: yes | | | \ Failure-Report: yes | | |||
| \ | | | \ | | |||
skipping to change at page 23, line 33 | skipping to change at page 24, line 28 | |||
| \ (#) | | | \ (#) | | |||
| +----------->| | | +----------->| | |||
| re-INVITE (SDP offer) | | | re-INVITE (SDP offer) | | |||
|<-----------------------| | |<-----------------------| | |||
| SIP 200 OK (SDP answer)| | | SIP 200 OK (SDP answer)| | |||
|----------------------->| | |----------------------->| | |||
| SIP ACK | | | SIP ACK | | |||
|<-----------------------| | |<-----------------------| | |||
| | | | | | |||
Figure 4: File receiver aborts an ongoing file transfer. Failure- | Figure 5: File receiver aborts an ongoing file transfer. Failure- | |||
Report set to a value different than "no" in MSRP | Report set to a value different than "no" in MSRP | |||
In another scenario, depicted in Figure 5, an ongoing file transfer | In another scenario, depicted in Figure 6, an ongoing file transfer | |||
is taking place, where the MSRP SEND request contains a Failure- | is taking place, where the MSRP SEND request contains a Failure- | |||
Report header set to the value "no". When the file receiver wants to | Report header set to the value "no". When the file receiver wants to | |||
abort the ongoing transfer, it MUST close MSRP session by generating | abort the ongoing transfer, it MUST close MSRP session by generating | |||
a new SDP offer that sets the port number to zero in the related "m=" | 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 | line that describes the file transfer (see Section 8.2 of RFC 3264 | |||
[RFC3264]). This SDP offer MUST conform with the requirements | [RFC3264]). This SDP offer MUST conform with the requirements | |||
expressed in Section 8.1.2. The 'file-transfer-id' attribute MUST be | expressed in Section 8.2.2. The 'file-transfer-id' attribute MUST be | |||
the same that identifies the ongoing transfer. Then the file | the same that identifies the ongoing transfer. Then the file | |||
receiver sends this SDP offer to the file sender. | receiver sends this SDP offer to the file sender. | |||
File sender File receiver | File sender File receiver | |||
| | | | | | |||
|\ | | |\ | | |||
| \ MSRP SEND | | | \ MSRP SEND | | |||
| \ Failure-Report: no | | | \ Failure-Report: no | | |||
| \ | | | \ | | |||
| \ | | | \ | | |||
skipping to change at page 24, line 28 | skipping to change at page 25, line 28 | |||
| \ (#) | | | \ (#) | | |||
| +----------->| | | +----------->| | |||
| MSRP 200 | | | MSRP 200 | | |||
|<-----------------------| | |<-----------------------| | |||
| SIP 200 OK (SDP answer)| | | SIP 200 OK (SDP answer)| | |||
|----------------------->| | |----------------------->| | |||
| SIP ACK | | | SIP ACK | | |||
|<-----------------------| | |<-----------------------| | |||
| | | | | | |||
Figure 5: File receiver aborts an ongoing file transfer. Failure- | Figure 6: File receiver aborts an ongoing file transfer. Failure- | |||
Report set to "no" in MSRP | Report set to "no" in MSRP | |||
A file sender that receives an SDP offer setting the port number to | 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 | zero in the related "m=" line for file transfer, first, if an ongoing | |||
MSRP SEND request is being transmitted, it aborts the MSRP message by | MSRP SEND request is being transmitted, it aborts the MSRP message by | |||
including the '#' character in the continuation field of the end-line | 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 a SEND request, according to the MSRP procedures (see Section 7.1 | |||
of RFC 4975 [RFC4975]). Since a file is transmitted as one MSRP | of RFC 4975 [RFC4975]). Since a file is transmitted as one MSRP | |||
message, aborting the MSRP message effectively aborts the file | message, aborting the MSRP message effectively aborts the file | |||
transfer. Then the file sender creates an SDP answer according to | transfer. Then the file sender creates an SDP answer according to | |||
the procedures of the SDP offer/answer (RFC 3264 [RFC3264]). This | the procedures of the SDP offer/answer (RFC 3264 [RFC3264]). This | |||
SDP answer MUST conform with the requirements of Section 8.2.2. Then | SDP answer MUST conform with the requirements of Section 8.3.2. Then | |||
the file sender sends this SDP answer to the file receiver. | the file sender sends this SDP answer to the file receiver. | |||
8.5. Indicating File Transfer Offer/Answer Capability | 8.5. Indicating File Transfer Offer/Answer Capability | |||
The SDP Offer/Answer Model [RFC3264] provides provisions for | The SDP Offer/Answer Model [RFC3264] provides provisions for | |||
indicating a capability to another endpoint (see Section 9 of RFC | indicating a capability to another endpoint (see Section 9 of RFC | |||
3264 [RFC3264]). The mechanism assumes a high-level protocol, such | 3264 [RFC3264]). The mechanism assumes a high-level protocol, such | |||
as SIP [RFC3261], that provides a capability query (such as a SIP | as SIP [RFC3261], that provides a capability query (such as a SIP | |||
OPTIONS request). RFC 3264 [RFC3264] indicates how to build the SDP | OPTIONS request). RFC 3264 [RFC3264] indicates how to build the SDP | |||
that is included in the response to such capability query. As such, | that is included in the response to such capability query. As such, | |||
skipping to change at page 25, line 28 | skipping to change at page 26, line 28 | |||
[RFC3264], in particular those defined in Section 8.3, MUST apply for | [RFC3264], in particular those defined in Section 8.3, MUST apply for | |||
file transfer operations. An endpoint that wants to re-use an | file transfer operations. An endpoint that wants to re-use an | |||
existing "m=" line to start the file transfer of another file creates | existing "m=" line to start the file transfer of another file creates | |||
a different 'file-selector' attribute and selects a new globally | a different 'file-selector' attribute and selects a new globally | |||
unique random value of the 'file-transfer-id' attribute. | unique random value of the 'file-transfer-id' attribute. | |||
If the file offerer re-sends an SDP offer with a port different than | If the file offerer re-sends an SDP offer with a port different than | |||
zero, then the 'file-transfer-id' attribute determines whether a new | zero, then the 'file-transfer-id' attribute determines whether a new | |||
file transfer will start or whether the file transfer does not need | file transfer will start or whether the file transfer does not need | |||
to start. If the SDP answerer accepts the SDP, then file transfer | to start. If the SDP answerer accepts the SDP, then file transfer | |||
starts from the indicated byte (if a 'file-range' attribute is | starts from the indicated octet (if a 'file-range' attribute is | |||
present). | present). | |||
8.7. MSRP Usage | 8.7. MSRP Usage | |||
The file transfer service specified in this document uses "m=" lines | The file transfer service specified in this document uses "m=" lines | |||
in SDP to describe the unidirectional transfer of a file. | in SDP to describe the unidirectional transfer of a file. | |||
Consequently, each MSRP session established following the procedures | Consequently, each MSRP session established following the procedures | |||
in Section 8.1 and Section 8.2 is only used to transfer a single | 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 | 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 | the file described in the SDP offer or answer. That is, senders MUST | |||
NOT send additional files over the same MSRP session. | NOT send additional files over the same MSRP session. | |||
File transfer may be accomplished using a new multimedia session | File transfer may be accomplished using a new multimedia session | |||
established for the purpose. Alternatively a file transfer may be | established for the purpose. Alternatively a file transfer may be | |||
conducted within an existing multimedia session, without regard for | conducted within an existing multimedia session, without regard for | |||
the media in use within that session. Of particular note, file | the media in use within that session. Of particular note, file | |||
transfer may be done within a multimedia session containing an MSRP | transfer may be done within a multimedia session containing an MSRP | |||
session used for regular instant messaging. If file transfer is | session used for regular instant messaging. If file transfer is | |||
skipping to change at page 26, line 29 | skipping to change at page 27, line 29 | |||
The MSRP specification [RFC4975] defines a 'max-size' SDP attribute. | The MSRP specification [RFC4975] defines a 'max-size' SDP attribute. | |||
This attribute specifies the maximum number of octets of an MSRP | This attribute specifies the maximum number of octets of an MSRP | |||
message that the creator of the SDP is willing to receive (notice | message that the creator of the SDP is willing to receive (notice | |||
once more the definition of "MSRP message"). File receivers MAY add | once more the definition of "MSRP message"). File receivers MAY add | |||
a 'max-size' attribute to the MSRP "m=" line that specifies the file, | a 'max-size' attribute to the MSRP "m=" line that specifies the file, | |||
indicating the maximum number of octets of an MSRP message. 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 | senders MUST NOT exceed the 'max-size' limit for any message sent in | |||
the resulting session. | the resulting session. | |||
In the absence of a 'file-range' attribute in the SDP, the MSRP file | In the absence of a 'file-range' attribute in the SDP, the MSRP file | |||
transfer MUST start with the first byte of the file and end with the | transfer MUST start with the first octet of the file and end with the | |||
last byte (i.e., the whole file is transferred). If a 'file-range' | last octet (i.e., the whole file is transferred). If a 'file-range' | |||
attribute is present in SDP, the file sender application MUST extract | attribute is present in SDP, the file sender application MUST extract | |||
the indicated range of bytes from the file (start and stop offset | the indicated range of octets from the file (start and stop offset | |||
bytes). Then the file sender application MAY wrap those bytes in an | octets, both inclusive). Then the file sender application MAY wrap | |||
appropriate wrapper. MSRP mandates implementations to implement the | those octets in an appropriate wrapper. MSRP mandates | |||
message/cpim wrapper [RFC3862]. Usage of a wrapper is negotiated in | implementations to implement the message/cpim wrapper [RFC3862]. | |||
the SDP (see Section 8.6 in RFC 4975 [RFC4975]). Last, the file | Usage of a wrapper is negotiated in the SDP (see Section 8.6 in RFC | |||
sender application delivers the content (e.g., the message/cpim body) | 4975 [RFC4975]). Last, the file sender application delivers the | |||
to MSRP for transportation. MSRP will consider the delivered content | content (e.g., the message/cpim body) to MSRP for transportation. | |||
as a whole message, and will start numbering bytes with the number 1. | 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'. | Note that the default content disposition of MSRP bodies is 'render'. | |||
When MSRP is used to transfer files, the MSRP Content-Disposition | When MSRP is used to transfer files, the MSRP Content-Disposition | |||
header can also take the value 'attachment' as indicated in | header can also take the value 'attachment' as indicated in | |||
Section 7. | Section 7. | |||
Once the file transfer is completed, the file sender SHOULD close the | Once the file transfer is completed, the file sender SHOULD close the | |||
MSRP session and MUST behave according to the MSRP [RFC4975] | MSRP session and MUST behave according to the MSRP [RFC4975] | |||
procedures with respect to closing MSRP sessions. Note that MSRP | procedures with respect to closing MSRP sessions. Note that MSRP | |||
session management is not related to TCP connection management. As a | session management is not related to TCP connection management. As a | |||
skipping to change at page 27, line 35 | skipping to change at page 28, line 35 | |||
that includes an SDP body part and an icon body part. The file | that includes an SDP body part and an icon body part. The file | |||
receiver, not supporting multipart MIME types, will reject the SDP | receiver, not supporting multipart MIME types, will reject the SDP | |||
offer via a higher protocol mechanism (e.g., SIP). In this case, it | offer via a higher protocol mechanism (e.g., SIP). In this case, it | |||
is RECOMMENDED that the file sender removes the icon body part, | is RECOMMENDED that the file sender removes the icon body part, | |||
creates a single SDP body (i.e., without multipart MIME) and re-sends | creates a single SDP body (i.e., without multipart MIME) and re-sends | |||
the SDP offer again. This provides some backwards compatibility with | the SDP offer again. This provides some backwards compatibility with | |||
file receives that do not implement this specification and increases | file receives that do not implement this specification and increases | |||
the chances of getting the SDP accepted at the file receiver. | 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 | 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 bytes that | keep the size of icons restricted to the minimum number of octets | |||
provide significance. | that provide significance. | |||
9. Examples | 9. Examples | |||
9.1. Offerer sends a file to the Answerer | 9.1. Offerer sends a file to the Answerer | |||
This section shows an example flow for a file transfer scenario. The | This section shows an example flow for a file transfer scenario. The | |||
example assumes that SIP [RFC3261] is used to transport the SDP | example assumes that SIP [RFC3261] is used to transport the SDP | |||
offer/answer exchange, although the SIP details are briefly shown for | offer/answer exchange, although the SIP details are briefly shown for | |||
the sake of brevity. | the sake of brevity. | |||
Alice, the SDP offerer, wishes to send an image file to Bob (the | Alice, the SDP offerer, wishes to send an image file to Bob (the | |||
answerer). Alice's User Agent Client (UAC) creates a unidirectional | answerer). Alice's User Agent Client (UAC) creates a unidirectional | |||
SDP offer that contains the description of the file that she wants to | 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 | send to Bob's User Agent Server (UAS). The description also includes | |||
an icon representing the contents of the file to be transferred. The | an icon representing the contents of the file to be transferred. The | |||
sequence flow is shown in Figure 6. | sequence flow is shown in Figure 7. | |||
Alice's UAC Bob's UAS | Alice's UAC Bob's UAS | |||
| | | | | | |||
|(1) (SIP) INVITE | | |(1) (SIP) INVITE | | |||
|----------------------->| | |----------------------->| | |||
|(2) (SIP) 200 OK | | |(2) (SIP) 200 OK | | |||
|<-----------------------| | |<-----------------------| | |||
|(3) (SIP) ACK | | |(3) (SIP) ACK | | |||
|----------------------->| | |----------------------->| | |||
| | | | | | |||
skipping to change at page 28, line 31 | skipping to change at page 29, line 31 | |||
|(7) (MSRP) 200 OK | | |(7) (MSRP) 200 OK | | |||
|<-----------------------| | |<-----------------------| | |||
| | | | | | |||
|(8) (SIP) BYE | | |(8) (SIP) BYE | | |||
|----------------------->| | |----------------------->| | |||
|(9) (SIP) 200 OK | | |(9) (SIP) 200 OK | | |||
|<-----------------------| | |<-----------------------| | |||
| | | | | | |||
| | | | | | |||
Figure 6: Flow diagram of an offerer sending a file to an answerer | 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 | F1: Alice constructs an SDP description of the file to be sent and | |||
attaches it to a SIP INVITE request addressed to Bob. | attaches it to a SIP INVITE request addressed to Bob. | |||
INVITE sip:bob@example.com SIP/2.0 | INVITE sip:bob@example.com SIP/2.0 | |||
To: Bob <sip:bob@example.com> | To: Bob <sip:bob@example.com> | |||
From: Alice <sip:alice@example.com>;tag=1928301774 | From: Alice <sip:alice@example.com>;tag=1928301774 | |||
Call-ID: a84b4c76e66710 | Call-ID: a84b4c76e66710 | |||
CSeq: 1 INVITE | CSeq: 1 INVITE | |||
Max-Forwards: 70 | Max-Forwards: 70 | |||
skipping to change at page 29, line 51 | skipping to change at page 30, line 51 | |||
Content-Type: image/jpeg | Content-Type: image/jpeg | |||
Content-Transfer-Encoding: binary | Content-Transfer-Encoding: binary | |||
Content-ID: <id2@alicepc.example.com> | Content-ID: <id2@alicepc.example.com> | |||
Content-Length: [length of image] | Content-Length: [length of image] | |||
Content-Disposition: icon | Content-Disposition: icon | |||
[...small preview icon of the file...] | [...small preview icon of the file...] | |||
--boundary71-- | --boundary71-- | |||
Figure 7: INVITE request containing an SDP offer for file transfer | Figure 8: INVITE request containing an SDP offer for file transfer | |||
NOTE: The Content-Type header field and the 'file-selector' | NOTE: The Content-Type header field and the 'file-selector' | |||
attribute in the above figure are split in several lines for | attribute in the above figure are split in several lines for | |||
formatting purposes. Real implementations will encode it in a | formatting purposes. Real implementations will encode it in a | |||
single line. | single line. | |||
From now on we omit the SIP details for the sake of brevity. | From now on we omit the SIP details for the sake of brevity. | |||
F2: Bob receives the INVITE request, inspects the SDP offer and | F2: Bob receives the INVITE request, inspects the SDP offer and | |||
extracts the icon body, checks the creation date and file size, and | extracts the icon body, checks the creation date and file size, and | |||
decides to accept the file transfer. So Bob creates the following | decides to accept the file transfer. So Bob creates the following | |||
skipping to change at page 30, line 31 | skipping to change at page 31, line 31 | |||
m=message 8888 TCP/MSRP * | m=message 8888 TCP/MSRP * | |||
a=recvonly | a=recvonly | |||
a=accept-types:message/cpim | a=accept-types:message/cpim | |||
a=accept-wrapped-types:* | a=accept-wrapped-types:* | |||
a=path:msrp://bobpc.example.com:8888/9di4ea;tcp | a=path:msrp://bobpc.example.com:8888/9di4ea;tcp | |||
a=file-selector:name:"My cool picture.jpg" type:image/jpeg | a=file-selector:name:"My cool picture.jpg" type:image/jpeg | |||
size:4092 hash:sha-1: | 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 | 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-transfer-id:Q6LMoGymJdh0IKIgD6wD0jkcfgva4xvE | |||
Figure 8: SDP answer accepting the SDP offer for file transfer | Figure 9: SDP answer accepting the SDP offer for file transfer | |||
NOTE: The 'file-selector' attribute in the above figure is split | NOTE: The 'file-selector' attribute in the above figure is split | |||
in three lines for formatting purposes. Real implementations will | in three lines for formatting purposes. Real implementations will | |||
encode it in a single line. | encode it in a single line. | |||
F4: Alice opens a TCP connection to Bob and creates an MSRP SEND | F4: Alice opens a TCP connection to Bob and creates an MSRP SEND | |||
request. This SEND request contains the first chunk of the file. | request. This SEND request contains the first chunk of the file. | |||
MSRP d93kswow SEND | MSRP d93kswow SEND | |||
To-Path: msrp://bobpc.example.com:8888/9di4ea;tcp | To-Path: msrp://bobpc.example.com:8888/9di4ea;tcp | |||
skipping to change at page 31, line 23 | skipping to change at page 32, line 23 | |||
From: Alice <sip:alice@example.com> | From: Alice <sip:alice@example.com> | |||
DateTime: 2006-05-15T15:02:31-03:00 | DateTime: 2006-05-15T15:02:31-03:00 | |||
Content-Disposition: render; filename="My cool picture.jpg"; | Content-Disposition: render; filename="My cool picture.jpg"; | |||
creation-date="Mon, 15 May 2006 15:01:31 +0300"; | creation-date="Mon, 15 May 2006 15:01:31 +0300"; | |||
size=4092 | size=4092 | |||
Content-Type: image/jpeg | Content-Type: image/jpeg | |||
... first set of bytes of the JPEG image ... | ... first set of bytes of the JPEG image ... | |||
-------d93kswow+ | -------d93kswow+ | |||
Figure 9: MSRP SEND request containing the first chunk of actual file | 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 | 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) | send pipelined chunks, so there is no need to wait for the 200 (OK) | |||
response from the previous chunk. | response from the previous chunk. | |||
MSRP op2nc9a SEND | MSRP op2nc9a SEND | |||
To-Path: msrp://bobpc.example.com:8888/9di4ea;tcp | To-Path: msrp://bobpc.example.com:8888/9di4ea;tcp | |||
From-Path: msrp://alicepc.example.com:7654/iau39;tcp | From-Path: msrp://alicepc.example.com:7654/iau39;tcp | |||
Message-ID: 12339sdqwer | Message-ID: 12339sdqwer | |||
Byte-Range: 2049-4385/4385 | Byte-Range: 2049-4385/4385 | |||
Content-Type: message/cpim | Content-Type: message/cpim | |||
... second set of bytes of the JPEG image ... | ... second set of bytes of the JPEG image ... | |||
-------op2nc9a$ | -------op2nc9a$ | |||
Figure 10: MSRP SEND request containing the second chunk of actual | Figure 11: MSRP SEND request containing the second chunk of actual | |||
file | file | |||
F6: Bob acknowledges the reception of the first chunk. | F6: Bob acknowledges the reception of the first chunk. | |||
MSRP d93kswow 200 OK | MSRP d93kswow 200 OK | |||
To-Path: msrp://alicepc.example.com:7654/iau39;tcp | To-Path: msrp://alicepc.example.com:7654/iau39;tcp | |||
From-Path: msrp://bobpc.example.com:8888/9di4ea;tcp | From-Path: msrp://bobpc.example.com:8888/9di4ea;tcp | |||
Byte-Range: 1-2048/4385 | Byte-Range: 1-2048/4385 | |||
-------d93kswow$ | -------d93kswow$ | |||
Figure 11: MSRP 200 OK response | Figure 12: MSRP 200 OK response | |||
F7: Bob acknowledges the reception of the second chunk. | F7: Bob acknowledges the reception of the second chunk. | |||
MSRP op2nc9a 200 OK | MSRP op2nc9a 200 OK | |||
To-Path: msrp://alicepc.example.com:7654/iau39;tcp | To-Path: msrp://alicepc.example.com:7654/iau39;tcp | |||
From-Path: msrp://bobpc.example.com:8888/9di4ea;tcp | From-Path: msrp://bobpc.example.com:8888/9di4ea;tcp | |||
Byte-Range: 2049-4385/4385 | Byte-Range: 2049-4385/4385 | |||
-------op2nc9a$ | -------op2nc9a$ | |||
Figure 12: MSRP 200 OK response | Figure 13: MSRP 200 OK response | |||
F8: Alice terminates the SIP session by sending a SIP BYE request. | 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 | F9: Bob acknowledges the reception of the BYE request and sends a 200 | |||
(OK) response. | (OK) response. | |||
9.2. Offerer requests a file from the Answerer and second file transfer | 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 | 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 | 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 | 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 | 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 | selector that points to the specific file. So, Alice creates an SDP | |||
offer that contains the file descriptor. Bob accepts the file | offer that contains the file descriptor. Bob accepts the file | |||
transfer and sends the file to Alice. When Alice has completely | 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. | received Bob's file, she intends to send a new image file to Bob. | |||
Therefore Alice re-uses the existing SDP media line with different | Therefore Alice re-uses the existing SDP media line with different | |||
attributes and updates the description of the new file she wants to | attributes and updates the description of the new file she wants to | |||
send to Bob's User Agent Server (UAS). In particular, Alice creates | send to Bob's User Agent Server (UAS). In particular, Alice creates | |||
a new file transfer identifier since this is a new file transfer | a new file transfer identifier since this is a new file transfer | |||
operation. Figure 13 shows the sequence flow. | operation. Figure 14 shows the sequence flow. | |||
Alice's UAC Bob's UAS | Alice's UAC Bob's UAS | |||
| | | | | | |||
|(1) (SIP) INVITE | | |(1) (SIP) INVITE | | |||
|----------------------->| | |----------------------->| | |||
|(2) (SIP) 200 OK | | |(2) (SIP) 200 OK | | |||
|<-----------------------| | |<-----------------------| | |||
|(3) (SIP) ACK | | |(3) (SIP) ACK | | |||
|----------------------->| | |----------------------->| | |||
| | | | | | |||
skipping to change at page 33, line 38 | skipping to change at page 34, line 38 | |||
|(10) (MSRP) 200 OK | | |(10) (MSRP) 200 OK | | |||
|<-----------------------| | |<-----------------------| | |||
| | | | | | |||
|(11) (SIP) BYE | | |(11) (SIP) BYE | | |||
|<-----------------------| | |<-----------------------| | |||
|(12) (SIP) 200 OK | | |(12) (SIP) 200 OK | | |||
|----------------------->| | |----------------------->| | |||
| | | | | | |||
| | | | | | |||
Figure 13: Flow diagram of an offerer requesting a file from the | Figure 14: Flow diagram of an offerer requesting a file from the | |||
answerer and then sending a file to the answer | answerer and then sending a file to the answer | |||
F1: Alice constructs an SDP description of the file she wants to | F1: Alice constructs an SDP description of the file she wants to | |||
receive and attaches the SDP offer to a SIP INVITE request addressed | receive and attaches the SDP offer to a SIP INVITE request addressed | |||
to Bob. | to Bob. | |||
INVITE sip:bob@example.com SIP/2.0 | INVITE sip:bob@example.com SIP/2.0 | |||
To: Bob <sip:bob@example.com> | To: Bob <sip:bob@example.com> | |||
From: Alice <sip:alice@example.com>;tag=1928301774 | From: Alice <sip:alice@example.com>;tag=1928301774 | |||
Call-ID: a84b4c76e66710 | Call-ID: a84b4c76e66710 | |||
skipping to change at page 34, line 30 | skipping to change at page 35, line 30 | |||
t=0 0 | t=0 0 | |||
m=message 7654 TCP/MSRP * | m=message 7654 TCP/MSRP * | |||
a=recvonly | a=recvonly | |||
a=accept-types:message/cpim | a=accept-types:message/cpim | |||
a=accept-wrapped-types:* | a=accept-wrapped-types:* | |||
a=path:msrp://alicepc.example.com:7654/jshA7we;tcp | a=path:msrp://alicepc.example.com:7654/jshA7we;tcp | |||
a=file-selector:hash:sha-1: | 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 | 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 | a=file-transfer-id:aCQYuBRVoUPGVsFZkCK98vzcX2FXDIk2 | |||
Figure 14: INVITE request containing an SDP offer for file transfer | Figure 15: INVITE request containing an SDP offer for file transfer | |||
NOTE: The 'file-selector' attribute in the above figure is split | NOTE: The 'file-selector' attribute in the above figure is split | |||
in two lines for formatting purposes. Real implementations will | in two lines for formatting purposes. Real implementations will | |||
encode it in a single line. | encode it in a single line. | |||
From now on we omit the SIP details for the sake of brevity. | From now on we omit the SIP details for the sake of brevity. | |||
F2: Bob receives the INVITE request, inspects the SDP offer, computes | F2: Bob receives the INVITE request, inspects the SDP offer, computes | |||
the file descriptor and finds a local file whose hash equals the one | 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 | indicated in the SDP. Bob accepts the file transfer and creates an | |||
skipping to change at page 35, line 19 | skipping to change at page 36, line 19 | |||
t=0 0 | t=0 0 | |||
m=message 8888 TCP/MSRP * | m=message 8888 TCP/MSRP * | |||
a=sendonly | a=sendonly | |||
a=accept-types:message/cpim | a=accept-types:message/cpim | |||
a=accept-wrapped-types:* | a=accept-wrapped-types:* | |||
a=path:msrp://bobpc.example.com:8888/9di4ea;tcp | a=path:msrp://bobpc.example.com:8888/9di4ea;tcp | |||
a=file-selector:type:image/jpeg hash:sha-1: | 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 | 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 | a=file-transfer-id:aCQYuBRVoUPGVsFZkCK98vzcX2FXDIk2 | |||
Figure 15: SDP answer accepting the SDP offer for file transfer | Figure 16: SDP answer accepting the SDP offer for file transfer | |||
NOTE: The 'file-selector' attribute in the above figure is split | NOTE: The 'file-selector' attribute in the above figure is split | |||
in two lines for formatting purposes. Real implementations will | in two lines for formatting purposes. Real implementations will | |||
encode it in a single line. | encode it in a single line. | |||
F4: Alice opens a TCP connection to Bob. Bob then creates an MSRP | F4: Alice opens a TCP connection to Bob. Bob then creates an MSRP | |||
SEND request that contains the file. | SEND request that contains the file. | |||
MSRP d93kswow SEND | MSRP d93kswow SEND | |||
To-Path: msrp://alicepc.example.com:7654/jshA7we;tcp | To-Path: msrp://alicepc.example.com:7654/jshA7we;tcp | |||
skipping to change at page 35, line 48 | skipping to change at page 36, line 48 | |||
Content-Disposition: render; filename="My cool photo.jpg"; | Content-Disposition: render; filename="My cool photo.jpg"; | |||
creation-date="Mon, 15 May 2006 15:01:31 +0300"; | creation-date="Mon, 15 May 2006 15:01:31 +0300"; | |||
modification-date="Mon, 15 May 2006 16:04:53 +0300"; | modification-date="Mon, 15 May 2006 16:04:53 +0300"; | |||
read-date="Mon, 16 May 2006 09:12:27 +0300"; | read-date="Mon, 16 May 2006 09:12:27 +0300"; | |||
size=1931 | size=1931 | |||
Content-Type: image/jpeg | Content-Type: image/jpeg | |||
...binary JPEG image... | ...binary JPEG image... | |||
-------d93kswow$ | -------d93kswow$ | |||
Figure 16: MSRP SEND request containing the actual file | Figure 17: MSRP SEND request containing the actual file | |||
F5: Alice acknowledges the reception of the SEND request. | F5: Alice acknowledges the reception of the SEND request. | |||
MSRP d93kswow 200 OK | MSRP d93kswow 200 OK | |||
To-Path: msrp://bobpc.example.com:8888/9di4ea;tcp | To-Path: msrp://bobpc.example.com:8888/9di4ea;tcp | |||
From-Path: msrp://alicepc.example.com:7654/jshA7we;tcp | From-Path: msrp://alicepc.example.com:7654/jshA7we;tcp | |||
Byte-Range: 1-2027/2027 | Byte-Range: 1-2027/2027 | |||
-------d93kswow$ | -------d93kswow$ | |||
Figure 17: MSRP 200 OK response | Figure 18: MSRP 200 OK response | |||
F6: Alice re-uses the existing SDP media line inserting the | F6: Alice re-uses the existing SDP media line inserting the | |||
description of the file to be sent and attaches it to a SIP re-INVITE | 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 | request addressed to Bob. Alice reuses the TCP port number for the | |||
MSRP stream, but changes the MSRP session and the 'file-transfer-id' | MSRP stream, but changes the MSRP session and the 'file-transfer-id' | |||
value according to this specification. | value according to this specification. | |||
INVITE sip:bob@example.com SIP/2.0 | INVITE sip:bob@example.com SIP/2.0 | |||
To: Bob <sip:bob@example.com>;tag=1928323431 | To: Bob <sip:bob@example.com>;tag=1928323431 | |||
From: Alice <sip:alice@example.com>;tag=1928301774 | From: Alice <sip:alice@example.com>;tag=1928301774 | |||
skipping to change at page 37, line 51 | skipping to change at page 38, line 51 | |||
Content-Type: image/jpeg | Content-Type: image/jpeg | |||
Content-Transfer-Encoding: binary | Content-Transfer-Encoding: binary | |||
Content-ID: <id3@alicepc.example.com> | Content-ID: <id3@alicepc.example.com> | |||
Content-Length: [length of image] | Content-Length: [length of image] | |||
Content-Disposition: icon | Content-Disposition: icon | |||
[..small preview icon...] | [..small preview icon...] | |||
--boundary71-- | --boundary71-- | |||
Figure 18: Reuse of the SDP in a second file transfer | Figure 19: Reuse of the SDP in a second file transfer | |||
NOTE: The Content-Type header field and the 'file-selector' | NOTE: The Content-Type header field and the 'file-selector' | |||
attribute in the above figure are split in several lines for | attribute in the above figure are split in several lines for | |||
formatting purposes. Real implementations will encode it in a | formatting purposes. Real implementations will encode it in a | |||
single line. | single line. | |||
F7: Bob receives the re-INVITE request, inspects the SDP offer and | F7: Bob receives the re-INVITE request, inspects the SDP offer and | |||
extracts the icon body, checks the creation date and the file size, | extracts the icon body, checks the creation date and the file size, | |||
and decides to accept the file transfer. So Bob creates an SDP | 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 | answer where he reuses the same TCP port number, but changes his MSRP | |||
session, according to the procedures of this specification. | session, according to the procedures of this specification. | |||
skipping to change at page 38, line 31 | skipping to change at page 39, line 31 | |||
a=recvonly | a=recvonly | |||
a=accept-types:message/cpim | a=accept-types:message/cpim | |||
a=accept-wrapped-types:* | a=accept-wrapped-types:* | |||
a=path:msrp://bobpc.example.com:8888/eh10dsk;tcp | a=path:msrp://bobpc.example.com:8888/eh10dsk;tcp | |||
a=file-selector:name:"sunset.jpg" type:image/jpeg | a=file-selector:name:"sunset.jpg" type:image/jpeg | |||
size:4096 hash:sha-1: | 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 | 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-transfer-id:ZVE8MfI9mhAdZ8GyiNMzNN5dpqgzQlCO | |||
a=file-disposition:render | a=file-disposition:render | |||
Figure 19: SDP answer accepting the SDP offer for file transfer | Figure 20: SDP answer accepting the SDP offer for file transfer | |||
NOTE: The 'file-selector' attribute in the above figure is split | NOTE: The 'file-selector' attribute in the above figure is split | |||
in three lines for formatting purposes. Real implementations will | in three lines for formatting purposes. Real implementations will | |||
encode it in a single line. | encode it in a single line. | |||
F9: If a TCP connection towards Bob is already open, Alice re-uses | F9: If a TCP connection towards Bob is already open, Alice re-uses | |||
that TCP connection to send an MSRP SEND request that contains the | that TCP connection to send an MSRP SEND request that contains the | |||
file. | file. | |||
MSRP d95ksxox SEND | MSRP d95ksxox SEND | |||
skipping to change at page 39, line 23 | skipping to change at page 40, line 23 | |||
From: Alice <sip:alice@example.com> | From: Alice <sip:alice@example.com> | |||
DateTime: 2006-05-21T13:02:15-03:00 | DateTime: 2006-05-21T13:02:15-03:00 | |||
Content-Disposition: render; filename="Sunset.jpg"; | Content-Disposition: render; filename="Sunset.jpg"; | |||
creation-date="Sun, 21 May 2006 13:02:15 -0300"; | creation-date="Sun, 21 May 2006 13:02:15 -0300"; | |||
size=1931 | size=1931 | |||
Content-Type: image/jpeg | Content-Type: image/jpeg | |||
...binary JPEG image... | ...binary JPEG image... | |||
-------d95ksxox+ | -------d95ksxox+ | |||
Figure 20: MSRP SEND request containing the actual file | Figure 21: MSRP SEND request containing the actual file | |||
F10: Bob acknowledges the reception of the SEND request. | F10: Bob acknowledges the reception of the SEND request. | |||
MSRP d95ksxox 200 OK | MSRP d95ksxox 200 OK | |||
To-Path: msrp://alicepc.example.com:7654/iau39;tcp | To-Path: msrp://alicepc.example.com:7654/iau39;tcp | |||
From-Path: msrp://bobpc.example.com:8888/eh10dsk;tcp | From-Path: msrp://bobpc.example.com:8888/eh10dsk;tcp | |||
Byte-Range: 1-2027/2027 | Byte-Range: 1-2027/2027 | |||
-------d95ksxox$ | -------d95ksxox$ | |||
Figure 21: MSRP 200 OK response | Figure 22: MSRP 200 OK response | |||
F11: Then Bob terminates the SIP session by sending a SIP BYE | F11: Then Bob terminates the SIP session by sending a SIP BYE | |||
request. | request. | |||
F12: Alice acknowledges the reception of the BYE request and sends a | F12: Alice acknowledges the reception of the BYE request and sends a | |||
200 (OK) response. | 200 (OK) response. | |||
9.3. Example of a capability indication | 9.3. Example of a capability indication | |||
Alice sends an OPTIONS request to Bob (this request does not contain | Alice sends an OPTIONS request to Bob (this request does not contain | |||
SDP). Bob answers with a 200 (OK) response that contain the SDP | SDP). Bob answers with a 200 (OK) response that contain the SDP | |||
shown in Figure 23. The SDP indicates support for CPIM messages that | shown in Figure 24. The SDP indicates support for CPIM messages that | |||
can contain other MIME types. The maximum MSRP message size that the | can contain other MIME types. The maximum MSRP message size that the | |||
endpoint can receive is 20000 octets. The presence of the 'file- | endpoint can receive is 20000 octets. The presence of the 'file- | |||
selector' attribute indicates support for the file transfer offer/ | selector' attribute indicates support for the file transfer offer/ | |||
answer mechanism. | answer mechanism. | |||
Alice's UAC Bob's UAS | Alice's UAC Bob's UAS | |||
| | | | | | |||
|(1) (SIP) OPTIONS | | |(1) (SIP) OPTIONS | | |||
|----------------------->| | |----------------------->| | |||
|(2) (SIP) 200 OK | | |(2) (SIP) 200 OK | | |||
| with SDP | | | with SDP | | |||
|<-----------------------| | |<-----------------------| | |||
| | | | | | |||
| | | | | | |||
Figure 22: Flow diagram of a capability request | Figure 23: Flow diagram of a capability request | |||
v=0 | v=0 | |||
o=bob 2890844656 2890855439 IN IP4 bobpc.example.com | o=bob 2890844656 2890855439 IN IP4 bobpc.example.com | |||
s=- | s=- | |||
c=IN IP4 bobpc.example.com | c=IN IP4 bobpc.example.com | |||
t=0 0 | t=0 0 | |||
m=message 0 TCP/MSRP * | m=message 0 TCP/MSRP * | |||
a=accept-types:message/cpim | a=accept-types:message/cpim | |||
a=accept-wrapped-types:* | a=accept-wrapped-types:* | |||
a=max-size:20000 | a=max-size:20000 | |||
a=file-selector | a=file-selector | |||
Figure 23: SDP of the 200 (OK) response to an OPTIONS request | Figure 24: SDP of the 200 (OK) response to an OPTIONS request | |||
10. Security Considerations | 10. Security Considerations | |||
The SDP attributes defined in this specification identify a file to | The SDP attributes defined in this specification identify a file to | |||
be transferred between two endpoints. An endpoint can offer to send | 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 file to the other endpoint or request to receive the file from | |||
the other endpoint. In the former case, an attacker modifying those | the other endpoint. In the former case, an attacker modifying those | |||
SDP attributes could cheat the receiver making it think that the file | SDP attributes could cheat the receiver making it think that the file | |||
to be transferred was a different one. In the latter case, the | to be transferred was a different one. In the latter case, the | |||
attacker could make the sender send a different file than the one | attacker could make the sender send a different file than the one | |||
skipping to change at page 41, line 14 | skipping to change at page 42, line 14 | |||
It is possible that a malicious or misbehaving implementation tries | It is possible that a malicious or misbehaving implementation tries | |||
to exhaust the resources of the remote endpoint, e.g., the internal | to exhaust the resources of the remote endpoint, e.g., the internal | |||
memory or the file system, by sending very large files. To protect | memory or the file system, by sending very large files. To protect | |||
from this attack, an SDP answer SHOULD first verify the identity of | from this attack, an SDP answer SHOULD first verify the identity of | |||
the SDP offerer, and perhaps only accept file transfers from trusted | the SDP offerer, and perhaps only accept file transfers from trusted | |||
sources. Mechanisms to verify the identity of the file sender depend | sources. Mechanisms to verify the identity of the file sender depend | |||
on the high-level protocol that carries the SDP, for example, SIP | on the high-level protocol that carries the SDP, for example, SIP | |||
[RFC3261] and MSRP [RFC4975]. | [RFC3261] and MSRP [RFC4975]. | |||
It is also RECOMMENDED that implementations take measurements to | It is also RECOMMENDED that implementations take measures to avoid | |||
avoid attacks on resource exhaustion, for example, by limiting the | attacks on resource exhaustion, for example, by limiting the size of | |||
size of received files, verifying that there is enough space in the | received files, verifying that there is enough space in the file | |||
file system to store the file prior to its reception, or limiting the | system to store the file prior to its reception, or limiting the | |||
number of simultaneous file transfers. | number of simultaneous file transfers. | |||
File receivers MUST also sanitize all input, such as the local file | 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. | 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 | This is to prevent the existence of meaningful characters to the | |||
local operating system that could damage it. | local operating system that could damage it. | |||
Once a file has been transferred the file receiver must take care of | Once a file has been transferred the file receiver must take care of | |||
it. Typically file transfer is a commonly used mechanism for | it. Typically file transfer is a commonly used mechanism for | |||
transmitting computer virus, spyware, and other types of malware. | transmitting computer virus, spyware, and other types of malware. | |||
skipping to change at page 41, line 49 | skipping to change at page 42, line 49 | |||
This memo provides instructions to IANA to register a number of media | This memo provides instructions to IANA to register a number of media | |||
level only attributes in the Session Description Protocol Parameters | level only attributes in the Session Description Protocol Parameters | |||
registry [4]. The registration data, according to RFC 4566 [RFC4566] | registry [4]. The registration data, according to RFC 4566 [RFC4566] | |||
follows. | follows. | |||
Note to the RFC Editor: replace "RFC XXXX" with the RFC number of | Note to the RFC Editor: replace "RFC XXXX" with the RFC number of | |||
this specification. | this specification. | |||
11.1.1. Registration of the file-selector attribute | 11.1.1. Registration of the file-selector attribute | |||
Contact: Miguel Garcia <miguel.garcia@nsn.com> | Contact: Miguel Garcia <miguel.a.garcia@ericsson.com> | |||
Phone: +358 71400 4000 | Phone: +34 91 339 1000 | |||
Attribute name: file-selector | Attribute name: file-selector | |||
Long-form attribute name: File Selector | Long-form attribute name: File Selector | |||
Type of attribute: media level only | Type of attribute: media level only | |||
This attribute is subject to the charset attribute | This attribute is subject to the charset attribute | |||
Description: This attribute unambiguously identify a file by | Description: This attribute unambiguously identify a file by | |||
indicating a combination of the 4-tuple composed of the name, | indicating a combination of the 4-tuple composed of the name, | |||
size, type, and hash of the file. | size, type, and hash of the file. | |||
Specification: RFC XXXX | Specification: RFC XXXX | |||
11.1.2. Registration of the file-transfer-id attribute | 11.1.2. Registration of the file-transfer-id attribute | |||
Contact: Miguel Garcia <miguel.garcia@nsn.com> | Contact: Miguel Garcia <miguel.a.garcia@ericsson.com> | |||
Phone: +358 71400 4000 | Phone: +34 91 339 1000 | |||
Attribute name: file-transfer-id | Attribute name: file-transfer-id | |||
Long-form attribute name: File Transfer Identifier | Long-form attribute name: File Transfer Identifier | |||
Type of attribute: media level only | Type of attribute: media level only | |||
This attribute is subject to the charset attribute | This attribute is subject to the charset attribute | |||
Description: This attribute contains a unique identifier of the | Description: This attribute contains a unique identifier of the | |||
file transfer operation within the session. | file transfer operation within the session. | |||
Specification: RFC XXXX | Specification: RFC XXXX | |||
11.1.3. Registration of the file-disposition attribute | 11.1.3. Registration of the file-disposition attribute | |||
Contact: Miguel Garcia <miguel.garcia@nsn.com> | Contact: Miguel Garcia <miguel.a.garcia@ericsson.com> | |||
Phone: +358 71400 4000 | Phone: +34 91 339 1000 | |||
Attribute name: file-disposition | Attribute name: file-disposition | |||
Long-form attribute name: File Disposition | Long-form attribute name: File Disposition | |||
Type of attribute: media level only | Type of attribute: media level only | |||
This attribute is not subject to the charset attribute | This attribute is not subject to the charset attribute | |||
Description: This attribute provides a suggestion to the other | Description: This attribute provides a suggestion to the other | |||
endpoint about the intended disposition of the file | endpoint about the intended disposition of the file | |||
Specification: RFC XXXX | Specification: RFC XXXX | |||
11.1.4. Registration of the file-date attribute | 11.1.4. Registration of the file-date attribute | |||
Contact: Miguel Garcia <miguel.garcia@nsn.com> | Contact: Miguel Garcia <miguel.a.garcia@ericsson.com> | |||
Phone: +358 71400 4000 | Phone: +34 91 339 1000 | |||
Attribute name: file-date | Attribute name: file-date | |||
Long-form attribute name: | Long-form attribute name: | |||
Type of attribute: media level only | Type of attribute: media level only | |||
This attribute is not subject to the charset attribute | This attribute is not subject to the charset attribute | |||
Description: This attribute indicates the dates at which the file | Description: This attribute indicates the dates at which the file | |||
was created, modified, or last read. | was created, modified, or last read. | |||
Specification: RFC XXXX | Specification: RFC XXXX | |||
11.1.5. Registration of the file-icon attribute | 11.1.5. Registration of the file-icon attribute | |||
Contact: Miguel Garcia <miguel.garcia@nsn.com> | Contact: Miguel Garcia <miguel.a.garcia@ericsson.com> | |||
Phone: +358 71400 4000 | Phone: +34 91 339 1000 | |||
Attribute name: file-icon | Attribute name: file-icon | |||
Long-form attribute name: File Icon | Long-form attribute name: File Icon | |||
Type of attribute: media level only | Type of attribute: media level only | |||
This attribute is not subject to the charset attribute | This attribute is not subject to the charset attribute | |||
Description: For image files, this attribute contains a pointer to | Description: For image files, this attribute contains a pointer to | |||
a body that includes a small preview icon representing the | a body that includes a small preview icon representing the | |||
contents of the file to be transferred | contents of the file to be transferred | |||
Specification: RFC XXXX | Specification: RFC XXXX | |||
11.1.6. Registration of the file-range attribute | 11.1.6. Registration of the file-range attribute | |||
Contact: Miguel Garcia <miguel.garcia@nsn.com> | Contact: Miguel Garcia <miguel.a.garcia@ericsson.com> | |||
Phone: +358 71400 4000 | Phone: +34 91 339 1000 | |||
Attribute name: file-range | Attribute name: file-range | |||
Long-form attribute name: File Range | Long-form attribute name: File Range | |||
Type of attribute: media level only | Type of attribute: media level only | |||
This attribute is not subject to the charset attribute | This attribute is not subject to the charset attribute | |||
Description: it contains the range of transferred bytes of the | Description: it contains the range of transferred octets of the | |||
file | file | |||
Specification: RFC XXXX | Specification: RFC XXXX | |||
12. Acknowledgements | 12. Acknowledgements | |||
The authors would like to thank Mats Stille, Nancy Greene, Adamu | The authors would like to thank Mats Stille, Nancy Greene, Adamu | |||
Haruna, and Arto Leppisaari for discussing initial concepts described | Haruna, and Arto Leppisaari for discussing initial concepts described | |||
in this memo. Thanks to Pekka Kuure for reviewing initial versions | in this memo. Thanks to Pekka Kuure for reviewing initial versions | |||
this document and providing helpful comments. Joerg Ott, Jiwey Wang, | this document and providing helpful comments. Joerg Ott, Jiwey Wang, | |||
Amitkumar Goel, Sudha Vs, Dan Wing, Juuso Lehtinen, Remi Denis- | Amitkumar Goel, Sudha Vs, Dan Wing, Juuso Lehtinen, Remi Denis- | |||
skipping to change at page 44, line 15 | skipping to change at page 45, line 15 | |||
[RFC2183] Troost, R., Dorner, S., and K. Moore, "Communicating | [RFC2183] Troost, R., Dorner, S., and K. Moore, "Communicating | |||
Presentation Information in Internet Messages: The | Presentation Information in Internet Messages: The | |||
Content-Disposition Header Field", RFC 2183, August 1997. | Content-Disposition Header Field", RFC 2183, August 1997. | |||
[RFC2387] Levinson, E., "The MIME Multipart/Related Content-type", | [RFC2387] Levinson, E., "The MIME Multipart/Related Content-type", | |||
RFC 2387, August 1998. | RFC 2387, August 1998. | |||
[RFC2392] Levinson, E., "Content-ID and Message-ID Uniform Resource | [RFC2392] Levinson, E., "Content-ID and Message-ID Uniform Resource | |||
Locators", RFC 2392, August 1998. | Locators", RFC 2392, August 1998. | |||
[RFC2822] Resnick, P., "Internet Message Format", RFC 2822, | ||||
April 2001. | ||||
[RFC3174] Eastlake, D. and P. Jones, "US Secure Hash Algorithm 1 | [RFC3174] Eastlake, D. and P. Jones, "US Secure Hash Algorithm 1 | |||
(SHA1)", RFC 3174, September 2001. | (SHA1)", RFC 3174, September 2001. | |||
[RFC3264] Rosenberg, J. and H. Schulzrinne, "An Offer/Answer Model | [RFC3264] Rosenberg, J. and H. Schulzrinne, "An Offer/Answer Model | |||
with Session Description Protocol (SDP)", RFC 3264, | with Session Description Protocol (SDP)", RFC 3264, | |||
June 2002. | June 2002. | |||
[RFC3629] Yergeau, F., "UTF-8, a transformation format of ISO | [RFC3629] Yergeau, F., "UTF-8, a transformation format of ISO | |||
10646", STD 63, RFC 3629, November 2003. | 10646", STD 63, RFC 3629, November 2003. | |||
skipping to change at page 44, line 44 | skipping to change at page 45, line 41 | |||
[RFC4566] Handley, M., Jacobson, V., and C. Perkins, "SDP: Session | [RFC4566] Handley, M., Jacobson, V., and C. Perkins, "SDP: Session | |||
Description Protocol", RFC 4566, July 2006. | Description Protocol", RFC 4566, July 2006. | |||
[RFC4975] Campbell, B., Mahy, R., and C. Jennings, "The Message | [RFC4975] Campbell, B., Mahy, R., and C. Jennings, "The Message | |||
Session Relay Protocol (MSRP)", RFC 4975, September 2007. | Session Relay Protocol (MSRP)", RFC 4975, September 2007. | |||
[RFC5234] Crocker, D. and P. Overell, "Augmented BNF for Syntax | [RFC5234] Crocker, D. and P. Overell, "Augmented BNF for Syntax | |||
Specifications: ABNF", STD 68, RFC 5234, January 2008. | Specifications: ABNF", STD 68, RFC 5234, January 2008. | |||
[RFC5322] Resnick, P., Ed., "Internet Message Format", RFC 5322, | ||||
October 2008. | ||||
13.2. Informational References | 13.2. Informational References | |||
[RFC3261] Rosenberg, J., Schulzrinne, H., Camarillo, G., Johnston, | [RFC3261] Rosenberg, J., Schulzrinne, H., Camarillo, G., Johnston, | |||
A., Peterson, J., Sparks, R., Handley, M., and E. | A., Peterson, J., Sparks, R., Handley, M., and E. | |||
Schooler, "SIP: Session Initiation Protocol", RFC 3261, | Schooler, "SIP: Session Initiation Protocol", RFC 3261, | |||
June 2002. | June 2002. | |||
[RFC4028] Donovan, S. and J. Rosenberg, "Session Timers in the | [RFC4028] Donovan, S. and J. Rosenberg, "Session Timers in the | |||
Session Initiation Protocol (SIP)", RFC 4028, April 2005. | Session Initiation Protocol (SIP)", RFC 4028, April 2005. | |||
[RFC4483] Burger, E., "A Mechanism for Content Indirection in | [RFC4483] Burger, E., "A Mechanism for Content Indirection in | |||
Session Initiation Protocol (SIP) Messages", RFC 4483, | Session Initiation Protocol (SIP) Messages", RFC 4483, | |||
May 2006. | May 2006. | |||
[RFC4976] Jennings, C., Mahy, R., and A. Roach, "Relay Extensions | [RFC4976] Jennings, C., Mahy, R., and A. Roach, "Relay Extensions | |||
for the Message Sessions Relay Protocol (MSRP)", RFC 4976, | for the Message Sessions Relay Protocol (MSRP)", RFC 4976, | |||
September 2007. | September 2007. | |||
[I-D.ietf-rmt-flute-revised] | [I-D.ietf-rmt-flute-revised] | |||
Paila, T., "FLUTE - File Delivery over Unidirectional | Luby, M., Lehtonen, R., Roca, V., and T. Paila, "FLUTE - | |||
Transport", draft-ietf-rmt-flute-revised-05 (work in | File Delivery over Unidirectional Transport", | |||
progress), October 2007. | draft-ietf-rmt-flute-revised-06 (work in progress), | |||
September 2008. | ||||
URIs | URIs | |||
[1] <http://www.iana.org/assignments/media-types/> | [1] <http://www.iana.org/assignments/media-types/> | |||
[2] <http://www.iana.org/assignments/hash-function-text-names> | [2] <http://www.iana.org/assignments/hash-function-text-names> | |||
[3] <http://www.iana.org/assignments/mail-cont-disp> | [3] <http://www.iana.org/assignments/mail-cont-disp> | |||
[4] <http://www.iana.org/assignments/sdp-parameters> | [4] <http://www.iana.org/assignments/sdp-parameters> | |||
skipping to change at page 47, line 8 | skipping to change at page 48, line 8 | |||
expected that implementations support only a subset of the parameters | expected that implementations support only a subset of the parameters | |||
defined in Section 6. Those implementations will be able to use | defined in Section 6. Those implementations will be able to use | |||
regular SDP rules in order to ignore non-supported SDP parameters. | regular SDP rules in order to ignore non-supported SDP parameters. | |||
If all the information was encoded in a single SDP attribute, those | If all the information was encoded in a single SDP attribute, those | |||
rules, which relate to backwards compatibility, would need to be | rules, which relate to backwards compatibility, would need to be | |||
redefined specifically for that parameter. | redefined specifically for that parameter. | |||
Authors' Addresses | Authors' Addresses | |||
Miguel A. Garcia-Martin | Miguel A. Garcia-Martin | |||
Nokia Siemens Networks | Ericsson | |||
P.O.Box 6 | Calle Via de los Poblados 13 | |||
Nokia Siemens Networks, FIN 02022 | Madrid, ES 28033 | |||
Finland | Spain | |||
Phone: +358-71400-4000 | Email: miguel.a.garcia@ericsson.com | |||
Email: miguel.garcia@nsn.com | ||||
Markus Isomaki | Markus Isomaki | |||
Nokia | Nokia | |||
Keilalahdentie 2-4 | Keilalahdentie 2-4 | |||
Espoo 02150 | Espoo 02150 | |||
Finland | Finland | |||
Email: markus.isomaki@nokia.com | Email: markus.isomaki@nokia.com | |||
Gonzalo Camarillo | Gonzalo Camarillo | |||
End of changes. 78 change blocks. | ||||
248 lines changed or deleted | 293 lines changed or added | |||
This html diff was produced by rfcdiff 1.35. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |