RFC 4117

Transcoding Services Invocation in the Session Initiation Protocol (SIP) Using Third Party Call Control (3pcc)

πŸ“… published June 2005, from ietf

RFC 4117: Transcoding Services Invocation in the Session Initiation Protocol (SIP) Using Third Party Call Control (3pcc) πŸŽ€

(Part 1 of 4)

  • Series: Network Working Group ✨
  • Number: RFC 4117
  • Authors: G. Camarillo (Ericsson), E. Burger (Brooktrout), H. Schulzrinne (Columbia University), and A. van Wijk (Viataal) πŸ‘―β€β™€οΈ
  • Category: Informational πŸ¦‹
  • Date: June 2005 πŸ“…
  • Obsoletes / Updates: the header doesn't list anything this RFC obsoletes or updates πŸ™ˆ

Status of This Memo πŸ“œ

bestie, this memo is just giving information for the Internet community πŸ’… It does not specify an Internet standard of any kind, so it's not a standard. Distribution of this memo is unlimited 🌈

Copyright (C) The Internet Society (2005).

Abstract 🌸

okay so this doc explains how to invoke transcoding services using Session Initiation Protocol (SIP) and third party call control 🧚 This way of invocation meets the requirements for SIP about transcoding services invocation to support deaf, hard of hearing and speech-impaired individuals 🫢 that's so important, not gonna lie 😭

Table of Contents πŸ“‘

1. Introduction ....................................................2
2. General Overview ................................................2
3. Third Party Call Control Flows ..................................2
   3.1. Terminology ................................................3
   3.2. Callee's Invocation ........................................3
   3.3. Caller's Invocation ........................................8
   3.4. Receiving the Original Stream ..............................8
   3.5. Transcoding Services in Parallel ..........................10
   3.6. Multiple Transcoding Services in Series ...................14
4. Security Considerations ........................................16
5. Normative References ...........................................17
6. Informative References .........................................17

1. Introduction πŸ’–

