Internet Engineering Task Force ftw. Internet Draft I.Miladinovic, J.Stadler draft-miladinovic-sip-multiparty-ext-00.txt IKN, Vienna University February 06, 2001 of Techonlogy Expires: August 2002 SIP Extension for Multiparty Conferencing STATUS OF THIS MEMO This document is an Internet-Draft and is in full conformance with all provisions of Section 10 of RFC2026. Internet-Drafts are working documents of the Internet Engineering Task Force (IETF), its areas, and its working groups. Note that other groups may also distribute working documents as Internet- Drafts. Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress". The list of current Internet-Drafts can be accessed at http://www.ietf.org/ietf/1id-abstracts.txt To view the list Internet-Draft Shadow Directories, see http://www.ietf.org/shadow.html. Abstract This document proposes an extension to the Session Initiation Protocol (SIP) that extends SIP for the CONF method and the participant header field. The extension provides that the identity of each participant in a multiparty conference is known by other participants all the time, from the initialization to the end of the conference. Examples of using this extension with different SIP conferencing models are also described. Miladinovic, Stadler [Page 1] Internet Draft SIP Extension for Conferencing February 2002 Table of Contents 1 Introduction . . . . . . . . . . . . . . . . . . . . . . . 3 2 Terminology . . . . . . . . . . . . . . . . . . . . . . . . 3 3 Extension Syntax . . . . . . . . . . . . . . . . . . . . . 4 3.1 CONF Method . . . . . . . . . . . . . . . . . . . . . . . . 4 3.2 Participant Header Field . . . . . . . . . . . . . . . . . 5 4 Extension Semantics . . . . . . . . . . . . . . . . . . . . 6 4.1 Behavior of User Agent Clients (UAC) . . . . . . . . . . . 6 4.2 Behavior of User Agent Servers (UAS) . . . . . . . . . . . 6 4.3 Behavior of Proxy and Redirect Servers . . . . . . . . . . 7 4.4 Behavior of Conference Servers . . . . . . . . . . . . . . 7 5 Compatibility Issues . . . . . . . . . . . . . . . . . . . 7 6 Examples . . . . . . . . . . . . . . . . . . . . . . . . . 7 6.1 End System Mixing . . . . . . . . . . . . . . . . . . . . . 8 6.2 Dial-In Conference Server . . . . . . . . . . . . . . . . . 10 6.2.1 Initialization of the Conference . . . . . . . . . . . . . 10 6.2.2 Inviting Users to Join the Conference . . . . . . . . . . . 11 6.3 Ad-hoc Centralized Conferences . . . . . . . . . . . . . . 12 6.4 Dial-Out Conference Server . . . . . . . . . . . . . . . . 12 6.5 Centralized Signaling, Distributed Media . . . . . . . . . 13 7 Security aspects . . . . . . . . . . . . . . . . . . . . . 13 References . . . . . . . . . . . . . . . . . . . . . . . . 14 Authors' Addresses . . . . . . . . . . . . . . . . . . . . 14 Full Copyright Statement . . . . . . . . . . . . . . . . . 14 Miladinovic, Stadler [Page 2] Internet Draft SIP Extension for Conferencing February 2002 1 Introduction Session Initiation Protocol (SIP) [1] has been originally developed as a signaling protocol for large multicast conferences. Nowadays, SIP is mostly used for signaling of point-to-point conferences. There are also several possibilities for signaling of multiparty conferences in SIP, as described in [2]. One important issue for multiparty conferences is the discovery of participant identities. Conferencing models described in [2] use Real Time Transmission Protocol (RTP) and Real Time Transmission Control Protocol (RTCP) [3] for that purpose. More exactly, the Session Description messages (SDES) of RTCP, which specify the identity of the sender, are used. Participant discovery with the RTCP works very well especially for large multicast conferences. However, there are two problems when using RTCP SDES: -) A Participant in "stealth" mode can suppress RTCP SDES. In this case this participant is invisible for others in the conference. -) When SIP is used for signaling, a session must be established (SIP uses a three way handshake: INVITE, OK, ACK) in order to start media transmission via RTP. There is no possibility to distribute participant identities before the conference starts. Therefore a user that is invited to a conference has to make decision about joining the conference without knowing the identities of other participants. Moreover, this user even does not know that this call is a multiparty conference. In order to solve these problems, the discovery of participant identities has to be accomplished either by the signaling protocol (SIP) or by another protocol that is used in addition to SIP and RTP. The use of such a protocol would increase overhead and complexity of a conference session. Therefore, the information about participants' identities should be distributed by SIP. In a two party call, SIP uses the header field "from" to specify the identity of the caller. Multiparty conferences cannot use this header with a list of participants because this header specifies only the sender of the request. Neither is any other SIP header suitable to transmit this information. This document proposes a SIP extension for participant discovery in a multiparty conference. It extends SIP for one method called CONF and one header field called participant. With this extension a SIP UA is able to indicate the list of conference participants to the user when the conference is being initialized and all the time of the conference duration. 2 Terminology The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC 2119. Miladinovic, Stadler [Page 3] Internet Draft SIP Extension for Conferencing February 2002 3 Extension Syntax This part specifies the syntax of the CONF method and of the participant header field. 3.1 CONF Method The purpose of this method is updating of participant lists between conference participants. A CONF request is usually sent when a user joins or leaves the conference. The CONF method SHOULD NOT contain any body. Unless other specified in this document, the reliability mechanisms for the CONF method are the same as for the BYE request defined in [1]. Tables 1 and 2 extend tables 4 and 5 in [1] for a column that describes the header fields used in the CONF method. Header Where CONF ------ ----- ---- Accept R o Accept-Encoding R o Accept-Language R o Allow 200 - Allow 405 o Authorization R o Call-ID gc m Contact R o Contact 1xx - Contact 2xx - Contact 3xx - Contact 485 - Content-Encoding e - Content-Length e - Content-Type e - CSeq gc m Date g o Encryption g o Expires g o From gc m Hide R o Max-Forwards R o Organization g o Table 1: Summary of header fields, A-0 A cancellation of the CONF method is allowed and can be done by sending a CANCEL request after the CONF request. In that case any information about conference participants carried in the CONF request MUST be ignored. The CONF request MUST be sent within a call. A CONF request without a corresponding call MUST be refused with a 481 (Call Leg/Transaction Does Not Exist) response. Miladinovic, Stadler [Page 4] Internet Draft SIP Extension for Conferencing February 2002 Header Where CONF ------ ----- ---- Priority R o Proxy-Authenticate 407 o Proxy-Authorization R o Proxy-Require R o Require R o Retry-After R - Retry-After 404,480,486 o Retry-After 503 o Retry-After 600,603 o Response-Key R o Record-Route R o Record-Route 2xx o Route R o Server r o Subject R o Timestamp g o To gc(1) m Unsupported 420 o User-Agent g o Via gc(2) m Warning r o WWW-Authenticate 401 o Table 2: Summary of header fields, P-Z 3.2 Participant Header Field The participant header is an additional general header in SIP. The syntax for the participant header is: Participant = ( "Participant" | "p" ) ":" 1# (( name-addr | addr-spec ) [ *( ";" participant-params ) ]) participant-params = ("status" "=" "active" | "invited" | "joining") | extension-attribute extension-attribute = extension-name [ "=" extension-value ] The definitions of name-addr and addr-spec are given in [1]. This header contains URIs of all participants in the conference, except the sender and receiver of the CONF request, which are specified in the from and to header fields respectively. The status parameter can be optionally used to specify status of participants. Currently there are three types of status defined: -) active - user is an active participant of the conference -) invited - user is being invited to this conference -) joining - user is trying to join to the conference If the status parameter is not specified for a participant, the status active is assumed. Miladinovic, Stadler [Page 5] Internet Draft SIP Extension for Conferencing February 2002 Table 2 defines a new row in the table 5 in the [1] for the participant header: where enc. e-e ACK BYE CAN INV OPT REG ___________________________________________________ Participant g c e o o - o - - Table 2: Participant header Additionally, this header can be used in the REFER method, specified in [4]. The CONF method, as defined in this document, MUST use participant header field. 4 Extension Semantics This part describes behavior of SIP components that support the conferencing extension. The behavior of each SIP component including the conference server is described in a separate section. 4.1 Behavior of User Agent Clients (UAC) A SIP UAC MUST use the CONF method whenever the UAC changes list of conference participants e.g. by inviting a user to a conference. The UAC MUST send this method with the updated list of participants to all participants in the conference except the new one and those participants that do not support this method. The participant header MUST be used in a CONF request. It SHOULD also be used in an INVITE request when it: -) initiates a multiparty conference -) adds a new user to an existing conference. Finally, the participant header field SHOULD be used in a REFER request when referring to a conference with a conference server. 4.2 Behavior of User Agent Servers (UAS) A UAS that receives a CONF request MUST firstly check if there is an active session (call) this request is referring to. If there is no such session or if the request is not valid, the UAS MUST reply with a 481 (Call Leg/Transaction Does Not Exist) response. If an active session exists, the participant header field is used to update the participant list of the UAS. The UAS SHOULD indicate this information to the user. Finally, the CONF request is responded by a 200 (OK) response. If a UAS receives an INVITE or REFER request, it SHOULD look for the participant header field and if there is any, the value of this header SHOULD be used to create the list of participants and to inform the user about the conference call. The user is then aware that it is a conference and can than decide to accept or decline the invitation to participate in the conference. Miladinovic, Stadler [Page 6] Internet Draft SIP Extension for Conferencing February 2002 4.3 Behavior of Proxy and Redirect Servers There is no special requirement to proxy and redirect servers caused by this extension. Both of them SHOULD forward a CONF request like a BYE request. The participant header field SHOULD be ignored by these servers. 4.4 Behavior of Conference Servers A conference server can be either dial-in or dial-out. When a dial-in conference server receives an INVITE request from a user that wants to join in an existing conference and when the conference server allows this user to join, it SHOULD check if there is a participant header field in this request. If yes, the value of this header field is compared with the participant list of the conference server. If there is no difference, the 200 (OK) response is sent without the participant header field. If there is a difference or if the participant header field is missing in the INVITE request, the conference server SHOULD insert the participant header field with an actual list of participants in the 200 (OK) response. A dial-out conference server SHOULD insert the participant header field in each INVITE request it sends. Following applies for both, dial-in and dial-out conference server. A conference server changes its participant list when a new user participates in the conference or when a conference participant leaves the conference. In both cases, the conference server MUST send a CONF request to all conference participants, except the new one (in the first case) and those participants that do not support this extension. 5 Compatibility Issues A UA that does not support this extension will not be able to indicate conference participants. It ignores the participant header field and responds to a CONF request with a 501 (Not Implemented) response. Any other functionality of such a UA will be the same as without this extension. The UA that supports this extension and is in a conference with a UA that does not support it, will be able to know about the identity of the UA that does not support the extension (the only exception is the case of an end system mixing conference where the UA that does not support the extension is used as the mixing UA). If a conference server does not support this extension, the discovery of participant identities will not be possible for conferences that use this conference server, even for the UA that supports the extension. 6 Examples This section describes usage of the conferencing extension in different conferencing models described in [2]. Note that this extension is not suitable for large multicast conferencing and Miladinovic, Stadler [Page 7] Internet Draft SIP Extension for Conferencing February 2002 therefore this conferencing model will not be treated here. Participant discovery for these conferences should be done by RTCP, as proposed in [2]. For the first conferencing model complete SIP messages will be given. However, for other examples only the message part that is important for understanding of this extension (and not of particular conferencing model) will be denoted. 6.1 End System Mixing In this conferencing model the conference is created from a two party call. An UA in a two party call invites another user and creates the conference. Both, signaling and media data is mixed by this UA. Consider the example where A and B are in a two party call. Later on, A decides to invite another user C to the conference (Figure 1). User A User B User C | RTP Media | | |<==================>| F1 INVITE | |---------------------------------------->| | | F2 200 OK | |<----------------------------------------| | F4 CONF | | |------------------->| | | F5 200 OK | | |<-------------------| | | | F3 ACK | | --------------------------------------->| | | RTP Media | |<=======================================>| | | | Figure 1: End system mixing conference All messages are supposed to go directly from one UA to the other without passing any server. A sends following request to C: F1 INVITE A->C INVITE sip:c@c_machine.example.com SIP/2.0 Via: SIP/2.0/UDP a_machine.example.com From: sip:a@example.com;tag=34523 To: sip:c@example.com Call-ID: 3428760@a_machine.example.com Contact: sip:c@a_machine.example.com CSeq: 1 INVITE Subject: Conference Participant: ;stauts=active Content-Type: application/sdp Contact-Length: 123 (A's SDP not shown) Miladinovic, Stadler [Page 8] Internet Draft SIP Extension for Conferencing February 2002 Now C is able to make a decision whether to accept or decline this call. Note that, because of the participant header field, C is aware that it is a conference and also sees the identity of the other conference participant(s). Suppose that C accepts this call by sending the following response: F2 200 OK C->A SIP/2.0 200 OK Via: SIP/2.0/UDP a_machine.example.com From: sip:a@example.com;tag=34523 To: sip:c@example.com;tag=52848 Call-ID: 3428760@a_machine.example.com Contact: sip:c@c_machine.example.com CSeq: 1 INVITE Participant: ;stauts=active Content-Type: application/sdp Contact-Length: 123 (C's SDP not shown) A sends a CONF request to B in order to inform B about the new conference participant. Note that B is aware of the new participant before receiving any media data from the new participant. If B does not want to communicate with C, B can simply send a BYE request and leave the conference. F3 CONF A->B CONF sip:b@b_machine.example.com SIP/2.0 Via: SIP/2.0/UDP a_machine.example.com From: sip:a@example.com;tag=43223 To: sip:b@example.com;tag=451248 Call-ID: 34200014@a_machine.example.com CSeq: 2 CONF Participant: ;stauts=active F4 200 OK B->A SIP/2.0 200 OK Via: SIP/2.0/UDP a_machine.example.com From: sip:a@example.com;tag=43223 To: sip:b@example.com;tag=451248 Call-ID: 34200014@a_machine.example.com CSeq: 2 CONF Participant: ;stauts=active The Call-ID and the tag parameter in the from and to header fields are the same as in the initial invite transaction of this session. The status parameter is set to active, because C has already sent the 200 (OK) response. The last step is the ACK request from A to C: Miladinovic, Stadler [Page 9] Internet Draft SIP Extension for Conferencing February 2002 F5 ACK A->C ACK sip:c@c_machine.example.com SIP/2.0 Via: SIP/2.0/UDP a_machine.example.com From: sip:a@example.com;tag=34523 To: sip:c@example.com;tag=52848 Call-ID: 3428760@a_machine.example.com CSeq: 1 ACK 6.2 Dial-In Conference Server In this conferencing model users participate the conference by sending an INVITE request to the conference server (CS). The conference is identified by the request URI of the INVITE request. A conference participant can invite any user to join in the conference by sending a REFER request. 6.2.1 Initialization of the Conference The identifier of these conferences is the SIP URL and it must be distributed to all users that participate in the conference. Let us assume that users A, B and C want to initiate a conference and that the SIP URL has already been distributed to all of these users. They send an INVITE request to the CS. Suppose the requests from A, B and C arrive at the same time. User A User B User C Conf. Server | | | | | INVITE | | | |------------------------------------------------->| | | INVITE | | | |-------------------------------->| | | | INVITE | | F1 200 OK | |--------------->| |<-------------------------------------------------| ... | F2 CONF | | | |<-------------------------------------------------| | 200 OK | | | |------------------------------------------------->| ... Figure 2: Initialization of a conference with a dial-in server The answer of the CS to A is a 200 OK response that contains following header field: F1 200 OK CS->A ... Participant: ;status=joining, ;status=joining ... Now A knows that B and C are also trying to join the conference and that the conference is just being created (because there are no Miladinovic, Stadler [Page 10] Internet Draft SIP Extension for Conferencing February 2002 active participants). B and C also receive a 200 OK with corresponding participant header field. After finishing the initialization (by receiving ACK requests form all participants), the CS sends the CONF request to A, B and C with an updated participant list, for example following request is sent to A (only the participant header field is shown): F2 CONF CS->A CONF a@a_machine.example.com SIP/2.0 ... Participant: , ... This request is responded with a 200 OK and the participant list is updated. 6.2.2 Inviting Users to Join the Conference Consider the example where A, B and C are in a conference using a dial-in CS and A wants D to join in the conference (Figure 3). User A User B User C User D Conf. Server | | | | | | F1 REFER | | | | |------------------------------------->| | | 200 OK | | | | |<-------------------------------------| F2 INVITE | | | | F3 CONF |----------->| | | CONF |<------------------------| | CONF |<-------------------------------------| |<--------------------------------------------------| ... | | | | 200 OK | | | | |<-----------| | | | | ACK | | | | |----------->| ... Figure 3: Inviting user to join the conference with a dial-in server A sends a REFER request to D that contains following header field: F1 REFER A->D REFER d@d_machine.example.com SIP/2.0 ... Participant: , ;status=active ... (Note that the status parameter is optional) If D wants to join in the conference, this request is responded with a 200 OK and D sends an INVITE request to the CS using the URI given in the Refer-to header field of the REFER request (this URI is the Miladinovic, Stadler [Page 11] Internet Draft SIP Extension for Conferencing February 2002 conference identifier). This INVITE request also contains the participant header field: F2 INVITE D->CS INVITE confe_ID@confserver.com SIP/2.0 ... Participant: , , ;status=active ... The CS verifies the conference and if D is allowed to join (according to some rules that are not specified in this document), it sends the CONF request to A, B and C. For example, the CONF request that is sent to C contains the following header field: F3 CONF CS->C CONF c@c_machine.example.com SIP/2.0 ... Participant: ;status=active, ;status=active, ;status=joining ... These requests are responded with a 200 OK response (not shown in figure 3). If some participants (A, B or C) do not want to communicate with D, these participants can now leave the conference. After receiving all responses to the CONF request, the CS replies the user D with a 200 (OK) response. Finally, user D sends an ACK request to CS. The CS can now send the CONF request to A, B and C in order to update status of the user D (the status of user D is now active). If it is not necessary that conference participants be informed about a new participant before participation, the first CONF request (where the status of the new participant is set to joining) should not be sent in order to reduce signaling traffic. 6.3 Ad-hoc Centralized Conferences These conferences start as a two party call. Later on, a call party decides to invite another user using a CS. Firstly, the two party call is transformed to a two party call over a CS. Secondly, the new user is invited to join in the conference using a REFER request. For applying this extension there is no difference to the dial-in CS model, as described in 6.2. The participant header field is also used in the REFER request to notify the new user about conference participants. After joining of the new participant, the method CONF is used to inform current participants about the new one. 6.4 Dial-Out Conference Server In a dial-out conference only the CS is able to invite users to the conference. These conferences are usually pre-arranged with a specified begin time and a list of participants. The server sends an Miladinovic, Stadler [Page 12] Internet Draft SIP Extension for Conferencing February 2002 INVITE request to all participants. These INVITE requests contain the participant header field that specifies identities of invited participants. For example if A, B and C are invited to a conference, A will receive the INVITE request with following header field: INVITE CS->A: INVITE a@a_machine.example.com SIP/2.0 ... Participant: ;status=invited, ;status=invited ... With this information A is aware that this conference is being created and A also knows the identities of all invited participants. As in 6.2.1, after finishing the initialization of the conference, the CS sends a CONF request to all participants in order to update the list of conference participants. Only the users that have accepted the invitation will be present in this list. Inviting a new user to join an existing conference is done by sending a REFER request to the CS. If it is necessary to inform conference participants about this invitation before participation, the CS should send a CONF request to all current participants, where the status of the new participant is set to invited. Afterwards, the CS sends an INVITE request to the new user specified in the refer-to header field. This request contains a participant header field that indicates current conference participants. If the new user accepts the invitation, the CS will send a CONF request to all conference participants (except the new one) where the status of the new participant is set to active. 6.5 Centralized Signaling, Distributed Media These conferences use the same signaling mechanism as 6.2 or 6.3 with the difference that the media data is sent directly between participants and not over the CS. For the discovery of participant identifies there is no difference to 6.2 or 6.3. 7 Security Aspects The security mechanisms specified in the SIP specification [1] apply also to this extension. If the list of conference participants is private, the end-to-end encryption can be used to encrypt the participant header field. References [1] M. Handley, H. Schulzrinne, E. Schooler, J. Rosenberg: "SIP: Session Initiation Protocol", Request for Comments 2543, Internet Engineering Task Force, March 1999. [2] J. Rosenberg, H. Schulzrinne: "Models for Multi Party Conferencing in SIP", Internet Draft, Internet Engineering Task Force, November 2001, Work in progress. Miladinovic, Stadler [Page 13] Internet Draft SIP Extension for Conferencing February 2002 [3] H. Schulzrinne, S. Casner, R. Frederick, V. Jacobson: "RTP: A Transport Protocol for Real-Time Applications", Request for Comments 1889, Internet Engineering Task Force, January 1996. [4] R. Sparks: "The Refer Method", Internet Draft, Internet Engineering Task Force, October 2001, Work in progress. Authors' Addresses Igor Miladinovic Institute of Communication Networks Vienna University of Technology Favoritenstrasse 9/388 A-1040 Vienna email: igor.miladinovic@tuwien.ac.at Johannes Stadler Institute of Communication Networks Vienna University of Technology Favoritenstrasse 9/388 A-1040 Vienna email: johannes.stadler@tuwien.ac.at Full Copyright Statement Copyright (C) The Internet Society (2001). All Rights Reserved. This document and translations of it may be copied and furnished to others, and derivative works that comment on or otherwise explain it or assist in its implementation may be prepared, copied, published and distributed, in whole or in part, without restriction of any kind, provided that the above copyright notice and this paragraph are included on all such copies and derivative works. However, this document itself may not be modified in any way, such as by removing the copyright notice or references to the Internet Society or other Internet organizations, except as needed for the purpose of developing Internet standards in which case the procedures for copyrights defined in the Internet Standards process must be followed, or as required to translate it into languages other than English. The limited permissions granted above are perpetual and will not be revoked by the Internet Society or its successors or assigns. This document and the information contained herein is provided on an "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING TASK FORCE DISCLAIMS 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. Miladinovic, Stadler [Page 14]