RFC 3087

Control of Service Context using SIP Request-URI

πŸ“… published April 2001, from ietf

RFC 3087: Control of Service Context using SIP Request-URI πŸŽ€

Okay bestie, this one is RFC 3087, Control of Service Context using SIP Request-URI 🧚 It's Informational, so it's sharing ideas and advice, not laying down a rulebook πŸ“– B. Campbell and R. Sparks from dynamicsoft wrote it, and it came out in April 2001. Its header doesn't list anything it obsoletes or updates, so no drama there πŸ’…

Status of This Memo 🌸

This memo is just here to inform the Internet community. It does not specify an Internet standard of any kind, and it can be distributed as much as people want (distribution is unlimited) πŸ’–

Copyright (C) The Internet Society (2001). All Rights Reserved. πŸ”₯

Abstract πŸ¦‹

This memo is an info drop for the Internet community. It describes a useful way to think about using the standard SIP (Session Initiation Protocol) Request-URI (Uniform Resource Identifier). The authors and lots of people in the SIP community think it's a solid convention to follow 🫢 It doesn't define any new protocol compared to RFC 2543.

In a regular telephony setup, fancy extended services often rely on call state info, like the calling party, the called party, the reason for a forward, and so on, to figure out what's going on. In a SIP/2.0 call, though, a lot of that info might be missing or just not reliable 😭 So this document proposes a mechanism for passing context info along to an application. With this approach, a client or proxy can communicate context through a distinctive Request-URI. The doc then keeps going with examples of how this could work in a voice mail application πŸŽ€

Table of Contents πŸ’œ

   1.      Introduction . . . . . . . . . . . . . . . . . . . . . . .  3
   2.      Example Application  . . . . . . . . . . . . . . . . . . .  3
   2.1     Using URIs to Control Voice Mail Service Behavior  . . . .  3
   3.      Voice Mail Scenario Descriptions . . . . . . . . . . . . .  5
   3.1     Deposits . . . . . . . . . . . . . . . . . . . . . . . . .  5
   3.1.1   Direct Request to Deposit to a particular mailbox  . . . .  5
   3.1.1.1 SIP source . . . . . . . . . . . . . . . . . . . . . . . .  5
   3.1.1.2 Arbitrary PSTN source  . . . . . . . . . . . . . . . . . .  5
   3.1.1.3 Recognized PSTN source . . . . . . . . . . . . . . . . . .  6
   3.1.2   Direct Request to Deposit, mailbox to be determined  . . .  6
   3.1.2.1 SIP source . . . . . . . . . . . . . . . . . . . . . . . .  6
   3.1.2.2 PSTN source  . . . . . . . . . . . . . . . . . . . . . . .  6
   3.1.2.3 Indirect Request to Deposit, due to find-me proxy decision  6
   3.2     Retrievals . . . . . . . . . . . . . . . . . . . . . . . .  7
   3.2.1   Request to Retrieve from a particular mailbox  . . . . . .  7
   3.2.1.1 Trusted SIP source . . . . . . . . . . . . . . . . . . . .  7
   3.2.1.2 Authenticated SIP source . . . . . . . . . . . . . . . . .  7
   3.2.1.3 Unauthenticated SIP source . . . . . . . . . . . . . . . .  7
   3.2.1.4 PSTN source  . . . . . . . . . . . . . . . . . . . . . . .  7
   3.2.2   Request to Retrieve, mailbox to be determined  . . . . . .  7
   3.2.2.1 SIP source . . . . . . . . . . . . . . . . . . . . . . . .  7
   3.2.2.2 Arbitrary PSTN source  . . . . . . . . . . . . . . . . . .  8
   3.2.2.3 Recognized PSTN source . . . . . . . . . . . . . . . . . .  8
   4.      Voice Mail Call Flow Examples  . . . . . . . . . . . . . .  8
   4.1     Generic Scenario . . . . . . . . . . . . . . . . . . . . .  8
   4.1.1   Direct call to the voice mail system . . . . . . . . . . .  8
   4.2     Message Deposit Scenarios  . . . . . . . . . . . . . . . . 13
   4.2.1   Call to known subscriber forwarded on no answer  . . . . . 13
   4.2.2   Call to known subscriber forwarded on busy . . . . . . . . 19
   4.2.3   Direct call to a subscriber's mailbox  . . . . . . . . . . 24
   4.3     Message Retrieval Scenarios  . . . . . . . . . . . . . . . 29
   4.3.1   Call to retrieve messages believed to be from a known
           subscriber . . . . . . . . . . . . . . . . . . . . . . . . 29
   4.3.2   Call to retrieve messages from an authenticated subscriber 33
   5.      Security Considerations  . . . . . . . . . . . . . . . . . 38
   6.      Acknowledgments  . . . . . . . . . . . . . . . . . . . . . 38
           References . . . . . . . . . . . . . . . . . . . . . . . . 38
           Authors' Addresses . . . . . . . . . . . . . . . . . . . . 38
           Full Copyright Statement . . . . . . . . . . . . . . . . . 39

1. Introduction 🌈

Okay so a communication service should totally use whatever info it already has when someone shows up πŸ™ˆ Think about most voice mail systems: a subscriber checking messages from their own desk doesn't have to type in their mailbox number again. The service just assumes the store being accessed is the one tied to the endpoint they're using. Some services even let the user confirm that assumption with IVR techniques before asking for a PIN πŸ“ž

This idea of context-awareness can be captured in a voice mail service that implements SIP as defined in RFC 2543[1], with no modifications needed, just through the standard use of that protocol's Request-URI ✨ And honestly, the idea works for any SIP-based service where the starting application state should be figured out from context πŸ¦‹

This is a usage convention on top of standard SIP as defined in RFC 2543[1]. It doesn't modify or extend that protocol in any way, so nothing changes under the hood πŸ’…

2. Example Application πŸ’–

In this doc, voice mail is the example we use to show off the technique πŸŽ€ One big reason to apply this to voice mail is that it lets a proxy or location server control the starting state of a voice service. For example, a voice client might register a contact list that ends with the URL that accepts voice messages for that client 🧚

2.1 Using URIs to Control Voice Mail Service Behavior πŸ“¬

Lots of conventional voice mail systems use call state info, like the calling party, the called party, the reason for the forward, etc, to decide what the starting state should be πŸ€” For instance, one outgoing message might play if the call hit voice mail because the called party didn't answer, and a different one if the line was busy. The system also works out who the message is for based on the called party info. And if the call came from a subscriber's own phone number, it might authenticate the caller and then jump straight into the message retrieval and account maintenance menu πŸ”₯

When a new subscriber gets added to a system, a set of identities could be generated, and each one gets a unique sip URI. The tables below show some of the identities that might get generated (it's not exhaustive, so there's more out there πŸ‘€). The example schemes show that the URIs could, but don't necessarily have to, have mnemonic value πŸ“

In real-world applications, it's important that an application doesn't apply semantic rules to the various URIs. Instead, it should allow any arbitrary string to be provisioned, and map that string to the desired behavior πŸ’œ The owner of the system may choose to provision mnemonic strings, but the application shouldn't require it. In any big installation, the system owner probably already has rules for mnemonic URIs, and if an application tried to define its own rules, that could cause a conflict 😭 For our example, this means a voice mail system should allow an arbitrary mix of URLs from these schemes, or any other scheme that makes valid SIP URIs, to be provisioned, rather than enforcing one particular scheme 🫢

   URI Identity       Example Scheme 1
                           Example Scheme 2
                                Example Scheme 3

   Deposit with       sip:sub-rjs-deposit@vm.wcom.com
   standard greeting       sip:677283@vm.wcom.com
                                sip:rjs@vm.wcom.com;mode=deposit


   Deposit with on    sip:sub-rjs-deposit-busy.vm.wcom.com
   phone greeting          sip:677372@vm.wcom.com
                                sip:rjs@vm.wcom.com;mode=3991243

   Deposit with       sip:sub-rjs-deposit-sg@vm.wcom.com
   special greeting        sip:677384@vm.wcom.com
                                sip:rjs@vm.wcom.com;mode=sg

   Retrieve - SIP     sip:sub-rjs-retrieve@vm.wcom.com
   authentication          sip:677405@vm.wcom.com
                                sip:rjs@vm.wcom.com;mode=retrieve

   Retrieve - prompt  sip:sub-rjs-retrieve-inpin.vm.wcom.com
   for PIN in-band         sip:677415@vm.wcom.com
                                sip:rjs@vm.wcom.com;mode=inpin

When a service is first set up, identities like these could be created 🧁

   URI Identity       Example Scheme 1
                           Example Scheme 2
                                Example Scheme 3

   Deposit -          sip:deposit@vm.wcom.com
   identify target         sip:670001@vm.wcom.com
   mailbox by To:               sip:deposit@vm.wcom.com
   Retrieve -         sip:retrieve@vm.wcom.com
   identify target         sip:670002@vm.wcom.com
   mailbox by SIP               sip:retrieve@vm.wcom.com
   authentication

   Deposit - prompt   sip:deposit-in@vm.wcom.com
   for target              sip:670003@vm.wcom.com
   mailbox in-band              sip:deposit@vm.wcom.com;mode=inband

   Retrieve - prompt  sip:retrieve-in@vm.wcom.com
   for target              sip:670004@vm.wcom.com
   mailbox and PIN              sip:retrieve@vm.wcom.com;mode=inband
   in-band

Besides handing this set of URIs to the subscriber (to use however they like πŸ’…), an integrated service provider could add them to the set of contacts in a find-me proxy. The proxy could then route calls to the right URI based on where the request came from, the subscriber's preferences, and their current state πŸ¦‹

