RFC 4583

Session Description Protocol (SDP) Format for Binary Floor Control Protocol (BFCP) Streams

πŸ“… published November 2006, from ietf

Session Description Protocol (SDP) Format for Binary Floor Control Protocol (BFCP) Streams πŸŽ€

okay bestie, this is RFC 4583 πŸ’– It's a Standards Track doc, written by G. Camarillo at Ericsson, and it's dated November 2006. The header doesn't list anything it obsoletes or updates, so it's standing on its own πŸ’…

Status of This Memo ✨

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

Copyright (C) The IETF Trust (2006).

Abstract πŸ“

This doc explains how to describe Binary Floor Control Protocol (BFCP) streams in Session Description Protocol (SDP) descriptions. User agents that use the offer/answer model to set up BFCP streams put this format in their offers and answers. 🧚

Table of Contents πŸ’œ

1. Introduction ....................................................2
2. Terminology .....................................................2
3. Fields in the 'm' Line ..........................................2
4. Floor Control Server Determination ..............................3
5. The 'confid' and 'userid' SDP Attributes ........................5
6. Association between Streams and Floors ..........................5
7. TCP Connection Management .......................................5
8. Authentication ..................................................6
9. Examples ........................................................7
10. Security Considerations ........................................8
11. IANA Considerations ............................................8
   11.1. Registration of the 'TCP/BFCP' and 'TCP/TLS/BFCP'
         SDP 'proto' Values ........................................8
   11.2. Registration of the SDP 'floorctrl' Attribute .............8
   11.3. Registration of the SDP 'confid' Attribute ................9
   11.4. Registration of the SDP 'userid' Attribute ................9
   11.5. Registration of the SDP 'floorid' Attribute ..............10
12. Acknowledgements ..............................................10
13. Normative References ..........................................10

1. Introduction ✨

okay so the BFCP (Binary Floor Control Protocol) spec [8] says a BFCP client needs a set of data to set up a BFCP connection to a floor control server πŸŽ€ That data includes the server's transport address, the conference identifier, and the user identifier.

One way clients can get this info is an offer/answer [4] exchange. This doc explains how to put that info into the SDP session descriptions that are part of an offer/answer exchange πŸ’…

User agents usually use the offer/answer model to set up a bunch of media streams of different types. Following that model, a BFCP connection is described like any other media stream: you use an SDP 'm' line, and you can follow it with some attributes encoded in 'a' lines ⭐

2. Terminology 🌈

In this document, the key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" are to be interpreted as described in BCP 14, RFC 2119 [1] and indicate requirement levels for compliant implementations. πŸ”₯

3. Fields in the 'm' Line πŸŽ€

This section explains how to generate an 'm' line for a BFCP stream.

According to the SDP specification [11], the 'm' line format looks like this:

m=<media> <port> <transport> <fmt> ...

The media field MUST have a value of "application" πŸ’–

The port field is set following the rules in [7]. Depending on the value of the 'setup' attribute (discussed in Section 7), the port field either has the port the remote endpoint will start its TCP connection to, or it doesn't matter (aka the endpoint will start the connection toward the remote endpoint). In that case it should be set to a value of 9, which is the discard port. Since BFCP only runs on top of TCP, the port is always a TCP port. A port field value of zero has the standard SDP meaning (i.e., the media stream is rejected) πŸ¦‹

We define two new values for the transport field: TCP/BFCP and TCP/TLS/BFCP. The first one is used when BFCP runs directly on top of TCP, and the second one is used when BFCP runs on top of TLS, which then runs on top of TCP 🧚

The fmt (format) list is ignored for BFCP. The fmt list of BFCP 'm' lines SHOULD contain a single * character πŸ“

Here's an example of an 'm' line for a BFCP connection:

m=application 50000 TCP/TLS/BFCP *

4. Floor Control Server Determination πŸ‘‘

When two endpoints set up a BFCP stream, they need to figure out which one acts as the floor control server. In the most common scenario, a client sets up a BFCP stream with a conference server that acts as the floor control server. Figuring this out is super straightforward, because one endpoint can only act as a client and the other can only act as a floor control server ✨

BUT there are scenarios where both endpoints could act as a floor control server. For example, in a two-party session with an audio stream and a shared whiteboard, the endpoints need to decide which party acts as the floor control server πŸ™ˆ

