summaryrefslogtreecommitdiff
path: root/doc/rfc/rfc5547.txt
blob: 411bd67df1a0a6aec4261bc7c335e02fd883ea83 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590
2591
2592
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2603
2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628
2629
2630
2631
2632
2633
2634
2635
2636
2637
2638
2639
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657
2658
2659
2660
2661
2662
2663
2664
2665
2666
2667
2668
2669
2670
2671
2672
2673
2674
2675
2676
2677
2678
2679
2680
2681
2682
2683
2684
2685
2686
2687
2688
2689
2690
2691
2692
2693
2694
2695
2696
2697
2698
2699
2700
2701
2702
2703
2704
2705
2706
2707
2708
2709
2710
2711
2712
2713
2714
2715
2716
2717
2718
2719
2720
2721
2722
2723
2724
2725
2726
2727
2728
2729
2730
2731
2732
2733
2734
2735
2736
2737
2738
2739
2740
2741
2742
2743
2744
2745
2746
2747
2748
2749
2750
2751
2752
2753
2754
2755
2756
2757
2758
2759
2760
2761
2762
2763
2764
2765
2766
2767
2768
2769
2770
2771
2772
2773
2774
2775
2776
2777
2778
2779
2780
2781
2782
2783
2784
2785
2786
2787
2788
2789
2790
2791
2792
2793
2794
2795
2796
2797
2798
2799
2800
2801
2802
2803
Network Working Group                                   M. Garcia-Martin
Request for Comments: 5547                                      Ericsson
Category: Standards Track                                     M. Isomaki
                                                                   Nokia
                                                            G. Camarillo
                                                               S. Loreto
                                                                Ericsson
                                                              P. Kyzivat
                                                           Cisco Systems
                                                                May 2009


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

Status of This Memo

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

Copyright Notice

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

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

Abstract

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



Garcia-Martin, et al.       Standards Track                     [Page 1]
^L
RFC 5547           SDP Offer/Answer for File Transfer           May 2009


Table of Contents

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









Garcia-Martin, et al.       Standards Track                     [Page 2]
^L
RFC 5547           SDP Offer/Answer for File Transfer           May 2009


1.  Introduction

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

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

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

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

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

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

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





Garcia-Martin, et al.       Standards Track                     [Page 3]
^L
RFC 5547           SDP Offer/Answer for File Transfer           May 2009


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

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

2.  Terminology

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

3.  Definitions

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

   o  Answer

   o  Answerer

   o  Offer

   o  Offerer

   Additionally, we define the following terms:

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

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

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






Garcia-Martin, et al.       Standards Track                     [Page 4]
^L
RFC 5547           SDP Offer/Answer for File Transfer           May 2009


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

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

4.  Overview of Operation

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

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

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

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

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






Garcia-Martin, et al.       Standards Track                     [Page 5]
^L
RFC 5547           SDP Offer/Answer for File Transfer           May 2009


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

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

5.  File Selector

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

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

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



Garcia-Martin, et al.       Standards Track                     [Page 6]
^L
RFC 5547           SDP Offer/Answer for File Transfer           May 2009


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

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

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

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

6.  Extensions to SDP

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

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

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

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

   filesize-selector    = "size:" filesize-value



Garcia-Martin, et al.       Standards Track                     [Page 7]
^L
RFC 5547           SDP Offer/Answer for File Transfer           May 2009


   filesize-value       = integer        ;integer defined in RFC 4566

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

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

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

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

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

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

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

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

                   Figure 1: Syntax of the SDP extension





Garcia-Martin, et al.       Standards Track                     [Page 8]
^L
RFC 5547           SDP Offer/Answer for File Transfer           May 2009


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

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

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

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

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

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






Garcia-Martin, et al.       Standards Track                     [Page 9]
^L
RFC 5547           SDP Offer/Answer for File Transfer           May 2009


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

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

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

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

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

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