3. Voice Mail Scenario Descriptions πŸŽ€

In each of these scenarios, the PSTN gateway is configured to communicate only with one particular proxy-registrar 🌸

3.1 Deposits πŸ“₯

3.1.1 Direct Request to Deposit to a particular mailbox ✨

3.1.1.1 SIP source

A SIP client that knows the URI for a particular deposit mailbox (sip:sub-rjs-deposit@vm.wcom.com) can send a direct invitation to the voice mail service, or send it through a protecting proxy πŸ’Œ The proxy could restrict access to deposit identities with special greetings by authenticating the requester πŸ”

3.1.1.2 Arbitrary PSTN source

The gateway's proxy would map a call from an unrecognized PSTN number, one tied to a subscriber's mailbox, into an invite to the deposit with standard greeting URI (sip:sub-rjs-deposit@vm.wcom.com) πŸ“ž

3.1.1.3 Recognized PSTN source

The gateway's proxy would map a call from a recognized PSTN number (an exact or pattern match) that's tied to a subscriber's mailbox into an invite to the appropriate special greeting URI (sip:sub-rjs-deposit-sg@vm.wcom.com) 🌟 The gateway's ability to identify the calling party (using the calling party number) is trusted, so no further authentication of the requester gets done 🫢

3.1.2 Direct Request to Deposit, mailbox to be determined 🧚

3.1.2.1 SIP source πŸ¦‹

Okay so a voice mail service (or its protecting proxy) could expose a generic deposit URL πŸ’Œ for when a caller just wants to go straight to voice mail. The service would likely play an IVR dialog to figure out which message store the message should go into πŸŽ€

Now here's the tea β˜• An app designer might be tempted to match the To: and From: headers on a call to infer stuff. Bestie, that can get messy when multiple proxy forwards happen in one call 😭 Say A calls B, and B has all calls forwarded to C. C forwards the call to her voice mail service. If that service matches the To: header to pick the message store, it'll grab the info for B instead of C. And there's no reason to assume C's voice mail service knows anything about B πŸ’€

3.1.2.2 PSTN source πŸ“ž

The gateway's proxy would map a call from an unrecognized PSTN number that dials the top-level voice mail service access number to an invite to the Deposit - prompt for target mailbox in-band URI (sip:deposit-in@vm.wcom.com for example). Getting the call to the target mailbox would proceed as in the SIP source case 🌸

3.1.2.3 Indirect Request to Deposit, due to find-me proxy decision 🧚

A find-me proxy could map an invitation to a subscriber (sip:rjs@wcom.com) to the right voice mail service URI, depending on the subscriber's current state. The normal deposit URI could be chosen if the subscriber's contact list has been exhausted with no answer πŸ“΅ The busy-announcement URI would be chosen when a busy everywhere response comes back from one of the contacts πŸ™ˆ A DND announcement URI could be selected if the subscriber had activated DND πŸŒ™ And calls to sip:receptionist@wcom.com could be configured to roll over to sip:deposit@wcom.com ✨

3.2 Retrievals πŸ“

3.2.1 Request to Retrieve from a particular mailbox πŸ’œ

3.2.1.1 Trusted SIP source πŸ”

A request to retrieve the contents of a particular mailbox (sip:sub-rjs-retrieve@vm.wcom.com) coming from a trusted source could be honored without further authentication checks. A trusted source is one the voice mail service has secure communications with, and one it's willing to delegate authentication to. This could be the service's protecting proxy, for example 🫢

3.2.1.2 Authenticated SIP source πŸͺͺ

A service, or its protecting proxy, could choose to honor a retrieve request for a particular mailbox (sip:sub-rjs-retrieve@vm.wcom.com) based on SIP authentication. If SIP level authentication fails, the service or proxy could be configured to send the call to the in-band pin prompting URI (sip:sub-rjs-retrieve-inpin@vm.wcom.com) πŸ”‘

3.2.1.3 Unauthenticated SIP source πŸ‘»

A service, or its protecting proxy, that receives a retrieve request for a particular mailbox (sip:sub-rjs-retrieve@vm.wcom.com) with no other way of authenticating the requestor could send the request to the in-band pin prompting URI (sip:sub-rjs-retrieve-inpin@vm.wcom.com) πŸ’…

3.2.1.4 PSTN source πŸ“±

This scenario assumes the service provider's network has been configured so that a PSTN number could be dialed explicitly to retrieve messages from a particular mailbox. Such services exist, but they aren't common πŸ‘€ In that kind of network, the gateway's proxy would map the call to the in-band pin prompting URI (sip:sub-rjs-retrieve-inpin@vm.wcom.com) πŸŽ€

3.2.2 Request to Retrieve, mailbox to be determined πŸ•΅οΈβ€β™€οΈ

3.2.2.1 SIP source πŸ’¬

Just like the Request to Deposit scenario, when a service gets a request for the top-level retrieve URI, it would most likely need in-band IVR techniques to figure out the target mailbox and authenticate the caller 🧩

3.2.2.2 Arbitrary PSTN source ☎️

This scenario assumes there's a single PSTN number that subscribers dial to reach the voice mail service and retrieve messages. This is the most common access method offered by current voice mail services πŸ‘‘

The gateway's proxy would map a call to the top-level PSTN number onto the top-level retrieve in-band prompting URI (sip:retrieve-in@vm.wcom.com). Once the system identifies the target mailbox, the call would be transferred to the appropriate in-band pin prompting URI (sip:sub-rjs-retrieve-inpin@vm.wcom.com) πŸ¦‹

3.2.2.3 Recognized PSTN source 🌈

This scenario also assumes there's a single PSTN number that subscribers dial to retrieve messages.

The gateway's proxy would recognize the calling party number as a subscriber and map the call to that subscriber's in-band prompting URI (sip:sub-rjs-retrieve-inpin@vm.wcom.com) πŸ’–


4 Voice Mail Call Flow Examples ✨

The following section walks through some example call flows for a hypothetical voice mail service, with the host name vm.wcom.com 🎬 All of the call flows assume that a proxy protects the voice mail service, and that a trust relationship exists between the voice mail service and that proxy 🫢

4.1 Generic Scenario 🌸

4.1.1. Direct call to the voice mail system πŸ“žπŸ’–

okay so User A calls the voice mail system directly, no middleman needed 🫢 The voice mail system pulls up the top-level menu, which might ask the caller to punch in an extension or spell out the first few letters of a name. main character energy ✨

           User A              Proxy               VM Service
             |                   |                       |
             |  INVITE F1        |                       |
             |------------------>|                       |
             |                   |  INVITE F2            |
             | (100 Trying) F3   |---------------------->|
             |<------------------|                       |
             |                   |  180 Ringing F4       |
             |  180 Ringing F5   |<----------------------|
             |<------------------|                       |
             |                   |  200 OK F6            |
             |  200 OK F6        |<----------------------|
             |<------------------|                       |
             |                   |                       |
             |  ACK F8           |                       |
             |------------------>|  ACK F9               |
             |                   |---------------------->|
             |                   |                       |
             |      RTP Established- Play top level menu |
             |<-m-m-m-m-m-m-m-m-m-m-m-m-m-m-m-m-m-m-m-m->|
             |                   |                       |
             |  BYE F10          |                       |
             |------------------>|  BYE F11              |
             |                   |---------------------->|
             |                   |                       |
             |                   |  200 OK F12           |
             |                   |<----------------------|
             |  200 OK F13       |                       |
             |<------------------|                       |
             |                   |                       |

