2.16. Call Pickup
Alice Bob Bill | | | | INVITE F1 | | |------------->| | |180 Ringing F2| | |<-------------| | | | SUBSCRIBE F3 | | |<------------------| | | 200 OK F4 | | |------------------>| | | NOTIFY F5 | | |------------------>| | | 200 OK F6 | | |<------------------| | INVITE Replaces:Bob F7 | |<---------------------------------| | | 200 OK F8 | |--------------------------------->| | CANCEL F9 | | |------------->| | | 200 OK F10 | | |<-------------| | | 487 F11 | | |<-------------| | | ACK F12 | | |------------->| | | ACK F13 | |<---------------------------------| | | | Two-Way RTP Established | |<================================>| | BYE F14 | |--------------------------------->| | 200 OK F15 | |<---------------------------------| | | Bob and Bill are part of a work group at example.com that can pick up each other's calls. Alice calls Bob, who does not answer. Bill wishes to pick up the call and sends a SUBSCRIBE to Bob to retrieve the dialog information. Bill then generates an INVITE with a Replaces to Alice. Alice answers the INVITE and sends a CANCEL to stop Bob's phone ringing. Note that the relative order of the 487/ACK sequence (F11/F12) and the 200 OK to the CANCEL (F10) is not deterministic.
This call flow shows the use of the "early-only" parameter [RFC3891] in the Replaces header field of F7. This parameter prevents Alice from accepting the INVITE if Bob has already accepted the INVITE. If Bill had wished to "take" the call from Bob regardless of whether he had answered, the parameter would not have been present in F7. Also note that the subscription between Bob and Carol could have been established prior to Alice's call. Message Details F1 INVITE Alice -> Bob INVITE sips:bob@biloxi.example.com SIP/2.0 Via: SIP/2.0/TLS client.atlanta.example.com:5061 ;branch=z9hG4bK74bf9 Max-Forwards: 70 From: Alice <sips:alice@atlanta.example.com>;tag=1234567 To: Bob <sips:bob@biloxi.example.com> Call-ID: 12345600@atlanta.example.com CSeq: 1 INVITE Contact: <sips:a8342043f@atlanta.example.com;gr> Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY Supported: replaces, gruu Content-Type: application/sdp Content-Length: ... v=0 o=alice 2890844526 2890844526 IN IP4 client.atlanta.example.com s= c=IN IP4 client.atlanta.example.com t=0 0 m=audio 49170 RTP/AVP 0 a=rtpmap:0 PCMU/8000 F2 180 Ringing Bob -> Alice SIP/2.0 180 Ringing Via: SIP/2.0/TLS client.atlanta.example.com:5061 ;branch=z9hG4bK74bf9 ;received=192.0.2.103 From: Alice <sips:alice@atlanta.example.com>;tag=1234567 To: Bob <sips:bob@biloxi.example.com>;tag=3145678 Call-ID: 12345600@atlanta.example.com
CSeq: 1 INVITE Contact: <sips:bob@client.biloxi.example.com> Content-Length: 0 /* Bill decides to pick up the call. */ F3 SUBSCRIBE Bill -> Bob SUBSCRIBE sips:bob@biloxi.example.com SIP/2.0 Via: SIP/2.0/TLS pc.biloxi.example.com:5061 ;branch=z9hG4bK74bf Max-Forwards: 70 From: Bill <sips:bill@biloxi.example.com>;tag=8675309 To: Bob <sips:bob@biloxi.example.com> Call-ID: rt4353gs2egg@pc.biloxi.example.com CSeq: 1 SUBSCRIBE Contact: <sips:bill@pc.biloxi.example.com> Event: dialog Expires: 0 Accept: application/dialog-info+xml Content-Length: 0 F4 200 OK Bob -> Bill SIP/2.0 200 OK Via: SIP/2.0/TLS pc.biloxi.example.com:5061 ;branch=z9hG4bK74bf ;received=192.0.2.114 Max-Forwards: 70 From: Bill <sips:bill@biloxi.example.com>;tag=8675309 To: Bob <sips:bob@biloxi.example.com>;tag=31451098 Call-ID: rt4353gs2egg@pc.biloxi.example.com CSeq: 1 SUBSCRIBE Content-Length: 0 F5 NOTIFY Bob -> Bill NOTIFY sips:bill@pc.biloxi.example.com SIP/2.0 Via: SIP/2.0/TLS client.biloxi.example.com:5061 ;branch=z9hG4bK74br Max-Forwards: 70 From: Bob <sips:bob@biloxi.example.com>;tag=31451098 To: Bill <sips:bill@biloxi.example.com>;tag=8675309 Call-ID: rt4353gs2egg@pc.biloxi.example.com CSeq: 1 NOTIFY
Contact: <sips:bob@client.biloxi.example.com> Event: dialog Subscription-State: terminated;reason=timeout Content-Type: application/dialog-info+xml Content-Length: ... <?xml version="1.0"?> <dialog-info xmlns="urn:ietf:params:xml:ns:dialog-info" version="0" state="full" entity="sips:bob@biloxi.example.com"> <dialog id="94992014524" call-id="12345600@atlanta.example.com" local-tag="3145678" remote-tag="1234567" direction="recipient"> <duration>1</duration> <local> <identity display="Bob">sips:bob@biloxi.example.com</identity> <target>sips:bob@client.biloxi.example.com</target> </local> <remote> <identity display="Alice">sips:alice@atlanta.example.com </identity> <target>sips:a8342043@atlanta.example.com;gr</target> </remote> <state>early</state> </dialog> </dialog-info> F6 200 OK Bill -> Bob SIP/2.0 200 OK Via: SIP/2.0/TLS client.biloxi.example.com:5061 ;branch=z9hG4bK74br ;received=192.0.2.105 From: Bob <sips:bob@biloxi.example.com>;tag=31451098 To: Bill <sips:bill@biloxi.example.com>;tag=8675309 Call-ID: rt4353gs2egg@pc.biloxi.example.com CSeq: 1 NOTIFY Contact: <sips:bill@pc.biloxi.example.com> Content-Length: 0 F7 INVITE Bill -> Alice INVITE sips:a8342043f@atlanta.example.com;gr SIP/2.0 Via: SIP/2.0/TLS pc.biloxi.example.com:5061 ;branch=z9hG4bK74HH Max-Forwards: 70 From: Bill <sips:bill@biloxi.example.com>;tag=8675310 To: Alice <sips:alice@atlanta.example.com>
Call-ID: 563456212@b2.biloxi.example.com CSeq: 1 INVITE Require: replaces Replaces: 12345600@atlanta.example.com ;from-tag=314578;to-tag=1234567;early-only Contact: <sips:bill@pc.biloxi.example.com> Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY Supported: replaces Content-Type: application/sdp Content-Length: ... v=0 o=bill 2890843122 2890843122 IN IP4 pc.biloxi.example.com s= c=IN IP4 pc.biloxi.example.com t=0 0 m=audio 5342 RTP/AVP 0 a=rtpmap:0 PCMU/8000 /* Alice matches the dialog information in the Replaces header and accepts the INVITE. */ F8 200 OK Alice -> Bill SIP/2.0 200 OK Via: SIP/2.0/TLS pc.biloxi.example.com:5061 ;branch=z9hG4bK74HH ;received=192.0.2.114 From: Bill <sips:bill@biloxi.example.com>;tag=8675310 To: Alice <sips:alice@atlanta.example.com>;tag=131256 Call-ID: 563456212@b2.biloxi.example.com CSeq: 1 INVITE Contact: <sips:a8342043f@atlanta.example.com;gr> Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY Supported: replaces, gruu Content-Type: application/sdp Content-Length: ... v=0 o=alice 289084543 289084543 IN IP4 client.atlanta.example.com s= c=IN IP4 client.atlanta.example.com t=0 0 m=audio 49172 RTP/AVP 0 a=rtpmap:0 PCMU/8000 /* Alice stops Bob's phone from ringing by sending a CANCEL. */
F9 CANCEL Alice -> Bob CANCEL sips:bob@biloxi.example.com SIP/2.0 Via: SIP/2.0/TLS client.atlanta.example.com:5061 ;branch=z9hG4bK74bf9 Max-Forwards: 70 From: Alice <sips:alice@atlanta.example.com>;tag=1234567 To: Bob <sips:bob@biloxi.example.com> Call-ID: 12345600@atlanta.example.com CSeq: 1 CANCEL Content-Length: 0 F10 200 OK Bob -> Alice SIP/2.0 200 OK Via: SIP/2.0/TLS client.atlanta.example.com:5061 ;branch=z9hG4bK74bf9 ;received=192.0.2.103 From: Alice <sips:alice@atlanta.example.com>;tag=1234567 To: Bob <sips:bob@biloxi.example.com>;tag=3145678 Call-ID: 12345600@atlanta.example.com CSeq: 1 CANCEL Content-Length: 0 F11 487 Request Terminated Bob -> Alice SIP/2.0 487 Request Terminated Via: SIP/2.0/TLS client.atlanta.example.com:5061 ;branch=z9hG4bK74bf9 ;received=192.0.2.103 From: Alice <sips:alice@atlanta.example.com>;tag=1234567 To: Bob <sips:bob@biloxi.example.com>;tag=3145678 Call-ID: 12345600@atlanta.example.com CSeq: 1 INVITE Content-Length: 0 F12 ACK Alice -> Bob ACK sips:bob@client.biloxi.example.com SIP/2.0 Via: SIP/2.0/TLS client.atlanta.example.com:5061 ;branch=z9hG4bK83749.1 Max-Forwards: 70 From: Alice <sips:alice@atlanta.example.com>;tag=1234567 To: Bob <sips:bob@biloxi.example.com>;tag=3145678
Call-ID: 12345600@atlanta.example.com CSeq: 1 ACK Content-Length: 0 F13 ACK Bill -> Alice ACK sips:a8342043f@atlanta.example.com;gr SIP/2.0 Via: SIP/2.0/TLS pc.biloxi.example.com:5061 ;branch=z9hG4bK7435 Max-Forwards: 70 From: Bill <sips:bill@biloxi.example.com>;tag=8675310 To: Alice <sips:alice@atlanta.example.com>;tag=131256 Call-ID: 563456212@b2.biloxi.example.com CSeq: 1 ACK Content-Length: 0 /* RTP streams are established between Alice and Bill. Later, Alice hangs up with Bill. */ F14 BYE Alice -> Bill BYE sips:bill@pc.biloxi.example.com SIP/2.0 Via: SIP/2.0/TLS client.atlanta.example.com:5061 ;branch=z9hG4bK74bf2 Max-Forwards: 70 To: Bill <sips:bill@biloxi.example.com>;tag=8675310 From: Alice <sips:alice@atlanta.example.com>;tag=131256 Call-ID: 563456212@b2.biloxi.example.com CSeq: 1 BYE Content-Length: 0 F15 200 OK Bill -> Alice SIP/2.0 200 OK Via: SIP/2.0/TLS client.atlanta.example.com:5061 ;branch=z9hG4bK74bf2 ;received=192.0.2.105 To: Bill <sips:bill@biloxi.example.com>;tag=8675310 From: Alice <sips:alice@atlanta.example.com>;tag=131256 Call-ID: 563456212@b2.biloxi.example.com CSeq: 1 BYE Content-Length: 0
2.17. Automatic Redial
Alice Bob | | | INVITE F1 | |--------------->| |486 Busy Here F2| |<---------------| Bob is busy | ACK F3 | |--------------->| | SUBSCRIBE F4 | |--------------->| | 200 OK F5 | |<---------------| | NOTIFY F6 | |<---------------| | 200 OK F7 | |--------------->| | | | NOTIFY F8 | Bob is now available |<---------------| | 200 OK F9 | |--------------->| | | | INVITE F10 | |--------------->| Session setup successful | 180 Ringing F11| |<---------------| | 200 OK F12 | |<---------------| | ACK F13 | |--------------->| | Media Session | |<==============>| | | | NOTIFY F14 | |<---------------| | 200 OK F15 | |--------------->| | | | SUBSCRIBE F16 | Alice terminates subscription |--------------->| | 200 OK F17 | |<---------------| | NOTIFY F18 | |<---------------| | 200 OK F19 | |--------------->| | |
Bob is initially busy when Alice calls. Alice subscribes to Bob's call state using a SUBSCRIBE F4. Bob sends a NOTIFY F8 when Bob is available. Alice is alerted, then Alice sends an INVITE to Bob to establish the session. The subscription is terminated using SUBSCRIBE F16. Message Details F1 INVITE Alice -> Bob INVITE sips:bob@biloxi.example.com SIP/2.0 Via: SIP/2.0/TLS client.atlanta.example.com:5061 ;branch=z9hG4bK74bf9 Max-Forwards: 70 From: Alice <sips:alice@atlanta.example.com>;tag=1234567 To: Bob <sips:bob@biloxi.example.com> Call-ID: 12345600@atlanta.example.com CSeq: 1 INVITE Contact: <sips:alice@client.atlanta.example.com> Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY Supported: replaces Content-Type: application/sdp Content-Length: ... v=0 o=alice 2890844526 2890844526 IN IP4 client.atlanta.example.com s= c=IN IP4 client.atlanta.example.com t=0 0 m=audio 49170 RTP/AVP 0 a=rtpmap:0 PCMU/8000 F2 486 Busy Here SIP/2.0 486 Busy Here Via: SIP/2.0/TLS client.atlanta.example.com:5061 ;branch=z9hG4bK74bf9 ;received=192.0.2.103 From: Alice <sips:alice@atlanta.example.com>;tag=1234567 To: Bob <sips:bob@biloxi.example.com>;tag=982039i4 Call-ID: 12345600@atlanta.example.com CSeq: 1 INVITE Content-Length: 0
F3 ACK Alice -> Bob ACK sips:bob@biloxi.example.com SIP/2.0 Via: SIP/2.0/TLS client.atlanta.example.com:5061 ;branch=z9hG4bK74bf9 Max-Forwards: 70 From: Alice <sips:alice@atlanta.example.com>;tag=1234567 To: Bob <sips:bob@biloxi.example.com>;tag=982039i4 Call-ID: 12345600@atlanta.example.com CSeq: 1 ACK Content-Length: 0 F4 SUBSCRIBE Alice -> Bob SUBSCRIBE sips:bob@biloxi.example.com SIP/2.0 Via: SIP/2.0/TLS client.atlanta.example.com:5061 ;branch=z9hG4bK74b8G Max-Forwards: 70 From: Alice <sips:alice@atlanta.example.com>;tag=837348234 To: Bob <sips:bob@biloxi.example.com> Call-ID: 4524526232@atlanta.example.com CSeq: 1 SUBSCRIBE Contact: sips:alice@client.atlanta.example.com Event: dialog Accept: application/dialog-info+xml Content-Length: 0 F5 200 OK Bob -> Alice SIP/2.0 200 OK Via: SIP/2.0/TLS client.atlanta.example.com:5061 ;branch=z9hG4bK74b8G ;received=192.0.2.103 From: Alice <sips:alice@atlanta.example.com>;tag=837348234 To: Bob <sips:bob@biloxi.example.com>;tag=341123 Call-ID: 4524526232@atlanta.example.com Expires: 60 CSeq: 1 SUBSCRIBE Contact: sips:bob@client.biloxi.example.com Content-Length: 0
F6 NOTIFY Bob -> Alice NOTIFY sips:alice@client.atlanta.example.com SIP/2.0 Via: SIP/2.0/TLS client.biloxi.example.com:5061 ;branch=z9hG4bK74bn2 Max-Forwards: 70 From: Bob <sips:bob@biloxi.example.com>;tag=341123 To: Alice <sips:alice@atlanta.example.com>;tag=837348234 Call-ID: 4524526232@atlanta.example.com CSeq: 1 NOTIFY Contact: <sips:bob@client.biloxi.example.com> Event: dialog Subscription-State: active;expires=59 Content-Type: application/dialog-info+xml Content-Length: ... <?xml version="1.0"?> <dialog-info xmlns="urn:ietf:params:xml:ns:dialog-info" version="0" state="full" entity="sips:bob@biloxi.example.com"> <dialog id="562623442g3"> <duration>1</duration> <state>confirmed</state> </dialog> </dialog-info> F7 200 OK Alice -> Bob SIP/2.0 200 OK Via: SIP/2.0/TLS client.biloxi.example.com:5061 ;branch=z9hG4bK74bn2 ;received=192.0.2.105 From: Bob <sips:bob@biloxi.example.com>;tag=341123 To: Alice <sips:alice@atlanta.example.com>;tag=837348234 Call-ID: 4524526232@atlanta.example.com CSeq: 1 NOTIFY Content-Length: 0 /* Bob is now available. */ F8 NOTIFY Bob -> Alice NOTIFY sips:alice@atlanta.example.com SIP/2.0 Via: SIP/2.0/TLS client.biloxi.example.com:5061 ;branch=z9hG4bK74bVi Max-Forwards: 70 From: Bob <sips:bob@biloxi.example.com>;tag=341123
To: Alice <sips:alice@atlanta.example.com>;tag=837348234 Call-ID: 4524526232@atlanta.example.com CSeq: 2 NOTIFY Event: dialog Subscription-State: active;expires=27 Contact: <sips:bob@client.biloxi.example.com> Content-Type: application/dialog-info+xml Content-Length: ... <?xml version="1.0"?> <dialog-info xmlns="urn:ietf:params:xml:ns:dialog-info" version="0" state="full" entity="sips:bob@biloxi.example.com"> <dialog id="562623442g3"> <state>terminated</state> </dialog> </dialog-info> F9 200 OK Alice -> Bob SIP/2.0 200 OK Via: SIP/2.0/TLS client.biloxi.example.com:5061 ;branch=z9hG4bK74bVi ;received=192.0.2.105 From: Bob <sips:bob@biloxi.example.com>;tag=341123 To: Alice <sips:alice@atlanta.example.com>;tag=837348234 Call-ID: 4524526232@atlanta.example.com CSeq: 2 NOTIFY Content-Length: 0 F10 INVITE Alice -> Bob INVITE sips:bob@biloxi.example.com SIP/2.0 Via: SIP/2.0/TLS client.atlanta.example.com:5061 ;branch=z9hG4bK74bfq Max-Forwards: 70 From: Alice <sips:alice@atlanta.example.com>;tag=f23fkg14k To: Bob <sips:bob@biloxi.example.com> Call-ID: aoij4i9okitr@atlanta.example.com CSeq: 1 INVITE Contact: <sips:alice@client.atlanta.example.com> Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY Supported: replaces Content-Type: application/sdp Content-Length: ...
v=0 o=alice 2890844826 2890844826 IN IP4 client.atlanta.example.com s= c=IN IP4 client.atlanta.example.com t=0 0 m=audio 49170 RTP/AVP 0 a=rtpmap:0 PCMU/8000 F11 180 Ringing Bob -> Alice SIP/2.0 180 Ringing Via: SIP/2.0/TLS client.atlanta.example.com:5061 ;branch=z9hG4bK74bfq ;received=192.0.2.103 From: Alice <sips:alice@atlanta.example.com>;tag=f23fkg14k To: Bob <sips:bob@biloxi.example.com>;tag=23431 Call-ID: aoij4i9okitr@atlanta.example.com CSeq: 1 INVITE Contact: <sips:bob@client.biloxi.example.com> Content-Length: 0 F12 200 OK Bob -> Alice SIP/2.0 200 OK Via: SIP/2.0/TLS client.atlanta.example.com:5061 ;branch=z9hG4bK74bfq ;received=192.0.2.103 From: Alice <sips:alice@atlanta.example.com>;tag=f23fkg14k To: Bob <sips:bob@biloxi.example.com>;tag=23431 Call-ID: aoij4i9okitr@atlanta.example.com CSeq: 1 INVITE Contact: <sips:bob@client.biloxi.example.com> Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY Supported: replaces Content-Type: application/sdp Content-Length: ... v=0 o=bob 2890854527 2890854527 IN IP4 client.biloxi.example.com s= c=IN IP4 client.biloxi.example.com t=0 0 m=audio 3456 RTP/AVP 0 a=rtpmap:0 PCMU/8000
F13 ACK Alice -> Bob ACK sips:bob@client.biloxi.example.com SIP/2.0 Via: SIP/2.0/TLS client.atlanta.example.com:5061 ;branch=z9hG4bK74bLBJ Max-Forwards: 70 From: Alice <sips:alice@atlanta.example.com>;tag=f23fkg14k To: Bob <sips:bob@biloxi.example.com>;tag=23431 Call-ID: aoij4i9okitr@atlanta.example.com CSeq: 1 ACK Content-Length: 0 F14 NOTIFY Bob -> Alice NOTIFY sips:alice@client.atlanta.example.com SIP/2.0 Via: SIP/2.0/TLS client.biloxi.example.com:5061 ;branch=z9hG4bK4bnd2 Max-Forwards: 70 From: Bob <sips:bob@biloxi.example.com>;tag=341123 To: Alice <sips:alice@atlanta.example.com>;tag=837348234 Call-ID: 4524526232@atlanta.example.com CSeq: 3 NOTIFY Contact: <sips:bob@client.biloxi.example.com> Event: dialog Subscription-State: active;expires=15 Content-Type: application/dialog-info+xml Content-Length: ... <?xml version="1.0"?> <dialog-info xmlns="urn:ietf:params:xml:ns:dialog-info" version="0" state="full" entity="sips:bob@biloxi.example.com"> <dialog id="62d2623442g3"> <duration>1</duration> <state>confirmed</state> </dialog> </dialog-info> F15 200 OK Alice -> Bob SIP/2.0 200 OK Via: SIP/2.0/TLS client.biloxi.example.com:5061 ;branch=z9hG4bK4bnd2 ;received=192.0.2.105 From: Bob <sips:bob@biloxi.example.com>;tag=341123 To: Alice <sips:alice@atlanta.example.com>;tag=837348234
Call-ID: 4524526232@atlanta.example.com CSeq: 3 NOTIFY Content-Length: 0 /* Alice terminates the subscription. */ F16 SUBSCRIBE Alice -> Bob SUBSCRIBE sips:bob@client.biloxi.example.com SIP/2.0 Via: SIP/2.0/TLS client.atlanta.example.com:5061 ;branch=z9hG4bK474b8 Max-Forwards: 70 From: Alice <sips:alice@atlanta.example.com>;tag=837348234 To: Alice <sips:alice@atlanta.example.com>;tag=837348234 Call-ID: 4524526232@atlanta.example.com CSeq: 2 SUBSCRIBE Contact: sips:alice@client.atlanta.example.com Event: dialog Expires: 0 Accept: application/dialog-info+xml Content-Length: 0 F17 200 OK Bob -> Alice SIP/2.0 200 OK Via: SIP/2.0/TLS client.atlanta.example.com:5061 ;branch=z9hG4bK474b8 ;received=192.0.2.103 From: Alice <sips:alice@atlanta.example.com>;tag=837348234 To: Bob <sips:bob@biloxi.example.com>;tag=341123 Call-ID: 4524526232@atlanta.example.com Expires: 0 CSeq: 2 SUBSCRIBE Contact: sips:bob@client.biloxi.example.com Content-Length: 0 F18 NOTIFY Bob -> Alice NOTIFY sips:alice@client.atlanta.example.com SIP/2.0 Via: SIP/2.0/TLS client.biloxi.example.com:5061 ;branch=z9hG4bKb5n2j Max-Forwards: 70 From: Bob <sips:bob@biloxi.example.com>;tag=341123 To: Alice <sips:alice@atlanta.example.com>;tag=837348234 Call-ID: 4524526232@atlanta.example.com
CSeq: 4 NOTIFY Contact: <sips:bob@client.biloxi.example.com> Event: dialog Subscription-State: terminated;reason=noresource Content-Type: application/dialog-info+xml Content-Length: ... <?xml version="1.0"?> <dialog-info xmlns="urn:ietf:params:xml:ns:dialog-info" version="0" state="full" entity="sips:bob@biloxi.example.com"> <dialog id="62d2623442g3"> <duration>3</duration> <state>confirmed</state> </dialog> </dialog-info> F19 200 OK Alice -> Bob SIP/2.0 200 OK Via: SIP/2.0/TLS client.biloxi.example.com:5061 ;branch=z9hG4bKb5n2j ;received=192.0.2.105 From: Bob <sips:bob@biloxi.example.com>;tag=341123 To: Alice <sips:alice@atlanta.example.com>;tag=837348234 Call-ID: 4524526232@atlanta.example.com CSeq: 4 NOTIFY Content-Length: 0
2.18. Click to Dial
Bob's PC Bob Carol | REFER Refer-To:Carol F1 | |------------------->| | | 202 Accepted F2 | | |<-------------------| | | | INVITE F3 | | |------------------->| | | 180 Ringing F4 | | |<-------------------| | | 200 OK F5 | | |<-------------------| | | ACK F6 | | |------------------->| | | RTP | | |<==================>| | | | In this example, while browsing the web on his PC, Bob clicks on Carol's SIP URI, intending to establish a session with Carol. Bob's web browser passes the SIP URI to the SIP client on Bob's PC. The PC client is configured with the URI of Bob's SIP phone. A REFER is sent to the SIP phone, which results in the establishment of the session between Bob and Carol. Note that Bob's PC requests that no REFER dialog be established by the use of the Refer-Sub: false header field [RFC4488]. This flow is preferable to the 3pcc flow because the end-to-end SIP signaling is not interrupted by the 3pcc controller, and because Bob's experience of the call will not be marred by the lack of ringback tone or possible clipping. Suitable authorization of the REFER and explicit authorization of the triggered INVITE by Bob are necessary. Message Details /* Bob's PC SIP client sends a REFER to Bob's SIP phone. */ F1 REFER PC -> Bob REFER sips:bob@biloxi.example.com SIP/2.0 Via: SIP/2.0/TLS pc.biloxi.example.com:5061 ;branch=z9hG4bKnashds7 Max-Forwards: 70 From: <sips:pc.biloxi.example.com>;tag=1234567 To: Bob <sips:bob@biloxi.example.com>
Call-ID: 1234560183434 CSeq: 1 REFER Refer-To: <sips:carol@chicago.example.com> Refer-Sub: false Contact: <sips:pc.biloxi.example.com> Content-Length: 0 F2 202 Accepted Bob -> PC SIP/2.0 202 Accepted Via: SIP/2.0/TLS client.biloxi.example.com:5061 ;branch=z9hG4bKnashds7 ;received=192.0.2.103 From: <sips:pc.biloxi.example.com>;tag=1234567 To: Bob <sips:bob@biloxi.example.com>;tag=314159 Call-ID: 1234560183434 Contact: <sips:bob@client.biloxi.example.com> CSeq: 1 REFER Refer-Sub: false Content-Length: 0 F3 INVITE Bob -> Carol INVITE sips:carol@chicago.example.com SIP/2.0 Via: SIP/2.0/TLS client.biloxi.example.com:5061 ;branch=z9hG4bKnashdK9 Max-Forwards: 70 From: Bob <sips:bob@biloxi.example.com>;tag=8675309 To: Carol <sips:carol@chicago.example.com> Call-ID: 7436222@atlanta.example.com CSeq: 1 INVITE Contact: <sips:bob@client.biloxi.example.com> Referred-By: <sips:pc.biloxi.example.com> Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY Supported: replaces Content-Type: application/sdp Content-Length: ... v=0 o=bob 2890844539 2890844539 IN IP4 client.biloxi.example.com s= c=IN IP4 client.biloxi.example.com t=0 0 m=audio 3458 RTP/AVP 0 a=rtpmap:0 PCMU/8000
F4 180 Ringing Carol -> Bob SIP/2.0 180 Ringing Via: SIP/2.0/TLS client.biloxi.example.com:5061 ;branch=z9hG4bKnashdK9 ;received=192.0.2.113 From: Bob <sips:bob@biloxi.example.com>;tag=8675309 To: Carol <sips:carol@chicago.example.com>;tag=928287 Call-ID: 7436222@atlanta.example.com CSeq: 1 INVITE Contact: <sips:carol@client.chicago.example.com> Content-Length: 0 F5 200 OK Carol -> Bob SIP/2.0 200 OK Via: SIP/2.0/TLS client.biloxi.example.com:5061 ;branch=z9hG4bKnashdK9 ;received=192.0.2.113 From: Bob <sips:bob@biloxi.example.com>;tag=8675309 To: Carol <sips:carol@chicago.example.com>;tag=928287 Call-ID: 7436222@atlanta.example.com CSeq: 1 INVITE Contact: <sips:carol@client.chicago.example.com> Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY Supported: replaces Content-Type: application/sdp Content-Length: ... v=0 o=carol 2890844527 2890844527 IN IP4 client.chicago.example.com s= c=IN IP4 client.chicago.example.com t=0 0 m=audio 3456 RTP/AVP 0 a=rtpmap:0 PCMU/8000 F6 ACK Bob -> Carol ACK sips:carol@client.chicago.example.com SIP/2.0 Via: SIP/2.0/TLS client.biloxi.example.com:5061 ;branch=z9hG4bKnashd43 Max-Forwards: 70 From: Bob <sips:bob@biloxi.example.com>;tag=8675309 To: Carol <sips:carol@chicago.example.com>;tag=928287
Call-ID: 7436222@atlanta.example.com CSeq: 1 ACK Content-Length: 0 /* Bob and Carol now have established a session. */3. Security Considerations
Since many of the examples in this document involve SIP call control, either peer-to-peer or 3pcc, the security considerations in the Multiparty Framework document [FRAMEWORK] apply. Many of the services shown in this document rely on a particular user agent being part of a group. Members of a group could be, for example, employees within a particular department, a set of home phone extensions, members of a call center, etc. As such, user agents that are part of the group permit other group members special privileges and features. For example, while a user agent may not in general allow another user agent to learn detailed dialog information, this information might be shared with another group member in order to facilitate a service such as call pickup. Group members must be authenticated using normal SIP means such as certificates or shared secrets. The service examples in this document make extensive use of the SIP call control primitives REFER, Replaces, Join, and the dialog package. The security considerations associated with each of these extensions [RFC3515], [RFC3891], [RFC3911], [RFC4235] apply to the scenarios in this document.4. Acknowledgements
The authors would like to thank the following reviewers of the document for their detailed comments and corrections: Vijay Gurbani, John Elwell, Joel Repiquet, Nagesh Kumar, Chandra Ravipati, Eric Burger, Jeroen Bemmel, Miguel Garcia, and Dale Worley. The Transfer - Instant Messaging call flow is based on the "IM-a- call" call flow by Jonathan Rosenberg and Henning Schulzrinne. The Automatic Redial call flow is based on a call flow by Adam Roach. The authors wish to thank the following individuals for their assistance and review of this call flows document: Joel Repiquet, Aki Neimi, Rohan Mahy, Jonathan Rosenberg, Hemant Agrawal, Henry Sinnreich, Dean Willis, David Devanatham, Joe Pizzimenti, Matt Cannon, John Hearty, the whole MCI WorldCom IPOP Design team, Scott
Orton, Greg Osterhout, Pat Sollee, Doug Weisenberg, Danny Mistry, Steve McKinnon, and Denise Ingram, Denise Caballero, Tom Redman, Ilya Slain, Pat Sollee, John Truetken, and others from MCI WorldCom, 3Com, Cisco, Lucent, and Nortel.5. References
5.1. Normative References
[RFC3261] Rosenberg, J., Schulzrinne, H., Camarillo, G., Johnston, A., Peterson, J., Sparks, R., Handley, M., and E. Schooler, "SIP: Session Initiation Protocol", RFC 3261, June 2002. [RFC3264] Rosenberg, J. and H. Schulzrinne, "An Offer/Answer Model with Session Description Protocol (SDP)", RFC 3264, June 2002. [RFC3265] Roach, A., "Session Initiation Protocol (SIP)-Specific Event Notification", RFC 3265, June 2002. [RFC3428] Campbell, B., Rosenberg, J., Schulzrinne, H., Huitema, C., and D. Gurle, "Session Initiation Protocol (SIP) Extension for Instant Messaging", RFC 3428, December 2002. [RFC3515] Sparks, R., "The Session Initiation Protocol (SIP) Refer Method", RFC 3515, April 2003. [RFC3840] Rosenberg, J., Schulzrinne, H., and P. Kyzivat, "Indicating User Agent Capabilities in the Session Initiation Protocol (SIP)", RFC 3840, August 2004. [RFC3891] Mahy, R., Biggs, B., and R. Dean, "The Session Initiation Protocol (SIP) "Replaces" Header", RFC 3891, September 2004. [RFC3911] Mahy, R. and D. Petrie, "The Session Initiation Protocol (SIP) "Join" Header", RFC 3911, October 2004. [RFC4235] Rosenberg, J., Schulzrinne, H., and R. Mahy, "An INVITE- Initiated Dialog Event Package for the Session Initiation Protocol (SIP)", RFC 4235, November 2005. [RFC4488] Levin, O., "Suppression of Session Initiation Protocol (SIP) REFER Method Implicit Subscription", RFC 4488, May 2006.
[RFC4579] Johnston, A. and O. Levin, "Session Initiation Protocol (SIP) Call Control - Conferencing for User Agents", BCP 119, RFC 4579, August 2006.5.2. Informative References
[FRAMEWORK] Mahy, R., Sparks, R., Rosenberg, J., Petrie, D., and A. Johnston, "A Call Control and Multi-party usage framework for the Session Initiation Protocol (SIP)", Work in Progress, April 2008. [GRUU] Rosenberg, J., "Obtaining and Using Globally Routable User Agent (UA) URIs (GRUU) in the Session Initiation Protocol (SIP)", Work in Progress, October 2007. [RFC3665] Johnston, A., Donovan, S., Sparks, R., Cunningham, C., and K. Summers, "Session Initiation Protocol (SIP) Basic Call Flow Examples", BCP 75, RFC 3665, December 2003. [RFC3725] 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. [RFC4317] Johnston, A. and R. Sparks, "Session Description Protocol (SDP) Offer/Answer Examples", RFC 4317, December 2005. [RFC4475] Sparks, R., Hawrylyshen, A., Johnston, A., Rosenberg, J., and H. Schulzrinne, "Session Initiation Protocol (SIP) Torture Test Messages", RFC 4475, May 2006. [TRANSFER] Sparks, R. and A. Johnston, "Session Initiation Protocol Call Control - Transfer", Work in Progress, September 2008.
Authors' Addresses
Alan Johnston (editor) Avaya St. Louis, MO 63124 EMail: alan@sipstation.com Robert J. Sparks Tekelec EMail: RjS@nostrum.com Chris Cunningham Cisco Systems EMail: chrcunni@cisco.com Steve Donovan Cisco Systems EMail: srd@cisco.com Kevin Summers Sonus Plano, TX 75093 EMail: ksummers@sonusnet.com
Full Copyright Statement Copyright (C) The IETF Trust (2008). This document is subject to the rights, licenses and restrictions contained in BCP 78, and except as set forth therein, the authors retain all their rights. This document and the information contained herein are provided on an "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY, THE IETF TRUST AND THE INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Intellectual Property The IETF takes no position regarding the validity or scope of any Intellectual Property Rights or other rights that might be claimed to pertain to the implementation or use of the technology described in this document or the extent to which any license under such rights might or might not be available; nor does it represent that it has made any independent effort to identify any such rights. Information on the procedures with respect to rights in RFC documents can be found in BCP 78 and BCP 79. Copies of IPR disclosures made to the IETF Secretariat and any assurances of licenses to be made available, or the result of an attempt made to obtain a general license or permission for the use of such proprietary rights by implementers or users of this specification can be obtained from the IETF on-line IPR repository at http://www.ietf.org/ipr. The IETF invites any interested party to bring to its attention any copyrights, patents or patent applications, or other proprietary rights that may cover technology that may be required to implement this standard. Please address the information to the IETF at ietf-ipr@ietf.org.