It also gets more complicated. Sometimes both the offerer and the answerer act as both clients and floor control servers in the same session. For example, in a two-party session with an audio stream and a shared whiteboard, one party acts as the floor control server for the audio stream, and the other acts as the floor control server for the shared whiteboard πŸ’…

We define the 'floorctrl' SDP media-level attribute to handle floor control determination. Its Augmented BNF syntax [2] is:

floor-control-attribute  = "a=floorctrl:" role *(SP role)
role                     = "c-only" / "s-only" / "c-s"

The offerer includes this attribute to say all the roles it's willing to perform:

c-only: The offerer would be willing to act as a floor control client only.

s-only: The offerer would be willing to act as a floor control server only.

c-s: The offerer would be willing to act both as a floor control client and as a floor control server.

If an 'm' line in an offer contains a 'floorctrl' attribute, the answerer MUST include one in the corresponding 'm' line in the answer. The answerer includes this attribute to say which role it will perform. So the answerer picks one of the roles the offerer is willing to perform, and it generates an answer with the matching role for itself 🫢 Table 1 shows the matching roles for an answerer, depending on the offerer's role:

                      +---------+----------+
                      | Offerer | Answerer |
                      +---------+----------+
                      |  c-only |  s-only  |
                      |  s-only |  c-only  |
                      |   c-s   |    c-s   |
                      +---------+----------+

                          Table 1: Roles

Here's what each role means when an answerer chooses it:

c-only: The answerer will act as a floor control client. That means the offerer will act as a floor control server.

s-only: The answerer will act as a floor control server. That means the offerer will act as a floor control client.

c-s: The answerer will act both as a floor control client and as a floor control server. That means the offerer will also act both as a floor control client and as a floor control server.

Endpoints that use the offer/answer model to set up BFCP connections MUST support the 'floorctrl' attribute. A floor control server acting as an offerer or as an answerer SHOULD include this attribute in its session descriptions. 🌸

If the 'floorctrl' attribute isn't used in an offer/answer exchange, the offerer and the answerer act as a floor control client and as a floor control server by default, respectively πŸ¦‹

Here's an example of a 'floorctrl' attribute in an offer. When this attribute shows up in an answer, it only carries one role:

a=floorctrl:c-only s-only c-s

5. The 'confid' and 'userid' SDP Attributes πŸŽ€

We define the 'confid' and 'userid' SDP media-level attributes. A floor control server uses these to give a client a conference ID and a user ID, respectively. Their Augmented BNF syntax [2] is:

confid-attribute      = "a=confid:" conference-id
conference-id         = token
userid-attribute      = "a=userid:" user-id
user-id               = token

The 'confid' and 'userid' attributes carry the integer representation of a conference ID and a user ID, respectively πŸ”’

Endpoints that use the offer/answer model to set up BFCP connections MUST support the 'confid' and 'userid' attributes. A floor control server acting as an offerer or as an answerer SHOULD include these attributes in its session descriptions. πŸ’–

6. Association between Streams and Floors 🧚

We define the 'floorid' SDP media-level attribute. Its Augmented BNF syntax [2] is:

floor-id-attribute = "a=floorid:" token [" mstrm:" token *(SP token)]

The 'floorid' attribute is used in BFCP 'm' lines. It defines a floor identifier and can link it to one or more media streams. The token for the floor ID is the integer representation of the Floor ID used in BFCP. The token for the media stream is a pointer to that media stream, which is identified by an SDP label attribute [9] πŸ“

Endpoints that use the offer/answer model to set up BFCP connections MUST support the 'floorid' and 'label' attributes. A floor control server acting as an offerer or as an answerer SHOULD include these attributes in its session descriptions. ⭐

7. TCP Connection Management 🌈

The TCP connection that carries BFCP is managed with the 'setup' and 'connection' attributes, as defined in [7] πŸ”₯

The 'setup' attribute says which endpoint (client or floor control server) starts the TCP connection. The 'connection' attribute handles TCP connection reestablishment ✨

The BFCP spec [8] describes a bunch of situations where the TCP connection between a client and the floor control server needs to be reestablished. But that spec doesn't describe how reestablishment works, because it depends on how the connection was set up in the first place. BFCP entities using the offer/answer model follow these rules πŸ’…

When the existing TCP connection is reset following the rules in [8], the client SHOULD generate an offer toward the floor control server to reestablish the connection. If a TCP connection can't deliver a BFCP message and times out, the entity that tried to send the message (i.e., the one that detected the TCP timeout) SHOULD generate an offer to reestablish the TCP connection 🫢