Garcia-Martin, et al.       Standards Track                    [Page 10]
^L
RFC 5547           SDP Offer/Answer for File Transfer           May 2009


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

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

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

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

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

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





Garcia-Martin, et al.       Standards Track                    [Page 11]
^L
RFC 5547           SDP Offer/Answer for File Transfer           May 2009


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

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

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

            Figure 2: Example of SDP describing a file transfer




Garcia-Martin, et al.       Standards Track                    [Page 12]
^L
RFC 5547           SDP Offer/Answer for File Transfer           May 2009


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

7.  File Disposition Types

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

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

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

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

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

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

8.  Protocol Operation

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



Garcia-Martin, et al.       Standards Track                    [Page 13]
^L
RFC 5547           SDP Offer/Answer for File Transfer           May 2009


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

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

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

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

8.1.  The 'file-transfer-id' Attribute

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

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






Garcia-Martin, et al.       Standards Track                    [Page 14]
^L
RFC 5547           SDP Offer/Answer for File Transfer           May 2009


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

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

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

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

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

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



Garcia-Martin, et al.       Standards Track                    [Page 15]
^L
RFC 5547           SDP Offer/Answer for File Transfer           May 2009


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

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

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

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

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

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



Garcia-Martin, et al.       Standards Track                    [Page 16]
^L
RFC 5547           SDP Offer/Answer for File Transfer           May 2009


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

8.2.  Offerer's Behavior

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

8.2.1.  The Offerer Is a File Sender

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

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

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

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



Garcia-Martin, et al.       Standards Track                    [Page 17]
^L
RFC 5547           SDP Offer/Answer for File Transfer           May 2009


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

8.2.2.  The Offerer Is a File Receiver

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

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

8.2.3.  SDP Offer for Several Files

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



Garcia-Martin, et al.       Standards Track                    [Page 18]
^L
RFC 5547           SDP Offer/Answer for File Transfer           May 2009


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

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

8.3.  Answerer's Behavior

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

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

8.3.1.  The Answerer Is a File Receiver

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

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



Garcia-Martin, et al.       Standards Track                    [Page 19]
^L
RFC 5547           SDP Offer/Answer for File Transfer           May 2009


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

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

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

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

8.3.2.  The Answerer Is a File Sender

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

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



Garcia-Martin, et al.       Standards Track                    [Page 20]
^L
RFC 5547           SDP Offer/Answer for File Transfer           May 2009


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

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

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

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

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

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



Garcia-Martin, et al.       Standards Track                    [Page 21]
^L
RFC 5547           SDP Offer/Answer for File Transfer           May 2009


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

8.4.  Aborting an Ongoing File Transfer Operation

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

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

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

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

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







Garcia-Martin, et al.       Standards Track                    [Page 22]
^L
RFC 5547           SDP Offer/Answer for File Transfer           May 2009


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

           Figure 4: File sender aborts an ongoing file transfer

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














Garcia-Martin, et al.       Standards Track                    [Page 23]
^L
RFC 5547           SDP Offer/Answer for File Transfer           May 2009


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

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

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














Garcia-Martin, et al.       Standards Track                    [Page 24]
^L
RFC 5547           SDP Offer/Answer for File Transfer           May 2009


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

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

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

8.5.  Indicating File Transfer Offer/Answer Capability

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




Garcia-Martin, et al.       Standards Track                    [Page 25]
^L
RFC 5547           SDP Offer/Answer for File Transfer           May 2009


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

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

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

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

8.7.  MSRP Usage

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

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



Garcia-Martin, et al.       Standards Track                    [Page 26]
^L
RFC 5547           SDP Offer/Answer for File Transfer           May 2009


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

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

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

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

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





Garcia-Martin, et al.       Standards Track                    [Page 27]
^L
RFC 5547           SDP Offer/Answer for File Transfer           May 2009


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

8.8.  Considerations about the 'file-icon' Attribute

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

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

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

