summaryrefslogtreecommitdiff
path: root/doc/rfc/rfc3880.txt
diff options
context:
space:
mode:
Diffstat (limited to 'doc/rfc/rfc3880.txt')
-rw-r--r--doc/rfc/rfc3880.txt4147
1 files changed, 4147 insertions, 0 deletions
diff --git a/doc/rfc/rfc3880.txt b/doc/rfc/rfc3880.txt
new file mode 100644
index 0000000..e61c700
--- /dev/null
+++ b/doc/rfc/rfc3880.txt
@@ -0,0 +1,4147 @@
+
+
+
+
+
+
+Network Working Group J. Lennox
+Request for Comments: 3880 X. Wu
+Category: Standards Track H. Schulzrinne
+ Columbia University
+ October 2004
+
+
+ Call Processing Language (CPL):
+ A Language for User Control of Internet Telephony Services
+
+Status of this Memo
+
+ This document specifies an Internet standards track protocol for the
+ Internet community, and requests discussion and suggestions for
+ improvements. Please refer to the current edition of the "Internet
+ Official Protocol Standards" (STD 1) for the standardization state
+ and status of this protocol. Distribution of this memo is unlimited.
+
+Copyright Notice
+
+ Copyright (C) The Internet Society (2004).
+
+Abstract
+
+ This document defines the Call Processing Language (CPL), a language
+ to describe and control Internet telephony services. It is designed
+ to be implementable on either network servers or user agents. It is
+ meant to be simple, extensible, easily edited by graphical clients,
+ and independent of operating system or signalling protocol. It is
+ suitable for running on a server where users may not be allowed to
+ execute arbitrary programs, as it has no variables, loops, or ability
+ to run external programs.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Lennox, et al. Standards Track [Page 1]
+
+RFC 3880 CPL October 2004
+
+
+Table of Contents
+
+ 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 3
+ 1.1. Conventions of This Document. . . . . . . . . . . . . . 4
+ 2. Structure of CPL Scripts . . . . . . . . . . . . . . . . . . . 4
+ 2.1. High-level Structure. . . . . . . . . . . . . . . . . . 4
+ 2.2. Abstract Structure of a Call Processing Action. . . . . 5
+ 2.3. Location Model. . . . . . . . . . . . . . . . . . . . . 6
+ 2.4. XML Structure . . . . . . . . . . . . . . . . . . . . . 6
+ 3. Script Structure: Overview . . . . . . . . . . . . . . . . . . 7
+ 4. Switches . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
+ 4.1. Address Switches. . . . . . . . . . . . . . . . . . . . 9
+ 4.1.1. Usage of "address-switch" with SIP. . . . . . . 11
+ 4.2. String Switches . . . . . . . . . . . . . . . . . . . . 12
+ 4.2.1. Usage of "string-switch" with SIP . . . . . . . 13
+ 4.3. Language Switches . . . . . . . . . . . . . . . . . . . 14
+ 4.3.1. Usage of "language-switch" with SIP . . . . . . 14
+ 4.4. Time Switches . . . . . . . . . . . . . . . . . . . . . 15
+ 4.4.1. iCalendar differences and implementation
+ issues. . . . . . . . . . . . . . . . . . . . . 20
+ 4.5. Priority Switches . . . . . . . . . . . . . . . . . . . 21
+ 4.5.1. Usage of "priority-switch" with SIP . . . . . . 22
+ 5. Location Modifiers . . . . . . . . . . . . . . . . . . . . . . 22
+ 5.1. Explicit Location . . . . . . . . . . . . . . . . . . . 23
+ 5.1.1. Usage of "location" with SIP. . . . . . . . . . 23
+ 5.2. Location Lookup . . . . . . . . . . . . . . . . . . . . 24
+ 5.2.1. Usage of "lookup" with SIP. . . . . . . . . . . 25
+ 5.3. Location Removal. . . . . . . . . . . . . . . . . . . . 25
+ 5.3.1. Usage of "remove-location" with SIP . . . . . . 26
+ 6. Signalling Operations. . . . . . . . . . . . . . . . . . . . . 26
+ 6.1. Proxy . . . . . . . . . . . . . . . . . . . . . . . . . 26
+ 6.1.1. Usage of "proxy" with SIP . . . . . . . . . . . 29
+ 6.2. Redirect. . . . . . . . . . . . . . . . . . . . . . . . 29
+ 6.2.1. Usage of "redirect" with SIP. . . . . . . . . . 30
+ 6.3. Reject. . . . . . . . . . . . . . . . . . . . . . . . . 30
+ 6.3.1. Usage of "reject" with SIP. . . . . . . . . . . 30
+ 7. Non-signalling Operations. . . . . . . . . . . . . . . . . . . 31
+ 7.1. Mail. . . . . . . . . . . . . . . . . . . . . . . . . . 31
+ 7.1.1. Suggested Content of Mailed Information . . . . 32
+ 7.2. Log . . . . . . . . . . . . . . . . . . . . . . . . . . 32
+ 8. Subactions . . . . . . . . . . . . . . . . . . . . . . . . . . 33
+ 9. Ancillary Information. . . . . . . . . . . . . . . . . . . . . 34
+ 10. Default Behavior . . . . . . . . . . . . . . . . . . . . . . . 35
+ 11. CPL Extensions . . . . . . . . . . . . . . . . . . . . . . . . 35
+ 12. Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
+ 12.1. Example: Call Redirect Unconditional. . . . . . . . . . 37
+ 12.2. Example: Call Forward Busy/No Answer. . . . . . . . . . 38
+ 12.3. Example: Call Forward: Redirect and Default . . . . . . 39
+
+
+
+Lennox, et al. Standards Track [Page 2]
+
+RFC 3880 CPL October 2004
+
+
+ 12.4. Example: Call Screening . . . . . . . . . . . . . . . . 40
+ 12.5. Example: Priority and Language Routing. . . . . . . . . 41
+ 12.6. Example: Outgoing Call Screening. . . . . . . . . . . . 42
+ 12.7. Example: Time-of-day Routing. . . . . . . . . . . . . . 43
+ 12.8. Example: Location Filtering . . . . . . . . . . . . . . 44
+ 12.9. Example: Non-signalling Operations. . . . . . . . . . . 45
+ 12.10. Example: Hypothetical Extensions. . . . . . . . . . . . 46
+ 12.11. Example: A Complex Example. . . . . . . . . . . . . . . 48
+ 13. Security Considerations. . . . . . . . . . . . . . . . . . . . 49
+ 14. IANA Considerations. . . . . . . . . . . . . . . . . . . . . . 49
+ 14.1. URN Sub-Namespace Registration for
+ urn:ietf:params:xml:ns:cpl. . . . . . . . . . . . . . . 49
+ 14.2. Schema registration . . . . . . . . . . . . . . . . . . 50
+ 14.3. MIME Registration . . . . . . . . . . . . . . . . . . . 50
+ 15. Acknowledgments. . . . . . . . . . . . . . . . . . . . . . . . 51
+ A. An Algorithm for Resolving Time Switches . . . . . . . . . . . 52
+ B. Suggested Usage of CPL with H.323. . . . . . . . . . . . . . . 53
+ B.1. Usage of "address-switch" with H.323. . . . . . . . . . 53
+ B.2. Usage of "string-switch" with H.323 . . . . . . . . . . 55
+ B.3. Usage of "language-switch" with H.323 . . . . . . . . . 55
+ B.4. Usage of "priority-switch" with H.323 . . . . . . . . . 55
+ B.5. Usage of "location" with H.323. . . . . . . . . . . . . 56
+ B.6. Usage of "lookup" with H.323. . . . . . . . . . . . . . 56
+ B.7. Usage of "remove-location" with H.323 . . . . . . . . . 56
+ C. The XML Schema for CPL . . . . . . . . . . . . . . . . . . . . 56
+ Normative References . . . . . . . . . . . . . . . . . . . . . . . 70
+ Informative References . . . . . . . . . . . . . . . . . . . . . . 71
+ Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 73
+ Full Copyright Statement . . . . . . . . . . . . . . . . . . . . . 74
+
+1. Introduction
+
+ The Call Processing Language (CPL) is a language that can be used to
+ describe and control Internet telephony services. It is not tied to
+ any particular signalling architecture or protocol; it is anticipated
+ that it will be used with both the Session Initiation Protocol (SIP)
+ [1] and H.323 [16].
+
+ CPL is powerful enough to describe a large number of services and
+ features, but it is limited in power so that it can run safely in
+ Internet telephony servers. The intention is to make it impossible
+ for users to do anything more complex (and dangerous) than describe
+ Internet telephony services. The language is not Turing-complete,
+ and provides no way to write loops or recursion.
+
+ CPL is also designed to be easily created and edited by graphical
+ tools. It is based on the Extensible Markup Language (XML) [2], so
+ parsing it is easy and many parsers for it are publicly available.
+
+
+
+Lennox, et al. Standards Track [Page 3]
+
+RFC 3880 CPL October 2004
+
+
+ The structure of the language maps closely to its behavior, so an
+ editor can understand any valid script, even ones written by hand.
+ The language is also designed so that a server can easily confirm the
+ validity of a script when the server receives it, rather than
+ discovering problems while a call is being processed.
+
+ Implementations of CPL are expected to take place both in Internet
+ telephony servers and in advanced clients; both can usefully process
+ and direct users' calls. This document primarily addresses the usage
+ in servers. A mechanism will be needed to transport scripts between
+ clients and servers; this document does not describe such a
+ mechanism, but related documents will.
+
+ The framework and requirements for the CPL architecture are described
+ in RFC 2824, "Call Processing Language Framework and Requirements"
+ [17].
+
+1.1. Conventions of This Document
+
+ In this document, the key words "MUST", "MUST NOT", "REQUIRED",
+ "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY",
+ and "OPTIONAL" are to be interpreted as described in BCP 14, RFC 2119
+ [3] and indicate requirement levels for compliant CPL
+ implementations.
+
+ Some paragraphs are indented, like this; they give motivations of
+ design choices, advice to implementors, or thoughts on future
+ development of or extensions to CPL. They are not essential to
+ the specification of the language, and are non-normative.
+
+2. Structure of CPL Scripts
+
+2.1. High-level Structure
+
+ A CPL script consists of two types of information: ancillary
+ information about the script, and call processing actions.
+
+ A call processing action is a structured tree that describes the
+ operations and decisions a telephony signalling server performs on a
+ call set-up event. There are two types of call processing actions:
+ top-level actions and subactions. Top-level actions are actions that
+ are triggered by signalling events that arrive at the server. Two
+ top-level actions are defined: "incoming", the action performed when
+ a call arrives whose destination is the owner of the script, and
+ "outgoing", the action performed when a call arrives whose originator
+ is the owner of the script.
+
+
+
+
+
+Lennox, et al. Standards Track [Page 4]
+
+RFC 3880 CPL October 2004
+
+
+ Subactions are actions which can be called from other actions. CPL
+ forbids subactions from being called recursively: see Section 8.
+
+ Ancillary information is information which is necessary for a server
+ to correctly process a script, but which does not directly describe
+ any operations or decisions. Currently, no ancillary information is
+ defined, but the section is reserved for use by extensions.
+
+2.2. Abstract Structure of a Call Processing Action
+
+ Abstractly, a call processing action is described by a collection of
+ nodes that describe operations that can be performed or decisions
+ that can be made. A node may have several parameters, which specify
+ the precise behavior of the node; they usually also have outputs,
+ which depend on the result of the decision or action.
+
+ For a graphical representation of a CPL action, see Figure 1. Nodes
+ and outputs can be thought of informally as boxes and arrows; CPL is
+ designed so that actions can be conveniently edited graphically using
+ this representation. Nodes are arranged in a tree, starting at a
+ single root node; outputs of nodes are connected to additional nodes.
+ When an action is run, the action or decision described by the
+ action's top-level node is performed; based on the result of that
+ node, the server follows one of the node's outputs, and the
+ subsequent node it points to is performed; this process continues
+ until a node with no specified outputs is reached. Because the graph
+ is acyclic, this will occur after a bounded and predictable number of
+ nodes are visited.
+
+ If an output to a node does not point to another node, it indicates
+ that the CPL server should perform a node- or protocol-specific
+ action. Some nodes have specific default behavior associated with
+ them; for others, the default behavior is implicit in the underlying
+ signalling protocol, or can be configured by the administrator of the
+ server. For further details on this, see Section 10.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Lennox, et al. Standards Track [Page 5]
+
+RFC 3880 CPL October 2004
+
+
+ _________________ ___________________ ________ busy
+ | Address-switch | | location | | proxy |--------\
+Call-->| field: origin | ->| url: sip:jones@ |->|timeout:| timeout|
+ | subfield: host | / | example.com | | 10s |--------|
+ |-----------------|/ |___________________| | | failure|
+ | subdomain-of: | |________|--------|
+ | example.com | |
+ |-----------------| ___________________________________________/
+ | otherwise | /........................................
+ | |\|. Voicemail .
+ |_________________| \. ____________________ .
+ ->| location | __________ .
+ . | url: sip:jones@ | | redirect | .
+ . | voicemail. |->| | .
+ . | example.com | |__________| .
+ . |____________________| .
+ ........................................
+
+ Figure 1: Sample CPL Action: Graphical Version
+
+2.3. Location Model
+
+ For flexibility, one piece of information necessary for CPL is not
+ given as node parameters: the set of locations to which a call is to
+ be directed. Instead, this set of locations is stored as an implicit
+ global variable throughout the execution of a processing action (and
+ its subactions). This allows locations to be retrieved from external
+ sources, filtered, and so forth, without requiring general language
+ support for such operations (which could harm the simplicity and
+ tractability of understanding the language). The specific operations
+ which add, retrieve, or filter location sets are given in Section 5.
+
+ For the incoming top-level call processing action, the location set
+ is initialized to the empty set. For the outgoing action, it is
+ initialized to the destination address of the call.
+
+2.4. XML Structure
+
+ Syntactically, CPL scripts are represented by XML documents. XML is
+ thoroughly specified by the XML specification [2], and implementors
+ of this specification should be familiar with that document.
+ However, as a brief overview, XML consists of a hierarchical
+ structure of tags; each tag can have a number of attributes. It is
+ visually and structurally very similar to HTML [18], as both
+ languages are simplifications of the earlier and larger standard SGML
+ [19].
+
+
+
+
+
+Lennox, et al. Standards Track [Page 6]
+
+RFC 3880 CPL October 2004
+
+
+ See Figure 2 for the XML document corresponding to the graphical
+ representation of the CPL script in Figure 1. Both nodes and outputs
+ in CPL are represented by XML tags; parameters are represented by XML
+ tag attributes. Typically, node tags contain output tags, and vice-
+ versa (with a few exceptions: see Sections 5.1, 5.3, 7.1, and 7.2).
+
+ The connection between the output of a node and another node is
+ represented by enclosing the tag representing the pointed-to node
+ inside the tag for the outer node's output. Convergence (several
+ outputs pointing to a single node) is represented by subactions,
+ discussed further in Section 8.
+
+ The higher-level structure of a CPL script is represented by tags
+ corresponding to each piece of ancillary information, subactions, and
+ top-level actions, in order. This higher-level information is all
+ enclosed in a special tag "cpl", the outermost tag of the XML
+ document.
+
+ A complete XML Schema for CPL is provided in Appendix C. The
+ remainder of the main sections of this document describe the
+ semantics of CPL, while giving its syntax informally. For the formal
+ syntax, please see the appendix.
+
+3. Script Structure: Overview
+
+ As mentioned, a CPL script consists of ancillary information,
+ subactions, and top-level actions. The full syntax of the "cpl" node
+ is given in Figure 3.
+
+ <?xml version="1.0" encoding="UTF-8"?>
+ <cpl xmlns="urn:ietf:params:xml:ns:cpl"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="urn:ietf:params:xml:ns:cpl cpl.xsd ">
+ <subaction id="voicemail">
+ <location url="sip:jones@voicemail.example.com">
+ <redirect />
+ </location>
+ </subaction>
+ <incoming>
+ <address-switch field="origin" subfield="host">
+ <address subdomain-of="example.com">
+ <location url="sip:jones@example.com">
+ <proxy timeout="10">
+ <busy> <sub ref="voicemail" /> </busy>
+ <noanswer> <sub ref="voicemail" /> </noanswer>
+ <failure> <sub ref="voicemail" /> </failure>
+ </proxy>
+ </location>
+
+
+
+Lennox, et al. Standards Track [Page 7]
+
+RFC 3880 CPL October 2004
+
+
+ </address>
+ <otherwise>
+ <sub ref="voicemail" />
+ </otherwise>
+ </address-switch>
+ </incoming>
+ </cpl>
+
+ Figure 2: Sample CPL Script: XML Version
+
+ Tag: "cpl"
+ Parameters: None
+ Sub-tags: "ancillary" See Section 9
+ "subaction" See Section 8
+ "outgoing" Top-level actions to take on this user's
+ outgoing calls
+ "incoming" Top-level actions to take on this user's
+ incoming calls
+
+ Figure 3: Syntax of the top-level "cpl" tag
+
+ Call processing actions, both top-level actions and subactions,
+ consist of a tree of nodes and outputs. Nodes and outputs are both
+ described by XML tags. There are four categories of CPL nodes:
+ switches, which represent choices a CPL script can make, location
+ modifiers, which add or remove locations from the location set,
+ signalling operations, which cause signalling events in the
+ underlying protocol, and non-signalling operations, which trigger
+ behavior which does not effect the underlying protocol.
+
+4. Switches
+
+ Switches represent choices a CPL script can make, based on either
+ attributes of the original call request or items independent of the
+ call.
+
+ All switches are arranged as a list of conditions that can match a
+ variable. Each condition corresponds to a node output; the output
+ points to the next node that should be executed if the condition is
+ true. The conditions are tried in the order they are presented in
+ the script; the output corresponding to the first node to match is
+ taken.
+
+ There are two special switch outputs that apply to every switch type.
+ The output "not-present", which MAY occur anywhere in the list of
+ outputs, is true if the variable the switch was to match was not
+ present in the original call setup request. (In this document, this
+ is sometimes described by saying that the information is "absent".)
+
+
+
+Lennox, et al. Standards Track [Page 8]
+
+RFC 3880 CPL October 2004
+
+
+ The output "otherwise", which MUST be the last output specified if it
+ is present, matches if no other condition matched.
+
+ If no condition matches and no "otherwise" output was present in the
+ script, the default script behavior is taken. See Section 10 for
+ more information on this.
+
+ Switches MAY contain no outputs. They MAY only contain an
+ "otherwise" output.
+
+ Such switches are not particularly useful, but might be created by
+ tools which automatically generate CPL scripts.
+
+4.1. Address Switches
+
+ Address switches allow a CPL script to make decisions based on one of
+ the addresses present in the original call request. They are
+ summarized in Figure 4.
+
+ Node: "address-switch"
+ Outputs: "address" Specific addresses to match
+ Parameters: "field" "origin", "destination",
+ or "original-destination"
+ "subfield" "address-type", "user", "host",
+ "port", "tel", or "display"
+ (also: "password" and "alias-type")
+
+ Output: "address"
+ Parameters: "is" Exact match
+ "contains" Substring match (for "display" only)
+ "subdomain-of" Sub-domain match (for "host", "tel")
+
+ Figure 4: Syntax of the "address-switch" node
+
+ Address switches have two node parameters: "field" and "subfield".
+ The mandatory "field" parameter allows the script to specify which
+ address is to be considered for the switch: either the call's origin
+ address (field "origin"), its current destination address (field
+ "destination"), or its original destination (field "original-
+ destination"), the destination the call had before any earlier
+ forwarding was invoked. Servers MAY define additional field values.
+
+ The optional "subfield" specifies which part of the address is to be
+ considered. The possible subfield values are: "address-type",
+ "user", "host", "port", "tel", and "display". Additional subfield
+ values MAY be defined for protocol-specific values. (The subfield
+ "password" is defined for SIP in Section 4.1.1; the subfield "alias-
+ type" is defined for H.323 in Appendix B.1.) If no subfield is
+
+
+
+Lennox, et al. Standards Track [Page 9]
+
+RFC 3880 CPL October 2004
+
+
+ specified, the "entire" address is matched; the precise meaning of
+ this is defined for each underlying signalling protocol. Servers MAY
+ define additional subfield values.
+
+ The subfields are defined as follows:
+
+ address-type: This indicates the type of the underlying address,
+ i.e., the URI scheme, if the address can be represented by a
+ URI. The types specifically discussed by this document are
+ "sip", "tel", and "h323". The address type is not case-
+ sensitive. It has a value for all defined address types.
+
+ user: This subfield of the address indicates, for e-mail style
+ addresses, the user part of the address. For a telephone
+ number style address, it includes the subscriber number.
+ This subfield is case-sensitive; it may be absent.
+
+ host: This subfield of the address indicates the Internet host
+ name or IP address corresponding to the address, in host
+ name, IPv4, or IPv6 [4] textual representation format. Host
+ names are compared as strings. IP addresses are compared
+ numerically. (In particular, the presence or location of an
+ IPv6 :: omitted-zero-bits block is not significant for
+ matching purposes.) Host names are never equal to IP
+ addresses -- no DNS resolution is performed. IPv4 addresses
+ are never equal to IPv6 addresses, even if the IPv6 address
+ is a v4-in-v6 embedding. This subfield is not case
+ sensitive, and may be absent.
+
+ For host names only, subdomain matching is supported with
+ the "subdomain-of" match operator. The "subdomain-of"
+ operator ignores leading dots in the hostname or match
+ pattern, if any.
+
+ port: This subfield indicates the TCP or UDP port number of the
+ address, numerically, in decimal format. It is not case
+ sensitive, as it MUST only contain decimal digits. Leading
+ zeros are ignored.
+
+ tel: This subfield indicates a telephone subscriber number, if
+ the address contains such a number. It is not case
+ sensitive (telephone numbers may contain the symbols 'A',
+ 'B', 'C', or 'D'), and may be absent. It may be matched
+ using the "subdomain-of" match operator. Punctuation and
+ separator characters in telephone numbers are discarded.
+
+
+
+
+
+
+Lennox, et al. Standards Track [Page 10]
+
+RFC 3880 CPL October 2004
+
+
+ display: This subfield indicates a "display name" or user-visible
+ name corresponding to an address. It is a Unicode string,
+ and is matched using the case-insensitive algorithm
+ described in Section 4.2. The "contains" operator may be
+ applied to it. It may be absent.
+
+ For any completely unknown subfield, the server MAY reject the script
+ at the time it is submitted with an indication of the problem; if a
+ script with an unknown subfield is executed, the server MUST consider
+ the "not-present" output to be the valid one.
+
+ The "address" output tag may take exactly one of three possible
+ parameters, indicating the kind of matching allowed.
+
+ is: An output with this match operator is followed if the
+ subfield being matched in the "address-switch" exactly
+ matches the argument of the operator. It may be used for
+ any subfield, or for the entire address if no subfield was
+ specified.
+
+ subdomain-of: This match operator applies only for the subfields
+ "host" and "tel". In the former case, it matches if the
+ hostname being matched is a subdomain of the domain given in
+ the argument of the match operator; thus, subdomain-
+ of="example.com" would match the hostnames "example.com",
+ "research.example.com", and
+ "zaphod.sales.internal.example.com". IP addresses may be
+ given as arguments to this operator; however, they only
+ match exactly. In the case of the "tel" subfield, the
+ output matches if the telephone number being matched has a
+ prefix that matches the argument of the match operator;
+ subdomain-of="1212555" would match the telephone number "1
+ 212 555 1212."
+
+ contains: This match operator applies only for the subfield
+ "display". The output matches if the display name being
+ matched contains the argument of the match as a substring.
+
+4.1.1. Usage of "address-switch" with SIP
+
+ For SIP, the "origin" address corresponds to the address in the
+ "From" header, "destination" corresponds to the "Request-URI", and
+ "original-destination" corresponds to the "To" header.
+
+ The "display" subfield of an address is the display-name part of the
+ address, if it is present. Because of SIP's syntax, the
+ "destination" address field will never have a "display" subfield.
+
+
+
+
+Lennox, et al. Standards Track [Page 11]
+
+RFC 3880 CPL October 2004
+
+
+ The "address-type" subfield of an address is the URI scheme of that
+ address. Other address fields depend on that "address-type".
+
+ For SIP URIs, the "user", "host", and "port" subfields correspond to
+ the "user," "host," and "port" elements of the URI syntax. (Note
+ that, following the definitions of RFC 3261 [1], a SIP URI which does
+ not specify a port is not the same as an explicit port 5060; the
+ former is indicated by an absent port subfield.) The "tel" subfield
+ is defined to be the "user" part of the URI, with visual separators
+ stripped, if the "user=phone" parameter is given to the URI, or if
+ the server is otherwise configured to recognize the user part as a
+ telephone number. An additional subfield, "password", is defined to
+ correspond to the "password" element of the SIP URI, and is case-
+ sensitive. However, use of this field is NOT RECOMMENDED for general
+ security reasons.
+
+ For tel URLs, the "tel" and "user" subfields are the subscriber name;
+ in the former case, visual separators are stripped. The "host" and
+ "port" subfields are both not present.
+
+ For h323 URLs, subfields MAY be set according to the scheme described
+ in Appendix B.
+
+ For other URI schemes, only the "address-type" subfield is defined by
+ this specification; servers MAY set other pre-defined subfields, or
+ MAY support additional subfields.
+
+ If no subfield is specified for addresses in SIP messages, the string
+ matched is the URI part of the address. For "is" matches, standard
+ SIP URI matching rules are used; for "contains" matches, the URI is
+ used verbatim.
+
+4.2. String Switches
+
+ String switches allow a CPL script to make decisions based on free-
+ form strings present in a call request. They are summarized in
+ Figure 5.
+
+ Node: "string-switch"
+ Outputs: "string" Specific string to match
+ Parameters: "field" "subject", "organization",
+ "user-agent", or "display"
+
+ Output: "string"
+ Parameters: "is" Exact match
+ "contains" Substring match
+
+ Figure 5: Syntax of the "string-switch" node
+
+
+
+Lennox, et al. Standards Track [Page 12]
+
+RFC 3880 CPL October 2004
+
+
+ String switches have one node parameter: "field". The mandatory
+ "field" parameter specifies which string is to be matched.
+
+ String switches are dependent on the call signalling protocol being
+ used.
+
+ Four fields are defined and listed below. The value of each of these
+ fields is a free-form Unicode string with no other structure defined.
+
+ subject: The subject of the call.
+
+ organization: The organization of the originator of the call.
+
+ user-agent: The name of the program or device with which the call
+ request was made.
+
+ display: Free-form text associated with the call, intended to be
+ displayed to the recipient, with no other semantics defined
+ by the signalling protocol.
+
+ Strings are matched as case-insensitive Unicode strings, in the
+ following manner. First, strings are canonicalized to the
+ "Compatibility Composition" (KC) form, as specified in Unicode
+ Standard Annex #15 [5]. Then, strings are compared using locale-
+ insensitive caseless mapping, as specified in Unicode Standard Annex
+ #21 [6].
+
+ Code to perform the first step, in Java and Perl, is available;
+ see the links from Annex 5 of UAX 15 [5]. The case-insensitive
+ string comparison in the Java standard class libraries already
+ performs the second step; other Unicode-aware libraries should be
+ similar.
+
+ The output tag of string matching is named "string", and has a
+ mandatory argument, one of "is" or "contains", indicating whole-
+ string match or substring match, respectively.
+
+4.2.1. Usage of "string-switch" with SIP
+
+ For SIP, the fields "subject", "organization", and "user-agent"
+ correspond to the SIP header fields with the same name. These are
+ used verbatim as they appear in the message.
+
+ The field "display" is not used, and is never present.
+
+
+
+
+
+
+
+Lennox, et al. Standards Track [Page 13]
+
+RFC 3880 CPL October 2004
+
+
+4.3. Language Switches
+
+ Language switches allow a CPL script to make decisions based on the
+ languages in which the originator of the call wishes to communicate.
+ They are summarized in Figure 6.
+
+ Node: "language-switch"
+ Outputs: "language" Specific string to match
+ Parameters: None
+
+ Output: "language"
+ Parameters: "matches" Match if the given language
+ matches a language-range of the
+ call.
+
+ Figure 6: Syntax of the "language-switch" node
+
+ Language switches take no parameters.
+
+ The "language" output takes one parameter, "matches". The value of
+ the parameter is a language-tag, as defined in RFC 3066 [7]. The
+ caller may have specified a set of language-ranges, also as defined
+ in RFC 3066. The CPL server checks each language-tag specified by
+ the script against the language-ranges specified in the request.
+
+ See RFC 3066 for the details of how language-ranges match language-
+ tags. Briefly, a language-range matches a language-tag if it exactly
+ equals the tag, or if it exactly equals a prefix of the tag such that
+ the first character following the prefix is "-".
+
+ If the caller specified the special language-range "*", it is ignored
+ for the purpose of matching. Languages with a "q" value of 0 are
+ also ignored.
+
+ This switch MAY be not-present.
+
+4.3.1. Usage of "language-switch" with SIP
+
+ The language-ranges for the "language-switch" switch are obtained
+ from the SIP "Accept-Language" header field. The switch is not-
+ present if the initial SIP request did not contain this header field.
+
+ Note that because of CPL's first-match semantics in switches, "q"
+ values other than 0 of the "Accept-Language" header fields are
+ ignored.
+
+
+
+
+
+
+Lennox, et al. Standards Track [Page 14]
+
+RFC 3880 CPL October 2004
+
+
+4.4. Time Switches
+
+ Time switches allow a CPL script to make decisions based on the time
+ and/or date the script is being executed. They are summarized in
+ Figure 7.
+
+ Time switches are independent of the underlying signalling protocol.
+
+ Node: "time-switch"
+ Outputs: "time" Specific time to match
+ Parameters: "tzid" RFC 2445 Time Zone Identifier
+ "tzurl" RFC 2445 Time Zone URL
+
+ Output: "time"
+ Parameters: "dtstart" Start of interval (RFC 2445 DATE-TIME)
+ "dtend" End of interval (RFC 2445 DATE-TIME)
+ "duration" Length of interval (RFC 2445 DURATION)
+ "freq" Frequency of recurrence ("secondly",
+ "minutely", "hourly", "daily",
+ "weekly", "monthly", or "yearly")
+ "interval" How often the recurrence repeats
+ "until" Bound of recurrence (RFC 2445 DATE-TIME)
+ "count" Number of occurrences of recurrence
+ "bysecond" List of seconds within a minute
+ "byminute" List of minutes within an hour
+ "byhour" List of hours of the day
+ "byday" List of days of the week
+ "bymonthday" List of days of the month
+ "byyearday" List of days of the year
+ "byweekno" List of weeks of the year
+ "bymonth" List of months of the year
+ "wkst" First day of the work week
+ "bysetpos" List of values within
+ set of events specified
+
+ Figure 7: Syntax of the "time-switch" node
+
+ Time switches are based closely on the specification of recurring
+ intervals of time in the Internet Calendaring and Scheduling Core
+ Object Specification (iCalendar COS), RFC 2445 [8].
+
+ This allows CPL scripts to be generated automatically from
+ calendar books. It also allows us to re-use the extensive
+ existing work specifying time intervals.
+
+ If future standards-track documents are published that update or
+ obsolete RFC 2445, any changes or clarifications those documents make
+ to recurrence handling apply to CPL time-switches as well.
+
+
+
+Lennox, et al. Standards Track [Page 15]
+
+RFC 3880 CPL October 2004
+
+
+ An algorithm to determine whether an instant falls within a given
+ recurrence is given in Appendix A.
+
+ The "time-switch" tag takes two optional parameters, "tzid" and
+ "tzurl", both of which are defined in RFC 2445 (Sections 4.8.3.1 and
+ 4.8.3.5 respectively). The "tzid" is the identifying label by which
+ a time zone definition is referenced. If it begins with a forward
+ slash (solidus), it references a to-be-defined global time zone
+ registry; otherwise it is locally-defined at the server. The "tzurl"
+ gives a network location from which an up-to-date VTIMEZONE
+ definition for the timezone can be retrieved.
+
+ While "tzid" labels that do not begin with a forward slash are
+ locally defined, it is RECOMMENDED that servers support at least the
+ naming scheme used by the Olson Time Zone database [9]. Examples of
+ timezone databases that use the Olson scheme are the zoneinfo files
+ on most Unix-like systems, and the standard Java TimeZone class.
+
+ Servers SHOULD resolve "tzid" and "tzurl" references to time zone
+ definitions at the time the script is uploaded. They MAY
+ periodically refresh these resolutions to obtain the most up-to-date
+ definition of a time zone. If a "tzurl" becomes invalid, servers
+ SHOULD remember the most recent valid data retrieved from the URL.
+
+ If a script is uploaded with a "tzid" and "tzurl" which the CPL
+ server does not recognize or cannot resolve, it SHOULD diagnose and
+ reject this at script upload time. If neither "tzid" nor "tzurl" are
+ present, all non-UTC times within this time switch should be
+ interpreted as being "floating" times, i.e., that they are specified
+ in the local timezone of the CPL server.
+
+ Because of daylight-savings-time changes over the course of a
+ year, it is necessary to specify time switches in a given
+ timezone. UTC offsets are not sufficient, or a time-of-day
+ routing rule which held between 9 am and 5 pm in the eastern
+ United States would start holding between 8 am and 4 pm at the end
+ of October.
+
+ Authors of CPL servers should be careful to handle correctly the
+ intervals when local time is discontinuous, at the beginning or end
+ of daylight-savings time. Note especially that some times may occur
+ more than once when clocks are set back. The algorithm in Appendix A
+ is believed to handle this correctly.
+
+ Time nodes specify a list of periods during which their output should
+ be taken. They have two required parameters: "dtstart", which
+ specifies the beginning of the first period of the list, and exactly
+ one of "dtend" or "duration", which specify the ending time or the
+
+
+
+Lennox, et al. Standards Track [Page 16]
+
+RFC 3880 CPL October 2004
+
+
+ duration of the period, respectively. The "dtstart" and "dtend"
+ parameters are formatted as iCalendar COS DATE-TIME values, as
+ specified in Section 4.3.5 of RFC 2445 [8]. Because time zones are
+ specified in the top-level "time-switch" tag, only forms 1 or 2
+ (floating or UTC times) can be used. The "duration" parameter is
+ given as an iCalendar COS DURATION parameter, as specified in section
+ 4.3.6 of RFC 2445. Both the DATE-TIME and the DURATION syntaxes are
+ subsets of the corresponding syntaxes from ISO 8601 [20].
+
+ For a recurring interval, the "duration" parameter MUST be small
+ enough such that subsequent intervals do not overlap. For non-
+ recurring intervals, durations of any positive length are permitted.
+ Zero-length and negative-length durations are not allowed.
+
+ If no other parameters are specified, a time node indicates only a
+ single period of time. More complicated sets of period intervals are
+ constructed as recurrences. A recurrence is specified by including
+ the "freq" parameter, which indicates the type of recurrence rule.
+ Parameters other than "dtstart", "dtend", and "duration" SHOULD NOT
+ be specified unless "freq" is present, though CPL servers SHOULD
+ accept scripts with such parameters present, and ignore the other
+ parameters.
+
+ The "freq" parameter takes one of the following values: "secondly",
+ to specify repeating periods based on an interval of a second or
+ more, "minutely", to specify repeating periods based on an interval
+ of a minute or more, "hourly", to specify repeating periods based on
+ an interval of an hour or more, "daily", to specify repeating periods
+ based on an interval of a day or more, "weekly", to specify repeating
+ periods based on an interval of a week or more, "monthly", to specify
+ repeating periods based on an interval of a month or more, and
+ "yearly", to specify repeating periods based on an interval of a year
+ or more. These values are not case-sensitive.
+
+ The "interval" parameter contains a positive integer representing how
+ often the recurrence rule repeats. The default value is "1", meaning
+ every second for a "secondly" rule, every minute for a "minutely"
+ rule, every hour for an "hourly" rule, every day for a "daily" rule,
+ every week for a "weekly" rule, every month for a "monthly" rule, and
+ every year for a "yearly" rule.
+
+ The "until" parameter defines an iCalendar COS DATE or DATE-TIME
+ value which bounds the recurrence rule in an inclusive manner. If
+ the value specified by "until" is synchronized with the specified
+ recurrence, this date or date-time becomes the last instance of the
+ recurrence. If specified as a date-time value, then it MUST be
+
+
+
+
+
+Lennox, et al. Standards Track [Page 17]
+
+RFC 3880 CPL October 2004
+
+
+ specified in UTC time format. If not present, and the "count"
+ parameter is not also present, the recurrence is considered to repeat
+ forever.
+
+ The "count" parameter defines the number of occurrences at which to
+ range-bound the recurrence. The "dtstart" parameter counts as the
+ first occurrence. The "until" and "count" parameters MUST NOT occur
+ in the same "time" output.
+
+ The "bysecond" parameter specifies a comma-separated list of seconds
+ within a minute. Valid values are 0 to 59. The "byminute" parameter
+ specifies a comma-separated list of minutes within an hour. Valid
+ values are 0 to 59. The "byhour" parameter specifies a comma-
+ separated list of hours of the day. Valid values are 0 to 23.
+
+ The "byday" parameter specifies a comma-separated list of days of the
+ week. "MO" indicates Monday, "TU" indicates Tuesday, "WE" indicates
+ Wednesday, "TH" indicates Thursday, "FR" indicates Friday, "SA"
+ indicates Saturday, and "SU" indicates Sunday. These values are not
+ case-sensitive.
+
+ Each "byday" value can also be preceded by a positive (+n) or
+ negative (-n) integer. If present, this indicates the nth occurrence
+ of the specific day within the "monthly" or "yearly" recurrence. For
+ example, within a "monthly" rule, +1MO (or simply 1MO) represents the
+ first Monday within the month, whereas -1MO represents the last
+ Monday of the month. If an integer modifier is not present, it means
+ all days of this type within the specified frequency. For example,
+ within a "monthly" rule, MO represents all Mondays within the month.
+
+ The "bymonthday" parameter specifies a comma-separated list of days
+ of the month. Valid values are 1 to 31 or -31 to -1. For example,
+ -10 represents the tenth to the last day of the month.
+
+ The "byyearday" parameter specifies a comma-separated list of days of
+ the year. Valid values are 1 to 366 or -366 to -1. For example, -1
+ represents the last day of the year (December 31st) and -306
+ represents the 306th to the last day of the year (March 1st).
+
+ The "byweekno" parameter specifies a comma-separated list of ordinals
+ specifying weeks of the year. Valid values are 1 to 53 or -53 to -1.
+ This corresponds to weeks according to week numbering as defined in
+ ISO 8601 [20]. A week is defined as a seven day period, starting on
+ the day of the week defined to be the week start (see "wkst"). Week
+ number one of the calendar year is the first week which contains at
+ least four (4) days in that calendar year. This parameter is only
+ valid for "yearly" rules. For example, 3 represents the third week
+ of the year.
+
+
+
+Lennox, et al. Standards Track [Page 18]
+
+RFC 3880 CPL October 2004
+
+
+ Note: Assuming a Monday week start, week 53 can only occur when
+ January 1 is a Thursday or, for leap years, if January 1 is a
+ Wednesday.
+
+ The "bymonth" parameter specifies a comma-separated list of months of
+ the year. Valid values are 1 to 12.
+
+ The "wkst" parameter specifies the day on which the work week starts.
+ Valid values are "MO", "TU", "WE", "TH", "FR", "SA" and "SU". This
+ is significant when a "weekly" recurrence has an interval greater
+ than 1, and a "byday" parameter is specified. This is also
+ significant in a "yearly" recurrence when a "byweekno" parameter is
+ specified. The default value is "MO", following ISO 8601 [20].
+
+ The "bysetpos" parameter specifies a comma-separated list of values
+ which corresponds to the nth occurrence within the set of events
+ specified by the rule. Valid values are 1 to 366 or -366 to -1. It
+ MUST only be used in conjunction with another byxxx parameter. For
+ example, "the last work day of the month" could be represented as:
+
+ <time -timerange- freq="monthly" byday="MO,TU,WE,TH,FR"
+ bysetpos="-1">
+
+ Each "bysetpos" value can include a positive (+n) or negative (-n)
+ integer. If present, this indicates the nth occurrence of the
+ specific occurrence within the set of events specified by the rule.
+
+ If byxxx parameter values are found which are beyond the available
+ scope (i.e., bymonthday="30" in February), they are simply ignored.
+
+ Byxxx parameters modify the recurrence in some manner. Byxxx rule
+ parts for a period of time which is the same or greater than the
+ frequency generally reduce or limit the number of occurrences of the
+ recurrence generated. For example, freq="daily" bymonth="1" reduces
+ the number of recurrence instances from all days (if the "bymonth"
+ parameter is not present) to all days in January. Byxxx parameters
+ for a period of time less than the frequency generally increase or
+ expand the number of occurrences of the recurrence. For example,
+ freq="yearly" bymonth="1,2" increases the number of days within the
+ yearly recurrence set from 1 (if "bymonth" parameter is not present)
+ to 2.
+
+ If multiple Byxxx parameters are specified, then after evaluating the
+ specified "freq" and "interval" parameters, the Byxxx parameters are
+ applied to the current set of evaluated occurrences in the following
+ order: "bymonth", "byweekno", "byyearday", "bymonthday", "byday",
+ "byhour", "byminute", "bysecond", and "bysetpos"; then "count" and
+ "until" are evaluated.
+
+
+
+Lennox, et al. Standards Track [Page 19]
+
+RFC 3880 CPL October 2004
+
+
+ Here is an example of evaluating multiple Byxxx parameters.
+
+ <time dtstart="19970105T083000" duration="10M"
+ freq="yearly" interval="2" bymonth="1" byday="SU"
+ byhour="8,9" byminute="30">
+
+ First, the interval="2" would be applied to freq="yearly" to arrive
+ at "every other year." Then, bymonth="1" would be applied to arrive
+ at "every January, every other year." Then, byday="SU" would be
+ applied to arrive at "every Sunday in January, every other year."
+ Then, byhour="8,9" would be applied to arrive at "every Sunday in
+ January at 8 AM and 9 AM, every other year." Then, byminute="30"
+ would be applied to arrive at "every Sunday in January at 8:30 AM and
+ 9:30 AM, every other year." Then the second is derived from
+ "dtstart" to end up in "every Sunday in January from 8:30:00 AM to
+ 8:40:00 AM, and from and 9:30:00 AM to 9:40:00 AM, every other year."
+ Similarly, if the "byminute", "byhour", "byday", "bymonthday", or
+ "bymonth" parameter were missing, the appropriate minute, hour, day,
+ or month would have been retrieved from the "dtstart" parameter.
+
+ The iCalendar COS RDATE, EXRULE, and EXDATE recurrence rules are not
+ specifically mapped to components of the time-switch node.
+ Equivalent functionality to the exception rules can be attained by
+ using the ordering of switch rules to exclude times using earlier
+ rules; equivalent functionality to the additional-date RDATE rules
+ can be attained by using "sub" nodes (see Section 8) to link multiple
+ outputs to the same subsequent node.
+
+ The "not-present" output is never true for a time switch. However,
+ it MAY be included to allow switch processing to be more regular.
+
+4.4.1. iCalendar Differences and Implementation Issues
+
+ (This sub-sub-section is non-normative.)
+
+ The specification of recurring events in this section is identical
+ (except for syntax and formatting issues) to that of RFC 2445 [8],
+ with only one additional restriction. That one restriction is that
+ consecutive instances of recurrence intervals may not overlap.
+
+ It was a matter of some debate, during the design of CPL, whether the
+ entire iCalendar COS recurrence specification should be included in
+ CPL, or whether only a subset should be included. It was eventually
+ decided that compatibility between the two protocols was of primary
+ importance. This imposes some additional implementation issues on
+ implementors of CPL servers.
+
+
+
+
+
+Lennox, et al. Standards Track [Page 20]
+
+RFC 3880 CPL October 2004
+
+
+ It does not appear to be possible to determine, in constant time,
+ whether a given instant of time falls within one of the intervals
+ defined by a full iCalendar COS recurrence. The primary concerns are
+ as follows:
+
+ o The "count" parameter cannot be checked in constant running
+ time, since it requires that the server enumerate all
+ recurrences from "dtstart" to the present time, in order to
+ determine whether the current recurrence satisfies the
+ parameter. However, a server can expand a "count" parameter
+ once, off-line, to determine the date of the last recurrence.
+ This date can then be treated as a virtual "until" parameter
+ for the server's internal processing.
+
+ o Similarly, the "bysetpos" parameter requires that the server
+ enumerate all instances of the occurrence from the start of the
+ current recurrence set until the present time. This requires
+ somewhat more complex pre-processing, but generally, a single
+ recurrence with a "bysetpos" parameter can be split up into
+ several recurrences without them.
+
+ o Finally, constant running time of time switches also requires
+ that a candidate starting time for a recurrence can be
+ established quickly and uniquely, to check whether it satisfies
+ the other restrictions. This requires that a recurrence's
+ duration not be longer than its repetition interval, so that a
+ given instant cannot fall within several consecutive potential
+ repetitions of the recurrence. The restriction that
+ consecutive intervals not overlap partially satisfies this
+ condition, but does not fully ensure it. Again, to some extent
+ pre-processing can help resolve this.
+
+ The algorithm given in Appendix A runs in constant time after these
+ pre-processing steps.
+
+ Servers ought to check that recurrence rules do not create any absurd
+ run-time or memory requirements, and reject those that do, just as
+ they ought to check that CPL scripts in general are not absurdly
+ large.
+
+4.5. Priority Switches
+
+ Priority switches allow a CPL script to make decisions based on the
+ priority specified for the original call. They are summarized in
+ Figure 8. They are dependent on the underlying signalling protocol.
+
+
+
+
+
+
+Lennox, et al. Standards Track [Page 21]
+
+RFC 3880 CPL October 2004
+
+
+ Node: "priority-switch"
+ Outputs: "priority" Specific priority to match
+ Parameters: None
+
+ Output: "priority"
+ Parameters: "less" Match if priority is less
+ than that specified
+ "greater" Match if priority is greater
+ than that specified
+ "equal" Match if priority is equal
+ to that specified
+
+ Figure 8: Syntax of the "priority-switch" node
+
+ Priority switches take no parameters.
+
+ The "priority" tag takes one of the three parameters "greater",
+ "less", or "equal". The values of these parameters are one of the
+ following priorities: in decreasing order, "emergency", "urgent",
+ "normal", and "non-urgent". These values are matched in a case-
+ insensitive manner. Outputs with the "less" parameter are taken if
+ the priority of the call is less than the priority given in the
+ argument, and so forth.
+
+ If no priority is specified in a message, the priority is considered
+ to be "normal". If an unknown priority is specified in the call, it
+ is considered to be equivalent to "normal" for the purposes of
+ "greater" and "less" comparisons, but it is compared literally for
+ "equal" comparisons.
+
+ Since every message has a priority, the "not-present" output is never
+ true for a priority switch. However, it MAY be included, to allow
+ switch processing to be more regular.
+
+4.5.1. Usage of "priority-switch" with SIP
+
+ The priority of a SIP message corresponds to the "Priority" header in
+ the initial "INVITE" message.
+
+5. Location Modifiers
+
+ The abstract location model of CPL is described in Section 2.3. The
+ behavior of several of the signalling operations (defined in Section
+ 6) is dependent on the current location set specified. Location
+ nodes add or remove locations from the location set.
+
+
+
+
+
+
+Lennox, et al. Standards Track [Page 22]
+
+RFC 3880 CPL October 2004
+
+
+ There are three types of location nodes defined. Explicit locations
+ add literally-specified locations to the current location set,
+ location lookups obtain locations from some outside source, and
+ location filters remove locations from the set, based on some
+ specified criteria.
+
+5.1. Explicit Location
+
+ Explicit location nodes specify a location literally. Their syntax
+ is described in Figure 9.
+
+ Explicit location nodes are dependent on the underlying signalling
+ protocol.
+
+ Node: "location"
+ Outputs: None (Next node follows directly)
+ Next node: Any node
+ Parameters: "url" URL of address to add to location set
+ "priority" Priority of this location (0.0-1.0)
+ "clear" Whether to clear the location set before
+ adding the new value
+
+ Figure 9: Syntax of the "location" node
+
+ Explicit location nodes have three node parameters. The mandatory
+ "url" parameter's value is the URL of the address to add to the
+ location set. Only one address may be specified per location node;
+ multiple locations may be specified by cascading these nodes.
+
+ The optional "priority" parameter specifies a priority for the
+ location. Its value is a floating-point number between 0.0 and 1.0.
+ If it is not specified, the server SHOULD assume a default priority
+ of 1.0. The optional "clear" parameter specifies whether the
+ location set should be cleared before adding the new location to it.
+ Its value can be "yes" or "no", with "no" as the default.
+
+ Basic location nodes have only one possible result, since there is no
+ way that they can fail. (If a basic location node specifies a
+ location which isn't supported by the underlying signalling protocol,
+ the script server SHOULD detect this and report it to the user at the
+ time the script is submitted.) Therefore, their XML representations
+ do not have explicit output tags; the <location> tag directly
+ contains another node.
+
+5.1.1. Usage of "location" with SIP
+
+ All SIP locations are represented as URLs, so the locations specified
+ in "location" tags are interpreted directly.
+
+
+
+Lennox, et al. Standards Track [Page 23]
+
+RFC 3880 CPL October 2004
+
+
+5.2. Location Lookup
+
+ Locations can also be specified up through external means, through
+ the use of location lookups. The syntax of these tags is given in
+ Figure 10.
+
+ Location lookup is dependent on the underlying signalling protocol.
+
+ Node: "lookup"
+ Outputs: "success" Next node if lookup was successful
+ "notfound" Next node if lookup found no addresses
+ "failure" Next node if lookup failed
+ Parameters: "source" Source of the lookup
+ "timeout" Time to try before giving up on the lookup
+ "clear" Whether to clear the location set before
+ adding the new values
+
+ Output: "success"
+ Parameters: none
+
+ Output: "notfound"
+ Parameters: none
+
+ Output: "failure"
+ Parameters: none
+
+ Figure 10: Syntax of the "lookup" node
+
+ Location lookup nodes have one mandatory parameter and two optional
+ parameters. The mandatory parameter is "source", the source of the
+ lookup. This can either be a URI, or a non-URI value. If the value
+ of "source" is a URI, it indicates a location which the CPL server
+ can query to obtain an object with the text/uri-list media type (see
+ the IANA registration of this type, which also appears in RFC 2483
+ [10]). The query is performed verbatim, with no additional
+ information (such as URI parameters) added. The server adds the
+ locations contained in this object to the location set.
+
+ CPL servers MAY refuse to allow URI-based sources for location
+ queries for some or all URI schemes. In this case, they SHOULD
+ reject the script at script upload time.
+
+ There has been discussion of having CPL servers add URI parameters
+ to the location request, so that (for instance) CGI scripts could
+ be used to resolve them. However, the consensus was that this
+ should be a CPL extension, not a part of the base specification.
+
+
+
+
+
+Lennox, et al. Standards Track [Page 24]
+
+RFC 3880 CPL October 2004
+
+
+ Non-URL sources indicate a source not specified by a URL which the
+ server can query for addresses to add to the location set. The only
+ non-URL source currently defined is "registration", which specifies
+ all the locations currently registered with the server.
+
+ The "lookup" node also has two optional parameters. The "timeout"
+ parameter specifies the time, as a positive integer number of
+ seconds, the script is willing to wait for the lookup to be
+ performed. If this is not specified, its default value is 30. The
+ "clear" parameter specifies whether the location set should be
+ cleared before the new locations are added.
+
+ Lookup has three outputs: "success", "notfound", and "failure".
+ Notfound is taken if the lookup process succeeded but did not find
+ any locations; failure is taken if the lookup failed for some reason,
+ including that the specified timeout was exceeded. If a given output
+ is not present, script execution terminates and the default behavior
+ is performed.
+
+5.2.1. Usage of "lookup" with SIP
+
+ For SIP, the "registration" lookup source corresponds to the
+ locations registered with the server using "REGISTER" messages.
+
+5.3. Location Removal
+
+ A CPL script can also remove locations from the location set, through
+ the use of the "remove-location" node. The syntax of this node is
+ defined in Figure 11.
+
+ The meaning of this node is dependent on the underlying signalling
+ Protocol.
+
+ Node: "remove-location"
+ Outputs: None (Next node follows directly)
+ Next node: Any node
+ Parameters: "location" Location to remove
+
+ Figure 11: Syntax of the "remove-location" node
+
+ A "remove-location" node removes locations from the location set. It
+ is primarily useful following a "lookup" node. An example of this is
+ given in Section 12.8.
+
+ The "remove-location" node has one optional parameter. The parameter
+ "location" gives the URI of a location to be removed from the set, in
+ a signalling-protocol-dependent manner. If this parameter is not
+ given, all locations are removed from the set.
+
+
+
+Lennox, et al. Standards Track [Page 25]
+
+RFC 3880 CPL October 2004
+
+
+ The "remove-location" node has no explicit output tags. In the XML
+ syntax, the XML "remove-location" tag directly encloses the next
+ node's tag.
+
+5.3.1. Usage of "remove-location" with SIP
+
+ The location specified in the "location" parameter of the "remove-
+ location" node is matched against the location set using the standard
+ rules for SIP URI matching (as are used, e.g., to match Contact
+ addresses when refreshing registrations).
+
+6. Signalling Operations
+
+ Signalling operation nodes cause signalling events in the underlying
+ signalling protocol. Three signalling operations are defined:
+ "proxy," "redirect," and "reject."
+
+6.1. Proxy
+
+ Proxy causes the triggering call to be forwarded on to the currently
+ specified set of locations. The syntax of the proxy node is given in
+ Figure 12.
+
+ The specific signalling events invoked by the "proxy" node are
+ signalling-protocol-dependent, though the general concept should
+ apply to any signalling protocol.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Lennox, et al. Standards Track [Page 26]
+
+RFC 3880 CPL October 2004
+
+
+ Node: "proxy"
+ Outputs: "busy" Next node if call attempt returned "busy"
+ "noanswer" Next node if call attempt was not
+ answered before timeout
+ "redirection" Next node if call attempt was redirected
+ "failure" Next node if call attempt failed
+ "default" Default next node for unspecified outputs
+ Parameters: "timeout" Time to try before giving up on the
+ call attempt
+ "recurse" Whether to recursively look up
+ redirections
+ "ordering" What order to try the location set in.
+
+ Output: "busy"
+ Parameters: none
+
+ Output: "noanswer"
+ Parameters: none
+
+ Output: "redirection"
+ Parameters: none
+
+ Output: "failure"
+ Parameters: none
+
+ Output: "default"
+ Parameters: none
+
+ Figure 12: Syntax of the "proxy" node
+
+ After a proxy operation has completed, the CPL server chooses the
+ "best" response to the call attempt, as defined by the signalling
+ protocol or the server's administrative configuration rules.
+
+ If the call attempt was successful, CPL execution terminates and the
+ server proceeds to its default behavior (normally, to allow the call
+ to be set up). Otherwise, the next node corresponding to one of the
+ "proxy" node's outputs is taken. The "busy" output is followed if
+ the call was busy, "noanswer" is followed if the call was not
+ answered before the "timeout" parameter expired, "redirection" is
+ followed if the call was redirected, and "failure" is followed if the
+ call setup failed for any other reason.
+
+ If one of the conditions above is true, but the corresponding output
+ was not specified, the "default" output of the "proxy" node is
+ followed instead. If there is also no "default" node specified, CPL
+ execution terminates and the server returns to its default behavior
+ (normally, to forward the best response upstream to the originator).
+
+
+
+Lennox, et al. Standards Track [Page 27]
+
+RFC 3880 CPL October 2004
+
+
+ Note: CPL extensions to allow in-call or end-of-call operations
+ will require an additional output, such as "success", to be added.
+
+ If no locations were present in the set, or if the only locations in
+ the set were locations to which the server cannot proxy a call (for
+ example, "http" URLs), the "failure" output is taken.
+
+ Proxy has three optional parameters. The "timeout" parameter
+ specifies the time, as a positive integer number of seconds, to wait
+ for the call to be completed or rejected; after this time has
+ elapsed, the call attempt is terminated and the "noanswer" branch is
+ taken. If this parameter is not specified, the default value is 20
+ seconds if the "proxy" node has a "noanswer" or "default" output
+ specified; otherwise the server SHOULD allow the call to ring for a
+ reasonably long period of time (to the maximum extent that server
+ policy allows).
+
+ The second optional parameter is "recurse", which can take two
+ values, "yes" or "no". This specifies whether the server should
+ automatically attempt to place further call attempts to telephony
+ addresses in redirection responses that were returned from the
+ initial server. Note that if the value of "recurse" is "yes", the
+ "redirection" output to the script is never taken. In this case this
+ output SHOULD NOT be present. The default value of this parameter is
+ "yes".
+
+ The third optional parameter is "ordering". This can have three
+ possible values: "parallel", "sequential", and "first-only". This
+ parameter specifies in what order the locations of the location set
+ should be tried. Parallel asks that they all be tried
+ simultaneously; sequential asks that the one with the highest
+ priority be tried first, the one with the next-highest priority
+ second, and so forth, until one succeeds or the set is exhausted.
+ First-only instructs the server to try only the highest-priority
+ address in the set, and then follow one of the outputs. The priority
+ of locations in a set is determined by server policy, though CPL
+ servers SHOULD honor the "priority" parameter of the "location" tag.
+ The default value of this parameter is "parallel".
+
+ Once a proxy operation completes, if control is passed on to other
+ nodes, all locations which have been used are cleared from the
+ location set. That is, the location set is emptied of proxyable
+ locations if the "ordering" was "parallel" or "sequential"; the
+ highest-priority item in the set is removed from the set if
+ "ordering" was "first-only". (In all cases, non-proxyable locations
+ such as "http" URIs remain.) In the case of a "redirection" output,
+ the new addresses to which the call was redirected are then added to
+ the location set.
+
+
+
+Lennox, et al. Standards Track [Page 28]
+
+RFC 3880 CPL October 2004
+
+
+6.1.1. Usage of "proxy" with SIP
+
+ For SIP, the best response to a "proxy" node is determined by the
+ algorithm of the SIP specification. The node's outputs correspond to
+ the following events:
+
+ busy: A 486 or 600 response was the best response received for the
+ call request.
+
+ redirection: A 3xx response was the best response received for the
+ call request.
+
+ failure: Any other 4xx, 5xx, or 6xx response was the best response
+ received for the call request.
+
+ no-answer: No final response was received for the call request
+ before the timeout expired.
+
+ SIP servers SHOULD honor the "q" parameter of SIP registrations when
+ determining location priority.
+
+6.2. Redirect
+
+ Redirect causes the server to direct the calling party to attempt to
+ place its call to the currently specified set of locations. The
+ syntax of this node is specified in Figure 13.
+
+ The specific behavior the redirect node invokes is dependent on the
+ underlying signalling protocol involved, though its semantics are
+ generally applicable.
+
+ Node: "redirect"
+ Outputs: None (No node may follow)
+ Next node: None
+ Parameters: "permanent" Whether the redirection should be
+ considered permanent
+
+ Figure 13: Syntax of the "redirect" node
+
+ Redirect immediately terminates execution of the CPL script, so this
+ node has no outputs and no next node. It has one parameter,
+ "permanent", which specifies whether the result returned should
+ indicate that this is a permanent redirection. The value of this
+ parameter is either "yes" or "no" and its default value is "no."
+
+
+
+
+
+
+
+Lennox, et al. Standards Track [Page 29]
+
+RFC 3880 CPL October 2004
+
+
+6.2.1. Usage of "redirect" with SIP
+
+ The SIP server SHOULD send a 3xx class response to a call request
+ upon executing a "redirect" tag. If "permanent" was "yes", the
+ server SHOULD send the response "301" (Moved permanently), otherwise
+ it SHOULD send "302" (Moved temporarily).
+
+6.3. Reject
+
+ Reject nodes cause the server to reject the call attempt. Their
+ syntax is given in Figure 14. The specific behavior they invoke is
+ dependent on the underlying signalling protocol involved, though
+ their semantics are generally applicable.
+
+ Node: "reject"
+ Outputs: None (No node may follow)
+ Next node: None
+ Parameters: "status" Status code to return
+ "reason" Reason phrase to return
+
+ Figure 14: Syntax of the "reject" node
+
+ A reject node immediately terminates the execution of a CPL script,
+ so this node has no outputs and no next node.
+
+ This node has two arguments: "status" and "reason". The "status"
+ argument is required, and can take one of the values "busy",
+ "notfound", "reject", "error", or a signalling-protocol-defined
+ status.
+
+ The "reason" argument optionally allows the script to specify a
+ reason for the rejection.
+
+6.3.1. Usage of "reject" with SIP
+
+ Servers which implement SIP SHOULD also allow the "status" field to
+ be a numeric argument corresponding to a SIP status in the 4xx, 5xx,
+ or 6xx range.
+
+ They SHOULD send the "reason" parameter in the SIP reason phrase.
+
+ A suggested mapping of the named statuses is as follows. Servers MAY
+ use a different mapping, though similar semantics SHOULD be
+ preserved.
+
+ "busy": 486 Busy Here
+
+ "notfound": 404 Not Found
+
+
+
+Lennox, et al. Standards Track [Page 30]
+
+RFC 3880 CPL October 2004
+
+
+ "reject": 603 Decline
+
+ "error": 500 Internal Server Error
+
+7. Non-signalling Operations
+
+ In addition to the signalling operations, CPL defines several
+ operations which do not affect and are not dependent on the telephony
+ signalling protocol.
+
+7.1. Mail
+
+ The mail node causes the server to notify a user of the status of the
+ CPL script through electronic mail. Its syntax is given in Figure
+ 15.
+
+ Node: "mail"
+ Outputs: None (Next node follows directly)
+ Next node: Any node
+ Parameters: "url" Mailto url to which the mail should be sent
+
+ Figure 15: Syntax of the "mail" node
+
+ The "mail" node takes one argument: a "mailto" URL giving the
+ address, and any additional desired parameters, of the mail to be
+ sent. The server sends the message containing the content to the
+ given url; it SHOULD also include other status information about the
+ original call request and the CPL script at the time of the
+ notification.
+
+ Using a full "mailto" URL rather than just an e-mail address
+ allows additional e-mail headers to be specified, such as
+ <mail url="mailto:jones@example.com?subject=Lookup%20failed" />.
+
+ A mail node has only one possible result, since failure of e-mail
+ delivery cannot reliably be known in real time. Therefore, its XML
+ representation does not have output tags: the <mail> tag directly
+ contains another node tag.
+
+ Note that the syntax of XML requires that ampersand characters, "&",
+ which are used as parameter separators in "mailto" URLs, be quoted as
+ "&amp;" inside parameter values (see Section C.12 of the XML
+ specification [2]).
+
+
+
+
+
+
+
+
+Lennox, et al. Standards Track [Page 31]
+
+RFC 3880 CPL October 2004
+
+
+7.1.1. Suggested Content of Mailed Information
+
+ This section presents suggested guidelines for the mail sent as a
+ result of the "mail" node, for requests triggered by SIP. The
+ message mailed (triggered by any protocol) SHOULD contain all this
+ information, but servers MAY elect to use a different format.
+
+ 1. If the "mailto" URI did not specify a subject header, the
+ subject of the e-mail is "[CPL]", followed by the subject
+ header of the SIP request. If the URI specified a subject
+ header, it is used instead.
+
+ 2. The "From" field of the e-mail is set to a CPL server
+ configured address, overriding any "From" field in the "mailto"
+ URI.
+
+ 3. Any "Reply-To" header in the URI is honored. If none is given,
+ then an e-mail-ized version of the origin field of the request
+ is used, if possible (e.g., a SIP "From" header with a sip: URI
+ would be converted to an e-mail address by stripping the URI
+ scheme).
+
+ 4. If the "mailto" URI specifies a body, it is used. If none was
+ specified, the body SHOULD contain at least the identity of the
+ caller (both the caller's display name and address), the date
+ and time of day, the call subject, and if available, the call
+ priority.
+
+ The server SHOULD honor the user's requested languages, and send the
+ mail notification using an appropriate language and character set.
+
+7.2. Log
+
+ The Log node causes the server to log information about the call to
+ non-volatile storage. Its syntax is specified in Figure 16.
+
+ Node: "log"
+ Outputs: None (Next node follows directly)
+ Next node: Any node
+ Parameters: "name" Name of the log file to use
+ "comment" Comment to be placed in log file
+
+ Figure 16: Syntax of the "log" node
+
+ Log takes two arguments, both optional: "name", which specifies the
+ name of the log, and "comment", which gives a comment about the
+ information being logged. Servers SHOULD also include other
+ information in the log, such as the time of the logged event,
+
+
+
+Lennox, et al. Standards Track [Page 32]
+
+RFC 3880 CPL October 2004
+
+
+ information that triggered the call to be logged, and so forth. Logs
+ are specific to the owner of the script which logged the event. If
+ the "name" parameter is not given, the event is logged to a standard,
+ server-defined log file for the script owner. This specification
+ does not define how users may retrieve their logs from the server.
+
+ The name of a log is a logical name only, and does not necessarily
+ correspond to any physical file on the server. The interpretation of
+ the log file name is server defined, as is a mechanism to access
+ these logs. The CPL server SHOULD NOT directly map log names
+ uninterpreted onto local file names, for security reasons, lest a
+ security-critical file be overwritten.
+
+ A correctly operating CPL server SHOULD NOT ever allow the "log"
+ event to fail. As such, log nodes can have only one possible result,
+ and their XML representation does not have explicit output tags. A
+ CPL <log> tag directly contains another node tag.
+
+8. Subactions
+
+ XML syntax defines a tree. To allow more general call flow diagrams,
+ and to allow script re-use and modularity, we define subactions.
+
+ Two tags are defined for subactions: subaction definitions and
+ subaction references. Their syntax is given in Figure 17.
+
+ Tag: "subaction"
+ Subtags: Any node
+ Parameters: "id" Name of this subaction
+
+ Pseudo-node: "sub"
+ Outputs: None in XML tree
+ Parameters: "ref" Name of subaction to execute
+
+ Figure 17: Syntax of subactions and "sub" pseudo-nodes
+
+ Subactions are defined through "subaction" tags. These tags are
+ placed in the CPL script after any ancillary information (see Section
+ 9), but before any top-level tags. They take one argument: "id", a
+ token indicating a script-chosen name for the subaction. The "id"
+ value for every "subaction" tag in a script MUST be unique within
+ that script.
+
+ Subactions are called from "sub" tags. The "sub" tag is a "pseudo-
+ node", and can be used anyplace in a CPL action that a true node
+ could be used. It takes one parameter, "ref", the name of the
+ subaction to be called. The "sub" tag contains no outputs of its
+ own, instead control passes to the subaction.
+
+
+
+Lennox, et al. Standards Track [Page 33]
+
+RFC 3880 CPL October 2004
+
+
+ References to subactions MUST refer to subactions defined before the
+ current action. A "sub" tag MUST NOT refer to the action it appears
+ in, or to any action defined later in the CPL script. Top-level
+ actions cannot be called from "sub" tags, or through any other means.
+ Script servers MUST verify at the time the script is submitted that
+ no "sub" node refers to any subaction that is not its proper
+ predecessor.
+
+ Allowing only back-references of subs forbids any sort of
+ recursion. Recursion would introduce the possibility of non-
+ terminating or non-decidable CPL scripts, a possibility our
+ requirements specifically excluded.
+
+ Every sub MUST refer to a subaction ID defined within the same CPL
+ script. No external links are permitted.
+
+ Subaction IDs are case sensitive.
+
+ If any subsequent version or extension defines external linkages,
+ it should probably use a different tag, perhaps XLink [21].
+ Ensuring termination in the presence of external links is a
+ difficult problem.
+
+9. Ancillary Information
+
+ No ancillary information is defined in the base CPL specification.
+ If ancillary information, not part of any operation, is found to be
+ necessary for a CPL extension, it SHOULD be placed within this tag.
+
+ The (trivial) definition of the ancillary information tag is given in
+ Figure 18.
+
+ It may be useful to include timezone definitions inside CPL
+ scripts directly, rather than referencing them externally with
+ "tzid" and "tzurl" parameters. If it is, an extension could be
+ defined to include them here.
+
+ Tag: "ancillary"
+ Parameters: None
+ Subtags: None
+
+ Figure 18: Syntax of the "ancillary" tag
+
+
+
+
+
+
+
+
+
+Lennox, et al. Standards Track [Page 34]
+
+RFC 3880 CPL October 2004
+
+
+10. Default Behavior
+
+ When a CPL node reaches an unspecified output, either because the
+ output tag is not present, or because the tag is present but does not
+ contain a node, the CPL server's behavior is dependent on the current
+ state of script execution. This section gives the operations that
+ should be taken in each case.
+
+ no location modifications or signalling operations performed,
+ location set empty: Look up the user's location through
+ whatever mechanism the server would use if no CPL script were
+ in effect. Proxy, redirect, or send a rejection message,
+ using whatever policy the server would use in the absence of
+ a CPL script.
+
+ no location modifications or signalling operations performed,
+ location set non-empty: (This can only happen for outgoing
+ calls.) Proxy the call to the addresses in the location set.
+
+ location modifications performed, no signalling operations: Proxy
+ or redirect the call, whichever is the server's standard
+ policy, to the addresses in the current location set. If the
+ location set is empty, return a "notfound" rejection.
+
+ noanswer output of proxy, no timeout given: (This is a special
+ case.) If the "noanswer" output of a proxy node is
+ unspecified, and no timeout parameter was given to the proxy
+ node, the call should be allowed to ring for the maximum
+ length of time allowed by the server (or the request, if the
+ request specified a timeout).
+
+ proxy operation previously taken: Return whatever the "best"
+ response is of all accumulated responses to the call to this
+ point, according to the rules of the underlying signalling
+ protocol.
+
+11. CPL Extensions
+
+ Servers MAY support additional CPL features beyond those listed in
+ this document. Some of the extensions which have been suggested are
+ a means of querying how a call has been authenticated, richer control
+ over H.323 addressing, end-system or administrator-specific features,
+ regular-expression matching for strings and addresses, and mid-call
+ or end-of-call controls.
+
+ CPL extensions are indicated by XML namespaces [11]. Every extension
+ MUST have an appropriate XML namespace assigned to it. The XML
+ namespace of the extension MUST be different from the XML namespace
+
+
+
+Lennox, et al. Standards Track [Page 35]
+
+RFC 3880 CPL October 2004
+
+
+ defined in Section 14. The extension MUST NOT change the syntax or
+ semantics of the CPL schema defined in this document. All XML tags
+ and attributes that are part of the extension MUST be appropriately
+ qualified so as to place them within that namespace.
+
+ Tags or attributes in a CPL script which are in the global namespace
+ (i.e., not associated with any namespace) are equivalent to tags and
+ attributes in the CPL namespace "urn:ietf:params:xml:ns:cpl".
+
+ A CPL script SHOULD NOT specify any namespaces it does not use. For
+ compatibility with non-namespace-aware parsers, a CPL script MAY omit
+ the base CPL namespace for a script which does not use any
+ extensions.
+
+ A CPL server MUST reject any script containing a reference to a
+ namespace it does not understand. It MUST reject any script
+ containing an extension tag or attribute that is not qualified to be
+ in an appropriate namespace.
+
+ A syntax such as
+
+ <extension-switch>
+ <extension has="http://www.example.com/foo">
+ [extended things]
+ </extension>
+ <otherwise>
+ [non-extended things]
+ </otherwise>
+ </extension-switch>
+
+ was suggested as an alternate way of handling extensions. This
+ would allow scripts to be uploaded to a server without requiring a
+ script author to somehow determine which extensions a server
+ supports. However, experience developing other languages, notably
+ Sieve [22], was that this added excessive complexity to languages.
+ The "extension-switch" tag could, of course, itself be defined in
+ a CPL extension.
+
+ In the XML schema of CPL, we introduce three abstract elements,
+ namely 'toplevelaction', 'switch', and 'action', which accordingly
+ have the abstract type 'TopLevelActionType', 'SwitchType', and
+ 'ActionType'. Any top-level action in a CPL extension MUST be
+ defined as the substitutionGroup of the abstract 'toplevelaction'
+ element, and have the type extended from the 'TopLevelActionType'.
+ Any switch in a CPL extension MUST be defined as the
+ substitutionGroup of the abstract 'switch' element, and have the type
+
+
+
+
+
+Lennox, et al. Standards Track [Page 36]
+
+RFC 3880 CPL October 2004
+
+
+ extended from the 'SwitchType'. Any action in a CPL extension MUST
+ be defined as the substitutionGroup of the abstract 'action' element,
+ and have the type extended from the 'ActionType'.
+
+12. Examples
+
+12.1. Example: Call Redirect Unconditional
+
+ The script in Figure 19 is a simple script that redirects all calls
+ to a single fixed location.
+
+ <?xml version="1.0" encoding="UTF-8"?>
+ <cpl xmlns="urn:ietf:params:xml:ns:cpl"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="urn:ietf:params:xml:ns:cpl cpl.xsd ">
+ <incoming>
+ <location url="sip:smith@phone.example.com">
+ <redirect/>
+ </location>
+ </incoming>
+ </cpl>
+
+ Figure 19: Example Script: Call Redirect Unconditional
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Lennox, et al. Standards Track [Page 37]
+
+RFC 3880 CPL October 2004
+
+
+12.2. Example: Call Forward Busy/No Answer
+
+ The script in Figure 20 illustrates some more complex behavior. We
+ see an initial proxy attempt to one address, with further operations
+ if that fails. We also see how several outputs take the same action
+ subtree, through the use of subactions.
+
+ <?xml version="1.0" encoding="UTF-8"?>
+ <cpl xmlns="urn:ietf:params:xml:ns:cpl"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="urn:ietf:params:xml:ns:cpl cpl.xsd ">
+ <subaction id="voicemail">
+ <location url="sip:jones@voicemail.example.com">
+ <proxy/>
+ </location>
+ </subaction>
+ <incoming>
+ <location url="sip:jones@jonespc.example.com">
+ <proxy timeout="8">
+ <busy>
+ <sub ref="voicemail"/>
+ </busy>
+ <noanswer>
+ <sub ref="voicemail"/>
+ </noanswer>
+ </proxy>
+ </location>
+ </incoming>
+ </cpl>
+
+ Figure 20: Example Script: Call Forward Busy/No Answer
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Lennox, et al. Standards Track [Page 38]
+
+RFC 3880 CPL October 2004
+
+
+12.3. Example: Call Forward: Redirect and Default
+
+ The script in Figure 21 illustrates further proxy behavior. The
+ server initially tries to proxy to a single address. If this attempt
+ is redirected, a new redirection is generated using the locations
+ returned. In all other failure cases for the proxy node, a default
+ operation -- forwarding to voicemail -- is performed.
+
+ <?xml version="1.0" encoding="UTF-8"?>
+ <cpl xmlns="urn:ietf:params:xml:ns:cpl"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="urn:ietf:params:xml:ns:cpl cpl.xsd ">
+ <incoming>
+ <location url="sip:jones@jonespc.example.com">
+ <proxy>
+ <redirection>
+ <redirect/>
+ </redirection>
+ <default>
+ <location url="sip:jones@voicemail.example.com">
+ <proxy/>
+ </location>
+ </default>
+ </proxy>
+ </location>
+ </incoming>
+ </cpl>
+
+ Figure 21: Example Script: Call Forward: Redirect and Default
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Lennox, et al. Standards Track [Page 39]
+
+RFC 3880 CPL October 2004
+
+
+12.4. Example: Call Screening
+
+ The script in Figure 22 illustrates address switches and call
+ rejection, in the form of a call screening script. Note also that
+ because the address-switch lacks an "otherwise" clause, if the
+ initial pattern does not match, the script does not define any
+ operations. The server therefore proceeds with its default behavior,
+ which would presumably be to contact the user.
+
+ <?xml version="1.0" encoding="UTF-8"?>
+ <cpl xmlns="urn:ietf:params:xml:ns:cpl"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="urn:ietf:params:xml:ns:cpl cpl.xsd ">
+ <incoming>
+ <address-switch field="origin" subfield="user">
+ <address is="anonymous">
+ <reject status="reject" reason="I reject anonymous calls"/>
+ </address>
+ </address-switch>
+ </incoming>
+ </cpl>
+
+ Figure 22: Example Script: Call Screening
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Lennox, et al. Standards Track [Page 40]
+
+RFC 3880 CPL October 2004
+
+
+12.5. Example: Priority and Language Routing
+
+ The script in Figure 23 illustrates service selection based on a
+ call's priority value and language settings. If the call request had
+ a priority of "urgent" or higher, the default script behavior is
+ performed. Otherwise, the language field is checked for the language
+ "es" (Spanish). If it is present, the call is proxied to a Spanish-
+ speaking operator; other calls are proxied to an English-speaking
+ operator.
+
+ <?xml version="1.0" encoding="UTF-8"?>
+ <cpl xmlns="urn:ietf:params:xml:ns:cpl"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="urn:ietf:params:xml:ns:cpl cpl.xsd ">
+ <incoming>
+ <priority-switch>
+ <priority greater="urgent"/>
+ <otherwise>
+ <language-switch>
+ <language matches="es">
+ <location url="sip:spanish@operator.example.com">
+ <proxy/>
+ </location>
+ </language>
+ <otherwise>
+ <location url="sip:english@operator.example.com">
+ <proxy/>
+ </location>
+ </otherwise>
+ </language-switch>
+ </otherwise>
+ </priority-switch>
+ </incoming>
+ </cpl>
+
+ Figure 23: Example Script: Priority and Language Routing
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Lennox, et al. Standards Track [Page 41]
+
+RFC 3880 CPL October 2004
+
+
+12.6. Example: Outgoing Call Screening
+
+ The script in Figure 24 illustrates a script filtering outgoing
+ calls, in the form of a script which prevent 1-900 (premium) calls
+ from being placed. This script also illustrates subdomain matching.
+
+ <?xml version="1.0" encoding="UTF-8"?>
+ <cpl xmlns="urn:ietf:params:xml:ns:cpl"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="urn:ietf:params:xml:ns:cpl cpl.xsd ">
+ <outgoing>
+ <address-switch field="original-destination" subfield="tel">
+ <address subdomain-of="1900">
+ <reject status="reject"
+ reason="Not allowed to make 1-900 calls."/>
+ </address>
+ </address-switch>
+ </outgoing>
+ </cpl>
+
+ Figure 24: Example Script: Outgoing Call Screening
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Lennox, et al. Standards Track [Page 42]
+
+RFC 3880 CPL October 2004
+
+
+12.7. Example: Time-of-day Routing
+
+ Figure 25 illustrates time-based conditions and timezones.
+
+ <?xml version="1.0" encoding="UTF-8"?>
+ <cpl xmlns="urn:ietf:params:xml:ns:cpl"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="urn:ietf:params:xml:ns:cpl cpl.xsd ">
+ <incoming>
+ <time-switch tzid="America/New_York"
+ tzurl="http://zones.example.com/tz/America/New_York">
+ <time dtstart="20000703T090000" duration="PT8H" freq="weekly"
+ byday="MO,TU,WE,TH,FR">
+ <lookup source="registration">
+ <success>
+ <proxy/>
+ </success>
+ </lookup>
+ </time>
+ <otherwise>
+ <location url="sip:jones@voicemail.example.com">
+ <proxy/>
+ </location>
+ </otherwise>
+ </time-switch>
+ </incoming>
+ </cpl>
+
+ Figure 25: Example Script: Time-of-day Routing
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Lennox, et al. Standards Track [Page 43]
+
+RFC 3880 CPL October 2004
+
+
+12.8. Example: Location Filtering
+
+ Figure 26 illustrates filtering operations on the location set. In
+ this example, we assume that version 0.9beta2 of the "Inadequate
+ Software SIP User Agent" mis-implements some features, and so we must
+ work around its problems. We know that it cannot talk successfully
+ to one particular mobile device we may have registered, so we remove
+ that location from the location set. Once this operation has been
+ completed, call setup is allowed to proceed normally.
+
+ <?xml version="1.0" encoding="UTF-8"?>
+ <cpl xmlns="urn:ietf:params:xml:ns:cpl"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="urn:ietf:params:xml:ns:cpl cpl.xsd ">
+ <incoming>
+ <string-switch field="user-agent">
+ <string is="Inadequate Software SIP User Agent/0.9beta2">
+ <lookup source="registration">
+ <success>
+ <remove-location location="sip:me@mobile.provider.net">
+ <proxy/>
+ </remove-location>
+ </success>
+ </lookup>
+ </string>
+ </string-switch>
+ </incoming>
+ </cpl>
+
+ Figure 26: Example Script: Location Filtering
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Lennox, et al. Standards Track [Page 44]
+
+RFC 3880 CPL October 2004
+
+
+12.9. Example: Non-signalling Operations
+
+ Figure 27 illustrates non-signalling operations; in particular,
+ alerting a user by electronic mail if the lookup server failed. The
+ primary motivation for having the "mail" node is to allow this sort
+ of out-of-band notification of error conditions, as the user might
+ otherwise be unaware of any problem.
+
+ <?xml version="1.0" encoding="UTF-8"?>
+ <cpl xmlns="urn:ietf:params:xml:ns:cpl"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="urn:ietf:params:xml:ns:cpl cpl.xsd ">
+ <incoming>
+ <lookup
+ source="http://www.example.com/cgi-bin/locate.cgi?user=mary"
+ timeout="8">
+ <success>
+ <proxy/>
+ </success>
+ <failure>
+ <mail url="mailto:mary@example.com?subject=Lookup%20failed"/>
+ </failure>
+ </lookup>
+ </incoming>
+ </cpl>
+
+ Figure 27: Example Script: Non-signalling Operations
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Lennox, et al. Standards Track [Page 45]
+
+RFC 3880 CPL October 2004
+
+
+12.10. Example: Hypothetical Extensions
+
+ The example in Figure 28 shows a hypothetical extension that
+ implements distinctive ringing. The XML namespace
+ "http://www.example.com/distinctive-ring" specifies a new node named
+ "ring".
+
+ <?xml version="1.0" encoding="UTF-8"?>
+ <xs:schema targetNamespace="http://www.example.com/distinctive-ring"
+ xmlns="http://www.example.com/distinctive-ring"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema"
+ xmlns:CPL="urn:ietf:params:xml:ns:cpl"
+ elementFormDefault="qualified"
+ attributeFormDefault="unqualified">
+ <xs:import namespace="urn:ietf:params:xml:ns:cpl"
+ schemaLocation="cpl.xsd"/>
+ <xs:complexType name="DRingAction">
+ <xs:complexContent>
+ <xs:extension base="CPL:ActionType">
+ <xs:attribute name="ringstyle" type="xs:string"
+ use="optional"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:element name="ring" type="DRingAction"
+ substitutionGroup="CPL:action"/>
+ </xs:schema>
+
+ <?xml version="1.0" encoding="UTF-8"?>
+ <cpl xmlns="urn:ietf:params:xml:ns:cpl"
+ xmlns:dr="http://www.example.com/distinctive-ring"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="urn:ietf:params:xml:ns:cpl cpl.xsd
+ http://www.example.com/distinctive-ring distinctive-ring.xsd">
+ <incoming>
+ <address-switch field="origin">
+ <address is="sip:boss@example.com">
+ <dr:ring ringstyle="warble"/>
+ </address>
+ </address-switch>
+ </incoming>
+ </cpl>
+
+ Figure 28: Example Schema and Script: Hypothetical
+ Distinctive-Ringing Extension
+
+
+
+
+
+Lennox, et al. Standards Track [Page 46]
+
+RFC 3880 CPL October 2004
+
+
+ The example in Figure 29 implements a hypothetical new attribute for
+ address switches, to allow regular-expression matches. It defines a
+ new attribute "regex" for the standard "address" node.
+
+ <?xml version="1.0" encoding="UTF-8"?>
+ <cpl xmlns="urn:ietf:params:xml:ns:cpl"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="urn:ietf:params:xml:ns:cpl cpl.xsd ">
+ <incoming>
+ <address-switch field="origin" subfield="user"
+ xmlns:re="http://www.example.com/regex">
+ <address re:regex="(.*.smith|.*.jones)">
+ <reject status="reject"
+ reason="I don't want to talk to Smiths or Joneses"/>
+ </address>
+ </address-switch>
+ </incoming>
+ </cpl>
+
+ Figure 29: Example Script: Hypothetical Regular-Expression Extension
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Lennox, et al. Standards Track [Page 47]
+
+RFC 3880 CPL October 2004
+
+
+12.11. Example: A Complex Example
+
+ Finally, Figure 30 is a complex example which shows the sort of
+ sophisticated behavior that can be achieved by combining CPL nodes.
+ In this case, the user attempts to have his calls reach his desk; if
+ he does not answer within a small amount of time, calls from his boss
+ are forwarded to his mobile phone, and all other calls are directed
+ to voicemail. If the call setup failed, no operation is specified,
+ so the server's default behavior is performed.
+
+ <?xml version="1.0" encoding="UTF-8"?>
+ <cpl xmlns="urn:ietf:params:xml:ns:cpl"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="urn:ietf:params:xml:ns:cpl cpl.xsd ">
+ <subaction id="voicemail">
+ <location url="sip:jones@voicemail.example.com">
+ <redirect />
+ </location>
+ </subaction>
+ <incoming>
+ <location url="sip:jones@phone.example.com">
+ <proxy timeout="8">
+ <busy>
+ <sub ref="voicemail" />
+ </busy>
+ <noanswer>
+ <address-switch field="origin">
+ <address is="sip:boss@example.com">
+ <location url="tel:+19175551212">
+ <proxy />
+ </location>
+ </address>
+ <otherwise>
+ <sub ref="voicemail" />
+ </otherwise>
+ </address-switch>
+ </noanswer>
+ </proxy>
+ </location>
+ </incoming>
+ </cpl>
+
+ Figure 30: Example Script: A Complex Example
+
+
+
+
+
+
+
+
+Lennox, et al. Standards Track [Page 48]
+
+RFC 3880 CPL October 2004
+
+
+13. Security Considerations
+
+ CPL is designed to allow services to be specified in a manner which
+ prevents potentially hostile or mis-configured scripts from launching
+ security attacks, including denial-of-service attacks. Because
+ script runtime is strictly bounded by acyclicity, and because the
+ number of possible script operations are strictly limited, scripts
+ should not be able to inflict damage upon a CPL server.
+
+ Because scripts can direct users' telephone calls, the method by
+ which scripts are transmitted from a client to a server MUST be
+ strongly authenticated. Such a method is not specified in this
+ document.
+
+ Script servers SHOULD allow server administrators to control the
+ details of what CPL operations are permitted.
+
+14. IANA Considerations
+
+ This document registers a new MIME type, application/cpl+xml, and a
+ new URN per RFC 2141 [12], RFC 2648 [13], and RFC 3688 [14].
+
+ The XML namespace urn:ietf:params:xml:ns:cpl will only refer to the
+ version of CPL in this document and will not change. Any CPL
+ enhancements MUST be made by extensions and MUST have different
+ namespaces.
+
+14.1. URN Sub-Namespace Registration for urn:ietf:params:xml:ns:cpl
+
+ URI: urn:ietf:params:xml:ns:cpl
+
+ Registrant Contact: Jonathan Lennox <lennox@cs.columbia.edu>
+ Xiaotao Wu <xiaotaow@cs.columbia.edu>
+ Henning Schulzrinne <hgs@cs.columbia.edu>
+
+ XML:
+
+ BEGIN
+ <?xml version="1.0"?>
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.0//EN"
+ "http://www.w3.org/TR/xhtml-basic/xhtml-basic10.dtd">
+ <html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="content-type"
+ content="text/html;charset=iso-8859-1"/>
+ <title>Call Processing Language Namespace</title>
+ </head>
+ <body>
+
+
+
+Lennox, et al. Standards Track [Page 49]
+
+RFC 3880 CPL October 2004
+
+
+ <h1>Namespace for Call Processing Language</h1>
+ <h2>urn:ietf:params:xml:ns:cpl</h2>
+ <p><a href="ftp://ftp.rfc-editor.org/in-notes/rfc3880.txt">
+ RFC3880</a>.</p>
+ </body>
+ </html>
+ END
+
+14.2. Schema registration
+
+ This specification registers XML Schema for CPL, as per the
+ guidelines in [14].
+
+ URI: urn:ietf:params:xml:schema:cpl
+
+ Registrant contact:
+ Jonathan Lennox <lennox@cs.columbia.edu>
+ Xiaotao Wu <xiaotaow@cs.columbia.edu>
+ Henning Schulzrinne <hgs@cs.columbia.edu>
+
+ XML: The XML can be found in Appendix C.
+
+14.3. MIME Registration
+
+ As an XML type, CPL's MIME registration conforms with "XML Media
+ Types," RFC 3023 [15].
+
+ MIME media type name: application
+
+ MIME subtype name: cpl+xml
+
+ Mandatory parameters: none
+
+ Optional parameters: charset
+ As for application/xml in RFC 3023.
+
+ Encoding considerations: As for application/xml in RFC 3023.
+
+ Security considerations: See Section 13, and Section 10 of RFC
+ 3023.
+
+ Interoperability considerations: Different CPL servers may use
+ incompatible address types. However, all potential
+ interoperability issues should be resolvable at the time a
+ script is uploaded; there should be no interoperability
+ issues which cannot be detected until runtime.
+
+ Published specification: This document.
+
+
+
+Lennox, et al. Standards Track [Page 50]
+
+RFC 3880 CPL October 2004
+
+
+ Applications which use this media type: SIP proxy servers and
+ other telephony servers, and client software to control
+ their behavior.
+
+ Additional information:
+
+ Magic number: None
+
+ File extension: .cpl or .xml
+
+ Macintosh file type code: "TEXT"
+
+ Person and e-mail address for further information:
+ Jonathan Lennox <lennox@cs.columbia.edu>
+ Xiaotao Wu <xiaotaow@cs.columbia.edu>
+ Henning Schulzrinne <hgs@cs.columbia.edu>
+
+ Intended usage: COMMON
+
+ Author/Change Controller: The IETF.
+
+15. Acknowledgments
+
+ This document was reviewed and commented upon by the IETF IP
+ Telephony Working Group. We specifically acknowledge the following
+ people for their help:
+
+ The outgoing call screening script was written by Kenny Hom.
+
+ Paul E. Jones contributed greatly to the mappings of H.323 addresses.
+
+ The text of the time-switch section was taken (lightly modified) from
+ RFC 2445 [8], by Frank Dawson and Derik Stenerson.
+
+ We drew a good deal of inspiration, notably the language's lack of
+ Turing-completeness and the syntax of string matching, from the
+ specification of Sieve [22], a language for user filtering of
+ electronic mail messages.
+
+ Thomas F. La Porta and Jonathan Rosenberg had many useful
+ discussions, contributions, and suggestions.
+
+ Richard Gumpertz performed a very useful last-minute technical and
+ editorial review of the specification.
+
+
+
+
+
+
+
+Lennox, et al. Standards Track [Page 51]
+
+RFC 3880 CPL October 2004
+
+
+A. An Algorithm for Resolving Time Switches
+
+ The following algorithm determines whether a given instant falls
+ within a repetition of a "time-switch" recurrence. If the pre-
+ processing described in Section 4.4.1 has been done, it operates in
+ constant time. Open-source Java code implementing this algorithm is
+ available at http://www.cs.columbia.edu/~lennox/Cal-Code/ on the
+ world wide web.
+
+ This algorithm is believed to be correct, but this section is non-
+ normative. Section 4.4, and RFC 2445 [8], are the definitive
+ definitions of recurrences.
+
+ 1. Compute the time of the call, in the timezone of the time
+ switch.
+
+ 2. If the call time is earlier than "dtstart", fail NOMATCH.
+
+ 3. If the call time is less than "duration" after dtstart, succeed
+ MATCH.
+
+ 4. Determine the smallest unit specified in a "byxxx" rule or by
+ the "freq." Call this the Minimum Unit. Determine the
+ previous instant (before or equal to the call time) when all
+ the time units smaller than the minimum unit are the same as
+ those of "dtstart." If the minimum unit is a second, this time
+ is the same as the instant. If the minimum unit is a minute or
+ an hour, the minutes or the minutes and hours, respectively,
+ must be the same as "dtstart". For all other minimum units,
+ the time-of-day must be the same as "dtstart." If the minimum
+ unit is a week, the day-of-the-week must be the same as
+ "dtstart." If the minimum unit is a month, the day-of-the-
+ month must be the same as "dtstart." If the minimum unit is a
+ year, the month and day-of-month must both be the same as
+ "dtstart." (Note that this means it may be necessary to roll
+ back more than one minimum unit -- if the minimum unit is a
+ month, then some months do not have a 31st (or 30th or 29th)
+ day; if the minimum unit is a year, then some years do not have
+ a February 29th. In the Gregorian calendar, it is never
+ necessary to roll back more than two months if the minimum unit
+ is a month, or eight years if the minimum unit is a year.
+ Between 1904 and 2096, it is never necessary to roll back more
+ than four years -- the eight-year rollback can only occur when
+ the Gregorian calendar "skips" a leap year.
+
+ Call this instant the Candidate Start Time.
+
+
+
+
+
+Lennox, et al. Standards Track [Page 52]
+
+RFC 3880 CPL October 2004
+
+
+ 5. If the time between the candidate start time and the call time
+ is more than the duration, fail NOMATCH.
+
+ 6. If the candidate start time is later than the "until" parameter
+ of the recurrence (or the virtual "until" computed off-line
+ from "count"), fail NOMATCH.
+
+ 7. Call the unit of the "freq" parameter of the recurrence the
+ Frequency Unit. Determine the frequency unit enclosing the
+ Candidate Start Time, and that enclosing "dtstart". Calculate
+ the number of frequency units that have passed between these
+ two times. If this is not a multiple of the "interval"
+ parameter, fail NOMATCH.
+
+ 8. For every "byxxx" rule, confirm that the candidate start time
+ matches one of the options specified by that "byxxx" rule. If
+ so, succeed MATCH.
+
+ 9. Calculate a previous candidate start time. Repeat until the
+ difference between the candidate start time and the call time
+ is more than the duration. If no candidate start time has been
+ validated, fail NOMATCH.
+
+B. Suggested Usage of CPL with H.323
+
+ This appendix gives a suggested usage of CPL with H.323 [16]. Study
+ Group 16 of the ITU, which developed H.323, is proposing to work on
+ official CPL mappings for that protocol. This section is therefore
+ not normative.
+
+B.1. Usage of "address-switch" with H.323
+
+ Address switches are specified in Section 4.1. This section
+ specifies the mapping between H.323 messages and the fields and
+ subfields of address-switches.
+
+ For H.323, the "origin" address corresponds to the alias addresses in
+ the "sourceAddress" field of the "Setup-UUIE" user-user information
+ element, and to the Q.931 [23] information element "Calling party
+ number." If both fields are present, or if multiple alias addresses
+ for "sourceAddress" are present, which one has priority is a matter
+ of local server policy; the server SHOULD use the same resolution as
+ it would use for routing decisions in this case. Similarly, the
+ "destination" address corresponds to the alias addresses of the
+ "destinationAddress" field, and to the Q.931 information element
+ "Called party number."
+
+
+
+
+
+Lennox, et al. Standards Track [Page 53]
+
+RFC 3880 CPL October 2004
+
+
+ The "original-destination" address corresponds to the "Redirecting
+ number" Q.931 information element, if it is present; otherwise it is
+ the same as the "destination" address.
+
+ The mapping of H.323 addresses into subfields depends on the type of
+ the alias address. An additional subfield type, "alias-type", is
+ defined for H.323 servers, corresponding to the type of the address.
+ Possible values are "dialedDigits", "h323-ID", "url-ID",
+ "transportID", "email-ID", "partyNumber", "mobileUIM", and "Q.931IE".
+ If future versions of the H.323 specification define additional types
+ of alias addresses, those names MAY also be used.
+
+ In versions of H.323 prior to version 4, "dialedDigits" was known as
+ "e164". The two names SHOULD be treated as synonyms.
+
+ The value of the "address-type" subfield for H.323 messages is "h323"
+ unless the alias type is "url-ID" and the URL scheme is something
+ other than h323; in this case the address-type is the URL scheme, as
+ specified in Section 4.1.1 for SIP.
+
+ An H.323-aware CPL server SHOULD map the address subfields from the
+ primary alias used for routing. It MAY also map subfields from other
+ aliases, if subfields in the primary address are not present.
+
+ The following mappings are used for H.323 alias types:
+
+ dialedDigits, partyNumber, mobileUIM, and Q.931IE: the "tel" and
+ "user" subfields are the string of digits, as is the
+ "entire-address" form. The "host" and "port" subfields are
+ not present.
+
+ url-ID: the same mappings are used as for SIP, in Section 4.1.1.
+
+ h323-ID: the "user" field is the string of characters, as is the
+ "entire-address" form. All other subfields are not present.
+
+ email-ID: the "user" and "host" subfields are set to the
+ corresponding parts of the e-mail address. The "port" and
+ "tel" subfields are not present. The "entire-address" form
+ corresponds to the entire e-mail address.
+
+ transportID: if the TransportAddress is of type "ipAddress,"
+ "ipSourceRoute," or "ip6Address," the "host" subfield is set
+ to the "ip" element of the sequence, translated into the
+ standard IPv4 or IPv6 textual representation, and the "port"
+ subfield is set to the "port" element of the sequence
+ represented in decimal. The "tel" and "user" fields are not
+ present. The "entire-address" form is not defined. The
+
+
+
+Lennox, et al. Standards Track [Page 54]
+
+RFC 3880 CPL October 2004
+
+
+ representation and mapping of transport addresses is not
+ defined for non-IP addresses.
+
+ H.323 [16] defines an "h323" URI scheme. This appendix defines a
+ mapping for these URIs onto the CPL "address-switch" subfields, as
+ given in Section 4.1. This definition is also available as RFC 3508
+ [24], which is an excerpt from the H.323 specification.
+
+ For h323 URIs, the "user", "host", and "port" subfields are set to
+ the corresponding parts of the H.323 URL. The "tel" subfield is not
+ present. The "entire-address" form corresponds to the entire URI.
+
+ This mapping MAY be used both for h323 URIs in an h323 "url-ID"
+ address alias, and for h323 URIs in SIP messages.
+
+B.2. Usage of "string-switch" with H.323
+
+ For H.323, the "string-switch" node (see Section 4.2) is used as
+ follows. The field "display" corresponds to the Q.931 information
+ element of the same name, copied verbatim. The fields "subject",
+ "organization", and "user-agent" are not used and are never present.
+
+ The "display" IE is conventionally used for Caller-ID purposes, so
+ arguably it should be mapped to the "display" subfield of an
+ "address-match" with the field "originator". However, since a) it
+ is a message-level information element, not an address-level one,
+ and b) the Q.931 specification [23] says only that "[t]he purpose
+ of the Display information element is to supply display
+ information that may be displayed by the user," it seems to be
+ more appropriate to allow it to be matched in a "string-switch"
+ instead.
+
+B.3. Usage of "language-switch" with H.323
+
+ The language-ranges for the "language-switch" switch are obtained
+ from the H.323 UUIE "language". The switch is not-present if the
+ initial message did not contain this UUIE.
+
+B.4. Usage of "priority-switch" with H.323
+
+ All H.323 messages are considered to have priority "normal" for the
+ purpose of a priority switch (see Section 4.5).
+
+
+
+
+
+
+
+
+
+Lennox, et al. Standards Track [Page 55]
+
+RFC 3880 CPL October 2004
+
+
+B.5. Usage of "location" with H.323
+
+ Locations in explicit location nodes (Section 5.1) are specified as
+ URLs. Therefore, all locations added in this manner are interpreted
+ as being of alias type "url-ID" in H.323.
+
+ Specifications of other H.323 address alias types will require a CPL
+ extension (see Section 11).
+
+B.6. Usage of "lookup" with H.323
+
+ For location lookup nodes (Section 5.2), the "registration" lookup
+ source corresponds to the locations registered with the server using
+ "RAS" messages.
+
+B.7. Usage of "remove-location" with H.323
+
+ Location removal nodes (Section 5.3) remove addresses with the alias
+ type "url-ID" using verbatim string matching on the URLs. If a "tel"
+ URL is specified as the location, matching addresses (ignoring visual
+ separators) with the alias types "dialedDigits" ("e164"),
+ "partyNumber", "mobileUIM", or "Q.931IE" are also removed. No
+ mechanism is provided to remove other alias types.
+
+C. The XML Schema for CPL
+
+ This section includes a full XML Schema describing the XML syntax of
+ CPL. Every script submitted to a CPL server SHOULD comply with this
+ XML Schema. When parsing scripts comply with the CPL DTD in earlier
+ documents, the DOCTYPE lines in the scripts should be ignored. Note
+ that compliance with this schema is not a sufficient condition for
+ correctness of a CPL script, as many of the conditions described in
+ this specification are not expressible in schema syntax. Figure 31
+ shows the structure of the schema. 'incoming' and 'outgoing' are
+ defined as the substitutionGroup of the 'toplevelaction'. All the
+ switches are defined as the substitutionGroup of the 'switch'
+ element. All the actions are defined as the substitutionGroup of the
+ 'action' element.
+
+
+
+
+
+
+
+
+
+
+
+
+
+Lennox, et al. Standards Track [Page 56]
+
+RFC 3880 CPL October 2004
+
+
+ +---------+ +------+ +--address
+ +-+ancillary| |switch|** +--------------+ | +-not-present
+ | +---------+ +---+--+ **|address-switch+-+-+-address
+ | | * +--------------+ +--otherwise
+ | +---------+ +----+ | * +--language
+ +-+subaction+-+Node| | * +---------------+ | +-not-present
+ | +---------+ +----+ | **|language-switch|-+-+-language
+ | | * +---------------+ +--otherwise
+ | | * +--priority
+ | | * +---------------+ | +-not-present
+ | | **|priority-switch|-+-+-priority
+ | | * +---------------+ +--otherwise
+ | | * +--string
+ cpl-+ | * +-------------+ | +-not-present
+ | | **|string-switch|-+ +-string
+ | | * +-------------+ +--otherwise
+ | | * +--time
+ | +--------------+ +-+--+ * +-----------+ | +-not-present
+ +-+toplevelaction+-+Node| *|time-switch|-+-+-time
+ +-----*--------+ +-+--+ +-----------+ +--otherwise
+ * | +--------+ +----+
+ * | **|location+-|Node|
+ * | +--------+ * +--------+ +----+
+ * +--------+ |-+modifier|** +------+ +-success-Node
+ **|incoming| | +--------+ *-|lookup+-+-notfound-Node
+ * +--------+ | * +------+ +-failure-Node
+ * | +---+ * +---------------+ +----+
+ * +--------+ +-+Sub+-sub **|remove-location+-+Node|
+ *|outgoing| | +---+ +---------------+ +----+
+ +--------+ | +---+
+ | **|log+-Node
+ | * +---+
+ | * +----+
+ | +------+ **|mail+-Node
+ +-+action|** +----+ +-busy-Node
+ ---- contains +------+ * +-----+ |
+ **|proxy+----+-noanswer-Node
+ **** substitutes * +-----+ |
+ * +--------+ +-failure-Node
+ **|redirect| |
+ * +--------+ +-redirection-Node
+ * +------+ |
+ *|reject| +-default-Node
+ +------+
+
+ Figure 31: The structure of the XML schema for CPL
+
+
+
+
+
+Lennox, et al. Standards Track [Page 57]
+
+RFC 3880 CPL October 2004
+
+
+ BEGIN
+ <?xml version="1.0" encoding="UTF-8"?>
+ <xs:schema targetNamespace="urn:ietf:params:xml:ns:cpl"
+ xmlns="urn:ietf:params:xml:ns:cpl"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema"
+ elementFormDefault="qualified"
+ attributeFormDefault="unqualified">
+ <xs:complexType name="TopLevelActionType" abstract="true">
+ <xs:group ref="Node"/>
+ </xs:complexType>
+ <xs:element name="toplevelaction" type="TopLevelActionType"/>
+ <xs:complexType name="ActionType" abstract="true"/>
+ <xs:element name="action" type="ActionType"/>
+ <xs:complexType name="SwitchType" abstract="true"/>
+ <xs:element name="switch" type="SwitchType"/>
+ <xs:complexType name="ModifierType" abstract="true"/>
+ <xs:element name="modifier" type="ModifierType"/>
+ <xs:element name="location" type="LocationType"
+ substitutionGroup="modifier"/>
+ <xs:element name="lookup" type="LookupType"
+ substitutionGroup="modifier"/>
+ <xs:element name="remove-location" type="RemoveLocationType"
+ substitutionGroup="modifier"/>
+ <xs:element name="sub" type="SubAction"/>
+ <xs:group name="Node">
+ <xs:choice>
+ <xs:element ref="switch" minOccurs="0" maxOccurs="1"/>
+ <xs:element ref="modifier" minOccurs="0" maxOccurs="1"/>
+ <xs:element ref="sub" minOccurs="0" maxOccurs="1"/>
+ <xs:element ref="action" minOccurs="0" maxOccurs="1"/>
+ </xs:choice>
+ </xs:group>
+ <xs:complexType name="OtherwiseAction">
+ <xs:group ref="Node"/>
+ </xs:complexType>
+ <xs:complexType name="NotPresentAction">
+ <xs:group ref="Node"/>
+ </xs:complexType>
+ <xs:simpleType name="YesNoType">
+ <xs:restriction base="xs:NMTOKEN">
+ <xs:enumeration value="yes"/>
+ <xs:enumeration value="no"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="StatusType">
+ <xs:union>
+ <xs:simpleType>
+ <xs:restriction base="xs:NMTOKEN">
+
+
+
+Lennox, et al. Standards Track [Page 58]
+
+RFC 3880 CPL October 2004
+
+
+ <xs:enumeration value="busy"/>
+ <xs:enumeration value="notfound"/>
+ <xs:enumeration value="reject"/>
+ <xs:enumeration value="error"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType>
+ <xs:restriction base="xs:string"/>
+ </xs:simpleType>
+ </xs:union>
+ </xs:simpleType>
+ <xs:simpleType name="OrderingType">
+ <xs:restriction base="xs:NMTOKEN">
+ <xs:enumeration value="parallel"/>
+ <xs:enumeration value="sequential"/>
+ <xs:enumeration value="first-only"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="AddressFieldType">
+ <xs:union>
+ <xs:simpleType>
+ <xs:restriction base="xs:NMTOKEN">
+ <xs:enumeration value="origin"/>
+ <xs:enumeration value="destination"/>
+ <xs:enumeration value="original-destination"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType>
+ <xs:restriction base="xs:string"/>
+ </xs:simpleType>
+ </xs:union>
+ </xs:simpleType>
+ <xs:simpleType name="AddressSubfieldType">
+ <xs:union>
+ <xs:simpleType>
+ <xs:restriction base="xs:NMTOKEN">
+ <xs:enumeration value="address-type"/>
+ <xs:enumeration value="user"/>
+ <xs:enumeration value="host"/>
+ <xs:enumeration value="port"/>
+ <xs:enumeration value="tel"/>
+ <xs:enumeration value="display"/>
+ <xs:enumeration value="password"/>
+ <xs:enumeration value="alias-type"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+
+
+
+
+Lennox, et al. Standards Track [Page 59]
+
+RFC 3880 CPL October 2004
+
+
+ <xs:simpleType>
+ <xs:restriction base="xs:string"/>
+ </xs:simpleType>
+ </xs:union>
+ </xs:simpleType>
+ <xs:complexType name="AddressType">
+ <xs:annotation>
+ <xs:documentation>Exactly one of the three attributes must
+ appear</xs:documentation>
+ </xs:annotation>
+ <xs:group ref="Node"/>
+ <xs:attribute name="is" type="xs:string" use="optional"/>
+ <xs:attribute name="contains" type="xs:string" use="optional">
+ <xs:annotation>
+ <xs:documentation>for "display" only</xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
+ <xs:attribute name="subdomain-of" type="xs:string"
+ use="optional">
+ <xs:annotation>
+ <xs:documentation>for "host", "tel" only</xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
+ <xs:anyAttribute namespace="##any" processContents="lax"/>
+ </xs:complexType>
+ <xs:complexType name="AddressSwitchType">
+ <xs:complexContent>
+ <xs:extension base="SwitchType">
+ <xs:sequence>
+ <xs:element name="address" type="AddressType" minOccurs="0"
+ maxOccurs="unbounded"/>
+ <xs:sequence minOccurs="0">
+ <xs:element name="not-present" type="NotPresentAction"/>
+ <xs:element name="address" type="AddressType"
+ minOccurs="0" maxOccurs="unbounded"/>
+ </xs:sequence>
+ <xs:element name="otherwise" type="OtherwiseAction"
+ minOccurs="0"/>
+ </xs:sequence>
+ <xs:attribute name="field" type="AddressFieldType"
+ use="required"/>
+ <xs:attribute name="subfield" type="AddressSubfieldType"
+ use="optional"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:element name="address-switch" type="AddressSwitchType"
+ substitutionGroup="switch"/>
+
+
+
+Lennox, et al. Standards Track [Page 60]
+
+RFC 3880 CPL October 2004
+
+
+ <xs:simpleType name="StringFieldType">
+ <xs:restriction base="xs:NMTOKEN">
+ <xs:enumeration value="subject"/>
+ <xs:enumeration value="organization"/>
+ <xs:enumeration value="user-agent"/>
+ <xs:enumeration value="display"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:complexType name="StringType">
+ <xs:group ref="Node"/>
+ <xs:attribute name="is" type="xs:string" use="optional"/>
+ <xs:attribute name="contains" type="xs:string" use="optional"/>
+ <xs:anyAttribute namespace="##any" processContents="lax"/>
+ </xs:complexType>
+ <xs:complexType name="StringSwitchType">
+ <xs:complexContent>
+ <xs:extension base="SwitchType">
+ <xs:sequence>
+ <xs:element name="string" type="StringType" minOccurs="0"
+ maxOccurs="unbounded"/>
+ <xs:sequence minOccurs="0">
+ <xs:element name="not-present" type="NotPresentAction"/>
+ <xs:element name="string" type="StringType" minOccurs="0"
+ maxOccurs="unbounded"/>
+ </xs:sequence>
+ <xs:element name="otherwise" type="OtherwiseAction"
+ minOccurs="0"/>
+ </xs:sequence>
+ <xs:attribute name="field" type="StringFieldType"
+ use="required">
+ <xs:annotation>
+ <xs:documentation>Strings are matched as case-insensitive
+ Unicode strings.</xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:element name="string-switch" type="StringSwitchType"
+ substitutionGroup="switch"/>
+ <xs:complexType name="LanguageType">
+ <xs:group ref="Node"/>
+ <xs:attribute name="matches" type="xs:string" use="required">
+ <xs:annotation>
+ <xs:documentation>The value of one of these parameters is a
+ language-tag, as defined in RFC
+ 3066.</xs:documentation>
+ </xs:annotation>
+
+
+
+Lennox, et al. Standards Track [Page 61]
+
+RFC 3880 CPL October 2004
+
+
+ </xs:attribute>
+ <xs:anyAttribute namespace="##any" processContents="lax"/>
+ </xs:complexType>
+ <xs:complexType name="LanguageSwitchType">
+ <xs:complexContent>
+ <xs:extension base="SwitchType">
+ <xs:sequence>
+ <xs:element name="language" type="LanguageType"
+ minOccurs="0" maxOccurs="unbounded"/>
+ <xs:sequence minOccurs="0">
+ <xs:element name="not-present" type="NotPresentAction"/>
+ <xs:element name="language" type="LanguageType"
+ minOccurs="0" maxOccurs="unbounded"/>
+ </xs:sequence>
+ <xs:element name="otherwise" type="OtherwiseAction"
+ minOccurs="0"/>
+ </xs:sequence>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:element name="language-switch" type="LanguageSwitchType"
+ substitutionGroup="switch"/>
+ <xs:simpleType name="FreqType">
+ <xs:restriction base="xs:NMTOKEN">
+ <xs:pattern value="[s|S][e|E][c|C][o|O][n|N][d|D][l|L][y|Y]"/>
+ <xs:pattern value="[m|M][i|I][n|N][u|U][t|T][e|E][l|L][y|Y]"/>
+ <xs:pattern value="[h|H][o|O][u|U][r|R][l|L][y|Y]"/>
+ <xs:pattern value="[d|D][a|A][i|I][l|L][y|Y]"/>
+ <xs:pattern value="[w|W][e|E][e|E][k|K][l|L][y|Y]"/>
+ <xs:pattern value="[m|M][o|N][n|N][t|T][h|H][l|L][y|Y]"/>
+ <xs:pattern value="[y|Y][e|E][a|A][r|R][l|L][y|Y]"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="YearDayType">
+ <xs:union>
+ <xs:simpleType>
+ <xs:restriction base="xs:integer">
+ <xs:minInclusive value="-366"/>
+ <xs:maxInclusive value="-1"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType>
+ <xs:restriction base="xs:integer">
+ <xs:minInclusive value="1"/>
+ <xs:maxExclusive value="366"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:union>
+
+
+
+Lennox, et al. Standards Track [Page 62]
+
+RFC 3880 CPL October 2004
+
+
+ </xs:simpleType>
+ <xs:simpleType name="DayType">
+ <xs:restriction base="xs:NMTOKEN">
+ <xs:pattern value="[m|M][o|O]"/>
+ <xs:pattern value="[t|T][u|U]"/>
+ <xs:pattern value="[w|W][e|E]"/>
+ <xs:pattern value="[t|T][h|H]"/>
+ <xs:pattern value="[f|F][r|R]"/>
+ <xs:pattern value="[s|S][a|A]"/>
+ <xs:pattern value="[s|S][u|U]"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:complexType name="TimeType">
+ <xs:annotation>
+ <xs:documentation>Exactly one of the two attributes "dtend" and
+ "duration" must occur. None of the attributes following
+ freq are meaningful unless freq appears.
+ </xs:documentation>
+ </xs:annotation>
+ <xs:group ref="Node"/>
+ <xs:attribute name="dtstart" type="xs:string" use="required">
+ <xs:annotation>
+ <xs:documentation>RFC 2445 DATE-TIME</xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
+ <xs:attribute name="dtend" type="xs:string" use="optional">
+ <xs:annotation>
+ <xs:documentation>RFC 2445 DATE-TIME</xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
+ <xs:attribute name="duration" type="xs:string" use="optional">
+ <xs:annotation>
+ <xs:documentation>RFC 2445 DURATION</xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
+ <xs:attribute name="freq" type="FreqType" use="optional"/>
+ <xs:attribute name="interval" type="xs:positiveInteger"
+ default="1"/>
+ <xs:attribute name="until" type="xs:string" use="optional">
+ <xs:annotation>
+ <xs:documentation>RFC 2445 DATE-TIME</xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
+ <xs:attribute name="count" type="xs:positiveInteger"
+ use="optional"/>
+ <xs:attribute name="bysecond" type="xs:string" use="optional">
+ <xs:annotation>
+ <xs:documentation>Comma-separated list of seconds within a
+
+
+
+Lennox, et al. Standards Track [Page 63]
+
+RFC 3880 CPL October 2004
+
+
+ minute. Valid values are 0 to 59.</xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
+ <xs:attribute name="byminute" type="xs:string" use="optional">
+ <xs:annotation>
+ <xs:documentation>Comma-separated list of minutes within an
+ hour. Valid values are 0 to 59.</xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
+ <xs:attribute name="byhour" type="xs:string" use="optional">
+ <xs:annotation>
+ <xs:documentation>Comma-separated list of hours of the day.
+ Valid values are 0 to 23.</xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
+ <xs:attribute name="byday" type="xs:string" use="optional">
+ <xs:annotation>
+ <xs:documentation>Comma-separated list of days of the week.
+ Valid values are "MO", "TU", "WE", "TH", "FR", "SA" and
+ "SU". These values are not case-sensitive. Each can be
+ preceded by a positive (+n) or negative (-n)
+ integer.</xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
+ <xs:attribute name="bymonthday" type="xs:string" use="optional">
+ <xs:annotation>
+ <xs:documentation>Comma-separated list of days of the month.
+ Valid values are 1 to 31 or -31 to
+ -1.</xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
+ <xs:attribute name="byyearday" type="xs:string" use="optional">
+ <xs:annotation>
+ <xs:documentation>Comma-separated list of days of the year.
+ Valid values are 1 to 366 or -366 to
+ -1.</xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
+ <xs:attribute name="byweekno" type="xs:string" use="optional">
+ <xs:annotation>
+ <xs:documentation>Comma-separated list of ordinals specifying
+ weeks of the year. Valid values are 1 to 53 or -53 to
+ -1.</xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
+ <xs:attribute name="bymonth" type="xs:string" use="optional">
+ <xs:annotation>
+ <xs:documentation>Comma-separated list of months of the year.
+
+
+
+Lennox, et al. Standards Track [Page 64]
+
+RFC 3880 CPL October 2004
+
+
+ Valid values are 1 to 12.</xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
+ <xs:attribute name="wkst" type="DayType" default="MO"/>
+ <xs:attribute name="bysetpos" type="YearDayType"/>
+ <xs:anyAttribute namespace="##any" processContents="lax"/>
+ </xs:complexType>
+ <xs:simpleType name="TZIDType">
+ <xs:restriction base="xs:string"/>
+ </xs:simpleType>
+ <xs:simpleType name="TZURLType">
+ <xs:restriction base="xs:anyURI"/>
+ </xs:simpleType>
+ <xs:complexType name="TimeSwitchType">
+ <xs:complexContent>
+ <xs:extension base="SwitchType">
+ <xs:sequence>
+ <xs:element name="time" type="TimeType" minOccurs="0"
+ maxOccurs="unbounded"/>
+ <xs:sequence minOccurs="0">
+ <xs:element name="not-present" type="NotPresentAction"/>
+ <xs:element name="time" type="TimeType" minOccurs="0"
+ maxOccurs="unbounded"/>
+ </xs:sequence>
+ <xs:element name="otherwise" type="OtherwiseAction"
+ minOccurs="0"/>
+ </xs:sequence>
+ <xs:attribute name="tzid" type="TZIDType"/>
+ <xs:attribute name="tzurl" type="TZURLType"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:element name="time-switch" type="TimeSwitchType"
+ substitutionGroup="switch"/>
+ <xs:simpleType name="PriorityValues">
+ <xs:restriction base="xs:NMTOKEN">
+ <xs:pattern
+ value="[e|E][m|M][e|E][r|R][g|G][e|E][n|N][c|C][y|Y]"/>
+ <xs:pattern value="[u|U][r|R][g|G][e|E][n|N][t|T]"/>
+ <xs:pattern value="[n|N][o|O][r|R][m|M][a|A][l|L]"/>
+ <xs:pattern
+ value="[n|N][o|O][n|N]-[u|U][r|R][g|G][e|E][n|N][t|T]"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:complexType name="PriorityType">
+ <xs:annotation>
+ <xs:documentation>Exactly one of the three attributes must
+ appear </xs:documentation>
+
+
+
+Lennox, et al. Standards Track [Page 65]
+
+RFC 3880 CPL October 2004
+
+
+ </xs:annotation>
+ <xs:group ref="Node"/>
+ <xs:attribute name="less" type="PriorityValues"/>
+ <xs:attribute name="greater" type="PriorityValues"/>
+ <xs:attribute name="equal" type="xs:string">
+ <xs:annotation>
+ <xs:documentation>case-insensitive</xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
+ <xs:anyAttribute namespace="##any" processContents="lax"/>
+ </xs:complexType>
+ <xs:complexType name="PrioritySwitchType">
+ <xs:complexContent>
+ <xs:extension base="SwitchType">
+ <xs:sequence>
+ <xs:element name="priority" type="PriorityType"
+ minOccurs="0" maxOccurs="unbounded"/>
+ <xs:sequence minOccurs="0">
+ <xs:element name="not-present" type="NotPresentAction"/>
+ <xs:element name="priority" type="PriorityType"
+ minOccurs="0" maxOccurs="unbounded"/>
+ </xs:sequence>
+ <xs:element name="otherwise" type="OtherwiseAction"
+ minOccurs="0"/>
+ </xs:sequence>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:element name="priority-switch" type="PrioritySwitchType"
+ substitutionGroup="switch"/>
+ <xs:simpleType name="LocationPriorityType">
+ <xs:restriction base="xs:float">
+ <xs:minInclusive value="0.0"/>
+ <xs:maxInclusive value="1.0"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:complexType name="LocationType">
+ <xs:complexContent>
+ <xs:extension base="ModifierType">
+ <xs:group ref="Node"/>
+ <xs:attribute name="url" type="xs:anyURI" use="required"/>
+ <xs:attribute name="priority" type="LocationPriorityType"
+ use="optional" default="1.0"/>
+ <xs:attribute name="clear" type="YesNoType" default="no"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:complexType name="LookupType">
+
+
+
+Lennox, et al. Standards Track [Page 66]
+
+RFC 3880 CPL October 2004
+
+
+ <xs:complexContent>
+ <xs:extension base="ModifierType">
+ <xs:all>
+ <xs:element name="success" minOccurs="0">
+ <xs:complexType>
+ <xs:group ref="Node"/>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="notfound" minOccurs="0">
+ <xs:complexType>
+ <xs:group ref="Node"/>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="failure" minOccurs="0">
+ <xs:complexType>
+ <xs:group ref="Node"/>
+ </xs:complexType>
+ </xs:element>
+ </xs:all>
+ <xs:attribute name="source" type="xs:string"
+ use="required"/>
+ <xs:attribute name="timeout" type="xs:positiveInteger"
+ default="30"/>
+ <xs:attribute name="clear" type="YesNoType" default="no"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:complexType name="RemoveLocationType">
+ <xs:complexContent>
+ <xs:extension base="ModifierType">
+ <xs:group ref="Node"/>
+ <xs:attribute name="location" type="xs:string"
+ use="optional"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:complexType name="LogAction">
+ <xs:complexContent>
+ <xs:extension base="ActionType">
+ <xs:group ref="Node"/>
+ <xs:attribute name="name" type="xs:string" use="optional"/>
+ <xs:attribute name="comment" type="xs:string"
+ use="optional"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:element name="log" type="LogAction"
+ substitutionGroup="action"/>
+
+
+
+Lennox, et al. Standards Track [Page 67]
+
+RFC 3880 CPL October 2004
+
+
+ <xs:complexType name="IncomingType">
+ <xs:complexContent>
+ <xs:extension base="TopLevelActionType"/>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:element name="incoming" type="IncomingType"
+ substitutionGroup="toplevelaction"/>
+ <xs:complexType name="OutgoingType">
+ <xs:complexContent>
+ <xs:extension base="TopLevelActionType"/>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:element name="outgoing" type="OutgoingType"
+ substitutionGroup="toplevelaction"/>
+ <xs:complexType name="ProxyAction">
+ <xs:complexContent>
+ <xs:extension base="ActionType">
+ <xs:all>
+ <xs:element name="busy" minOccurs="0">
+ <xs:complexType>
+ <xs:group ref="Node"/>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="noanswer" minOccurs="0">
+ <xs:complexType>
+ <xs:group ref="Node"/>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="failure" minOccurs="0">
+ <xs:complexType>
+ <xs:group ref="Node"/>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="redirection" minOccurs="0">
+ <xs:complexType>
+ <xs:group ref="Node"/>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="default" minOccurs="0">
+ <xs:complexType>
+ <xs:group ref="Node"/>
+ </xs:complexType>
+ </xs:element>
+ </xs:all>
+ <xs:attribute name="timeout" type="xs:positiveInteger"
+ use="optional" default="20"/>
+ <xs:attribute name="recurse" type="YesNoType"
+ use="optional" default="yes"/>
+
+
+
+Lennox, et al. Standards Track [Page 68]
+
+RFC 3880 CPL October 2004
+
+
+ <xs:attribute name="ordering" type="OrderingType"
+ use="optional" default="parallel"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:element name="proxy" type="ProxyAction"
+ substitutionGroup="action"/>
+ <xs:complexType name="RedirectAction">
+ <xs:complexContent>
+ <xs:extension base="ActionType">
+ <xs:attribute name="permanent" type="YesNoType"
+ default="no"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:element name="redirect" type="RedirectAction"
+ substitutionGroup="action"/>
+ <xs:complexType name="RejectAction">
+ <xs:complexContent>
+ <xs:extension base="ActionType">
+ <xs:attribute name="status" type="StatusType"
+ use="required"/>
+ <xs:attribute name="reason" type="xs:string"
+ use="optional"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:element name="reject" type="RejectAction"
+ substitutionGroup="action"/>
+ <xs:complexType name="MailAction">
+ <xs:complexContent>
+ <xs:extension base="ActionType">
+ <xs:group ref="Node"/>
+ <xs:attribute name="url" type="xs:anyURI" use="required"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:element name="mail" type="MailAction"
+ substitutionGroup="action"/>
+ <xs:complexType name="SubAction">
+ <xs:attribute name="ref" type="xs:string" use="required"/>
+ </xs:complexType>
+ <xs:complexType name="AncillaryType"/>
+ <xs:complexType name="SubactionType">
+ <xs:group ref="Node"/>
+ <xs:attribute name="id" use="required"/>
+ </xs:complexType>
+ <xs:complexType name="CPLType">
+
+
+
+Lennox, et al. Standards Track [Page 69]
+
+RFC 3880 CPL October 2004
+
+
+ <xs:sequence>
+ <xs:element name="ancillary" type="AncillaryType" minOccurs="0"
+ maxOccurs="1"/>
+ <xs:element name="subaction" type="SubactionType" minOccurs="0"
+ maxOccurs="unbounded"/>
+ <xs:element ref="toplevelaction" minOccurs="0"
+ maxOccurs="unbounded">
+ <xs:annotation>
+ <xs:documentation>Any toplevel action MUST NOT appear more
+ than once.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:element name="cpl" type="CPLType"/>
+ </xs:schema>
+ END
+
+Normative References
+
+ [1] Rosenberg, J., Schulzrinne, H., Camarillo, G., Johnston, A.,
+ Peterson, J., Sparks, R., Handley, M., and E. Schooler, "SIP:
+ Session Initiation Protocol", RFC 3261, June 2002.
+
+ [2] Bray, T., Paoli, J., Sperberg-McQueen, C. M., Maler, E., and F.
+ Yergeau, "Extensible Markup Language (XML) 1.0 (Third Edition)",
+ W3C Recommendation REC-xml-20040204, World Wide Web Consortium
+ (W3C), February 2004. Available at http://www.w3.org/XML/.
+
+ [3] Bradner, S., "Key words for use in RFCs to Indicate Requirement
+ Levels", BCP 14, RFC 2119, March 1997.
+
+ [4] Hinden, R. and S. Deering, "Internet Protocol Version 6 (IPv6)
+ Addressing Architecture", RFC 3513, April 2003.
+
+ [5] Davis, M. F. and M. Duerst, "Unicode Normalization Forms",
+ Unicode Standard Annex #15, Unicode Consortium, April 2003.
+ Revision 23; part of Unicode 4.0.0. Available at
+ http://www.unicode.org/unicode/reports/tr15/.
+
+ [6] Davis, M. F., "Case Mappings", Unicode Standard Annex #21,
+ Unicode Consortium, March 2001. Revision 5; part of Unicode
+ 3.2.0. Available at
+ http://www.unicode.org/unicode/reports/tr21/.
+
+ [7] Alvestrand, H., "Tags for the Identification of Languages", BCP
+ 47, RFC 3066, January 2001.
+
+
+
+
+Lennox, et al. Standards Track [Page 70]
+
+RFC 3880 CPL October 2004
+
+
+ [8] Dawson, F. and D. Stenerson, "Internet Calendaring and
+ Scheduling Core Object Specification (iCalendar)", RFC 2445,
+ November 1998.
+
+ [9] Eggert, P., "Sources for Time Zone and Daylight Saving Time
+ Data". Available at http://www.twinsun.com/tz/tz-link.htm.
+
+ [10] Mealling, M. and R. Daniel, "URI Resolution Services Necessary
+ for URN Resolution", RFC 2483, January 1999.
+
+ [11] Bray, T., Hollander, D., and A. Layman, "Namespaces in XML", W3C
+ Recommendation REC-xml-names-19990114, World Wide Web Consortium
+ (W3C), January 1999. Available at http://www.w3.org/TR/REC-
+ xml-names/.
+
+ [12] Moats, R., "URN Syntax", RFC 2141, May 1997.
+
+ [13] Moats, R., "A URN Namespace for IETF Documents", RFC 2648,
+ August 1999.
+
+ [14] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, January
+ 2004.
+
+ [15] Murata, M., St.Laurent, S., and D. Kohn, "XML Media Types", RFC
+ 3023, January 2001.
+
+Informative References
+
+ [16] International Telecommunication Union, "Packet-based multimedia
+ communication systems", Recommendation H.323, Telecommunication
+ Standardization Sector of ITU, Geneva, Switzerland, July 2003.
+
+ [17] Lennox, J. and H. Schulzrinne, "Call Processing Language
+ Framework and Requirements", RFC 2824, May 2000.
+
+ [18] Raggett, D., Le Hors, A., and I. Jacobs, "HTML 4.01
+ Specification", W3C Recommendation REC-html401-19991224, World
+ Wide Web Consortium (W3C), December 1999. Available at
+ http://www.w3.org/TR/html4/.
+
+ [19] ISO (International Organization for Standardization),
+ "Information processing -- Text and office systems -- Standard
+ Generalized Markup Language (SGML)", ISO Standard ISO
+ 8879:1986(E), International Organization for Standardization,
+ Geneva, Switzerland, October 1986.
+
+
+
+
+
+
+Lennox, et al. Standards Track [Page 71]
+
+RFC 3880 CPL October 2004
+
+
+ [20] ISO (International Organization for Standardization), "Data
+ elements and interchange formats -- Information interchange --
+ Representation of dates and times", ISO Standard ISO
+ 8601:2000(E), International Organization for Standardization,
+ Geneva, Switzerland, December 2000.
+
+ [21] DeRose, S., Maler, E., Orchard, D., and B. Trafford, "XML
+ Linking Language (XLink) Version 1.0", W3C Recommendation REC-
+ xlink-20010627, World Wide Web Consortium (W3C), June 2001.
+ Available at http://www.w3.org/TR/xlink/.
+
+ [22] Showalter, T., "Sieve: A Mail Filtering Language", RFC 3028,
+ January 2001.
+
+ [23] International Telecommunication Union, "Digital Subscriber
+ Signalling System No. 1 (DSS 1) - ISDN user-network interface
+ layer 3 specification for basic call control", Recommendation
+ Q.931, International Telecommunication Union, Geneva,
+ Switzerland, March 1993.
+
+ [24] Levin, O., "H.323 Uniform Resource Locator (URL) Scheme
+ Registration", RFC 3508, April 2003.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Lennox, et al. Standards Track [Page 72]
+
+RFC 3880 CPL October 2004
+
+
+Authors' Addresses
+
+ Jonathan Lennox
+ Dept. of Computer Science
+ Columbia University
+ 1214 Amsterdam Avenue, MC 0401
+ New York, NY 10027
+ USA
+
+ EMail: lennox@cs.columbia.edu
+
+
+ Xiaotao Wu
+ Dept. of Computer Science
+ Columbia University
+ 1214 Amsterdam Avenue, MC 0401
+ New York, NY 10027
+ USA
+
+ EMail: xiaotaow@cs.columbia.edu
+
+
+ Henning Schulzrinne
+ Dept. of Computer Science
+ Columbia University
+ 1214 Amsterdam Avenue, MC 0401
+ New York, NY 10027
+ USA
+
+ EMail: schulzrinne@cs.columbia.edu
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Lennox, et al. Standards Track [Page 73]
+
+RFC 3880 CPL October 2004
+
+
+Full 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.
+
+ 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
+ Intellectual Property Rights or other rights that might be claimed to
+ pertain to the implementation or use of the technology described in
+ this document or the extent to which any license under such rights
+ might or might not be available; nor does it represent that it has
+ made any independent effort to identify any such rights. Information
+ on the IETF's procedures with respect to rights in IETF Documents can
+ be found in BCP 78 and BCP 79.
+
+ Copies of IPR disclosures made to the IETF Secretariat and any
+ assurances of licenses to be made available, or the result of an
+ attempt made to obtain a general license or permission for the use of
+ such proprietary rights by implementers or users of this
+ specification can be obtained from the IETF on-line IPR repository at
+ http://www.ietf.org/ipr.
+
+ The IETF invites any interested party to bring to its attention any
+ copyrights, patents or patent applications, or other proprietary
+ rights that may cover technology that may be required to implement
+ this standard. Please address the information to the IETF at ietf-
+ ipr@ietf.org.
+
+Acknowledgement
+
+ Funding for the RFC Editor function is currently provided by the
+ Internet Society.
+
+
+
+
+
+
+
+Lennox, et al. Standards Track [Page 74]
+