| < draft-burger-sipping-netann-10.txt | draft-burger-sipping-netann-11.txt > | |||
|---|---|---|---|---|
| SIPPING E. Burger (Ed.) | SIPPING E. Burger (Ed.) | |||
| Internet-Draft J. Van Dyke | Internet-Draft J. Van Dyke | |||
| Expires: April 25, 2005 A. Spitzer | Expires: August 24, 2005 A. Spitzer | |||
| Brooktrout Technology, Inc. | Brooktrout Technology, Inc. | |||
| October 25, 2004 | February 20, 2005 | |||
| Basic Network Media Services with SIP | Basic Network Media Services with SIP | |||
| draft-burger-sipping-netann-10 | draft-burger-sipping-netann-11 | |||
| Status of this Memo | Status of this Memo | |||
| This document is an Internet-Draft and is subject to all provisions | This document is an Internet-Draft and is subject to all provisions | |||
| of section 3 of RFC 3667. By submitting this Internet-Draft, each | of Section 3 of RFC 3667. By submitting this Internet-Draft, each | |||
| author represents that any applicable patent or other IPR claims of | author represents that any applicable patent or other IPR claims of | |||
| which he or she is aware have been or will be disclosed, and any of | which he or she is aware have been or will be disclosed, and any of | |||
| which he or she become aware will be disclosed, in accordance with | which he or she become aware will be disclosed, in accordance with | |||
| RFC 3668. | RFC 3668. | |||
| Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
| Task Force (IETF), its areas, and its working groups. Note that | Task Force (IETF), its areas, and its working groups. Note that | |||
| other groups may also distribute working documents as | other groups may also distribute working documents as | |||
| Internet-Drafts. | Internet-Drafts. | |||
| skipping to change at page 1, line 36 ¶ | skipping to change at page 1, line 37 ¶ | |||
| and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
| time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
| material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
| The list of current Internet-Drafts can be accessed at | The list of current Internet-Drafts can be accessed at | |||
| http://www.ietf.org/ietf/1id-abstracts.txt. | http://www.ietf.org/ietf/1id-abstracts.txt. | |||
| The list of Internet-Draft Shadow Directories can be accessed at | The list of Internet-Draft Shadow Directories can be accessed at | |||
| http://www.ietf.org/shadow.html. | http://www.ietf.org/shadow.html. | |||
| This Internet-Draft will expire on April 25, 2005. | This Internet-Draft will expire on August 24, 2005. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (C) The Internet Society (2004). | Copyright (C) The Internet Society (2005). | |||
| Abstract | Abstract | |||
| In SIP-based networks, there is a need to provide basic network media | In SIP-based networks, there is a need to provide basic network media | |||
| services. Such services include network announcements, user | services. Such services include network announcements, user | |||
| interaction, and conferencing services. These services are basic | interaction, and conferencing services. These services are basic | |||
| building blocks, from which one can construct interesting | building blocks, from which one can construct interesting | |||
| applications. In order to have interoperability between servers | applications. In order to have interoperability between servers | |||
| offering these building blocks (also known as Media Servers) and | offering these building blocks (also known as Media Servers) and | |||
| application developers, one needs to be able to locate and invoke | application developers, one needs to be able to locate and invoke | |||
| such services in a well defined manner. | such services in a well defined manner. | |||
| This document describes a mechanism for providing an interoperable | This document describes a mechanism for providing an interoperable | |||
| protocol interface between Application Servers, which provide | interface between Application Servers, which provide application | |||
| application services to SIP-based networks, and Media Servers, which | services to SIP-based networks, and Media Servers, which provide the | |||
| provide the basic media processing building blocks. | basic media processing building blocks. | |||
| Conventions used in this document | Conventions used in this document | |||
| RFC2119 [1] provides the interpretations for the key words "MUST", | RFC2119 [2] provides the interpretations for the key words "MUST", | |||
| "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", | "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", | |||
| "RECOMMENDED", "MAY", and "OPTIONAL" found in this document. | "RECOMMENDED", "MAY", and "OPTIONAL" found in this document. | |||
| Table of Contents | Table of Contents | |||
| 1. Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Overview . . . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 2. Mechanism . . . . . . . . . . . . . . . . . . . . . . . . . . 3 | 2. Mechanism . . . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
| 3. Announcement Service . . . . . . . . . . . . . . . . . . . . . 5 | 3. Announcement Service . . . . . . . . . . . . . . . . . . . . 6 | |||
| 3.1 Operation . . . . . . . . . . . . . . . . . . . . . . . . 7 | 3.1 Operation . . . . . . . . . . . . . . . . . . . . . . . . 8 | |||
| 3.2 Protocol Diagram . . . . . . . . . . . . . . . . . . . . . 8 | 3.2 Protocol Diagram . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 3.3 Formal Syntax . . . . . . . . . . . . . . . . . . . . . . 8 | 3.3 Formal Syntax . . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 4. Prompt and Collect Service . . . . . . . . . . . . . . . . . . 10 | 4. Prompt and Collect Service . . . . . . . . . . . . . . . . . 11 | |||
| 4.1 Formal Syntax for Prompt and Collect Service . . . . . . . 11 | 4.1 Formal Syntax for Prompt and Collect Service . . . . . . . 12 | |||
| 5. Conference Service . . . . . . . . . . . . . . . . . . . . . . 12 | 5. Conference Service . . . . . . . . . . . . . . . . . . . . . 13 | |||
| 5.1 Protocol Diagram . . . . . . . . . . . . . . . . . . . . . 13 | 5.1 Protocol Diagram . . . . . . . . . . . . . . . . . . . . . 14 | |||
| 5.2 Formal Syntax . . . . . . . . . . . . . . . . . . . . . . 15 | 5.2 Formal Syntax . . . . . . . . . . . . . . . . . . . . . . 16 | |||
| 6. The User Part . . . . . . . . . . . . . . . . . . . . . . . . 15 | 6. IANA Considerations . . . . . . . . . . . . . . . . . . . . 16 | |||
| 7. Security Considerations . . . . . . . . . . . . . . . . . . . 17 | 7. The User Part . . . . . . . . . . . . . . . . . . . . . . . 16 | |||
| 8. Contributors . . . . . . . . . . . . . . . . . . . . . . . . . 18 | 8. Security Considerations . . . . . . . . . . . . . . . . . . 19 | |||
| 9. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 18 | 9. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 20 | |||
| 10. References . . . . . . . . . . . . . . . . . . . . . . . . . 19 | 10. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 20 | |||
| 10.1 Normative References . . . . . . . . . . . . . . . . . . . . 19 | 11. References . . . . . . . . . . . . . . . . . . . . . . . . . 20 | |||
| 10.2 Informative References . . . . . . . . . . . . . . . . . . . 19 | 11.1 Normative References . . . . . . . . . . . . . . . . . . 20 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . 20 | 11.2 Informative References . . . . . . . . . . . . . . . . . 21 | |||
| Intellectual Property and Copyright Statements . . . . . . . . 22 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . 22 | |||
| Intellectual Property and Copyright Statements . . . . . . . 23 | ||||
| 1. Overview | 1. Overview | |||
| In SIP-based media networks (RFC3261 [2]), there is a need to provide | In SIP-based media networks (RFC3261 [6]), there is a need to provide | |||
| basic network media services. Such services include playing | basic network media services. Such services include playing | |||
| announcements, initiating a media mixing session (conference), and | announcements, initiating a media mixing session (conference), and | |||
| prompting and collecting information with a user. | prompting and collecting information with a user. | |||
| These services are basic in nature, are few in number, and | These services are basic in nature, are few in number, and | |||
| fundamentally have not changed in 25 years of enhanced telephony | fundamentally have not changed in 25 years of enhanced telephony | |||
| services. Moreover, given their elemental nature, one would not | services. Moreover, given their elemental nature, one would not | |||
| expect them to change in the future. | expect them to change in the future. | |||
| Multifunction media servers provide network media services to clients | Multifunction media servers provide network media services to clients | |||
| using server protocols such as SIP, often in conjunction with markup | using server protocols such as SIP, often in conjunction with markup | |||
| languages such as VoiceXML [10], KPML [11], and MSCML [12]. This | languages such as VoiceXML [15] and MSCML [16]. This document | |||
| document describes how to identify to a multifunction media server | describes how to identify to a multifunction media server what sort | |||
| what sort of session the client is requesting, without modifying the | of session the client is requesting, without modifying the SIP | |||
| SIP protocol. | protocol. | |||
| It is critically important to note that the mechanism described here | ||||
| in no way modifies the SIP protocol, the meaning or definition of a | ||||
| SIP Request URI, or does it put any restrictions, in any way, on | ||||
| devices that do not implement this convention. | ||||
| Announcements are media played to the user. Announcements can be | Announcements are media played to the user. Announcements can be | |||
| static media files, media files generated in real-time, media streams | static media files, media files generated in real-time, media streams | |||
| generated in real-time, multimedia objects, or combinations of the | generated in real-time, multimedia objects, or combinations of the | |||
| above. | above. | |||
| Media mixing is the act of mixing different RTP streams, as described | Media mixing is the act of mixing different RTP streams, as described | |||
| in RFC1889 [13]. Note that the service described here suffices for | in RFC1889 [9]. Note that the service described here suffices for | |||
| simple mixing of media for a basic conferencing service. This | simple mixing of media for a basic conferencing service. This | |||
| service does not address enhanced conferencing services, such as | service does not address enhanced conferencing services, such as | |||
| floor control, gain control, muting, subconferences, etc. MSCML [12] | floor control, gain control, muting, subconferences, etc. MSCML [16] | |||
| addresses enhanced conferencing. However, that is beyond the scope | addresses enhanced conferencing. However, that is beyond the scope | |||
| of this document. Interested readers should read | of this document. Interested readers should read | |||
| conferencing-framework [14] for details on the IETF SIP conferencing | conferencing-framework [17] for details on the IETF SIP conferencing | |||
| framework. | framework. | |||
| Prompt and collect is where the server prompts the user for some | Prompt and collect is where the server prompts the user for some | |||
| information, as in an announcement, and then collects the user's | information, as in an announcement, and then collects the user's | |||
| response. This can be a one-step interaction, for example by playing | response. This can be a one-step interaction, for example by playing | |||
| an announcement, "Please enter your pass code", followed by | an announcement, "Please enter your pass code", followed by | |||
| collecting a string of digits. It can also be a more complex | collecting a string of digits. It can also be a more complex | |||
| interaction, specified, for example, by VoiceXML [10] or MSCML [12]. | interaction, specified, for example, by VoiceXML [15] or MSCML [16]. | |||
| 2. Mechanism | 2. Mechanism | |||
| In the context of SIP control of media servers, we take advantage of | In the context of SIP control of media servers, we take advantage of | |||
| the fact that the standard SIP URI has a user part. Multifunction | the fact that the standard SIP URI has a user part. Multifunction | |||
| media servers do not have users. Thus we use the user address, or | media servers do not have users. Thus we use the user address, or | |||
| the left-hand-side of the URI, as a service indicator. | the left-hand-side of the URI, as a service indicator. | |||
| The use of the user part of the SIP Request URI has a number of | ||||
| useful properties: | ||||
| o There is no change to core SIP. | ||||
| o Only devices that choose to conform to this standard have to | ||||
| implement it. | ||||
| o This document only applies to multifunction SIP-controlled media | ||||
| servers. | ||||
| o This document has no impact on non-multifunction SIP-controlled | ||||
| media servers. | ||||
| o The mechanism described in this document has absolutely no impact | ||||
| on SIP devices other than media servers. | ||||
| The last bullet point is cruical. In particular, the user part | ||||
| convention described here places absolutely no restrictions on any | ||||
| SIP user agent, proxy, B2BUA, or any future device. The user parts | ||||
| defined here only apply to multifunction media servers that chose to | ||||
| implement the convention. With the exception of a conforming media | ||||
| server, these user names and conventions have no impact on the user | ||||
| part namespace. They do not restrict the use of these user names at | ||||
| devices other than a multifunction media server. | ||||
| Note that the set of services is small, well defined, and well | Note that the set of services is small, well defined, and well | |||
| contained. The section The User Part (Section 6) discusses the | contained. The section The User Part (Section 7) discusses the | |||
| issues with using a fixed set of user-space names. | issues with using a fixed set of user-space names. | |||
| For per-service security, the media server SHOULD use the security | For per-service security, the media server SHOULD use the security | |||
| protocols described in RFC3261 [2]. | protocols described in RFC3261 [6]. | |||
| The media server MAY issue 401 challenges for authentication. The | The media server MAY issue 401 challenges for authentication. The | |||
| media server SHOULD support the sips: scheme for the announcement | media server SHOULD support the sips: scheme for the announcement | |||
| service. The media server MUST support the sips: scheme for the | service. The media server MUST support the sips: scheme for the | |||
| dialog and conference services. The level of authentication to | dialog and conference services. The level of authentication to | |||
| require for each service is a matter of local policy. | require for each service is a matter of local policy. | |||
| The media server, upon receiving the INVITE, notes the service | The media server, upon receiving an INVITE, notes the service | |||
| indicator. Depending on the service indicator, the media server will | indicator. Depending on the service indicator, the media server will | |||
| either honor the request or return a failure response code. | either honor the request or return a failure response code. | |||
| The service indicator is the concatenation of the service name and an | The service indicator is the concatenation of the service name and an | |||
| optional service instance identifier, separated by an equal sign. | optional service instance identifier, separated by an equal sign. | |||
| Per RFC3261 [2], the service indicator is case insensitive. The | Per RFC3261 [6], the service indicator is case insensitive. The | |||
| service name MUST be from the set alphanumeric characters plus dash | service name MUST be from the set alphanumeric characters plus dash | |||
| (US-ASCII %2C). The service name MUST NOT include an equal sign | (US-ASCII %2C). The service name MUST NOT include an equal sign | |||
| (US-ASCII %3D). | (US-ASCII %3D). | |||
| The service name MAY have long- and short-forms, as SIP does for | The service name MAY have long- and short-forms, as SIP does for | |||
| headers. | headers. | |||
| A given service indicator MAY have an associated set of parameters. | A given service indicator MAY have an associated set of parameters. | |||
| Such parameters MUST follow the convention set out for SIP URI | Such parameters MUST follow the convention set out for SIP URI | |||
| parameters. That is, a semi-colon separated list of keyword=value | parameters. That is, a semi-colon separated list of keyword=value | |||
| skipping to change at page 5, line 12 ¶ | skipping to change at page 5, line 39 ¶ | |||
| If the media server can perform the requested service, it does so, | If the media server can perform the requested service, it does so, | |||
| following the processing steps described in the service definition | following the processing steps described in the service definition | |||
| document. | document. | |||
| If the media server cannot perform the requested service or does not | If the media server cannot perform the requested service or does not | |||
| recognize the service indicator, it MUST respond with the response | recognize the service indicator, it MUST respond with the response | |||
| code 488 NOT ACCEPTABLE HERE. This is appropriate, as 488 refers to | code 488 NOT ACCEPTABLE HERE. This is appropriate, as 488 refers to | |||
| a problem with the user part of the URI. Moreover, 606 is not | a problem with the user part of the URI. Moreover, 606 is not | |||
| appropriate, as some other media server may be able to satisfy the | appropriate, as some other media server may be able to satisfy the | |||
| request. RFC3261 [2] describes the 488 and 606 response codes. | request. RFC3261 [6] describes the 488 and 606 response codes. | |||
| Some services require a unique identifier. Most services | Some services require a unique identifier. Most services | |||
| automatically create a service instance upon the first INVITE with | automatically create a service instance upon the first INVITE with | |||
| the given identifier. However, if a service requires an existing | the given identifier. However, if a service requires an existing | |||
| service instance, and no such service instance exists on the media | service instance, and no such service instance exists on the media | |||
| server, the media server MUST respond with the response code 404 NOT | server, the media server MUST respond with the response code 404 NOT | |||
| FOUND. This is appropriate as the service itself exists on the media | FOUND. This is appropriate as the service itself exists on the media | |||
| server, but the particular service instance does not. It is as if | server, but the particular service instance does not. It is as if | |||
| the user was not home. | the user was not home. | |||
| skipping to change at page 6, line 19 ¶ | skipping to change at page 6, line 49 ¶ | |||
| explanatory text explaining what failed. | explanatory text explaining what failed. | |||
| The Request URI fully describes the announcement service through the | The Request URI fully describes the announcement service through the | |||
| use of the user part of the address and additional URI parameters. | use of the user part of the address and additional URI parameters. | |||
| The user portion of the address, "annc", specifies the announcement | The user portion of the address, "annc", specifies the announcement | |||
| service on the media server. The service has several associated URI | service on the media server. The service has several associated URI | |||
| parameters that control the content and delivery of the announcement. | parameters that control the content and delivery of the announcement. | |||
| These parameters are described below: | These parameters are described below: | |||
| play Specifies the resource or announcement sequence to be played. | play Specifies the resource or announcement sequence to be played. | |||
| repeat Specifies how many times the media server should repeat the | repeat Specifies how many times the media server should repeat the | |||
| announcement or sequence named by the "play=" parameter. A | announcement or sequence named by the "play=" parameter. The | |||
| negative value means the media server repeats the announcement | value "forever" means the repeat should be effectively unbounded. | |||
| forever. In this case, it is RECOMMENDED the media server | In this case, it is RECOMMENDED the media server implements some | |||
| implements some local policy, such as limiting what "forever" | local policy, such as limiting what "forever" means, to ensure | |||
| means, to ensure errant clients do not create a denial of service | errant clients do not create a denial of service attack. | |||
| attack. | ||||
| delay Specifies a delay interval between announcement repetitions. | delay Specifies a delay interval between announcement repetitions. | |||
| The delay is measured in milliseconds. | The delay is measured in milliseconds. | |||
| duration Specifies the maximum duration of the announcement. The | duration Specifies the maximum duration of the announcement. The | |||
| media server will discontinue the announcement and end the call if | media server will discontinue the announcement and end the call if | |||
| the maximum duration has been reached. The duration is measured | the maximum duration has been reached. The duration is measured | |||
| in milliseconds. | in milliseconds. | |||
| locale Specifies the language and optionally country variant of the | locale Specifies the language and optionally country variant of the | |||
| announcement sequence named in the "play=" parameter. RFC3066 [3] | announcement sequence named in the "play=" parameter. RFC3066 [5] | |||
| specifies the locale tag. The locale tag is usually a two- or | specifies the locale tag. The locale tag is usually a two- or | |||
| three-letter code per ISO 639-1 [4]. The country variant is also | three-letter code per ISO 639-1 [7]. The country variant is also | |||
| often a two-letter code per ISO 3166-1 [5]. These elements are | often a two-letter code per ISO 3166-1 [8]. These elements are | |||
| concatenated with a single under bar (%x5F) character, such as | concatenated with a single under bar (%x5F) character, such as | |||
| "en_CA". If only the language is specified, such as locale=en, | "en_CA". If only the language is specified, such as locale=en, | |||
| the choice of country variant is an implementation matter. | the choice of country variant is an implementation matter. | |||
| Implementations SHOULD provide the best possible match between the | Implementations SHOULD provide the best possible match between the | |||
| requested locale and the available languages in the event the | requested locale and the available languages in the event the | |||
| media server cannot honor the locale request precisely. For | media server cannot honor the locale request precisely. For | |||
| example, if the request has locale=ca_FR but the media server only | example, if the request has locale=ca_FR but the media server only | |||
| has fr_FR available, the media server should use the fr_FR | has fr_FR available, the media server should use the fr_FR | |||
| variant. Implementations SHOULD provide a default locale to use | variant. Implementations SHOULD provide a default locale to use | |||
| if no language variants are available. | if no language variants are available. | |||
| skipping to change at page 7, line 4 ¶ | skipping to change at page 7, line 30 ¶ | |||
| requested locale and the available languages in the event the | requested locale and the available languages in the event the | |||
| media server cannot honor the locale request precisely. For | media server cannot honor the locale request precisely. For | |||
| example, if the request has locale=ca_FR but the media server only | example, if the request has locale=ca_FR but the media server only | |||
| has fr_FR available, the media server should use the fr_FR | has fr_FR available, the media server should use the fr_FR | |||
| variant. Implementations SHOULD provide a default locale to use | variant. Implementations SHOULD provide a default locale to use | |||
| if no language variants are available. | if no language variants are available. | |||
| param[n] Provides a mechanism for passing values that are to be | param[n] Provides a mechanism for passing values that are to be | |||
| substituted into an announcement sequence. Up to 9 parameters | substituted into an announcement sequence. Up to 9 parameters | |||
| ("param1=" through "param9=") may be specified. The mechanics of | ("param1=" through "param9=") may be specified. The mechanics of | |||
| announcement sequences are beyond the scope of this document. | announcement sequences are beyond the scope of this document. | |||
| extension Provides a mechanism for extending the parameter set. If | extension Provides a mechanism for extending the parameter set. If | |||
| the media server receives an extension it does not understand, it | the media server receives an extension it does not understand, it | |||
| MUST silently ignore the extension parameter and value. | MUST silently ignore the extension parameter and value. | |||
| The "play=" parameter is mandatory and MUST be present. All other | The "play=" parameter is mandatory and MUST be present. All other | |||
| parameters are OPTIONAL. | parameters are OPTIONAL. | |||
| NOTE: Some encodings are not self-describing. Thus the | NOTE: Some encodings are not self-describing. Thus the | |||
| implementation relies on filename extension conventions for | implementation relies on filename extension conventions for | |||
| determining the media type. | determining the media type. | |||
| Note that RFC3261 [2] implies that proxies are supposed to pass | Note that RFC3261 [6] implies that proxies are supposed to pass | |||
| parameters through unchanged. However, be aware that non-conforming | parameters through unchanged. However, be aware that non-conforming | |||
| proxies may strip Request-URI parameters. That said, given the | proxies may strip Request-URI parameters. That said, given the | |||
| likely scenarios for the mechanisms presented in this document, this | likely scenarios for the mechanisms presented in this document, this | |||
| should not be an issue. Most likely, the proxy inserting the | should not be an issue. Most likely, the proxy inserting the | |||
| parameters is the last proxy before the media server. If the service | parameters is the last proxy before the media server. If the service | |||
| provider deploys a proxy for load balancing or service location | provider deploys a proxy for load balancing or service location | |||
| purposes, the service provider should ensure their choice of proxy | purposes, the service provider should ensure their choice of proxy | |||
| preserves parameters. | preserves parameters. | |||
| The form of the SIP Request URI for announcements is as follows. | The form of the SIP Request URI for announcements is as follows. | |||
| skipping to change at page 7, line 48 ¶ | skipping to change at page 8, line 26 ¶ | |||
| The scenarios below assume there is a SIP Proxy, application server, | The scenarios below assume there is a SIP Proxy, application server, | |||
| or media gateway controller between the caller and the media server. | or media gateway controller between the caller and the media server. | |||
| However, the announcement service works as described below even if | However, the announcement service works as described below even if | |||
| the caller invokes the service directly. We chose to discuss the | the caller invokes the service directly. We chose to discuss the | |||
| proxy case, as it will be the most common case. | proxy case, as it will be the most common case. | |||
| The caller issues an INVITE to the serving SIP Proxy. The SIP Proxy | The caller issues an INVITE to the serving SIP Proxy. The SIP Proxy | |||
| determines what audio prompt to play to the caller. The proxy | determines what audio prompt to play to the caller. The proxy | |||
| responds to the caller with 100 TRYING. | responds to the caller with 100 TRYING. | |||
| It is important to note that the mechanism described here in no way | ||||
| modifies the behavior of SIP [6]. In particular, this convention | ||||
| does not modify SDP negotiation [14]. | ||||
| The proxy issues an INVITE to the media server, requesting the | The proxy issues an INVITE to the media server, requesting the | |||
| appropriate prompt to play coded in the play= parameter. The media | appropriate prompt to play coded in the play= parameter. The media | |||
| server responds with 200 OK. The proxy relays the 200 OK to the | server responds with 200 OK. The proxy relays the 200 OK to the | |||
| caller. The caller then issues an ACK. The proxy then relays the | caller. The caller then issues an ACK. The proxy then relays the | |||
| ACK to the media server. | ACK to the media server. | |||
| With the call established, the media server plays the requested | With the call established, the media server plays the requested | |||
| prompt. When the media server completes the play of the prompt, it | prompt. When the media server completes the play of the prompt, it | |||
| issues a BYE to the proxy. The proxy then issues a BYE to the | issues a BYE to the proxy. The proxy then issues a BYE to the | |||
| caller. | caller. | |||
| skipping to change at page 8, line 30 ¶ | skipping to change at page 9, line 24 ¶ | |||
| | ACK | | | | ACK | | | |||
| |----------------------->| ACK | | |----------------------->| ACK | | |||
| | |----------------------->| | | |----------------------->| | |||
| | | | | | | | | |||
| | Play Announcement (RTP) | | | Play Announcement (RTP) | | |||
| |<================================================| | |<================================================| | |||
| | | | | | | | | |||
| | | BYE | | | | BYE | | |||
| | BYE |<-----------------------| | | BYE |<-----------------------| | |||
| |<-----------------------| | | |<-----------------------| | | |||
| | 200 OK | 200 OK | | | 200 OK | | | |||
| |----------------------->|----------------------->| | |----------------------->| 200 OK | | |||
| | |----------------------->| | ||||
| | | | | | | | | |||
| 3.3 Formal Syntax | 3.3 Formal Syntax | |||
| The following syntax specification uses the augmented Backus-Naur | The following syntax specification uses the augmented Backus-Naur | |||
| Form (BNF) as described in RFC2234 [6]. | Form (BNF) as described in RFC2234 [3]. | |||
| ANNC-URL = sip-ind annc-ind "@" hostport | ANNC-URL = sip-ind annc-ind "@" hostport | |||
| annc-parameters uri-parameters | annc-parameters uri-parameters | |||
| sip-ind = "sip:" / "sips:" | sip-ind = "sip:" / "sips:" | |||
| annc-ind = "annc" | annc-ind = "annc" | |||
| annc-parameters = ";" play-param [ ";" content-param ] | annc-parameters = ";" play-param [ ";" content-param ] | |||
| [ ";" delay-param] | [ ";" delay-param] | |||
| [ ";" duration-param ] | [ ";" duration-param ] | |||
| skipping to change at page 9, line 4 ¶ | skipping to change at page 9, line 46 ¶ | |||
| sip-ind = "sip:" / "sips:" | sip-ind = "sip:" / "sips:" | |||
| annc-ind = "annc" | annc-ind = "annc" | |||
| annc-parameters = ";" play-param [ ";" content-param ] | annc-parameters = ";" play-param [ ";" content-param ] | |||
| [ ";" delay-param] | [ ";" delay-param] | |||
| [ ";" duration-param ] | [ ";" duration-param ] | |||
| [ ";" repeat-param ] | [ ";" repeat-param ] | |||
| [ ";" locale-param ] | [ ";" locale-param ] | |||
| [ ";" variable-params ] | [ ";" variable-params ] | |||
| [ ";" extension-params ] | [ ";" extension-params ] | |||
| play-param = "play=" prompt-url | play-param = "play=" prompt-url | |||
| content-param = "content-type=" MIME-type | content-param = "content-type=" MIME-type | |||
| delay-param = "delay=" delay-value | delay-param = "delay=" delay-value | |||
| delay-value = 1*DIGIT | delay-value = 1*DIGIT | |||
| duration-param = "duration=" duration-value | duration-param = "duration=" duration-value | |||
| duration-value = 1*DIGIT | duration-value = 1*DIGIT | |||
| repeat-param = "repeat=" repeat-value | repeat-param = "repeat=" repeat-value | |||
| repeat-value = 1*DIGIT | repeat-value = 1*DIGIT | "forever" | |||
| locale-param = "locale=" token | locale-param = "locale=" token | |||
| ; per RFC3066, usually | ; per RFC3066, usually | |||
| ; ISO639-1_ISO3166-1 | ; ISO639-1_ISO3166-1 | |||
| ; e.g., en, en_US, en_UK, etc. | ; e.g., en, en_US, en_UK, etc. | |||
| variable-params = param-name "=" variable-value | variable-params = param-name "=" variable-value | |||
| param-name = "param" DIGIT ; e.g., "param1" | param-name = "param" DIGIT ; e.g., "param1" | |||
| variable-value = 1*(ALPHA | DIGIT) | variable-value = 1*(ALPHA | DIGIT) | |||
| extension-params = extension-param [ ";" extension-params ] | extension-params = extension-param [ ";" extension-params ] | |||
| extension-param = token "=" token | extension-param = token "=" token | |||
| "uri-parameters" is the SIP Request-URI parameter list as described | "uri-parameters" is the SIP Request-URI parameter list as described | |||
| in RFC3261 [2]. All parameters of the Request URI are part of the | in RFC3261 [6]. All parameters of the Request URI are part of the | |||
| URI matching algorithm. | URI matching algorithm. | |||
| The MIME-type is the MIME [7] content type for the announcement, such | The MIME-type is the MIME [1] content type for the announcement, such | |||
| as audio/basic, audio/G729, audio/mpeg, video/mpeg, and so on. | as audio/basic, audio/G729, audio/mpeg, video/mpeg, and so on. | |||
| To date, none of the IETF audio MIME registrations have parameters. | To date, none of the IETF audio MIME registrations have parameters. | |||
| Vendor-specific registrations, such as audio/x-wav, do have | Vendor-specific registrations, such as audio/x-wav, do have | |||
| parameters. However, they are not strictly needed for prompt | parameters. However, they are not strictly needed for prompt | |||
| fetching. | fetching. | |||
| On the other hand, the prevalence of parameters may change in the | On the other hand, the prevalence of parameters may change in the | |||
| future. In addition, existing video registrations have parameters, | future. In addition, existing video registrations have parameters, | |||
| such as video/DV. To accommodate this, and retain compatibility with | such as video/DV. To accommodate this, and retain compatibility with | |||
| the SIP URI structure, the MIME-type parameter separator (semicolon, | the SIP URI structure, the MIME-type parameter separator (semicolon, | |||
| %3b) and value separator (equal, %d3) MUST be escaped. For example: | %3b) and value separator (equal, %d3) MUST be escaped. For example: | |||
| sip:annc@ms.example.net; \ | sip:annc@ms.example.net; \ | |||
| play=file://fs.example.net/clips/my-intro.dvi; \ | play=file://fs.example.net/clips/my-intro.dvi; \ | |||
| content-type=video/mpeg%3bencode%d3314M-25/625-50 | content-type=video/mpeg%3bencode%d3314M-25/625-50 | |||
| The locale-value consists of a tag as specified in RFC3066 [3]. | The locale-value consists of a tag as specified in RFC3066 [5]. | |||
| The definition of hostport is as specified by RFC3261 [2]. | The definition of hostport is as specified by RFC3261 [6]. | |||
| The syntax of prompt-url consists of a URL scheme as specified by | The syntax of prompt-url consists of a URL scheme as specified by | |||
| RFC2396 [8] or a special token indicating a provisioned announcement | RFC2396 [4] or a special token indicating a provisioned announcement | |||
| sequence. For example, the URL scheme MAY include any of the | sequence. For example, the URL scheme MAY include any of the | |||
| following. | following. | |||
| o http/https | o http/https | |||
| o ftp | o ftp | |||
| o file (referencing a local, NFS (RFC3010 [15]), or AFS file) | o file (referencing a local or NFS (RFC3010 [12]) object) | |||
| o nfs (RFC2224 [16]) | o nfs (RFC2224 [10]) | |||
| If a provisioned announcement sequence is to be played the value of | If a provisioned announcement sequence is to be played the value of | |||
| prompt-url will have the following form: | prompt-url will have the following form: | |||
| prompt-url = "/provisioned/" announcement-id | prompt-url = "/provisioned/" announcement-id | |||
| announcement-id = 1*(ALPHA | DIGIT) | announcement-id = 1*(ALPHA | DIGIT) | |||
| Note that the scheme "/provisioned/" was chosen because of a | Note that the scheme "/provisioned/" was chosen because of a | |||
| hesitation to register a "provisioned:" URI scheme. | hesitation to register a "provisioned:" URI scheme. | |||
| skipping to change at page 11, line 27 ¶ | skipping to change at page 12, line 20 ¶ | |||
| such, the VoiceXML browser implementation on the media server MUST | such, the VoiceXML browser implementation on the media server MUST | |||
| support https fetching of grammars and subsequent documents. | support https fetching of grammars and subsequent documents. | |||
| Returned information often is sensitive. For example, the | Returned information often is sensitive. For example, the | |||
| information could be financial information or instructions. Thus the | information could be financial information or instructions. Thus the | |||
| media server MUST support https posting of results. | media server MUST support https posting of results. | |||
| 4.1 Formal Syntax for Prompt and Collect Service | 4.1 Formal Syntax for Prompt and Collect Service | |||
| The following syntax specification uses the augmented Backus-Naur | The following syntax specification uses the augmented Backus-Naur | |||
| Form (BNF) as described in RFC2234 [6]. | Form (BNF) as described in RFC2234 [3]. | |||
| DIALOG-URL = sip-ind dialog-ind "@" hostport | DIALOG-URL = sip-ind dialog-ind "@" hostport | |||
| dialog-parameters | dialog-parameters | |||
| sip-ind = "sip:" / "sips:" | sip-ind = "sip:" / "sips:" | |||
| dialog-ind = "dialog" | dialog-ind = "dialog" | |||
| dialog-parameters = ";" dialog-param [ vxml-parameters ] | dialog-parameters = ";" dialog-param [ vxml-parameters ] | |||
| [ uri-parameters ] | [ uri-parameters ] | |||
| skipping to change at page 12, line 19 ¶ | skipping to change at page 13, line 11 ¶ | |||
| The media server presents the parameters as environment variables in | The media server presents the parameters as environment variables in | |||
| the connection object. Specifically, the parameter appears in the | the connection object. Specifically, the parameter appears in the | |||
| connection.sip tree. | connection.sip tree. | |||
| If the Media Server does not support the passing of keyword-value | If the Media Server does not support the passing of keyword-value | |||
| pairs to the VoiceXML interpreter session, it MUST ignore the | pairs to the VoiceXML interpreter session, it MUST ignore the | |||
| parameters. | parameters. | |||
| "uri_parameters" is the SIP Request-URI parameter list as described | "uri_parameters" is the SIP Request-URI parameter list as described | |||
| in RFC3261 [2]. All parameters in the parameter list, whether they | in RFC3261 [6]. All parameters in the parameter list, whether they | |||
| come from uri-parameters or from vxml-keyworks, are part of the URI | come from uri-parameters or from vxml-keyworks, are part of the URI | |||
| matching algorithm. | matching algorithm. | |||
| 5. Conference Service | 5. Conference Service | |||
| One identifies mixing sessions through their SIP request URIs. To | One identifies mixing sessions through their SIP request URIs. To | |||
| create a mixing session, one sends an INVITE to a request URI that | create a mixing session, one sends an INVITE to a request URI that | |||
| represents the session. If the URI does not already exist on the | represents the session. If the URI does not already exist on the | |||
| media server and the requested resources are available, the media | media server and the requested resources are available, the media | |||
| server creates a new mixing session. If there is an existing URI for | server creates a new mixing session. If there is an existing URI for | |||
| skipping to change at page 12, line 46 ¶ | skipping to change at page 13, line 38 ¶ | |||
| The left-hand side of the request URI is actually the username of the | The left-hand side of the request URI is actually the username of the | |||
| request in the request URI and the To header. The host portion of | request in the request URI and the To header. The host portion of | |||
| the URI identifies a particular media server. The "conf" user name | the URI identifies a particular media server. The "conf" user name | |||
| conveys to the media server that this is a request for the mixing | conveys to the media server that this is a request for the mixing | |||
| service. The uniqueIdentifier can be any value that is compliant | service. The uniqueIdentifier can be any value that is compliant | |||
| with the SIP URI specification. It is the responsibility of the | with the SIP URI specification. It is the responsibility of the | |||
| conference control application to ensure the identifier is unique | conference control application to ensure the identifier is unique | |||
| within the scope of any potential conflict. | within the scope of any potential conflict. | |||
| In the terminology of the conferencing framework | In the terminology of the conferencing framework | |||
| conferencing-framework [14], this URI convention tells the media | conferencing-framework [17], this URI convention tells the media | |||
| server that the application server is requesting it to act as a | server that the application server is requesting it to act as a | |||
| Focus. The conf-id value identifies the particular focus instance. | Focus. The conf-id value identifies the particular focus instance. | |||
| As a focus in the conferencing framework, the media server MUST | As a focus in the conferencing framework, the media server MUST | |||
| support the ";isfocus" parameter in the Request URI. Note however, | support the ";isfocus" parameter in the Request URI. Note however, | |||
| that the presence or absence of the ";isfocus" parameter has no | that the presence or absence of the ";isfocus" parameter has no | |||
| protocol impact at the media server. | protocol impact at the media server. | |||
| It is worth noting that the conference URI shared between the | It is worth noting that the conference URI shared between the | |||
| application and media servers provides enhanced security, as the SIP | application and media servers provides enhanced security, as the SIP | |||
| control interface does not have to be exposed to participants. It | control interface does not have to be exposed to participants. It | |||
| also allows the assignment of a specific media server to be delayed | also allows the assignment of a specific media server to be delayed | |||
| as long as possible, thereby simplifying resource management. | as long as possible, thereby simplifying resource management. | |||
| One can add additional legs to the conference by INVITEing them to | One can add additional legs to the conference by INVITEing them to | |||
| the above mentioned request URI. Per the matching rules of RFC3261 | the above mentioned request URI. Per the matching rules of RFC3261 | |||
| [2], the conf-id parameter is part of the matching string. | [6], the conf-id parameter is part of the matching string. | |||
| Conversely, one can remove legs by issuing a BYE in the corresponding | Conversely, one can remove legs by issuing a BYE in the corresponding | |||
| dialog. The mixing session, and thus the conference-specific request | dialog. The mixing session, and thus the conference-specific request | |||
| URI, remains active so long as there is at least one SIP dialog | URI, remains active so long as there is at least one SIP dialog | |||
| associated with the given request URI. | associated with the given request URI. | |||
| If the Request-URI has "conf" as the user part, but does not have a | If the Request-URI has "conf" as the user part, but does not have a | |||
| conf-id parameter, the media server MUST respond with a 404 NOT | conf-id parameter, the media server MUST respond with a 404 NOT | |||
| FOUND. | FOUND. | |||
| NOTE: The media server could create a unique conference instance | NOTE: The media server could create a unique conference instance | |||
| and return the conf-id string to the UAC if there is no conf-id | and return the conf-id string to the UAC if there is no conf-id | |||
| present. However, such an operation may have other operational | present. However, such an operation may have other operational | |||
| issues, such as permissions and billing. Thus an application | issues, such as permissions and billing. Thus an application | |||
| server or proxy is a better place to do such an operation. | server or proxy is a better place to do such an operation. | |||
| Moreover, such action would make the media server into a | Moreover, such action would make the media server into a | |||
| Conference Factory in the terminology of conference-framework | Conference Factory in the terminology of conference-framework | |||
| [14]. That is not the appropriate behavior for a media server. | [17]. That is not the appropriate behavior for a media server. | |||
| Since some conference use cases, such as business conferencing, have | Since some conference use cases, such as business conferencing, have | |||
| billing implications, the media server SHOULD authenticate the | billing implications, the media server SHOULD authenticate the | |||
| application server or proxy. At a minimum, the media server MUST | application server or proxy. At a minimum, the media server MUST | |||
| implement sip: digest authentication and sips:. | implement sips:. | |||
| 5.1 Protocol Diagram | 5.1 Protocol Diagram | |||
| This diagram shows the establishment of a three-way conference. This | This diagram shows the establishment of a three-way conference. This | |||
| section is informative. It is only one method of establishing a | section is informative. It is only one method of establishing a | |||
| conference. This example shows a simple back-to-back user agent. | conference. This example shows a simple back-to-back user agent. | |||
| The conference-framework [14] describes additional parameters and | The conference-framework [17] describes additional parameters and | |||
| behaviors of the Application Server. For example, the first INVITE | behaviors of the Application Server. For example, the first INVITE | |||
| from P1 to the Application Server would include the ";isfocus" | from P1 to the Application Server would include the ";isfocus" | |||
| parameter; the Application Server would act as a Conference Factory; | parameter; the Application Server would act as a Conference Factory; | |||
| and so on. However, none of that protocol machinery has an impact on | and so on. However, none of that protocol machinery has an impact on | |||
| the operation of the Application Server to Media Server interface, | the operation of the Application Server to Media Server interface, | |||
| which is the focus of this protocol document. | which is the focus of this protocol document. | |||
| P1 P2 P3 Application Server Media Server | P1 P2 P3 Application Server Media Server | |||
| | | | | | | | | | | | | |||
| | INVITE sip:public-conf@as.example.net | | | INVITE sip:public-conf@as.example.net | | |||
| |---------------------------------->| | | |---------------------------------->| | | |||
| | | | INVITE sip:conf=123@ms.example.net | | | | | INVITE sip:conf=123@ms.example.net | | |||
| | | | |------------------>| | | | | |------------------>| | |||
| | | | | 200 OK | | | | | | 200 OK | | |||
| | 200 OK | |<------------------| | | 200 OK | |<------------------| | |||
| |<----------------------------------| | | |<----------------------------------| | | |||
| | ACK | | | | | ||||
| |---------------------------------->| ACK | | ||||
| | | | |------------------>| | ||||
| | | | RTP w/ P1 | | | | | | RTP w/ P1 | | | |||
| |<=====================================================>| | |<=====================================================>| | |||
| | | | | | | | | | | | | |||
| | INVITE sip:public-conf@as.example.net | | | INVITE sip:public-conf@as.example.net | | |||
| | |-------------------------->| | | | |-------------------------->| | | |||
| | | | INVITE sip:conf=123@ms.example.net | | | | | INVITE sip:conf=123@ms.example.net | | |||
| | | | |------------------>| | | | | |------------------>| | |||
| | | | | 200 OK | | | | | | 200 OK | | |||
| | | 200 OK | |<------------------| | | | 200 OK | |<------------------| | |||
| | |<--------------------------| | | | |<--------------------------| | | |||
| | | ACK | | | | ||||
| | |-------------------------->| ACK | | ||||
| | | | |------------------>| | ||||
| | | | | | | | | | | | | |||
| | | | RTP w/ P1+P2-P2 | | | | | | RTP w/ P1+P2-P2 | | | |||
| | |<=============================================>| | | |<=============================================>| | |||
| | | | RTP w/ P1+P2-P1 | | | | | | RTP w/ P1+P2-P1 | | | |||
| |<=====================================================>| | |<=====================================================>| | |||
| | | | | | | | | | | | | |||
| | INVITE sip:public-conf@as.example.net | | | INVITE sip:public-conf@as.example.net | | |||
| | | |----------------->| | | | | |----------------->| | | |||
| | | INVITE sip:conf=123@ms.example.net | | | | | INVITE sip:conf=123@ms.example.net | | |||
| | | | |------------------>| | | | | |------------------>| | |||
| | | | | 200 OK | | | | | | 200 OK | | |||
| | | | 200 OK |<------------------| | | | | 200 OK |<------------------| | |||
| | | |<-----------------| | | | | |<-----------------| | | |||
| | | | ACK | | | ||||
| | | |----------------->| ACK | | ||||
| | | | |------------------>| | ||||
| | | | | | | | | | | | | |||
| | | | RTP w/ P1+P2+P3-P3 | | | | | RTP w/ P1+P2+P3-P3 | | |||
| | | |<====================================>| | | | |<====================================>| | |||
| | | | RTP w/ P1+P2+P3-P2 | | | | | RTP w/ P1+P2+P3-P2 | | |||
| | |<=============================================>| | | |<=============================================>| | |||
| | | | RTP w/ P1+P2+P3-P1 | | | | | RTP w/ P1+P2+P3-P1 | | |||
| |<=====================================================>| | |<=====================================================>| | |||
| | | | | | | | | | | | | |||
| | | | | | | | | | | | | |||
| Using the terminology of conference-framework [14], the Application | Using the terminology of conference-framework [17], the Application | |||
| Server is the Conference Factory and the Media Server is the | Server is the Conference Factory and the Media Server is the | |||
| Conference Focus. | Conference Focus. | |||
| Note that the above call flow does not show any 100 TRYING messages | Note that the above call flow does not show any 100 TRYING messages | |||
| that would typically flow from the Application Server to the UAC's, | that would typically flow from the Application Server to the UAC's, | |||
| nor does it show the ACK's from the UAC's to the Application Server | nor does it show the ACK's from the UAC's to the Application Server | |||
| or from the Application Server to the Media Server. | or from the Application Server to the Media Server. | |||
| Each leg can drop out either under the supervision of the UAC by the | Each leg can drop out either under the supervision of the UAC by the | |||
| UAC sending a BYE or under the supervision of the Application Server | UAC sending a BYE or under the supervision of the Application Server | |||
| skipping to change at page 15, line 25 ¶ | skipping to change at page 16, line 26 ¶ | |||
| Application Server can mute legs, create side conferences, and so | Application Server can mute legs, create side conferences, and so | |||
| forth. | forth. | |||
| Note that the Application Server is a server to the participants | Note that the Application Server is a server to the participants | |||
| (UAC's). However, the Application Server is a client for mixing | (UAC's). However, the Application Server is a client for mixing | |||
| services to the Media Server. | services to the Media Server. | |||
| 5.2 Formal Syntax | 5.2 Formal Syntax | |||
| The following syntax specification uses the augmented Backus-Naur | The following syntax specification uses the augmented Backus-Naur | |||
| Form (BNF) as described in RFC2234 [6]. | Form (BNF) as described in RFC2234 [3]. | |||
| CONF-URL = sip-ind conf-ind "=" instance-id "@" hostport | CONF-URL = sip-ind conf-ind "=" instance-id "@" hostport | |||
| [ uri_parameters ] | [ uri_parameters ] | |||
| sip-ind = "sip:" / "sips:" | sip-ind = "sip:" / "sips:" | |||
| conf-ind = "conf" | conf-ind = "conf" | |||
| instance-id = token | instance-id = token | |||
| "uri-parameters" is the SIP Request-URI parameter list as described | "uri-parameters" is the SIP Request-URI parameter list as described | |||
| in RFC3261 [2]. All parameters in the parameter list are part of the | in RFC3261 [6]. All parameters in the parameter list are part of the | |||
| URI matching algorithm. | URI matching algorithm. | |||
| 6. The User Part | 6. IANA Considerations | |||
| There has been considerable debate about the wisdom of using fixed | None. | |||
| user parts in a request URI. The most common objection is that the | ||||
| user part should be opaque and a local matter. The other objection | 7. The User Part | |||
| is that using a fixed user part removes those specified user | ||||
| addresses from the user address space. | There has been considerable discussion about the wisdom of using | |||
| fixed user parts in a request URI. The most common objection is that | ||||
| the user part should be opaque and a local matter. The other | ||||
| objection is that using a fixed user part removes those specified | ||||
| user addresses from the user address space. | ||||
| We address the latter issue first. The common example is the | We address the latter issue first. The common example is the | |||
| Postmaster address defined by RFC2821 [17]. The objection is that by | Postmaster address defined by RFC2821 [11]. The objection is that by | |||
| using the Postmaster token for something special, one removes that | using the Postmaster token for something special, one removes that | |||
| token for anyone. Thus, the Postmaster General of the United States, | token for anyone. Thus, the Postmaster General of the United States, | |||
| for example, cannot have the mail address Postmaster@usps.gov. One | for example, cannot have the mail address Postmaster@usps.gov. One | |||
| may debate whether this is a significant limitation, however. | may debate whether this is a significant limitation, however. | |||
| One may point out that "annc", for example, has the potential for | This document explicitly addresses this issue. The user names | |||
| conflict. Clearly, with the use of underbars, sip, and a hyphen, | described in the text, namely annc, ivr, dialog, and conf are | |||
| this conflict is much smaller than the potential for a conflict like | available for whatever local use a given SIP user agent or proxy | |||
| "Postmaster". | wishes for them. What this document does is give special meaning for | |||
| these user names at media servers that implement this specification. | ||||
| If a media server choses not to implement this specification, nothing | ||||
| breaks. If a user wishes to use one of the user names described in | ||||
| this document at their SIP user agent, nothing breaks and their user | ||||
| agent will work as expected. | ||||
| The key point is, one cannot confuse the namespace at a Media Server | The key point is, one cannot confuse the namespace at a Media Server | |||
| with the namespace for an organization. | with the namespace for an organization. For example, let us take the | |||
| case where a network offers services for "Ann Charles". She likes to | ||||
| use the name "annc", and thus she would like to use | ||||
| "sip:annc@example.net". We offer there is ABSOLUTELY NO NAME | ||||
| COLLISION WHATSOEVER. Why is this so? This is so because | ||||
| sip:annc@example.net will resolve to the specific user at a specific | ||||
| device for Ann. As an example, example.net's SIP Proxy Server | ||||
| resolves sip:annc@example.net to annc@anns-phone.example.net . | ||||
| Conversely, one directs requests for the media service annc directly | ||||
| to the Media Server, e.g., sip:annc@ms21.ap.example.net . Moreover, | ||||
| by definition, requests for Ann Charles, or anything other than the | ||||
| announcement service, will NEVER be directly sent to the Media | ||||
| Server. If that were not true, no phone in the world could use the | ||||
| user part "eburger", as eburger is a reserved user part in the | ||||
| Brooktrout domain. This clearly is not the case. | ||||
| For example, let us take the case where a network offers services for | If one wishes to make their media server accessible to the global | |||
| "Ann Charles". She likes to use the name "annc", and thus she would | Internet, but retain one of the Media Server-specific user names in | |||
| like to use "sip:annc@example.net". We offer that there is | the domain, a SIP Proxy can easily translate whatever opaque name one | |||
| ABSOLUTELY NO NAME COLLISION WHATSOEVER. Why is this so? This is so | choses to the Media Server-specific user name. For example, if a | |||
| because sip:annc@example.net will resolve to the specific user at a | domain whishes to offer services for the above mentioned Ann Charles | |||
| specific device for Ann. As an example, example.net's SIP Proxy | at sip:annc@example.com, they can offer the announcement service at | |||
| Server resolves sip:annc@example.net to annc@anns-phone.example.net . | sip:my-special-announcement-service@example.com . The former | |||
| One directs requests for the media service annc directly to the Media | address, sip:annc@example.com, would resolve to the actual device | |||
| Server, e.g., sip:annc@ms21.ap.example.net . Moreover, by | where annc resides. The latter would resolve to the media server | |||
| definition, Ann Charles, or anything other than the announcement | announcement server address, sip:annc@mediaserver.example.com, as an | |||
| service, will NEVER be directly on the Media Server. If that were | example. Note that this convention makes it easier to provision this | |||
| not true, no phone in the world could use the user part "eburger", as | service. With a fixed mapping at the multifunction media server, | |||
| eburger is a reserved user part in the SnowShore domain. | there are less provisioning data elements to get wrong. | |||
| Here is another way of looking at this issue. Unix reserves the | Here is another way of looking at this issue. Unix reserves the | |||
| special user "root". Just about all Unix machines have a user root, | special user "root". Just about all Unix machines have a user root, | |||
| who has an address "root@a-specific-machine.example.com", where | who has an address "root@a-specific-machine.example.com", where | |||
| "a-specific-machine" is the fully-qualified domain name (FQDN) of a | "a-specific-machine" is the fully-qualified domain name (FQDN) of a | |||
| particular instance of a machine. There are very well-defined | particular instance of a machine. There are very well-defined | |||
| semantics for the "root" user. | semantics for the "root" user. | |||
| Even though most every Unix machine has a "root" user, often there is | Even though most every Unix machine has a "root" user, often there is | |||
| no mapping for a "root" user in a domain, such as "root@example.com". | no mapping for a "root" user in a domain, such as "root@example.com". | |||
| skipping to change at page 17, line 9 ¶ | skipping to change at page 18, line 33 ¶ | |||
| considered obfuscating the user name by prepending "__sip-" to the | considered obfuscating the user name by prepending "__sip-" to the | |||
| user name. However, as explained above, this obfuscation is not | user name. However, as explained above, this obfuscation is not | |||
| necessary. There is a fundamental difference between a user name at | necessary. There is a fundamental difference between a user name at | |||
| a device and a user name at a MX record (SMTP) or Address-of-Record | a device and a user name at a MX record (SMTP) or Address-of-Record | |||
| (SIP). Again, there is no possibility that the name on the device | (SIP). Again, there is no possibility that the name on the device | |||
| may "leak out" into the SIP routing network. | may "leak out" into the SIP routing network. | |||
| The most important thing to note about this convention is that the | The most important thing to note about this convention is that the | |||
| left-hand side of the request URI is opaque to the network. The only | left-hand side of the request URI is opaque to the network. The only | |||
| network elements that need to know about the convention are the Media | network elements that need to know about the convention are the Media | |||
| Server and client. | Server and client. Even proxies doing mapping resolution, as in the | |||
| example above for public announcement services, do not need to be | ||||
| aware of the convention. The convention is purely a matter of | ||||
| provisioning. | ||||
| Some have proposed that such naming be a pure matter of local | Some have proposed that such naming be a pure matter of local | |||
| convention. For example, the thesis of the informational RFC3087 | convention. For example, the thesis of the informational RFC RFC3087 | |||
| [18] is that you can address services using a request URI. However, | [13] is that you can address services using a request URI. However, | |||
| some have taken the examples in the document to an extreme. Namely, | some have taken the examples in the document to an extreme. Namely, | |||
| that the only way to address services is via arbitrary, opaque, long | that the only way to address services is via arbitrary, opaque, long | |||
| user parts. It is possible to provision the service names, rather | user parts. Clearyly, it is possible to provision the service names, | |||
| than fixed names. While this can work in a closed network, where the | rather than fixed names. While this can work in a closed network, | |||
| Application Servers and Media Servers are in the same administrative | where the Application Servers and Media Servers are in the same | |||
| domain, this does not work across domains, such as in the Internet. | administrative domain, this does not work across domains, such as in | |||
| This is because the client of the media service has to know the local | the Internet. This is because the client of the media service has to | |||
| name for each service / domain pair. This is particularly onerous | know the local name for each service / domain pair. This is | |||
| for situations where there is an ad hoc relationship between the | particularly onerous for situations where there is an ad hoc | |||
| application and the media service. Without a well-known relationship | relationship between the application and the media service. Without | |||
| between service and service address, how would the client locate the | a well-known relationship between service and service address, how | |||
| service? | would the client locate the service? | |||
| One very important result of using the user part as the service | One very important result of using the user part as the service | |||
| descriptor is that we can use all of the standard SIP machinery, | descriptor is that we can use all of the standard SIP machinery, | |||
| without modification. For example, Media Servers with different | without modification. For example, Media Servers with different | |||
| capabilities can SIP Register their capabilities as users. For | capabilities can SIP Register their capabilities as users. For | |||
| example, a mixing-only device will register the "conf" user, while a | example, a VoiceXML-only device will register the "dialog" user, | |||
| multi-purpose Media Server will register all of the users. Note that | while a multi-purpose Media Server will register all of the users. | |||
| this is why the URI to play is a parameter. Doing otherwise would | Note that this is why the URI to play is a parameter. Doing | |||
| overburden a normal SIP proxy or redirect server. Conversely, having | otherwise would overburden a normal SIP proxy or redirect server. | |||
| the conference ID being part of the user part gives an indication | Conversely, having the conference ID being part of the user part | |||
| that requests get routed similarly (as opposed to requiring a GRUU, | gives an indication that requests get routed similarly (as opposed to | |||
| which would restrict routing to the same device). | requiring a GRUU, which would restrict routing to the same device). | |||
| Likewise, this scheme lets us leverage the standard SIP proxy | Likewise, this scheme lets us leverage the standard SIP proxy | |||
| behavior of using an intelligent redirect server or proxy server to | behavior of using an intelligent redirect server or proxy server to | |||
| provide high-available services. For example, two Media Servers can | provide high-available services. For example, two Media Servers can | |||
| register with a SIP redirect server for the annc user. If one of the | register with a SIP redirect server for the annc user. If one of the | |||
| Media Servers fails, the registration will expire and all requests | Media Servers fails, the registration will expire and all requests | |||
| for the announcement service ("calls to the annc user") get sent to | for the announcement service ("calls to the annc user") get sent to | |||
| the surviving Media Server. | the surviving Media Server. | |||
| 7. Security Considerations | 8. Security Considerations | |||
| Exposing network services with well-known addresses may not be | Exposing network services with well-known addresses may not be | |||
| desirable. The Media Server SHOULD authenticate and authorize | desirable. The Media Server SHOULD authenticate and authorize | |||
| requesting endpoints per local policy. | requesting endpoints per local policy. | |||
| Some interactions in this document result in the transfer of | Some interactions in this document result in the transfer of | |||
| confidential information. Moreover, many of the interactions require | confidential information. Moreover, many of the interactions require | |||
| integrity protection. Thus the Media Server MUST implement digest | integrity protection. Thus the Media Server MUST implement the sips: | |||
| authentication for the sip: scheme and MUST implement the sips: | ||||
| scheme. In addition, application developers are RECOMMENDED to use | scheme. In addition, application developers are RECOMMENDED to use | |||
| the security services offered by the Media Server to ensure the | the security services offered by the Media Server to ensure the | |||
| integrity and confidentiality of their user's data, as appropriate. | integrity and confidentiality of their user's data, as appropriate. | |||
| Untrusted network elements could use the protocol described here for | Untrusted network elements could use the convention described here | |||
| providing information services. Many extant billing arrangements are | for providing information services. Many extant billing arrangements | |||
| for completed calls. Successful call completion occurs with a 2xx | are for completed calls. Successful call completion occurs with a | |||
| result code. This can be an issue for the early media announcement | 2xx result code. This can be an issue for the early media | |||
| service. This is one of the reasons why the early media announcement | announcement service. This is one of the reasons why the early media | |||
| service is deprecated. | announcement service is deprecated. | |||
| Services such as repeating an announcement forever create the | Services such as repeating an announcement forever create the | |||
| possibility for denial of service attacks. The media server SHOULD | possibility for denial of service attacks. The media server SHOULD | |||
| have local policies to deal with this, such as time-limiting how long | have local policies to deal with this, such as time-limiting how long | |||
| "forever" is, analyzing where multiple requests come from, | "forever" is, analyzing where multiple requests come from, | |||
| implementing white-lists for such a service, and so on. | implementing white-lists for such a service, and so on. | |||
| 8. Contributors | 9. Contributors | |||
| Jeff Van Dyke and Andy Spitzer of SnowShore did just about all of the | Jeff Van Dyke and Andy Spitzer of SnowShore did just about all of the | |||
| work developing netann, in conjunction with many application | work developing netann, in conjunction with many application | |||
| developers, media server manufacturers, and service providers, some | developers, media server manufacturers, and service providers, some | |||
| of whom are listed in the Acknowledgements section. All I did was do | of whom are listed in the Acknowledgements section. All I did was do | |||
| the theory and write it up. That also means all of the mistakes are | the theory and write it up. That also means all of the mistakes are | |||
| mine, as well. | mine, as well. | |||
| 9. Acknowledgements | 10. Acknowledgements | |||
| We would like to thank Kevin Summers and Ravindra Kabre of Sonus | We would like to thank Kevin Summers and Ravindra Kabre of Sonus | |||
| Networks for their constructive comments, as well as Jonathan | Networks for their constructive comments, as well as Jonathan | |||
| Rosenberg of Dynamicsoft and Tim Melanchuk of Convedia for their | Rosenberg of Dynamicsoft and Tim Melanchuk of Convedia for their | |||
| encouragement. In addition, the discussion at the Las Vegas Interim | encouragement. In addition, the discussion at the Las Vegas Interim | |||
| Workgroup Meeting in 2002 was invaluable for clearing up the issues | Workgroup Meeting in 2002 was invaluable for clearing up the issues | |||
| surrounding the left-hand-side of the request URI. Christer Holmberg | surrounding the left-hand-side of the request URI. Christer Holmberg | |||
| helped tune the language of the multimedia announcement service. | helped tune the language of the multimedia announcement service. | |||
| Orit Levin from Radvision gave a close read on the most recent | Orit Levin from Radvision gave a close read on the most recent | |||
| version of the draft document. Pete Danielsen from Lucent has | version of the draft document. Pete Danielsen from Lucent has | |||
| skipping to change at page 19, line 9 ¶ | skipping to change at page 20, line 36 ¶ | |||
| versions of this document. | versions of this document. | |||
| Pascal Jalet provided the theoretical underpinning and David Rio | Pascal Jalet provided the theoretical underpinning and David Rio | |||
| provided the experimental evidence for why the conference identifier | provided the experimental evidence for why the conference identifier | |||
| belongs in the user part of the request-URI. | belongs in the user part of the request-URI. | |||
| I am particularly indebted to Alan Johnston for his review of this | I am particularly indebted to Alan Johnston for his review of this | |||
| document and ensuring its conformance with the SIP conference control | document and ensuring its conformance with the SIP conference control | |||
| work in the IETF. | work in the IETF. | |||
| Mary Barnes, as usual, found the holes and showed how to fix them. | ||||
| The authors would like to give a special thanks to Walter O'Connor | The authors would like to give a special thanks to Walter O'Connor | |||
| for doing much of the initial implementation. | for doing much of the initial implementation. | |||
| 10. References | Note that at the time of this writing, there are 7 known independent | |||
| server implementations that are interoperable with 23 known client | ||||
| 10.1 Normative References | implementations. Our appologies if we did not count your | |||
| implementation. | ||||
| [1] Bradner, S., "Key words for use in RFCs to Indicate Requirement | ||||
| Levels", BCP 14, RFC 2119, March 1997. | ||||
| [2] 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. | ||||
| [3] Alvestrand, H., "Tags for the Identification of Languages", BCP | ||||
| 47, RFC 3066, January 2001. | ||||
| [4] ISO, "Codes for the representation of names of languages -- Part | ||||
| 1: Alpha-2 code", ISO 639-1, July 2002. | ||||
| [5] ISO, "Codes for the representation of names of countries and | 11. References | |||
| their subdivisions -- Part 1: Country codes", ISO 3166-1, | ||||
| October 1997. | ||||
| [6] Crocker, D. and P. Overell, "Augmented BNF for Syntax | 11.1 Normative References | |||
| Specifications: ABNF", RFC 2234, November 1997. | ||||
| [7] Borenstein, N. and N. Freed, "MIME (Multipurpose Internet Mail | [1] Borenstein, N. and N. Freed, "MIME (Multipurpose Internet Mail | |||
| Extensions) Part One: Mechanisms for Specifying and Describing | Extensions) Part One: Mechanisms for Specifying and Describing | |||
| the Format of Internet Message Bodies", RFC 1521, September | the Format of Internet Message Bodies", RFC 1521, September | |||
| 1993. | 1993. | |||
| [8] Berners-Lee, T., Fielding, R. and L. Masinter, "Uniform Resource | [2] Bradner, S., "Key words for use in RFCs to Indicate Requirement | |||
| Identifiers (URI): Generic Syntax", RFC 2396, August 1998. | Levels", BCP 14, RFC 2119, March 1997. | |||
| [9] Rosenberg, J. and H. Schulzrinne, "Reliability of Provisional | [3] Crocker, D. and P. Overell, "Augmented BNF for Syntax | |||
| Responses in Session Initiation Protocol (SIP)", RFC 3262, June | Specifications: ABNF", RFC 2234, November 1997. | |||
| 2002. | ||||
| 10.2 Informative References | [4] Berners-Lee, T., Fielding, R. and L. Masinter, "Uniform Resource | |||
| Identifiers (URI): Generic Syntax", RFC 2396, August 1998. | ||||
| [10] World Wide Web Consortium, "Voice Extensible Markup Language | [5] Alvestrand, H., "Tags for the Identification of Languages", | |||
| (VoiceXML) Version 2.0", W3C Candidate Recommendation , | BCP 47, RFC 3066, January 2001. | |||
| February 2003, | ||||
| <http://www.w3.org/TR/2003/CR-voicexml20-20030220/>. | ||||
| [11] Burger, E. and M. Dolly, "Keypad Stimulus Protocol (KPML)", | [6] Rosenberg, J., Schulzrinne, H., Camarillo, G., Johnston, A., | |||
| draft-ietf-sipping-kpml-02 (work in progress), February 2004. | Peterson, J., Sparks, R., Handley, M. and E. Schooler, "SIP: | |||
| Session Initiation Protocol", RFC 3261, June 2002. | ||||
| [12] Burger, E., Van Dyke, J. and A. Spitzer, "Media Server Control | [7] International Organization for Standardization, "Codes for the | |||
| Markup Language and Protocol", draft-vandyke-mscml-03 (work in | representation of names of languages -- Part 1: Alpha-2 code", | |||
| progress), July 2003. | ISO Standard 639-1, July 2002. | |||
| [13] Schulzrinne, H., Casner, S., Frederick, R. and V. Jacobson, | [8] International Organization for Standardization, "Codes for the | |||
| "RTP: A Transport Protocol for Real-Time Applications", RFC | representation of names of countries and their subdivisions -- | |||
| 1889, January 1996. | Part 1: Country codes", ISO Standard 3166-1, October 1997. | |||
| [14] Rosenberg, J., "A Framework for Conferencing with the Session | 11.2 Informative References | |||
| Initiation Protocol", | ||||
| draft-ietf-sipping-conferencing-framework-00 (work in | ||||
| progress), May 2003. | ||||
| [15] Shepler, S., Callaghan, B., Robinson, D., Thurlow, R., Beame, | [9] Schulzrinne, H., Casner, S., Frederick, R. and V. Jacobson, | |||
| C., Eisler, M. and D. Noveck, "NFS version 4 Protocol", RFC | "RTP: A Transport Protocol for Real-Time Applications", | |||
| 3010, December 2000. | RFC 1889, January 1996. | |||
| [16] Callaghan, B., "NFS URL Scheme", RFC 2224, October 1997. | [10] Callaghan, B., "NFS URL Scheme", RFC 2224, October 1997. | |||
| [17] Klensin, J., "Simple Mail Transfer Protocol", RFC 2821, April | [11] Klensin, J., "Simple Mail Transfer Protocol", RFC 2821, April | |||
| 2001. | 2001. | |||
| [18] Campbell, B. and R. Sparks, "Control of Service Context using | [12] Shepler, S., Callaghan, B., Robinson, D., Thurlow, R., Beame, | |||
| C., Eisler, M. and D. Noveck, "NFS version 4 Protocol", | ||||
| RFC 3010, December 2000. | ||||
| [13] Campbell, B. and R. Sparks, "Control of Service Context using | ||||
| SIP Request-URI", RFC 3087, April 2001. | SIP Request-URI", RFC 3087, April 2001. | |||
| [19] Handley, M., Schulzrinne, H., Schooler, E. and J. Rosenberg, | [14] Rosenberg, J. and H. Schulzrinne, "An Offer/Answer Model with | |||
| "SIP: Session Initiation Protocol", RFC 2543, March 1999. | Session Description Protocol (SDP)", RFC 3264, June 2002. | |||
| [20] Charlton, N., Gasson, M., Gybels, G., Spanner, M. and A. van | [15] Burnett, D., Hunt, A., McGlashan, S., Porter, B., Lucas, B., | |||
| Wijk, "User Requirements for the Session Initiation Protocol | Ferrans, J., Rehor, K., Carter, J., Danielsen, P. and S. | |||
| (SIP) in Support of Deaf, Hard of Hearing and Speech-impaired | Tryphonas, "Voice Extensible Markup Language (VoiceXML) Version | |||
| Individuals", RFC 3351, August 2002. | 2.0", W3C REC REC-voicexml20-20040316, March 2004. | |||
| [16] Van Dyke, J., Burger, E., Ed. and A. Spitzer, "Media Server | ||||
| Control Markup Language (MSCML) and Protocol", | ||||
| Internet-Draft draft-vandyke-mscml-06, December 2004. | ||||
| [17] Rosenberg, J., "A Framework for Conferencing with the Session | ||||
| Initiation Protocol", | ||||
| Internet-Draft draft-ietf-sipping-conferencing-framework-03, | ||||
| October 2004. | ||||
| Authors' Addresses | Authors' Addresses | |||
| Eric Burger | Eric Burger | |||
| Brooktrout Technology, Inc. | Brooktrout Technology, Inc. | |||
| 18 Keewayding Dr. | 18 Keewaydin Dr. | |||
| Salem, NH 03079 | Salem, NH 03079 | |||
| USA | USA | |||
| EMail: eburger@brooktrout.com | Email: eburger@brooktrout.com | |||
| Jeff Van Dyke | Jeff Van Dyke | |||
| Brooktrout Technology, Inc. | Brooktrout Technology, Inc. | |||
| 18 Keewayding Dr. | 18 Keewaydin Dr. | |||
| Salem, NH 03079 | Salem, NH 03079 | |||
| USA | USA | |||
| EMail: jvandyke@brooktrout.com | Email: jvandyke@brooktrout.com | |||
| Andy Spitzer | Andy Spitzer | |||
| Brooktrout Technology, Inc. | Brooktrout Technology, Inc. | |||
| 18 Keewayding Dr. | 18 Keewaydin Dr. | |||
| Salem, NH 03079 | Salem, NH 03079 | |||
| USA | USA | |||
| EMail: woof@brooktrout.com | Email: woof@brooktrout.com | |||
| Intellectual Property Statement | Intellectual Property Statement | |||
| The IETF takes no position regarding the validity or scope of any | The IETF takes no position regarding the validity or scope of any | |||
| Intellectual Property Rights or other rights that might be claimed to | Intellectual Property Rights or other rights that might be claimed to | |||
| pertain to the implementation or use of the technology described in | pertain to the implementation or use of the technology described in | |||
| this document or the extent to which any license under such rights | 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 | might or might not be available; nor does it represent that it has | |||
| made any independent effort to identify any such rights. Information | made any independent effort to identify any such rights. Information | |||
| on the procedures with respect to rights in RFC documents can be | on the procedures with respect to rights in RFC documents can be | |||
| skipping to change at page 22, line 41 ¶ | skipping to change at page 23, line 41 ¶ | |||
| This document and the information contained herein are provided on an | This document and the information contained herein are provided on an | |||
| "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS | "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS | |||
| OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET | OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET | |||
| ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, | ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, | |||
| INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE | INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE | |||
| INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED | INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED | |||
| WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. | WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. | |||
| Copyright Statement | Copyright Statement | |||
| Copyright (C) The Internet Society (2004). This document is subject | Copyright (C) The Internet Society (2005). This document is subject | |||
| to the rights, licenses and restrictions contained in BCP 78, and | to the rights, licenses and restrictions contained in BCP 78, and | |||
| except as set forth therein, the authors retain all their rights. | except as set forth therein, the authors retain all their rights. | |||
| Acknowledgment | Acknowledgment | |||
| Funding for the RFC Editor function is currently provided by the | Funding for the RFC Editor function is currently provided by the | |||
| Internet Society. | Internet Society. | |||
| End of changes. 94 change blocks. | ||||
| 199 lines changed or deleted | 257 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||