idnits 2.17.1 draft-ietf-sip-join-03.txt: Checking boilerplate required by RFC 5378 and the IETF Trust (see https://trustee.ietf.org/license-info): ---------------------------------------------------------------------------- ** Looks like you're using RFC 2026 boilerplate. This must be updated to follow RFC 3978/3979, as updated by RFC 4748. Checking nits according to https://www.ietf.org/id-info/1id-guidelines.txt: ---------------------------------------------------------------------------- == No 'Intended status' indicated for this document; assuming Proposed Standard Checking nits according to https://www.ietf.org/id-info/checklist : ---------------------------------------------------------------------------- No issues found here. Miscellaneous warnings: ---------------------------------------------------------------------------- == The copyright year in the RFC 3978 Section 5.4 Copyright Line does not match the current year == Line 347 has weird spacing: '...r field whe...' -- The document seems to lack a disclaimer for pre-RFC5378 work, but may have content which was first submitted before 10 November 2008. If you have contacted all the original authors and they are all willing to grant the BCP78 rights to the IETF Trust, then this is fine, and you can ignore this comment. If not, you may need to add the pre-RFC5378 disclaimer. (See the Legal Provisions document at https://trustee.ietf.org/license-info for more information.) -- The document date (Feb 2004) is 7348 days in the past. Is this intentional? Checking references for intended status: Proposed Standard ---------------------------------------------------------------------------- (See RFCs 3967 and 4897 for information about using normative references to lower-maturity documents in RFCs) ** Obsolete normative reference: RFC 2234 (ref. '3') (Obsoleted by RFC 4234) ** Obsolete normative reference: RFC 2617 (ref. '4') (Obsoleted by RFC 7235, RFC 7615, RFC 7616, RFC 7617) ** Obsolete normative reference: RFC 2633 (ref. '5') (Obsoleted by RFC 3851) == Outdated reference: A later version (-03) exists of draft-ietf-sip-callee-caps-00 == Outdated reference: A later version (-05) exists of draft-ietf-sip-replaces-03 == Outdated reference: A later version (-05) exists of draft-ietf-sip-referredby-01 == Outdated reference: A later version (-03) exists of draft-ietf-sip-authid-body-01 -- Obsolete informational reference (is this intentional?): RFC 2543 (ref. '11') (Obsoleted by RFC 3261, RFC 3262, RFC 3263, RFC 3264, RFC 3265) == Outdated reference: A later version (-12) exists of draft-ietf-sipping-cc-framework-02 == Outdated reference: A later version (-06) exists of draft-ietf-sipping-dialog-package-01 == Outdated reference: A later version (-05) exists of draft-ietf-sipping-conferencing-framework-00 == Outdated reference: A later version (-07) exists of draft-ietf-sipping-cc-conferencing-00 == Outdated reference: A later version (-06) exists of draft-ietf-sipping-3pcc-03 == Outdated reference: A later version (-15) exists of draft-ietf-sipping-service-examples-04 -- Obsolete informational reference (is this intentional?): RFC 3265 (ref. '20') (Obsoleted by RFC 6665) -- Obsolete informational reference (is this intentional?): RFC 2976 (ref. '21') (Obsoleted by RFC 6086) == Outdated reference: A later version (-01) exists of draft-ietf-simple-publish-00 Summary: 4 errors (**), 0 flaws (~~), 14 warnings (==), 5 comments (--). Run idnits with the --verbose option for more detailed information about the items above. -------------------------------------------------------------------------------- 2 SIP WG R. Mahy 3 Internet-Draft Cisco Systems, Inc. 4 Expires: August 1, 2004 D. Petrie 5 Pingtel 6 Feb 2004 8 The Session Inititation Protocol (SIP) "Join" Header 9 draft-ietf-sip-join-03.txt 11 Status of this Memo 13 This document is an Internet-Draft and is in full conformance with 14 all provisions of Section 10 of RFC2026. 16 Internet-Drafts are working documents of the Internet Engineering 17 Task Force (IETF), its areas, and its working groups. Note that other 18 groups may also distribute working documents as Internet-Drafts. 20 Internet-Drafts are draft documents valid for a maximum of six months 21 and may be updated, replaced, or obsoleted by other documents at any 22 time. It is inappropriate to use Internet-Drafts as reference 23 material or to cite them other than as "work in progress." 25 The list of current Internet-Drafts can be accessed at http:// 26 www.ietf.org/ietf/1id-abstracts.txt. 28 The list of Internet-Draft Shadow Directories can be accessed at 29 http://www.ietf.org/shadow.html. 31 This Internet-Draft will expire on August 1, 2004. 33 Copyright Notice 35 Copyright (C) The Internet Society (2004). All Rights Reserved. 37 Abstract 39 This document defines a new header for use with SIP multi-party 40 applications and call control. The Join header is used to logically 41 join an existing SIP dialog with a new SIP dialog. This primitive 42 can be used to enable a variety of features, for example: "Barge-In", 43 answering-machine-style "Message Screening" and "Call Center 44 Monitoring". Note that definition of these example features is 45 non-normative. 47 Table of Contents 49 1. Conventions . . . . . . . . . . . . . . . . . . . . . . . . 3 50 2. Overview . . . . . . . . . . . . . . . . . . . . . . . . . . 3 51 3. Applicability of RFC2804 ("Raven") . . . . . . . . . . . . . 4 52 4. User Agent Server Behavior: Receiving a Join Header . . . . 5 53 5. User Agent Client Behavior: Sending a Join header . . . . . 7 54 6. Proxy behavior . . . . . . . . . . . . . . . . . . . . . . . 7 55 7. Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 56 7.1 The Join Header . . . . . . . . . . . . . . . . . . . . . . 8 57 7.2 New option tag for Require and Supported headers . . . . . . 9 58 8. Usage Examples . . . . . . . . . . . . . . . . . . . . . . . 9 59 8.1 Join accepted and transitioned to central conference . . . . 9 60 8.2 Join rejected . . . . . . . . . . . . . . . . . . . . . . . 13 61 9. Security Considerations . . . . . . . . . . . . . . . . . . 14 62 10. IANA Considerations . . . . . . . . . . . . . . . . . . . . 14 63 10.1 Registration of "Join" SIP header . . . . . . . . . . . . . 14 64 10.2 Registration of "join" SIP Option-tag . . . . . . . . . . . 15 65 11. Changes . . . . . . . . . . . . . . . . . . . . . . . . . . 15 66 11.1 Changes Since draft-ietf-sip-join-02 . . . . . . . . . . . . 15 67 11.2 Changes Since draft-ietf-sip-join-01 . . . . . . . . . . . . 15 68 11.3 Changes Since draft-ietf-sip-join-00 . . . . . . . . . . . . 15 69 11.4 Changes Since draft-mahy-join-and-fork-01 . . . . . . . . . 15 70 11.5 Changes Since -00 . . . . . . . . . . . . . . . . . . . . . 16 71 12. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . 16 72 Normative References . . . . . . . . . . . . . . . . . . . . 16 73 Informational References . . . . . . . . . . . . . . . . . . 16 74 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . 18 75 Intellectual Property and Copyright Statements . . . . . . . 19 77 1. Conventions 79 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 80 "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this 81 document are to be interpreted as described in RFC-2119 [2]. 83 This document refers frequently to the terms "confirmed dialog" and 84 "early dialog". These are defined in Section 12 of SIP [1]. 86 2. Overview 88 This document describes a SIP [1] extension header field as part of 89 the SIP multiparty applications architecture framework [12]. The Join 90 header is used to logically join an existing SIP dialog with a new 91 SIP dialog. This is especially useful in peer-to-peer call control 92 environments. 94 One use of the "Join" header is to insert a new participant into a 95 multimedia conversation (which may be a two-party call or a SIP 96 conference [15]). While this functionality is already available 97 using 3rd party call control [17] style call control, the 3pcc model 98 requires a central point of control which may not be desirable in 99 many environments. As such, a method of performing these same call 100 control primitives in a distributed, peer-to-peer fashion is very 101 desirable. 103 Use of an explicit Join header is needed in some cases instead of 104 addressing an INVITE to a conference URI for the following reasons: 106 o A conference may not yet exist--the new invitation may be trying 107 to join an ordinary two-party call. 109 o The party joining may not know if the dialog it wants to join is 110 part of a conference. 112 o The party joining may not know the conference URI. 114 The Join header enables services such as barge-in, real-time message 115 screening, and call center monitoring in a distributed peer-to-peer 116 way. This list of services is not exhaustive. 118 For example, the Boss has an established 2-party conversation with a 119 Customer, and using some out-of-band mechanism (ex:voice, gestures, 120 or email) asks an Assistant to join the conversation. The Assistant 121 sends an INVITE with a Join header to the Boss with the dialog 122 information for the established dialog. The Assistant obtained this 123 information from some other mechanism, for example a web-page, an 124 instant message, or from the SIP session dialog package [13]. 126 Assitant Boss Customer 127 | callid: 4@A | callid: 7@c | 128 | | | 129 | |<============>| 130 | | | 131 |INVITE------>| | 132 |Join: 7@c | | 133 | |reINVITE----->| 134 |<----200-----|<----200------| 135 |-----ACK---->|<----ACK------| 136 | | | 137 | .. begins mixing .. | 138 | | | 139 |<===========>|<============>| 140 |<::::::::::::::::::::::::::>| 142 Note that this operation effectively creates a new conference. The 143 Boss needs to cause a new conference to start (and consequently 144 create or obtain a new conference URI). In our example, the Boss 145 mixes all media locally, so it needs to generate a new conference 146 URI, return the conference URI as the Contact to the Join INVITE 147 (with the "isFocus" Contact header field parameter as defined in [6], 148 and reINVITE or UPDATE [22] the Customer with the conference URI as 149 the new Contact. This scenario is also discussed in more detail in 150 [16] 152 3. Applicability of RFC2804 ("Raven") 154 This primitive can be used to create services which are used for 155 monitoring purposes, however these services do not meet the 156 definition of a wiretap according to RFC2804 [14]. The definition 157 from RFC2804 is included here: 159 Wiretapping is what occurs when information passed across the 160 Internet from one party to one or more other parties is delivered 161 to a third party: 163 1. Without the sending party knowing about the third party 165 2. Without any of the recipient parties knowing about the delivery 166 to the third party 168 3. When the normal expectation of the sender is that the 169 transmitted information will only be seen by the recipient 170 parties or parties obliged to keep the information in 171 confidence 173 4. When the third party acts deliberately to target the 174 transmission of the first party, either because he is of 175 interest, or because the second party's reception is of 176 interest. 178 Specifically, item 2 of this definition does not apply to this 179 extension, as one party is always aware of a Join request and can 180 even decline such requests. In addition, in many applications of 181 this primitive, some or all of the other items may not apply. For 182 example, in many call centers which handle financial transactions, 183 all conversations are recorded with the full knowledge and 184 expectation of all parties involved. 186 4. User Agent Server Behavior: Receiving a Join Header 188 The Join header contains information used to match an existing SIP 189 dialog (call-id, to-tag, and from-tag). Upon receiving an INVITE 190 with a Join header, the UA attempts to match this information with a 191 confirmed or early dialog. The to-tag and from-tag parameters are 192 matched as if they were tags present in an incoming request. In 193 other words the to-tag parameter is compared to the local tag, and 194 the from-tag parameter is compared to the remote tag. 196 If more than one Join header field is present in an INVITE, or if a 197 Join header field is present in a request other than INVITE, the UAS 198 MUST reject the request with a 400 Bad Request response. 200 The Join header has specific call control semantics. If both a Join 201 header field and another header field with contradictory semantics 202 (for example a Replaces [8] header field) are present in a request, 203 the request MUST be rejected with a 400 "Bad Request" response. 205 If the Join header field matches more than one dialog, the UA MUST 206 act as if no match is found. 208 If no match is found, but the Request-URI in the INVITE corresponds 209 to a conference URI, the UAS MUST ignore the Join header and continue 210 processing the INVITE as if the Join header did not exist. This 211 allows User Agents which receive an INVITE with Join to redirect the 212 request directly to a conference URI. 214 Otherwise if no match is found, the UAS rejects the INVITE and 215 returns a 481 Call/Transaction Does Not Exist response. Likewise, if 216 the Join header field matches a dialog which was not created with an 217 INVITE, the UAS MUST reject the request with a 481 response. 219 If the Join header field matches a dialog which has already 220 terminated, the UA SHOULD decline the request with a 603 Declined 221 response. 223 If the Join header field matches an active dialog (n.b. unlike the 224 Replaces header, the Join header has no limitation on its use with 225 early dialogs), the UA MUST verify that the initiator of the new 226 INVITE is authorized to join the matched dialog. If the initiator of 227 the new INVITE has authenticated successfully as equivalent to the 228 user who is being joined, then the join is authorized. For example, 229 if the user being joined and the initator of the joining dialog share 230 the same credentials for Digest authentication [4], or they sign the 231 join request with S/MIME [5] with the same private key and present 232 the (same) corresponding certificate used in the original dialog, 233 then the join is authorized. 235 Alternatively, the Referred-By mechanism [9] defines a mechanism that 236 the UAS can use to verify that a join request was sent on behalf of 237 the other participant in the matched dialog (in this case, triggered 238 by a REFER request). If the join request contains a Referred-By 239 header which corresponds to the user being joined, the UA SHOULD 240 treat the join as if it was authorized by the joined party. The 241 Referred-By header MUST reference a corresponding, valid 242 Refererred-By Authenticated Identity Body [10]. The UA MAY apply 243 other local policy to authorize the remainder of the request. In 244 other words the UAS may apply different policy to the joined dialog 245 than was applied to the target dialog. 247 The UA MAY also maintain a list of authorized entities who are 248 allowed to join any dialog with certain characteristics (for example, 249 all dialogs placed in the call center context of the UA). In 250 addition, the UA MAY use other authorization mechanisms defined for 251 this purpose in standards track extensions. For example, an 252 extension could define a mechanism for transitively asserting 253 authorization of a join. 255 If authorization is successful, the UA attempts to accept the new 256 INVITE, and assign any mixing or conferencing resources necessary to 257 complete the join. If the UA cannot accept the new INVITE (for 258 example: it cannot establish required QoS or keying, or it has 259 incompatible media), the UA MUST return an appropriate error response 260 and MUST leave the matched dialog unchanged. 262 A User Agent that accepts a Join header needs to setup dialogs or 263 conferences such that the requesting UAC is logically added to the 264 conversation space associated with the matched dialog. Any dialogs 265 which are already logically associated with the matched dialog in the 266 same conversation space are included as well. For a detailed 267 description of various conferencing mechanisms that could be used to 268 handle a Join, please consult the SIP conferencing framework [15]. 270 If the UAS has sufficient resources to locally handle the Join 271 request, the UAS SHOULD accept the Join request and perform the 272 appropriate media mixing or combining. The UAS MAY rearrange 273 appropriate dialogs instead as described below, based on some local 274 policy. 276 If the UAS does not have sufficient resources locally to handle the 277 request, or does not wish to use these local resources, but is aware 278 of other resources which could be used to satisfy the request (ex: a 279 centralized conference server), the UA SHOULD create a conference 280 using this resource (ex: INVITE the conference server to obtain a 281 conference URI), redirect the requestor to this resource, and request 282 other participants in the same conversation space to use this 283 resource. The UA MAY use any appropriate mechanism to transition 284 participants to the new resource (ex: 3xx repsonse, 3rd-party call 285 control reinvitiations, REFER requests, or reinvitations to a 286 multicast group). The UA SHOULD only use mechanisms which are 287 expected to be acceptable to the other participants. For example, 288 the UA SHOULD NOT attempt to transition the participants to a 289 multicast group unless the UA can reasonably expect that all the 290 particpants can support multicast. 292 If the UAS is incapable of satisfying the Join request, it MUST 293 return a 488 "Not Acceptable Here" response. 295 5. User Agent Client Behavior: Sending a Join header 297 A User Agent that wishes to add a new dialog of its own to a single 298 existing early or confirmed dialog and any associated dialogs or 299 conferences, MAY send the target User Agent an INVITE request 300 containing a Join header field. The UAC places the Call-ID, to-tag, 301 and from-tag information for the target dialog in a single Join 302 header field and sends the new INVITE to the target. 304 If the User Agent receives a 300-class response, and acts on this 305 response by sending an INVITE to a Contact in the response, this 306 redirected INVITE MUST contain the same Join header which was present 307 in the original request. Although this is unusual, this allows 308 INVITE requests with a Join header to be redirected before reaching 309 the target UAS. 311 Note that use of the Join mechanism does not provide a way to match 312 multiple dialogs, nor does it provide a way to match an entire call, 313 an entire transaction, or to follow a chain of proxy forking logic. 315 6. Proxy behavior 317 Proxy Servers do not require any new behavior to support this 318 extension. They simply pass the Join header field transparently as 319 described in the SIP specification. 321 Note that it is possible for a proxy (especially when forking based 322 on some application layer logic, such as caller screening or 323 time-of-day routing) to forward an INVITE request containing a Join 324 header field to a completely orthogonal set of Contacts than the 325 original request it was intended to replace. In this case, the 326 INVITE request with the Join header field will fail. 328 7. Syntax 330 7.1 The Join Header 332 The Join header field indicates that a new dialog (created by the 333 INVITE in which the Join header field in contained) should be joined 334 with a dialog identified by the header field, and any associated 335 dialogs or conferences. It is a request header only, and defined 336 only for INVITE requests. The Join header field MAY be encrypted as 337 part of end-to-end encryption. Only a single Join header field value 338 may be present in a SIP request 340 This document adds the following entry to Table 3 of [1]. Additions 341 to this table are also provided for extension methods defined at the 342 time of publication of this document. This is provided as a courtesy 343 to the reader and is not normative in any way. MESSAGE, SUBSCRIBE and 344 NOTIFY, REFER, INFO, UPDATE, PRACK, and PUBLISH are defined 345 respectively in [19], [20], [7], [21], [22], and [23], and [24]. 347 Header field where proxy ACK BYE CAN INV OPT REG MSG 348 ------------ ----- ----- --- --- --- --- --- --- --- 349 Join R - - - o - - - 351 SUB NOT REF INF UPD PRA PUB 352 --- --- --- --- --- --- --- 353 Join R - - - - - - - 355 The following syntax specification uses the augmented Backus-Naur 356 Form (BNF) as described in RFC-2234 [3]. 358 Join = "Join" HCOLON callid *(SEMI join-param) 359 join-param = to-tag / from-tag / generic-param 360 to-tag = "to-tag" EQUAL token 361 from-tag = "from-tag" EQUAL token 363 A Join header MUST contain exactly one to-tag and exactly one 364 from-tag, as they are required for unique dialog matching. For 365 compatibility with dialogs initiated by RFC2543 [11] compliant UAs, a 366 tag of zero matches both tags of zero and null tags. 368 Examples: 370 Join: 98732@sip.example.com 371 ;from-tag=r33th4x0r 372 ;to-tag=ff87ff 374 Join: 12adf2f34456gs5;to-tag=12345;from-tag=54321 376 Join: 87134@192.0.2.23;to-tag=24796;from-tag=0 378 7.2 New option tag for Require and Supported headers 380 This specification defines a new Require/Supported header option tag 381 "join". UAs which support the Join header MUST include the "join" 382 option tag in a Supported header field. UAs that want explicit 383 failure notification if Join is not supported MAY include the "join" 384 option in a Require header field. 386 Example: 388 Require: join, 100rel 390 8. Usage Examples 392 The following non-normative examples are not intended to enumerate 393 all the possibilities for the usage of this extension, but rather to 394 provide examples or ideas only. For more examples, please see 395 service-examples [18]. 397 8.1 Join accepted and transitioned to central conference 399 A B C conf 400 | | callid: 7@c | | 401 | | | | 402 | |<-INVITE------| | *1 403 | |-----200----->| | *2 404 | |<----ACK------| | *3 405 | |<============>| | 406 | | | | 407 |INVITE------>| | | *4 408 |Join: 7@c |--INVITE-------------------->| *5 409 | |<----200---------------------| *6 410 | |-----ACK-------------------->| 411 |<----302-----| | | *7 412 |-----ACK---->| | | 413 |INVITE------------------------------------>| *8 414 |<--200-------------------------------------| *9 415 |---ACK------------------------------------>| 416 | |--REFER------>| | *10 417 | |<---202-------| | 418 | |<--NOTIFY-----|--INVITE-*11->| 419 | |------200---->|<----200-*12--| 420 | |<--NOTIFY-----|-----ACK----->| 421 | |------200---->| | 422 | |---BYE------->| | 423 | |<--200--------| | 424 | | | | 425 |<=========================================>| mixes the 426 | |<===========================>| three sessions 427 | | |<============>| together 429 The conversation now appears identical to the locally mixed one from 430 the example in the Introduction. Details of how the Join are 431 implemented are transparent to A. B could have used 3rd party call 432 control instead to move the necessary sessions. 434 Message *1: C -> B 436 INVITE sip:bob@example.org SIP/2.0 437 To: 438 From: ;tag=xyz 439 Call-Id: 7@c.example.org 440 CSeq 1 INVITE 441 Contact: 443 Message *2: B -> C 445 SIP/2.0 200 OK 446 To: ;tag=pdq 447 From: ;tag=xyz 448 Call-Id: 7@c.example.org 449 CSeq 1 INVITE 450 Contact: 452 Message *3: C -> B 454 ACK sip:carol@c.example.org SIP/2.0 455 To: ;tag=pdq 456 From: ;tag=xyz 457 Call-Id: 7@c.example.org 458 CSeq 1 INVITE 460 Message *4: A -> B 462 INVITE sip:bob@b.example.org SIP/2.0 463 To: 464 From: ;tag=iii 465 Call-Id: 777@a.example.org 466 CSeq: 1 INVITE 467 Contact: 468 Join: 7@c.example.org;to-tag=xyz;from-tag=pdq 470 Message *5: B -> conf 472 INVITE sip:conf-factory@example.org SIP/2.0 473 To: 474 From: ;tag=abc 475 Call-Id: 999@b.example.org 476 CSeq: 1INVITE 477 Contact: 479 Message *6: conf -> B 481 SIP/2.0 200 OK 482 To: ;tag=def 483 From: ;tag=abc 484 Call-Id: 999@b.example.org 485 CSeq: 1INVITE 486 Contact: ;isFocus 488 Message *7: B -> A 490 SIP/2.0 302 Moved Temporarily 491 To: 492 From: ;tag=iii 493 Call-Id: 777@a.example.org 494 CSeq: 1 INVITE 495 Contact: ;isFocus 497 Message *8: A -> conf 498 INVITE sip:conf456@conf-srv2.example.org SIP/2.0 499 To: 500 From: ;tag=iii 501 Call-Id: 777@a.example.org 502 CSeq: 2 INVITE 503 Contact: 504 Join: 7@c.example.org;to-tag=xyz;from-tag=pdq 506 Message *9: conf ->A 508 SIP/2.0 200 OK 509 To: ;tag=jjj 510 From: ;tag=iii 511 Call-Id: 777@a.example.org 512 CSeq: 2 INVITE 513 Contact: ;isFocus 515 Message *10: B -> C 517 REFER sip:carol@c.example.org SIP/2.0 518 To: ;tag=xyz 519 From: ;tag=pdq 520 Call-Id: 7@c.example.org 521 CSeq: 1 REFER 522 Contact: 523 Refer-To: 524 Referred-By: 526 Message *11: C -> conf 528 INVITE sip:conf456@conf-srv2.example.org SIP/2.0 529 To: 530 From: ;tag=mmm 531 Call-Id: 34343@c.example.com 532 CSeq: 1 INVITE 533 Contact: 534 Referred-By: 536 Message *12: C -> conf 538 SIP/2.0 200 OK 539 To: 540 From: ;tag=mmm 541 Call-Id: 34343@c.example.com 542 CSeq: 1 INVITE 543 Contact: ;isFocus 544 Referred-By: 546 8.2 Join rejected 548 A B C 549 | | callid: 7@c | 550 | | | 551 | |<============>| 552 | | | 553 |INVITE------>| *1 | 554 |Join: 7@c | | 555 | | | 556 |<----486-----| *2 | 557 |-----ACK---->| | 558 | | | 560 In this example B is Busy (does not want to be disturbed), and 561 therefore does not wish to add A. B could also decline the request 562 with a 603 response. 564 Message *1: A -> B 566 INVITE sip:bob@b.example.org SIP/2.0 567 To: 568 From: ;tag=iii 569 Call-Id: 777@a.example.org 570 CSeq: 1 INVITE 571 Contact: 572 Join: 7@c.example.org;to-tag=xyz;from-tag=pdq 574 Message *2: B -> A 576 SIP/2.0 486 Busy 577 To: 578 From: ;tag=iii 579 Call-Id: 777@a.example.org 580 CSeq: 1 INVITE 582 9. Security Considerations 584 The extension specified in this document significantly changes the 585 relative security of SIP devices. Currently in SIP, even if an 586 eavesdropper learns the Call-ID, To, and From headers of a dialog, 587 they cannot easily modify or destroy that dialog if Digest 588 authentication or end-to-end message integrity are used. 590 This extension can be used to insert or monitor potentially sensitive 591 content in a multimedia conversation. As such, invitations with the 592 Join header MUST only be accepted if the peer requesting replacement 593 has been properly authenticated using a standard SIP mechanism 594 (Digest or S/MIME), and authorized to be joined with the target 595 dialog. (All SIP implementations are already required to support 596 Digest Authentication.) Generally authorization for joins are 597 configured as a matter of local policy as long-duration persistent 598 relationships. 600 For example, the UAs used by call center agents might be configured 601 with a list of identities who could join their calls (supervisors and 602 any call center monitoring User Agents). Alternatively the call 603 center agents might rely on transitive authorization assertions from 604 a (shorter) list of authorized hosts (ex: a certificate authority). 605 For answering-machine-style message screening this is even easier. 606 Presumably the user screening their messages already has some 607 credentials with their messaging server. 609 Some mechanisms for obtaining the dialog information needed by the 610 Join header (Call-ID, to-tag, and from-tag) include URIs on a web 611 page, subscriptions to an appropriate event package, and notifcations 612 after a REFER request. Use of end-to-end security mechanisms to 613 integrity protect and encrypt this information is also RECOMMENDED. 615 This extension was designed to take advantage of future signature or 616 authorization schemes defined by standards track extensions. In 617 general, call control features would benefit considerably from such 618 work. 620 10. IANA Considerations 622 10.1 Registration of "Join" SIP header 624 Name of Header: Join 626 Short form: none 628 Normative description: section 7.1 of this document 630 10.2 Registration of "join" SIP Option-tag 632 Name of option: join 634 Description: Support for the SIP Join header 636 SIP headers defined: Join 638 Normative description: This document 640 11. Changes 642 11.1 Changes Since draft-ietf-sip-join-02 644 Fixed an inconsistency in security strength (said MUST in security 645 considerations and SHOULD in the normative behavior section). 647 11.2 Changes Since draft-ietf-sip-join-01 649 Made authorization section more explicit. 651 Removed 488 handling open issue. This turns out not to be an 652 issue since page-mode messages have no conferencing semantics. 654 Updated references. Added reference to PUBLISH. 656 11.3 Changes Since draft-ietf-sip-join-00 658 o Added more detail about how join authorization could work 660 o Added open issue about 488 handling at the end of section 4 662 11.4 Changes Since draft-mahy-join-and-fork-01 664 o Added discussion about handling of 300-class responses to an 665 INVITE with Join 667 o Fixed several typos 669 o Updated references 671 o Resubmitted as a Working Group item 673 11.5 Changes Since -00 675 o Realigned the text to mirror the outline of Replaces 677 o Removed the fork header 679 o Added a section to explain how this is not a "Raven" wiretap 680 mechanism 682 o Reorganized motivational overview material 684 o Added authorization language in UAS behavior section 686 o Updated and Added references 688 12. Acknowledgments 690 Thanks to Robert Sparks, Alan Johnston, and Ben Campbell and many 691 other members of the SIP WG for their continued support of the cause 692 of distributed call control in SIP. 694 Normative References 696 [1] Rosenberg, J., Schulzrinne, H., Camarillo, G., Johnston, A., 697 Peterson, J., Sparks, R., Handley, M. and E. Schooler, "SIP: 698 Session Initiation Protocol", RFC 3261, June 2002. 700 [2] Bradner, S., "Key words for use in RFCs to Indicate Requirement 701 Levels", BCP 14, RFC 2119, March 1997. 703 [3] Crocker, D. and P. Overell, "Augmented BNF for Syntax 704 Specifications: ABNF", RFC 2234, November 1997. 706 [4] Franks, J., Hallam-Baker, P., Hostetler, J., Lawrence, S., 707 Leach, P., Luotonen, A. and L. Stewart, "HTTP Authentication: 708 Basic and Digest Access Authentication", RFC 2617, June 1999. 710 [5] Ramsdell, B., "S/MIME Version 3 Message Specification", RFC 711 2633, June 1999. 713 [6] Rosenberg, J., "Indicating User Agent Capabilities in the 714 Session Initiation Protocol (SIP)", 715 draft-ietf-sip-callee-caps-00 (work in progress), June 2003. 717 Informational References 719 [7] Sparks, R., "The Session Initiation Protocol (SIP) Refer 720 Method", RFC 3515, April 2003. 722 [8] Dean, R., Biggs, B. and R. Mahy, "The Session Inititation 723 Protocol (SIP) 'Replaces' Header", draft-ietf-sip-replaces-03 724 (work in progress), March 2003. 726 [9] Sparks, R., "The SIP Referred-By Mechanism", 727 draft-ietf-sip-referredby-01 (work in progress), February 2003. 729 [10] Peterson, J., "SIP Authenticated Identity Body (AIB) Format", 730 draft-ietf-sip-authid-body-01 (work in progress), March 2003. 732 [11] Handley, M., Schulzrinne, H., Schooler, E. and J. Rosenberg, 733 "SIP: Session Initiation Protocol", RFC 2543, March 1999. 735 [12] Mahy, R., "A Call Control and Multi-party usage framework for 736 the Session Initiation Protocol (SIP)", 737 draft-ietf-sipping-cc-framework-02 (work in progress), March 738 2003. 740 [13] Rosenberg, J. and H. Schulzrinne, "An INVITE Inititiated Dialog 741 Event Package for the Session Initiation Protocol (SIP", 742 draft-ietf-sipping-dialog-package-01 (work in progress), March 743 2003. 745 [14] IAB and IESG, "IETF Policy on Wiretapping", RFC 2804, May 2000. 747 [15] Rosenberg, J., "A Framework for Conferencing with the Session 748 Initiation Protocol", 749 draft-ietf-sipping-conferencing-framework-00 (work in 750 progress), May 2003. 752 [16] Johnston, A. and O. Levin, "Session Initiation Protocol Call 753 Control - Conferencing for User Agents", 754 draft-ietf-sipping-cc-conferencing-00 (work in progress), April 755 2003. 757 [17] Rosenberg, J., Schulzrinne, H., Camarillo, G. and J. Peterson, 758 "Best Current Practices for Third Party Call Control in the 759 Session Initiation Protocol", draft-ietf-sipping-3pcc-03 (work 760 in progress), March 2003. 762 [18] Johnston, A. and S. Donovan, "Session Initiation Protocol 763 Service Examples", draft-ietf-sipping-service-examples-04 (work 764 in progress), March 2003. 766 [19] Campbell, B., Rosenberg, J., Schulzrinne, H., Huitema, C. and 767 D. Gurle, "Session Initiation Protocol (SIP) Extension for 768 Instant Messaging", RFC 3428, December 2002. 770 [20] Roach, A., "Session Initiation Protocol (SIP)-Specific Event 771 Notification", RFC 3265, June 2002. 773 [21] Donovan, S., "The SIP INFO Method", RFC 2976, October 2000. 775 [22] Rosenberg, J., "The Session Initiation Protocol (SIP) UPDATE 776 Method", RFC 3311, October 2002. 778 [23] jdrosen@dynamicsoft.com and schulzrinne@cs.columbia.edu, 779 "Reliability of Provisional Responses in Session Initiation 780 Protocol (SIP)", RFC 3262, June 2002. 782 [24] Campbell, B., "SIMPLE Presence Publication Mechanism", 783 draft-ietf-simple-publish-00 (work in progress), February 2003. 785 Authors' Addresses 787 Rohan Mahy 788 Cisco Systems, Inc. 789 5617 Scotts Valley Dr 790 Scotts Valley Dr, CA 95066 791 USA 793 EMail: rohan@cisco.com 795 Dan Petrie 796 Pingtel 797 400 West Cummings Park, Suite 2200 798 Woburn, MA 01801 799 USA 801 EMail: dpetrie@pingtel.com 803 Intellectual Property Statement 805 The IETF takes no position regarding the validity or scope of any 806 intellectual property or other rights that might be claimed to 807 pertain to the implementation or use of the technology described in 808 this document or the extent to which any license under such rights 809 might or might not be available; neither does it represent that it 810 has made any effort to identify any such rights. Information on the 811 IETF's procedures with respect to rights in standards-track and 812 standards-related documentation can be found in BCP-11. Copies of 813 claims of rights made available for publication and any assurances of 814 licenses to be made available, or the result of an attempt made to 815 obtain a general license or permission for the use of such 816 proprietary rights by implementors or users of this specification can 817 be obtained from the IETF Secretariat. 819 The IETF invites any interested party to bring to its attention any 820 copyrights, patents or patent applications, or other proprietary 821 rights which may cover technology that may be required to practice 822 this standard. Please address the information to the IETF Executive 823 Director. 825 Full Copyright Statement 827 Copyright (C) The Internet Society (2004). All Rights Reserved. 829 This document and translations of it may be copied and furnished to 830 others, and derivative works that comment on or otherwise explain it 831 or assist in its implementation may be prepared, copied, published 832 and distributed, in whole or in part, without restriction of any 833 kind, provided that the above copyright notice and this paragraph are 834 included on all such copies and derivative works. However, this 835 document itself may not be modified in any way, such as by removing 836 the copyright notice or references to the Internet Society or other 837 Internet organizations, except as needed for the purpose of 838 developing Internet standards in which case the procedures for 839 copyrights defined in the Internet Standards process must be 840 followed, or as required to translate it into languages other than 841 English. 843 The limited permissions granted above are perpetual and will not be 844 revoked by the Internet Society or its successors or assignees. 846 This document and the information contained herein is provided on an 847 "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING 848 TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING 849 BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION 850 HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF 851 MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. 853 Acknowledgement 855 Funding for the RFC Editor function is currently provided by the 856 Internet Society.