now the receipts 🧾 here's every single message, flow by flow, so you can see exactly what's being sent (no skipping, bestie πŸ™ˆ)

    Flow Id                            Comments

   INVITE F1     INVITE sip:VoiceMail@wcom.com SIP/2.0
   A->Proxy      Via: SIP/2.0/UDP here.com:5060
                 From: TheBigGuy <sip:UserA@here.com>
                 To: VoiceMail <sip:VoiceMail@wcom.com>
                 Call-Id: 12345600@here.com
                 CSeq: 1 INVITE
                 Contact: TheBigGuy <sip:UserA@here.com>
                 Proxy-Authorization:Digest username="UserA",
                 realm="MCI WorldCom SIP",
                 nonce="ea9c8e88df84f1cc4e341ae6cbe5a359", opaque="",
                 uri="sip:VoiceMail@wcom.com", response=<appropriately
                 calculated hash goes here>
                 Content-Type: application/sdp
                 Content-Length: <appropriate value>
                 v=0
                 o=UserA 2890844526 2890844526 IN IP4 client.here.com
                 s=Session SDP
                 c=IN IP4 100.101.102.103
                 t=0 0
                 m=audio 49170 RTP/AVP 0
                 a=rtpmap:0 PCMU/8000

                 /*Client for A prepares to receive data on port 49170
                 from the network. */

   INVITE F2     INVITE sip:top@vm.wcom.com SIP/2.0
   Proxy->VM     Via: SIP/2.0/UDP wcom.com:5060; branch=1
                 Via: SIP/2.0/UDP here.com:5060
                 Record-Route: <sip:VoiceMail@wcom.com>
                 From: TheBigGuy <sip:UserA@here.com>
                 To: VoiceMail <sip:VoiceMail@wcom.com>
                 Call-Id: 12345600@here.com
                 CSeq: 1 INVITE
                 Contact: TheBigGuy <sip:UserA@here.com>
                 Content-Type: application/sdp
                 Content-Length: <appropriate value>

                 v=0
                 o=UserA 2890844526 2890844526 IN IP4 client.here.com
                 s=Session SDP
                 c=IN IP4 100.101.102.103
                 t=0 0
                 m=audio 49170 RTP/AVP 0
                 a=rtpmap:0 PCMU/8000

   (100 Trying   SIP/2.0 100 Trying
   F3            Via: SIP/2.0/UDP here.com:5060
   Proxy->A)     From: TheBigGuy <sip:UserA@here.com>
                 To: VoiceMail <sip:VoiceMail@wcom.com>
                 Call-Id: 12345600@here.com
                 CSeq: 1 INVITE
                 Content-Length: 0

   180 Ringing   SIP/2.0 180 Ringing
   F4            Via: SIP/2.0/UDP wcom.com:5060; branch=1
   VM->Proxy     Via: SIP/2.0/UDP here.com:5060
                 From: TheBigGuy <sip:UserA@here.com>
                 To: VoiceMail <sip:VoiceMail@wcom.com>;tag=3145678
                 Call-Id: 12345600@here.com
                 CSeq: 1 INVITE
                 Content-Length: 0

   180 Ringing   SIP/2.0 180 Ringing
   F5            Via: SIP/2.0/UDP here.com:5060
   Proxy->A      From: TheBigGuy <sip:UserA@here.com>
                 To: VoiceMail <sip:VoiceMail@wcom.com>;tag=3145678
                 Call-Id: 12345600@here.com
                 CSeq: 1 INVITE
                 Content-Length: 0

   200 OK F6     SIP/2.0 200 OK
   VM->Proxy     Via: SIP/2.0/UDP wcom.com:5060; branch=1
                 Via: SIP/2.0/UDP here.com:5060
                 Record-Route: <sip:VoiceMail@wcom.com>
                 From: TheBigGuy <sip:UserA@here.com>
                 To: VoiceMail <sip:VoiceMail@wcom.com>;tag=3145678
                 Call-Id: 12345600@here.com
                 CSeq: 1 INVITE
                 Contact: VoiceMailSystem <sip:top@vm.wcom.com>
                 Content-Type: application/sdp
                 Content-Length: <appropriate value>

                 v=0
                 o=UserB 2890844527 2890844527 IN IP4 vm.wcom.com
                 s=Session SDP
                 c=IN IP4 110.111.112.114
                 t=0 0
                 m=audio 3456 RTP/AVP 0
                 a=rtpmap:0 PCMU/8000


   200 OK F7     SIP/2.0 200 OK
   Proxy->A      Via: SIP/2.0/UDP here.com:5060
                 Record-Route: <sip:VoiceMail@wcom.com>
                 From: TheBigGuy <sip:UserA@here.com>
                 To: VoiceMail <sip:VoiceMail@wcom.com>;tag=3145678
                 Call-Id: 12345600@here.com
                 CSeq: 1 INVITE
                 Contact VoiceMailSystem <sip:top@vm.wcom.com>
                 Content-Type: application/sdp
                 Content-Length: <appropriate value>

                 v=0
                 o=UserB 2890844527 2890844527 IN IP4 vm.wcom.com
                 s=Session SDP
                 c=IN IP4 110.111.112.114
                 t=0 0
                 m=audio 3456 RTP/AVP 0
                 a=rtpmap:0 PCMU/8000

   ACK F8        ACK sip:VoiceMail@wcom.com SIP/2.0
   A->Proxy      Via: SIP/2.0/UDP here.com:5060
                 Route:<sip:top@vm.wcom.com>
                 From: TheBigGuy <sip:UserA@here.com>
                 To: VoiceMail <sip:VoiceMail@wcom.com>;tag=3145678
                 Call-Id: 12345600@here.com
                 CSeq: 1 ACK
                 Content-Length: 0

   ACK F9        ACK sip:top@vm.wcom.com SIP/2.0
   Proxy->VM     Via: SIP/2.0/UDP wcom.com:5060
                 Via: SIP/2.0/UDP here.com:5060
                 From: TheBigGuy <sip:UserA@here.com>
                 To: VoiceMail <sip:VoiceMail@wcom.com>; tag=3145678
                 Call-Id: 12345600@here.com
                 CSeq: 1 ACK
                 Content-Length: 0

                 /* RTP streams are established between A and VM.  VM
                 system starts IVR dialog for top level menu */

                 /* User A Hangs Up with VM system.  Alternatively, the
                 VM system could initiate the BYE*/

   BYE F10       BYE sip:VoiceMail@wcom.com SIP/2.0
   A->Proxy      Via: SIP/2.0/UDP here.com:5060
                 Route:<sip: top@vm.wcom.com>
                 From: TheBigGuy <sip:UserA@here.com>
                 To: VoiceMail <sip:VoiceMail@wcom.com>;tag=3145678
                 Call-Id: 12345600@here.com
                 CSeq: 2 BYE
                 Content-Length: 0

   BYE F11       BYE sip: top@vm.wcom.com SIP/2.0
   Proxy->VM     Via: SIP/2.0/UDP wcom.com:5060
                 Via: SIP/2.0/UDP here.com:5060
                 From: TheBigGuy <sip:UserA@here.com>
                 To: VoiceMail <sip:VoiceMail@wcom.com>;tag=3145678
                 Call-Id: 12345600@here.com
                 CSeq: 2 BYE
                 Content-Length: 0

   200 OK F12    SIP/2.0 200 OK
   VM->Proxy     Via: SIP/2.0/UDP wcom.com:5060
                 Via: SIP/2.0/UDP here.com:5060
                 From: TheBigGuy <sip:UserA@here.com>
                 To: VoiceMail <sip:VoiceMail@wcom.com>;tag=3145678
                 Call-Id: 12345600@here.com
                 CSeq: 2 BYE
                 Content-Length: 0

   200 OK F13    SIP/2.0 200 OK
   Proxy->A      Via: SIP/2.0/UDP here.com:5060
                 From: TheBigGuy <sip:UserA@here.com>
                 To: VoiceMail <sip:VoiceMail@wcom.com>;tag=3145678
                 Call-Id: 12345600@here.com
                 CSeq:  2 BYE
                 Content-Length: 0

4.2. Message Deposit Scenarios βœ¨πŸŽ€

4.2.1 Call to known subscriber forwarded on no answer πŸ’–

okay so bestie, this one is a whole drama 🍿 User A calls UserB, but UserB just... doesn't pick up πŸ’€ So the call gets forwarded to UserB's mailbox, and the voice mail system plays UserB's outgoing message for a ring-no-answer. The flow assumes that the URL sip:UserB-dep-fna@vm.wcom.com maps to the desired behavior for depositing a message on a forward-no-answer ✨

      User A            Proxy              User B         VM System
        |                 |                  |                |
        |  INVITE F1      |                  |                |
        |---------------->|  INVITE F2       |                |
        |                 |----------------->|                |
        | (100 Trying) F3 |                  |                |
        |<----------------| 180 Ringing F4   |                |
        |                 |<-----------------|                |
        |  180 Ringing F5 |                  |                |
        |<----------------| (Request Timeout)|                |
        |                 |                  |                |
        |                 | Cancel F6        |                |
        |                 |----------------->|                |
        |                 |                  |                |
        |                 | 200 OK F7        |                |
        |                 |<-----------------|                |
        |                 |                  |                |
        |                 |         INVITE F8                 |
        |                 |---------------------------------->|
        |                 |                  |                |
        |                 |         200 OK F9|                |
        |  200 OK F10     |<----------------------------------|
        |<----------------|                  |                |
        |                 |                  |                |
        |  ACK F11        |                  |                |
        |---------------->|         ACK F12  |                |
        |                 |---------------------------------->|
        |                 |                  |                |
        |    RTP Established Both Ways-Deposit Msg for B      |
        |<-m-m-m-m-m-m-m-m-m-m-m-m-m-m-m-m-m-m-m-m-m-m-m-m-m->|
        |                 |                  |                |
        |  BYE F13        |                  |                |
        |---------------->|         BYE F14  |                |
        |                 |---------------------------------->|
        |                 |                  |                |
        |                 |         OK F15   |                |
        |  OK F16         |<----------------------------------|
        |<----------------|                  |                |
        |                 |                  |                |