9.  Examples

9.1.  Offerer Sends a File to the Answerer

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





Garcia-Martin, et al.       Standards Track                    [Page 28]
^L
RFC 5547           SDP Offer/Answer for File Transfer           May 2009


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

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

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

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















Garcia-Martin, et al.       Standards Track                    [Page 29]
^L
RFC 5547           SDP Offer/Answer for File Transfer           May 2009


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

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

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

   --boundary71
   Content-Type: image/jpeg
   Content-Transfer-Encoding: binary
   Content-ID: <id2@alicepc.example.com>
   Content-Length: [length of image]
   Content-Disposition: icon

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

   --boundary71--

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




Garcia-Martin, et al.       Standards Track                    [Page 30]
^L
RFC 5547           SDP Offer/Answer for File Transfer           May 2009


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

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

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

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

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

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

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
















Garcia-Martin, et al.       Standards Track                    [Page 31]
^L
RFC 5547           SDP Offer/Answer for File Transfer           May 2009


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

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

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

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

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

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

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

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

   F6: Bob acknowledges the reception of the first chunk.

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

                      Figure 12: MSRP 200 OK response




Garcia-Martin, et al.       Standards Track                    [Page 32]
^L
RFC 5547           SDP Offer/Answer for File Transfer           May 2009


   F7: Bob acknowledges the reception of the second chunk.

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

                      Figure 13: MSRP 200 OK response

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

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

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

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





















Garcia-Martin, et al.       Standards Track                    [Page 33]
^L
RFC 5547           SDP Offer/Answer for File Transfer           May 2009


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

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

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












Garcia-Martin, et al.       Standards Track                    [Page 34]
^L
RFC 5547           SDP Offer/Answer for File Transfer           May 2009


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

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

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

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

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

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














Garcia-Martin, et al.       Standards Track                    [Page 35]
^L
RFC 5547           SDP Offer/Answer for File Transfer           May 2009


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

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

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

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


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

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

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

          Figure 17: MSRP SEND request containing the actual file

   F5: Alice acknowledges the reception of the SEND request.




Garcia-Martin, et al.       Standards Track                    [Page 36]
^L
RFC 5547           SDP Offer/Answer for File Transfer           May 2009


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

                      Figure 18: MSRP 200 OK response

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






































Garcia-Martin, et al.       Standards Track                    [Page 37]
^L
RFC 5547           SDP Offer/Answer for File Transfer           May 2009


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

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

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

   --boundary71
   Content-Type: image/jpeg
   Content-Transfer-Encoding: binary
   Content-ID: <id3@alicepc.example.com>
   Content-Length: [length of image]
   Content-Disposition: icon

   [..small preview icon...]

   --boundary71--

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




Garcia-Martin, et al.       Standards Track                    [Page 38]
^L
RFC 5547           SDP Offer/Answer for File Transfer           May 2009


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

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

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

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

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

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















Garcia-Martin, et al.       Standards Track                    [Page 39]
^L
RFC 5547           SDP Offer/Answer for File Transfer           May 2009


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

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

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

          Figure 21: MSRP SEND request containing the actual file

   F10: Bob acknowledges the reception of the SEND request.

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

                      Figure 22: MSRP 200 OK response

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

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

9.3.  Example of a Capability Indication

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






Garcia-Martin, et al.       Standards Track                    [Page 40]
^L
RFC 5547           SDP Offer/Answer for File Transfer           May 2009


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

              Figure 23: Flow diagram of a capability request

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

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

10.  Security Considerations

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

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

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




Garcia-Martin, et al.       Standards Track                    [Page 41]
^L
RFC 5547           SDP Offer/Answer for File Transfer           May 2009


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

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

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

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

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

11.  IANA Considerations

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

11.1.  Registration of New SDP Attributes

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





