RFC 5370
The Session Initiation Protocol (SIP) Conference Bridge Transcoding Model
RFC 5370: The Session Initiation Protocol (SIP) Conference Bridge Transcoding Model β¨
Okay bestie, this one is from the Network Working Group and it's written by G. Camarillo from Ericsson π . It's a Standards Track doc, dated October 2008. It doesn't obsolete or update anything listed in its header, so it's a fresh standalone spec π¦. Part 1 is below, so stay tuned for more π.
Status of This Memo π
This doc is an Internet standards track protocol for the Internet community, and it's asking for discussion and suggestions for improvements πΈ. If you want the current standardization state and status of this protocol, go check the current edition of the "Internet Official Protocol Standards" (STD 1) π. Distribution of this memo is unlimited π.
Abstract β¨
So the big idea here is how to invoke transcoding services using the conference bridge model π. This way of doing it meets the SIP requirements for transcoding services invocation, which exist to support deaf, hard of hearing, and speech-impaired individuals π«Ά. That's honestly so important π.
Table of Contents π
1. Introduction ....................................................2
2. Terminology .....................................................3
3. Caller's Invocation .............................................3
3.1. Procedures at the User Agent ...............................3
3.2. Procedures at the Transcoder ...............................3
3.3. Example ....................................................4
3.4. Unsuccessful Session Establishment .........................6
4. Callee's Invocation .............................................7
5. Security Considerations .........................................7
6. Contributors ....................................................8
7. References ......................................................8
7.1. Normative References .......................................8
7.2. Informative References .....................................9
1. Introduction π¦
Okay so [RFC5369] describes how two SIP [RFC3261] UAs (User Agents) can discover incompatibilities that stop them from establishing a session π. Think of it like no common codec, or no common media type π. When that happens, the UAs need to invoke transcoding services to actually get the session going π . The transcoding framework gives us two models for this: the 3pcc (third-party call control) model [RFC4117] and the conference bridge model πΈ. This doc is all about the conference bridge model β¨.
So in the conference bridge model, a transcoding server that offers a particular transcoding service (like speech-to-text) acts as a B2BUA (Back-to-Back User Agent) between both UAs π. It's identified by a URI π. In Figure 1, both UAs, A and B, swap signalling and media with the transcoder T π₯. And the UAs don't exchange any traffic, signalling or media, directly with each other π ββοΈ. The whole thing goes through T, no cap π.
+-------+
| |**
| T | **
| |\ **
+-------+ \\ **
^ * \\ **
| * \\ **
| * SIP **
SIP * \\ **
| * \\ **
| * \\ **
v * \ **
+-------+ +-------+
| | | |
| A | | B |
| | | |
+-------+ +-------+
<-SIP-> Signalling
******* Media
Figure 1: Conference bridge model
Sections 3 and 4 are where we get into how the caller A or the callee B, respectively, can use the conference bridge model to invoke transcoding services from T π§.
2. Terminology π
Here's the deal with the key words. In this doc, the key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" get read the way BCP 14, RFC 2119 [RFC2119] says π. They tell you the requirement levels for compliant implementations, so pay attention to them ππ .
3. Caller's Invocation π
Okay, so User agent A has to do two things to invoke transcoding services from T for a session between user agent A and user agent B π. First, user agent A has to establish a session with T πΈ. Second, it has to give T the URI of user agent B, so T can generate an INVITE towards user agent B π¦.
3.1. Procedures at the User Agent π
User agent A uses the procedures from RFC 5366 [RFC5366] to give T B's URI, and it does that in the same INVITE that sets up the session between A and T β¨. So user agent A adds a body part to the INVITE whose disposition type is recipient-list [RFC5363] π . That body part has a URI-list with exactly one URI in it: user agent B's URI π«Ά.
Note that, as described in the transcoding framework [RFC5369], the transcoding model in this document is modeled as a two-party conference server. So this document focuses on two-party sessions that need transcoding π. Multi-party sessions can be set up with INVITE requests that have multiple URIs in their bodies, as specified in [RFC5366] π.
3.2. Procedures at the Transcoder π§
When the transcoder gets an INVITE with a URI-list body, it follows the procedures in [RFC5366] to generate an INVITE request towards the URI in that URI-list body π. And just to be super clear, the transcoder acts as a B2BUA, not a proxy π₯.
Also, the transcoder MUST generate the From header field of the outgoing INVITE request with the same value as the From header field in the incoming INVITE request π. That's subject to the privacy requirements (see [RFC3323] and [RFC3325]) expressed in the incoming INVITE request π. Note that this doesn't apply to the "tag" parameter π ββοΈ.
The session description the transcoder puts in the outgoing INVITE request depends on what type of transcoding service that particular transcoder provides π¦. For example, a transcoder that resolves audio codec incompatibilities would generate a session description listing the audio codecs it supports π§.
When the transcoder gets a final response for the outgoing INVITE requests, it generates a new final response for the incoming INVITE request πΈ. This new final response SHOULD have the same status code as the one received in the response for the outgoing INVITE request β¨.
If a transcoder gets an INVITE request with a URI-list that has more than one URI, it SHOULD return a 488 (Max 1 URI allowed in URI-list) response ππ.
3.3. Example π
Figure 2 shows the message flow for the caller's invocation of a transcoder T π¬. The caller A sends an INVITE (1) to the transcoder (T) to set up the session A-T π. Following the procedures in [RFC5366], the caller A adds a body part whose disposition type is recipient-list [RFC5363] π«Ά.
A T B
| | |
|-----(1) INVITE SDP A----->| |
| | |
|<-(2) 183 Session Progress-| |
| |-----(3) INVITE SDP TB---->|
| | |
| |<-----(4) 200 OK SDP B-----|
| | |
| |---------(5) ACK---------->|
|<----(6) 200 OK SDP TA-----| |
| | |
|---------(7) ACK---------->| |
| | |
| ************************* | ************************* |
|** Media **|** Media **|
| ************************* | ************************* |
| | |
Figure 2: Successful invocation of a transcoder by the caller
The following example shows an INVITE with two body parts: an SDP [RFC4566] session description and a URI-list π.
INVITE sip:transcoder@example.com SIP/2.0
Via: SIP/2.0/TCP client.chicago.example.com
;branch=z9hG4bKhjhs8ass83
Max-Forwards: 70
To: Transcoder <sip:transcoder@example.org>
From: A <sip:A@chicago.example.com>;tag=32331
Call-ID: d432fa84b4c76e66710
CSeq: 1 INVITE
Contact: <sip:A@client.chicago.example.com>
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER,
SUBSCRIBE, NOTIFY
Allow-Events: dialog
Accept: application/sdp, message/sipfrag
Require: recipient-list-invite
Content-Type: multipart/mixed;boundary="boundary1"
Content-Length: 556
--boundary1
Content-Type: application/sdp
v=0
o=example 2890844526 2890842807 IN IP4 chicago.example.com
s=-
c=IN IP4 192.0.2.1
t=0 0
m=audio 50000 RTP/AVP 0
a=rtpmap:0 PCMU/8000
--boundary1
Content-Type: application/resource-lists+xml
Content-Disposition: recipient-list
<?xml version="1.0" encoding="UTF-8"?>
<resource-lists xmlns="urn:ietf:params:xml:ns:resource-lists"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<list>
<entry uri="sip:B@example.org" />
</list>
</resource-lists>
--boundary1--
Once the INVITE arrives, the transcoder generates a brand new INVITE towards the callee π. Remember, the transcoder acts as a B2BUA, not as a proxy π . So this new INVITE (3) belongs to a different transaction than the INVITE (1) the transcoder received π¦.
When the transcoder gets a final response (4) from the callee, it generates a new final response (6) for INVITE (1) π. And this new final response (6) has the same status code as the one it got back from the callee in response (4) β¨. Part 2 picks up from here, so keep an eye out π«ΆπΈ
3.4. Unsuccessful Session Establishment
Okay so Figure 3 shows a similar message flow to the one in Figure 3 (yes, the spec really says that π). This time, though, the callee sends back a non-2xx final response (4), so the transcoder sends a non-2xx final response (6) back to the caller too π.
A T B
| | |
|-----(1) INVITE SDP A----->| |
| | |
|<-(2) 183 Session Progress-| |
| |-----(3) INVITE SDP TB---->|
| | |
| |<----(4) 603 Decline-------|
| | |
| |---------(5) ACK---------->|
|<----(6) 603 Decline-------| |
| | |
|---------(7) ACK---------->| |
| | |
Figure 3: Unsuccessful session establishment
Here's the tea π΅. If the provisional response (2) gets lost, the caller has no idea whether the 603 (Decline) response means the transcoder rejected the initial INVITE (1), or whether the callee rejected the INVITE the transcoder generated (4). That's literally the ambiguity π. The "History-Info" header field [RFC4244] sent between the transcoder and the caller fixes that mess β¨.
Note that this ambiguity could also have been solved by having transcoders act as a pure conference bridge. In that setup, the transcoder would reply with a 200 (OK) to the caller's INVITE request, and then send its own outgoing INVITE request to the callee. The caller would find out how the latter INVITE request went by subscribing to the conference event package [RFC4575] at the transcoder. This would also fix the ambiguity without needing support for the "History-Info" header field. But it's way more complex, needs a higher number of messages, and adds higher session setup delays π. That's why it wasn't picked for transcoding services.
4. Callee's Invocation β¨
So if a UA gets an INVITE with a session description that isn't acceptable, it can redirect it to the transcoder using a 302 (Moved Temporarily) response π¦. The Contact header field of that 302 (Moved Temporarily) response holds the URI of the transcoder plus a "?body=" parameter. That parameter carries a recipient-list body with B's URI. Heads up: some escaping (for example, for Carriage Returns and Line Feeds) is needed to encode a recipient-list body in that parameter. The flow for this scenario is in Figure 4 π.
A T B
| | |
|-------------------(1) INVITE SDP A------------------->|
| | |
|<--------------(2) 302 Moved Temporarily---------------|
| | |
|-----------------------(3) ACK------------------------>|
| | |
|-----(4) INVITE SDP A----->| |
| | |
|<-(5) 183 Session Progress-| |
| |-----(6) INVITE SDP TB---->|
| | |
| |<-----(7) 200 OK SDP B-----|
| | |
| |---------(8) ACK---------->|
|<----(9) 200 OK SDP TA-----| |
| | |
|--------(10) ACK---------->| |
| | |
| ************************* | ************************* |
|** Media **|** Media **|
| ************************* | ************************* |
Figure 4: Callee's invocation of a transcoder
Honestly, the syntax you get from encoding a body into a URI like that is pretty messy π. So it's actually simpler for callees to invoke transcoding services with the 3pcc transcoding model [RFC4117] instead.
5. Security Considerations π
Transcoders that implement this spec act as a URI-list service, as described in [RFC5366]. So the security considerations for URI-list services discussed in [RFC5363] apply here too π .
The big deal here is list integrity and unsolicited requests. User agents SHOULD integrity protect URI-lists using mechanisms such as S/MIME [RFC3850] or TLS [RFC5246], which can also give URI-list confidentiality if you need it π. On top of that, transcoders MUST authenticate and authorize users, and they MAY pass along info about the identity of the original sender in their outgoing requests by using the SIP identity mechanism [RFC4474]. Don't skip this, bestie π¨.
The requirement in [RFC5363] to use opt-in lists (for example, using RFC 5360 [RFC5360]) deserves a special talk. The type of URI-list service that transcoders following this spec provide doesn't cause amplification, because the transcoder only generates one INVITE request when it gets an INVITE request from a user agent. It also doesn't translate to a URI that might be unknown to the caller, since the caller puts the callee's URI in the body of its initial INVITE request. On top of that, the caller's identity is in the INVITE request the transcoder generates. So there's no requirement for transcoders implementing this spec to use opt-in lists β¨.
6. Contributors π«Ά
This document came out of discussions among the conferencing design team. The members of this team are Eric Burger, Henning Schulzrinne, and Arnoud van Wijk π.
7. References π
7.1. Normative References
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119, March 1997.
[RFC5246] Dierks, T. and E. Rescorla, "The Transport Layer Security
(TLS) Protocol Version 1.2", RFC 5246, August 2008.
[RFC3261] Rosenberg, J., Schulzrinne, H., Camarillo, G., Johnston,
A., Peterson, J., Sparks, R., Handley, M., and E.
Schooler, "SIP: Session Initiation Protocol", RFC 3261,
June 2002.
[RFC3323] Peterson, J., "A Privacy Mechanism for the Session
Initiation Protocol (SIP)", RFC 3323, November 2002.
[RFC3325] Jennings, C., Peterson, J., and M. Watson, "Private
Extensions to the Session Initiation Protocol (SIP) for
Asserted Identity within Trusted Networks", RFC 3325,
November 2002.
[RFC3850] Ramsdell, B., Ed., "Secure/Multipurpose Internet Mail
Extensions (S/MIME) Version 3.1 Certificate Handling", RFC
3850, July 2004.
[RFC4117] Camarillo, G., Burger, E., Schulzrinne, H., and A. van
Wijk, "Transcoding Services Invocation in the Session
Initiation Protocol (SIP) Using Third Party Call Control
(3pcc)", RFC 4117, June 2005.
[RFC5369] Camarillo, G., "Framework for Transcoding with the Session
Initiation Protocol", RFC 5369, October 2008.
[RFC5363] Camarillo, G. and A.B. Roach, "Framework and Security
Considerations for Session Initiation Protocol (SIP) URI-
List Services", RFC 5363, October 2008.
[RFC5366] Camarillo, G. and A. Johnston, "Conference Establishment
Using Request-Contained Lists in the Session Initiation
Protocol (SIP)", RFC 5366, October 2008.
[RFC4244] Barnes, M., Ed., "An Extension to the Session Initiation
Protocol (SIP) for Request History Information", RFC 4244,
November 2005.
[RFC4474] Peterson, J. and C. Jennings, "Enhancements for
Authenticated Identity Management in the Session
Initiation Protocol (SIP)", RFC 4474, August 2006.
7.2. Informative References
[RFC4566] Handley, M., Jacobson, V., and C. Perkins, "SDP: Session
Description Protocol", RFC 4566, July 2006.
[RFC4575] Rosenberg, J., Schulzrinne, H., and O. Levin, Ed., "A
Session Initiation Protocol (SIP) Event Package for
Conference State", RFC 4575, August 2006.
[RFC5360] Rosenberg, J., "A Framework for Consent-Based
Communications in the Session Initiation Protocol (SIP)",
RFC 5360, October 2008.
Author's Address ποΈ
Gonzalo Camarillo
Ericsson
Hirsalantie 11
Jorvas 02420
Finland
EMail: Gonzalo.Camarillo@ericsson.com
Full Copyright Statement Β©οΈ
Copyright (C) The IETF Trust (2008).
This document is subject to the rights, licenses and restrictions contained in BCP 78. Except as set forth there, the authors keep all their rights.
This document and the information in it are provided on an "AS IS" basis. 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 doesn't take a position on whether any Intellectual Property Rights or other rights that someone might claim over the technology in this document are valid or in scope. It also doesn't say whether any license under those rights might or might not be available, and it hasn't made any independent effort to find such rights. Info on how rights work for RFC documents is in BCP 78 and BCP 79 π.
Copies of IPR disclosures sent to the IETF Secretariat, plus any assurances of licenses that will be available, or the results of an attempt to get a general license or permission to use those proprietary rights for implementers or users of this spec, can be found in the IETF online IPR repository at http://www.ietf.org/ipr.
The IETF invites anyone interested to bring to its attention any copyrights, patents, patent applications, or other proprietary rights that may cover technology needed to implement this standard. Send that info to the IETF at ietf-ipr@ietf.org π¦.
π¦ where this page comes from
- ietf: rfc5370 2008-10
- π girlified by claude-haiku-5-5 on : a language model's rewrite of the original, under its terms