Now let's go message by message, because the details are where the magic is 🧚

     Flow Id                            Comments

    INVITE F1     INVITE sip:UserB@wcom.com SIP/2.0
    A->Proxy      Via: SIP/2.0/UDP here.com:5060
                  From: TheBigGuy <sip:UserA@here.com>
                  To: TheLittleGuy <sip:UserB@wcom.com>
                  Call-Id: 12345600@here.com
                  CSeq: 1 INVITE
                  Contact: TheBigGuy <sip:UserA@here.com>
                  Proxy-Authorization:Digest username="UserA",
                  realm="MCI WorldCom SIP",
                  nonce="ea9c8e88df84f1cec4341ae6cbe5a359", opaque="",
                  uri="sip:UserB@wcom.com", response=<appropriately
                  calculated hash goes here>
                  Content-Type: application/sdp
                  Content-Length: <appropriate value>

                  v=0
                  o=UserA 2890844526 2890844526 IN IP4 client.here.com
                  s=Session SDP
                  c=IN IP4 100.101.102.103
                  t=0 0
                  m=audio 49170 RTP/AVP 0
                  a=rtpmap:0 PCMU/8000

                  /*Client for A prepares to receive data on port 49170
                  from the network. */

    INVITE F2     INVITE sip:UserB1@somewhere.wcom.com SIP/2.0
    Proxy->B1     Via: SIP/2.0/UDP wcom.com:5060; branch=1
                  Via: SIP/2.0/UDP here.com:5060
                  Record-Route: <sip:UserB@wcom.com>
                  From: TheBigGuy <sip:UserA@here.com>
                  To: TheLittleGuy <sip:UserB@wcom.com>
                  Call-Id: 12345600@here.com
                  CSeq: 1 INVITE
                  Contact: TheBigGuy <sip:UserA@here.com>
                  Content-Type: application/sdp
                  Content-Length: <appropriate value>

                  v=0
                  o=UserA 2890844526 2890844526 IN IP4 client.here.com
                  s=Session SDP
                  c=IN IP4 100.101.102.103
                  t=0 0
                  m=audio 49170 RTP/AVP 0
                  a=rtpmap:0 PCMU/8000

    (100 Trying   SIP/2.0 100 Trying
    F3            Via: SIP/2.0/UDP here.com:5060
    Proxy->A)     From: TheBigGuy <sip:UserA@here.com>
                  To: TheLittleGuy <sip:UserB@wcom.com>
                  Call-Id: 12345600@here.com
                  CSeq: 1 INVITE
                  Content-Length: 0

    180 Ringing   SIP/2.0 180 Ringing
    F4            Via: SIP/2.0/UDP wcom.com:5060; branch=1
    B1->Proxy     Via: SIP/2.0/UDP here.com:5060
                  From: TheBigGuy <sip:UserA@here.com>
                  To: TheLittleGuy <sip:UserB@wcom.com>;tag=3145678
                  Call-Id: 12345600@here.com
                  CSeq: 1 INVITE
                  Content-Length: 0

    180 Ringing   SIP/2.0 180 Ringing
    F5            Via: SIP/2.0/UDP here.com:5060
    Proxy->A      From: TheBigGuy <sip:UserA@here.com>
                  To: TheLittleGuy <sip:UserB@wcom.com>;tag=3145678
                  Call-Id: 12345600@here.com
                  CSeq: 1 INVITE
                  Content-Length: 0

                  /* B1 rings for 9 seconds, this duration is a
                  configurable parameter in the Proxy Server.  Proxy
                  sends Cancel and proceeds down the list of routes,
                  eventually hitting the voice mail URI for forward no
                  answer */

    CANCEL F6     CANCEL sip:UserB1@wcom.com SIP/2.0
    Proxy->B1     Via: SIP/2.0/UDP wcom.com:5060; branch=1
                  From: TheBigGuy <sip:UserA@here.com>
                  To: TheLittleGuy <sip:UserB@wcom.com>;tag=3145678
                  Call-Id: 12345600@here.com
                  CSeq: 1 CANCEL
                  Content-Length: 0

    200 OK F7     SIP/2.0 200 OK
    B1->Proxy     Via: SIP/2.0/UDP wcom.com:5060; branch=1
                  From: TheBigGuy <sip:UserA@here.com>
                  To: TheLittleGuy <sip:UserB@wcom.com>;tag=3145678
                  Call-Id: 12345600@here.com
                  CSeq: 1 CANCEL
                  Content-Length: 0


    INVITE F8     INVITE sip:UserB-dep-fna@vm.wcom.com SIP/2.0
    Proxy->VM     Via: SIP/2.0/UDP wcom.com:5060;branch=2
                  Via: SIP/2.0/UDP here.com:5060
                  Record-Route: <sip:UserB@wcom.com>
                  From: TheBigGuy <sip:UserA@here.com>
                  To: TheLittleGuy <sip:UserB@wcom.com>
                  Call-Id: 12345600@here.com
                  CSeq: 1 INVITE
                  Contact: TheBigGuy <sip:UserA@here.com>
                  Content-Type: application/sdp
                  Content-Length: <appropriate value>

                  v=0
                  o=UserA 2890844526 2890844526 IN IP4 client.here.com
                  s=Session SDP
                  c=IN IP4 100.101.102.103
                  t=0 0
                  m=audio 49170 RTP/AVP 0
                  a=rtpmap:0 PCMU/8000

    200 OK F9     SIP/2.0 200 OK
    VM->Proxy     Via: SIP/2.0/UDP wcom.com:5060; branch=2
                  Via: SIP/2.0/UDP here.com:5060
                  Record-Route: <sip:UserB@wcom.com>
                  From: TheBigGuy <sip:UserA@here.com>
                  To: TheLittleGuy <sip:UserB@wcom.com>;tag=123456
                  Call-Id: 12345600@here.com
                  CSeq: 1 INVITE
                  Contact: TheLittleGuyVoiceMail <sip:UserB-dep-
                  fna@vm.wcom.com>
                  Content-Type: application/sdp
                  Content-Length: <appropriate value>

                  v=0
                  o=UserB 2890844527 2890844527 IN IP4 vm.wcom.com
                  s=Session SDP
                  c=IN IP4 110.111.112.114
                  t=0 0
                  m=audio 3456 RTP/AVP 0
                  a=rtpmap:0 PCMU/8000


    200 OK F10    SIP/2.0 200 OK
    Proxy->A      Via: SIP/2.0/UDP here.com:5060
                  Record-Route: <sip:UserB@wcom.com>
                  From: TheBigGuy <sip:UserA@here.com>
                  To: TheLittleGuy <sip:UserB@wcom.com>;tag=123456
                  Call-Id: 12345600@here.com
                  CSeq: 1 INVITE
                  Contact: TheLittleGuyVoiceMail <sip:UserB-dep-
                  fna@vm.wcom.com>
                  Content-Type: application/sdp
                  Content-Length: <appropriate value>

                  v=0
                  o=UserB 2890844527 2890844527 IN IP4 vm.wcom.com
                  s=Session SDP
                  c=IN IP4 110.111.112.114
                  t=0 0
                  m=audio 3456 RTP/AVP 0
                  a=rtpmap:0 PCMU/8000

    ACK F11       ACK sip:UserB@wcom.com SIP/2.0
    A->Proxy      Via: SIP/2.0/UDP here.com:5060
                  Route:<sip: UserB-dep-fna@vm.wcom.com>
                  From: TheBigGuy <sip:UserA@here.com>
                  To: TheLittleGuy <sip:UserB@wcom.com>;tag=123456
                  Call-Id: 12345600@here.com
                  CSeq: 1 ACK
                  Content-Length: 0

    ACK F12       ACK sip:UserB-dep-fna@vm.wcom.com SIP/2.0
    Proxy->VM     Via: SIP/2.0/UDP wcom.com:5060
                  Via: SIP/2.0/UDP here.com:5060
                  From: TheBigGuy <sip:UserA@here.com>
                  To: TheLittleGuy <sip:UserB@wcom.com>;tag=123456
                  Call-Id: 12345600@here.com
                  CSeq: 1 ACK
                  Content-Length: 0

                  /* RTP streams are established between A and B2.  VM
                  system starts IVR dialog for message-deposit on no-
                  answer for UserB */

                  /* User A Hangs Up with VM system.  Alternatively, the
                  VM system could initiate the BYE*/

    BYE F13       BYE sip:UserB@wcom.com SIP/2.0
    A->Proxy      Via: SIP/2.0/UDP here.com:5060
                  Route:<sip: UserB-dep-fna@vm.wcom.com>
                  From: TheBigGuy <sip:UserA@here.com>
                  To: TheLittleGuy <sip:UserB@wcom.com>;tag=123456
                  Call-Id: 12345600@here.com
                  CSeq: 2 BYE
                  Content-Length: 0

    BYE F14       BYE sip: UserB-dep-fna@vm.wcom.com SIP/2.0
    Proxy->VM     Via: SIP/2.0/UDP wcom.com:5060
                  Via: SIP/2.0/UDP here.com:5060
                  From: TheBigGuy <sip:UserA@here.com>
                  To: TheLittleGuy <sip:UserB@wcom.com>;tag=123456
                  Call-Id: 12345600@here.com
                  CSeq: 2 BYE
                  Content-Length: 0

    200 OK F15    SIP/2.0 200 OK
    VM->Proxy     Via: SIP/2.0/UDP wcom.com:5060
                  Via: SIP/2.0/UDP here.com:5060
                  From: TheBigGuy <sip:UserA@here.com>
                  To: TheLittleGuy <sip:UserB@wcom.com>;tag=123456
                  Call-Id: 12345600@here.com
                  CSeq: 2 BYE
                  Content-Length: 0

    200 OK F16    SIP/2.0 200 OK
    Proxy->A      Via: SIP/2.0/UDP here.com:5060
                  From: TheBigGuy <sip:UserA@here.com>
                  To: TheLittleGuy <sip:UserB@wcom.com>;tag=123456
                  Call-Id: 12345600@here.com
                  CSeq:  2 BYE
                  Content-Length: 0

That's the whole forward-no-answer dance, start to finish πŸ¦‹ Bestie, you literally just watched a call bounce from UserB to the voice mail system and back out again, all in one flow πŸ‘‘

4.2.2. Call to known subscriber forwarded on busy ✨

okay so User A tries to call UserB, but UserB is busy πŸ“žπŸ™ˆ the call gets forwarded straight to UserB's mailbox, and the voice mail system plays UserB's outgoing message for busy πŸŽ€ this flow assumes that "sip:UserB-dep-fb@vm.wcom.com" maps to UserB's mailbox and the behavior of "deposit message on busy." πŸ’–

   User A            Proxy              User B         VM System
     |                 |                  |                |
     |  INVITE F1      |                  |                |
     |---------------->|  INVITE F2       |                |
     | (100 Trying) F3 |                  |                |
     |<----------------| 486 Busy Here F4 |                |
     |                 |<-----------------|                |
     |                 |                  |                |
     |                 |  ACK F5          |                |
     |                 |----------------->|                |
     |                 |                  |                |
     |                 |         INVITE F6                 |
     |                 |---------------------------------->|
     |                 |                  |                |
     |                 |         200 OK F7|                |
     |  200 OK F8      |<----------------------------------|
     |<----------------|                  |                |
     |                 |                  |                |
     |  ACK F9         |                  |                |
     |---------------->|         ACK F10  |                |
     |                 |---------------------------------->|
     |                 |                  |                |
     |    RTP Established Both Ways-Deposit Msg for B      |
     |<-m-m-m-m-m-m-m-m-m-m-m-m-m-m-m-m-m-m-m-m-m-m-m-m-m->|
     |                 |                  |                |
     |  BYE F11        |                  |                |
     |---------------->|         BYE F12  |                |
     |                 |---------------------------------->|
     |                 |                  |                |
     |                 |         OK F13   |                |
     |  OK F14         |<----------------------------------|
     |<----------------|                  |                |
     |                 |                  |                |

