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
|
<pre>Network Working Group A. Johnston
Request for Comments: 4579 Avaya
BCP: 119 O. Levin
Category: Best Current Practice Microsoft Corporation
August 2006
<span class="h1">Session Initiation Protocol (SIP)</span>
<span class="h1">Call Control - Conferencing for User Agents</span>
Status of This Memo
This document specifies an Internet Best Current Practices for the
Internet Community, and requests discussion and suggestions for
improvements. Distribution of this memo is unlimited.
Copyright Notice
Copyright (C) The Internet Society (2006).
Abstract
This specification defines conferencing call control features for the
Session Initiation Protocol (SIP). This document builds on the
Conferencing Requirements and Framework documents to define how a
tightly coupled SIP conference works. The approach is explored from
the perspective of different user agent (UA) types: conference-
unaware, conference-aware, and focus UAs. The use of Uniform
Resource Identifiers (URIs) in conferencing, OPTIONS for capabilities
discovery, and call control using REFER are covered in detail with
example call flow diagrams. The usage of the isfocus feature tag is
defined.
Table of Contents
<a href="#section-1">1</a>. Introduction ....................................................<a href="#page-2">2</a>
<a href="#section-2">2</a>. Terminology .....................................................<a href="#page-3">3</a>
<a href="#section-3">3</a>. SIP User Agent Conferencing Capability Types ....................<a href="#page-3">3</a>
<a href="#section-3.1">3.1</a>. Focus UA ...................................................<a href="#page-4">4</a>
<a href="#section-3.2">3.2</a>. Conference Factory URI .....................................<a href="#page-4">4</a>
<a href="#section-3.3">3.3</a>. Conference-Unaware UA ......................................<a href="#page-5">5</a>
<a href="#section-3.4">3.4</a>. Conference-Aware UA ........................................<a href="#page-5">5</a>
<a href="#section-4">4</a>. Usage of the 'isfocus' Feature Parameter ........................<a href="#page-6">6</a>
<a href="#section-4.1">4.1</a>. General ....................................................<a href="#page-6">6</a>
<a href="#section-4.2">4.2</a>. Session Establishment ......................................<a href="#page-6">6</a>
<a href="#section-4.3">4.3</a>. Discovery ..................................................<a href="#page-7">7</a>
<a href="#section-5">5</a>. SIP Conferencing Primitives .....................................<a href="#page-7">7</a>
5.1. INVITE: Joining a Conference Using the Conference
<span class="grey">Johnston & Levin Best Current Practice [Page 1]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-2" ></span>
<span class="grey"><a href="./rfc4579">RFC 4579</a> SIP CC Conferencing for UAs August 2006</span>
URI - Dial-In ..............................................<a href="#page-7">7</a>
<a href="#section-5.2">5.2</a>. INVITE: Adding a Participant by the Focus - Dial-Out ......<a href="#page-11">11</a>
5.3. INVITE: Manually Creating a Conference by Dialing
In to a Conferencing Application ..........................<a href="#page-15">15</a>
<a href="#section-5.4">5.4</a>. INVITE: Creating a Conference Using Ad-Hoc SIP Methods ....<a href="#page-16">16</a>
5.5. REFER: Requesting a Focus to Add a New Resource to
a Conference (Dial Out to a New Participant) ..............<a href="#page-18">18</a>
5.6. REFER: Requesting a User to Dial in to a Conference
Using a Conference URI ....................................<a href="#page-21">21</a>
5.7. REFER with REFER: Requesting a Focus to Refer a
Participant to Dial in to the Conference ..................<a href="#page-23">23</a>
5.8. Join Header Field: Dialing in to a Conference
Using a (3rd Party) Dialog Identifier .....................<a href="#page-26">26</a>
5.9. Replaces Header Field: Switching User Agents
within a Conference .......................................<a href="#page-28">28</a>
5.10. Replaces Header Field: Transferring a Point-to-Point
Session in to a Conference ...............................<a href="#page-29">29</a>
5.11. REFER with BYE: Requesting That the Focus Remove a
Participant from a Conference ............................<a href="#page-31">31</a>
<a href="#section-5.12">5.12</a>. Deleting a Conference ....................................<a href="#page-33">33</a>
<a href="#section-5.13">5.13</a>. Discovery of URI Properties Using OPTIONS ................<a href="#page-34">34</a>
<a href="#section-6">6</a>. Security Considerations ........................................<a href="#page-36">36</a>
<a href="#section-7">7</a>. Contributors ...................................................<a href="#page-37">37</a>
<a href="#section-8">8</a>. References .....................................................<a href="#page-38">38</a>
<a href="#section-8.1">8.1</a>. Normative References ......................................<a href="#page-38">38</a>
<a href="#section-8.2">8.2</a>. Informative References ....................................<a href="#page-38">38</a>
<a href="#appendix-A">Appendix A</a>: Creating a Conference by a Conference-Unaware UA.......<a href="#page-40">40</a>
<span class="h2"><a class="selflink" id="section-1" href="#section-1">1</a>. Introduction</span>
This specification uses the concepts and definitions from the high
level requirements [<a href="#ref-14" title=""High Level Requirements for Tightly Coupled SIP Conferencing"">14</a>] and the SIP conferencing framework [<a href="#ref-8" title=""A Framework for Conferencing with the Session Initiation Protocol (SIP)"">8</a>]
documents. This approach is applicable to tightly coupled SIP
conferences. In this architecture, a user agent (UA), known as a
participant, establishes a SIP dialog with another UA, known as a
focus. The focus is the central point of control, authentication,
and authorization. This specification defines the operation of a
focus and participant UAs. Note that only the signalling (SIP) needs
to be centralized in this model; the media can be centrally mixed,
distributed, or even multicast. For a full discussion of this
architecture, see the SIP conferencing framework document [<a href="#ref-8" title=""A Framework for Conferencing with the Session Initiation Protocol (SIP)"">8</a>].
The approach described in this document implements key functions in
the conferencing framework using SIP primitives only. This allows
for conducting simple conferences with defined functionalities using
SIP mechanisms and conventions. Many other advanced functions can be
implemented using additional means, but they are not in the scope of
this document.
<span class="grey">Johnston & Levin Best Current Practice [Page 2]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-3" ></span>
<span class="grey"><a href="./rfc4579">RFC 4579</a> SIP CC Conferencing for UAs August 2006</span>
This document presents the basic call control (dial-in and dial-out)
conferencing building blocks from the UA perspective. Possible
applications include ad-hoc conferences and scheduled conferences.
Note that a single conference can bridge participants that have
different capabilities and who potentially have joined the conference
by different means (i.e., dial-in, dial-out, scheduled, or ad-hoc).
The call control and dialog manipulation approach is based on the
multiparty framework document [<a href="#ref-15" title=""A Call Control and Multi-party usage framework for the Session Initiation Protocol (SIP)"">15</a>]. That document defines the basic
approach of service design adopted for SIP, which includes the
following:
- Definition of primitives, not services
- Signaling model independent
- Invoker oriented
- Primitives make full use of URIs
- Include policies for authentication, authorization, logging, etc.
- Define graceful fallback to baseline SIP
The use of opaque URIs and the ability to communicate call control
context information within a URI (as opposed to using service-related
header fields), as discussed in <a href="./rfc3087">RFC 3087</a> [<a href="#ref-11" title=""Control of Service Context using SIP Request-URI"">11</a>], is fundamental to this
approach.
Capabilities discovery is an important feature of SIP systems, and
conferencing systems can make use of such features. For a UA acting
as a focus in a conference, this specification defines the usage of
the 'isfocus' feature parameter.
<span class="h2"><a class="selflink" id="section-2" href="#section-2">2</a>. Terminology</span>
In this document, the key words "MUST", "MUST NOT", "REQUIRED",
"SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY",
and "OPTIONAL" are to be interpreted as described in <a href="./rfc2119">RFC 2119</a> and
indicate requirement levels for compliant implementations [<a href="#ref-1" title=""Key words for use in RFCs to Indicate Requirement Levels"">1</a>].
<span class="h2"><a class="selflink" id="section-3" href="#section-3">3</a>. SIP User Agent Conferencing Capability Types</span>
From a conferencing perspective, the framework document outlines a
number of possible different SIP components such as conference-
unaware participant, conference-aware participant, and focus.
This document applies the concepts above to the SIP call control part
of the conferencing components. It defines normative behavior of the
SIP UAs in various conferencing situations (referred to later as
"scenarios").
<span class="grey">Johnston & Levin Best Current Practice [Page 3]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-4" ></span>
<span class="grey"><a href="./rfc4579">RFC 4579</a> SIP CC Conferencing for UAs August 2006</span>
<span class="h3"><a class="selflink" id="section-3.1" href="#section-3.1">3.1</a>. Focus UA</span>
A focus, as defined in the framework, hosts a SIP conference and
maintains a SIP signaling relationship with each participant in the
conference. A focus contains a conference-aware user agent that
supports the conferencing call control conventions as defined in this
document.
A focus SHOULD support the conference package <a href="./rfc4575">RFC 4575</a> [<a href="#ref-9" title=""A Session Initiation Protocol (SIP) Event Package for Conference State"">9</a>], behave as
a notifier for that package, and indicate its support in the Allow-
Events header fields in requests and responses. A focus MAY include
information about the conference in Session Description Protocol
(SDP) bodies sent as part of normal SIP signaling by populating the
Session Information, URI, Email Address, and Phone Number SDP fields.
In order to support advanced features, where a session established
between two endpoints can migrate to a centralized conference, a
focus SHOULD support the Replaces header field [<a href="#ref-6" title=""The Session Initiation Protocol (SIP) "">6</a>].
A user agent with focus capabilities could be implemented in end user
equipment and would be used for the creation of ad-hoc conferences.
A dedicated conferencing server, whose primary task is to
simultaneously host conferences of arbitrary type and size, may
allocate and publish a conference factory URI (as defined in the next
section) for creating an arbitrary number of ad-hoc conferences (and
subsequently their focuses) using SIP call control means.
<span class="h3"><a class="selflink" id="section-3.2" href="#section-3.2">3.2</a>. Conference Factory URI</span>
According to the framework, there are many ways in which a conference
can be created. A conferencing server implementation is free to
choose from these methods, which include non-automated means (such as
an Interactive Voice Response (IVR) system), SIP, or any conference
control protocol.
In order to automatically create an arbitrary number of ad-hoc
conferences (and subsequently their focuses) using SIP call control
means, a globally routable Conference Factory URI can be allocated
and published.
A successful attempt to establish a call to this URI would result in
the automatic creation of a new conference and its focus. As a
result, note that the Conference Factory URI and the newly created
focus URI MAY resolve to different physical devices.
A scenario showing the use of the conference factory URI is shown in
<a href="#section-5.4">Section 5.4</a>.
<span class="grey">Johnston & Levin Best Current Practice [Page 4]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-5" ></span>
<span class="grey"><a href="./rfc4579">RFC 4579</a> SIP CC Conferencing for UAs August 2006</span>
<span class="h3"><a class="selflink" id="section-3.3" href="#section-3.3">3.3</a>. Conference-Unaware UA</span>
The simplest user agent can participate in a conference ignoring all
SIP conferencing-related information. The simplest user agent is
able to dial in to a conference and to be invited to a conference.
Any conferencing information is optionally conveyed to/from it using
non-SIP means. Such a user agent would not usually host a conference
(at least, not using SIP explicitly). A conference-unaware UA need
only support <a href="./rfc3261">RFC 3261</a> [<a href="#ref-2" title=""SIP: Session Initiation Protocol"">2</a>]. Call flows for conference-unaware UAs are
not shown in general in this document as they would be identical to
those in the SIP call flows document [<a href="#ref-13" title=""Session Initiation Protocol (SIP) Basic Call Flow Examples"">13</a>].
Note that the presence of an 'isfocus' feature tag in a Contact
header field will not cause interoperability issues between a focus
and a conference-unaware UA since it will be treated as an unknown
header parameter and ignored, as per standard SIP behavior.
<span class="h3"><a class="selflink" id="section-3.4" href="#section-3.4">3.4</a>. Conference-Aware UA</span>
A conference-aware user agent supports SIP conferencing call control
conventions defined in this document as a conference participant, in
addition to support of <a href="./rfc3261">RFC 3261</a> [<a href="#ref-2" title=""SIP: Session Initiation Protocol"">2</a>]. A conference-aware UA should be
able to process SIP redirections such as described in <a href="./rfc3261#section-8.1.3.4">Section 8.1.3.4
of RFC 3261</a>.
A conference-aware UA MUST recognize the 'isfocus' feature parameter.
A conference-aware UA SHOULD support REFER [<a href="#ref-4" title=""The Session Initiation Protocol (SIP) Refer Method"">4</a>], SIP events [<a href="#ref-3" title=""Session Initiation Protocol (SIP)-Specific Event Notification"">3</a>], and
the conferencing package [<a href="#ref-9" title=""A Session Initiation Protocol (SIP) Event Package for Conference State"">9</a>].
A conference-aware UA SHOULD subscribe to the conference package if
the 'isfocus' parameter is in the remote target URI of a dialog and
if the conference package is listed by a focus in an Allow-Events
header field. The SUBSCRIBE to the conference package SHOULD be sent
outside any INVITE-initiated dialog. A termination of the INVITE
dialog with a BYE does not necessarily terminate the SUBSCRIBE
dialog.
A conference-aware UA MAY render to the user any information about
the conference obtained from the SIP header fields and SDP fields
from the focus.
A conference-aware UA SHOULD render to the user any information about
the conference obtained from the SIP conference package.
<span class="grey">Johnston & Levin Best Current Practice [Page 5]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-6" ></span>
<span class="grey"><a href="./rfc4579">RFC 4579</a> SIP CC Conferencing for UAs August 2006</span>
<span class="h2"><a class="selflink" id="section-4" href="#section-4">4</a>. Usage of the 'isfocus' Feature Parameter</span>
<span class="h3"><a class="selflink" id="section-4.1" href="#section-4.1">4.1</a>. General</span>
The main design guidelines for the development of SIP extensions and
conventions for conferencing are to define the minimum number of
extensions and to have seamless backward compatibility with
conference-unaware SIP UAs. The minimal requirement for SIP is being
able to express that a dialog is a part of a certain conference
referenced to by a URI. As a result of these extensions, it is
possible to do the following using SIP:
- Create a conference
- Join a conference
- Invite a user to a conference
- Expel a user by third party
- Discover if a URI is a conference URI
- Delete a conference
The approach taken is to use the feature parameter 'isfocus' to
express that a SIP dialog belongs to a conference. The use of
feature parameters in Contact header fields to describe the
characteristics and capabilities of a UA is described in the User
Agent Capabilities document [<a href="#ref-5" title=""Indicating User Agent Capabilities in the Session Initiation Protocol (SIP)"">5</a>], which includes the definition of the
'isfocus' feature parameter.
<span class="h3"><a class="selflink" id="section-4.2" href="#section-4.2">4.2</a>. Session Establishment</span>
In session establishment, a focus MUST include the 'isfocus' feature
parameter in the Contact header field unless the focus wishes to hide
the fact that it is a focus. To a participant, the feature parameter
will be associated with the remote target URI of the dialog. It is
an indication to a conference-aware UA that the resulting dialog
belongs to a conference, identified by the URI in the Contact header
field, and that the call control conventions defined in this document
can be applied.
By their nature, the conferences supported by this specification are
centralized. Therefore, typically a conferencing system needs to
allocate a SIP conference URI such that SIP requests to this URI are
not forked and are routed to a dedicated conference focus. For
example, a globally accessible SIP conference could be well
constructed with a conference URI using a Globally Routable User
Agent URI (GRUU) (defined in [<a href="#ref-16" title=""Obtaining and Using Globally Routable User Agent (UA) URIs (GRUU) in the Session Initiation Protocol (SIP)"">16</a>]), because of its ability to support
the non-forking and global routability requirements.
<span class="grey">Johnston & Levin Best Current Practice [Page 6]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-7" ></span>
<span class="grey"><a href="./rfc4579">RFC 4579</a> SIP CC Conferencing for UAs August 2006</span>
<span class="h3"><a class="selflink" id="section-4.3" href="#section-4.3">4.3</a>. Discovery</span>
Using the mechanism described in this section, it is possible, given
an opaque URI, to determine if it belongs to a certain conference
(i.e., meaning that it is a conference URI) or not. This discovery
function can be implemented in SIP using an OPTIONS request, and can
be done either inside an active dialog or outside a dialog. A focus
MUST include the 'isfocus' feature parameter in a 200 OK response to
an OPTIONS unless the focus wishes to hide the fact that it is a
focus.
<span class="h2"><a class="selflink" id="section-5" href="#section-5">5</a>. SIP Conferencing Primitives</span>
The SIP conferencing call control flows presented in this section are
the call control building blocks for various SIP conferencing
applications as described in the conferencing requirements [<a href="#ref-14" title=""High Level Requirements for Tightly Coupled SIP Conferencing"">14</a>] and
framework [<a href="#ref-8" title=""A Framework for Conferencing with the Session Initiation Protocol (SIP)"">8</a>] documents. The major design goal is that the same SIP
conferencing primitives would be used by user agents having different
conferencing capabilities and implementing different applications.
<span class="h3"><a class="selflink" id="section-5.1" href="#section-5.1">5.1</a>. INVITE: Joining a Conference Using the Conference URI - Dial-In</span>
In this section, a user knows the conference URI and "dials in" to
join this conference. The focus will authenticate the participant
and apply authorization policy before allowing the participant to
join the conference.
If the UA is the first participant of the conference to dial-in, it
is likely that this INVITE will activate the focus and hence the
conference. However, the conference URI must have been reserved
prior to its use.
If the conference is up and running already, the dialing-in
participant is joined to the conference by its focus.
To join an existing specific conference, a UA will send an INVITE
with the Request-URI set to the conference URI. The focus MUST
include the 'isfocus' feature parameter in the Contact header field
of the 200 OK response to the INVITE.
<span class="grey">Johnston & Levin Best Current Practice [Page 7]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-8" ></span>
<span class="grey"><a href="./rfc4579">RFC 4579</a> SIP CC Conferencing for UAs August 2006</span>
An example call flow for joining a conference is shown in Figure 1.
Alice Focus Bob Carol
| | |
| | Carol joins the conference |
| | |
| | INVITE sip:Conf-ID F1 |
| |<----------------------------------------|
| | 180 Ringing F2 |
| |---------------------------------------->|
| | 200 OK Contact:Conf-ID;isfocus F3 |
| |---------------------------------------->|
| | ACK F4 |
| |<----------------------------------------|
| | RTP |
| |<=======================================>|
| | SUBSCRIBE sip:Conf-ID F5 |
| |<----------------------------------------|
| | 200 OK F6 |
| |---------------------------------------->|
| | NOTIFY F7 |
| |---------------------------------------->|
| | 200 OK F8 |
| |<----------------------------------------|
Figure 1. A Participant Joins a Conference Using the Conference URI.
F1 INVITE sip:3402934234@conf.example.com SIP/2.0
Via: SIP/2.0/UDP client.chicago.example.com
;branch=z9hG4bKhjhs8ass83
Max-Forwards: 70
To: <sip:3402934234@conf.example.com>
From: Carol <sip:carol@chicago.example.com>;tag=32331
Call-ID: d432fa84b4c76e66710
CSeq: 45 INVITE
Contact: <sip:carol@client.chicago.example.com>
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER,
SUBSCRIBE, NOTIFY
Allow-Events: dialog
Accept: application/sdp, message/sipfrag
Supported: replaces
Content-Type: application/sdp
Content-Length: ...
(SDP not shown)
<span class="grey">Johnston & Levin Best Current Practice [Page 8]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-9" ></span>
<span class="grey"><a href="./rfc4579">RFC 4579</a> SIP CC Conferencing for UAs August 2006</span>
F3 SIP/2.0 200 OK
Via: SIP/2.0/UDP client.chicago.example.com
;branch=z9hG4bKhjhs8ass83;received=192.0.2.4
To: <sip:3402934234@conf.example.com>;tag=733413
From: Carol <sip:carol@chicago.example.com>;tag=32331
Call-ID: d432fa84b4c76e66710
CSeq: 45 INVITE
Contact: <sip:3402934234@conf.example.com>;isfocus
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER,
SUBSCRIBE, NOTIFY
Allow-Events: dialog, conference
Accept: application/sdp, application/conference-info+xml,
message/sipfrag
Supported: replaces, join, gruu
Content-Type: application/sdp
Content-Length: ...
v=0
o=focus431 2890844526 2890842807 IN IP4 ms5.conf.example.com
s=-
i=Example Conference Hosted by Example.com
u=http://conf.example.com/3402934234
e=3402934234@conf-help.example.com
p=+1-888-2934234
c=IN IP4 ms5.conf.example.com
t=0 0
m=audio 49170 RTP/AVP 0
m=video 51372 RTP/AVP 31
F5 SUBSCRIBE sip:3402934234@conf.example.com SIP/2.0
Via: SIP/2.0/UDP client.chicago.example.com
;branch=z9hG4bKdf334
Max-Forwards: 70
To: <sip:3402934234@conf.example.com>
From: Carol <sip:carol@chicago.example.com>;tag=43524545
Call-ID: k3l43id034ksereree
CSeq: 22 SUBSCRIBE
Contact: <sip:carol@client.chicago.example.com>
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER,
SUBSCRIBE, NOTIFY
Event: conference
Accept: application/conference-info+xml
Supported: replaces
Content-Length: 0
<span class="grey">Johnston & Levin Best Current Practice [Page 9]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-10" ></span>
<span class="grey"><a href="./rfc4579">RFC 4579</a> SIP CC Conferencing for UAs August 2006</span>
F7 NOTIFY sip:carol@chicago.example.com SIP/2.0
Via: SIP/2.0/UDP ms5.conf.example.com;branch=z9hG4bK3343d1
Max-Forwards: 70
To: Carol <sip:carol@chicago.example.com>;tag=43524545
From: <sip:3402934234@conf.example.com>;tag=a3343df32
Call-ID: k3l43id034ksereree
CSeq: 34321 NOTIFY
Contact: <sip:3402934234@conf.example.com>;isfocus
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER,
SUBSCRIBE, NOTIFY
Event: conference
Accept: application/sdp, message/sipfrag
Subscription-State: active;expires=3600
Supported: replaces, join, gruu
Content-Type: application/conference-info+xml
Content-Length: ...
<conference-info version="0" state="full"
entity="sip:3402934234@conf.example.com">
<conference-description>
<conf-uris>
<entry>
<uri>tel:+18882934234</uri>
</entry>
</conf-uris>
</conference-description>
<users>
<user entity="sip:carol@chicago.example.com" state="full">
<display-text>Carol</display-text>
<endpoint entity="sip:carol@client.chicago.example.com">
<status>connected</status>
<joining-method>dialed-in</joining-method>
<media id="1">
<display-text>Main Audio</display-text>
<type>audio</type>
<src-id>583398</src-id>
<status>sendrecv</status>
</media>
<media id="2">
<type>video</type>
<src-id>345212</src-id>
<status>sendrecv</status>
</media>
</endpoint>
</user>
</users>
</conference-info>
<span class="grey">Johnston & Levin Best Current Practice [Page 10]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-11" ></span>
<span class="grey"><a href="./rfc4579">RFC 4579</a> SIP CC Conferencing for UAs August 2006</span>
<span class="h3"><a class="selflink" id="section-5.2" href="#section-5.2">5.2</a>. INVITE: Adding a Participant by the Focus - Dial-Out</span>
To directly add a participant to a conference, a focus SHOULD send an
INVITE to the participant containing a Contact header field with the
conference URI and the 'isfocus' feature parameter.
Note that a conference-unaware UA would simply ignore the
conferencing information and treat the session (from a SIP
perspective) as a point-to-point session. This is because standard
<a href="./rfc3261">RFC 3261</a> [<a href="#ref-2" title=""SIP: Session Initiation Protocol"">2</a>] behavior is to ignore unknown header parameters such as
'isfocus'.
An example call flow is shown in Figure 2. It is assumed that Alice
is already a participant of the conference. The focus invites Carol
to the conference by sending an INVITE. After the session is
established, Carol subscribes to the conference URI. It is important
to note that there is no dependency on Carol's SUBSCRIBE (F5) and the
NOTIFY to Alice (F9) -- they occur asynchronously and independently.
<span class="grey">Johnston & Levin Best Current Practice [Page 11]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-12" ></span>
<span class="grey"><a href="./rfc4579">RFC 4579</a> SIP CC Conferencing for UAs August 2006</span>
Alice Focus Bob Carol
| | | |
|<==================>| | |
| | |
| Focus "dials out" to add Carol to the conference |
| | |
| | INVITE Contact:Conf-ID;isfocus F1 |
| |---------------------------------------->|
| | 180 Ringing F2 |
| |<----------------------------------------|
| | 200 OK F3 |
| |<----------------------------------------|
| | ACK F4 |
| |---------------------------------------->|
| | RTP |
| |<=======================================>|
| | SUBSCRIBE sip:Conf-ID F5 |
| |<----------------------------------------|
| | 200 OK F6 |
| |---------------------------------------->|
| | NOTIFY F7 |
| |---------------------------------------->|
| | 200 OK F8 |
| |<----------------------------------------|
| NOTIFY F9 | |
|<-------------------| |
| 200 OK F10 | |
|------------------->| |
Figure 2. A Focus "Dials Out" to Add a Participant to the Conference.
F7 NOTIFY sip:carol@chicago.example.com SIP/2.0
Via: SIP/2.0/UDP ms5.conf.example.com;branch=z9hG4bK3343d1
Max-Forwards: 70
To: Carol <sip:carol@chicago.example.com>;tag=43524545
From: <sip:3402934234@conf.example.com>;tag=a3343df32
Call-ID: k3l43id034ksereree
CSeq: 34321 NOTIFY
Contact: <sip:3402934234@conf.example.com>;isfocus
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER,
SUBSCRIBE, NOTIFY
Event: conference
Accept: application/sdp, message/sipfrag
Subscription-State: active;expires=3600
Supported: replaces, gruu
Content-Type: application/conference-info+xml
Content-Length: ...
<span class="grey">Johnston & Levin Best Current Practice [Page 12]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-13" ></span>
<span class="grey"><a href="./rfc4579">RFC 4579</a> SIP CC Conferencing for UAs August 2006</span>
<conference-info version="0" state="full"
entity="sip:3402934234@conf.example.com">
<conference-description>
<conf-uris>
<entry>
<uri>tel:+18882934234</uri>
</entry>
</conf-uris>
</conference-description>
<users>
<user entity="sip:alice@atlanta.example.com" state="full">
<display-text>Alice</display-text>
<endpoint entity="sip:alice@client.atlanta.example.com">
<status>connected</status>
<joining-method>dialed-in</joining-method>
<media id="3">
<display-text>Main Audio</display-text>
<type>audio</type>
<src-id>647231</src-id>
<status>sendrecv</status>
</media>
<media id="4">
<type>video</type>
<src-id>21345</src-id>
<status>sendrecv</status>
</media>
</endpoint>
</user>
<user entity="sip:carol@chicago.example.com" state="full">
<display-text>Carol</display-text>
<endpoint entity="sip:carol@client.chicago.example.com">
<status>connected</status>
<joining-method>dialed-out</joining-method>
<media id="1">
<display-text>Main Audio</display-text>
<type>audio</type>
<src-id>583398</src-id>
<status>sendrecv</status>
</media>
<media id="2">
<type>video</type>
<src-id>345212</src-id>
<status>sendrecv</status>
</media>
</endpoint>
</user>
</users>
</conference-info>
<span class="grey">Johnston & Levin Best Current Practice [Page 13]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-14" ></span>
<span class="grey"><a href="./rfc4579">RFC 4579</a> SIP CC Conferencing for UAs August 2006</span>
F9 NOTIFY sip:alice@atlanta.example.com SIP/2.0
Via: SIP/2.0/UDP ms5.conf.example.com;branch=z9hG4bK3432
Max-Forwards: 70
To: Alice <sip:alice@atlanta.example.com>;tag=43524545
From: <sip:3402934234@conf.example.com>;tag=a3343df32
Call-ID: 8820450524545
CSeq: 998 NOTIFY
Contact: <sip:3402934234@conf.example.com>;isfocus
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER,
SUBSCRIBE, NOTIFY
Event: conference
Accept: application/sdp, message/sipfrag
Subscription-State: active;expires=2450
Supported: replaces, gruu
Content-Type: application/conference-info+xml
Content-Length: ...
<conference-info version="1" state="partial"
entity="sip:3402934234@conf.example.com">
<users>
<user entity="sip:carol@chicago.example.com" state="full">
<display-text>Carol</display-text>
<endpoint entity="sip:carol@client.chicago.example.com">
<status>connected</status>
<joining-method>dialed-out</joining-method>
<media id="1">
<display-text>Main Audio</display-text>
<type>audio</type>
<src-id>583398</src-id>
<status>sendrecv</status>
</media>
<media id="2">
<type>video</type>
<src-id>345212</src-id>
<status>sendrecv</status>
</media>
</endpoint>
</user>
</users>
</conference-info>
<span class="grey">Johnston & Levin Best Current Practice [Page 14]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-15" ></span>
<span class="grey"><a href="./rfc4579">RFC 4579</a> SIP CC Conferencing for UAs August 2006</span>
<span class="h3"><a class="selflink" id="section-5.3" href="#section-5.3">5.3</a>. INVITE: Manually Creating a Conference by Dialing in to a</span>
<span class="h3"> Conferencing Application</span>
In this section, a user sends an INVITE to a conference server
application. The application (such as an IVR system or a web page)
is implemented because the system requires additional input from the
user before it is able to create a conference. After a normal dialog
is established, additional information is received and the conference
together with its focus are created. Since the UA is now in a dialog
with a focus, the focus will re-INVITE the user with the conference
URI in Contact with the 'isfocus' feature parameter.
Alternatively, the additional information can be provided by the user
during an early dialog (see <a href="./rfc3261">RFC 3261</a> [<a href="#ref-2" title=""SIP: Session Initiation Protocol"">2</a>] for a discussion of early
dialogs in SIP). This could be accomplished by a 183 Session
Progress response sent by the conferencing application. After the
conference is created, the conference URI would then be returned in a
Contact in the 200 OK.
Note that since this flow is all about human interaction with a
conferencing application, any errors and failures will be returned to
the human (recorded announcements, error tones, etc.).
As discussed in the conferencing framework, the conference URI must
be unique across all distinct conferences within the same domain. In
general, the user part of a conference URI will contain a pseudo
random string.
An example call flow is shown in Figure 3. In this example, Alice
uses a conference application that is triggered when Alice sends an
INVITE to the conference application. In this example, Conf-App is
used to represent the conference application URI. Alice's
conference-aware UA learns of the existence of the conference from
the 'isfocus' feature parameter and subscribes to the conference
package to receive notifications of the conference state.
<span class="grey">Johnston & Levin Best Current Practice [Page 15]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-16" ></span>
<span class="grey"><a href="./rfc4579">RFC 4579</a> SIP CC Conferencing for UAs August 2006</span>
Alice Focus Bob Carol
| | | |
| Alice establishes session with conference application. |
| | | |
| INVITE sip:Conf-App F1 | |
|------------------->| | |
| 180 Ringing F2 | | |
|<-------------------| | |
| 200 OK F3 | | |
|<-------------------| | |
| ACK F4 | | |
|------------------->| | |
| RTP | | |
|<==================>| | |
| | | |
| Alice uses the application to create the conference. |
| | | |
| INVITE Contact:Conf-ID;isfocus F5 | |
|<-------------------| | |
| 200 OK F6 | | |
|------------------->| | |
| ACK F7 | | |
|<-------------------| | |
| RTP | | |
|<==================>| | |
| | | |
| SUBSCRIBE sip:Conf-ID F8 | |
|------------------->| | |
| 200 OK F9 | | |
|<-------------------| | |
| NOTIFY F10 | | |
|<-------------------| | |
| 200 OK F11 | | |
|------------------->| | |
Figure 3. A Participant Creates a Conference Using an Application.
<span class="h3"><a class="selflink" id="section-5.4" href="#section-5.4">5.4</a>. INVITE: Creating a Conference Using Ad-Hoc SIP Methods</span>
This section addresses creating a conference by using ad-hoc SIP
means. The conference factory URI (as defined in <a href="#section-3.2">Section 3.2</a>) is
used to automatically create the conference in this example. This is
different from the previous scenario in that no human intervention is
required -- an automaton can create the conference and add
participants. Since the conference does not need to be scheduled or
reserved, but is created "on the fly", it is an "ad-hoc" conference
creation.
<span class="grey">Johnston & Levin Best Current Practice [Page 16]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-17" ></span>
<span class="grey"><a href="./rfc4579">RFC 4579</a> SIP CC Conferencing for UAs August 2006</span>
The benefit of this approach is that the conference URI need not be
known to the user; instead it is created by a focus and used by the
participants' UAs. The main difference between this scenario and
<a href="#section-5.3">Section 5.3</a> is that no user intervention (IVR, web page form, etc.)
is required to create the conference.
The SIP URI of the conference factory can be provisioned in the UA
(as in a "create new conference" button on a SIP phone) or can be
discovered using other means.
A SIP entity (such as conferencing server) can distinguish this
INVITE request as a request to create a new ad-hoc conference from a
request to join an existing conference by the Request-URI. That is,
although both requests may route to the same application, the
differing services requested can be identified by the differing URIs
in the request itself.
Assuming that all security and policy requirements have been met, a
new conference will be created with the Contact URI returned in the
200 OK being the conference URI. The Contact header field MUST
contain the 'isfocus' feature parameter to indicate that this URI is
for a conference.
An example call flow is shown in Figure 4. Note that Conf-Factory is
shorthand for the conference factory URI and Conf-ID Is short for the
conference URI. In this flow, Alice has a conference-aware UA and
creates a conference by sending an INVITE to the conference factory
URI. The conference factory application creates the conference and
redirects Alice to the focus using a 302 Moved Temporarily response.
Note that with proxy recursion as part of normal <a href="./rfc3261">RFC 3261</a> [<a href="#ref-2" title=""SIP: Session Initiation Protocol"">2</a>]
behavior, Alice may never see the redirect but may just receive the
responses from the focus starting with message F5. Once the media
session is established, Alice subscribes to the conference URI
obtained through the Contact in the 200 OK response from the focus.
<span class="grey">Johnston & Levin Best Current Practice [Page 17]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-18" ></span>
<span class="grey"><a href="./rfc4579">RFC 4579</a> SIP CC Conferencing for UAs August 2006</span>
Alice Conf-Factory App Focus Bob
| | | |
| Alice creates the conference. | |
| | | |
| INVITE sip:Conf-Factory F1 | |
|------------------->| | |
| 302 Moved Contact:Conf-ID;isfocus F2 | |
|<-------------------| | |
| ACK F3 | | |
|------------------->| | |
| INVITE sip:Conf-ID F4 | |
|---------------------------------------->| |
| 180 Ringing F5 | |
|<----------------------------------------| |
| 200 OK Contact:Conf-ID;isfocus F6 | |
|<----------------------------------------| |
| ACK F7 | |
|---------------------------------------->| |
| RTP | |
|<=======================================>| |
| | |
| Alice subscribes to the conference URI. | |
| | |
| SUBSCRIBE sip:Conf-ID F8 | |
|---------------------------------------->| |
| 200 OK F9 | |
|<----------------------------------------| |
| NOTIFY F10 | |
|<----------------------------------------| |
| 200 OK F11 | |
|---------------------------------------->| |
Figure 4. Creation of a Conference Using SIP Ad-Hoc Methods.
<span class="h3"><a class="selflink" id="section-5.5" href="#section-5.5">5.5</a>. REFER: Requesting a Focus to Add a New Resource to a Conference</span>
(Dial Out to a New Participant)
A SIP conference URI can be used to inject different kinds of
information into the conference. Examples include new participants,
new real-time media sources, new IM messages, and pointers to passive
information references (such as HTTP URIs).
To request that the focus add a new information resource to the
specified conference, any SIP UA can send a REFER to the conference
URI with a Refer-To containing the URI of the new resource. Since
this REFER is sent to the conference URI and not the conference
factory URI, the semantics to the focus are to bring the resource
into the conference and make it visible to the conference
<span class="grey">Johnston & Levin Best Current Practice [Page 18]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-19" ></span>
<span class="grey"><a href="./rfc4579">RFC 4579</a> SIP CC Conferencing for UAs August 2006</span>
participants. The resultant focus procedures are dependent both on
the nature of the new resource (as expressed by its URI) and the
policy of the focus regarding IM, central vs. distributed real-time
media processing, and so on.
The scenario for adding a new UA participant is important to support
because it works even if the new participant does not support REFER
and transfer call control -- only the requesting participant and the
focus need to support the REFER and transfer call control.
Upon receipt of the REFER containing a Refer-To header with a SIP
URI, the focus SHOULD send an INVITE to the new participant
identified by the Refer-To SIP URI containing a Contact header field
with the conference URI and the 'isfocus' feature parameter.
A conference-unaware UA would simply ignore the conferencing
information and treat the session (from a SIP perspective) as a
point-to-point session.
An example call flow is shown in Figure 5. While this flow shows the
use of REFER to add a new participant to the conference, the
mechanism can generally add a resource as identified by a URI to the
conference. It is assumed that Alice is already a participant of the
conference. Alice sends a REFER to the conference URI. The focus
invites Carol to the conference by sending an INVITE. After the
session is established, Carol subscribes to the conference URI. It
is important to note that there is no dependency on Carol's SUBSCRIBE
(F11) and the NOTIFY to Alice (F15) -- they occur asynchronously and
independently.
<span class="grey">Johnston & Levin Best Current Practice [Page 19]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-20" ></span>
<span class="grey"><a href="./rfc4579">RFC 4579</a> SIP CC Conferencing for UAs August 2006</span>
Alice Focus Bob Carol
| | | |
|<==================>| | |
| REFER sip:Conf-ID Refer-To:Carol F1 | |
|------------------->| |
| 202 Accepted F2 | |
|<-------------------| |
| NOTIFY (Trying) F3 |
|<-------------------| |
| 200 OK F4 | |
|------------------->| |
| | |
| Focus "dials out" to join Carol to the conference |
| | |
| | INVITE Contact:Conf-ID;isfocus F5 |
| |---------------------------------------->|
| | 180 Ringing F6 |
| |<----------------------------------------|
| | 200 OK F7 |
| |<----------------------------------------|
| | ACK F8 |
| |---------------------------------------->|
| | RTP |
| |<=======================================>|
| NOTIFY (OK) F9 | |
|<-------------------| |
| 200 OK F10 | |
|------------------->| |
| | SUBSCRIBE sip:Conf-ID F11 |
| |<----------------------------------------|
| | 200 OK F12 |
| |---------------------------------------->|
| | NOTIFY F13 |
| |---------------------------------------->|
| | 200 OK F14 |
| |<----------------------------------------|
| NOTIFY F15 | |
|<-------------------| |
| 200 OK F16 | |
|------------------->| |
Figure 5. Participant Requests That the Focus Add a Participant to
the Conference.
<span class="grey">Johnston & Levin Best Current Practice [Page 20]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-21" ></span>
<span class="grey"><a href="./rfc4579">RFC 4579</a> SIP CC Conferencing for UAs August 2006</span>
F1 REFER sip:3402934234@conf.example.com SIP/2.0
Via: SIP/2.0/UDP client.atlanta.example.com;branch=z9hG4bKg4534
Max-Forwards: 70
To: <sip:3402934234@conf.example.com>
From: Alice <sip:alice@atlanta.example.com>;tag=5534562
Call-ID: 849392fklgl43
CSeq: 476 REFER
Contact: <sip:alice@alice.example.com>
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER,
SUBSCRIBE, NOTIFY
Accept: application/sdp, message/sipfrag
Refer-To: <sip:carol@chicago.example.com>
Supported: replaces
Content-Length: 0
<span class="h3"><a class="selflink" id="section-5.6" href="#section-5.6">5.6</a>. REFER: Requesting a User to Dial in to a Conference Using a</span>
<span class="h3"> Conference URI</span>
A participant wishing to add a new participant will request this
participant to send an INVITE to the conference URI. This can be
done using a non-SIP means (such as passing or publishing the
conference URI in an email, IM, or web page). If a non-SIP means is
used, then the flow and requirements are identical to <a href="#section-5.1">Section 5.1</a>.
The SIP mechanism to do this utilizes the REFER method.
A UA wishing to add a new participant SHOULD send a REFER request to
the participant with a Refer-To header containing the conference URI.
The requirements are then identical to the dial-in case of <a href="#section-5.1">Section</a>
<a href="#section-5.1">5.1</a>. The inviting participant MAY receive notification through the
REFER action that the new participant has been added in addition to
the notification received through the conference package.
An example is shown in Figure 6. In this call flow, it is assumed
that Alice is already a participant of the conference. Alice sends
Bob an "out of band" REFER - that is, a REFER outside of an
established dialog. Should Bob reject the REFER, Alice might try
sending an INVITE to Bob to establish a session first, then send a
REFER within the dialog, effectively transferring Bob into the
conference [<a href="#ref-17" title=""Session Initiation Protocol Call Control - Transfer"">17</a>].
<span class="grey">Johnston & Levin Best Current Practice [Page 21]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-22" ></span>
<span class="grey"><a href="./rfc4579">RFC 4579</a> SIP CC Conferencing for UAs August 2006</span>
Alice Focus Bob Carol
| | | |
|<==================>| | |
| | | |
| Alice adds Bob into conference | |
| | | |
| REFER Refer-To:Conf-ID F1 | |
|---------------------------------------->| |
| 202 Accepted F2 | | |
|<----------------------------------------| |
| NOTIFY (Trying) F3| | |
|<----------------------------------------| |
| 200 OK F4 | | |
|---------------------------------------->| |
| | INVITE sip:Conf-ID F5 |
| |<-------------------| |
| | 180 Ringing F6 | |
| |------------------->| |
| | 200 OK Contact:Conf-ID;isfocus F7 |
| |------------------->| |
| | ACK F8 | |
| |<-------------------| |
| | RTP | |
| |<==================>| |
| NOTIFY (OK) F9 | | |
|<----------------------------------------| |
| 200 OK F10 | | |
|---------------------------------------->| |
| NOTIFY F11 | | |
|<-------------------| | |
| 200 OK F12 | | |
|------------------->| | |
| | SUBSCRIBE sip:Conf-ID F13 |
| |<-------------------| |
| | 200 OK F14 | |
| |------------------->| |
| | NOTIFY F15 | |
| |------------------->| |
| | 200 OK F16 | |
| |<-------------------| |
Figure 6. Adding a Participant to an Existing Conference.
<span class="grey">Johnston & Levin Best Current Practice [Page 22]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-23" ></span>
<span class="grey"><a href="./rfc4579">RFC 4579</a> SIP CC Conferencing for UAs August 2006</span>
<span class="h3"><a class="selflink" id="section-5.7" href="#section-5.7">5.7</a>. REFER with REFER: Requesting a Focus to Refer a Participant to</span>
<span class="h3"> Dial in to the Conference</span>
A participant may request that the focus refer a participant into the
conference by sending a REFER method. The Refer-To header field will
have the method set to REFER and an escaped Refer-To header field
containing the conference URI.
Note that in Message F1 below, the Refer-To header field is shown as
continuing across two lines -- this would not be the case in an
actual message; the URI would have continued beyond the formatting
limitations of this document.
This scenario is shown in Figure 7.
<span class="grey">Johnston & Levin Best Current Practice [Page 23]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-24" ></span>
<span class="grey"><a href="./rfc4579">RFC 4579</a> SIP CC Conferencing for UAs August 2006</span>
Alice Focus Bob Carol
| | | |
|<==================>| | |
| Alice asks focus to REFER Bob into conference |
| | | |
|REFER sip:Conf-ID Refer-To:Bob;method=REFER?Refer-To=Conf-ID F1
|------------------->| | |
| 202 Accepted F2 | | |
|<-------------------| | |
| NOTIFY (Trying) F3| | |
|<-------------------| | |
| 200 OK F4 | | |
|------------------->| | |
| Focus REFERs Bob to the conference |
| | | |
| | REFER Refer-To:Conf-ID F5 |
| |------------------->| |
| | 202 Accepted F6 | |
| NOTIFY (202) F7 |<-------------------| |
|<-------------------| NOTIFY (Trying) F8 | |
| 200 OK F9 |<-------------------| |
|------------------->| 200 OK F10 | |
| |------------------->| |
| | INVITE sip:Conf-ID F11 |
| |<-------------------| |
| | 180 Ringing F12 | |
| |------------------->| |
| | 200 OK Contact:Conf-ID;isfocus F13 |
| |------------------->| |
| | ACK F14 | |
| NOTIFY F15 |<-------------------| |
|<-------------------| RTP | |
| 200 OK F16 |<==================>| |
|------------------->| NOTIFY (200) F17 | |
| |<-------------------| |
| | 200 OK F18 | |
| |------------------->| |
| | SUBSCRIBE sip:Conf-ID F17 |
| |<-------------------| |
| | 200 OK F19 | |
| |------------------->| |
| | NOTIFY F20 | |
| |------------------->| |
| | 200 OK F21 | |
| |<-------------------| |
Figure 7. Requesting That the Focus Refer a Participant to a
Conference.
<span class="grey">Johnston & Levin Best Current Practice [Page 24]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-25" ></span>
<span class="grey"><a href="./rfc4579">RFC 4579</a> SIP CC Conferencing for UAs August 2006</span>
F1 REFER sip:3402934234@conf.example.com SIP/2.0
Via: SIP/2.0/UDP client.atlanta.example.com;branch=z9hG4bKg4534
Max-Forwards: 70
To: <sip:3402934234@conf.example.com>
From: Alice <sip:alice@atlanta.example.com>;tag=5534562
Call-ID: 849392fklgl43
CSeq: 476 REFER
Contact: <sip:alice@alice.example.com>
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER,
SUBSCRIBE, NOTIFY
Accept: application/sdp, message/sipfrag
Refer-To: <sip:bob@biloxi.example.com;method=REFER
?Refer-To=sip:3402934234%40example.com>
Supported: replaces
Content-Length: 0
F5 REFER sip:3402934234@conf.example.com SIP/2.0
Via: SIP/2.0/UDP ms5.conf.example.com;branch=z9hG4bK33445243
Max-Forwards: 70
To: <sip:bob@biloxi.example.com>
From: <sip:3402934234@conf.example.com>;tag=345621412
Call-ID: 5494204
CSeq: 4524323 REFER
Contact: <sip:3402934234@conf.example.com>;isfocus
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER,
SUBSCRIBE, NOTIFY
Accept: application/sdp, message/sipfrag
Refer-To: <sip:3402934234@conf.example.com>
Supported: join, gruu, replaces
Content-Length: 0
F11 INVITE sip:3402934234@conf.example.com SIP/2.0
Via: SIP/2.0/UDP client.biloxi.com;branch=z9hG4bKh3887
Max-Forwards: 70
To: <sip:3402934234@conf.example.com>
From: Bob <sip:bob@biloxi.example.com>;tag=32411
Call-ID: 5d4324fa84b4c76e66710
CSeq: 764 INVITE
Contact: <sip:bob@client.biloxi.example.com>
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER,
SUBSCRIBE, NOTIFY
Allow-Events: dialog
Accept: application/sdp, message/sipfrag
Supported: replaces, join
Content-Type: application/sdp
Content-Length: ...
<span class="grey">Johnston & Levin Best Current Practice [Page 25]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-26" ></span>
<span class="grey"><a href="./rfc4579">RFC 4579</a> SIP CC Conferencing for UAs August 2006</span>
(SDP not shown)
<span class="h3"><a class="selflink" id="section-5.8" href="#section-5.8">5.8</a>. Join Header Field: Dialing in to a Conference Using a (3rd Party)</span>
<span class="h3"> Dialog Identifier</span>
Under some circumstances, a participant wanting to join a conference
may only know a dialog identifier of one of the legs of the
conference. The information may have been learned using the dialog
package [<a href="#ref-18" title=""An INVITE- Initiated Dialog Event Package for the Session Initiation Protocol (SIP)"">18</a>] or some non-SIP means to retrieve this information from
another conference participant.
A UA can request to be added to a conference by sending a request to
the focus containing a Join [<a href="#ref-7" title=""The Session Initiation Protocol (SIP) "">7</a>] header field containing a dialog ID
of one leg of the conference (a dialog between another participant
and the focus).
There are other scenarios in which a UA can use the Join header for
certain conferencing call control scenarios. See [<a href="#ref-7" title=""The Session Initiation Protocol (SIP) "">7</a>] for further
examples and details.
An example is shown in Figure 8. It is assumed that Alice is a
participant of the conference. The dialog identifier between Alice
and the focus is abbreviated as A-F and is known by Bob. Bob
requests to be added to the conference by sending an INVITE message
F1 to the focus containing a Join header that contains the dialog
identifier A-F. Bob is added into the conference by the focus.
<span class="grey">Johnston & Levin Best Current Practice [Page 26]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-27" ></span>
<span class="grey"><a href="./rfc4579">RFC 4579</a> SIP CC Conferencing for UAs August 2006</span>
Alice Focus Bob Carol
| | | |
|<==================>| | |
| | | |
| Bob requests to be added to the conference. |
| | | |
| | INVITE Join:A-F F1| |
| |<-------------------| |
| | 180 Ringing F2 | |
| |------------------->| |
| | 200 OK Contact:Conf-ID;isfocus F3 |
| |------------------->| |
| | ACK F4 | |
| |<-------------------| |
| | RTP | |
| NOTIFY F5 |<==================>| |
|<-------------------| SUBSCRIBE sip:Conf-ID F6 |
| 200 OK F7 |<-------------------| |
|------------------->| 200 OK F8 | |
| |------------------->| |
| | NOTIFY F9 | |
| |------------------->| |
| | 200 OK F10 | |
| |<-------------------| |
Figure 8. Adding a Participant to an Existing Conference using Join.
F1 INVITE sip:3402934234@conf.example.com SIP/2.0
Via: SIP/2.0/UDP client.biloxi.com;branch=z9hG4bKh3832
Max-Forwards: 70
To: <sip:3402934234@conf.example.com>
From: Bob <sip:bob@biloxi.example.com>;tag=32411
Call-ID: d432fa84b4c76e66710
CSeq: 8 INVITE
Contact: <sip:bob@client.biloxi.example.com>
Join: 3434034-293553453;to-tag=fdj3l34;from-tag=12f331
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER,
SUBSCRIBE, NOTIFY
Allow-Events: dialog
Accept: application/sdp, message/sipfrag
Supported: replaces, join
Content-Type: application/sdp
Content-Length: ...
(SDP not shown)
<span class="grey">Johnston & Levin Best Current Practice [Page 27]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-28" ></span>
<span class="grey"><a href="./rfc4579">RFC 4579</a> SIP CC Conferencing for UAs August 2006</span>
<span class="h3"><a class="selflink" id="section-5.9" href="#section-5.9">5.9</a>. Replaces Header Field: Switching User Agents within a Conference</span>
Participants in a conference may want to change the user agent (i.e.,
the endpoint or the device) with which they participate in the
conference. This could be done by simply sending a BYE from one user
agent to leave the conference and an INVITE from the other user agent
to rejoin. However, the SIP Replaces [<a href="#ref-6" title=""The Session Initiation Protocol (SIP) "">6</a>] primitive is perfectly
suited to this operation.
An example is shown in Figure 9. It is assumed that Alice is a
participant of the conference using user agent #1. The dialog
identifier between Alice's user agent #1 and the focus is abbreviated
as A-F. Alice switches to user agent #2 and sends an INVITE message
F1 to the focus containing a Replaces header that contains the dialog
identifier A-F. Note that this dialog identifier could be learned
through some non-SIP mechanism, or by use of SUBSCRIBE/NOTIFY and the
dialog event package [<a href="#ref-18" title=""An INVITE- Initiated Dialog Event Package for the Session Initiation Protocol (SIP)"">18</a>]. Alice's user agent #2 is added into the
conference by the focus. The focus sends a BYE to user agent #1.
User agent #1 then automatically terminates the subscription by
sending a SUBSCRIBE with Expires:0 to terminate the subscription.
Note that the participant list (roster) has not necessarily changed
during this scenario, unless detailed information about Alice user
agents (i.e. endpoints) is included in the conference state
notifications. For a full discussion of conference package
notifications, refer to [<a href="#ref-9" title=""A Session Initiation Protocol (SIP) Event Package for Conference State"">9</a>].
<span class="grey">Johnston & Levin Best Current Practice [Page 28]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-29" ></span>
<span class="grey"><a href="./rfc4579">RFC 4579</a> SIP CC Conferencing for UAs August 2006</span>
Alice UA#1 Focus Alice UA#2 Carol
| | | |
|<==================>| | |
| | | |
| Alice switches user agents during the conference. |
| | | |
| | INVITE sip:Conf-ID Replaces:A-F F1 |
| |<-------------------| |
| | 200 OK Contact:Conf-ID;isfocus F2 |
| |------------------->| |
| | ACK F3 | |
| |<-------------------| |
| | RTP | |
| |<==================>| |
| BYE F4 | | |
|<-------------------| | |
| 200 OK F5 | | |
|------------------->| | |
| SUBSCRIBE Expires:0 F6 | |
|------------------->| | |
| 200 OK F7 | | |
|<-------------------| | |
| NOTIFY Subscription-State:terminated F8 | |
|<-------------------| | |
| 200 OK F9 | | |
|------------------->| | |
| | SUBSCRIBE sip:Conf-ID F10 |
| |<-------------------| |
| | 200 OK F11 | |
| |------------------->| |
| | NOTIFY F12 | |
| |------------------->| |
| | 200 OK F13 | |
| |<-------------------| |
Figure 9. Switching a User Agent within a Conference.
<span class="h3"><a class="selflink" id="section-5.10" href="#section-5.10">5.10</a>. Replaces Header Field: Transferring a Point-to-Point Session into</span>
<span class="h3"> a Conference</span>
This call flow shows how a point-to-point call can be transferred to
a conference call involving an external focus.
Alice and Bob have an established session with a dialog identifier
A-B. Alice joins the conference with the focus by sending an INVITE
to the Conference URI. Alice then sends a REFER request to the focus
to send an INVITE request to the other participant. Alice includes
an escaped Replaces header field in the URI included in the Refer-To
<span class="grey">Johnston & Levin Best Current Practice [Page 29]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-30" ></span>
<span class="grey"><a href="./rfc4579">RFC 4579</a> SIP CC Conferencing for UAs August 2006</span>
header field. Bob receives the INVITE from the focus and matches the
dialog in the Replaces header field with the dialog with Alice. As a
result, Bob accepts the INVITE, joins the conference, and sends a BYE
to Alice to tear down their point-to-point dialog.
Alice Focus Bob Carol
| | | |
| Alice is in a session with Bob | |
|<=======================================>| |
| | | |
| Alice joins the conference | |
| | | |
| INVITE sip:Conf-ID F1 | |
|------------------->| | |
| 200 OK Contact:sip:Conf-ID;isfocus F2 | |
|<-------------------| | |
| ACK F3 | | |
|------------------->| | |
| SUBSCRIBE F4 | | |
|------------------->| | |
| 200 OK F5 | | |
|<-------------------| | |
| NOTIFY F6 | | |
|<-------------------| | |
| 200 OK F7 | | |
|------------------->| | |
|<==================>| | |
| | | |
| Alice asks focus to REFER Bob into conference |
| | | |
| REFER sip:Conf-ID Refer-To:Bob?Replaces=A-B F8 |
|------------------->| | |
| 202 Accepted F9 | | |
|<-------------------| | |
| NOTIFY (Trying) F10| | |
|<-------------------| | |
| 200 OK F11 | | |
|------------------->| | |
| | | |
| Focus invites Bob to the conference |
| | | |
| | INVITE sip:Conf-ID Replaces:A-B F12 |
| |------------------->| |
| | 200 OK F13 | |
| |<-------------------| |
| | ACK F14 | |
| |------------------->| |
| | RTP | |
<span class="grey">Johnston & Levin Best Current Practice [Page 30]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-31" ></span>
<span class="grey"><a href="./rfc4579">RFC 4579</a> SIP CC Conferencing for UAs August 2006</span>
| |<==================>| |
| BYE F15 | |
|<----------------------------------------| |
| 200 OK F16 | |
|---------------------------------------->| |
| NOTIFY (200) F17 | | |
|<-------------------| | |
| 200 OK F18 | | |
|------------------->| | |
| NOTIFY F19 | | |
|<-------------------| | |
| 200 OK F20 | | |
|------------------->| | |
| | SUBSCRIBE sip:Conf-ID F21 |
| |<-------------------| |
| | 200 OK F22 | |
| |------------------->| |
| | NOTIFY F23 | |
| |------------------->| |
| | 200 OK F24 | |
| |<-------------------| |
| | | |
Figure 10. Transitioning a Point to Point Session into a Conference.
<span class="h3"><a class="selflink" id="section-5.11" href="#section-5.11">5.11</a>. REFER with BYE: Requesting That the Focus Remove a Participant</span>
<span class="h3"> from a Conference</span>
To request that the focus remove a participant from the specified
conference, a properly authorized SIP UA (typically the conference
owner) can send a REFER to the conference URI with a Refer-To
containing the URI of the participant and with the method set to BYE.
The requestor does not need to know the dialog information about the
dialog between the focus and the participant who will be removed --
the focus knows this information and fills it when it generates the
BYE request.
An example call flow is shown in Figure 11. It is assumed that Alice
and Carol are already participants of the conference and that Alice
is authorized to remove members from the conference. Alice sends a
REFER to the conference URI with a Refer-To header containing a URI
of the form sip:carol@chicago.example.com;method=BYE.
<span class="grey">Johnston & Levin Best Current Practice [Page 31]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-32" ></span>
<span class="grey"><a href="./rfc4579">RFC 4579</a> SIP CC Conferencing for UAs August 2006</span>
Alice Focus Bob Carol
| | | |
|<==================>| |
| REFER sip:Conf-ID Refer-To:Carol;method=BYE F1 |
|------------------->| |
| 202 Accepted F2 | |
|<-------------------| |
| NOTIFY (Trying) F3 |
|<-------------------| |
| 200 OK F4 | |
|------------------->| |
| | |
| Focus removes Carol from the conference |
| | |
| | BYE sip:Carol F5 |
| |---------------------------------------->|
| | 200 OK F6 |
| |<----------------------------------------|
| | NOTIFY Subscription-State:terminated F7 |
| |---------------------------------------->|
| | 200 OK F8 |
| |<----------------------------------------|
| NOTIFY (200) F9 | |
|<-------------------| |
| 200 OK F10 | |
|------------------->| |
| NOTIFY F11 | |
|<-------------------| |
| 200 OK F12 | |
|------------------->| |
Figure 11. Participant Requests That the Focus Remove a Participant
from the Conference.
F1 REFER sip:3402934234@conf.example.com SIP/2.0
Via: SIP/2.0/UDP client.atlanta.example.com;branch=z9hG4bKg4534
Max-Forwards: 70
To: <sip:3402934234@conf.example.com>
From: Alice <sip:alice@atlanta.example.com>;tag=5534562
Call-ID: 849392fklgl43
CSeq: 476 REFER
Contact: <sip:alice@alice.example.com>
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER,
SUBSCRIBE, NOTIFY
Accept: application/sdp, message/sipfrag
Refer-To: <sip:carol@chicago.example.com;method=BYE>
Supported: replaces
Content-Length: 0
<span class="grey">Johnston & Levin Best Current Practice [Page 32]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-33" ></span>
<span class="grey"><a href="./rfc4579">RFC 4579</a> SIP CC Conferencing for UAs August 2006</span>
F5 BYE sip:carol@client.chicago.example.com SIP/2.0
Via: SIP/2.0/UDP ms5.conf.example.com;branch=z9hG4bK343gf4
Max-Forwards: 70
From: <sip:3402934234@conf.example.com>;tag=5393k2312
To: Carol <sip:carol@chicago.example.com>;tag=32331
Call-ID: d432fa84b4c76e66710
CSeq: 78654 BYE
Content-Length: 0
<span class="h3"><a class="selflink" id="section-5.12" href="#section-5.12">5.12</a>. Deleting a Conference</span>
The default conference policy for conferences created using the
Conference Factory URI is that the conference is deleted when the
creator departs.
Figure 12 shows this call flow in which the creator Alice departs
causing the conference to be deleted. Note that the order of sending
BYEs and final NOTIFYs is not important.
<span class="grey">Johnston & Levin Best Current Practice [Page 33]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-34" ></span>
<span class="grey"><a href="./rfc4579">RFC 4579</a> SIP CC Conferencing for UAs August 2006</span>
Alice Focus Bob Carol
| | | |
|<==================>|<==================>| |
| BYE F1 |<=======================================>|
|------------------->| | |
| 200 OK F2 | | |
|<-------------------| | |
| | BYE F3 | |
| |------------------->| |
| | 200 OK F4 | |
| |<-------------------| |
| | BYE F5 |
| |---------------------------------------->|
| | 200 OK F6 |
| |<----------------------------------------|
| NOTIFY Subscription-State:terminated F7 |
|<-------------------| | |
| 200 OK F8 | | |
|------------------->| NOTIFY Subscription-State:terminated F9 |
| |------------------->| |
| | 200 OK F10 | |
| |<-------------------| |
| | NOTIFY Subscription-State:terminated F11|
| |---------------------------------------->|
| | 200 OK F12 |
| |<----------------------------------------|
Figure 12. Deleting a Conference.
<span class="h3"><a class="selflink" id="section-5.13" href="#section-5.13">5.13</a>. Discovery of URI Properties Using OPTIONS</span>
A UA MAY send an OPTIONS request to discover if an opaque URI is a
conference URI (resolves to a focus). In addition, the reply to the
OPTIONS request can also indicate support for various SIP call
control extensions used in this document.
Note that the Allow, Accept, Allow-Events, and Supported header
fields should be present in an INVITE from a focus or a 200 OK answer
from the focus to an INVITE as a part of a normal dialog
establishment process.
An example is shown in Figure 13 where Alice sends an OPTIONS to a
URI that resolves to a focus.
<span class="grey">Johnston & Levin Best Current Practice [Page 34]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-35" ></span>
<span class="grey"><a href="./rfc4579">RFC 4579</a> SIP CC Conferencing for UAs August 2006</span>
Alice Focus Bob Carol
| | | |
| OPTIONS sip:Conf-ID F1 | |
|------------------->| | |
| 200 OK Contact:Conf-ID;isfocus F2 | |
|<-------------------| | |
Figure 13. Participant Queries Capabilities of URI of a Focus.
Following is an example of message detail of message F2 in Figure 13.
Based on the response, Alice's UA learns that the URI is a conference
URI and that the responding UA is focus that supports a number of SIP
call control extensions.
The response details are as follows:
F2 SIP/2.0 200 OK
Via: SIP/2.0/UDP pc33.atlanta.example.com;branch=z9hG4bKhjsas87
;received=192.0.2.4
To: <sip:3402934234@conf.example.com>;tag=93810874
From: Alice <sip:alice@atlanta.example.com>;tag=1928301774
Call-ID: a84b4c76e66710
CSeq: 63104 OPTIONS
Contact: <sip:3402934234@conf.example.com>;isfocus
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER,
SUBSCRIBE, NOTIFY
Allow-Events: refer, conference
Accept: application/sdp, message/sipfrag
Accept-Language: en
Supported: replaces, join, gruu
Content-Type: application/sdp
Content-Length: ...
v=0
o=focus431 2890844563 2890842835 IN IP4 ms5.conf.example.com
s=-
i=Example Conference Hosted by Example.com
u=http://conf.example.com/3402934234
e=3402934234@conf-help.example.com
p=+18882934234
c=IN IP4 ms5.conf.example.com
t=0 0
m=audio 0 RTP/AVP 0 3 5 7
m=video 0 RTP/AVP 31 32
Useful information from each of these headers is detailed in the next
sections.
<span class="grey">Johnston & Levin Best Current Practice [Page 35]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-36" ></span>
<span class="grey"><a href="./rfc4579">RFC 4579</a> SIP CC Conferencing for UAs August 2006</span>
Allow. The support of methods such as REFER, SUBSCRIBE, and NOTIFY
indicates that the user agent supports call control and SIP events.
Accept. The support of bodies such as message/sipfrag [<a href="#ref-12" title=""Internet Media Type message/sipfrag"">12</a>] indicates
support of call control.
Allow-Events. Indicates support of event packages such as refer [<a href="#ref-4" title=""The Session Initiation Protocol (SIP) Refer Method"">4</a>]
and conference [<a href="#ref-9" title=""A Session Initiation Protocol (SIP) Event Package for Conference State"">9</a>].
Supported. Indicates support of extensions such as replaces, join,
and gruu.
Contact. The presence of the 'isfocus' feature parameter in the
Contact header indicates that the URI is a conference URI and that
the UA is a focus.
<span class="h2"><a class="selflink" id="section-6" href="#section-6">6</a>. Security Considerations</span>
This specification defines the interaction between a focus UA and a
participant UA in a conferencing application. As a result, the
security considerations and mechanisms defined in <a href="./rfc3261">RFC 3261</a> [<a href="#ref-2" title=""SIP: Session Initiation Protocol"">2</a>] apply.
However, there are some aspects unique to conferencing that will be
discussed here.
A conference often involves the use of substantial network bandwidth
and computing resources. As a result, authentication is even more
important than in a simple peer-to-peer session. As discussed in the
conferencing framework [<a href="#ref-8" title=""A Framework for Conferencing with the Session Initiation Protocol (SIP)"">8</a>], conferences often have policy related to
conferencing resources. A focus SHOULD authenticate participants
before joining them to a conference and allowing utilization of
conferencing resources. Different policies can be applied by a focus
to different participants based on the result of authentication.
A participant will be interacting with a number of other participants
through the focus. As a result, a participant should authenticate
the focus and be sure that the focus used for the conference is
trusted. Normal SIP authentication mechanisms are suitable for
participant and focus authentication, such as SIP Digest utilizing a
shared secret, or certificates, or a secured SIP identity mechanism.
In addition, a focus SHOULD support Secure SIP connections so that
hop-by-hop mutual authentication and confidentiality provided by TLS
can be achieved.
In the SIP dialog between them, a focus utilizes the 'isfocus'
feature tag to indicate that the UA is acting as a focus. As such,
the SIP header fields such as Contact SHOULD have end to end
integrity. A participant and focus SHOULD support an end-to-end
integrity mechanism such as S/MIME.
<span class="grey">Johnston & Levin Best Current Practice [Page 36]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-37" ></span>
<span class="grey"><a href="./rfc4579">RFC 4579</a> SIP CC Conferencing for UAs August 2006</span>
Once a participant has learned that the other UA is a focus, SIP call
control operations (such as REFER) can be implemented, or a
subscription to the conference package of the focus might be
attempted. The security considerations described in <a href="./rfc3515">RFC 3515</a> [<a href="#ref-4" title=""The Session Initiation Protocol (SIP) Refer Method"">4</a>]
apply to any REFER call control operations. A focus and participant
will apply policy to determine which call control operations are
allowed.
A focus accepting subscriptions to the conference package must follow
the security considerations in <a href="./rfc4575">RFC 4575</a> [<a href="#ref-9" title=""A Session Initiation Protocol (SIP) Event Package for Conference State"">9</a>]. Since notifications can
carry sensitive information, the subscriptions should be
authenticated and the notifications delivered with confidentiality
and integrity protection. Since a participant is not able to
authenticate other participants directly, a participant must rely on
the focus to perform this authentication.
A focus MUST support a participant's request for privacy, either
through conference policy or as expressed through the signaling. For
example, a participant joining a conference and including a Privacy
header field [<a href="#ref-10" title=""A Privacy Mechanism for the Session Initiation Protocol (SIP)"">10</a>] must not have identity information revealed to
other participants by the focus. If other signaling protocols are
used, privacy signaled through them also must be respected.
<span class="h2"><a class="selflink" id="section-7" href="#section-7">7</a>. Contributors</span>
We would like to thank Rohan Mahy, Jonathan Rosenberg, Roni Even,
Petri Koskelainen, Brian Rosen, Paul Kyzivat, Eric Burger, and others
in list discussions.
Thanks to Miguel Garcia for his detailed last-call review and
suggestions.
<span class="grey">Johnston & Levin Best Current Practice [Page 37]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-38" ></span>
<span class="grey"><a href="./rfc4579">RFC 4579</a> SIP CC Conferencing for UAs August 2006</span>
<span class="h2"><a class="selflink" id="section-8" href="#section-8">8</a>. References</span>
<span class="h3"><a class="selflink" id="section-8.1" href="#section-8.1">8.1</a>. Normative References</span>
[<a id="ref-1">1</a>] Bradner, S., "Key words for use in RFCs to Indicate Requirement
Levels", <a href="https://www.rfc-editor.org/bcp/bcp14">BCP 14</a>, <a href="./rfc2119">RFC 2119</a>, March 1997.
[<a id="ref-2">2</a>] Rosenberg, J., Schulzrinne, H., Camarillo, G., Johnston, A.,
Peterson, J., Sparks, R., Handley, M., and E. Schooler, "SIP:
Session Initiation Protocol", <a href="./rfc3261">RFC 3261</a>, June 2002.
[<a id="ref-3">3</a>] Roach, A., "Session Initiation Protocol (SIP)-Specific Event
Notification", <a href="./rfc3265">RFC 3265</a>, June 2002.
[<a id="ref-4">4</a>] Sparks, R., "The Session Initiation Protocol (SIP) Refer
Method", <a href="./rfc3515">RFC 3515</a>, April 2003.
[<a id="ref-5">5</a>] Rosenberg, J., Schulzrinne, H., and P. Kyzivat, "Indicating
User Agent Capabilities in the Session Initiation Protocol
(SIP)", <a href="./rfc3840">RFC 3840</a>, August 2004.
[<a id="ref-6">6</a>] Mahy, R., Biggs, B., and R. Dean, "The Session Initiation
Protocol (SIP) "Replaces" Header", <a href="./rfc3891">RFC 3891</a>, September 2004.
[<a id="ref-7">7</a>] Mahy, R. and D. Petrie, "The Session Initiation Protocol (SIP)
"Join" Header", <a href="./rfc3911">RFC 3911</a>, October 2004.
[<a id="ref-8">8</a>] Rosenberg, J., "A Framework for Conferencing with the Session
Initiation Protocol (SIP)", <a href="./rfc4353">RFC 4353</a>, February 2006.
[<a id="ref-9">9</a>] Rosenberg, J., Schulzrinne, H., and O. Levin, "A Session
Initiation Protocol (SIP) Event Package for Conference State",
<a href="./rfc4575">RFC 4575</a>, August 2006.
[<a id="ref-10">10</a>] Peterson, J., "A Privacy Mechanism for the Session Initiation
Protocol (SIP)", <a href="./rfc3323">RFC 3323</a>, November 2002.
<span class="h3"><a class="selflink" id="section-8.2" href="#section-8.2">8.2</a>. Informative References</span>
[<a id="ref-11">11</a>] Campbell, B. and R. Sparks, "Control of Service Context using
SIP Request-URI", <a href="./rfc3087">RFC 3087</a>, April 2001.
[<a id="ref-12">12</a>] Sparks, R., "Internet Media Type message/sipfrag", <a href="./rfc3420">RFC 3420</a>,
November 2002.
[<a id="ref-13">13</a>] Johnston, A., Donovan, S., Sparks, R., Cunningham, C., and K.
Summers, "Session Initiation Protocol (SIP) Basic Call Flow
Examples", <a href="https://www.rfc-editor.org/bcp/bcp75">BCP 75</a>, <a href="./rfc3665">RFC 3665</a>, December 2003.
<span class="grey">Johnston & Levin Best Current Practice [Page 38]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-39" ></span>
<span class="grey"><a href="./rfc4579">RFC 4579</a> SIP CC Conferencing for UAs August 2006</span>
[<a id="ref-14">14</a>] Levin, O. and R. Even, "High Level Requirements for Tightly
Coupled SIP Conferencing", <a href="./rfc4245">RFC 4245</a>, November 2005.
[<a id="ref-15">15</a>] Mahy, R., "A Call Control and Multi-party usage framework for
the Session Initiation Protocol (SIP)", Work in Progress,
February 2005.
[<a id="ref-16">16</a>] Rosenberg, J., "Obtaining and Using Globally Routable User
Agent (UA) URIs (GRUU) in the Session Initiation Protocol
(SIP)", Work in Progress, February 2005.
[<a id="ref-17">17</a>] Sparks, R., Johnston, A., and D. Petrie, "Session Initiation
Protocol Call Control - Transfer", Work in Progress, April
2005.
[<a id="ref-18">18</a>] Rosenberg, J., Schulzrinne, H., and R. Mahy, "An INVITE-
Initiated Dialog Event Package for the Session Initiation
Protocol (SIP)", <a href="./rfc4235">RFC 4235</a>, November 2005.
<span class="grey">Johnston & Levin Best Current Practice [Page 39]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-40" ></span>
<span class="grey"><a href="./rfc4579">RFC 4579</a> SIP CC Conferencing for UAs August 2006</span>
Appendix A: Creating a Conference by a Conference-Unaware UA
This section discusses how a human user operating a conference-
unaware UA can create and add participants to a conference. This
method is described as an appendix since it is NOT RECOMMENDED. The
scenarios involving creating a conference using ad-hoc or manual
means are recommended over this scenario. This scenario is included,
however, for completeness.
A user (human) would choose a conference URI according to system
rules and insert it into the Request-URI of the INVITE. This same
URI is echoed by a focus adhering to certain addressing conventions
(discussed below) in the Contact header by the focus. Additional
participants could be added by non-SIP means (publication of the
chosen conference URI using web pages, email, IM, etc.).
Alternatively, the conference-unaware UA could then add other
participants to the conference using SIP call control by establishing
a session with them, then transferring [<a href="#ref-17" title=""Session Initiation Protocol Call Control - Transfer"">17</a>] them to the conference
URI. Note that in this scenario only the user (human) is aware of
the conferencing application, and the conference-unaware UA only need
support <a href="./rfc3261">RFC 3261</a> [<a href="#ref-2" title=""SIP: Session Initiation Protocol"">2</a>] and optionally call transfer.
Making this work does impose certain addressing conventions on a
system. As a service/implementation choice, a system could allow the
creator of the conference to choose the user portion of the
conference URI. However, this requires the URI format to be agreed
upon between a user and the system.
For example, a service provider might reserve the domain
conf.example.com for all conference URIs. Any URI in the domain of
conf.example.com would resolve to the focus. The focus could be
configured to interpret an unknown user part in the conf.example.com
domain as a request for a conference to be created with the
conference URI as the Request-URI. For example, an INVITE sent with
a Request-URI of sip:k32934208ds72@conf.example.com could be routed
to the focus that would then create the conference. This conference
URI should be registered by the newly created focus to become
routable as a conference URI within the conf.example.com domain. The
returned Contact would look as follows:
Contact: <sip:k32934208ds72@conf.example.com>;isfocus
<span class="grey">Johnston & Levin Best Current Practice [Page 40]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-41" ></span>
<span class="grey"><a href="./rfc4579">RFC 4579</a> SIP CC Conferencing for UAs August 2006</span>
Note, however, that this approach relies on conventions adopted
between the user (human) and the focus. Also, the approach is not
robust against collisions in the conference names. If a second user
wishing to create a new conference happened to choose the same user
part as an existing conference, the result would be that the second
user would be added into the existing conference instead of creating
a new one.
As a result, methods of conference creation in which the conference
URI is an opaque URI generated by the focus are preferred.
An example call flow is shown in Figure 14. The participant Alice
creates the conference URI (using some convention agreed to with the
focus domain) and sends an INVITE to that URI which creates the
focus. The focus creates the conference and returns the same
conference URI in the 200 OK answer to the INVITE (which is ignored
by the conference-unaware UA).
Alice Focus Bob Carol
| | | |
| Alice creates the conference and chooses the conference URI. |
| | | |
| INVITE sip:Conf-ID F1 | |
|------------------->| | |
| 180 Ringing F2 | | |
|<-------------------| | |
| 200 OK Contact:Conf-ID;isfocus F3 | |
|<-------------------| | |
| ACK F4 | | |
|------------------->| | |
| RTP | | |
|<==================>| | |
Figure 14. Not Recommended: Conferencing Unaware Participant
Creates a Conference
<span class="grey">Johnston & Levin Best Current Practice [Page 41]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-42" ></span>
<span class="grey"><a href="./rfc4579">RFC 4579</a> SIP CC Conferencing for UAs August 2006</span>
Authors' Addresses
Alan Johnston
Avaya
St. Louis, MO 63102
EMail: alan@sipstation.com
Orit Levin
Microsoft Corporation
One Microsoft Way
Redmond, WA 98052
EMail: oritl@microsoft.com
<span class="grey">Johnston & Levin Best Current Practice [Page 42]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-43" ></span>
<span class="grey"><a href="./rfc4579">RFC 4579</a> SIP CC Conferencing for UAs August 2006</span>
Full Copyright Statement
Copyright (C) The Internet Society (2006).
This document is subject to the rights, licenses and restrictions
contained in <a href="https://www.rfc-editor.org/bcp/bcp78">BCP 78</a>, and except as set forth therein, the authors
retain all their rights.
This document and the information contained herein are provided on an
"AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS
OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET
ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED,
INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE
INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
Intellectual Property
The IETF takes no position regarding the validity or scope of any
Intellectual Property Rights or other rights that might be claimed to
pertain to the implementation or use of the technology described in
this document or the extent to which any license under such rights
might or might not be available; nor does it represent that it has
made any independent effort to identify any such rights. Information
on the procedures with respect to rights in RFC documents can be
found in <a href="https://www.rfc-editor.org/bcp/bcp78">BCP 78</a> and <a href="https://www.rfc-editor.org/bcp/bcp79">BCP 79</a>.
Copies of IPR disclosures made to the IETF Secretariat and any
assurances of licenses to be made available, or the result of an
attempt made to obtain a general license or permission for the use of
such proprietary rights by implementers or users of this
specification can be obtained from the IETF on-line IPR repository at
<a href="http://www.ietf.org/ipr">http://www.ietf.org/ipr</a>.
The IETF invites any interested party to bring to its attention any
copyrights, patents or patent applications, or other proprietary
rights that may cover technology that may be required to implement
this standard. Please address the information to the IETF at
ietf-ipr@ietf.org.
Acknowledgement
Funding for the RFC Editor function is provided by the IETF
Administrative Support Activity (IASA).
Johnston & Levin Best Current Practice [Page 43]
</pre>
|