| < draft-ietf-sipping-kpml-07.txt | draft-ietf-sipping-kpml-08.txt > | |||
|---|---|---|---|---|
| SIPPING E. Burger | SIPPING E. Burger | |||
| Internet-Draft Brooktrout Technology, Inc. | Internet-Draft Cantata Technology, Inc. | |||
| Expires: June 25, 2005 M. Dolly | Intended status: Standards Track M. Dolly | |||
| AT&T Labs | Expires: January 24, 2007 AT&T Labs | |||
| December 25, 2004 | July 23, 2006 | |||
| A Session Initiation Protocol (SIP) Event Package for Key Press | A Session Initiation Protocol (SIP) Event Package for Key Press Stimulus | |||
| Stimulus (KPML) | (KPML) | |||
| draft-ietf-sipping-kpml-07 | draft-ietf-sipping-kpml-08 | |||
| Status of this Memo | Status of this Memo | |||
| This document is an Internet-Draft and is subject to all provisions | By submitting this Internet-Draft, each author represents that any | |||
| of section 3 of RFC 3667. By submitting this Internet-Draft, each | applicable patent or other IPR claims of which he or she is aware | |||
| author represents that any applicable patent or other IPR claims of | have been or will be disclosed, and any of which he or she becomes | |||
| which he or she is aware have been or will be disclosed, and any of | aware will be disclosed, in accordance with Section 6 of BCP 79. | |||
| which he or she become aware will be disclosed, in accordance with | ||||
| 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- | |||
| Internet-Drafts. | Drafts. | |||
| Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
| 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 June 25, 2005. | This Internet-Draft will expire on January 24, 2007. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (C) The Internet Society (2004). | Copyright (C) The Internet Society (2006). | |||
| Abstract | Abstract | |||
| This document describes a SIP Event Package "kpml" that enables | This document describes a SIP Event Package "kpml" that enables | |||
| monitoring of DTMF signals and uses XML documents referred to as Key | monitoring of DTMF signals and uses XML documents referred to as Key | |||
| Press Markup Language (KPML). The kpml Event Package may be used to | Press Markup Language (KPML). The kpml Event Package may be used to | |||
| support applications consistent with the principles defined in the | support applications consistent with the principles defined in the | |||
| document titled "A Framework for Application Interaction in the | document titled "A Framework for Application Interaction in the | |||
| Session Initiation Protocol (SIP)". The event package uses SUBSCRIBE | Session Initiation Protocol (SIP)". The event package uses SUBSCRIBE | |||
| messages and allows for XML documents that define and describe filter | messages and allows for XML documents that define and describe filter | |||
| skipping to change at page 3, line 10 ¶ | skipping to change at page 3, line 10 ¶ | |||
| Because the normative behavior of a presentation free User Interface | Because the normative behavior of a presentation free User Interface | |||
| is identical for a presentation free SIP User Agent and a | is identical for a presentation free SIP User Agent and a | |||
| presentation free User Device Proxy, this document uses "User Device" | presentation free User Device Proxy, this document uses "User Device" | |||
| for both cases. | for both cases. | |||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 5 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 5 | |||
| 2. Protocol Overview . . . . . . . . . . . . . . . . . . . . . . 6 | 2. Protocol Overview . . . . . . . . . . . . . . . . . . . . . . 6 | |||
| 3. Key Concepts . . . . . . . . . . . . . . . . . . . . . . . . . 6 | 3. Key Concepts . . . . . . . . . . . . . . . . . . . . . . . . . 6 | |||
| 3.1 Subscription Duration . . . . . . . . . . . . . . . . . . 7 | 3.1. Subscription Duration . . . . . . . . . . . . . . . . . . 7 | |||
| 3.2 Timers . . . . . . . . . . . . . . . . . . . . . . . . . . 7 | 3.2. Timers . . . . . . . . . . . . . . . . . . . . . . . . . . 8 | |||
| 3.3 Pattern Matches . . . . . . . . . . . . . . . . . . . . . 9 | 3.3. Pattern Matches . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 3.4 Digit Suppression . . . . . . . . . . . . . . . . . . . . 13 | 3.4. Digit Suppression . . . . . . . . . . . . . . . . . . . . 13 | |||
| 3.5 User Input Buffer Behavior . . . . . . . . . . . . . . . . 14 | 3.5. User Input Buffer Behavior . . . . . . . . . . . . . . . . 15 | |||
| 3.6 DRegex . . . . . . . . . . . . . . . . . . . . . . . . . . 17 | 3.6. DRegex . . . . . . . . . . . . . . . . . . . . . . . . . . 17 | |||
| 3.6.1 Overview . . . . . . . . . . . . . . . . . . . . . . . 17 | 3.6.1. Overview . . . . . . . . . . . . . . . . . . . . . . . 17 | |||
| 3.6.2 Operation . . . . . . . . . . . . . . . . . . . . . . 18 | 3.6.2. Operation . . . . . . . . . . . . . . . . . . . . . . 18 | |||
| 3.7 Monitoring Direction . . . . . . . . . . . . . . . . . . . 19 | 3.7. Monitoring Direction . . . . . . . . . . . . . . . . . . . 20 | |||
| 3.8 Multiple Simultaneous Subscriptions . . . . . . . . . . . 20 | 3.8. Multiple Simultaneous Subscriptions . . . . . . . . . . . 20 | |||
| 4. Event Package Formal Definition . . . . . . . . . . . . . . . 21 | 4. Event Package Formal Definition . . . . . . . . . . . . . . . 21 | |||
| 4.1 Event Package Name . . . . . . . . . . . . . . . . . . . . 21 | 4.1. Event Package Name . . . . . . . . . . . . . . . . . . . . 21 | |||
| 4.2 Event Package Parameters . . . . . . . . . . . . . . . . . 21 | 4.2. Event Package Parameters . . . . . . . . . . . . . . . . . 21 | |||
| 4.3 SUBSCRIBE Bodies . . . . . . . . . . . . . . . . . . . . . 21 | 4.3. SUBSCRIBE Bodies . . . . . . . . . . . . . . . . . . . . . 22 | |||
| 4.4 Subscription Duration . . . . . . . . . . . . . . . . . . 21 | 4.4. Subscription Duration . . . . . . . . . . . . . . . . . . 22 | |||
| 4.5 NOTIFY Bodies . . . . . . . . . . . . . . . . . . . . . . 22 | 4.5. NOTIFY Bodies . . . . . . . . . . . . . . . . . . . . . . 22 | |||
| 4.6 Subscriber generation of SUBSCRIBE requests . . . . . . . 22 | 4.6. Subscriber generation of SUBSCRIBE requests . . . . . . . 22 | |||
| 4.7 Notifier processing of SUBSCRIBE requests . . . . . . . . 22 | 4.7. Notifier processing of SUBSCRIBE requests . . . . . . . . 23 | |||
| 4.8 Notifier generation of NOTIFY requests . . . . . . . . . . 24 | 4.8. Notifier generation of NOTIFY requests . . . . . . . . . . 25 | |||
| 4.9 Subscriber processing of NOTIFY requests . . . . . . . . . 27 | 4.9. Subscriber processing of NOTIFY requests . . . . . . . . . 27 | |||
| 4.10 Handling of Forked Requests . . . . . . . . . . . . . . . 27 | 4.10. Handling of Forked Requests . . . . . . . . . . . . . . . 28 | |||
| 4.11 Rate of notifications . . . . . . . . . . . . . . . . . . 27 | 4.11. Rate of notifications . . . . . . . . . . . . . . . . . . 28 | |||
| 4.12 State Agents and Lists . . . . . . . . . . . . . . . . . . 28 | 4.12. State Agents and Lists . . . . . . . . . . . . . . . . . . 28 | |||
| 4.13 Behavior of a Proxy Server . . . . . . . . . . . . . . . . 28 | 4.13. Behavior of a Proxy Server . . . . . . . . . . . . . . . . 28 | |||
| 5. Formal Syntax . . . . . . . . . . . . . . . . . . . . . . . . 28 | 5. Formal Syntax . . . . . . . . . . . . . . . . . . . . . . . . 28 | |||
| 5.1 DRegex . . . . . . . . . . . . . . . . . . . . . . . . . . 28 | 5.1. DRegex . . . . . . . . . . . . . . . . . . . . . . . . . . 29 | |||
| 5.2 KPML Request . . . . . . . . . . . . . . . . . . . . . . . 28 | 5.2. KPML Request . . . . . . . . . . . . . . . . . . . . . . . 29 | |||
| 5.3 KPML Response . . . . . . . . . . . . . . . . . . . . . . 31 | 5.3. KPML Response . . . . . . . . . . . . . . . . . . . . . . 32 | |||
| 6. Enumeration of KPML Status Codes . . . . . . . . . . . . . . . 32 | 6. Enumeration of KPML Status Codes . . . . . . . . . . . . . . . 33 | |||
| 7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 33 | 7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 34 | |||
| 7.1 SIP Event Package Registration . . . . . . . . . . . . . . 33 | 7.1. SIP Event Package Registration . . . . . . . . . . . . . . 34 | |||
| 7.2 MIME Media Type application/kpml-request+xml . . . . . . . 33 | 7.2. MIME Media Type application/kpml-request+xml . . . . . . . 34 | |||
| 7.3 MIME Media Type application/kpml-response+xml . . . . . . 34 | 7.3. MIME Media Type application/kpml-response+xml . . . . . . 35 | |||
| 7.4 URN Sub-Namespace Registration for | 7.4. URN Sub-Namespace Registration for | |||
| urn:ietf:xml:ns:kpml-request . . . . . . . . . . . . . . . 34 | urn:ietf:xml:ns:kpml-request . . . . . . . . . . . . . . . 35 | |||
| 7.5 URN Sub-Namespace Registration for | 7.5. URN Sub-Namespace Registration for | |||
| urn:ietf:xml:ns:kpml-response . . . . . . . . . . . . . . 35 | urn:ietf:xml:ns:kpml-response . . . . . . . . . . . . . . 36 | |||
| 7.6 KPML Request Schema Registration . . . . . . . . . . . . . 35 | 7.6. KPML Request Schema Registration . . . . . . . . . . . . . 37 | |||
| 7.7 KPML Response Schema Registration . . . . . . . . . . . . 35 | 7.7. KPML Response Schema Registration . . . . . . . . . . . . 37 | |||
| 8. Security Considerations . . . . . . . . . . . . . . . . . . . 36 | 8. Security Considerations . . . . . . . . . . . . . . . . . . . 37 | |||
| 9. Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 | 9. Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 | |||
| 9.1 Monitoring for Octothorpe . . . . . . . . . . . . . . . . 37 | 9.1. Monitoring for Octothorpe . . . . . . . . . . . . . . . . 38 | |||
| 9.2 Dial String Collection . . . . . . . . . . . . . . . . . . 37 | 9.2. Dial String Collection . . . . . . . . . . . . . . . . . . 39 | |||
| 10. Call Flow Examples . . . . . . . . . . . . . . . . . . . . . 38 | 10. Call Flow Examples . . . . . . . . . . . . . . . . . . . . . . 40 | |||
| 10.1 Supplemental Digits . . . . . . . . . . . . . . . . . . . 38 | 10.1. Supplemental Digits . . . . . . . . . . . . . . . . . . . 40 | |||
| 10.2 Multiple Applications . . . . . . . . . . . . . . . . . . 42 | 10.2. Multiple Applications . . . . . . . . . . . . . . . . . . 44 | |||
| 11. References . . . . . . . . . . . . . . . . . . . . . . . . . 50 | 11. References . . . . . . . . . . . . . . . . . . . . . . . . . . 52 | |||
| 11.1 Normative References . . . . . . . . . . . . . . . . . . . . 50 | 11.1. Normative References . . . . . . . . . . . . . . . . . . . 52 | |||
| 11.2 Informative References . . . . . . . . . . . . . . . . . . . 51 | 11.2. Informative References . . . . . . . . . . . . . . . . . . 53 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . 52 | Appendix A. Contributors . . . . . . . . . . . . . . . . . . . . 54 | |||
| A. Contributors . . . . . . . . . . . . . . . . . . . . . . . . . 52 | Appendix B. Acknowledgements . . . . . . . . . . . . . . . . . . 54 | |||
| B. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 53 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 55 | |||
| Intellectual Property and Copyright Statements . . . . . . . . 54 | Intellectual Property and Copyright Statements . . . . . . . . . . 56 | |||
| 1. Introduction | 1. Introduction | |||
| This document describes a SIP Event Package "kpml" that enables | This document describes a SIP Event Package "kpml" that enables | |||
| monitoring of DTMF signals and utilizes XML documents referred to as | monitoring of key presses and utilizes XML documents referred to as | |||
| Key Press Markup Language (KPML). KPML is a markup [18] that enables | Key Press Markup Language (KPML). KPML is a markup [18] that enables | |||
| presentation-free User Interfaces as described in the Application | presentation-free User Interfaces as described in the Application | |||
| Interaction Framework [19]. The Key Press Stimulus Package is a SIP | Interaction Framework [19]. The Key Press Stimulus Package is a SIP | |||
| Event Notification Package [5] that uses the SUBSCRIBE and NOTIFY | Event Notification Package [5] that uses the SUBSCRIBE and NOTIFY | |||
| methods of SIP. The subscription filter and notification report | methods of SIP. The subscription filter and notification report | |||
| bodies use the Keypad Markup Language, KPML. | bodies use the Keypad Markup Language, KPML. | |||
| The "kpml" event package requires the definition of two new MIME | The "kpml" event package requires the definition of two new MIME | |||
| types, two new URN Sub-Namespaces, and two Schemas for the KPML | types, two new URN Sub-Namespaces, and two Schemas for the KPML | |||
| Request and the KPML Response. The scope of this package is for | Request and the KPML Response. The scope of this package is for | |||
| collecting supplemental key presses or mid-call key presses | collecting supplemental key presses or mid-call key presses | |||
| (triggers). This capability allows an Application Server service | (triggers). This capability allows an Application Server service | |||
| provider to monitor (filter) for a set of DTMF patterns at a SIP User | provider to monitor (filter) for a set of DTMF patterns at a SIP User | |||
| Agent located either in an end user device or a gateway. | Agent located either in an end user device or a gateway. | |||
| In particular, the "kpml" event package enables "dumb phones" and | In particular, the "kpml" event package enables "dumb phones" and | |||
| "gateways" which receive signals from dumb phones to report user | "gateways" which receive signals from dumb phones to report user key- | |||
| key-press events. Colloquially, this mechanism provides for "digit | press events. Colloquially, this mechanism provides for "digit | |||
| reporting" or "Dual-Tone Multi-Frequency (DTMF) reporting." The | reporting" or "Dual-Tone Multi-Frequency (DTMF) reporting." The | |||
| capability eliminates the need for "hair-pinning" (routing media into | capability eliminates the need for "hair-pinning" (routing media into | |||
| and then out of the same device) through a Media Server or | and then out of the same device) through a Media Server or | |||
| duplicating all the DTMF events, when an Application Server needs to | duplicating all the DTMF events, when an Application Server needs to | |||
| trigger mid-call service processing on DTMF digit patterns. | trigger mid-call service processing on DTMF digit patterns. | |||
| A goal of KPML is to fit in an extremely small memory and processing | A goal of KPML is to fit in an extremely small memory and processing | |||
| footprint. | footprint. | |||
| The name of the XML document, KPML, reflects its legacy support role. | The name of the XML document, KPML, reflects its legacy support role. | |||
| The public switched telephony network (PSTN) accomplished signaling | The public switched telephony network (PSTN) accomplished signaling | |||
| skipping to change at page 6, line 7 ¶ | skipping to change at page 6, line 7 ¶ | |||
| RFC2833 tones are ideal for conveying telephone-events point-to-point | RFC2833 tones are ideal for conveying telephone-events point-to-point | |||
| in an RTP stream, as in the context of straightforward sessions like | in an RTP stream, as in the context of straightforward sessions like | |||
| a 2-party call or simple, centrally mixed conference. However, there | a 2-party call or simple, centrally mixed conference. However, there | |||
| are other environments where additional or alternative requirements | are other environments where additional or alternative requirements | |||
| are needed. These other environments include protocol translation | are needed. These other environments include protocol translation | |||
| and complex call control. | and complex call control. | |||
| An interested application could request notifications of every key | An interested application could request notifications of every key | |||
| press. However, many of the use cases for such signaling show that | press. However, many of the use cases for such signaling show that | |||
| many applications are interested in only one or a few keystrokes. | most applications are interested in only one or a few keystrokes. | |||
| Thus a mechanism is needed for specifying to the user's interface | Thus a mechanism is needed for specifying to the user's interface | |||
| what stimuli the application requires. | what stimuli the application requires. | |||
| 2. Protocol Overview | 2. Protocol Overview | |||
| The "kpml" event package uses explicit subscription notification | The "kpml" event package uses explicit subscription notification | |||
| requests using the SIP SUBSCRIBE and NOTIFY methods. An Application | requests using the SIP SUBSCRIBE and NOTIFY methods. An Application | |||
| that wants to collect digits, creates an application/kpml-request+xml | that wants to collect digits creates an application/kpml-request+xml | |||
| document with the digit patterns of interest to the Application, and | document with the digit patterns of interest to the Application, and | |||
| places this document in its SUBSCRIBE request. SIP SUBSCRIBE | places this document in its SUBSCRIBE request. SIP SUBSCRIBE | |||
| messages are routed to the User Interface using standard SIP request | messages are routed to the User Interface using standard SIP request | |||
| routing. KPML Subscriptions do not fork, since they are always sent | routing. KPML Subscriptions do not fork. The KPML request contained | |||
| to a SIP URI that has GRUU [8] properties. The KPML request | in the SUBSCRIBE message identifies the target media stream by | |||
| contained in the SUBSCRIBE message identifies the target media stream | referencing the dialog identifiers corresponding to the session | |||
| by referencing the dialog identifiers corresponding to the session | ||||
| responsible for the media stream. Once a subscription is | responsible for the media stream. Once a subscription is | |||
| established, the User Interface sends application/kpml-response+xml | established, the User Interface sends application/kpml-response+xml | |||
| documents in NOTIFY requests when digits are collected, or timeouts | documents in NOTIFY requests when digits are collected or timeouts or | |||
| or errors occur. | errors occur. | |||
| A KPML subscription can be persistent or one-shot. Persistent | A KPML subscription can be persistent or one-shot. Persistent | |||
| requests are active until either the subscription terminates, the | requests are active until either the subscription terminates, the | |||
| Application replaces the request, or the Application deletes the | Application replaces the request or the Application deletes the | |||
| request by sending a null document on the dialog, or the Application | request by sending a null document on the dialog, or the Application | |||
| explicitly deletes the subscription by sending a SUBCRIBE with an | explicitly deletes the subscription by sending a SUBCRIBE with an | |||
| expires value of zero (0). | expires value of zero (0). | |||
| One-shot requests terminate the subscription upon the receipt of DTMF | One-shot requests terminate the subscription upon the receipt of DTMF | |||
| values which provide a match. The "persist" KPML element specifies | values which provide a match. The "persist" KPML element specifies | |||
| whether the subscription remains active for the duration specified in | whether the subscription remains active for the duration specified in | |||
| the SUBSCRIBE message or if it automatically terminates upon a | the SUBSCRIBE message or if it automatically terminates upon a | |||
| pattern match. | pattern match. | |||
| NOTIFY messages can contain XML documents. If the User Interface | NOTIFY messages can contain XML documents. If the User Interface | |||
| matches a digitmap, the NOTIFY message (response) contains an XML | matches a digitmap, the NOTIFY message (response) contains an XML | |||
| document that indicates the User Input detected and whether the User | document that indicates the User Input detected and whether the User | |||
| Interface suppressed the representation of User Input, such as tones, | Interface suppressed the representation of User Input, such as tones, | |||
| or RFC2833, from the media streams. If the User Interface | or RFC2833, from the media streams. If the User Interface | |||
| encountered an error condition, such as a timeout, this will also be | encountered an error condition, such as a timeout, this will also be | |||
| reported. | reported. | |||
| 3. Key Concepts | 3. Key Concepts | |||
| 3.1 Subscription Duration | 3.1. Subscription Duration | |||
| KPML recognizes two types of subscriptions: one-shot and persistent. | KPML recognizes two types of subscriptions: one-shot and persistent. | |||
| Persistent subscriptions have two sub-types: continuous notify and | Persistent subscriptions have two sub-types: continuous notify and | |||
| single-notify. | single-notify. | |||
| One-shot subscriptions terminate after a pattern match occurs and a | One-shot subscriptions terminate after a pattern match occurs and a | |||
| report is issued in a NOTIFY message. If the User Interface detects | report is issued in a NOTIFY message. If the User Interface detects | |||
| a key press stimulus that triggers a one-shot KPML event, then the | a key press stimulus that triggers a one-shot KPML event, then the | |||
| User Interface (notifier) MUST set the "Subscription-State" in the | User Interface (notifier) MUST set the "Subscription-State" in the | |||
| NOTIFY message to "terminated". At this point the User Interface | NOTIFY message to "terminated". At this point the User Interface | |||
| skipping to change at page 7, line 26 ¶ | skipping to change at page 7, line 26 ¶ | |||
| Persistent subscriptions remain active at the User Interface, even | Persistent subscriptions remain active at the User Interface, even | |||
| after a match. For continuous notify persistent subscriptions, the | after a match. For continuous notify persistent subscriptions, the | |||
| User Interface will emit a NOTIFY message whenever the User Input | User Interface will emit a NOTIFY message whenever the User Input | |||
| matches a subscribed pattern. For single-notify persistent | matches a subscribed pattern. For single-notify persistent | |||
| subscriptions, the user device will emit a NOTIFY message at the | subscriptions, the user device will emit a NOTIFY message at the | |||
| first match, but will not emit further NOTIFY messages until the | first match, but will not emit further NOTIFY messages until the | |||
| Application issues a new subscription request on the subscription | Application issues a new subscription request on the subscription | |||
| dialog. | dialog. | |||
| NOTE: The single-notify persistent subscription enables lock step | NOTE: The single-notify persistent subscription enables lock step | |||
| (race-free) quarantining of User Input between different digit | (race-free) quarantining of User Input between different digit | |||
| maps. | maps. | |||
| The "persist" attribute to the <pattern> tag in the KPML subscription | The "persist" attribute to the <pattern> tag in the KPML subscription | |||
| body affects the lifetime of the subscription. | body affects the lifetime of the subscription. | |||
| If the "persist" attribute is "one-shot", then once there is a match | If the "persist" attribute is "one-shot", then once there is a match | |||
| (or no match is possible), the subscription ends after the User | (or no match is possible), the subscription ends after the User | |||
| Interface notifies the Application. | Interface notifies the Application. | |||
| If the "persist" attribute is "persist" or "single-notify", then the | If the "persist" attribute is "persist" or "single-notify", then the | |||
| subscription ends when the Application explicitly ends it or the User | subscription ends when the Application explicitly ends it or the User | |||
| Interface terminates the subscription. | Interface terminates the subscription. | |||
| If the User Interface does not support persistent subscriptions, it | If the User Interface does not support persistent subscriptions, it | |||
| returns a NOTIFY message with the KPML status code set to 531. If | returns a NOTIFY message with the KPML status code set to 531. If | |||
| there are digits in the buffer and the digits match an expression in | there are digits in the buffer and the digits match an expression in | |||
| the SUBSCRIBE filter, the User Interface prepares the appropriate | the SUBSCRIBE filter, the User Interface prepares the appropriate | |||
| NOTIFY response message. | NOTIFY response message. | |||
| Note the values of the "persist" attribute are case sensitive. | The values of the "persist" attribute are case sensitive. | |||
| 3.2 Timers | 3.2. Timers | |||
| To address the various key press collection scenarios, three timers | To address the various key press collection scenarios, three timers | |||
| are defined. They are the extra, critical, and inter-digit timers. | are defined. They are the extra, critical, and inter-digit timers. | |||
| o The inter-digit timer is the maximum time to wait between digits. | o The inter-digit timer is the maximum time to wait between digits. | |||
| Note: unlike MGCP [15] or H.248 [16], there is no start timer, as | Note: unlike MGCP [15] or H.248 [16], there is no start timer, as | |||
| that concept does not apply in the KPML context. | that concept does not apply in the KPML context. | |||
| o The critical timer is the time to wait for another digit if the | o The critical timer is the time to wait for another digit if the | |||
| collected digits can match more than one potential pattern. | collected digits can match more than one potential pattern. | |||
| o The extra timer is the time to wait for another digit if the | o The extra timer is the time to wait for another digit if the | |||
| collected digits can only match one potential pattern, but a | collected digits can only match one potential pattern, but a | |||
| skipping to change at page 9, line 22 ¶ | skipping to change at page 9, line 26 ¶ | |||
| specify the extra-digit timeout as an integer number of milliseconds | specify the extra-digit timeout as an integer number of milliseconds | |||
| by using the "extradigittimer" attribute to the <pattern> tag. The | by using the "extradigittimer" attribute to the <pattern> tag. The | |||
| default is 500 milliseconds. If there is no enterkey specified, then | default is 500 milliseconds. If there is no enterkey specified, then | |||
| the User Interface MAY default the exteradigittimer to zero. | the User Interface MAY default the exteradigittimer to zero. | |||
| The purpose of the extra-digit timeout is to allow the User Interface | The purpose of the extra-digit timeout is to allow the User Interface | |||
| to collect the enterkey. Without this feature, the User Interface | to collect the enterkey. Without this feature, the User Interface | |||
| would match the pattern, and the enterkey would be buffered and | would match the pattern, and the enterkey would be buffered and | |||
| returned as the next pattern. | returned as the next pattern. | |||
| 3.3 Pattern Matches | 3.3. Pattern Matches | |||
| During the subscription lifetime, the User Interface may detect a key | During the subscription lifetime, the User Interface may detect a key | |||
| press stimulus that triggers a KPML event. In this case, the User | press stimulus that triggers a KPML event. In this case, the User | |||
| Interface (notifier) MUST return the appropriate KPML document. | Interface (notifier) MUST return the appropriate KPML document. | |||
| The pattern matching logic works as follows. KPML User Interfaces | The pattern matching logic works as follows. KPML User Interfaces | |||
| MUST follow the logic presented in this section so that different | MUST follow the logic presented in this section so that different | |||
| implementations will perform deterministically on the same KPML | implementations will perform deterministically on the same KPML | |||
| document given the same User Input. | document given the same User Input. | |||
| skipping to change at page 10, line 17 ¶ | skipping to change at page 10, line 17 ¶ | |||
| xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | |||
| xsi:schemaLocation= | xsi:schemaLocation= | |||
| "urn:ietf:params:xml:ns:kpml-request kpml-request.xsd" | "urn:ietf:params:xml:ns:kpml-request kpml-request.xsd" | |||
| version="1.0"> | version="1.0"> | |||
| <pattern> | <pattern> | |||
| <regex>0</regex> | <regex>0</regex> | |||
| <regex>011</regex> | <regex>011</regex> | |||
| </pattern> | </pattern> | |||
| </kpml-request> | </kpml-request> | |||
| Figure 1: Greedy Matching | Figure 1: Greedy Matching | |||
| In Figure 1, if we were to match on the first found pattern, the | In Figure 1, if we were to match on the first found pattern, the | |||
| string "011" would never match. This happens because the "0" rule | string "011" would never match. This happens because the "0" rule | |||
| would match first. | would match first. | |||
| While this behavior is what most applications desire, it does come at | While this behavior is what most applications desire, it does come at | |||
| a cost. Consider the following KPML document snippet. | a cost. Consider the following KPML document snippet. | |||
| <regex>x{7}</regex> | <regex>x{7}</regex> | |||
| <regex>x{10}</regex> | <regex>x{10}</regex> | |||
| Figure 2: Timeout Matching | Figure 2: Timeout Matching | |||
| Figure 2 shows a typical North American dial plan. From an | Figure 2 shows a typical North American dial plan. From an | |||
| application perspective, users expect a seven-digit number to respond | application perspective, users expect a seven-digit number to respond | |||
| quickly, not waiting the typical inter-digit critical timer (usually | quickly, not waiting the typical inter-digit critical timer (usually | |||
| four seconds). Conversely, the User does not want the system to cut | four seconds). Conversely, the User does not want the system to cut | |||
| off their ten-digit number at seven digits because they did not enter | off their ten-digit number at seven digits because they did not enter | |||
| the number fast enough. | the number fast enough. | |||
| One approach to this problem is to have an explicit dial string | One approach to this problem is to have an explicit dial string | |||
| terminator. Often, it is the pound key (#). Now, consider the | terminator. Often, it is the pound key (#). Now, consider the | |||
| following snippet. | following snippet. | |||
| <regex>x{7}#</regex> | <regex>x{7}#</regex> | |||
| <regex>x{10}#</regex> | <regex>x{10}#</regex> | |||
| Figure 3: Timeout Matching with Enter | Figure 3: Timeout Matching with Enter | |||
| The problem with the approach in Figure 3 is that the "#" will appear | The problem with the approach in Figure 3 is that the "#" will appear | |||
| in the returned dial string. Moreover, one often wants to allow the | in the returned dial string. Moreover, one often wants to allow the | |||
| user to enter the string without the dial string termination key. In | user to enter the string without the dial string termination key. In | |||
| addition, using explicit matching on the key means one has to double | addition, using explicit matching on the key means one has to double | |||
| the number of patterns, e.g., "x{7}", "x{7}#", "x{10}", and "x{10}#". | the number of patterns, e.g., "x{7}", "x{7}#", "x{10}", and "x{10}#". | |||
| The approach used in KPML is to have an explicit "Enter Key", as | The approach used in KPML is to have an explicit "Enter Key", as | |||
| shown in the following snippet. | shown in the following snippet. | |||
| <pattern enterkey="#"> | <pattern enterkey="#"> | |||
| <regex>x{7}</regex> | <regex>x{7}</regex> | |||
| <regex>x{10}</regex> | <regex>x{10}</regex> | |||
| </pattern> | </pattern> | |||
| Figure 4: Timeout Matching with Enter Key | Figure 4: Timeout Matching with Enter Key | |||
| In Figure 4, the enterkey attribute to the <pattern> tag specifies a | In Figure 4, the enterkey attribute to the <pattern> tag specifies a | |||
| string that terminates a pattern. In this situation, if the user | string that terminates a pattern. In this situation, if the user | |||
| enters seven digits followed by the "#" key, the pattern matches (or | enters seven digits followed by the "#" key, the pattern matches (or | |||
| fails) immediately. KPML indicates a terminated nomatch with a KPML | fails) immediately. KPML indicates a terminated nomatch with a KPML | |||
| status code 402. | status code 402. | |||
| NOTE: The enterkey is a string. The enterkey can be a sequence | NOTE: The enterkey is a string. The enterkey can be a sequence of | |||
| of key presses, such as "**". | key presses, such as "**". | |||
| Some patterns look for long duration key presses. For example, some | Some patterns look for long duration key presses. For example, some | |||
| applications look for long "#" or long "*". | applications look for long "#" or long "*". | |||
| KPML uses the "L" modifier to <regex> characters to indicate long key | KPML uses the "L" modifier to <regex> characters to indicate long key | |||
| presses. The following KPML document looks for a long pound of at | presses. The following KPML document looks for a long pound of at | |||
| least 3 seconds. | least 3 seconds. | |||
| <?xml version="1.0" encoding="UTF-8"?> | <?xml version="1.0" encoding="UTF-8"?> | |||
| <kpml-request xmlns="urn:ietf:params:xml:ns:kpml-request" | <kpml-request xmlns="urn:ietf:params:xml:ns:kpml-request" | |||
| xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | |||
| xsi:schemaLocation= | xsi:schemaLocation= | |||
| "urn:ietf:params:xml:ns:kpml-request kpml-request.xsd" | "urn:ietf:params:xml:ns:kpml-request kpml-request.xsd" | |||
| version="1.0"> | version="1.0"> | |||
| <pattern long="3000"> | <pattern long="3000"> | |||
| <regex>L#</regex> | <regex>L#</regex> | |||
| </pattern> | </pattern> | |||
| </kpml-request> | </kpml-request> | |||
| Long Pound | ||||
| The request can specify what constitutes "long" by setting the long | The request can specify what constitutes "long" by setting the long | |||
| attribute to the <pattern>. This attribute is an integer | attribute to the <pattern>. This attribute is an integer | |||
| representing the number of milliseconds. If the user presses a key | representing the number of milliseconds. If the user presses a key | |||
| for longer than "long" milliseconds, the Long modifier is true. The | for longer than "long" milliseconds, the Long modifier is true. The | |||
| default length of the long attribute is 2500 milliseconds. | default length of the long attribute is 2500 milliseconds. | |||
| User Interfaces MUST distinguish between long and short input when | User Interfaces MUST distinguish between long and short input when | |||
| the KPML document specifies both in a document. However, if there is | the KPML document specifies both in a document. However, if there is | |||
| not a corresponding long key press pattern in a document, the User | not a corresponding long key press pattern in a document, the User | |||
| Interface MUST match the key press pattern irrespective of the length | Interface MUST match the key press pattern irrespective of the length | |||
| skipping to change at page 12, line 15 ¶ | skipping to change at page 12, line 16 ¶ | |||
| As an example, in the following snippet in Figure 6, the User | As an example, in the following snippet in Figure 6, the User | |||
| Interface discriminates between a long "*" and a normal "*", but any | Interface discriminates between a long "*" and a normal "*", but any | |||
| length "#" will match the pattern. | length "#" will match the pattern. | |||
| <pattern> | <pattern> | |||
| <regex tag="short_star">*</regex> | <regex tag="short_star">*</regex> | |||
| <regex tag="long_star">L*</regex> | <regex tag="long_star">L*</regex> | |||
| <regex>#</regex> | <regex>#</regex> | |||
| </pattern> | </pattern> | |||
| Figure 6: Long and Short Matching | Figure 6: Long and Short Matching | |||
| Some User Interfaces are unable to present long key presses. An | Some User Interfaces are unable to present long key presses. An | |||
| example is an old private branch exchange (PBX) phone set that emits | example is an old private branch exchange (PBX) phone set that emits | |||
| fixed-length tones when the user presses a key. To address this | fixed-length tones when the user presses a key. To address this | |||
| issue, the User Interface MAY interpret a succession of presses of a | issue, the User Interface MAY interpret a succession of presses of a | |||
| single key to be equivalent to a long key press of the same key. The | single key to be equivalent to a long key press of the same key. The | |||
| Application indicates it wants this behavior by setting the | Application indicates it wants this behavior by setting the | |||
| "longrepeat" attribute to the <pattern> to "true". | "longrepeat" attribute to the <pattern> to "true". | |||
| The KPML document specifies if the patterns are to be persistent by | The KPML document specifies if the patterns are to be persistent by | |||
| skipping to change at page 13, line 6 ¶ | skipping to change at page 13, line 8 ¶ | |||
| Interface MUST chose the first expression listed in the subscription | Interface MUST chose the first expression listed in the subscription | |||
| KPML document based on KPML document order. | KPML document based on KPML document order. | |||
| If the User Interface cannot support multiple regular expressions in | If the User Interface cannot support multiple regular expressions in | |||
| a pattern request, the User Interface MUST return a KPML document | a pattern request, the User Interface MUST return a KPML document | |||
| with the KPML status code set to 532. If the User Interface cannot | with the KPML status code set to 532. If the User Interface cannot | |||
| support the number of regular expressions in the pattern request, the | support the number of regular expressions in the pattern request, the | |||
| User Interface MUST return a KPML document with the KPML status code | User Interface MUST return a KPML document with the KPML status code | |||
| set to 534. | set to 534. | |||
| NOTE: We could mandate a minimum number of regular expressions a | NOTE: We could mandate a minimum number of regular expressions a | |||
| User Interface must support per subscription request and globally. | User Interface must support per subscription request and globally. | |||
| However, such minimums tend to become designed-in, hard-coded | However, such minimums tend to become designed-in, hard-coded | |||
| limits. For guidance, one should be able to easily handle tens of | limits. For guidance, one should be able to easily handle tens of | |||
| expressions per subscription and thousands globally. A good | expressions per subscription and thousands globally. A good | |||
| implementation should have effectively no limits. That said, to | implementation should have effectively no limits. That said, to | |||
| counter possible denial of service attacks, implementers of User | counter possible denial of service attacks, implementers of User | |||
| Interfaces should be aware of the 534 and 501 status codes, and | Interfaces should be aware of the 534 and 501 status codes, and | |||
| feel free to use them. | feel free to use them. | |||
| 3.4 Digit Suppression | 3.4. Digit Suppression | |||
| Under basic operation, a KPML User Interface will transmit in-band | Under basic operation, a KPML User Interface will transmit in-band | |||
| tones (RFC2833 [13] or actual tone) in parallel with User Input | tones (RFC2833 [13] or actual tone) in parallel with User Input | |||
| reporting. | reporting. | |||
| NOTE: If KPML did not have this behavior, then a User Interface | NOTE: If KPML did not have this behavior, then a User Interface | |||
| executing KPML could easily break called applications. For | executing KPML could easily break called applications. For | |||
| example, take a personal assistant that uses "*9" for attention. | example, take a personal assistant that uses "*9" for attention. | |||
| If the user presses the "*" key, KPML will hold the digit, looking | If the user presses the "*" key, KPML will hold the digit, looking | |||
| for the "9". What if the user just enters a "*" key, possibly | for the "9". What if the user just enters a "*" key, possibly | |||
| skipping to change at page 14, line 21 ¶ | skipping to change at page 14, line 23 ¶ | |||
| matched and the User Interface is unable to suppress the User Input, | matched and the User Interface is unable to suppress the User Input, | |||
| it MUST set the "suppressed" attribute to "false". | it MUST set the "suppressed" attribute to "false". | |||
| A KPML User Interface MAY perform suppression. If it is not capable | A KPML User Interface MAY perform suppression. If it is not capable | |||
| of suppression, it ignores the suppression attribute. It MUST set | of suppression, it ignores the suppression attribute. It MUST set | |||
| the "suppressed" attribute to "false". In this case, the pattern to | the "suppressed" attribute to "false". In this case, the pattern to | |||
| match is the concatenated pattern of pre+value. | match is the concatenated pattern of pre+value. | |||
| At some point in time, the User Interface will collect enough User | At some point in time, the User Interface will collect enough User | |||
| Input to the point it matches a <pre> pattern. The interdigittimer | Input to the point it matches a <pre> pattern. The interdigittimer | |||
| attribute indicates how long to wait once the user enters stimulus | attribute indicates how long to wait for the user enters stimulus | |||
| before reporting a time-out error. If the interdigittimer expires, | before reporting a time-out error. If the interdigittimer expires, | |||
| the User Interface MUST issue a time-out report, transmit the | the User Interface MUST issue a time-out report, transmit the | |||
| suppressed User Input on the media stream, and stop suppression. | suppressed User Input on the media stream, and stop suppression. | |||
| Once the User Interface detects a match and it sends a NOTIFY request | Once the User Interface detects a match and it sends a NOTIFY request | |||
| to report the User Input, the User Interface MUST stop suppression. | to report the User Input, the User Interface MUST stop suppression. | |||
| Clearly, if subsequent User Input matches another <pre> expression, | Clearly, if subsequent User Input matches another <pre> expression, | |||
| then the User Interface MUST start suppression. | then the User Interface MUST start suppression. | |||
| After suppression begins, it may become clear that a match will not | After suppression begins, it may become clear that a match will not | |||
| skipping to change at page 14, line 50 ¶ | skipping to change at page 15, line 5 ¶ | |||
| sensible inter-digit timer. This is because an errant dot (".") | sensible inter-digit timer. This is because an errant dot (".") | |||
| may suppress digit sending forever. | may suppress digit sending forever. | |||
| Applications should be very careful to indicate suppression only when | Applications should be very careful to indicate suppression only when | |||
| they are fairly sure the user will enter a digit string that will | they are fairly sure the user will enter a digit string that will | |||
| match the regular expression. In addition, applications should deal | match the regular expression. In addition, applications should deal | |||
| with situations such as no-match or time-out. This is because the | with situations such as no-match or time-out. This is because the | |||
| User Interface will hold digits, which will have obvious User | User Interface will hold digits, which will have obvious User | |||
| Interface issues in the case of a failure. | Interface issues in the case of a failure. | |||
| 3.5 User Input Buffer Behavior | 3.5. User Input Buffer Behavior | |||
| User Interfaces MUST buffer User Input upon receipt of an | User Interfaces MUST buffer User Input upon receipt of an | |||
| authenticated and accepted subscription. Subsequent KPML documents | authenticated and accepted subscription. Subsequent KPML documents | |||
| apply their patterns against the buffered User Input. Some | apply their patterns against the buffered User Input. Some | |||
| applications use modal interfaces where the first few key presses | applications use modal interfaces where the first few key presses | |||
| determine what the following key presses mean. For a novice user, | determine what the following key presses mean. For a novice user, | |||
| the application may play a prompt describing what mode the | the application may play a prompt describing what mode the | |||
| application is in. However, "power users" often barge through the | application is in. However, "power users" often barge through the | |||
| prompt. | prompt. | |||
| skipping to change at page 15, line 49 ¶ | skipping to change at page 16, line 5 ¶ | |||
| User Interface receives a string it does not understand, it MUST | User Interface receives a string it does not understand, it MUST | |||
| treat the string as a no-op. | treat the string as a no-op. | |||
| If the user presses a key that cannot match any pattern within a | If the user presses a key that cannot match any pattern within a | |||
| <regex> tag, the User Interface MUST discard all buffered key presses | <regex> tag, the User Interface MUST discard all buffered key presses | |||
| up to and including the current key press from consideration against | up to and including the current key press from consideration against | |||
| the current or future KPML documents on a given dialog. However, as | the current or future KPML documents on a given dialog. However, as | |||
| described above, once there is a match, the User Interface buffers | described above, once there is a match, the User Interface buffers | |||
| any key presses the user entered subsequent to the match. | any key presses the user entered subsequent to the match. | |||
| NOTE: This behavior allows for applications to only receive User | NOTE: This behavior allows for applications to receive only User | |||
| Input that is of interest to them. For example, a pre-paid | Input that is of interest to them. For example, a pre-paid | |||
| application only wishes to monitor for a long pound. If the user | application only wishes to monitor for a long pound. If the user | |||
| enters other stimulus, presumably for other applications, the | enters other stimulus, presumably for other applications, the pre- | |||
| pre-paid application does not want notification of that User | paid application does not want notification of that User Input. | |||
| Input. This feature is fundamentally different than the behavior | This feature is fundamentally different than the behavior of TDM- | |||
| of TDM-based equipment where every application receives every key | based equipment where every application receives every key press. | |||
| press. | ||||
| To limit reports to only complete matches, set the "nopartial" | To limit reports to only complete matches, set the "nopartial" | |||
| attribute to the <pattern> tag to "true". In this case, the User | attribute to the <pattern> tag to "true". In this case, the User | |||
| Interface attempts to match a rolling window over the collected User | Interface attempts to match a rolling window over the collected User | |||
| input. | input. | |||
| KPML subscriptions are independent. Thus it is not possible for the | KPML subscriptions are independent. Thus it is not possible for the | |||
| current document to know if a following document will enable barging | current document to know if a following document will enable barging | |||
| or want User Input flushed. Therefore, the User Interface MUST | or want User Input flushed. Therefore, the User Interface MUST | |||
| buffer all User Input, subject to the forced_flush caveat described | buffer all User Input, subject to the forced_flush caveat described | |||
| skipping to change at page 16, line 40 ¶ | skipping to change at page 16, line 43 ¶ | |||
| MUST follow the procedures in Section 5.3. If there is no match, the | MUST follow the procedures in Section 5.3. If there is no match, the | |||
| interpreter MUST flush all of the collected User Input. | interpreter MUST flush all of the collected User Input. | |||
| Given the potential for needing an infinite buffer for User Input, | Given the potential for needing an infinite buffer for User Input, | |||
| the User Interface MAY discard the oldest User Input from the buffer. | the User Interface MAY discard the oldest User Input from the buffer. | |||
| If the User Interface discards digits, when the User Interface issues | If the User Interface discards digits, when the User Interface issues | |||
| a KPML notification, it MUST set the forced_flush attribute of the | a KPML notification, it MUST set the forced_flush attribute of the | |||
| <response> tag to "true". For future use, the Application MUST | <response> tag to "true". For future use, the Application MUST | |||
| consider any non-null value, other than "false" that it does not | consider any non-null value, other than "false" that it does not | |||
| understand, to be the same as "true". | understand, to be the same as "true". | |||
| NOTE: The requirement to buffer all User Input for the entire | NOTE: The requirement to buffer all User Input for the entire | |||
| length of the session is not really onerous under normal | length of the session is not Onerous under normal operation. For | |||
| operation. For example, if one has a gateway with 8,000 sessions, | example, if one has a gateway with 8,000 sessions, and the gateway | |||
| and the gateway buffers 50 key presses on each session, the | buffers 50 key presses on each session, the requirement is only | |||
| requirement is only 400,000 bytes, assuming one byte per key | 400,000 bytes, assuming one byte per key press. | |||
| press. | ||||
| Unless there is a suppress indicator in the digit map, it is not | Unless there is a suppress indicator in the digit map, it is not | |||
| possible to know if the User Input is for local KPML processing or | possible to know if the User Input is for local KPML processing or | |||
| for other recipients of the media stream. Thus, in the absence of a | for other recipients of the media stream. Thus, in the absence of a | |||
| suppression indicator, the User Interface transmits the User Input to | suppression indicator, the User Interface transmits the User Input to | |||
| the far end in real time, using either RFC2833, generating the | the far end in real time, using either RFC2833, generating the | |||
| appropriate tones, or both. | appropriate tones, or both. | |||
| 3.6 DRegex | 3.6. DRegex | |||
| 3.6.1 Overview | 3.6.1. Overview | |||
| This subsection is informative in nature. | This subsection is informative in nature. | |||
| The Digit REGular EXpression (DRegex) syntax is a telephony-oriented | The Digit REGular EXpression (DRegex) syntax is a telephony-oriented | |||
| mapping of POSIX Extended Regular Expressions (ERE) [17]. | mapping of POSIX Extended Regular Expressions (ERE) [17]. | |||
| KPML does not use full POSIX ERE for the following reasons. | KPML does not use full POSIX ERE for the following reasons. | |||
| o KPML will often run on high density or extremely low power and | o KPML will often run on high density or extremely low power and | |||
| memory footprint devices. | memory footprint devices. | |||
| o Telephony application convention uses the star symbol ("*") for | o Telephony application convention uses the star symbol ("*") for | |||
| skipping to change at page 17, line 41 ¶ | skipping to change at page 17, line 42 ¶ | |||
| expressions (<regex> elements). Thus it is straightforward to | expressions (<regex> elements). Thus it is straightforward to | |||
| have pattern alternatives (use multiple <regex> elements) without | have pattern alternatives (use multiple <regex> elements) without | |||
| the problems associated with the alternation operator ("|"). Thus | the problems associated with the alternation operator ("|"). Thus | |||
| DRegex does not support the POSIX alternation operator. | DRegex does not support the POSIX alternation operator. | |||
| o DRegex includes character classes (characters enclosed in square | o DRegex includes character classes (characters enclosed in square | |||
| brackets). However, the negation operator inside a character | brackets). However, the negation operator inside a character | |||
| class only operates on numbers. That is, a negation class | class only operates on numbers. That is, a negation class | |||
| implicitly includes A-D, *, and #. Including A-D, *, and # in a | implicitly includes A-D, *, and #. Including A-D, *, and # in a | |||
| negation operator is a no-op. Those familiar with POSIX would | negation operator is a no-op. Those familiar with POSIX would | |||
| expect negation of the digits 4 and 5, e.g., "[^45]", to include | expect negation of the digits 4 and 5, e.g., "[^45]", to include | |||
| all other characters (including A-D, *, and #), while those | all other characters (including A-D, R, *, and #), while those | |||
| familiar with telephony digit maps would expect negation to | familiar with telephony digit maps would expect negation to | |||
| implicitly exclude non-digit characters. Since the complete | implicitly exclude non-digit characters. Since the complete | |||
| character set of DRegex is very small, constructing a negation | character set of DRegex is very small, constructing a negation | |||
| class using A-D, *, and # requires the user to specify the | class using A-D, R, *, and # requires the user to specify the | |||
| positive inverse mapping. For example, to specify all key | positive inverse mapping. For example, to specify all key | |||
| presses, including A-D and *, except #, the specification would be | presses, including A-D and *, except #, the specification would be | |||
| "[0-9A-D*]" instead of "[^#]". | "[0-9A-D*]" instead of "[^#R]". | |||
| The following table shows the mapping from DRegex to POSIX ERE. | The following table shows the mapping from DRegex to POSIX ERE. | |||
| +--------+-----------+ | +--------+-----------+ | |||
| | DRegex | POSIX ERE | | | DRegex | POSIX ERE | | |||
| +--------+-----------+ | +--------+-----------+ | |||
| | * | \* | | | * | \* | | |||
| | . | * | | | . | * | | |||
| | x | [0-9] | | | x | [0-9] | | |||
| | [xc] | [0-9c] | | | [xc] | [0-9c] | | |||
| +--------+-----------+ | +--------+-----------+ | |||
| Table 1: DRegex to POSIX ERE Mapping | Table 1: DRegex to POSIX ERE Mapping | |||
| The first substitution, which replaces a star for an escaped star, is | The first substitution, which replaces a star for an escaped star, is | |||
| because telephony application designers are used to using the star | because telephony application designers are used to using the star | |||
| for the (very common) star key. Requiring an escape sequence for | for the (very common) star key. Requiring an escape sequence for | |||
| this common pattern would be error prone. In addition, the usage | this common pattern would be error prone. In addition, the usage | |||
| found in DRegex is the same as found in MGCP [15] and H.248.1 [16]. | found in DRegex is the same as found in MGCP [15] and H.248.1 [16]. | |||
| Likewise, the use of the dot instead of star is common usage from | Likewise, the use of the dot instead of star is common usage from | |||
| MGCP and H.248.1, and reusing the star in this context would also be | MGCP and H.248.1, and reusing the star in this context would also be | |||
| confusing and error prone. | confusing and error prone. | |||
| The "x" character is a common indicator of the digits 0 through 9. | The "x" character is a common indicator of the digits 0 through 9. | |||
| We use it here, continuing the convention. Clearly, for the case | We use it here, continuing the convention. Clearly, for the case | |||
| "[xc]", where c is any character, the substitution is not a blind | "[xc]", where c is any character, the substitution is not a blind | |||
| replacement of "[0-9]" for "x", as that would result in "[[0-9]c]", | replacement of "[0-9]" for "x", as that would result in "[[0-9]c]", | |||
| which is not a legal POSIX ERE. Rather, the substitution for "[xc]" | which is not a legal POSIX ERE. Rather, the substitution for "[xc]" | |||
| is "[0-9c]". | is "[0-9c]". | |||
| NOTE: "x" does not include the characters *, #, nor A through D. | NOTE: "x" does not include the characters *, #, R, nor A through | |||
| D. | ||||
| Users need to take care not to confuse the DRegex syntax with POSIX | Users need to take care not to confuse the DRegex syntax with POSIX | |||
| EREs. They are NOT identical. In particular there are many features | EREs. They are NOT identical. In particular there are many features | |||
| of POSIX EREs that DRegex does not support. | of POSIX EREs that DRegex does not support. | |||
| As an implementation note, if one makes the substitutions described | As an implementation note, if one makes the substitutions described | |||
| in the above table, then a standard POSIX ERE engine can parse the | in the above table, then a standard POSIX ERE engine can parse the | |||
| digit string. However, the mapping does not work in the reverse | digit string. However, the mapping does not work in the reverse | |||
| (POSIX ERE to DRegex) direction. DRegex only implements the | (POSIX ERE to DRegex) direction. DRegex only implements the | |||
| normative behavior described below. | normative behavior described below. | |||
| 3.6.2 Operation | 3.6.2. Operation | |||
| White space is removed before parsing DRegex. This enables sensible | White space is removed before parsing DRegex. This enables sensible | |||
| pretty printing in XML without affecting the meaning of the DRegex | pretty printing in XML without affecting the meaning of the DRegex | |||
| string. | string. | |||
| The following rules demonstrate the use of DRegex in KPML. | The following rules demonstrate the use of DRegex in KPML. | |||
| +---------------------------------+---------------------------------+ | +---------+---------------------------------------------------------+ | |||
| | Entity | Matches | | | Entity | Matches | | |||
| +---------------------------------+---------------------------------+ | +---------+---------------------------------------------------------+ | |||
| | character | digits 0-9, *, #, and A-D (case | | | c | digits 0-9, *, #, R, and A-D (case insensitive) | | |||
| | | insensitive) | | | * | the * character | | |||
| | * | the * character | | | # | the # character | | |||
| | # | the # character | | | R | The R (Register Recall) key | | |||
| | [character selector] | Any character in selector | | | [c] | Any character in selector | | |||
| | [^digit selector] | Any digit (0-9) not in selector | | | [^d] | Any digit (0-9) not in selector | | |||
| | [range1-range2] | Any character in range from | | | [r1-r2] | Any character in range from r1 to r2, inclusive | | |||
| | | range1 to range2, inclusive | | | x | Any digit 0-9 | | |||
| | x | Any digit 0-9 | | | {m} | m repetitions of previous pattern | | |||
| | {m} | m repetitions of previous | | | {m,} | m or more repetitions of previous pattern | | |||
| | | pattern | | | {,n} | At most n (including zero) repetitions of previous | | |||
| | {m,} | m or more repetitions of | | | | pattern | | |||
| | | previous pattern | | | {m,n} | at least m and at most n repetitions of previous | | |||
| | {,n} | At most n (including zero) | | | | pattern | | |||
| | | repetitions of previous pattern | | | Lc | Match the character c if it is "long"; c is a digit 0-9 | | |||
| | {m,n} | at least m and at most n | | | | and A-D, #, or *. | | |||
| | | repetitions of previous pattern | | +---------+---------------------------------------------------------+ | |||
| | Lc | Match the character c if it is | | ||||
| | | "long"; c is a digit 0-9 and | | ||||
| | | A-D, #, or *. | | ||||
| +---------------------------------+---------------------------------+ | ||||
| +--------------+--------------------------------------------+ | DRegex Entities | |||
| | Example | Description | | ||||
| +--------------+--------------------------------------------+ | ||||
| | 1 | Matches the digit 1 | | ||||
| | [179] | Matches 1, 7, or 9 | | ||||
| | [2-9] | Matches 2, 3, 4, 5, 6, 7, 8, 9 | | ||||
| | [^15] | Matches 0, 2, 3, 4, 6, 7, 8, 9 | | ||||
| | [02-46-9A-D] | Matches 0, 2, 3, 4, 6, 7, 8, 9, A, B, C, D | | ||||
| | x | Matches 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 | | ||||
| | *6[179#] | Matches *61, *67, *69, or *6# | | ||||
| | x{10} | Ten digits (0-9) | | ||||
| | 011x{7,15} | 011 followed by seven to fifteen digits | | ||||
| | L* | Long star | | ||||
| +--------------+--------------------------------------------+ | ||||
| 3.7 Monitoring Direction | For ranges, the A-D characters are disjoint from the 0-9 characters. | |||
| If the device does not have an "R" key, the device MAY report a hook | ||||
| flash as an R character. | ||||
| +--------------+--------------------------------------------+ | ||||
| | Example | Description | | ||||
| +--------------+--------------------------------------------+ | ||||
| | 1 | Matches the digit 1 | | ||||
| | [179] | Matches 1, 7, or 9 | | ||||
| | [2-9] | Matches 2, 3, 4, 5, 6, 7, 8, 9 | | ||||
| | [^15] | Matches 0, 2, 3, 4, 6, 7, 8, 9 | | ||||
| | [02-46-9A-D] | Matches 0, 2, 3, 4, 6, 7, 8, 9, A, B, C, D | | ||||
| | x | Matches 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 | | ||||
| | *6[179#] | Matches *61, *67, *69, or *6# | | ||||
| | x{10} | Ten digits (0-9) | | ||||
| | 011x{7,15} | 011 followed by seven to fifteen digits | | ||||
| | L* | Long star | | ||||
| +--------------+--------------------------------------------+ | ||||
| DRegex Examples | ||||
| 3.7. Monitoring Direction | ||||
| SIP identifies dialogs by their dialog identifier. The dialog | SIP identifies dialogs by their dialog identifier. The dialog | |||
| identifier is the remote-tag, local-tag, and Call-ID entities defined | identifier is the remote-tag, local-tag, and Call-ID entities defined | |||
| in RFC3261 [4]. | in RFC3261 [4]. | |||
| One method of determining the dialog identifier, particularly for | One method of determining the dialog identifier, particularly for | |||
| third-party applications, is the SIP Dialog Package [21]. | third-party applications, is the SIP Dialog Package [21]. | |||
| For most situations, such as a monaural point-to-point call with a | For most situations, such as a monaural point-to-point call with a | |||
| single codec, the stream to monitor is obvious. In such situations | single codec, the stream to monitor is obvious. In such situations | |||
| skipping to change at page 20, line 31 ¶ | skipping to change at page 20, line 39 ¶ | |||
| the User Interface. Given a dialog identifier of Call-ID, local-tag, | the User Interface. Given a dialog identifier of Call-ID, local-tag, | |||
| and remote-tag, the User Interface monitors the key presses | and remote-tag, the User Interface monitors the key presses | |||
| associated with the local-tag. | associated with the local-tag. | |||
| In the media proxy case, and potentially other cases, there is a need | In the media proxy case, and potentially other cases, there is a need | |||
| to monitor the key presses arriving from the remote user agent. The | to monitor the key presses arriving from the remote user agent. The | |||
| optional <stream> element to the <request> tag specifies which stream | optional <stream> element to the <request> tag specifies which stream | |||
| to monitor. The only legal value is "reverse", which means to | to monitor. The only legal value is "reverse", which means to | |||
| monitor the stream associated with the remote-tag. The User | monitor the stream associated with the remote-tag. The User | |||
| Interface MUST ignore other values. | Interface MUST ignore other values. | |||
| NOTE: The reason this is a tag is so individual stream selection, | NOTE: The reason this is a tag is so individual stream selection, | |||
| if needed, can be addressed in a backwards-compatible way. | if needed, can be addressed in a backwards-compatible way. | |||
| Further specification of the stream to monitor is the subject of | Further specification of the stream to monitor is the subject of | |||
| future standardization. | future standardization. | |||
| 3.8 Multiple Simultaneous Subscriptions | 3.8. Multiple Simultaneous Subscriptions | |||
| An Application MAY register multiple User Input patterns in a single | An Application MAY register multiple User Input patterns in a single | |||
| KPML subscription. If the User Interface supports multiple, | KPML subscription. If the User Interface supports multiple, | |||
| simultaneous KPML subscriptions, the Application installs the | simultaneous KPML subscriptions, the Application installs the | |||
| subscriptions either in a new SUBSCRIBE-initiated dialog or on an | subscriptions either in a new SUBSCRIBE-initiated dialog or on an | |||
| existing SUBSCRIBE-initiated dialog with a new event id tag. If the | existing SUBSCRIBE-initiated dialog with a new event id tag. If the | |||
| User Interface does not support multiple, simultaneous KPML | User Interface does not support multiple, simultaneous KPML | |||
| subscriptions, the User Interface MUST respond with an appropriate | subscriptions, the User Interface MUST respond with an appropriate | |||
| KPML status code. | KPML status code. | |||
| skipping to change at page 21, line 20 ¶ | skipping to change at page 21, line 26 ¶ | |||
| subscriptions is NOT RECOMMENDED. | subscriptions is NOT RECOMMENDED. | |||
| If the User Interface does not support multiple, simultaneous | If the User Interface does not support multiple, simultaneous | |||
| subscriptions, the User Interface MUST return a KPML document with | subscriptions, the User Interface MUST return a KPML document with | |||
| the KPML status code set to 533 on the dialog that requested the | the KPML status code set to 533 on the dialog that requested the | |||
| second subscription. The User Interface MUST NOT modify the state of | second subscription. The User Interface MUST NOT modify the state of | |||
| the first subscription on account of the second subscription attempt. | the first subscription on account of the second subscription attempt. | |||
| 4. Event Package Formal Definition | 4. Event Package Formal Definition | |||
| 4.1 Event Package Name | 4.1. Event Package Name | |||
| This document defines a SIP Event Package as defined in RFC 3265 [5]. | This document defines a SIP Event Package as defined in RFC 3265 [5]. | |||
| The event-package token name for this package is: | The event-package token name for this package is: | |||
| "kpml" | "kpml" | |||
| 4.2 Event Package Parameters | 4.2. Event Package Parameters | |||
| This package does not define any event package parameters. | This package defines three Event Package parameters: call-id, remote- | |||
| tag, and local-tag. These parameters MUST be present, to identify | ||||
| the subscription dialog. The User Interface matches the local-tag | ||||
| against the to tag, the remote-tag against the from tag, and the | ||||
| call-id against the Call-ID. | ||||
| 4.3 SUBSCRIBE Bodies | call-id = "call-id" EQUAL ( token / DQUOTE callid DQUOTE ) | |||
| ;; NOTE: any DQUOTEs inside callid MUST be escaped! | ||||
| remote-tag = "remote-tag" EQUAL token | ||||
| local-tag = "local-tag" EQUAL token | ||||
| Applications using this event package include an | If any call-ids contain embedded double-quotes, those double-quotes | |||
| application/kpml-request+xml body in SUBSCRIBE requests to indicate | MUST be escaped using the backslash-quoting mechanism. Note that the | |||
| which digit patterns they are interested in. The syntax of this body | call-id parameter may need to be expressed as a quoted string. This | |||
| type is formally described in Section 5.2 | is because the ABNF for the callid production and the word | |||
| production, which is used by callid (both from RFC 3261 [1]), allow | ||||
| some characters (such as "@", "[", and ":") that are not allowed | ||||
| within a token. | ||||
| 4.4 Subscription Duration | 4.3. SUBSCRIBE Bodies | |||
| Applications using this event package include an application/ | ||||
| kpml-request+xml body in SUBSCRIBE requests to indicate which digit | ||||
| patterns they are interested in. The syntax of this body type is | ||||
| formally described in Section 5.2 | ||||
| 4.4. Subscription Duration | ||||
| The subscription lifetime should be longer than the expected call | The subscription lifetime should be longer than the expected call | |||
| time. Subscriptions to this event package MAY range from minutes to | time. Subscriptions to this event package MAY range from minutes to | |||
| weeks. Subscriptions in hours or days are more typical and are | weeks. Subscriptions in hours or days are more typical and are | |||
| RECOMMENDED. The default subscription duration for this event | RECOMMENDED. The default subscription duration for this event | |||
| package is 7200 seconds. | package is 7200 seconds. | |||
| Subscribers MUST be able to handle the User Interface returning an | Subscribers MUST be able to handle the User Interface returning an | |||
| Expires value smaller than the requested value. Per RFC3265 [5], | Expires value smaller than the requested value. Per RFC3265 [5], | |||
| the subscription duration is the value returned by the Notifier in | the subscription duration is the value returned by the Notifier in | |||
| the 200 OK Expires header. | the 200 OK Expires header. | |||
| 4.5 NOTIFY Bodies | 4.5. NOTIFY Bodies | |||
| NOTIFY requests can contain application/kpml-response+xml (KPML | NOTIFY requests can contain application/kpml-response+xml (KPML | |||
| Response) bodies. The syntax of this body type is formally described | Response) bodies. The syntax of this body type is formally described | |||
| in Section 5.3. NOTIFY requests in immediate response to a SUBSCRIBE | in Section 5.3. NOTIFY requests in immediate response to a SUBSCRIBE | |||
| request MUST NOT contain a body unless notifying the subscriber of an | request MUST NOT contain a body unless notifying the subscriber of an | |||
| error condition or previously buffered digits. | error condition or previously buffered digits. | |||
| Notifiers MAY send notifications with any format acceptable to the | Notifiers MAY send notifications with any format acceptable to the | |||
| subscriber (based on the subscriber inclusion of these formats in an | subscriber (based on the subscriber inclusion of these formats in an | |||
| Accept header). A future extension MAY define other NOTIFY bodies. | Accept header). A future extension MAY define other NOTIFY bodies. | |||
| If no "Accept" header is present in the SUBSCRIBE, the body type | If no "Accept" header is present in the SUBSCRIBE, the body type | |||
| defined in this document MUST be assumed. | defined in this document MUST be assumed. | |||
| 4.6 Subscriber generation of SUBSCRIBE requests | 4.6. Subscriber generation of SUBSCRIBE requests | |||
| A kpml request document contains a <pattern> element with a series of | A kpml request document contains a <pattern> element with a series of | |||
| <regex> tags. Each <regex> element specifies a potential pattern for | <regex> tags. Each <regex> element specifies a potential pattern for | |||
| the User Interface to match. The Section 5.1 describes the DRegex, | the User Interface to match. The Section 5.1 describes the DRegex, | |||
| or digit regular expression, language. | or digit regular expression, language. | |||
| KPML specifies key press event notification filters. The MIME type | KPML specifies key press event notification filters. The MIME type | |||
| for KPML requests is application/kpml-request+xml. | for KPML requests is application/kpml-request+xml. | |||
| The KPML request document MUST be well formed and SHOULD be valid. | The KPML request document MUST be well formed and SHOULD be valid. | |||
| skipping to change at page 22, line 42 ¶ | skipping to change at page 23, line 15 ¶ | |||
| Because of the potentially sensitive nature of the information | Because of the potentially sensitive nature of the information | |||
| reported by KPML, subscribers SHOULD use sips: and MAY use S/MIME on | reported by KPML, subscribers SHOULD use sips: and MAY use S/MIME on | |||
| the content. | the content. | |||
| Subscribers MUST be prepared for the notifier to insist on | Subscribers MUST be prepared for the notifier to insist on | |||
| authentication of the subscription request. Subscribers MUST be | authentication of the subscription request. Subscribers MUST be | |||
| prepared for the notifier to insist on using a secure communication | prepared for the notifier to insist on using a secure communication | |||
| channel. | channel. | |||
| 4.7 Notifier processing of SUBSCRIBE requests | 4.7. Notifier processing of SUBSCRIBE requests | |||
| The user information transported by KPML is potentially sensitive. | The user information transported by KPML is potentially sensitive. | |||
| For example, it could include calling card or credit card numbers. | For example, it could include calling card or credit card numbers. | |||
| Thus the User Interface (notifier) MUST authenticate the requesting | Thus the User Interface (notifier) MUST authenticate the requesting | |||
| party in some way before accepting the subscription. | party in some way before accepting the subscription. | |||
| User Interfaces MUST implement SIP Digest authentication as required | User Interfaces MUST implement SIP Digest authentication as required | |||
| by RFC3261 [4] and MUST implement the sips: scheme and TLS. | by RFC3261 [4] and MUST implement the sips: scheme and TLS. | |||
| Upon authenticating the requesting party, the User Interface | Upon authenticating the requesting party, the User Interface | |||
| determines if the requesting party has authorization to monitor the | determines if the requesting party has authorization to monitor the | |||
| user's key presses. Determining authorization policies and | user's key presses. Determining authorization policies and | |||
| procedures is beyond the scope of this specification. | procedures is beyond the scope of this specification. | |||
| The User Interface MUST return a Contact URI that has GRUU [8] | The User Interface returns a Contact URI that may have GRUU [9] | |||
| properties in the Contact header of a SIP INVITE, 1xx, or 2xx | properties in the Contact header of a SIP INVITE, 1xx, or 2xx | |||
| response. | response. | |||
| After authorizing the request, the User Interface checks to see if | After authorizing the request, the User Interface checks to see if | |||
| the request is to terminate a subscription. If the request will | the request is to terminate a subscription. If the request will | |||
| terminate the subscription, the User Interface does the appropriate | terminate the subscription, the User Interface does the appropriate | |||
| processing, including the procedures described in Section 5.2. | processing, including the procedures described in Section 5.2. | |||
| If the request has no KPML body, then any KPML document running on | If the request has no KPML body, then any KPML document running on | |||
| that dialog, and addressed by the event id, if present, immediately | that dialog, and addressed by the event id, if present, immediately | |||
| skipping to change at page 24, line 42 ¶ | skipping to change at page 25, line 16 ¶ | |||
| If the KPML document is not valid, the User Interface generates a | If the KPML document is not valid, the User Interface generates a | |||
| KPML report with the KPML status code 501, Bad Document. The User | KPML report with the KPML status code 501, Bad Document. The User | |||
| Interface terminates the subscription by setting the subscription | Interface terminates the subscription by setting the subscription | |||
| state to "terminated". | state to "terminated". | |||
| If the document is valid but the User Interface does not support a | If the document is valid but the User Interface does not support a | |||
| namespace in the document, the User Interface MUST respond with a | namespace in the document, the User Interface MUST respond with a | |||
| KPML status code 502, Namespace Not Supported. | KPML status code 502, Namespace Not Supported. | |||
| 4.8 Notifier generation of NOTIFY requests | 4.8. Notifier generation of NOTIFY requests | |||
| Immediately after a subscription is accepted, the Notifier MUST send | Immediately after a subscription is accepted, the Notifier MUST send | |||
| a NOTIFY with the current location information as appropriate based | a NOTIFY with the current location information as appropriate based | |||
| on the identity of the subscriber. This allows the Subscriber to | on the identity of the subscriber. This allows the Subscriber to | |||
| resynchronize its state. | resynchronize its state. | |||
| The User Interface (notifier in SUBSCRIBE/NOTIFY parlance) generates | The User Interface (notifier in SUBSCRIBE/NOTIFY parlance) generates | |||
| NOTIFY requests based on the requirements of RFC3265 [5]. | NOTIFY requests based on the requirements of RFC3265 [5]. | |||
| Specifically, if a SUBSCRIBE request is valid and authorized, it will | Specifically, if a SUBSCRIBE request is valid and authorized, it will | |||
| result in an immediate NOTIFY. | result in an immediate NOTIFY. | |||
| The KPML payload distinguishes between an initial NOTIFY and a NOTIFY | The KPML payload distinguishes between an initial NOTIFY and a NOTIFY | |||
| informing of key presses. If there is no User Input buffered at the | informing of key presses. If there is no User Input buffered at the | |||
| time of the SUBSCRIBE (see below) or the buffered User Input does | time of the SUBSCRIBE (see below) or the buffered User Input does not | |||
| not match the new KPML document, then the immediate NOTIFY MUST NOT | match the new KPML document, then the immediate NOTIFY MUST NOT | |||
| contain a KPML body. If User Interface has User Input buffered that | contain a KPML body. If User Interface has User Input buffered that | |||
| result in a match using the new KPML document, then the NOTIFY MUST | result in a match using the new KPML document, then the NOTIFY MUST | |||
| return the appropriate KPML document. | return the appropriate KPML document. | |||
| The NOTIFY in response to a SUBSCRIBE request has no KPML if there | The NOTIFY in response to a SUBSCRIBE request has no KPML if there | |||
| are no matching buffered digits. An example of this is in Figure 10. | are no matching buffered digits. An example of this is in Figure 10. | |||
| If there are buffered digits in the SUBSCRIBE request that match a | If there are buffered digits in the SUBSCRIBE request that match a | |||
| pattern, then the NOTIFY message in response to the SUBSCRIBE request | pattern, then the NOTIFY message in response to the SUBSCRIBE request | |||
| MUST include the appropriate KPML document. | MUST include the appropriate KPML document. | |||
| skipping to change at page 25, line 31 ¶ | skipping to change at page 26, line 15 ¶ | |||
| NOTIFY sip:application@example.com SIP/2.0 | NOTIFY sip:application@example.com SIP/2.0 | |||
| Via: SIP/2.0/UDP proxy.example.com | Via: SIP/2.0/UDP proxy.example.com | |||
| Max-Forwards: 70 | Max-Forwards: 70 | |||
| To: <sip:application@example.com> | To: <sip:application@example.com> | |||
| From: <sip:endpoint@example.net> | From: <sip:endpoint@example.net> | |||
| Call-Id: 439hu409h4h09903fj0ioij | Call-Id: 439hu409h4h09903fj0ioij | |||
| Subscription-State: active; expires=7200 | Subscription-State: active; expires=7200 | |||
| CSeq: 49851 NOTIFY | CSeq: 49851 NOTIFY | |||
| Event: kpml | Event: kpml | |||
| Figure 10: Immediate NOTIFY Example | Figure 10: Immediate NOTIFY Example | |||
| All subscriptions MUST be authenticated, particularly those that | All subscriptions MUST be authenticated, particularly those that | |||
| match on buffered input. | match on buffered input. | |||
| KPML specifies the key press notification report format. The MIME | KPML specifies the key press notification report format. The MIME | |||
| type for KPML reports is application/kpml-response+xml. The default | type for KPML reports is application/kpml-response+xml. The default | |||
| MIME type for the kpml event package is | MIME type for the kpml event package is application/ | |||
| application/kpml-response+xml. | kpml-response+xml. | |||
| If the requestor is not using a secure transport protocol such as TLS | If the requestor is not using a secure transport protocol such as TLS | |||
| for every hop (e.g., by using a sips: URI), the User Interface SHOULD | for every hop (e.g., by using a sips: URI), the User Interface SHOULD | |||
| use S/MIME to protect the user information in responses. | use S/MIME to protect the user information in responses. | |||
| When the user enters key press(es) that match a <regex> tag, the User | When the user enters key press(es) that match a <regex> tag, the User | |||
| Interface will issue a report. | Interface will issue a report. | |||
| After reporting, the interpreter terminates the KPML session unless | After reporting, the interpreter terminates the KPML session unless | |||
| the subscription has a persistence indicator. If the subscription | the subscription has a persistence indicator. If the subscription | |||
| skipping to change at page 27, line 5 ¶ | skipping to change at page 27, line 34 ¶ | |||
| interpreter collected the entire string? A range? Second, if the | interpreter collected the entire string? A range? Second, if the | |||
| RTP timestamp is a datum of interest, why not simply get RTP in | RTP timestamp is a datum of interest, why not simply get RTP in | |||
| the first place? That all said, if it is really compelling to | the first place? That all said, if it is really compelling to | |||
| have the timestamp in the response, it could be an attribute to | have the timestamp in the response, it could be an attribute to | |||
| the <response> tag. | the <response> tag. | |||
| Note that if the monitored (INVITE-initiated) dialog terminates, the | Note that if the monitored (INVITE-initiated) dialog terminates, the | |||
| Notifier still MUST explicitly terminate the KPML subscriptions | Notifier still MUST explicitly terminate the KPML subscriptions | |||
| monitoring that dialog. | monitoring that dialog. | |||
| 4.9 Subscriber processing of NOTIFY requests | 4.9. Subscriber processing of NOTIFY requests | |||
| If there is no KPML body, it means the SUBSCRIBE was successful. | If there is no KPML body, it means the SUBSCRIBE was successful. | |||
| This establishes the dialog if there is no buffered User Input to | This establishes the dialog if there is no buffered User Input to | |||
| report. | report. | |||
| If there is a KPML document, and the KPML status code is 200, then a | If there is a KPML document, and the KPML status code is 200, then a | |||
| match occurred. | match occurred. | |||
| If there is a KPML document, and the KPML status code is between 400 | If there is a KPML document, and the KPML status code is between 400 | |||
| and 499, then an error occurred with User Input collection. The most | and 499, then an error occurred with User Input collection. The most | |||
| likely cause is a timeout condition. | likely cause is a timeout condition. | |||
| If there is a KPML document, and the KPML status code is between 500 | If there is a KPML document, and the KPML status code is between 500 | |||
| and 599, then an error occurred with the subscription. See Section 6 | and 599, then an error occurred with the subscription. See Section 6 | |||
| for more on the meaning of KPML status codes. | for more on the meaning of KPML status codes. | |||
| The subscriber MUST be mindful of the subscription state. The User | The subscriber MUST be mindful of the subscription state. The User | |||
| Interface may terminate the subscription at any time. | Interface may terminate the subscription at any time. | |||
| 4.10 Handling of Forked Requests | 4.10. Handling of Forked Requests | |||
| Forked requests are NOT ALLOWED for this event type. Subscriptions | Forked requests are NOT ALLOWED for this event type. This can be | |||
| to this event package MUST only be sent to SIP URIs which have GRUU | ensured if the Subscriptions to this event package are sent to SIP | |||
| properties. | URIs which have GRUU properties. | |||
| 4.11 Rate of notifications | 4.11. Rate of notifications | |||
| The User Interface MUST NOT generate messages faster than 25 messages | The User Interface MUST NOT generate messages faster than 25 messages | |||
| per second, or one message every 40 milliseconds. This is the | per second, or one message every 40 milliseconds. This is the | |||
| minimum time period for MF digit spills. Even 30-millisecond DTMF, | minimum time period for MF digit spills. Even 30-millisecond DTMF, | |||
| as one sometimes finds in Japan, has a 20-millisecond off time, | as one sometimes finds in Japan, has a 20-millisecond off time, | |||
| resulting in a 50-millisecond interdigit time. This document | resulting in a 50-millisecond interdigit time. This document | |||
| strongly RECOMMENDS AGAINST using KPML for digit-by-digit messaging, | strongly RECOMMENDS AGAINST using KPML for digit-by-digit messaging, | |||
| such as would be the case if the only <regex> is "x". | such as would be the case if the only <regex> is "x". | |||
| The sustained rate of notification shall be no more than 100 Notifies | The sustained rate of notification shall be no more than 100 Notifies | |||
| per minute. | per minute. | |||
| The User Interface MUST reliably deliver notifications. Because | The User Interface MUST reliably deliver notifications. Because | |||
| there is no meaningful metric for throttling requests, the User | there is no meaningful metric for throttling requests, the User | |||
| Interface SHOULD send NOTIFY messages over a congestion-controlled | Interface SHOULD send NOTIFY messages over a congestion-controlled | |||
| transport, such as TCP. | transport, such as TCP. | |||
| Note that all SIP implementations are already required to | Note that all SIP implementations are already required to | |||
| implement SIP over TCP. | implement SIP over TCP. | |||
| 4.12 State Agents and Lists | 4.12. State Agents and Lists | |||
| KPML requests are sent to a specific SIP URI that has GRUU properties | KPML requests are sent to a specific SIP URI, which may have GRUU | |||
| and attempt to monitor a specific stream that corresponds with a | properties, and attempt to monitor a specific stream that corresponds | |||
| specific target dialog. Consequently, implementers MUST NOT define | with a specific target dialog. Consequently, implementers MUST NOT | |||
| state agents for this event package nor allow subscriptions for this | define state agents for this event package nor allow subscriptions | |||
| event package to resource lists using the event list extension [22]. | for this event package to resource lists using the event list | |||
| extension [22]. | ||||
| 4.13 Behavior of a Proxy Server | 4.13. Behavior of a Proxy Server | |||
| There are no additional requirements on a SIP Proxy, other than to | There are no additional requirements on a SIP Proxy, other than to | |||
| transparently forward the SUBSCRIBE and NOTIFY methods as required in | transparently forward the SUBSCRIBE and NOTIFY methods as required in | |||
| SIP. | SIP. | |||
| 5. Formal Syntax | 5. Formal Syntax | |||
| 5.1. DRegex | ||||
| 5.1 DRegex | ||||
| The following definition follows RFC2234 [2]. The definition of | The following definition follows RFC2234 [2]. The definition of | |||
| DIGIT is from RFC2234, namely the characters "0" through "9". Note | DIGIT is from RFC2234, namely the characters "0" through "9". Note | |||
| the DRegexCharacater is not a HEXDIG from RFC2234. In particular, | the DRegexCharacater is not a HEXDIG from RFC2234. In particular, | |||
| DRegexCharacter neither includes "E" nor "F". Note that | DRegexCharacter neither includes "E" nor "F". Note that | |||
| DRegexCharacter is case insensitive. | DRegexCharacter is case insensitive. | |||
| DRegex = 1*( DRegexPosition [ RepeatCount ] ) | DRegex = 1*( DRegexPosition [ RepeatCount ] ) | |||
| DRegexPosition = DRegexSymbol / DRegexSet | DRegexPosition = DRegexSymbol / DRegexSet | |||
| DRegexSymbol = [ "L" ] DRegexCharacter | DRegexSymbol = [ "L" ] DRegexCharacter | |||
| DRegexSet = "[" 1*DRegexSetList "]" | DRegexSet = "[" 1*DRegexSetList "]" | |||
| DRegexSetList = DRegexCharacter [ "-" DRegexCharacter ] | DRegexSetList = DRegexCharacter [ "-" DRegexCharacter ] | |||
| DRegexCharacter = DIGIT / "A" / "B" / "C" / "D" / "*" / "#" / | DRegexCharacter = DIGIT / "A" / "B" / "C" / "D" / "R" / "*" / "#" / | |||
| / "a" / "b" / "c" / "d" | / "a" / "b" / "c" / "d" / "r" | |||
| RepeatCount = "." / "{" RepeatRange "}" | RepeatCount = "." / "{" RepeatRange "}" | |||
| RepeatRange = Count / ( Count "," Count ) / | RepeatRange = Count / ( Count "," Count ) / | |||
| ( Count "," ) / ( "," Count ) | ( Count "," ) / ( "," Count ) | |||
| Count = 1*DIGIT | Count = 1*DIGIT | |||
| ABNF for DRegex | ||||
| Note that future extensions to this document may introduce other | Note that future extensions to this document may introduce other | |||
| characters for DRegexCharacter, in the scheme of H.248.1 [16] or | characters for DRegexCharacter, in the scheme of H.248.1 [16] or | |||
| possibly as named strings or XML namespaces. | possibly as named strings or XML namespaces. | |||
| 5.2 KPML Request | 5.2. KPML Request | |||
| The following syntax for KPML requests uses the XML Schema [9]. | The following syntax for KPML requests uses the XML Schema [8]. | |||
| <?xml version="1.0" encoding="UTF-8"?> | <?xml version="1.0" encoding="UTF-8"?> | |||
| <xs:schema targetNamespace="urn:ietf:params:xml:ns:kpml-request" | <xs:schema targetNamespace="urn:ietf:params:xml:ns:kpml-request" | |||
| xmlns="urn:ietf:params:xml:ns:kpml-request" | xmlns="urn:ietf:params:xml:ns:kpml-request" | |||
| xmlns:xs="http://www.w3.org/2001/XMLSchema" | xmlns:xs="http://www.w3.org/2001/XMLSchema" | |||
| elementFormDefault="qualified" | elementFormDefault="qualified" | |||
| attributeFormDefault="unqualified"> | attributeFormDefault="unqualified"> | |||
| <xs:element name="kpml-request"> | <xs:element name="kpml-request"> | |||
| <xs:annotation> | <xs:annotation> | |||
| <xs:documentation>IETF Keypad Markup Language Request | <xs:documentation>IETF Keypad Markup Language Request | |||
| skipping to change at page 31, line 18 ¶ | skipping to change at page 32, line 4 ¶ | |||
| <xs:documentation>Default is false | <xs:documentation>Default is false | |||
| </xs:documentation> | </xs:documentation> | |||
| </xs:annotation> | </xs:annotation> | |||
| </xs:attribute> | </xs:attribute> | |||
| <xs:attribute name="enterkey" type="xs:string" | <xs:attribute name="enterkey" type="xs:string" | |||
| use="optional"> | use="optional"> | |||
| <xs:annotation> | <xs:annotation> | |||
| <xs:documentation>No default enterkey | <xs:documentation>No default enterkey | |||
| </xs:documentation> | </xs:documentation> | |||
| </xs:annotation> | </xs:annotation> | |||
| </xs:attribute> | </xs:attribute> | |||
| </xs:complexType> | </xs:complexType> | |||
| </xs:element> | </xs:element> | |||
| </xs:sequence> | </xs:sequence> | |||
| <xs:attribute name="version" type="xs:string" | <xs:attribute name="version" type="xs:string" | |||
| use="required"/> | use="required"/> | |||
| </xs:complexType> | </xs:complexType> | |||
| </xs:element> | </xs:element> | |||
| </xs:schema> | </xs:schema> | |||
| Figure 12: XML Schema for KPML Requests | Figure 12: XML Schema for KPML Requests | |||
| 5.3 KPML Response | 5.3. KPML Response | |||
| The following syntax for KPML responses uses the XML Schema [9]. | The following syntax for KPML responses uses the XML Schema [8]. | |||
| <?xml version="1.0" encoding="UTF-8"?> | <?xml version="1.0" encoding="UTF-8"?> | |||
| <xs:schema targetNamespace="urn:ietf:params:xml:ns:kpml-response" | <xs:schema targetNamespace="urn:ietf:params:xml:ns:kpml-response" | |||
| xmlns:xs="http://www.w3.org/2001/XMLSchema" | xmlns:xs="http://www.w3.org/2001/XMLSchema" | |||
| xmlns="urn:ietf:params:xml:ns:kpml-response" | xmlns="urn:ietf:params:xml:ns:kpml-response" | |||
| elementFormDefault="qualified" | elementFormDefault="qualified" | |||
| attributeFormDefault="unqualified"> | attributeFormDefault="unqualified"> | |||
| <xs:element name="kpml-response"> | <xs:element name="kpml-response"> | |||
| <xs:annotation> | <xs:annotation> | |||
| <xs:documentation>IETF Keypad Markup Language Response | <xs:documentation>IETF Keypad Markup Language Response | |||
| skipping to change at page 32, line 27 ¶ | skipping to change at page 33, line 45 ¶ | |||
| <xs:attribute name="tag" type="xs:string" use="optional"> | <xs:attribute name="tag" type="xs:string" use="optional"> | |||
| <xs:annotation> | <xs:annotation> | |||
| <xs:documentation>Matches tag from regex in request | <xs:documentation>Matches tag from regex in request | |||
| </xs:documentation> | </xs:documentation> | |||
| </xs:annotation> | </xs:annotation> | |||
| </xs:attribute> | </xs:attribute> | |||
| </xs:complexType> | </xs:complexType> | |||
| </xs:element> | </xs:element> | |||
| </xs:schema> | </xs:schema> | |||
| XML Schema for KPML Responses | ||||
| 6. Enumeration of KPML Status Codes | 6. Enumeration of KPML Status Codes | |||
| KPML status codes broadly follow their SIP counterparts. Codes that | KPML status codes broadly follow their SIP counterparts. Codes that | |||
| start with a 2 indicate success. Codes that start with a 4 indicate | start with a 2 indicate success. Codes that start with a 4 indicate | |||
| failure. Codes that start with a 5 indicate a server failure, | failure. Codes that start with a 5 indicate a server failure, | |||
| usually a failure to interpret the document or to support a requested | usually a failure to interpret the document or to support a requested | |||
| feature. | feature. | |||
| KPML clients MUST be able to handle arbitrary status codes by | KPML clients MUST be able to handle arbitrary status codes by | |||
| examining the first digit only. | examining the first digit only. | |||
| Any text can be in a KPML report document. KPML clients MUST NOT | Any text can be in a KPML report document. KPML clients MUST NOT | |||
| interpret the text field. | interpret the text field. | |||
| +------+--------------------------------------------------+ | +------+--------------------------------------------------+ | |||
| | Code | Text | | | Code | Text | | |||
| +------+--------------------------------------------------+ | +------+--------------------------------------------------+ | |||
| | 200 | Success | | | 200 | Success | | |||
| | 402 | User Terminated Without Match | | | 402 | User Terminated Without Match | | |||
| | 423 | Timer Expired | | | 423 | Timer Expired | | |||
| | 481 | Dialog Not Found | | | 481 | Dialog Not Found | | |||
| | 487 | Subscription Expired | | | 487 | Subscription Expired | | |||
| | 501 | Bad Document | | | 501 | Bad Document | | |||
| | 502 | Namespace Not Supported | | | 502 | Namespace Not Supported | | |||
| | 531 | Persistent Subscriptions Not Supported | | | 531 | Persistent Subscriptions Not Supported | | |||
| | 532 | Multiple Regular Expressions Not Supported | | | 532 | Multiple Regular Expressions Not Supported | | |||
| | 533 | Multiple Subscriptions on a Dialog Not Supported | | | 533 | Multiple Subscriptions on a Dialog Not Supported | | |||
| | 534 | Too Many Regular Expressions | | | 534 | Too Many Regular Expressions | | |||
| +------+--------------------------------------------------+ | +------+--------------------------------------------------+ | |||
| Table 4: KPML Status Codes | Table 4: KPML Status Codes | |||
| 7. IANA Considerations | 7. IANA Considerations | |||
| This document registers a new SIP Event Package, two new MIME types, | This document registers a new SIP Event Package, two new MIME types, | |||
| and two new XML namespaces. | and two new XML namespaces. | |||
| 7.1 SIP Event Package Registration | 7.1. SIP Event Package Registration | |||
| Package name: kpml | Package name: kpml | |||
| Type: package | Type: package | |||
| Contact: Eric Burger, <e.burger@ieee.org> | Contact: Eric Burger, <e.burger@ieee.org> | |||
| Change Controller: SIPPING Working Group delegated from the IESG | Change Controller: SIPPING Working Group delegated from the IESG | |||
| Published Specification: RFCXXXX | Published Specification: RFCXXXX | |||
| 7.2 MIME Media Type application/kpml-request+xml | 7.2. MIME Media Type application/kpml-request+xml | |||
| MIME media type name: application | MIME media type name: application | |||
| MIME subtype name: kpml-request+xml | MIME subtype name: kpml-request+xml | |||
| Required parameters: none | Required parameters: none | |||
| Optional parameters: Same as charset parameter application/xml as | Optional parameters: Same as charset parameter application/xml as | |||
| specified in XML Media Types [3] | specified in XML Media Types [3] | |||
| Encoding considerations: See RFC3023 [3]. | Encoding considerations: See RFC3023 [3]. | |||
| Security considerations: See Section 10 of RFC3023 [3] and Section 8 | Security considerations: See Section 10 of RFC3023 [3] and Section 8 | |||
| of RFCXXXX | of RFCXXXX | |||
| Interoperability considerations: See RFC2023 [3] and RFCXXXX | Interoperability considerations: See RFC2023 [3] and RFCXXXX | |||
| Published specification: RFCXXXX | Published specification: RFCXXXX | |||
| Applications which use this media type: Session-oriented applications | Applications which use this media type: Session-oriented | |||
| that have primitive User Interfaces. | applications that have primitive User Interfaces. | |||
| Change controller: SIPPING Working Group delegated from the IESG | ||||
| Change controller: SIPPING Working Group delegated from the IESG | Personal and email address for further information: Eric Burger | |||
| Personal and email address for further information: Eric Burger | ||||
| <mailto:e.burger@ieee.org> | <mailto:e.burger@ieee.org> | |||
| Intended usage: COMMON | Intended usage: COMMON | |||
| 7.3 MIME Media Type application/kpml-response+xml | 7.3. MIME Media Type application/kpml-response+xml | |||
| MIME media type name: application | MIME media type name: application | |||
| MIME subtype name: kpml-resposne+xml | MIME subtype name: kpml-resposne+xml | |||
| Required parameters: none | Required parameters: none | |||
| Optional parameters: Same as charset parameter application/xml as | Optional parameters: Same as charset parameter application/xml as | |||
| specified in XML Media Types [3] | specified in XML Media Types [3] | |||
| Encoding considerations: See RFC3023 [3]. | Encoding considerations: See RFC3023 [3]. | |||
| Security considerations: See Section 10 of RFC3023 [3] and Section 8 | Security considerations: See Section 10 of RFC3023 [3] and Section 8 | |||
| of RFCXXXX | of RFCXXXX | |||
| Interoperability considerations: See RFC2023 [3] and RFCXXXX | Interoperability considerations: See RFC2023 [3] and RFCXXXX | |||
| Published specification: RFCXXXX | Published specification: RFCXXXX | |||
| Applications which use this media type: Session-oriented applications | Applications which use this media type: Session-oriented | |||
| that have primitive User Interfaces. | applications that have primitive User Interfaces. | |||
| Change controller: SIPPING Working Group delegated from the IESG | Change controller: SIPPING Working Group delegated from the IESG | |||
| Personal and email address for further information: Eric Burger | Personal and email address for further information: Eric Burger | |||
| <mailto:e.burger@ieee.org> | <mailto:e.burger@ieee.org> | |||
| Intended usage: COMMON | Intended usage: COMMON | |||
| 7.4 URN Sub-Namespace Registration for urn:ietf:xml:ns:kpml-request | 7.4. URN Sub-Namespace Registration for urn:ietf:xml:ns:kpml-request | |||
| URI: urn:ietf:params:xml:ns:kpml-request | URI: urn:ietf:params:xml:ns:kpml-request | |||
| Registrant Contact: IETF, SIPPING Work Group <sipping@ietf.org>, Eric | Registrant Contact: IETF, SIPPING Work Group <sipping@ietf.org>, Eric | |||
| Burger <e.burger@ieee.org>. | Burger <e.burger@ieee.org>. | |||
| XML: | XML: | |||
| <?xml version="1.0"?> | <?xml version="1.0"?> | |||
| <!DOCTYPE html PUBLIC "-//W3C/DTD XHTML Basic 1.0//EN" | <!DOCTYPE html PUBLIC "-//W3C/DTD XHTML Basic 1.0//EN" | |||
| skipping to change at page 35, line 4 ¶ | skipping to change at page 36, line 20 ¶ | |||
| <meta http-equiv="content-type" | <meta http-equiv="content-type" | |||
| content="text/html;charset=iso-8859-1"/> | content="text/html;charset=iso-8859-1"/> | |||
| <title>Key Press Markup Language Request</title> | <title>Key Press Markup Language Request</title> | |||
| </head> | </head> | |||
| <body> | <body> | |||
| <h1>Namespace for Key Press Markup Language Request</h1> | <h1>Namespace for Key Press Markup Language Request</h1> | |||
| <h2>urn:ietf:params:xml:ns:kpml-request</h2> | <h2>urn:ietf:params:xml:ns:kpml-request</h2> | |||
| <p> | <p> | |||
| <a href="ftp://ftp.rfc-editor.org/in-notes/rfcXXXX.txt">RFCXXXX</a>. | <a href="ftp://ftp.rfc-editor.org/in-notes/rfcXXXX.txt">RFCXXXX</a>. | |||
| </p> | </p> | |||
| </body> | </body> | |||
| </html> | </html> | |||
| 7.5 URN Sub-Namespace Registration for urn:ietf:xml:ns:kpml-response | 7.5. URN Sub-Namespace Registration for urn:ietf:xml:ns:kpml-response | |||
| URI: urn:ietf:params:xml:ns:kpml-response | URI: urn:ietf:params:xml:ns:kpml-response | |||
| Registrant Contact: IETF, SIPPING Work Group <sipping@ietf.org>, Eric | Registrant Contact: IETF, SIPPING Work Group <sipping@ietf.org>, Eric | |||
| Burger <e.burger@ieee.org>. | Burger <e.burger@ieee.org>. | |||
| XML: | XML: | |||
| <?xml version="1.0"?> | <?xml version="1.0"?> | |||
| <!DOCTYPE html PUBLIC "-//W3C/DTD XHTML Basic 1.0//EN" | <!DOCTYPE html PUBLIC "-//W3C/DTD XHTML Basic 1.0//EN" | |||
| skipping to change at page 35, line 35 ¶ | skipping to change at page 37, line 5 ¶ | |||
| </head> | </head> | |||
| <body> | <body> | |||
| <h1>Namespace for Key Press Markup Language Response</h1> | <h1>Namespace for Key Press Markup Language Response</h1> | |||
| <h2>urn:ietf:params:xml:ns:kpml-response</h2> | <h2>urn:ietf:params:xml:ns:kpml-response</h2> | |||
| <p> | <p> | |||
| <a href="ftp://ftp.rfc-editor.org/in-notes/rfcXXXX.txt">RFCXXXX</a>. | <a href="ftp://ftp.rfc-editor.org/in-notes/rfcXXXX.txt">RFCXXXX</a>. | |||
| </p> | </p> | |||
| </body> | </body> | |||
| </html> | </html> | |||
| 7.6 KPML Request Schema Registration | 7.6. KPML Request Schema Registration | |||
| Per RFC3688 [7], please register the XML Schema for KPML as | Per RFC3688 [7], please register the XML Schema for KPML as | |||
| referenced in Section 5.2 of RFCXXXX. | referenced in Section 5.2 of RFCXXXX. | |||
| URI: Please assign. | URI: Please assign. | |||
| Registrant Contact: IETF, SIPPING Work Group <sipping@ietf.org>, Eric | Registrant Contact: IETF, SIPPING Work Group <sipping@ietf.org>, Eric | |||
| Burger <e.burger@ieee.org>. | Burger <e.burger@ieee.org>. | |||
| 7.7 KPML Response Schema Registration | 7.7. KPML Response Schema Registration | |||
| Per RFC3688 [7], please register the XML Schema for KPML as | Per RFC3688 [7], please register the XML Schema for KPML as | |||
| referenced in Section 5.3 of RFCXXXX. | referenced in Section 5.3 of RFCXXXX. | |||
| URI: Please assign. | URI: Please assign. | |||
| Registrant Contact: IETF, SIPPING Work Group <sipping@ietf.org>, Eric | Registrant Contact: IETF, SIPPING Work Group <sipping@ietf.org>, Eric | |||
| Burger <e.burger@ieee.org>. | Burger <e.burger@ieee.org>. | |||
| 8. Security Considerations | 8. Security Considerations | |||
| skipping to change at page 37, line 15 ¶ | skipping to change at page 38, line 32 ¶ | |||
| User Interfaces MUST begin buffering User Input upon receipt of an | User Interfaces MUST begin buffering User Input upon receipt of an | |||
| authenticated and accepted subscription. This buffering is done on a | authenticated and accepted subscription. This buffering is done on a | |||
| per subscription basis. | per subscription basis. | |||
| 9. Examples | 9. Examples | |||
| This section is informative in nature. If there is a discrepancy | This section is informative in nature. If there is a discrepancy | |||
| between this section and the normative sections above, the normative | between this section and the normative sections above, the normative | |||
| sections take precedence. | sections take precedence. | |||
| 9.1 Monitoring for Octothorpe | 9.1. Monitoring for Octothorpe | |||
| A common need for pre-paid and personal assistant applications is to | A common need for pre-paid and personal assistant applications is to | |||
| monitor a conversation for a signal indicating a change in user focus | monitor a conversation for a signal indicating a change in user focus | |||
| from the party they called through the application to the application | from the party they called through the application to the application | |||
| itself. For example, if you call a party using a pre-paid calling | itself. For example, if you call a party using a pre-paid calling | |||
| card and the party you call redirects you to voice mail, digits you | card and the party you call redirects you to voice mail, digits you | |||
| press are for the voice mail system. However, many applications have | press are for the voice mail system. However, many applications have | |||
| a special key sequence, such as the octothorpe (#, or pound sign) or | a special key sequence, such as the octothorpe (#, or pound sign) or | |||
| *9 that terminate the called party session and shift the user's focus | *9 that terminate the called party session and shift the user's focus | |||
| to the application. | to the application. | |||
| skipping to change at page 37, line 40 ¶ | skipping to change at page 39, line 16 ¶ | |||
| <kpml-request xmlns="urn:ietf:params:xml:ns:kpml-request" | <kpml-request xmlns="urn:ietf:params:xml:ns:kpml-request" | |||
| xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | |||
| xsi:schemaLocation= | xsi:schemaLocation= | |||
| "urn:ietf:params:xml:ns:kpml-request kpml-request.xsd" | "urn:ietf:params:xml:ns:kpml-request kpml-request.xsd" | |||
| version="1.0"> | version="1.0"> | |||
| <pattern> | <pattern> | |||
| <regex>L#</regex> | <regex>L#</regex> | |||
| </pattern> | </pattern> | |||
| </kpml-request> | </kpml-request> | |||
| Figure 16: Long Octothorpe Example | Figure 16: Long Octothorpe Example | |||
| The regex value L indicates the following digit needs to be a | The regex value L indicates the following digit needs to be a long- | |||
| long-duration key press. | duration key press. | |||
| 9.2 Dial String Collection | 9.2. Dial String Collection | |||
| In this example, the User Interface collects a dial string. The | In this example, the User Interface collects a dial string. The | |||
| application uses KPML to quickly determine when the user enters a | application uses KPML to quickly determine when the user enters a | |||
| target number. In addition, KPML indicates what type of number the | target number. In addition, KPML indicates what type of number the | |||
| user entered. | user entered. | |||
| <?xml version="1.0"> | <?xml version="1.0"> | |||
| <kpml-request xmlns="urn:ietf:params:xml:ns:kpml-request" | <kpml-request xmlns="urn:ietf:params:xml:ns:kpml-request" | |||
| xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | |||
| xsi:schemaLocation= | xsi:schemaLocation= | |||
| "urn:ietf:params:xml:ns:kpml-request kpml-request.xsd" | "urn:ietf:params:xml:ns:kpml-request kpml-request.xsd" | |||
| version="1.0"> | version="1.0"> | |||
| <pattern> | <pattern> | |||
| <regex tag="local-operator">0</regex> | <regex tag="local-operator">0</regex> | |||
| <regex tag="ld-operator"/>00</regex> | <regex tag="ld-operator">00</regex> | |||
| <regex tag="vpn">7[x][x][x]</regex> | <regex tag="vpn">7[x][x][x]</regex> | |||
| <regex tag="local-number7">9xxxxxxx</regex> | <regex tag="local-number7">9xxxxxxx</regex> | |||
| <regex tag="RI-number">9401xxxxxxx</regex> | <regex tag="RI-number">9401xxxxxxx</regex> | |||
| <regex tag="local-number10">9xxxxxxxxxx</regex> | <regex tag="local-number10">9xxxxxxxxxx</regex> | |||
| <regex tag="ddd">91xxxxxxxxxx</regex> | <regex tag="ddd">91xxxxxxxxxx</regex> | |||
| <regex tag="iddd">011x.</regex> | <regex tag="iddd">011x.</regex> | |||
| </pattern> | </pattern> | |||
| </kpml-request> | </kpml-request> | |||
| Figure 17: Dial String KPML Example Code | Figure 17: Dial String KPML Example Code | |||
| Note the use of the "tag" attribute to indicate which regex matched | Note the use of the "tag" attribute to indicate which regex matched | |||
| the dialed string. The interesting case here is if the user entered | the dialed string. The interesting case here is if the user entered | |||
| "94015551212". This string matches both the "9401xxxxxxx" and | "94015551212". This string matches both the "9401xxxxxxx" and | |||
| "9xxxxxxxxxx" regular expressions. Both expressions are the same | "9xxxxxxxxxx" regular expressions. Both expressions are the same | |||
| length. Thus the KPML interpreter will pick the "9401xxxxxxx" | length. Thus the KPML interpreter will pick the "9401xxxxxxx" | |||
| string, as it occurs first in document order. Figure 18 shows the | string, as it occurs first in document order. Figure 18 shows the | |||
| response. | response. | |||
| <?xml version="1.0"?> | <?xml version="1.0"?> | |||
| <kpml-response xmlns="urn:ietf:params:xml:ns:kpml-resposne" | <kpml-response xmlns="urn:ietf:params:xml:ns:kpml-resposne" | |||
| xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | |||
| xsi:schemaLocation= | xsi:schemaLocation= | |||
| "urn:ietf:params:xml:ns:kpml-response kpml-response.xsd" | "urn:ietf:params:xml:ns:kpml-response kpml-response.xsd" | |||
| version="1.0" | version="1.0" | |||
| code="200" text="OK" | code="200" text="OK" | |||
| digits="94015551212" tag="RI-number"/> | digits="94015551212" tag="RI-number"/> | |||
| Figure 18: Dial String KPML Response | Figure 18: Dial String KPML Response | |||
| 10. Call Flow Examples | 10. Call Flow Examples | |||
| 10.1 Supplemental Digits | 10.1. Supplemental Digits | |||
| This section gives a non-normative example of an application that | This section gives a non-normative example of an application that | |||
| collects supplemental digits. Supplemental digit collection is where | collects supplemental digits. Supplemental digit collection is where | |||
| the network requests additional digits after the caller enters the | the network requests additional digits after the caller enters the | |||
| destination address. A typical supplemental dial string is four | destination address. A typical supplemental dial string is four | |||
| digits in length. | digits in length. | |||
| Ingress Gateway Application Server Egress Gateway | Ingress Gateway Application Server Egress Gateway | |||
| | | | | | | | | |||
| | | | | | | | | |||
| skipping to change at page 40, line 4 ¶ | skipping to change at page 41, line 51 ¶ | |||
| |(9) NOTIFY (digits) | | | |(9) NOTIFY (digits) | | | |||
| |--------------------->| | | |--------------------->| | | |||
| | | | | | | | | |||
| | | | | | | | | |||
| |(10) 200 OK | | | |(10) 200 OK | | | |||
| |<---------------------| | | |<---------------------| | | |||
| | | | | | | | | |||
| | | | | | | | | |||
| | | | | | | | | |||
| | | | | | | | | |||
| Figure 19: Supplemental Digits Call Flow | ||||
| Figure 19: Supplemental Digits Call Flow | ||||
| In messages (1-3), the ingress gateway establishes a dialog with an | In messages (1-3), the ingress gateway establishes a dialog with an | |||
| egress gateway. The application learns the dialog ID through | egress gateway. The application learns the dialog ID through out-of- | |||
| out-of-band mechanisms, such as the Dialog Package or being | band mechanisms, such as the Dialog Package or being co-resident with | |||
| co-resident with the egress gateway. Part of the ACK message is | the egress gateway. Part of the ACK message is below, to illustrate | |||
| below, to illustrate the dialog identifiers. | the dialog identifiers. | |||
| ACK sip:gw@subA.example.com SIP/2.0 | ACK sip:gw@subA.example.com SIP/2.0 | |||
| Via: ... | Via: ... | |||
| Max-Forwards: ... | Max-Forwards: ... | |||
| Route: ... | Route: ... | |||
| From: <sip:phn@example.com>;tag=jfh21 | From: <sip:phn@example.com>;tag=jfh21 | |||
| To: <sip:gw@subA.example.com>;tag=onjwe2 | To: <sip:gw@subA.example.com>;tag=onjwe2 | |||
| Call-ID: 12345592@subA.example.com | Call-ID: 12345592@subA.example.com | |||
| ... | ... | |||
| skipping to change at page 40, line 32 ¶ | skipping to change at page 42, line 31 ¶ | |||
| of four key presses. | of four key presses. | |||
| SUBSCRIBE sip:gw@subA.example.com SIP/2.0 | SUBSCRIBE sip:gw@subA.example.com SIP/2.0 | |||
| Via: SIP/2.0/TCP client.subB.example.com;branch=q4i9ufr4ui3 | Via: SIP/2.0/TCP client.subB.example.com;branch=q4i9ufr4ui3 | |||
| From: <sip:ap@subB.example.com>;tag=567890 | From: <sip:ap@subB.example.com>;tag=567890 | |||
| To: <sip:gw@subA.example.com> | To: <sip:gw@subA.example.com> | |||
| Call-ID: 12345601@subA.example.com | Call-ID: 12345601@subA.example.com | |||
| CSeq: 1 SUBSCRIBE | CSeq: 1 SUBSCRIBE | |||
| Contact: <sip:ap@client.subB.example.com> | Contact: <sip:ap@client.subB.example.com> | |||
| Max-Forwards: 70 | Max-Forwards: 70 | |||
| Event: kpml ;remote-tag="<sip:phn@example.com;tag=jfh21>" | Event: kpml ;remote-tag="sip:phn@example.com;tag=jfh21" | |||
| ;local-tag="sip:gw@subA.example.com;tag=onjwe2" | ;local-tag="sip:gw@subA.example.com;tag=onjwe2" | |||
| ;call-id="12345592@subA.example.com" | ;call-id="12345592@subA.example.com" | |||
| Expires: 7200 | Expires: 7200 | |||
| Accept: application/kpml-response+xml | Accept: application/kpml-response+xml | |||
| Content-Type: application/kpml-request+xml | Content-Type: application/kpml-request+xml | |||
| Content-Length: 292 | Content-Length: 292 | |||
| <?xml version="1.0" encoding="UTF-8"?> | <?xml version="1.0" encoding="UTF-8"?> | |||
| <kpml-request xmlns="urn:ietf:params:xml:ns:kpml-request" | <kpml-request xmlns="urn:ietf:params:xml:ns:kpml-request" | |||
| xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | |||
| skipping to change at page 42, line 36 ¶ | skipping to change at page 44, line 36 ¶ | |||
| Message (10) is the acknowledgement of the notification. | Message (10) is the acknowledgement of the notification. | |||
| SIP/2.0 200 OK | SIP/2.0 200 OK | |||
| Via: SIP/2.0/TCP subA.example.com;branch=gw27id4993 | Via: SIP/2.0/TCP subA.example.com;branch=gw27id4993 | |||
| To: <sip:ap@subB.example.com>;tag=567890 | To: <sip:ap@subB.example.com>;tag=567890 | |||
| From: <sip:gw@subA.example.com>;tag=1234567 | From: <sip:gw@subA.example.com>;tag=1234567 | |||
| Call-ID: 12345601@subA.example.com | Call-ID: 12345601@subA.example.com | |||
| CSeq: 1001 NOTIFY | CSeq: 1001 NOTIFY | |||
| 10.2 Multiple Applications | 10.2. Multiple Applications | |||
| This section gives a non-normative example of multiple applications. | This section gives a non-normative example of multiple applications. | |||
| One application collects a destination number to call. That | One application collects a destination number to call. That | |||
| application then waits for a "long pound." During the call, the call | application then waits for a "long pound." During the call, the call | |||
| goes to a personal assistant application, which interacts with the | goes to a personal assistant application, which interacts with the | |||
| user. In addition, the personal assistant application looks for a | user. In addition, the personal assistant application looks for a | |||
| "short pound." | "short pound." | |||
| For clarity, we do not show the INVITE dialogs. | For clarity, we do not show the INVITE dialogs. | |||
| skipping to change at page 45, line 14 ¶ | skipping to change at page 47, line 13 ¶ | |||
| |--------------------->| | | |--------------------->| | | |||
| | | | | | | | | |||
| | | | | | | | | |||
| |(26) 200 OK | | | |(26) 200 OK | | | |||
| |<---------------------| | | |<---------------------| | | |||
| | | | | | | | | |||
| | | | | | | | | |||
| | | | | | | | | |||
| | | | | | | | | |||
| Figure 27: Multiple Application Call Flow | Figure 27: Multiple Application Call Flow | |||
| Message (1) is the subscription request for the card number. | Message (1) is the subscription request for the card number. | |||
| SUBSCRIBE sip:gw@subA.example.com SIP/2.0 | SUBSCRIBE sip:gw@subA.example.com SIP/2.0 | |||
| Via: SIP/2.0/TCP client.subB.example.com;branch=3qo3j0ouq | Via: SIP/2.0/TCP client.subB.example.com;branch=3qo3j0ouq | |||
| From: <sip:ap@subB.example.com>;tag=978675 | From: <sip:ap@subB.example.com>;tag=978675 | |||
| To: <sip:gw@subA.example.com> | To: <sip:gw@subA.example.com> | |||
| Call-ID: 12345601@subA.example.com | Call-ID: 12345601@subA.example.com | |||
| CSeq: 20 SUBSCRIBE | CSeq: 20 SUBSCRIBE | |||
| Contact: <sip:ap@client.subB.example.com> | Contact: <sip:ap@client.subB.example.com> | |||
| skipping to change at page 50, line 29 ¶ | skipping to change at page 52, line 29 ¶ | |||
| <kpml-response xmlns="urn:ietf:params:xml:ns:kpml-response" | <kpml-response xmlns="urn:ietf:params:xml:ns:kpml-response" | |||
| xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | |||
| xsi:schemaLocation= | xsi:schemaLocation= | |||
| "urn:ietf:params:xml:ns:kpml-response kpml-response.xsd" | "urn:ietf:params:xml:ns:kpml-response kpml-response.xsd" | |||
| version="1.0" | version="1.0" | |||
| code="200" text="OK" | code="200" text="OK" | |||
| digits="#"/> | digits="#"/> | |||
| 11. References | 11. References | |||
| 11.1 Normative References | 11.1. Normative References | |||
| [1] Bradner, S., "Key words for use in RFCs to Indicate Requirement | [1] Bradner, S., "Key words for use in RFCs to Indicate Requirement | |||
| Levels", BCP 14, RFC 2119, March 1997. | Levels", BCP 14, RFC 2119, March 1997. | |||
| [2] Crocker, D. and P. Overell, "Augmented BNF for Syntax | [2] Crocker, D. and P. Overell, "Augmented BNF for Syntax | |||
| Specifications: ABNF", RFC 2234, November 1997. | Specifications: ABNF", RFC 2234, November 1997. | |||
| [3] Murata, M., St. Laurent, S. and D. Kohn, "XML Media Types", RFC | [3] Murata, M., St. Laurent, S., and D. Kohn, "XML Media Types", | |||
| 3023, January 2001. | RFC 3023, January 2001. | |||
| [4] Rosenberg, J., Schulzrinne, H., Camarillo, G., Johnston, A., | [4] Rosenberg, J., Schulzrinne, H., Camarillo, G., Johnston, A., | |||
| Peterson, J., Sparks, R., Handley, M. and E. Schooler, "SIP: | Peterson, J., Sparks, R., Handley, M., and E. Schooler, "SIP: | |||
| Session Initiation Protocol", RFC 3261, June 2002. | Session Initiation Protocol", RFC 3261, June 2002. | |||
| [5] Roach, A., "Session Initiation Protocol (SIP)-Specific Event | [5] Roach, A., "Session Initiation Protocol (SIP)-Specific Event | |||
| Notification", RFC 3265, June 2002. | Notification", RFC 3265, June 2002. | |||
| [6] Daigle, L., van Gulik, D., Iannella, R. and P. Faltstrom, | [6] Daigle, L., van Gulik, D., Iannella, R., and P. Faltstrom, | |||
| "Uniform Resource Names (URN) Namespace Definition Mechanisms", | "Uniform Resource Names (URN) Namespace Definition Mechanisms", | |||
| BCP 66, RFC 3406, October 2002. | BCP 66, RFC 3406, October 2002. | |||
| [7] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, January | [7] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, | |||
| 2004. | January 2004. | |||
| [8] Rosenberg, J., "Obtaining and Using Globally Routable User Agent | ||||
| (UA) URIs (GRUU) in the Session Initiation Protocol (SIP)", | ||||
| draft-ietf-sip-gruu-01 (work in progress), February 2004. | ||||
| [9] Thompson, H., Beech, D., Maloney, M. and N. Mendelsohn, "XML | [8] Thompson, H., Beech, D., Maloney, M., and N. Mendelsohn, "XML | |||
| Schema Part 1: Structures", W3C REC REC-xmlschema-1-20010502, | Schema Part 1: Structures", W3C REC REC-xmlschema-1-20010502, | |||
| May 2001. | May 2001. | |||
| 11.2 Informative References | 11.2. Informative References | |||
| [10] Schulzrinne, H., Casner, S., Frederick, R. and V. Jacobson, | [9] Rosenberg, J., "Obtaining and Using Globally Routable User | |||
| "RTP: A Transport Protocol for Real-Time Applications", RFC | Agent (UA) URIs (GRUU) in the Session Initiation Protocol | |||
| 1889, January 1996. | (SIP)", draft-ietf-sip-gruu-08 (work in progress), June 2006. | |||
| [10] Schulzrinne, H., Casner, S., Frederick, R., and V. Jacobson, | ||||
| "RTP: A Transport Protocol for Real-Time Applications", | ||||
| RFC 1889, January 1996. | ||||
| [11] Handley, M. and V. Jacobson, "SDP: Session Description | [11] Handley, M. and V. Jacobson, "SDP: Session Description | |||
| Protocol", RFC 2327, April 1998. | Protocol", RFC 2327, April 1998. | |||
| [12] Fielding, R., Gettys, J., Mogul, J., Nielsen, H., Masinter, L., | [12] Fielding, R., Gettys, J., Mogul, J., Nielsen, H., Masinter, L., | |||
| Leach, P. and T. Berners-Lee, "Hypertext Transfer Protocol -- | Leach, P., and T. Berners-Lee, "Hypertext Transfer Protocol -- | |||
| HTTP/1.1", RFC 2616, June 1999. | HTTP/1.1", RFC 2616, June 1999. | |||
| [13] Schulzrinne, H. and S. Petrack, "RTP Payload for DTMF Digits, | [13] Schulzrinne, H. and S. Petrack, "RTP Payload for DTMF Digits, | |||
| Telephony Tones and Telephony Signals", RFC 2833, May 2000. | Telephony Tones and Telephony Signals", RFC 2833, May 2000. | |||
| [14] Rosenberg, J. and H. Schulzrinne, "An Offer/Answer Model with | [14] Rosenberg, J. and H. Schulzrinne, "An Offer/Answer Model with | |||
| Session Description Protocol (SDP)", RFC 3264, June 2002. | Session Description Protocol (SDP)", RFC 3264, June 2002. | |||
| [15] Andreasen, F. and B. Foster, "Media Gateway Control Protocol | [15] Andreasen, F. and B. Foster, "Media Gateway Control Protocol | |||
| (MGCP) Version 1.0", RFC 3435, January 2003. | (MGCP) Version 1.0", RFC 3435, January 2003. | |||
| [16] Groves, C., Pantaleo, M., Anderson, T. and T. Taylor, "Gateway | [16] Groves, C., Pantaleo, M., Anderson, T., and T. Taylor, "Gateway | |||
| Control Protocol Version 1", RFC 3525, June 2003. | Control Protocol Version 1", RFC 3525, June 2003. | |||
| [17] Institute of Electrical and Electronics Engineers, "Information | [17] Institute of Electrical and Electronics Engineers, "Information | |||
| Technology - Portable Operating System Interface (POSIX) - Part | Technology - Portable Operating System Interface (POSIX) - Part | |||
| 1: Base Definitions, Chapter 9", IEEE Standard 1003.1, June | 1: Base Definitions, Chapter 9", IEEE Standard 1003.1, | |||
| 2001. | June 2001. | |||
| [18] Bray, T., Paoli, J., Sperberg-McQueen, C. and E. Maler, | [18] Bray, T., Paoli, J., Sperberg-McQueen, C., and E. Maler, | |||
| "Extensible Markup Language (XML) 1.0 (Second Edition)", W3C | "Extensible Markup Language (XML) 1.0 (Second Edition)", W3C | |||
| REC REC-xml-20001006, October 2000. | REC REC-xml-20001006, October 2000. | |||
| [19] Rosenberg, J., "A Framework for Application Interaction in the | [19] Rosenberg, J., "A Framework for Application Interaction in the | |||
| Session Initiation Protocol (SIP)", | Session Initiation Protocol (SIP)", | |||
| draft-ietf-sipping-app-interaction-framework-01 (work in | draft-ietf-sipping-app-interaction-framework-05 (work in | |||
| progress), February 2004. | progress), July 2005. | |||
| [20] Burger, E., Van Dyke, J. and A. Spitzer, "Media Server Control | ||||
| Markup Language (MSCML) and Protocol", draft-vandyke-mscml-04 | ||||
| (work in progress), March 2004. | ||||
| [21] Rosenberg, J. and H. Schulzrinne, "An INVITE Inititiated Dialog | ||||
| Event Package for the Session Initiation Protocol (SIP", | ||||
| draft-ietf-sipping-dialog-package-02 (work in progress), June | ||||
| 2003. | ||||
| [22] Roach, A., Rosenberg, J. and B. Campbell, "A Session Initiation | ||||
| Protocol (SIP) Event Notification Extension for Resource | ||||
| Lists", draft-ietf-simple-event-list-05 (work in progress), | ||||
| August 2004. | ||||
| Authors' Addresses | ||||
| Eric Burger | ||||
| Brooktrout Technology, Inc. | ||||
| 18 Keewaydin Dr. | ||||
| Salem, NH 03079 | ||||
| USA | ||||
| EMail: eburger@brooktrout.com | [20] Burger, E., Van Dyke, J., and A. Spitzer, "Media Server Control | |||
| Markup Language (MSCML) and Protocol", draft-vandyke-mscml-09 | ||||
| (work in progress), June 2006. | ||||
| Martin Dolly | [21] Rosenberg, J., Schulzrinne, H., and R. Mahy, "An INVITE- | |||
| AT&T Labs | Initiated Dialog Event Package for the Session Initiation | |||
| Protocol (SIP)", RFC 4235, November 2005. | ||||
| EMail: mdolly@att.com | [22] Roach, A., Rosenberg, J., and B. Campbell, "A Session | |||
| Initiation Protocol (SIP) Event Notification Extension for | ||||
| Resource Lists", draft-ietf-simple-event-list-07 (work in | ||||
| progress), January 2005. | ||||
| Appendix A. Contributors | Appendix A. Contributors | |||
| Ophir Frieder of the Illinois Institute of Technology collaborated on | Ophir Frieder of the Illinois Institute of Technology collaborated on | |||
| the development of the buffer algorithm. | the development of the buffer algorithm. | |||
| Jeff Van Dyke worked enough hours and wrote enough text to be | Jeff Van Dyke worked enough hours and wrote enough text to be | |||
| considered an author under the old rules. | considered an author under the old rules. | |||
| Robert Fairlie-Cuninghame, Cullen Jennings, Jonathan Rosenberg, and | Robert Fairlie-Cuninghame, Cullen Jennings, Jonathan Rosenberg, and | |||
| skipping to change at page 54, line 5 ¶ | skipping to change at page 55, line 21 ¶ | |||
| Silvano Brewster and Bill Fenner of AT&T Laboratories, and Joe | Silvano Brewster and Bill Fenner of AT&T Laboratories, and Joe | |||
| Zebarth of Nortel helped considerably with making the text clear and | Zebarth of Nortel helped considerably with making the text clear and | |||
| DRegex tight. | DRegex tight. | |||
| Bert Culpepper and Allison Mankin gave an early version of this | Bert Culpepper and Allison Mankin gave an early version of this | |||
| document a good scouring. | document a good scouring. | |||
| Scott Hollenbeck provided XML and MIME review. Tim Bray pointed out | Scott Hollenbeck provided XML and MIME review. Tim Bray pointed out | |||
| the general issue of UTF-8 versus UTF-16 with XML. | the general issue of UTF-8 versus UTF-16 with XML. | |||
| Intellectual Property Statement | Authors' Addresses | |||
| Eric Burger | ||||
| Cantata Technology, Inc. | ||||
| 18 Keewaydin Dr. | ||||
| Salem, NH 03079 | ||||
| USA | ||||
| Email: eburger@cantata.com | ||||
| Martin Dolly | ||||
| AT&T Labs | ||||
| Email: mdolly@att.com | ||||
| Full Copyright Statement | ||||
| Copyright (C) The Internet Society (2006). | ||||
| This document is subject to the rights, licenses and restrictions | ||||
| contained in BCP 78, and except as set forth therein, the authors | ||||
| retain all their rights. | ||||
| This document and the information contained herein are provided on an | ||||
| "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS | ||||
| OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET | ||||
| ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, | ||||
| INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE | ||||
| INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. | ||||
| Intellectual Property | ||||
| The IETF takes no position regarding the validity or scope of any | 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 | |||
| found in BCP 78 and BCP 79. | found in BCP 78 and BCP 79. | |||
| skipping to change at page 54, line 29 ¶ | skipping to change at page 56, line 45 ¶ | |||
| such proprietary rights by implementers or users of this | such proprietary rights by implementers or users of this | |||
| specification can be obtained from the IETF on-line IPR repository at | specification can be obtained from the IETF on-line IPR repository at | |||
| http://www.ietf.org/ipr. | http://www.ietf.org/ipr. | |||
| The IETF invites any interested party to bring to its attention any | The IETF invites any interested party to bring to its attention any | |||
| copyrights, patents or patent applications, or other proprietary | copyrights, patents or patent applications, or other proprietary | |||
| rights that may cover technology that may be required to implement | rights that may cover technology that may be required to implement | |||
| this standard. Please address the information to the IETF at | this standard. Please address the information to the IETF at | |||
| ietf-ipr@ietf.org. | ietf-ipr@ietf.org. | |||
| The IETF has been notified of intellectual property rights claimed in | ||||
| regard to some or all of the specification contained in this | ||||
| document. For more information consult the online list of claimed | ||||
| rights. | ||||
| Disclaimer of Validity | ||||
| This document and the information contained herein are provided on an | ||||
| "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS | ||||
| OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET | ||||
| ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, | ||||
| INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE | ||||
| INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. | ||||
| Copyright Statement | ||||
| Copyright (C) The Internet Society (2004). This document is subject | ||||
| to the rights, licenses and restrictions contained in BCP 78, and | ||||
| except as set forth therein, the authors retain all their rights. | ||||
| Acknowledgment | Acknowledgment | |||
| Funding for the RFC Editor function is currently provided by the | Funding for the RFC Editor function is provided by the IETF | |||
| Internet Society. | Administrative Support Activity (IASA). | |||
| End of changes. 133 change blocks. | ||||
| 352 lines changed or deleted | 369 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/ | ||||