Endpoints that use the offer/answer model to set up BFCP connections MUST support the 'setup' and 'connection' attributes. πŸ‘‘


part 1 is a wrap πŸ¦‹ part 2 is coming with Authentication, Examples, Security, IANA, Acknowledgements and the references, so stay tuned bestie πŸŽ€βœ¨

8. Authentication ✨

okay so bestie, when a BFCP connection gets set up using the offer/answer model, it's assumed that the offerer and the answerer authenticate each other using some mechanism πŸ”. Once that mutual authentication happens, all either side really needs to make sure of is that the entity sending them BFCP messages is the same one that generated the previous offer or answer. that's the whole vibe πŸ’…

When SIP is used to do the offer/answer exchange, the initial mutual authentication happens at the SIP level πŸŽ€. On top of that, SIP uses S/MIME [6] to give you an integrity-protected channel with optional confidentiality for the offer/answer exchange. BFCP totally takes advantage of that integrity-protected offer/answer exchange to do its authentication thing 🫢. Inside that exchange, the offerer and answerer swap the fingerprints of their self-signed certificates. Those self-signed certificates are then used to set up the TLS connection that carries the BFCP traffic between them πŸ¦‹.

BFCP clients and floor control servers follow the rules in [10] about certificate choice and presentation. so basically, unless a 'fingerprint' attribute is included in the session description, the certificate given at the TLS level MUST either be directly signed by one of the other party's trust anchors, or be validated using a certification path that ends at one of the other party's trust anchors [5] πŸ”₯. Endpoints that use the offer/answer model to set up BFCP connections MUST support the 'fingerprint' attribute, and they SHOULD include it in their session descriptions πŸ’œ.

When TLS is used, once the underlying TCP connection is up, the answerer acts as the TLS server no matter what role it played (passive or active) in the TCP establishment procedure 🧚.

9. Examples 🌸

okay this part is so cute, the main chunk of the session description gets left out for brevity, so the examples only show 'm' lines and their attributes πŸ™ˆ.

here's an example of an offer a conference server sends to a client πŸ’–:

m=application 50000 TCP/TLS/BFCP *
a=setup:passive
a=connection:new
a=fingerprint:SHA-1 \
     4A:AD:B9:B1:3F:82:18:3B:54:02:12:DF:3E:5D:49:6B:19:E5:7C:AB
a=floorctrl:s-only
a=confid:4321
a=userid:1234
a=floorid:1 m-stream:10
a=floorid:2 m-stream:11
m=audio 50002 RTP/AVP 0
a=label:10
m=video 50004 RTP/AVP 31
a=label:11

Note that because of RFC formatting conventions, this document splits SDP across lines that would go over 72 characters. a backslash character marks where the line folding happened. that backslash, plus its trailing CRLF and whitespace, would NOT show up in actual SDP content πŸŽ€.

here's the answer the client sends back πŸ¦‹:

m=application 9 TCP/TLS/BFCP *
a=setup:active
a=connection:new
a=fingerprint:SHA-1 \
     3D:B4:7B:E3:CC:FC:0D:1B:5D:31:33:9E:48:9B:67:FE:68:40:E8:21
a=floorctrl:c-only
m=audio 55000 RTP/AVP 0
m=video 55002 RTP/AVP 31

10. Security Considerations πŸ’€

⚠️ this section is SERIOUS, bestie. the security stuff matters a LOT 😭

The BFCP [8], SDP [11], and offer/answer [4] specs each discuss security issues for BFCP, SDP, and offer/answer, respectively. On top of that, [7] and [10] discuss security issues around setting up TCP and TLS connections with an offer/answer model πŸ”.

BFCP assumes that an initial integrity-protected channel is used to swap self-signed certificates between a client and the floor control server. For session descriptions carried in SIP [3], S/MIME [6] is the natural choice for providing that channel πŸ’….

11. IANA Considerations πŸ“

11.1. Registration of the 'TCP/BFCP' and 'TCP/TLS/BFCP' SDP 'proto' Values 🌈

The IANA has registered the following two new values for the SDP 'proto' field under the Session Description Protocol (SDP) Parameters registry ✨:

                   +--------------+-----------+
                   | Value        | Reference |
                   +--------------+-----------+
                   | TCP/BFCP     |  RFC4583  |
                   | TCP/TLS/BFCP |  RFC4583  |
                   +--------------+-----------+

             Table 2: Values for the SDP 'proto' field