Now let's go through every single message, because the details are where the magic is πŸ§šπŸ’…

  Flow Id                            Comments

 INVITE F1     INVITE sip:UserB@wcom.com SIP/2.0
 A->Proxy      Via: SIP/2.0/UDP here.com:5060
               From: TheBigGuy <sip:UserA@here.com>
               To: TheLittleGuy <sip:UserB@wcom.com>
               Call-Id: 12345600@here.com
               CSeq: 1 INVITE
               Contact: TheBigGuy <sip:UserA@here.com>
               Proxy-Authorization:Digest username="UserA",
               realm="MCI WorldCom SIP",
               nonce="ea9c8e88df84f1cec4341ae6cbe5a359", opaque="",
               uri="sip:UserB@wcom.com", response=<appropriately
               calculated hash goes here>
               Content-Type: application/sdp
               Content-Length: <appropriate value>

               v=0
               o=UserA 2890844526 2890844526 IN IP4 client.here.com
               s=Session SDP
               c=IN IP4 100.101.102.103
               t=0 0
               m=audio 49170 RTP/AVP 0
               a=rtpmap:0 PCMU/8000

               /*Client for A prepares to receive data on port 49170
               from the network. */

 INVITE F2     INVITE sip:UserB1@somewhere.wcom.com SIP/2.0
 Proxy->B1     Via: SIP/2.0/UDP wcom.com:5060; branch=1
               Via: SIP/2.0/UDP here.com:5060
               Record-Route: <sip:UserB@wcom.com>
               From: TheBigGuy <sip:UserA@here.com>
               To: TheLittleGuy <sip:UserB@wcom.com>
               Call-Id: 12345600@here.com
               CSeq: 1 INVITE
               Contact: TheBigGuy <sip:UserA@here.com>
               Content-Type: application/sdp
               Content-Length: <appropriate value>

               v=0
               o=UserA 2890844526 2890844526 IN IP4 client.here.com
               s=Session SDP
               c=IN IP4 100.101.102.103
               t=0 0
               m=audio 49170 RTP/AVP 0
               a=rtpmap:0 PCMU/8000

 (100 Trying   SIP/2.0 100 Trying
 F3            Via: SIP/2.0/UDP here.com:5060
 Proxy->A)     From: TheBigGuy <sip:UserA@here.com>
               To: TheLittleGuy <sip:UserB@wcom.com>
               Call-Id: 12345600@here.com
               CSeq: 1 INVITE
               Content-Length: 0

 486 Busy      SIP/2.0 486 Busy Here
 Here F4       Via: SIP/2.0/UDP wcom.com:5060;branch=1
 B1->Proxy     Via: SIP/2.0/UDP here.com:5060
               From: TheBigGuy <sip:UserA@here.com>
               To: TheLittleGuy <sip:UserB@wcom.com>;tag=123456
               Call-Id: 12345600@here.com
               CSeq: 1 INVITE
               Content-Length: 0

 ACK F5        ACK sip: UserB1@wcom.com SIP/2.0
 Proxy->B      Via: SIP/2.0/UDP wcom.com:5060; branch=1
               From: TheBigGuy <sip:UserA@here.com>
               To: TheLittleGuy <sip:UserB@wcom.com>;tag=123456
               Call-Id: 12345600@here.com
               CSeq: 1 ACK
               Content-Length: 0

 INVITE F6     INVITE sip:UserB-dep-fb@vm.wcom.com SIP/2.0
 Proxy->VM     Via: SIP/2.0/UDP wcom.com:5060;branch=2
               Via: SIP/2.0/UDP here.com:5060
               Record-Route: <sip:UserB@wcom.com>
               From: TheBigGuy <sip:UserA@here.com>
               To: TheLittleGuy <sip:UserB@wcom.com>
               Call-Id: 12345600@here.com
               CSeq: 1 INVITE
               Contact: TheBigGuy <sip:UserA@here.com>
               Content-Type: application/sdp
               Content-Length: <appropriate value>

               v=0
               o=UserA 2890844526 2890844526 IN IP4 client.here.com
               s=Session SDP
               c=IN IP4 100.101.102.103
               t=0 0
               m=audio 49170 RTP/AVP 0
               a=rtpmap:0 PCMU/8000

 200 OK F7     SIP/2.0 200 OK
 VM->Proxy     Via: SIP/2.0/UDP wcom.com:5060; branch=2
               Via: SIP/2.0/UDP here.com:5060
               Record-Route: <sip:UserB@wcom.com>
               From: TheBigGuy <sip:UserA@here.com>
               To: TheLittleGuy <sip:UserB@wcom.com>;tag=3145678
               Call-Id: 12345600@here.com
               CSeq: 1 INVITE
               Contact: TheLittleGuyVoiceMail <sip:UserB-dep-
               fb@vm.wcom.com>
               Content-Type: application/sdp
               Content-Length: <appropriate value>

               v=0
               o=UserB 2890844527 2890844527 IN IP4 vm.wcom.com
               s=Session SDP
               c=IN IP4 110.111.112.114
               t=0 0
               m=audio 3456 RTP/AVP 0
               a=rtpmap:0 PCMU/8000

 200 OK F8     SIP/2.0 200 OK
 Proxy->A      Via: SIP/2.0/UDP here.com:5060
               Record-Route: <sip:UserB@wcom.com>
               From: TheBigGuy <sip:UserA@here.com>
               To: TheLittleGuy <sip:UserB@wcom.com>;tag=3145678
               Call-Id: 12345600@here.com
               CSeq: 1 INVITE
               Contact TheLittleGuyVoiceMail <sip:UserB-dep-
               fb@vm.wcom.com>
               Content-Type: application/sdp
               Content-Length: <appropriate value>

               v=0
               o=UserB 2890844527 2890844527 IN IP4 vm.wcom.com
               s=Session SDP
               c=IN IP4 110.111.112.114
               t=0 0
               m=audio 3456 RTP/AVP 0
               a=rtpmap:0 PCMU/8000

 ACK F9        ACK sip:UserB@wcom.com SIP/2.0
 A->Proxy      Via: SIP/2.0/UDP here.com:5060
               Route:<sip:UserB-dep-fb@vm.wcom.com>
               From: TheBigGuy <sip:UserA@here.com>
               To: TheLittleGuy <sip:UserB@wcom.com>;tag=3145678
               Call-Id: 12345600@here.com
               CSeq: 1 ACK
               Content-Length: 0

 ACK F10       ACK sip:UserB-dep-fb@vm.wcom.com SIP/2.0
 Proxy->VM     Via: SIP/2.0/UDP wcom.com:5060
               Via: SIP/2.0/UDP here.com:5060
               From: TheBigGuy <sip:UserA@here.com>
               To: TheLittleGuy <sip:UserB@wcom.com>;tag=3145678
               Call-Id: 12345600@here.com
               CSeq: 1 ACK
               Content-Length: 0

               /* RTP streams are established between A and B2.  VM
               system starts IVR dialog for message-deposit on busy
               for UserB */
               /* User A Hangs Up with VM system.  Alternatively, the
               VM system could initiate the BYE*/

 BYE F11       BYE sip:UserB@wcom.com SIP/2.0
 A->Proxy      Via: SIP/2.0/UDP here.com:5060
               Route: <sip:UserB-dep-fnb@vm.wcom.com>
               From: TheBigGuy <sip:UserA@here.com>
               To: TheLittleGuy <sip:UserB@wcom.com>;tag=3145678
               Call-Id: 12345600@here.com
               CSeq: 2 BYE
               Content-Length: 0

 BYE F12       BYE sip: UserB-dep-fnb@vm.wcom.com SIP/2.0
 Proxy->VM     Via: SIP/2.0/UDP wcom.com:5060
               Via: SIP/2.0/UDP here.com:5060
               From: TheBigGuy <sip:UserA@here.com>
               To: TheLittleGuy <sip:UserB@wcom.com>;tag=3145678
               Call-Id: 12345600@here.com
               CSeq: 2 BYE
               Content-Length: 0

 200 OK F13    SIP/2.0 200 OK
 VM->Proxy     Via: SIP/2.0/UDP wcom.com:5060
               Via: SIP/2.0/UDP here.com:5060
               From: TheBigGuy <sip:UserA@here.com>
               To: TheLittleGuy <sip:UserB@wcom.com>;tag=3145678
               Call-Id: 12345600@here.com
               CSeq: 2 BYE
               Content-Length: 0

 200 OK F14    SIP/2.0 200 OK
 Proxy->A      Via: SIP/2.0/UDP here.com:5060
               From: TheBigGuy <sip:UserA@here.com>
               To: TheLittleGuy <sip:UserB@wcom.com>;tag=3145678
               Call-Id: 12345600@here.com
               CSeq:  2 BYE
               Content-Length: 0

That's the whole busy-forward dance, bestie! πŸ¦‹ User A gets a 486 from UserB, the proxy reroutes everything to the voice mail system, and A leaves the message πŸŽ€ Honestly, iconic πŸ‘‘

4.2.3. Direct call to a subscriber's mailbox πŸ“¬πŸ¦‹