so the framework for transcoding with SIP [4] explains how two SIP [1] UAs (User Agents) can figure out when they're incompatible and can't set up a session together 😩 (like if they don't both support a common codec or a common media type). When that happens, the UAs need to invoke transcoding services so they can actually establish the session ✨ 3pcc (third party call control) [2] is one way to do that invocation πŸ‘‘

2. General Overview πŸ¦‹

in the 3pcc model for transcoding invocation, there's a transcoding server that offers a particular transcoding service (e.g., speech-to-text), and that server is identified by a URI πŸ”— A UA that wants that service sends an INVITE request to that URI, which sets up a bunch of media streams 🌊 How the transcoder handles and manages what's inside those streams (e.g., the text coming in over the text stream gets turned into speech and sent out over the audio stream) depends on the service itself 🧚

all the call flows in this doc use SDP πŸ“ The same call flows could work with another session description protocol that has similar session description capabilities πŸ’…

3. Third Party Call Control Flows πŸŽ€

okay this is the main event πŸ”₯ Say we have two UAs (A and B) and a transcoding server (T). Invoking a transcoding service means setting up two sessions: A-T and T-B πŸ¦‹ How those sessions get set up depends on who invokes the service, the caller (A) or the callee (B) πŸ‘€ Section 3.2 covers callee invocation and Section 3.3 covers caller invocation πŸ’œ

in all our 3pcc flows, we followed one main rule: a 200 (OK) response from the transcoding service has to come back before we contact the callee 🫢 This tries to make sure the transcoding service is actually available when the callee accepts the session πŸ™Œ

ngl, there's a catch 😬 The transcoding service doesn't know exactly what kind of transcoding it'll be doing until the callee accepts the session. So there's always a chance it fails to provide transcoding after the callee has already accepted πŸ’€ A system with stricter requirements could use preconditions to avoid that situation πŸ”₯ When preconditions are used, the callee doesn't get alerted until everything is ready for the session ✨

3.1. Terminology πŸ“š

all the flows in this document follow the naming convention below πŸ’…

  • SDP A: a session description generated by A πŸ“¨ It contains, among other things, the transport address/es (IP address and port number) where A wants to receive media for each particular stream 🎧
  • SDP B: a session description generated by B πŸ“¨ It contains, among other things, the transport address/es where B wants to receive media for each particular stream 🎢
  • SDP A+B: a session description that contains, among other things, the transport address/es where A wants to receive media and the transport address/es where B wants to receive media 🀝
  • SDP TA: a session description generated by T and intended for A πŸ“¨ It contains, among other things, the transport address/es where T wants to receive media from A 🌸
  • SDP TB: a session description generated by T and intended for B πŸ“¨ It contains, among other things, the transport address/es where T wants to receive media from B πŸ“
  • SDP TA+TB: a session description generated by T that contains, among other things, the transport address/es where T wants to receive media from A and the transport address/es where T wants to receive media from B πŸ§šβ€β™€οΈ

3.2. Callee's Invocation πŸ’–

okay so in this scenario, B gets an INVITE from A and decides to bring in T πŸ¦‹ Figure 1 shows the call flow.

In Figure 1, A can both hear and speak 🎧, and B is a deaf user with a speech impairment 🫢. A proposes a session with an audio stream (1). B only wants to send and receive text, so B calls on a transcoding service T that does both speech-to-text and text-to-speech conversions (2). The session descriptions for Figure 1 are partially shown below ✨

   A                            T                            B

   |                            |                            |
   |--------------------(1) INVITE SDP A-------------------->|
   |                            |                            |
   |                            |<---(2) INVITE SDP A+B------|
   |                            |                            |
   |                            |---(3) 200 OK SDP TA+TB---->|
   |                            |                            |
   |                            |<---------(4) ACK-----------|
   |                            |                            |
   |<-------------------(5) 200 OK SDP TA--------------------|
   |                            |                            |
   |------------------------(6) ACK------------------------->|
   |                            |                            |
   | ************************** | ************************** |
   |*          MEDIA           *|*          MEDIA           *|
   | ************************** | ************************** |
   |                            |                            |

       Figure 1: Callee's Invocation of a Transcoding Service

(1) INVITE SDP A 🌸

        m=audio 20000 RTP/AVP 0
        c=IN IP4 A.example.com

(2) INVITE SDP A+B πŸ“

        m=audio 20000 RTP/AVP 0
        c=IN IP4 A.example.com
        m=text 40000 RTP/AVP 96
        c=IN IP4 B.example.com
        a=rtpmap:96 t140/1000

(3) 200 OK SDP TA+TB 🧚

        m=audio 30000 RTP/AVP 0
        c=IN IP4 T.example.com
        m=text 30002 RTP/AVP 96
        c=IN IP4 T.example.com
        a=rtpmap:96 t140/1000

(5) 200 OK SDP TA πŸ’œ

        m=audio 30000 RTP/AVP 0
        c=IN IP4 T.example.com

Four media streams (aka two bi-directional streams) are set up at this point, and honestly this is so iconic πŸ‘‘

  1. Audio from A to T.example.com:30000
  2. Text from T to B.example.com:40000
  3. Text from B to T.example.com:30002
  4. Audio from T to A.example.com:20000

When either A or B decides to end the session, they send a BYE saying the session is over πŸ‘‹ bye bestie πŸ’…

If the first INVITE (1) that B gets is empty (no session description), the call flow is a little different πŸ™ˆ Figure 2 shows the messages involved.

B might have different reasons for calling on T before knowing A's session description πŸ€” Maybe B wants to hide the fact that it lacks native capabilities, so it returns a session description with all the codecs B supports plus all the codecs T supports πŸŽ€ Or T might offer recording services (on top of transcoding), and B wants T to record the conversation no matter whether transcoding is needed πŸŽ™οΈ

This scenario (Figure 2) is a bit more complex than the last one 😭 In INVITE (2), B still doesn't have SDP A, so it can't give that info to T. When B finally gets SDP A in (6), it has to send it to T. B sends an empty INVITE to T (7) and gets back a 200 OK with SDP TA+TB (8). Generally, this SDP TA+TB can be different from the one sent in (3) πŸ¦‹ That's why B needs to send the updated SDP TA to A in (9). Then A sends a possibly updated SDP A (10), and B sends it to T in (12). On the other hand, if T returns the same SDP TA+TB in (8) as it did in (3), B can skip messages (9), (10), and (11) ✨ So implementors of transcoding services are encouraged to return the same session description in (8) as in (3) in this type of scenario πŸ’– The session descriptions for this flow are shown below:

   A                            T                            B

   |                            |                            |
   |----------------------(1) INVITE------------------------>|
   |                            |                            |
   |                            |<-----(2) INVITE SDP B------|
   |                            |                            |
   |                            |---(3) 200 OK SDP TA+TB---->|
   |                            |                            |
   |                            |<---------(4) ACK-----------|
   |                            |                            |
   |<-------------------(5) 200 OK SDP TA--------------------|
   |                            |                            |
   |-----------------------(6) ACK SDP A-------------------->|
   |                            |                            |
   |                            |<-------(7) INVITE----------|
   |                            |                            |
   |                            |---(8) 200 OK SDP TA+TB---->|
   |                            |                            |
   |<-----------------(9) INVITE SDP TA----------------------|
   |                            |                            |
   |------------------(10) 200 OK SDP A--------------------->|
   |                            |                            |
   |<-----------------------(11) ACK-------------------------|
   |                            |                            |
   |                            |<-----(12) ACK SDP A+B------|
   |                            |                            |
   | ************************** | ************************** |
   |*          MEDIA           *|*          MEDIA           *|
   | ************************** | ************************** |

   Figure 2: Callee's invocation after initial INVITE without SDP

(2) INVITE SDP A+B 🌈

        m=audio 20000 RTP/AVP 0
        c=IN IP4 0.0.0.0
        m=text 40000 RTP/AVP 96
        c=IN IP4 B.example.com
        a=rtpmap:96 t140/1000

(3) 200 OK SDP TA+TB ⭐

        m=audio 30000 RTP/AVP 0
        c=IN IP4 T.example.com
        m=text 30002 RTP/AVP 96
        c=IN IP4 T.example.com
        a=rtpmap:96 t140/1000

(5) 200 OK SDP TA πŸ“

        m=audio 30000 RTP/AVP 0
        c=IN IP4 T.example.com

(6) ACK SDP A 🧚

        m=audio 20000 RTP/AVP 0
        c=IN IP4 A.example.com

(8) 200 OK SDP TA+TB πŸ’œ

        m=audio 30004 RTP/AVP 0
        c=IN IP4 T.example.com
        m=text 30006 RTP/AVP 96
        c=IN IP4 T.example.com
        a=rtpmap:96 t140/1000

(9) INVITE SDP TA 🌸

        m=audio 30004 RTP/AVP 0
        c=IN IP4 T.example.com

(10) 200 OK SDP A πŸŽ€

        m=audio 20002 RTP/AVP 0
        c=IN IP4 A.example.com

(12) ACK SDP A+B πŸ¦‹

        m=audio 20002 RTP/AVP 0
        c=IN IP4 A.example.com
        m=text 40000 RTP/AVP 96
        c=IN IP4 B.example.com
        a=rtpmap:96 t140/1000

Four media streams (aka two bi-directional streams) are set up at this point too πŸŽ‰

  1. Audio from A to T.example.com:30004
  2. Text from T to B.example.com:40000
  3. Text from B to T.example.com:30006
  4. Audio from T to A.example.com:20002

3.3. Caller's Invocation πŸ“ž

okay this one is giving caller energy πŸ’… In this scenario, A wants to set up a session with B using a transcoding service. A uses 3pcc to set up the session between T and B. The call flow here is a little different from the ones in [2] πŸ‘€ In [2], the controller sets up a session between two user agents, and those are the ones deciding what the streams look like. Here, A wants a session between T and B, but A also wants to decide how many streams and which types of streams get set up 🫢 That's why A sends its session description in the first INVITE (1) to T, instead of the media-less initial INVITE recommended by [2]. Figure 3 shows the call flow for this scenario 🧚

We don't include the session descriptions for this flow, since they're very similar to the ones in Figure 2 🌈 In this flow, if T returns the same SDP TA+TB in (8) as in (2), messages (9), (10), and (11) can be skipped ✨

3.4. Receiving the Original Stream

okay so bestie, this is where things get spicy 🌢️✨ sometimes (and the SIP requirements for deaf, hard of hearing, and speech-impaired folks [5] call this out) a user wants to receive BOTH the original stream (like audio) AND the transcoded one (like the speech-to-text output). there are a few ways to make this happen πŸ¦‹ one option is the SDP group attribute with Flow Identification (FID) semantics [3]. FID lets you ask for one stream to be sent to two different transport addresses at the same time, and it looks like this πŸ’…

   A                            T                            B

   |                            |                            |
   |-------(1) INVITE SDP A---->|                            |
   |                            |                            |
   |<----(2) 200 OK SDP TA+TB---|                            |
   |                            |                            |
   |----------(3) ACK---------->|                            |
   |                            |                            |
   |--------------------(4) INVITE SDP TA------------------->|
   |                            |                            |
   |<--------------------(5) 200 OK SDP B--------------------|
   |                            |                            |
   |-------------------------(6) ACK------------------------>|
   |                            |                            |
   |--------(7) INVITE--------->|                            |
   |                            |                            |
   |<---(8) 200 OK SDP TA+TB  --|                            |
   |                            |                            |
   |--------------------(9) INVITE SDP TA------------------->|
   |                            |                            |
   |<-------------------(10) 200 OK SDP B--------------------|
   |                            |                            |
   |-------------------------(11) ACK----------------------->|
   |                            |                            |
   |------(12) ACK SDP A+B----->|                            |
   |                            |                            |
   | ************************** | ************************** |
   |*          MEDIA           *|*          MEDIA           *|
   | ************************** | ************************** |
   |                            |                            |

       Figure 3: Caller's invocation of a transcoding service
a=group:FID 1 2
m=audio 20000 RTP/AVP 0
c=IN IP4 A.example.com
a=mid:1
m=audio 30000 RTP/AVP 0
c=IN IP4 T.example.com
a=mid:2

the catch? πŸ™ˆ most SIP user agents don't support FID at all. and of the tiny handful that DO support FID, only a few can send simultaneous copies of the same media stream at once. plus FID forces both copies to use the SAME codec, which is giving very little flexibility 😭

so we recommend that T (the transcoder, not a user agent) does the replicating instead 🧚 T gets the session description below and does speech-to-text and text-to-speech between the first audio stream and the text stream. T also copies the first audio stream into the second audio stream and sends it to A. slay πŸ’–

m=audio 40000 RTP/AVP 0
c=IN IP4 B.example.com
m=audio 20000 RTP/AVP 0
c=IN IP4 A.example.com
a=recvonly
m=text 20002 RTP/AVP 96
c=IN IP4 A.example.com
a=rtpmap:96 t140/1000

3.5. Transcoding Services in Parallel

okay this one is a whole vibe πŸŽ€ transcoding services are sometimes human relays, like a real person doing speech-to-text and text-to-speech for a call. if the SAME person handles both directions (A to B and B to A), they can hear the entire conversation πŸ‘€ so for some privacy, two different people get assigned to the job, one for A->B and one for B->A. this setup is also handy for automated services, where one machine turns text into synthetic speech (text-to-speech) and another does voice recognition (speech-to-text) πŸ€–πŸ’œ

the scenario has four separate sessions: A-T1, T1-B, B-T2 and T2-A. Figure 4 shows the call flow where A invokes T1 and T2 πŸ¦‹

note that this example uses unidirectional media streams (sendonly or recvonly) so it's crystal clear which transcoder handles which direction πŸ’… but nothing stops you from using bidirectional streams here πŸ’– a human relay could use them to ask for clarifications (like "I did not get that, could you repeat, please?") back to whoever they're getting media from 🫢

(1) INVITE SDP AT1

        m=text 20000 RTP/AVP 96
        c=IN IP4 A.example.com
        a=rtpmap:96 t140/1000
        a=sendonly
        m=audio 20000 RTP/AVP 0
        c=IN IP4 0.0.0.0
        a=recvonly

(2) INVITE SDP AT2

        m=text 20002 RTP/AVP 96
        c=IN IP4 A.example.com
        a=rtpmap:96 t140/1000
        a=recvonly
        m=audio 20000 RTP/AVP 0
        c=IN IP4 0.0.0.0
        a=sendonly

(3) 200 OK SDP T1A+T1B

        m=text 30000 RTP/AVP 96
        c=IN IP4 T1.example.com
        a=rtpmap:96 t140/1000
        a=recvonly
        m=audio 30002 RTP/AVP 0
        c=IN IP4 T1.example.com
        a=sendonly

(5) 200 OK SDP T2A+T2B

        m=text 40000 RTP/AVP 96
        c=IN IP4 T2.example.com
        a=rtpmap:96 t140/1000
        a=sendonly
        m=audio 40002 RTP/AVP 0
        c=IN IP4 T2.example.com
        a=recvonly

(7) INVITE SDP T1B+T2B

        m=audio 30002 RTP/AVP 0
        c=IN IP4 T1.example.com
        a=sendonly
        m=audio 40002 RTP/AVP 0
        c=IN IP4 T2.example.com
        a=recvonly
  A                          T1                     T2            B

  |                          |                      |             |
  |----(1) INVITE SDP AT1--->|                      |             |
  |                          |                      |             |
  |----------------(2) INVITE SDP AT2-------------->|             |
  |                          |                      |             |
  |<-(3) 200 OK SDP T1A+T1B--|                      |             |
  |                          |                      |             |
  |---------(4) ACK--------->|                      |             |
  |                          |                      |             |
  |<---------------(5) 200 OK SDP T2A+T2B-----------|             |
  |                          |                      |             |
  |----------------------(6) ACK------------------->|             |
  |                          |                      |             |
  |-----------------------(7) INVITE SDP T1B+T2B----------------->|
  |                          |                      |             |
  |<----------------------(8) 200 OK SDP BT1+BT2------------------|
  |                          |                      |             |
  |------(9) INVITE--------->|                      |             |
  |                          |                      |             |
  |-------------------(10) INVITE------------------>|             |
  |                          |                      |             |
  |<-(11) 200 OK SDP T1A+T1B-|                      |             |
  |                          |                      |             |
  |<------------(12) 200 OK SDP T2A+T2B-------------|             |
  |                          |                      |             |
  |------------------(13) INVITE SDP T1B+T2B--------------------->|
  |                          |                      |             |
  |<-----------------(14) 200 OK SDP BT1+BT2----------------------|
  |                          |                      |             |
  |--------------------------(15) ACK---------------------------->|
  |                          |                      |             |
  |---(16) ACK SDP AT1+BT1-->|                      |             |
  |                          |                      |             |
  |------------(17) ACK SDP AT2+BT2---------------->|             |
  |                          |                      |             |
  | ************************ | ******************************** |
  |*          MEDIA         *|*               MEDIA            *|
  | ************************ | ******************************** |
  |                          |                      |             |
  | *********************************************** ***********
  |*                      MEDIA                    *|*   MEDIA   *|
  | *********************************************** | *********** |
  |                          |                      |             |

              Figure 4: Transcoding services in parallel
(8) 200 OK SDP BT1+BT2

        m=audio 50000 RTP/AVP 0
        c=IN IP4 B.example.com
        a=recvonly
        m=audio 50002 RTP/AVP 0
        c=IN IP4 B.example.com
        a=sendonly

(11) 200 OK SDP T1A+T1B

        m=text 30000 RTP/AVP 96
        c=IN IP4 T1.example.com
        a=rtpmap:96 t140/1000
        a=recvonly
        m=audio 30002 RTP/AVP 0
        c=IN IP4 T1.example.com
        a=sendonly

(12) 200 OK SDP T2A+T2B

        m=text 40000 RTP/AVP 96
        c=IN IP4 T2.example.com
        a=rtpmap:96 t140/1000
        a=sendonly
        m=audio 40002 RTP/AVP 0
        c=IN IP4 T2.example.com
        a=recvonly

since T1 returned the same SDP in (11) as in (3), and T2 returned the same SDP in (12) as in (5), messages (13), (14) and (15) can be skipped πŸ™Œ

(16) ACK SDP AT1+BT1

        m=text 20000 RTP/AVP 96
        c=IN IP4 A.example.com
        a=rtpmap:96 t140/1000
        a=sendonly
        m=audio 50000 RTP/AVP 0
        c=IN IP4 B.example.com
        a=recvonly

(17) ACK SDP AT2+BT2

        m=text 20002 RTP/AVP 96
        c=IN IP4 A.example.com
        a=rtpmap:96 t140/1000
        a=recvonly
        m=audio 50002 RTP/AVP 0
        c=IN IP4 B.example.com
        a=sendonly

at this point FOUR media streams are up and running πŸŽ‰

  1. Text from A to T1.example.com:30000
  2. Audio from T1 to B.example.com:50000
  3. Audio from B to T2.example.com:40002
  4. Text from T2 to A.example.com:20002
heads up: B, the user agent server, needs to support two media streams: sendonly and recvonly 🚨 right now some user agents support a single sendrecv media stream but NOT a different media line per direction. implementers are encouraged to build support for this feature πŸ’…βœ¨

3.6. Multiple Transcoding Services in Series ✨

okay so bestie, in a distributed setup, a fancy transcoding service (think English text to Spanish speech πŸ‡ͺπŸ‡ΈπŸŽ€) is often run by several servers working together 🫢. One server does English text to Spanish text translation, and then its output gets fed into a server that does text-to-speech. Figure 5 shows how A invokes T1 and T2, and it's giving serious choreography πŸ’…

     A                           T1                    T2            B

     |                           |                     |             |
     |----(1) INVITE SDP A-----> |                     |             |
     |                           |                     |             |
     |<-(2) 200 OK SDP T1A+T1T2- |                     |             |
     |                           |                     |             |
     |----------(3) ACK--------> |                     |             |
     |                           |                     |             |
     |-----------(4) INVITE SDP T1T2------------------>|             |
     |                           |                     |             |
     |<-----------(5) 200 OK SDP T2T1+T2B--------------|             |
     |                           |                     |             |
     |---------------------(6) ACK-------------------->|             |
     |                           |                     |             |
     |---------------------------(7) INVITE SDP T2B----------------->|
     |                           |                     |             |
     |<--------------------------(8) 200 OK SDP B--------------------|
     |                           |                     |             |
     |--------------------------------(9) ACK----------------------->|
     |                           |                     |             |
     |---(10) INVITE-----------> |                     |             |
     |                           |                     |             |
     |------------------(11) INVITE------------------->|             |
     |                           |                     |             |
     |<-(12) 200 OK SDP T1A+T1T2-|                     |             |
     |                           |                     |             |
     |<-------------(13) 200 OK SDP T2T1+T2B-----------|             |
     |                           |                     |             |
     |---(14) ACK SDP T1T2+B---> |                     |             |
     |                           |                     |             |
     |-----------------------(15) INVITE SDP T2B-------------------->|
     |                           |                     |             |
     |<----------------------(16) 200 OK SDP B-----------------------|
     |                           |                     |             |
     |----------------(17) ACK SDP T1T2+B------------->|             |
     |                           |                     |             |
     |----------------------------(18) ACK-------------------------->|
     |                           |                     |             |
     | ************************* | *******************   *********** |
     |*         MEDIA           *|*       MEDIA       *|*   MEDIA   *|
     | ************************* | ******************* | *********** |
     |                           |                     |             |

Figure 5: Transcoding services in serial πŸŽ€


4. Security Considerations πŸ”πŸ’€

okay the security part is where things get dramatic 😭 RFC 3725 [2] talks about security considerations for using third party call control in SIP. These considerations apply to this document too, because this document explains how to use third party call control to invoke a transcoding service 🧚

Here's the tea: RFC 3725 says end-to-end media security is built on swapping keying material inside SDP, and it depends on the controller behaving properly πŸ™ƒ. The controller should not try to disable the security mechanisms offered by the other parties. And because of that, it's trivially possible for the controller to insert itself as an intermediary on the media exchange, if it should so desire πŸ‘€

Now, in this document, the controller is the UA invoking the transcoder, and there's a media session set up with third party call control between the remote UA and the transcoder. So the attack described in RFC 3725 isn't really a threat here, because the controller is the UA that invoked the transcoding service and it already has access to the media by definition πŸ’…. So it seems unlikely that a UA would try to attack its own session by disabling security between the transcoder and the remote UA πŸ™„

From the UAs' point of view, the transcoder needs access to the media in order to do its job. So, by definition, the transcoder acts as a man in the middle πŸ•΅οΈβ€β™€οΈ UAs that don't want a particular transcoder to have access to all the media exchanged between them can use a different transcoder for each direction. UAs can also use different transcoders for different media types 🌈


5. Normative References πŸ“š

  • [1] 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.
  • [2] Rosenberg, J., Peterson, J., Schulzrinne, H., and G. Camarillo, "Best Current Practices for Third Party Call Control (3pcc) in the Session Initiation Protocol (SIP)", BCP 85, RFC 3725, April 2004.
  • [3] Camarillo, G., Eriksson, G., Holler, J., and H. Schulzrinne, "Grouping of Media Lines in the Session Description Protocol (SDP)", RFC 3388, December 2002.

6. Informative References 🧠

  • [4] Camarillo, G., "Framework for transcoding with the session initiation protocol", August 2003, Work in Progress.
  • [5] Charlton, N., Gasson, M., Gybels, G., Spanner, M., and A. van Wijk, "User Requirements for the Session Initiation Protocol (SIP) in Support of Deaf, Hard of Hearing and Speech-impaired Individuals", RFC 3351, August 2002.

Authors' Addresses πŸ¦‹

Gonzalo Camarillo
Ericsson
Advanced Signalling Research Lab.
FIN-02420 Jorvas
Finland

EMail:  Gonzalo.Camarillo@ericsson.com


Eric Burger
Brooktrout Technology, Inc.
18 Keewaydin Way
Salem, NH 03079
USA

EMail:  eburger@brooktrout.com


Henning Schulzrinne
Dept. of Computer Science
Columbia University
1214 Amsterdam Avenue, MC 0401
New York, NY 10027
USA

EMail:  schulzrinne@cs.columbia.edu


Arnoud van Wijk
Viataal
Research & Development
Afdeling RDS
Theerestraat 42
5271 GD Sint-Michielsgestel
The Netherlands

EMail:  a.vwijk@viataal.nl

Copyright (C) The Internet Society (2005).

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 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