11.2. Registration of the SDP 'floorctrl' Attribute πŸŽ€

The IANA has registered the following SDP att-field under the Session Description Protocol (SDP) Parameters registry:

  • Contact name: Gonzalo.Camarillo@ericsson.com
  • Attribute name: floorctrl
  • Long-form attribute name: Floor Control
  • Type of attribute: Media level
  • Subject to charset: No
  • Purpose of attribute: The 'floorctrl' attribute is used to perform floor control server determination.
  • Allowed attribute values: 1*("c-only" / "s-only" / "c-s")

11.3. Registration of the SDP 'confid' Attribute πŸ¦‹

The IANA has registered the following SDP att-field under the Session Description Protocol (SDP) Parameters registry:

  • Contact name: Gonzalo.Camarillo@ericsson.com
  • Attribute name: confid
  • Long-form attribute name: Conference Identifier
  • Type of attribute: Media level
  • Subject to charset: No
  • Purpose of attribute: The 'confid' attribute carries the integer representation of a Conference ID.
  • Allowed attribute values: A token

11.4. Registration of the SDP 'userid' Attribute 🧚

This section instructs the IANA to register the following SDP att-field under the Session Description Protocol (SDP) Parameters registry:

  • Contact name: Gonzalo.Camarillo@ericsson.com
  • Attribute name: userid
  • Long-form attribute name: User Identifier
  • Type of attribute: Media level
  • Subject to charset: No
  • Purpose of attribute: The 'userid' attribute carries the integer representation of a User ID.
  • Allowed attribute values: A token

11.5. Registration of the SDP 'floorid' Attribute πŸ‘‘

This section instructs the IANA to register the following SDP att-field under the Session Description Protocol (SDP) Parameters registry:

  • Contact name: Gonzalo.Camarillo@ericsson.com
  • Attribute name: floorid
  • Long-form attribute name: Floor Identifier
  • Type of attribute: Media level
  • Subject to charset: No
  • Purpose of attribute: The 'floorid' attribute associates a floor with one or more media streams.
  • Allowed attribute values: Tokens

12. Acknowledgements 🫢

Joerg Ott, Keith Drage, Alan Johnston, Eric Rescorla, Roni Even, and Oscar Novo provided useful ideas for this document πŸ’œ.

13. Normative References πŸ“š

  • [1] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997.
  • [2] Crocker, D., Ed. and P. Overell, "Augmented BNF for Syntax Specifications: ABNF", RFC 4234, October 2005.
  • [3] Rosenberg, J., Schulzrinne, H., Camarillo, G., Johnston, A., Peterson, J., Sparks, R., Handley, M., and E. Schooler, "SIP: Session Initiation Protocol", RFC 3261, June 2002.
  • [4] Rosenberg, J. and H. Schulzrinne, "An Offer/Answer Model with Session Description Protocol (SDP)", RFC 3264, June 2002.
  • [5] Housley, R., Polk, W., Ford, W., and D. Solo, "Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile", RFC 3280, April 2002.
  • [6] Ramsdell, B., "Secure/Multipurpose Internet Mail Extensions (S/MIME) Version 3.1 Certificate Handling", RFC 3850, July 2004.
  • [7] Yon, D. and G. Camarillo, "TCP-Based Media Transport in the Session Description Protocol (SDP)", RFC 4145, September 2005.
  • [8] Camarillo, G., Ott, J., and K. Drage, "The Binary Floor Control Protocol (BFCP)", RFC 4582, November 2006.
  • [9] Levin, O. and G. Camarillo, "The Session Description Protocol (SDP) Label Attribute", RFC 4574, July 2006.
  • [10] Lennox, J., "Connection-Oriented Media Transport over the Transport Layer Security (TLS) Protocol in the Session Description Protocol (SDP)", RFC 4572, July 2006.
  • [11] Handley, M., Jacobson, V., and C. Perkins, "SDP: Session Description Protocol", RFC 4566, July 2006.

Author's Address 🌷

Gonzalo Camarillo Ericsson Hirsalantie 11 Jorvas 02420 Finland

EMail: Gonzalo.Camarillo@ericsson.com

Copyright (C) The IETF Trust (2006).

This document is subject to the rights, licenses and restrictions contained in BCP 78, 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, THE IETF TRUST, 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 BCP 78 and BCP 79.

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 http://www.ietf.org/ipr.

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 currently provided by the Internet Society.

πŸ“¦ where this page comes from