okay so this one is the "I'm calling the mailbox directly" flow πŸ’… User A dials UserB's mailbox straight up. The whole thing assumes that "sip:UserB-dep@vm.wcom.com" maps to UserB's mailbox, and that the "generic message deposit" behavior is what happens πŸŽ€

The vibe of the call goes like this ✨ INVITE F1 goes from A to the proxy, then the proxy sends INVITE F2 to the VM service. A gets a 100 Trying (F3), and the VM service sends back a 200 OK (F4) which the proxy passes along as F5. A sends ACK F6, the proxy forwards it as ACK F7, and then RTP goes both ways while the message is deposited 🎧 When that's done, BYE F8 and BYE F9 get sent, the VM system replies with 200 OK F10, and the proxy sends 200 OK F11 back to A 🫢

              User A              Proxy                VM Service
                |                   |                       |
                |  INVITE F1        |                       |
                |------------------>|                       |
                |                   |  INVITE F2            |
                | (100 Trying) F3   |---------------------->|
                |<------------------|                       |
                |                   |  200 OK F4            |
                |  200 OK F5        |<----------------------|
                |<------------------|                       |
                |                   |                       |
                |  ACK F6           |                       |
                |------------------>|  ACK F7               |
                |                   |---------------------->|
                |                   |                       |
                |      RTP Both Ways - Deposit Msg for B    |
                |<-m-m-m-m-m-m-m-m-m-m-m-m-m-m-m-m-m-m-m-m->|
                |                   |                       |
                |  BYE F8           |                       |
                |------------------>|  BYE F9               |
                |                   |---------------------->|
                |                   |                       |
                |                   |  200 OK F10           |
                |                   |<----------------------|
                |  200 OK F11       |                       |
                |<------------------|                       |
                |                   |                       |

       Flow Id                            Comments

      INVITE F1     INVITE sip:UserB-VM@vm.wcom.com SIP/2.0
      A->Proxy      Via: SIP/2.0/UDP here.com:5060
                    From: TheBigGuy <sip:UserA@here.com>
                    To: TheLittleGuyVoiceMail <sip:UserB-VM@wcom.com>
                    Call-Id: 12345600@here.com
                    CSeq: 1 INVITE
                    Contact: TheBigGuy <sip:UserA@here.com>
                    Proxy-Authorization:Digest username="UserA",
                    realm="MCI WorldCom SIP",
                    nonce="ea9c8e88df84f1cec4341ae6cbe5a359", opaque="",
                    uri="sip:UserB-VM@wcom.com", response=<appropriately
                    calculated hash goes here>
                    Content-Type: application/sdp
                    Content-Length: <appropriate value>

                    v=0
                    o=UserA 2890844526 2890844526 IN IP4 client.here.com
                    s=Session SDP
                    c=IN IP4 100.101.102.103
                    t=0 0
                    m=audio 49170 RTP/AVP 0
                    a=rtpmap:0 PCMU/8000

                    /*Client for A prepares to receive data on port 49170
                    from the network. */

      INVITE F2     INVITE sip:UserB-dep@vm.wcom.com SIP/2.0
      Proxy->B1     Via: SIP/2.0/UDP wcom.com:5060; branch=1
                    Via: SIP/2.0/UDP here.com:5060
                    Record-Route: <sip:UserB-VM@wcom.com>
                    From: TheBigGuy <sip:UserA@here.com>
                    To: TheLittleGuyVoiceMail <sip:UserB-VM@vm.wcom.com>
                    Call-Id: 12345600@here.com
                    CSeq: 1 INVITE
                    Contact: TheBigGuy <sip:UserA@here.com>
                    Content-Type: application/sdp
                    Content-Length: <appropriate value>

                    v=0
                    o=UserA 2890844526 2890844526 IN IP4 client.here.com
                    s=Session SDP
                    c=IN IP4 100.101.102.103
                    t=0 0
                    m=audio 49170 RTP/AVP 0
                    a=rtpmap:0 PCMU/8000

      (100 Trying   SIP/2.0 100 Trying
      F3            Via: SIP/2.0/UDP here.com:5060
      Proxy->A)     From: TheBigGuy <sip:UserA@here.com>
                    To: TheLittleGuyVoiceMail <sip:UserB-VM@wcom.com>
                    Call-Id: 12345600@here.com
                    CSeq: 1 INVITE
                    Content-Length: 0

      200 OK F4     SIP/2.0 200 OK
      VM->Proxy     Via: SIP/2.0/UDP wcom.com:5060; branch=1
                    Via: SIP/2.0/UDP here.com:5060
                    Record-Route: <sip:UserB-VM@wcom.com>
                    From: TheBigGuy <sip:UserA@here.com>
                    To: TheLittleGuyVoiceMail <sip:UserB-
                    VM@wcom.com>;tag=3145678
                    Call-Id: 12345600@here.com
                    CSeq: 1 INVITE
                    Contact: TheLittleGuyVoiceMail <sip:UserB-
                    dep@vm.wcom.com>
                    Content-Type: application/sdp
                    Content-Length: <appropriate value>
                    v=0
                    o=UserB 2890844527 2890844527 IN IP4 vm.wcom.com
                    s=Session SDP
                    c=IN IP4 110.111.112.114
                    t=0 0
                    m=audio 3456 RTP/AVP 0
                    a=rtpmap:0 PCMU/8000

      200 OK F5     SIP/2.0 200 OK
      Proxy->A      Via: SIP/2.0/UDP here.com:5060
                    Record-Route: <sip:UserB-VM@wcom.com>
                    From: TheBigGuy <sip:UserA@here.com>
                    To: TheLittleGuyVoiceMail <sip:UserB-
                    VM@wcom.com>;tag=3145678
                    Call-Id: 12345600@here.com
                    CSeq: 1 INVITE
                    Contact TheLittleGuyVoiceMail <sip:UserB-
                    dep@vm.wcom.com>
                    Content-Type: application/sdp
                    Content-Length: <appropriate value>

                    v=0
                    o=UserB 2890844527 2890844527 IN IP4 vm.wcom.com
                    s=Session SDP
                    c=IN IP4 110.111.112.114
                    t=0 0
                    m=audio 3456 RTP/AVP 0
                    a=rtpmap:0 PCMU/8000

      ACK F6        ACK sip:UserB-VM@wcom.com SIP/2.0
      A->Proxy      Via: SIP/2.0/UDP here.com:5060
                    Route:<sip:UserB-dep@vm.wcom.com>
                    From: TheBigGuy <sip:UserA@here.com>
                    To: TheLittleGuyVoiceMail <sip:UserB-
                    VM@wcom.com>;tag=3145678
                    Call-Id: 12345600@here.com
                    CSeq: 1 ACK
                    Content-Length: 0

      ACK F7        ACK sip:UserB-dep@vm.wcom.com SIP/2.0
      Proxy->VM     Via: SIP/2.0/UDP wcom.com:5060
                    Via: SIP/2.0/UDP here.com:5060
                    From: TheBigGuy <sip:UserA@here.com>
                    To: TheLittleGuyVoiceMail <sip:UserB-
                    VM@wcom.com>;tag=3145678
                    Call-Id: 12345600@here.com
                    CSeq: 1 ACK
                    Content-Length: 0
                    /* RTP streams are established between A and VM.  VM
                    system starts IVR dialog for generic message-deposit
                    for UserB */

                    /* User A Hangs Up with VM system.  Alternatively, the
                    VM system could initiate the BYE*/

      BYE F8        BYE sip:UserB-VM@wcom.com SIP/2.0
      A->Proxy      Via: SIP/2.0/UDP here.com:5060
                    Route:<sip:UserB-dep@vm.wcom.com>
                    From: TheBigGuy <sip:UserA@here.com>
                    To: TheLittleGuyVoiceMail <sip:UserB-
                    VM@wcom.com>;tag=3145678
                    Call-Id: 12345600@here.com
                    CSeq: 2 BYE
                    Content-Length: 0

      BYE F9        BYE sip: UserB-dep@vm.wcom.com SIP/2.0
      Proxy->VM     Via: SIP/2.0/UDP wcom.com:5060
                    Via: SIP/2.0/UDP here.com:5060
                    From: TheBigGuy <sip:UserA@here.com>
                    To: TheLittleGuyVoiceMail <sip:UserB-
                    VM@wcom.com>;tag=3145678
                    Call-Id: 12345600@here.com
                    CSeq: 2 BYE
                    Content-Length: 0

      200 OK F10    SIP/2.0 200 OK
      VM->Proxy     Via: SIP/2.0/UDP wcom.com:5060
                    Via: SIP/2.0/UDP here.com:5060
                    From: TheBigGuy <sip:UserA@here.com>
                    To: TheLittleGuyVoiceMail <sip:UserB-
                    VM@wcom.com>;tag=3145678
                    Call-Id: 12345600@here.com
                    CSeq: 2 BYE
                    Content-Length: 0

      200 OK F11    SIP/2.0 200 OK
      Proxy->A      Via: SIP/2.0/UDP here.com:5060
                    From: TheBigGuy <sip:UserA@here.com>
                    To: TheLittleGuyVoiceMail <sip:UserB-
                    VM@wcom.com>;tag=3145678
                    Call-Id: 12345600@here.com
                    CSeq:  2 BYE
                    Content-Length: 0

4.3. Message Retrieval Scenarios πŸŽ§πŸ’œ

4.3.1 Call to retrieve messages believed to be from a known subscriber ✨