Garcia-Martin, et al.       Standards Track                    [Page 42]
^L
RFC 5547           SDP Offer/Answer for File Transfer           May 2009


11.1.1.  Registration of the file-selector Attribute

   Contact:  Miguel Garcia <miguel.a.garcia@ericsson.com>

   Phone:  +34 91 339 1000

   Attribute name:  file-selector

   Long-form attribute name:  File Selector

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

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

   Specification:  RFC 5547

11.1.2.  Registration of the file-transfer-id Attribute

   Contact:  Miguel Garcia <miguel.a.garcia@ericsson.com>

   Phone:  +34 91 339 1000

   Attribute name:  file-transfer-id

   Long-form attribute name:  File Transfer Identifier

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

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

   Specification:  RFC 5547

11.1.3.  Registration of the file-disposition Attribute

   Contact:  Miguel Garcia <miguel.a.garcia@ericsson.com>

   Phone:  +34 91 339 1000

   Attribute name:  file-disposition

   Long-form attribute name:  File Disposition

   Type of attribute:  media level only



Garcia-Martin, et al.       Standards Track                    [Page 43]
^L
RFC 5547           SDP Offer/Answer for File Transfer           May 2009


      This attribute is not subject to the charset attribute

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

   Specification:  RFC 5547

11.1.4.  Registration of the file-date Attribute

   Contact:  Miguel Garcia <miguel.a.garcia@ericsson.com>

   Phone:  +34 91 339 1000

   Attribute name:  file-date

   Long-form attribute name:

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

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

   Specification:  RFC 5547

11.1.5.  Registration of the file-icon Attribute

   Contact:  Miguel Garcia <miguel.a.garcia@ericsson.com>

   Phone:  +34 91 339 1000

   Attribute name:  file-icon

   Long-form attribute name:  File Icon

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

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

   Specification:  RFC 5547








Garcia-Martin, et al.       Standards Track                    [Page 44]
^L
RFC 5547           SDP Offer/Answer for File Transfer           May 2009


11.1.6.  Registration of the file-range Attribute

   Contact:  Miguel Garcia <miguel.a.garcia@ericsson.com>

   Phone:  +34 91 339 1000

   Attribute name:  file-range

   Long-form attribute name:  File Range

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

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

   Specification:  RFC 5547

12.  Acknowledgments

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

13.  References

13.1.  Normative References

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

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

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






Garcia-Martin, et al.       Standards Track                    [Page 45]
^L
RFC 5547           SDP Offer/Answer for File Transfer           May 2009


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

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

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

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

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

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

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

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

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

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

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

13.2.  Informative References

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

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




Garcia-Martin, et al.       Standards Track                    [Page 46]
^L
RFC 5547           SDP Offer/Answer for File Transfer           May 2009


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

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

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

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





































Garcia-Martin, et al.       Standards Track                    [Page 47]
^L
RFC 5547           SDP Offer/Answer for File Transfer           May 2009


Appendix A.  Alternatives Considered

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

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

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

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

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



Garcia-Martin, et al.       Standards Track                    [Page 48]
^L
RFC 5547           SDP Offer/Answer for File Transfer           May 2009


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

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

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





























Garcia-Martin, et al.       Standards Track                    [Page 49]
^L
RFC 5547           SDP Offer/Answer for File Transfer           May 2009


Authors' Addresses

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

   EMail: miguel.a.garcia@ericsson.com


   Markus Isomaki
   Nokia
   Keilalahdentie 2-4
   Espoo  02150
   Finland

   EMail: markus.isomaki@nokia.com


   Gonzalo Camarillo
   Ericsson
   Hirsalantie 11
   Jorvas  02420
   Finland

   EMail: Gonzalo.Camarillo@ericsson.com


   Salvatore Loreto
   Ericsson
   Hirsalantie 11
   Jorvas  02420
   Finland

   EMail: Salvatore.Loreto@ericsson.com


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

   EMail: pkyzivat@cisco.com






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