Okay so, someone at UserA's desk uses a SIP client to call the voice mail system and check their messages πŸ“žπŸ’–. The client has already authenticated to the proxy with credentials assigned to the device, so the proxy can make a lowkey safe guess that the caller is the device owner πŸ‘‘. The URI sip:UserA-retrieve@vm.wcom.com maps to UserA's mailbox, and its behavior is "retrieve messages after prompting for and verifying PIN" πŸ”. The VM System only trusts the proxy and won't accept calls from any untrusted source πŸ™…β€β™€οΈ. That means the proxy blocks direct calls to UserA-retrieve@vm.wcom.com, and it only forwards calls placed to VoiceMail@wcom.com over to UserA-retrieve@vm.wcom.com when they come from a client device assigned to UserA. Main character security, honestly πŸ¦‹.

           User A              Proxy                VM Service
             |                   |                       |
             |  INVITE F1        |                       |
             |------------------>|                       |
             |                   |  INVITE F2            |
             | (100 Trying) F3   |---------------------->|
             |<------------------|                       |
             |                   |  200 OK F4            |
             |  200 OK F5        |<----------------------|
             |<------------------|                       |
             |                   |                       |
             |  ACK F6           |                       |
             |------------------>|  ACK F7               |
             |                   |---------------------->|
             |                   |                       |
             |      RTP Both Ways - VM prompts for PIN
             |<-m-m-m-m-m-m-m-m-m-m-m-m-m-m-m-m-m-m-m-m->|
             |                   |                       |
             |  BYE F8           |                       |
             |------------------>|  BYE F9               |
             |                   |---------------------->|
             |                   |                       |
             |                   |  200 OK F10           |
             |                   |<----------------------|
             |  200 OK F11       |                       |
             |<------------------|                       |
             |                   |                       |

Here's the full message breakdown, step by step, so you can see exactly who says what and when πŸ’…πŸŽ€

     Flow Id                            Comments

    INVITE F1     INVITE sip:VoiceMail@wcom.com SIP/2.0
    A->Proxy      Via: SIP/2.0/UDP here.com:5060
                  From: TheBigGuy <sip:UserA@here.com>
                  To: VoiceMail <sip:VoiceMail@wcom.com>
                  Call-Id: 12345600@here.com
                  CSeq: 1 INVITE
                  Contact: TheBigGuy <sip:UserA@here.com>
                  Proxy-Authorization:Digest username="UserAPhone",
                  realm="MCI WorldCom SIP",
                  nonce="ea9c8e88df84f1cec4341ae6cbe5a359", opaque="",
                  uri="sip:VoiceMail@wcom.com", response=<appropriately
                  calculated hash goes here>
                  Content-Type: application/sdp
                  Content-Length: <appropriate value>

                  v=0
                  o=UserA 2890844526 2890844526 IN IP4 client.here.com
                  s=Session SDP
                  c=IN IP4 100.101.102.103
                  t=0 0
                  m=audio 49170 RTP/AVP 0
                  a=rtpmap:0 PCMU/8000

                  /*Client for A prepares to receive data on port 49170
                  from the network. */

    INVITE F2     INVITE sip:UserA-retrieve@vm.wcom.com SIP/2.0
    Proxy->B1     Via: SIP/2.0/UDP wcom.com:5060; branch=1
                  Via: SIP/2.0/UDP here.com:5060
                  Record-Route: <sip:VoiceMail@wcom.com>
                  From: TheBigGuy <sip:UserA@here.com>
                  To: VoiceMail <sip:VoiceMail@wcom.com>
                  Call-Id: 12345600@here.com
                  CSeq: 1 INVITE
                  Contact: TheBigGuy <sip:UserA@here.com>
                  Content-Type: application/sdp
                  Content-Length: <appropriate value>

                  v=0
                  o=UserA 2890844526 2890844526 IN IP4 client.here.com
                  s=Session SDP
                  c=IN IP4 100.101.102.103
                  t=0 0
                  m=audio 49170 RTP/AVP 0
                  a=rtpmap:0 PCMU/8000

    (100 Trying   SIP/2.0 100 Trying
    F3            Via: SIP/2.0/UDP here.com:5060
    Proxy->A)     From: TheBigGuy <sip:UserA@here.com>
                  To: VoiceMail <sip:VoiceMail@wcom.com>
                  Call-Id: 12345600@here.com
                  CSeq: 1 INVITE
                  Content-Length: 0

    200 OK F4     SIP/2.0 200 OK
    VM->Proxy     Via: SIP/2.0/UDP wcom.com:5060; branch=1
                  Via: SIP/2.0/UDP here.com:5060
                  Record-Route: <sip:VoiceMail@wcom.com>
                  From: TheBigGuy <sip:UserA@here.com>
                  To: VoiceMail <sip:VoiceMail@wcom.com>;tag=3145678
                  Call-Id: 12345600@here.com
                  CSeq: 1 INVITE
                  Contact: VoiceMailSystem <sip:UserA-
                  retrieve@vm.wcom.com>
                  Content-Type: application/sdp
                  Content-Length: <appropriate value>

                  v=0
                  o=UserB 2890844527 2890844527 IN IP4 vm.wcom.com
                  s=Session SDP
                  c=IN IP4 110.111.112.114
                  t=0 0
                  m=audio 3456 RTP/AVP 0
                  a=rtpmap:0 PCMU/8000

    200 OK F5     SIP/2.0 200 OK
    Proxy->A      Via: SIP/2.0/UDP here.com:5060
                  Record-Route: <sip:VoiceMail@wcom.com>
                  From: TheBigGuy <sip:UserA@here.com>
                  To: VoiceMail <sip:VoiceMail@wcom.com>;tag=3145678
                  Call-Id: 12345600@here.com
                  CSeq: 1 INVITE
                  Contact VoiceMailSystem <sip: UserA-
                  retrieve@vm.wcom.com>
                  Content-Type: application/sdp
                  Content-Length: <appropriate value>

                  v=0
                  o=UserB 2890844527 2890844527 IN IP4 vm.wcom.com
                  s=Session SDP
                  c=IN IP4 110.111.112.114
                  t=0 0
                  m=audio 3456 RTP/AVP 0
                  a=rtpmap:0 PCMU/8000

    ACK F6        ACK sip:VoiceMail@wcom.com SIP/2.0
    A->Proxy      Via: SIP/2.0/UDP here.com:5060
                  Route:<sip:UserA-retrieve@vm.wcom.com>
                  From: TheBigGuy <sip:UserA@here.com>
                  To: VoiceMail <sip:VoiceMail@wcom.com>;tag=3145678
                  Call-Id: 12345600@here.com
                  CSeq: 1 ACK
                  Content-Length: 0

    ACK F7        ACK sip:UserA-retrieve@vm.wcom.com SIP/2.0
    Proxy->VM     Via: SIP/2.0/UDP wcom.com:5060
                  Via: SIP/2.0/UDP here.com:5060
                  From: TheBigGuy <sip:UserA@here.com>
                  To: VoiceMail <sip:VoiceMail@wcom.com>; tag=3145678
                  Call-Id: 12345600@here.com
                  CSeq: 1 ACK
                  Content-Length: 0

                  /* RTP streams are established between A and VM.  VM
                  determines that the call is likely from UserA, and
                  starts a message retrieval session, prompting for
                  PIN*/

                  /* User A Hangs Up with VM system.  Alternatively, the
                  VM system could initiate the BYE*/

    BYE F8        BYE sip: VoiceMail@wcom.com SIP/2.0
    A->Proxy      Via: SIP/2.0/UDP here.com:5060
                  Route:<sip:UserA-retrieve@vm.wcom.com>
                  From: TheBigGuy <sip:UserA@here.com>
                  To: VoiceMail <sip:VoiceMail@wcom.com>;tag=3145678
                  Call-Id: 12345600@here.com
                  CSeq: 2 BYE
                  Content-Length: 0

    BYE F9        BYE sip: UserA-retrieve@vm.wcom.com SIP/2.0
    Proxy->VM     Via: SIP/2.0/UDP wcom.com:5060
                  Via: SIP/2.0/UDP here.com:5060
                  From: TheBigGuy <sip:UserA@here.com>
                  To: VoiceMail <sip:VoiceMail@wcom.com>;tag=3145678
                  Call-Id: 12345600@here.com
                  CSeq: 2 BYE
                  Content-Length: 0

    200 OK F10    SIP/2.0 200 OK
    VM->Proxy     Via: SIP/2.0/UDP wcom.com:5060
                  Via: SIP/2.0/UDP here.com:5060
                  From: TheBigGuy <sip:UserA@here.com>
                  To: VoiceMail <sip:VoiceMail@wcom.com>;tag=3145678
                  Call-Id: 12345600@here.com
                  CSeq: 2 BYE
                  Content-Length: 0

    200 OK F11    SIP/2.0 200 OK
    Proxy->A      Via: SIP/2.0/UDP here.com:5060
                  From: TheBigGuy <sip:UserA@here.com>
                  To: VoiceMail <sip:VoiceMail@wcom.com>;tag=3145678
                  Call-Id: 12345600@here.com
                  CSeq:  2 BYE
                  Content-Length: 0

4.3.2. Call to retrieve messages from an authenticated subscriber ✨

okay so this one is giving trusted insider energy 🫢 UserA calls the voice mail system to retrieve their messages. The caller is authenticated with UserA's credentials, and sip:UserA-retrieve-auth@vm.wcom.com maps to UserA's mailbox and the "retrieve messages" behavior. The voice mail service trusts the proxy not to forward any calls to that URI unless the call has been authenticated as coming from UserA. πŸ”

Given all of that, the VM service may choose not to require a PIN for calls to this URI. The vibe is "already verified, no need to ask again" πŸ’…

Here's the whole call flow, from the INVITE to the final 200 OK:

            User A              Proxy                VM Service
              |                   |                       |
              |  INVITE F1        |                       |
              |------------------>|                       |
              |                   |  INVITE F2            |
              | (100 Trying) F3   |---------------------->|
              |<------------------|                       |
              |                   |  200 OK F4            |
              |  200 OK F5        |<----------------------|
              |<------------------|                       |
              |                   |                       |
              |  ACK F6           |                       |
              |------------------>|  ACK F7               |
              |                   |---------------------->|
              |                   |                       |
              |      RTP Both Ways - Deposit Msg for B    |
              |<-m-m-m-m-m-m-m-m-m-m-m-m-m-m-m-m-m-m-m-m->|
              |                   |                       |
              |  BYE F8           |                       |
              |------------------>|  BYE F9               |
              |                   |---------------------->|
              |                   |                       |
              |                   |  200 OK F10           |
              |                   |<----------------------|
              |  200 OK F11       |                       |
              |<------------------|                       |
              |                   |                       |

And here's every message, flow by flow, with the exact headers and bodies πŸŽ€

     Flow Id                            Comments

    INVITE F1     INVITE sip:VoiceMail@wcom.com SIP/2.0
    A->Proxy      Via: SIP/2.0/UDP here.com:5060
                  From: TheBigGuy <sip:UserA@here.com>
                  To: VoiceMail <sip:VoiceMail@wcom.com>
                  Call-Id: 12345600@here.com
                  CSeq: 1 INVITE
                  Contact: TheBigGuy <sip:UserA@here.com>
                  Proxy-Authorization:Digest username="UserA",
                  realm="MCI WorldCom SIP",
                  nonce="ea9c8e88df84f1cec4341ae6cbe5a359", opaque="",
                  uri="sip:VoiceMail@wcom.com", response=<appropriately
                  calculated hash goes here>
                  Content-Type: application/sdp
                  Content-Length: <appropriate value>

                  v=0
                  o=UserA 2890844526 2890844526 IN IP4 client.here.com
                  s=Session SDP
                  c=IN IP4 100.101.102.103
                  t=0 0
                  m=audio 49170 RTP/AVP 0
                  a=rtpmap:0 PCMU/8000

                  /*Client for A prepares to receive data on port 49170
                  from the network. */

    INVITE F2     INVITE sip:UserA-retrieve-auth@vm.wcom.com SIP/2.0
    Proxy->B1     Via: SIP/2.0/UDP wcom.com:5060; branch=1
                  Via: SIP/2.0/UDP here.com:5060
                  Record-Route: <sip:VoiceMail@wcom.com>
                  From: TheBigGuy <sip:UserA@here.com>
                  To: VoiceMail <sip:VoiceMail@wcom.com>
                  Call-Id: 12345600@here.com
                  CSeq: 1 INVITE
                  Contact: TheBigGuy <sip:UserA@here.com>
                  Content-Type: application/sdp
                  Content-Length: <appropriate value>

                  v=0
                  o=UserA 2890844526 2890844526 IN IP4 client.here.com
                  s=Session SDP
                  c=IN IP4 100.101.102.103
                  t=0 0
                  m=audio 49170 RTP/AVP 0
                  a=rtpmap:0 PCMU/8000

    (100 Trying   SIP/2.0 100 Trying
    F3            Via: SIP/2.0/UDP here.com:5060
    Proxy->A)     From: TheBigGuy <sip:UserA@here.com>
                  To: VoiceMail <sip:VoiceMail@wcom.com>
                  Call-Id: 12345600@here.com
                  CSeq: 1 INVITE
                  Content-Length: 0

    200 OK F4     SIP/2.0 200 OK
    VM->Proxy     Via: SIP/2.0/UDP wcom.com:5060; branch=1
                  Via: SIP/2.0/UDP here.com:5060
                  Record-Route: <sip:VoiceMail@wcom.com>
                  From: TheBigGuy <sip:UserA@here.com>
                  To: VoiceMail <sip:VoiceMail@wcom.com>;tag=3145678
                  Call-Id: 12345600@here.com
                  CSeq: 1 INVITE
                  Contact: VoiceMailSystem <sip:UserA-retrieve-
                  auth@vm.wcom.com>
                  Content-Type: application/sdp
                  Content-Length: <appropriate value>
                  v=0
                  o=UserB 2890844527 2890844527 IN IP4 vm.wcom.com
                  s=Session SDP
                  c=IN IP4 110.111.112.114
                  t=0 0
                  m=audio 3456 RTP/AVP 0
                  a=rtpmap:0 PCMU/8000

    200 OK F5     SIP/2.0 200 OK
    Proxy->A      Via: SIP/2.0/UDP here.com:5060
                  Record-Route: <sip:VoiceMail@wcom.com>
                  From: TheBigGuy <sip:UserA@here.com>
                  To: VoiceMail <sip:VoiceMail@wcom.com>;tag=3145678
                  Call-Id: 12345600@here.com
                  CSeq: 1 INVITE
                  Contact VoiceMailSystem <sip: UserA-retrieve-
                  auth@vm.wcom.com>
                  Content-Type: application/sdp
                  Content-Length: <appropriate value>

                  v=0
                  o=UserB 2890844527 2890844527 IN IP4 vm.wcom.com
                  s=Session SDP
                  c=IN IP4 110.111.112.114
                  t=0 0
                  m=audio 3456 RTP/AVP 0
                  a=rtpmap:0 PCMU/8000

    ACK F6        ACK sip:VoiceMail@wcom.com SIP/2.0
    A->Proxy      Via: SIP/2.0/UDP here.com:5060
                  Route: <sip:UserA-retrieve-auth@vm.wcom.com>
                  From: TheBigGuy <sip:UserA@here.com>
                  To: VoiceMail <sip:VoiceMail@wcom.com>;tag=3145678
                  Call-Id: 12345600@here.com
                  CSeq: 1 ACK
                  Content-Length: 0

    ACK F7        ACK sip:UserA-retrieve-auth@vm.wcom.com SIP/2.0
    Proxy->VM     Via: SIP/2.0/UDP wcom.com:5060
                  Via: SIP/2.0/UDP here.com:5060
                  From: TheBigGuy <sip:UserA@here.com>
                  To: VoiceMail <sip:VoiceMail@wcom.com>; tag=3145678
                  Call-Id: 12345600@here.com
                  CSeq: 1 ACK
                  Content-Length: 0
                  /* RTP streams are established between A and VM.  VM
                  determines that the call is likely from UserA, and
                  starts a message retrieval session.  Since the proxy
                  has already authenticated the identity of UserA, the
                  VM does not need to prompt for PIN. */

                  /* User A Hangs Up with VM system.  Alternatively, the
                  VM system could initiate the BYE*/

    BYE F8        BYE sip:VoiceMail@wcom.com SIP/2.0
    A->Proxy      Via: SIP/2.0/UDP here.com:5060
                  Route:<sip:UserA-retrieve-auth@vm.wcom.com>
                  From: TheBigGuy <sip:UserA@here.com>
                  To: VoiceMail <sip:VoiceMail@wcom.com>;tag=3145678
                  Call-Id: 12345600@here.com
                  CSeq: 2 BYE
                  Content-Length: 0

    BYE F9        BYE sip: UserA-retrieve-auth@vm.wcom.com SIP/2.0
    Proxy->VM     Via: SIP/2.0/UDP wcom.com:5060
                  Via: SIP/2.0/UDP here.com:5060
                  From: TheBigGuy <sip:UserA@here.com>
                  To: VoiceMail <sip:VoiceMail@wcom.com>;tag=3145678
                  Call-Id: 12345600@here.com
                  CSeq: 2 BYE
                  Content-Length: 0

    200 OK F10    SIP/2.0 200 OK
    VM->Proxy     Via: SIP/2.0/UDP wcom.com:5060
                  Via: SIP/2.0/UDP here.com:5060
                  From: TheBigGuy <sip:UserA@here.com>
                  To: VoiceMail <sip:VoiceMail@wcom.com>;tag=3145678
                  Call-Id: 12345600@here.com
                  CSeq: 2 BYE
                  Content-Length: 0

    200 OK F11    SIP/2.0 200 OK
    Proxy->A      Via: SIP/2.0/UDP here.com:5060
                  From: TheBigGuy <sip:UserA@here.com>
                  To: VoiceMail <sip:VoiceMail@wcom.com>;tag=3145678
                  Call-Id: 12345600@here.com
                  CSeq:  2 BYE
                  Content-Length: 0

5. Security Considerations πŸ”’

okay, serious moment, bestie 😭 This document describes a usage of SIP/2.0 as defined by RFC 2543[1]. It adds no additions, no modifications, and no restrictions to the protocol defined there. So any implementation of the ideas in this document is subject to the issues discussed in RFC 2543[1]. Go read those too, no skipping πŸ’€

6. Acknowledgments 🫢

The authors want to thank Chris Cunningham, Steve Donovan, Alan Johnston, Henry Sinnreich, Kevin Summers, John Truetken, and Dean Willis for their discussion of and contribution to this work. Legends, all of them ✨

References

[1] Handley, M., Schulzrinne, H., Schooler, E. and J. Rosenberg, "SIP: Session Initiation Protocol", RFC 2543, March 1999.

Authors' Addresses πŸ’Œ

Ben Campbell
dynamicsoft
5100 Tennyson Parkway
Suite 1200
Plano, TX  75024

EMail: bcampbell@dynamicsoft.com


Robert J. Sparks
dynamicsoft
5100 Tennyson Parkway
Suite 1200
Plano, TX  75024

EMail: rsparks@dynamicsoft.com

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.

Acknowledgement 🌈

Funding for the RFC Editor function is currently provided by the Internet Society. πŸ’–

πŸ“¦ where this page comes from