Network Working Group                                              X. Wu
Internet-Draft                                            H. Schulzrinne
Expires: August 18, 2005                             Columbia University
                                                       February 14, 2005


    LESS: Language for End System Services in Internet Telephony
                         draft-wu-iptel-less-00

Status of this Memo

   This document is an Internet-Draft and is subject to all provisions
   of Section 3 of RFC 3667.  By submitting this Internet-Draft, each
   author represents that any applicable patent or other IPR claims of
   which he or she is aware have been or will be disclosed, and any of
   which he or she become aware will be disclosed, in accordance with
   RFC 3668.

   Internet-Drafts are working documents of the Internet Engineering
   Task Force (IETF), its areas, and its working groups.  Note that
   other groups may also distribute working documents as
   Internet-Drafts.

   Internet-Drafts are draft documents valid for a maximum of six months
   and may be updated, replaced, or obsoleted by other documents at any
   time.  It is inappropriate to use Internet-Drafts as reference
   material or to cite them other than as "work in progress."

   The list of current Internet-Drafts can be accessed at
   http://www.ietf.org/ietf/1id-abstracts.txt.

   The list of Internet-Draft Shadow Directories can be accessed at
   http://www.ietf.org/shadow.html.

   This Internet-Draft will expire on August 18, 2005.

Copyright Notice

   Copyright (C) The Internet Society (2005).

Abstract

   In Internet telephony, end systems can take a large role in providing
   services, especially in networks without pre-configured
   infra-structure, such as peer-to-peer networks.  Since we believe
   that end system services differ in their requirements from network
   services, we define a new service creation scripting language called
   the Language for End System Services (LESS).  LESS inherits many



Wu & Schulzrinne         Expires August 18, 2005                [Page 1]


Internet-Draft                    LESS                     February 2005


   characteristics from the Call Processing Language (CPL).  It contains
   commands and events for direct user interaction and the control of
   media applications.  This document defines the basic elements of LESS
   and several commonly used LESS extensions.

Table of Contents

   1          Introduction ........................................    7
   1.1        Conventions of This Document ........................    7
   2          LESS design decisions ...............................    8
   2.1        High-level Structure ................................    8
   2.2        Simplicity ..........................................    9
   2.2.1      Familiarity .........................................    9
   2.2.2      Generality ..........................................   10
   2.2.3      Uniformity ..........................................   10
   2.2.4      Analyzability .......................................   11
   2.3        Safety ..............................................   11
   2.3.1      Type safety .........................................   11
   2.3.2      Control flow safety .................................   12
   2.3.3      Memory access .......................................   12
   2.3.4      LESS engine safety ..................................   13
   2.3.5      Using third-party created or auto-generated
              service scripts .....................................   13
   3          LESS elements .......................................   13
   4          Variables ...........................................   15
   4.1        System information ..................................   15
   4.2        User information ....................................   15
   4.3        Agent information ...................................   15
   4.4        Trigger information .................................   16
   4.5        Action information ..................................   16
   5          Basic LESS elements .................................   16
   5.1        Triggers ............................................   16
   5.1.1      "incoming" trigger ..................................   16
   5.1.2      "timer" trigger .....................................   16
   5.2        Switches ............................................   17
   5.2.1      "time-switch" .......................................   17
   5.2.2      "address-switch" ....................................   17
   5.2.3      "priority-switch" ...................................   17
   5.2.4      "string-switch" .....................................   17
   5.2.5      "language-switch" ...................................   18
   5.2.6      "status-switch" .....................................   18
   5.3        Modifiers ...........................................   19
   5.3.1      "location" Modifier .................................   19
   5.3.2      Location Lookup .....................................   19
   5.3.3      Location Removal ....................................   19
   5.4        Actions .............................................   19
   5.4.1      "accept" ............................................   19
   5.4.2      "reject" ............................................   20



Wu & Schulzrinne         Expires August 18, 2005                [Page 1]


Internet Draft                    LESS                    February, 2005


   5.4.3      "redirect" ..........................................   20
   5.4.4      "authenticate" ......................................   20
   5.4.5      "call" ..............................................   21
   5.4.6      "terminate" .........................................   21
   5.4.7      "mail" ..............................................   22
   5.4.8      "log" ...............................................   22
   5.4.9      "wait" ..............................................   23
   6          Subactions and Ancillary Information ................   23
   7          Security Considerations .............................   23
   8          IANA Considerations .................................   23
   8.1        URN Sub-Namespace Registration for
              urn:ietf:params:xml:ns:less .........................   24
   8.2        Schema registration .................................   24
   8.3        MIME Registration ...................................   24
   9          LESS Extensions .....................................   25
   10         Media handling extension ............................   26
   10.1       Modifiers ...........................................   26
   10.1.1     "Media:media" Modifier ..............................   26
   10.2       Actions .............................................   27
   10.2.1     "Media:mediaupdate" Action ..........................   27
   10.3       IANA Considerations .................................   27
   10.3.1     URN Sub-Namespace Registration for
              urn:ietf:params:xml:ns:less:media ...................   28
   10.3.2     Schema registration .................................   28
   10.3.3     MIME Registration ...................................   28
   11         Mid-call Handling extension .........................   29
   11.1       Actions .............................................   29
   11.1.1     "Midcall:transfer" Action ...........................   29
   11.1.2     "Midcall:merge" Action ..............................   30
   11.2       IANA Considerations .................................   30
   11.2.1     URN Sub-Namespace Registration for
              urn:ietf:params:xml:ns:less:midcall .................   30
   11.2.2     Schema registration .................................   31
   11.2.3     MIME Registration ...................................   31
   12         User Interaction extension ..........................   31
   12.1       Triggers ............................................   31
   12.1.1     "UI:command" Trigger ................................   31
   12.2       Actions .............................................   32
   12.2.1     "UI:alert" Action ...................................   32
   12.2.2     "UI:getinput" Action ................................   33
   12.3       IANA Considerations .................................   33
   12.3.1     URN Sub-Namespace Registration for
              urn:ietf:params:xml:ns:less:ui ......................   33
   12.3.2     Schema registration .................................   34
   12.3.3     MIME Registration ...................................   34
   13         Instant Messaging extension .........................   34
   13.1       Triggers ............................................   34
   13.1.1     "IM:message" Trigger ................................   34



Wu & Schulzrinne         Expires August 18, 2005                [Page 2]


Internet Draft                    LESS                    February, 2005


   13.2       Actions .............................................   35
   13.2.1     "IM:sendmsg" Action .................................   35
   13.3       IANA Considerations .................................   35
   13.3.1     URN Sub-Namespace Registration for
              urn:ietf:params:xml:ns:less:im ......................   36
   13.3.2     Schema registration .................................   36
   13.3.3     MIME Registration ...................................   37
   14         Event Handling extension ............................   37
   14.1       Triggers ............................................   37
   14.1.1     "Event:subscription" Trigger ........................   37
   14.1.2     "Event:notification" Trigger ........................   37
   14.2       Switches ............................................   37
   14.2.1     "Event:event-switch" Switch .........................   37
   14.3       Actions .............................................   38
   14.3.1     "Event:approve" Action ..............................   38
   14.3.2     "Event:deny" Action .................................   38
   14.3.3     "Event:defer" Action ................................   39
   14.3.4     "Event:subscribe" Action ............................   39
   14.3.5     "Event:notify" Action ...............................   40
   14.4       IANA Considerations .................................   41
   14.4.1     URN Sub-Namespace Registration for
              urn:ietf:params:xml:ns:less:event ...................   41
   14.4.2     Schema registration .................................   42
   14.4.3     MIME Registration ...................................   42
   15         Location-based service extension ....................   42
   15.1       Switches ............................................   42
   15.1.1     "Location:where-switch" Switch ......................   43
   15.1.2     "Location:where-relation-switch" ....................   45
   15.2       IANA Considerations .................................   47
   15.2.1     URN Sub-Namespace Registration for
              urn:ietf:params:xml:ns:less:location ................   47
   15.2.2     Schema registration .................................   47
   15.2.3     MIME Registration ...................................   48
   16         Queue handling extension ............................   48
   16.1       Actions .............................................   48
   16.1.1     "Queue:enqueue" Action ..............................   48
   16.1.2     "Queue:dequeue" Action ..............................   48
   17         Examples ............................................   49
   17.1       Q.1211 services .....................................   49
   17.1.1     Abbreviated dialing (ABD) ...........................   49
   17.1.2     Attendant (ATT) .....................................   50
   17.1.3     Authentication (AUTC) ...............................   50
   17.1.4     Authorization code (AUTZ) ...........................   51
   17.1.5     Automatic call back (ACB) ...........................   51
   17.1.6     Call distribution (CD) ..............................   52
   17.1.7     Call forwarding (CF) ................................   52
   17.1.8     Call forwarding on busy/don't answer (CFC) ..........   52
   17.1.9     Call gapping (GAP) ..................................   53



Wu & Schulzrinne         Expires August 18, 2005                [Page 3]


Internet Draft                    LESS                    February, 2005


   17.1.10    Call hold with announcement (CHA) ...................   53
   17.1.11    Call limiter (LIM) ..................................   54
   17.1.12    Call logging (LOG) ..................................   55
   17.1.13    Call queueing (QUE) .................................   55
   17.1.14    Call transfer (TRA) .................................   56
   17.1.15    Call waiting (CW) ...................................   56
   17.1.16    Closed user group (CUG) .............................   57
   17.1.17    Consultation calling (COC) ..........................   57
   17.1.18    Customer profile management (CPM) ...................   57
   17.1.19    Customer recorded announcement (CRA) ................   57
   17.1.20    Customized ringing (CRG) ............................   58
   17.1.21    Destination user prompter (DUP) .....................   59
   17.1.22    Follow-me diversion (FMD) ...........................   59
   17.1.23    Mass calling (MAS) ..................................   59
   17.1.24    Meet-me conference (MMC) ............................   59
   17.1.25    Multi-way calling (MWC) .............................   60
   17.1.26    Off-net access (OFA) ................................   60
   17.1.27    Off-net calling (ONC) ...............................   60
   17.1.28    One number (ONE) ....................................   61
   17.1.29    Origin dependent routing (ODR) ......................   61
   17.1.30    Originating call screening (OCS) ....................   62
   17.1.31    Originating user prompter (OUP) .....................   62
   17.1.32    Personal numbering (PN) .............................   62
   17.1.33    Premium charging (PRMC) .............................   62
   17.1.34    Private numbering plan (PNP) ........................   63
   17.1.35    Reverse charging (REVC) .............................   63
   17.1.36    Split charging (SPLC) ...............................   63
   17.1.37    Terminating call screening (TCS) ....................   63
   17.1.38    Time dependent routing (TDR) ........................   64
   17.2       5ESS services .......................................   64
   17.2.1     Attendant call transfer (also known as Call
              splitting) ..........................................   64
   17.2.2     Attendant camp-on ...................................   65
   17.2.3     Attendant conference ................................   66
   17.2.4     Authorization code ..................................   67
   17.2.5     Automatic recall ....................................   67
   17.2.6     Call forwarding busy line (CFBL) ....................   68
   17.2.7     Call forwarding busy line--incoming only ............   69
   17.2.8     Call forwarding--don't answer .......................   69
   17.2.9     Unconditional call forwarding .......................   70
   17.2.10    Call hold ...........................................   70
   17.2.11    Call transfer--individual--all calls ................   70
   17.2.12    Call waiting and cancel call waiting ................   71
   17.2.13    Circle hunting ......................................   72
   17.2.14    Conference calling ..................................   72
   17.2.15    Customer-changeable speed calling ...................   72
   17.2.16    Direct connect ......................................   73
   17.2.17    Distinctive ringing .................................   73



Wu & Schulzrinne         Expires August 18, 2005                [Page 4]


Internet Draft                    LESS                    February, 2005


   17.2.18    Four- and eight-party ...............................   74
   17.2.19    Recorded telephone dictation ........................   74
   17.2.20    Time-of-Day features ................................   75
   17.2.21    Message services ....................................   75
   17.2.22    Multibutton key telephone system (MBKS) .............   76
   17.2.23    Group alerting ......................................   76
   17.3       Services defined in CSTA Phase III ..................   77
   17.3.1     Accept call .........................................   78
   17.3.2     Alternate call ......................................   78
   17.3.3     Answer call .........................................   78
   17.3.4     Call back call-related ..............................   78
   17.3.5     Call back message call-related ......................   78
   17.3.6     Camp on call ........................................   79
   17.3.7     Clear call ..........................................   79
   17.3.8     Clear connection ....................................   79
   17.3.9     Conference call .....................................   80
   17.3.10    Consultation call ...................................   80
   17.3.11    Deflect call ........................................   80
   17.3.12    Dial digits .........................................   80
   17.3.13    Directed pickup call ................................   80
   17.3.14    Group pickup call ...................................   80
   17.3.15    Hold call ...........................................   80
   17.3.16    Intrude call ........................................   81
   17.3.17    Join call ...........................................   81
   17.3.18    Make call ...........................................   81
   17.3.19    Make predictive call ................................   81
   17.3.20    Park call ...........................................   82
   17.3.21    Reconnect call ......................................   82
   17.3.22    Retrieve call .......................................   82
   17.3.23    Send message ........................................   82
   17.3.24    Single step conference call .........................   82
   17.3.25    Single step transfer call ...........................   82
   17.3.26    Transfer call .......................................   83
   17.4       New services ........................................   83
   17.4.1     Email ...............................................   83
   17.4.2     Web .................................................   83
   17.4.3     Instant messaging ...................................   84
   17.4.4     Event subscription and notification .................   84
   17.4.5     Event notification and event-based services .........   85
   17.4.6     Location-based services .............................   85
   18         Feature Interaction Handling Algorithm for LESS
              Scripts .............................................   86
   18.1       Tree merging algorithm ..............................   86
   19         The XML Schema for LESS and Commonly Used
              Extensions ..........................................   89
   19.1       XML Schema for LESS .................................   89
   19.2       XML Schema for LESS Media Extension .................  104
   19.3       XML Schema for LESS Mid-call handling Extension .....  119



Wu & Schulzrinne         Expires August 18, 2005                [Page 5]


Internet Draft                    LESS                    February, 2005


   19.4       XML Schema for LESS User Interaction Extension ......  121
   19.5       XML Schema for LESS Instant Messaging Extension .....  123
   19.6       XML Schema for LESS Event Handling Extension ........  124
   19.7       XML Schema for LESS Location-based Services
              Extension ...........................................  128
   19.8       XML Schema for LESS Queue Handling Extension ........  134
   20         References ..........................................  136
   20.1       Normative References ................................  136
   20.2       Informative References ..............................  137
            Authors' Addresses ....................................  137
            Intellectual Property and Copyright Statements ........  139








































Wu & Schulzrinne         Expires August 18, 2005                [Page 6]


Internet Draft                    LESS                    February, 2005


1 Introduction

   One of the key promises of Internet telephony lies in the ability of
   developing and deploying innovative services rapidly and efficiently.
   Internet telephony services are not limited to those performed in
   servers operated by service providers; end systems can play a much
   larger role in providing services than in traditional telephone
   networks.

   We define end systems as the systems that are located at the end of a
   session signaling routing path and can initiate or accept session
   setup messages. By this definition, end systems are not limited to
   the user-operated systems, instead, they can also be conference
   servers.  Accordingly, we define network servers as the entities that
   perform session message routing. We believe it is necessary to define
   a service creation language specifically for end systems because end
   system services are different from network services.

   There are services that are clearly implementable only in end systems
   or in network, but most can be moved to either location, or split
   between the two.  Providing services in user-operated end systems has
   the advantage that on-the-spot interaction with users is much easier.
   Network services can only interact via protocol messages and possibly
   media content, rather than GUIs. It might be possible to incorporate
   user interaction into scripts running in servers, but it is likely to
   be far more cumbersome and subject to network delays.

   In Internet telephony, usually end systems are the only entities
   where signaling and media flows converge. This is different from the
   legacy PSTN. Thus, any service that requires interaction with user
   media is likely to be easier to implement in end systems. The more
   detailed analysis on the differences between end system services and
   network services can be found in our articles [11] [12].

   Because of the differences between end system services and network
   services, we define the Language for End System Services specifically
   for end system service creation. Section 2 introduces the design
   decisions for LESS. Section 3 briefly describe the categories of
   elements in LESS, we then provide more detailed description of the
   elements in each category in the following sections.  Extensibility
   is very important for a service creation language. Section 9 defines
   how to write LESS extensions. Several commonly used extensions are
   defined in the following sections. Section 17 provides service
   examples written in LESS. Section 19 shows the XML schema of the
   language.

1.1 Conventions of This Document




Wu & Schulzrinne         Expires August 18, 2005                [Page 7]


Internet Draft                    LESS                    February, 2005


   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 RFC 2119 [1] and
   indicate requirement levels for compliant LESS 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 LESS.
        They are not essential to the specification of the
        language, and are non-normative.

2 LESS design decisions

   The goal of the language is to allow end users to program their own
   communication services with little training in a graphical service
   creation environment. To achieve the goal, the language must
   represent a high-level abstraction of communication behaviors. The
   elements in the language must have semantic meanings. The language
   has to be simple and safe. The Call Processing Language (CPL) [2] has
   all the above features.  However, CPL is originally designed for
   network servers, such as SIP proxy servers. It lacks of the functions
   for end system services, e.g., accepting calls, making outgoing
   calls, and interacting with users.  CPL does not have variables,
   which is very important for call decision making and user
   interactions. We have LESS inherit the basic structure and many
   elements from CPL and enhance it with more elements for end system
   services.

   In this section, we first provide the high-level structure of LESS.
   We then analyze the simplicity and safety of the design rules.

2.1 High-level Structure

   As shown in Figure 1, we consider that every service starts with a
   trigger invoked, such as an incoming call, an event notification, a
   user interaction event, or a timer event. The service will then check
   its current context, such as user status, device status, and the
   status related to the trigger. We name the check points as switches,
   which can branch call decisions. Once a service gets its matching
   condition, it will perform pre-defined actions, e.g., accepting an
   incoming call, holding an existing call, or sending an instant
   message. We use modifiers to provide parameters to actions, e.g.,
   media modifier to define media information of a call action.
   Additional actions may get performed based on the result of an
   action.





Wu & Schulzrinne         Expires August 18, 2005                [Page 8]


Internet Draft                    LESS                    February, 2005



                                 +--------+
                                 |        +-------+
                                 |modifier|       |
                                 |        |<------+
                      *          +---+----+
                     * *             |
                    *   *            V
    =========      *     *        +------+
   ( trigger )--->* switch*------>|action|---+
    =========      *     *        +--+---+   |
                    *   *                    |
                     * *<--------------------+
                      *


   Figure 1: The high-level structure of LESS


   The above high-level abstraction makes LESS having a tree-like
   structure, as shown in Figure 2. The tree-like structure makes LESS
   easy to analyze and safe for service programming.


2.2 Simplicity

   "The fewer concepts to understand in a language the better" [13],
   though, in some cases two smaller concepts might be simpler and more
   flexible than one more powerful but complicated concept. For example,
   separating commonly used action arguments, such as people's contact
   locations, as modifiers is better than putting the arguments into
   every action.

   "Simplicity enters in four disguises: uniformity (rules are few and
   simple), generality (a small number of general functions provide as
   special cases of more specialized functions), familiarity (familiar
   symbols and usages are adopted whenever possible), and brevity
   (economy of expression is sought)" [14]. For LESS, we consider
   analyzability is more important than brevity because LESS is an XML-
   based language designed for communication services and has people
   without programming experience as its target users.  In communication
   service creation, users may encounter feature interaction [15]
   problems, how to analyze and solve feature interactions is essential
   for users to create usable services. We discuss the familiarity,
   generality, uniformity, and analyzability of LESS below.

2.2.1 Familiarity




Wu & Schulzrinne         Expires August 18, 2005                [Page 9]


Internet Draft                    LESS                    February, 2005



         +----------+
         | incoming | (trigger)
         +-----+----+
               |
               |
    +----------+------------+
    |Is the sender's address| (switch)
    |  sip:bob@example.com? |
    +----------**-----------+
              /  |
            YES   NO
            /      |
    +------*    +---*-----------------------+
    |accept|    |Is the priority of the call| (switch)
    +------+    |  greater than 'normal'?   |
    (action)    +--------**-----------------+
                        /  |
                      YES   NO
                      /      |
                 +---*-+   +--*------------------+
                 |alert|   |redirect to voicemail|
                 +-----+   +---------------------+
                 (action)    (action)


   Figure 2: Sample decision tree


   The familiarity requires a language not to violate common use of
   notation.  We choose to use the Extensible Markup Language (XML) [3]
   to define LESS, uses the datatypes defined in XML schema. By this
   way, the elements defined in LESS all have semantic meaning and easy
   for users to understand and remember.

2.2.2 Generality

   The generality requires a language to have a small number of general
   elements.  The special elements of the language can be introduced by
   specializing the general elements. As illustrated in Section 2.1,
   LESS has only four kinds of elements, namely triggers, switches,
   actions, and modifiers. Every new element defined in LESS extensions
   must fall in one kind of the elements. In another words, in LESS's
   XML schema, LESS will have four basic abstract elements, namely
   'trigger', every element must be a substitutionGroup of one of the
   four abstract elements.

2.2.3 Uniformity



Wu & Schulzrinne         Expires August 18, 2005               [Page 10]


Internet Draft                    LESS                    February, 2005


   The uniformity requires a language with few and simple rules. There
   are only four rules in LESS. The rules can be summarized below:

        Trigger rule: A LESS script gets invoked if and only if one of
             its triggers get matched. A trigger must be the root of a
             decision tree.  Two triggers with the same name and
             attributes cannot appear in the same script.

        Switch rule: Only switches can branch call decisions. One switch
             have no more than two branches. A switch must be a child of
             a trigger or another switch in a decision tree.

        Action rule: Only actions can change call status and call
             context and only actions can be LESS decision tree leaves.
             There can be subsequent actions after one action. No
             triggers can follow an action.

        Modifier rule: A modifier can only be used as the parent element
             of actions to enforce the actions.

2.2.4 Analyzability

   Another aspect of language simplicity is how easy to analyze a
   program written by the language. For LESS, we are more interested in
   how LESS handling feature interaction problems in communication
   services. As discussed in our technical report "Feature Interactions
   in Internet Telephony End Systems" [15], we can handle feature
   interaction problems among LESS scripts by the action conflict tables
   and the tree merging algorithm defined in the technical report. The
   process is straight-forward, and can also help to solve detected
   interactions.

2.3 Safety

   Since LESS will be used by people without programming experience, we
   may expect errors that seem naive by experienced programmers. We
   should also expect that people may use third-party created malicious
   service scripts.  The language design should help people to prevent
   errors and protect people from malicious scripts. The error
   prevention mechanisms for LESS fall into two categories, one is to
   put restrictions on the language itself, the other is to put
   restrictions on LESS engines.  We are more interested in the
   restrictions on the language itself since that is directly related to
   the language design. The restrictions on LESS engines may cause
   service portability problem so we should try to prevent errors in the
   language design whenever possible.

2.3.1 Type safety



Wu & Schulzrinne         Expires August 18, 2005               [Page 11]


Internet Draft                    LESS                    February, 2005


   Type checking is a very effective way in catching programming errors,
   from the trivial errors, such as misspelled identifiers, to the
   fairly deep errors, such as violations of data structure invariants.

   LESS is an XML-based language and uses XML schema [4] to define its
   elements. "The strong typing mechanism in XML Schema, along with the
   large set of intrinsic types and the ability to create user-defined
   types, provides for a high level of type safety in instance
   documents. This feature can be used to express more strict data type
   constraints, such as those of attribute values, when using XML Schema
   for validation." [4]

   In LESS, there are no user defined variables so only static type
   checking is needed. There are many advantages to have a statically
   type-checked language. Static type checking can provide earlier, and
   usually more accurate information on programmer errors. It can
   eliminate the need for run-time checks, which may slow program
   execution. Statically type-checked language may be less expressive
   than dynamically type-checked language, however, since LESS is not
   designed to handle all communication services and targets to end
   users, safety is more important than expressiveness.

2.3.2 Control flow safety

   LESS has a tree-like structure for call decision making. LESS does
   not allow a tree node to back-reference to its ancestors or itself.
   This means there is no loop or recursion in LESS scripts, and will
   exclude the possibility of non-terminating or non-decidable LESS
   scripts.  However, LESS still provides some mechanisms for repeated
   events handling.  The timer trigger can get invoked periodically. The
   lookup modifier implies that follow-up actions are applied to every
   location in the result set.

   Run-time feature interactions may confuse users.  The LESS trigger
   rule ensures that a specific trigger can appear no more than once in
   a LESS script thus helps to avoid run-time feature interactions in
   the LESS script. The LESS service creation environment should help
   users to merge multiple service scripts into one as illustrated in
   the technical report on feature interaction handling in LESS [15].

2.3.3 Memory access

   A language can be described as unsafe in that the language allows
   some means to access memory directly. In LESS, there are no pointers,
   no direct memory accesses, and even no user-defined variables. LESS
   has maximum string length defined in its XML schema for every element
   with string type to prevent buffer overflow attack. If a user put a
   very long string in a service script, the service script will be



Wu & Schulzrinne         Expires August 18, 2005               [Page 12]


Internet Draft                    LESS                    February, 2005


   considered invalid when checking against the LESS XML schema.

2.3.4 LESS engine safety

   LESS engine developers can do several things to enhance the safety of
   LESS scripts. The developers must make sure that every trigger has
   default behaviors defined.  If a trigger gets invoked in a LESS
   engine, but there is no actions defined for the matching context, the
   LESS engine must perform the default actions for that trigger. This
   ensures every LESS script is decidable.

   LESS is different from CPL [2] when dealing with user trustiness. CPL
   is designed for running on signaling servers, such as SIP proxy
   servers.  The safety consideration for CPL ensures that semi-trusted
   users cannot create malicious or incompetent service scripts to
   interrupt other users' services, including crashing the server,
   revealing security-sensitive information, and causing denial of
   service. While LESS is used on users' end devices, usually, it does
   not need to handle the interference of other users.  LESS engine need
   to ensure safe resource usages, such as CPU usage. It needs to define
   how deep a decision tree can be, what is the minimum interval for
   timer trigger, and whether it can control multimedia devices.

2.3.5 Using third-party created or auto-generated service scripts

   Sometimes, end users may not be aware of a new service or they may
   not know how to create a service, the service scripts auto-generated
   by feature learning, or created by third-parties, may bring great
   conveniences to users. However, end users have to check the safety of
   the third-party created or auto-generated scripts, for example, to
   make sure that the scripts will not crash their systems or forward
   their calls to unwanted parties.

   The safety consideration discussed in previous sections can be
   applied to third-party or auto-generated service scripts. In
   addition, the simplicity and the tree-like structure of LESS make it
   viable to convert any valid LESS scripts into graphical
   representation of decision trees.  This is a big advantage of LESS
   for end users to do safety checking.  Users do not have to check LESS
   programs line by line, instead, they can watch the graphical
   representation and easily find out what actions a service script will
   perform.

3 LESS elements

   As we discussed earlier, LESS has four kinds of elements, namely
   triggers, switches, actions, and modifiers.




Wu & Schulzrinne         Expires August 18, 2005               [Page 13]


Internet Draft                    LESS                    February, 2005


   A trigger is an entry point to every service. It is the same as the
   toplevelactions defined in CPL. The basic LESS definition has two
   triggers, "incoming" (Section 5.1.1) and "timer" (Section 5.1.2).
   Note that we do not have "outgoing" trigger, which is defined in CPL.
   Because in end systems, an outgoing call is usually triggered by some
   user interactions, e.g., pressing a call button. This is different
   from that in an outbound server, in which "outgoing" triggered by
   receiving an outgoing call signaling message. We defined user
   interaction extension, which has one trigger, "UI:command" (Section
   12.1.1).  The event handling extension has two triggers,
   "Event:notification" (Section 14.1.2) and , "Event:subscription"
   (Section 14.1.1).  The instant messaging extension has one trigger,
   "Message:message" (Section 13.1.1).

   Switches branch call decisions. This is the same as CPL switches.
   The basic LESS definition has six switches, namely "time-switch"
   (Section 5.2.1), "address-switch" (Section 5.2.2), "language-switch"
   (Section 5.2.5), "priority-switch" (Section 5.2.3), "string-switch"
   (Section 5.2.4), and "status-switch" (Section 5.2.6). The location-
   based service extension has two switches, "where-switch" (Section
   15.1.1) and "where-relation-switch" (Section 15.1.2).  The event
   handling extension has one switch, "event-switch" (Section 14.2.1).

   Actions represent users' decision for trigger handling. This is
   similar to CPL actions, but we allow multiple actions be executed in
   parallel and in sequential. Each action has a "next" output. Actions
   in an action's "next" output will be executed after the action. If
   multiple actions have the same parent tag, they are executed in
   parallel.

   The basic LESS definition has six signaling actions, namely "accept"
   (Section 5.4.1), "reject" (Section 5.4.2), "redirect" (Section
   5.4.3), "authenticate" (Section 5.4.4), "call" (Section 5.4.5), and
   "terminate" (Section 5.4.6).  It also has three non-signaling
   actions, "mail" (Section 5.4.7) "log" (Section 5.4.8), and "wait"
   (Section 5.4.9).

   We defined a mid-call handling extension. It has two actions,
   "Midcall:transfer" (Section 11.1.1), and "Midcall:merge" (Section
   11.1.2).  The user interaction extension has two actions, "UI:alert"
   (Section 12.2.1).  "UI:getinput" (Section 12.2.2).  The instant
   messaging extension has one action, "IM:sendmsg" (Section 13.2.1).
   The event handling extension has five actions, "Event:subscribe"
   (Section 14.3.4), "Event:notify" (Section 14.3.5), "Event:approve"
   (Section 14.3.1), "Event:deny" (Section 14.3.2), and "Event:defer"
   (Section 14.3.3).  The queue handling extension has two actions,
   "Queue:enqueue" (Section 16.1.1), and "Queue:dequeue" (Section
   16.1.2).



Wu & Schulzrinne         Expires August 18, 2005               [Page 14]


Internet Draft                    LESS                    February, 2005


   Modifiers provide action parameters. We have three modifiers defined
   in basic LESS definition, namely "location" (Section 5.3.1), "lookup"
   (Section 5.3.2), and "remove-location" (Section 5.3.3).  In media
   handling extension, we defined "media" (Section 10.1.1) modifier.

4 Variables

   LESS does not allow user-defined variables, however, it allows
   several pre-defined variables to retrieve system information, user
   information, agent information, trigger information, and action
   information.  The variables can be used in descriptive messages, such
   as the reason parameter of a reject message. We use the format
   'variable-name' to represent a variable in a LESS script. For
   example, in a "reject" action, we can provide its reason parameter as
   below.


     <reject code="486" reason="Sorry, I am {user.activity}">



4.1 System information

        system.bandwidth represents the bandwidth of the end system
             running the script.

4.2 User information

        user.presence represents script owner's online/offline
             information.

        user.activity represents script owner's current activity.
             Activity values are defined as in the Rich Presence
             Extensions to the Presence Information Data Format (RPID)
             [5].

        user.mood represents script owner's current mood. Mood values
             are defined as in RPID.

        user.location represents script owner's physical location.

        user.language represents script owner's preferred language.

4.3 Agent information

        agent.number-of-calls represents the number of existing calls in
             the user agent running the script.




Wu & Schulzrinne         Expires August 18, 2005               [Page 15]


Internet Draft                    LESS                    February, 2005


        agent.media-capabilities represents the media capabilities in
             the user agent running the script.

4.4 Trigger information

        trigger.origin represents the originator of a trigger's
             signaling message.

        trigger.destination represents the destination of a trigger's
             signaling message.

        trigger.priority represents the priority of a trigger's
             signaling message.

        trigger.timestamp represents when the signaling message is
             received.

        trigger.subject represents the subject of a trigger's signaling
             message.

4.5 Action information

        action.last-action-result represents the return value of last
             actions.  Every action may return a value. In this
             document, if the return value is not specified, the return
             value will be empty.

5 Basic LESS elements

5.1 Triggers

5.1.1 "incoming" trigger

   The "incoming" trigger is the same as that defined in CPL [2],
   Section 2.1.

5.1.2 "timer" trigger

   The "timer" trigger is to handle timer-based events, e.g.,
   automatically making an outgoing call at a specific time. The "timer"
   trigger has the same attributes as those defined in "time-switch"
   (Section 5.2.1).  Their syntax is shown in Figure 3.









Wu & Schulzrinne         Expires August 18, 2005               [Page 16]


Internet Draft                    LESS                    February, 2005



      Trigger:  "timer"
   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 3: Syntax of the "timer" trigger



5.2 Switches

5.2.1 "time-switch"

   The "time-switch" is the same as that defined in CPL [2], Section
   4.4.

5.2.2 "address-switch"

   The "address-switch" is the same as that defined in CPL [2], Section
   4.1.

5.2.3 "priority-switch"

   The "priority-switch" is the same as that defined in CPL [2], Section
   4.5.

5.2.4 "string-switch"

   The "string-switch" is the same as that defined in CPL [2], Section



Wu & Schulzrinne         Expires August 18, 2005               [Page 17]


Internet Draft                    LESS                    February, 2005


   4.2.

5.2.5 "language-switch"

   The "language-switch" is the same as that defined in CPL [2], Section
   4.3.

5.2.6 "status-switch"

   Status-switches allow a LESS script to make decisions based on the
   status of the script owner, or other people whose status can be
   acquired.  The syntax of "status-switch" is summarized in Figure 4.


         Node:  "status-switch"
      Outputs:  "status"         Specific status to match
   Parameters:  "uri"            The principal's URI
                "status-name"    The name of the status to check. Available
                                 values are "active-calls", "activity",
                                 "mood", and "presence".

       Output:  "status"
   Parameters:  "greater"        Used for "active-calls"
                "less"           Used for "active-calls"
                "equal"          Used for "active-calls"
                "is"             Exact match, not for "active-calls"
                "contains"       Not for "active-calls"


   Figure 4: Syntax of the "status-switch" node



   "status-switch" takes two parameter. "uri" indicates the URI of the
   principal for status checking. If omited, the principal for checking
   will be the script owner. "status-name" indicates what status to
   check. It has four possible values:

        "active-calls" checks for ongoing active calls.

        "presence" checks for online/offline status of the principal.

        "mood" checks for the mood of the principal.

        "activity" checks for the activity of the principal.

   The "status" output takes five parameters, indicating different
   conditions to match. The "greater", "less", and "equal" can only be



Wu & Schulzrinne         Expires August 18, 2005               [Page 18]


Internet Draft                    LESS                    February, 2005


   used for "active-calls", indicating whether the number of active
   calls is greater than, less than, or equal to a specific value.  The
   "is" parameter takes a list of strings for its value. User status
   MUST equal to all the strings in the list for being matched.  The
   "contains" parameter also takes a list of strings for match.  if user
   status equals to any string in the list, the switch get matched.

5.3 Modifiers

5.3.1 "location" Modifier

   The "location" modifier is the same as that defined in CPL [2],
   Section 5.1.

5.3.2 Location Lookup

   The "lookup" modifier is the same as that defined in CPL [2], Section
   5.2.

5.3.3 Location Removal

   The "remove-location" modifier is the same as that defined in CPL
   [2], Section 5.3.

5.4 Actions

   As we discussed before, LESS allows multiple actions get executed
   sequentially or in parallel. Every LESS action will have a default
   output "next". In the following sections, we will omit this default
   output for the syntax of actions.

5.4.1 "accept"

   "accept" actions cause the user agent to accept an incoming call.
   Their syntax is shown in Figure 5.


                                Node:  "accept"
                             Outputs:  None
                           Next node:  None
                          Parameters:  None


   Figure 5: Syntax of the "accept" node



   There is no parameters for the "accept" action. We can use "media"



Wu & Schulzrinne         Expires August 18, 2005               [Page 19]


Internet Draft                    LESS                    February, 2005


   modifier to change "accept" action's media parameters, as described
   in Section 10.1.1.

5.4.2 "reject"

   The "reject" modifier is the same as that defined in CPL [2], Section
   6.3.

5.4.3 "redirect"

   The "redirect" modifier is the same as that defined in CPL [2],
   Section 6.2.

5.4.4 "authenticate"

   "authenticate" actions cause user agents to authenticate local users
   or remote users.  Their syntax is shown in Figure 6.


         Node:  "authenticate"
      Outputs:  "success"       Next node if authentication succeeded
                "failure"       Next node if authentication failed
   Parameters:  "method"        Authentication method to use. Possible values
                                are "basic" and "digest".
                "realm"         The realm for authentication challenge.
                "user"          Required user for authentication.
                "target"        Which party to authenticate. Possible values
                                are "remote" and "local".

       Output:  "success"
   Parameters:  none

       Output:  "failure"
   Parameters:  none


   Figure 6: Syntax of the "authenticate" node



   "authenticate" action takes four arguments: "method", "realm", "user"
   and "target". The default value for "method" is "digest", which
   representing digest authentication.

   The action has two outputs, "success" and "failure", handles the
   situation under which the authentication succeeds or fails,
   accordingly.




Wu & Schulzrinne         Expires August 18, 2005               [Page 20]


Internet Draft                    LESS                    February, 2005


5.4.5 "call"

   "call" actions cause the user agent to make an outgoing call.  Their
   syntax is shown in Figure 7.


         Node:  "call"
      Outputs:  "accepted"     Next node if call attempt get accepted.
                "busy"         Next node if call attempt returned "busy".
                "failure"      Next node if call attempt failed.
                "noanswer"     Next node if call attempt was not
                               answered before timeout.
                "redirection"  Next node if call attempt was redirected.
   Parameters:  "timeout"      Time to try before giving up call attempt.

       Output:  "accepted"
   Parameters:  none

       Output:  "busy"
   Parameters:  none

       Output:  "noanswer"
   Parameters:  none

       Output:  "failure"
   Parameters:  none

       Output:  "redirection"
   Parameters:  none


   Figure 7: Syntax of the "call" node



   The "call" action has one parameter, "timeout", which specifies the
   time, as a positive integer number of seconds, to wait for the call
   attempt. We can also use "media" modifier to change "call" action's
   media parameters, as described in Section 10.1.1.

   The "call" action has five outputs. The "accepted" is followed if the
   call was accepted; the "busy" is followed if the call was busy; the
   "noanswer" is followed if the call was not answered before the
   "timeout" parameter expired; the "failure" is followed if the call
   failed for any other reason; the "redirection" is followed if the
   call was redirected.

5.4.6 "terminate"



Wu & Schulzrinne         Expires August 18, 2005               [Page 21]


Internet Draft                    LESS                    February, 2005


   "terminate" actions cause the user agent to terminate one or more
   ongoing sessions or call attempts.  Their syntax is shown in Figure
   8.


            Node:  "terminate"
         Outputs:  None
       Next node:  None
      Parameters:  "uri"        Select calls to terminate based on
                                the "uri" list.
                   "subject"    Select calls to terminate based on
                                the "subject" list.
                   "calls"      Possible values are "all", "last",
                                and "this". Default value is "this".


   Figure 8: Syntax of the "terminate" node



   There are three parameters for the "terminate" action, which define
   how to select calls to terminate. If "uri" parameter presented, all
   calls to one of the "uri" values will get terminated. If "subject"
   parameter presented, all calls with one of the "subject" values will
   get terminated. If the "calls" parameter is "all", all calls matching
   "uri" and "subject" parameters will get terminated, if it is "last",
   the last established session will get terminated, if it is "this",
   the calls associated with the trigger event of the script will get
   terminated.

5.4.7 "mail"

   The "mail" action is the same as that defined in CPL [2], Section
   7.1.

5.4.8 "log"

   The "log" action is similar to that defined in CPL [2], Section 7.2.
   But we added a new parameter for recording a call. The recording
   parameter makes it easy to associate a log with a recorded call.
   Their new syntax is shown in Figure 9.










Wu & Schulzrinne         Expires August 18, 2005               [Page 22]


Internet Draft                    LESS                    February, 2005



              Node:  "log"
           Outputs:  None
         Next node:  Any node
        Parameters:  "name"       Name of the log file to use
                     "comment"    Comment to be placed in log file
                     "recording"  The URI to place recording files


   Figure 9: Syntax of the "log" node



5.4.9 "wait"

   "wait" actions cause the user agent to perform subsequent actions in
   the "next" output after a duration of time.  Their syntax is shown in
   Figure 10.


                         Node:  "wait"
                      Outputs:  None
                    Next node:  Any node
                   Parameters:  "duration"  Time to wait


   Figure 10: Syntax of the "wait" node



6 Subactions and Ancillary Information

   Subactions and ancillary information are the same as those defined in
   CPL Section 8 and Section 9.

7 Security Considerations

   LESS shares the same security considerations as CPL, as defined in
   CPL document [2], Section 13.

8 IANA Considerations

   This document registers a new MIME type, application/less+xml, and a
   new URN per RFC 2141 [6], RFC 2648 [7], and RFC 3688 [8].

   The XML namespace urn:ietf:params:xml:ns:less will only refer to the
   version of LESS in this document and will not change.  Any LESS
   enhancements MUST be made by extensions and MUST have different



Wu & Schulzrinne         Expires August 18, 2005               [Page 23]


Internet Draft                    LESS                    February, 2005


   namespaces.

8.1 URN Sub-Namespace Registration for urn:ietf:params:xml:ns:less

        URI: urn:ietf:params:xml:ns:less

        Registrant Contact: 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>Language for End System Services Namespace</title>
              </head>
              <body>
                <h1>Namespace for the Language for End System Services</h1>
                <h2>urn:ietf:params:xml:ns:less</h2>
                <p><a href="[[[URL of published RFC]]]">RFCXXXX</a>.</p>
              </body>
              </html>
              END


8.2 Schema registration

   This specification registers XML Schema for LESS, as per the
   guidelines in [8].

        URI: urn:ietf:params:xml:schema:less

        Registrant contact:
             Xiaotao Wu <xiaotaow@cs.columbia.edu>
             Henning Schulzrinne <hgs@cs.columbia.edu>

        XML: The XML can be found in Section 19.1.

8.3 MIME Registration

   As an XML type, LESS's MIME registration conforms with "XML Media
   Types," RFC 3023 [9].




Wu & Schulzrinne         Expires August 18, 2005               [Page 24]


Internet Draft                    LESS                    February, 2005


        MIME media type name: application

        MIME subtype name: less+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 7, and Section 10 of RFC
             3023.

        Interoperability considerations: Different user agents 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.

        Applications which use this media type: SIP user agents.

        Additional information:

             Magic number: None

             File extension: .less or .xml

             Macintosh file type code: "TEXT"

        Person and e-mail address for further information:
             Xiaotao Wu <xiaotaow@cs.columbia.edu>
             Henning Schulzrinne <hgs@cs.columbia.edu>

        Intended usage: COMMON

        Author/Change Controller: The IETF.

9 LESS Extensions

   User agents MAY support additional LESS features beyond those listed
   in this document. LESS extensions are indicated by XML namespaces
   [10]. Every extension MUST have an appropriate XML namespace assigned
   to it.  The XML namespace of the extension MUST be different from the
   XML namespace defined in Section 15.2. The extension MUST NOT change
   the syntax or semantics of the basic LESS schema defined in this



Wu & Schulzrinne         Expires August 18, 2005               [Page 25]


Internet Draft                    LESS                    February, 2005


   document. All XML tags and attributes that are part of the extension
   MUST be appropriately qualified so as to place them within that
   namespace.

   A LESS script SHOULD NOT specify any namespaces it does not use. For
   compatibility with non-namespace-aware parsers, a LESS script MAY
   omit the base LESS namespace for a script which does not use any
   extensions.

   A LESS server MUST reject any script which contains a reference to a
   namespace which it does not understand. It MUST reject any script
   which contains an extension tag or attribute which is not qualified
   to be in an appropriate namespace.

   In the XML schema of LESS, we introduce four abstract elements,
   namely `trigger', `switch', `action', and `modifier', which
   accordingly have the abstract type `TriggerType', `SwitchType',
   `ActionType', and 'ModifierType'. Any trigger in a LESS extension
   MUST be defined as the substitutionGroup of the abstract `trigger'
   element, and has the type extended from the `TriggerType'.  Any
   switch in a LESS extension MUST be defined as the substitutionGroup
   of the abstract `switch' element, and has the type extended from the
   `SwitchType'. Any action in a LESS extension MUST be defined as the
   substitutionGroup of the abstract `action' element, and has the type
   extended from the `ActionType'.  Any modifier in a LESS extension
   MUST be defined as the substitutionGroup of the abstract `modifier'
   element, and has the type extended from the `ModifierType'.

   We defined several commonly used extensions that are very important
   for LESS-based services as below.

10 Media handling extension

   Media handling extensions define the elements that can manipulate
   session media information.

10.1 Modifiers

10.1.1 "Media:media" Modifier

   "Media:media" modifiers specify what media to use for an signaling
   action, such as "accept" and "call", as well as the parameters of the
   media.  Their syntax is shown in Figure 11.








Wu & Schulzrinne         Expires August 18, 2005               [Page 26]


Internet Draft                    LESS                    February, 2005



         Node:  "Media:media"
      Outputs:  None           (Next node follows directly)
    Next node:  Any node
   Parameters:  "media"        A list of medias. Possible values are "audio",
                               and "video".
                "input"        The source of input. It can be "microphone",
                               for audio, "camera" for video, or a URL
                               to a media file.
                "mode"         Possible values are "sendonly", "recvonly",
                               "sendrecv", and "inactive".
                "codec"        The codec used for the media.


   Figure 11: Syntax of the "Media:media" node



10.2 Actions

10.2.1 "Media:mediaupdate" Action

   "Media:mediaupdate" actions cause the user agent to change the media
   setup for an ongoing session.  Their syntax is shown in Figure 12.


                             Node:  "mediaupdate"
                          Outputs:  None
                        Next node:  None
                       Parameters:  None


   Figure 12: Syntax of the "mediaupdate" node



   There is no parameters for the "mediaupdate" action. We can use
   "media" modifier to change "mediaupdate" action's media parameters,
   as described in Section 10.1.1.  "Media:mediaupdate" actions can be
   used to handle some mid-call handling services, such as "mute" and
   "hold".

10.3 IANA Considerations

   This extension registers a new URN per RFC 2141 [6], RFC 2648 [7],
   and RFC 3688 [8].

   The XML namespace urn:ietf:params:xml:ns:less:media will only refer



Wu & Schulzrinne         Expires August 18, 2005               [Page 27]


Internet Draft                    LESS                    February, 2005


   to the version of LESS media extension in this document and will not
   change.  Any other LESS enhancements MUST be made by extensions and
   MUST have different namespaces.

10.3.1 URN Sub-Namespace Registration for
   urn:ietf:params:xml:ns:less:media

        URI: urn:ietf:params:xml:ns:less:media

        Registrant Contact: 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>Media Extension of the Language for End System Services Namespace</title>
              </head>
              <body>
                <h1>Namespace for the Media Extension of the Language for End System Services</h1>
                <h2>urn:ietf:params:xml:ns:less:media</h2>
                <p><a href="[[[URL of published RFC]]]">RFCXXXX</a>.</p>
              </body>
              </html>
              END


10.3.2 Schema registration

   This specification registers XML Schema for LESS, as per the
   guidelines in [8].

        URI: urn:ietf:params:xml:schema:less:media

        Registrant contact:
             Xiaotao Wu <xiaotaow@cs.columbia.edu>
             Henning Schulzrinne <hgs@cs.columbia.edu>

        XML: The XML can be found in Section 19.2.

10.3.3 MIME Registration




Wu & Schulzrinne         Expires August 18, 2005               [Page 28]


Internet Draft                    LESS                    February, 2005


   LESS Media extension has the same MIME type as LESS as defined in
   Section 8.3.

11 Mid-call Handling extension

   Mid-call handling actions can manipulate ongoing sessions. As we
   discussed before, "Media:mediaupdate" can handle "mute" and "hold"
   services. This extension defines two new actions, namely
   "Midcall:transfer" and "Midcall:merge".

11.1 Actions

11.1.1 "Midcall:transfer" Action

   "Midcall:transfer" actions cause the user agent to transfer existing
   calls to another user.  Their syntax is shown in Figure 13.


         Node:  "Midcall:transfer"
      Outputs:  "accepted"          Next node if "transfer" was accepted.
                "busy"              Next node if "transfer" returned "busy".
                "failure"           Next node if "transfer" failed.
                "noanswer"          Next node if "transfer" was not
                                    answered before timeout.
                "redirection"       Next node if "transfer" was redirected.
   Parameters:  "timeout"           Time to try before giving up "transfer".

       Output:  "accepted"
   Parameters:  none

       Output:  "busy"
   Parameters:  none

       Output:  "noanswer"
   Parameters:  none

       Output:  "failure"
   Parameters:  none

       Output:  "redirection"
   Parameters:  none


   Figure 13: Syntax of the "Midcall:transfer" node



   The "Midcall:transfer" action takes the same parameter and outputs as



Wu & Schulzrinne         Expires August 18, 2005               [Page 29]


Internet Draft                    LESS                    February, 2005


   "call" action, as defined in Section 5.4.5.

11.1.2 "Midcall:merge" Action

   "Midcall:merge" actions will merge multiple calls into an end system
   hosted conference. By default, audio streams will be mixed and sent
   to all the call participants. Video streams are forwarded to all the
   call participants. If there are held or muted calls, the hold and
   mute status are kept.  Their syntax is shown in Figure 14.


         Node:  "Midcall:merge"
      Outputs:  None
    Next node:  None
   Parameters:  "uri"            Select calls to merge based on the "uri" list.
                "subject"        Select calls to merge based on
                                 the "subject" list.


   Figure 14: Syntax of the "Midcall:merge" node



   There are two parameters for the "Midcall:merge" action, which define
   how to select calls to merge. If "uri" parameter presented, all calls
   to one of the "uri" values will be merged. If "subject" parameter
   presented, all calls with the one of the "subject" values will be
   merged. If further calls want to get merged into an existing end
   system hosted conference, users can use any value in "uri" list or
   "subject" list to refer to an existing conference.

11.2 IANA Considerations

   This extension registers a new URN per RFC 2141 [6], RFC 2648 [7],
   and RFC 3688 [8].

   The XML namespace urn:ietf:params:xml:ns:less:midcall will only refer
   to the version of LESS mid-call handling extension in this document
   and will not change. Any other LESS enhancements MUST be made by
   extensions and MUST have different namespaces.

11.2.1 URN Sub-Namespace Registration for
   urn:ietf:params:xml:ns:less:midcall

        URI: urn:ietf:params:xml:ns:less:midcall

        Registrant Contact: Xiaotao Wu <xiaotaow@cs.columbia.edu>
             Henning Schulzrinne <hgs@cs.columbia.edu>



Wu & Schulzrinne         Expires August 18, 2005               [Page 30]


Internet Draft                    LESS                    February, 2005


        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>Mid-call Handling Extension of the Language for End System Services Namespace</title>
              </head>
              <body>
                <h1>Namespace for the Mid-call Handling Extension of the Language for End System Services</h1>
                <h2>urn:ietf:params:xml:ns:less:midcall</h2>
                <p><a href="[[[URL of published RFC]]]">RFCXXXX</a>.</p>
              </body>
              </html>
              END


11.2.2 Schema registration

   This specification registers XML Schema for LESS, as per the
   guidelines in [8].

        URI: urn:ietf:params:xml:schema:less:midcall

        Registrant contact:
             Xiaotao Wu <xiaotaow@cs.columbia.edu>
             Henning Schulzrinne <hgs@cs.columbia.edu>

        XML: The XML can be found in Section 19.2.

11.2.3 MIME Registration

   LESS Media extension has the same MIME type as LESS as defined in
   Section 8.3.

12 User Interaction extension

   User Interaction extension handles user inputs and perform actions
   for alerting users and getting user inputs. It has one trigger and
   two actions defined.

12.1 Triggers

12.1.1 "UI:command" Trigger



Wu & Schulzrinne         Expires August 18, 2005               [Page 31]


Internet Draft                    LESS                    February, 2005


   "UI:command" handles user invoked commands, such as pressing call
   button, hold button, or transfer button.  Their syntax is shown in
   Figure 15.


                Trigger:  "UI:command"
             Parameters:  "command"     Command name to match.


   Figure 15: Syntax of the "UI:command" trigger



   "UI:command" trigger takes one parameter, "command", to check the
   command to match. Commands can be "call", "hold", "mute", "transfer",
   or any other commands users may perform.  Usually, a command is
   associated with a user interface button.

12.2 Actions

12.2.1 "UI:alert" Action

   "UI:alert" actions play alerting messages.  Their syntax is shown in
   Figure 16.


         Node:  "UI:alert"
      Outputs:  "timeout"   Next node if alerting time exceeds that
                            specified in "duration" parameter.
   Parameters:  "duration"  Time to play alerting message before
                            stopping alert.
                "priority"  Priority of alerting. Possible values
                            are "emergency", "urgent", "normal",
                            and "non-urgent".
                "icon"      The icon to display on the alerting interface.
                "message"   The message to display on the alerting interface.
                "style"     Possible alerting styles. Can be a combination of
                            "vibrate", "sound", "flash",
                            and "text". By default, it is "sound".
                "input"     Play a file as specified in the "input" URI.

       Output:  "timeout"
   Parameters:  none


   Figure 16: Syntax of the "UI:alert" node





Wu & Schulzrinne         Expires August 18, 2005               [Page 32]


Internet Draft                    LESS                    February, 2005


12.2.2 "UI:getinput" Action

   "UI:getinput" actions acquire users' input.  Their syntax is shown in
   Figure 17.


           Node:  "UI:getinput"
        Outputs:  "noanswer"                                      Next node if no input after the time
                                                                  specified in "timeout" parameter.
     Parameters:  "timeout"                                       Time to wait for user input.
                  "source"                                        Input source, possible values are
                                                                  "screen" and "sound".
                  "target"                                        Get input from "local" or "remote" user.
   Return value:  Return a text string acquired from user input.

         Output:  "noanswer"
     Parameters:  none


   Figure 17: Syntax of the "UI:getinput" node



12.3 IANA Considerations

   This extension registers a new URN per RFC 2141 [6], RFC 2648 [7],
   and RFC 3688 [8].

   The XML namespace urn:ietf:params:xml:ns:less:ui will only refer to
   the version of LESS mid-call handling extension in this document and
   will not change. Any other LESS enhancements MUST be made by
   extensions and MUST have different namespaces.

12.3.1 URN Sub-Namespace Registration for urn:ietf:params:xml:ns:less:ui

        URI: urn:ietf:params:xml:ns:less:ui

        Registrant Contact: Xiaotao Wu <xiaotaow@cs.columbia.edu>
             Henning Schulzrinne <hgs@cs.columbia.edu>

        XML:










Wu & Schulzrinne         Expires August 18, 2005               [Page 33]


Internet Draft                    LESS                    February, 2005



              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>User Interaction Extension of the Language for End System Services Namespace</title>
              </head>
              <body>
                <h1>Namespace for the User Interaction Extension of the Language for End System Services</h1>
                <h2>urn:ietf:params:xml:ns:less:ui</h2>
                <p><a href="[[[URL of published RFC]]]">RFCXXXX</a>.</p>
              </body>
              </html>
              END


12.3.2 Schema registration

   This specification registers XML Schema for LESS, as per the
   guidelines in [8].

        URI: urn:ietf:params:xml:schema:less:ui

        Registrant contact:
             Xiaotao Wu <xiaotaow@cs.columbia.edu>
             Henning Schulzrinne <hgs@cs.columbia.edu>

        XML: The XML can be found in Section 19.2.

12.3.3 MIME Registration

   LESS Media extension has the same MIME type as LESS as defined in
   Section 8.3.

13 Instant Messaging extension

13.1 Triggers

13.1.1 "IM:message" Trigger

   "IM:message" handles incoming instant messages.  Their syntax is
   shown in Figure 18.





Wu & Schulzrinne         Expires August 18, 2005               [Page 34]


Internet Draft                    LESS                    February, 2005



                           Trigger:  "IM:message"
                        Parameters:  None


   Figure 18: Syntax of the "IM:message" trigger



13.2 Actions

13.2.1 "IM:sendmsg" Action

   "IM:sendmsg" actions cause the user agent to send an outgoing instant
   message.  Their syntax is shown in Figure 19.


         Node:  "IM:sendmsg"
      Outputs:  "accepted"     Next node if the message get accepted.
                "failure"      Next node if failed to send the message.
                "noanswer"     Next node if no response for the message
                               before timeout.
                "redirection"  Next node if the message was redirected.
   Parameters:  "timeout"      Time to try before giving up sending message.

       Output:  "accepted"
   Parameters:  none

       Output:  "noanswer"
   Parameters:  none

       Output:  "failure"
   Parameters:  none

       Output:  "redirection"
   Parameters:  none


   Figure 19: Syntax of the "IM:sendmsg" node



   The parameters and outputs of "IM:sendmsg" actions are the same those
   for "call" actions, as defined in Section 5.4.5.

13.3 IANA Considerations

   This extension registers a new URN per RFC 2141 [6], RFC 2648 [7],



Wu & Schulzrinne         Expires August 18, 2005               [Page 35]


Internet Draft                    LESS                    February, 2005


   and RFC 3688 [8].

   The XML namespace urn:ietf:params:xml:ns:less:im will only refer to
   the version of LESS mid-call handling extension in this document and
   will not change. Any other LESS enhancements MUST be made by
   extensions and MUST have different namespaces.

13.3.1 URN Sub-Namespace Registration for urn:ietf:params:xml:ns:less:im

        URI: urn:ietf:params:xml:ns:less:im

        Registrant Contact: 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>Instant Messaging Extension of the Language for End System Services Namespace</title>
              </head>
              <body>
                <h1>Namespace for the Instant Messaging Extension of the Language for End System Services</h1>
                <h2>urn:ietf:params:xml:ns:less:im</h2>
                <p><a href="[[[URL of published RFC]]]">RFCXXXX</a>.</p>
              </body>
              </html>
              END


13.3.2 Schema registration

   This specification registers XML Schema for LESS, as per the
   guidelines in [8].

        URI: urn:ietf:params:xml:schema:less:im

        Registrant contact:
             Xiaotao Wu <xiaotaow@cs.columbia.edu>
             Henning Schulzrinne <hgs@cs.columbia.edu>

        XML: The XML can be found in Section 19.2.




Wu & Schulzrinne         Expires August 18, 2005               [Page 36]


Internet Draft                    LESS                    February, 2005


13.3.3 MIME Registration

   LESS Media extension has the same MIME type as LESS as defined in
   Section 8.3.

14 Event Handling extension

   Event handling extension is used to handle event subscriptions and
   notifications. It has two triggers, one switch, and five actions
   defined.

14.1 Triggers

14.1.1 "Event:subscription" Trigger

   "Event:subscription" handles incoming event subscription.  Their
   syntax is shown in Figure 20.


                       Trigger:  "Event:subscription"
                    Parameters:  None


   Figure 20: Syntax of the "Event:subscription" trigger



14.1.2 "Event:notification" Trigger

   "Event:notification" handles incoming event notification.  Their
   syntax is shown in Figure 21.


                       Trigger:  "Event:notification"
                    Parameters:  None


   Figure 21: Syntax of the "Event:notification" trigger



14.2 Switches

14.2.1 "Event:event-switch" Switch

   Event-switches allow a LESS script to make decisions based on the
   event values in an incoming event subscription or notification.  The
   syntax of "event-switch" is summarized in Figure 22.



Wu & Schulzrinne         Expires August 18, 2005               [Page 37]


Internet Draft                    LESS                    February, 2005



         Node:  "Event:event-switch"
      Outputs:  "event"               Specific event to match
   Parameters:  None

       Output:  "event"
   Parameters:  "package"             Match against a list of event packages.
                "is"                  Match against an event list.


   Figure 22: Syntax of the "Event:event-switch" node



   The "event" output takes two parameters, "package" checks whether an
   event has a specific package name, "is" checks whether an event is
   one of the event specified in the event list.

14.3 Actions

14.3.1 "Event:approve" Action

   "Event:approve" actions cause the presence agent to approve an
   incoming event subscription.  Their syntax is shown in Figure 23.


         Node:  "Event:approve"
      Outputs:  None
    Next node:  None
   Parameters:  "expires"        Expiration duration for the subscription.



   Figure 23: Syntax of the "Event:approve" node



14.3.2 "Event:deny" Action

   "Event:deny" actions cause the presence agent to deny an incoming
   event subscription.  Their syntax is shown in Figure 24.










Wu & Schulzrinne         Expires August 18, 2005               [Page 38]


Internet Draft                    LESS                    February, 2005



                              Node:  "Event:deny"
                           Outputs:  None
                         Next node:  None
                        Parameters:  None



   Figure 24: Syntax of the "Event:deny" node



   There are no parameters and outputs for the "Event:deny" action.

14.3.3 "Event:defer" Action

   "Event:defer" actions cause the presence agent to defer the decision
   on an incoming event subscription. This will cause the event
   subscription in pending state.  Their syntax is shown in Figure 25.


                             Node:  "Event:defer"
                          Outputs:  None
                        Next node:  None
                       Parameters:  None



   Figure 25: Syntax of the "Event:defer" node



   There are no parameters and outputs for the "Event:defer" action.

14.3.4 "Event:subscribe" Action

   "Event:subscribe" actions cause the presence agent to send an event
   subscription to a presentity.  Their syntax is shown in Figure 26.













Wu & Schulzrinne         Expires August 18, 2005               [Page 39]


Internet Draft                    LESS                    February, 2005



         Node:  "Event:subscribe"
      Outputs:  "approved"         Next node if the subscription was approved.
                "denied"           Next node if the subscription was denied.
                "pending"          Next node if the subscription was pending.
                "noanswer"         Next node if the subscription was not
                                   answered before timeout.
                "failure"          Next node if the subscription failed for
                                   any other reasons.
                "redirection"      Next node if the subscription was redirected.
   Parameters:  "timeout"          Time to try before giving up the subscription.
                "expires"          The duration of the subscription.
                "package"          The event package to subscribe to.
                "content"          The content (e.g., event filtering) in subscription.

       Output:  "approved"
   Parameters:  none

       Output:  "denied"
   Parameters:  none

       Output:  "pending"
   Parameters:  none

       Output:  "noanswer"
   Parameters:  none

       Output:  "failure"
   Parameters:  none

       Output:  "redirection"
   Parameters:  none


   Figure 26: Syntax of the "Event:subscribe" node



14.3.5 "Event:notify" Action

   "Event:notify" actions cause the presence agent to send an event
   subscription to a presentity.  Their syntax is shown in Figure 27.









Wu & Schulzrinne         Expires August 18, 2005               [Page 40]


Internet Draft                    LESS                    February, 2005



         Node:  "Event:notify"
      Outputs:  "accepted"      Next node if the notification was accepted.
                "noanswer"      Next node if the notification was not
                                confirmed before timeout.
                "failure"       Next node if the notification failed for
                                any other reasons.
                "redirection"   Next node if the notification was redirected.
   Parameters:  "timeout"       Time to try before giving up the notification.
                "package"       The event package in notification.
                "event"         The event in notification.
                "##any"         Any other parameters for an event.

       Output:  "accepted"
   Parameters:  none

       Output:  "noanswer"
   Parameters:  none

       Output:  "failure"
   Parameters:  none

       Output:  "redirection"
   Parameters:  none


   Figure 27: Syntax of the "Event:notify" node



14.4 IANA Considerations

   This extension registers a new URN per RFC 2141 [6], RFC 2648 [7],
   and RFC 3688 [8].

   The XML namespace urn:ietf:params:xml:ns:less:event will only refer
   to the version of LESS mid-call handling extension in this document
   and will not change. Any other LESS enhancements MUST be made by
   extensions and MUST have different namespaces.

14.4.1 URN Sub-Namespace Registration for
   urn:ietf:params:xml:ns:less:event

        URI: urn:ietf:params:xml:ns:less:event

        Registrant Contact: Xiaotao Wu <xiaotaow@cs.columbia.edu>
             Henning Schulzrinne <hgs@cs.columbia.edu>




Wu & Schulzrinne         Expires August 18, 2005               [Page 41]


Internet Draft                    LESS                    February, 2005


        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>Event Handling Extension of the Language for End System Services Namespace</title>
              </head>
              <body>
                <h1>Namespace for the Event Handling Extension of the Language for End System Services</h1>
                <h2>urn:ietf:params:xml:ns:less:event</h2>
                <p><a href="[[[URL of published RFC]]]">RFCXXXX</a>.</p>
              </body>
              </html>
              END


14.4.2 Schema registration

   This specification registers XML Schema for LESS, as per the
   guidelines in [8].

        URI: urn:ietf:params:xml:schema:less:event

        Registrant contact:
             Xiaotao Wu <xiaotaow@cs.columbia.edu>
             Henning Schulzrinne <hgs@cs.columbia.edu>

        XML: The XML can be found in Section 19.2.

14.4.3 MIME Registration

   LESS Media extension has the same MIME type as LESS as defined in
   Section 8.3.

15 Location-based service extension

   This extension introduces two new switch nodes named where-switch and
   where-relation-switch.  The new switch nodes check people's physical
   locations and based on the location information to make call control
   decisions.

15.1 Switches




Wu & Schulzrinne         Expires August 18, 2005               [Page 42]


Internet Draft                    LESS                    February, 2005


15.1.1 "Location:where-switch" Switch

   "Where-switches" allow a LESS script to make call decisions based on
   the physical location information. They are summarized in Figure 28.















































Wu & Schulzrinne         Expires August 18, 2005               [Page 43]


Internet Draft                    LESS                    February, 2005



         Node:  "Location:where-switch"
      Outputs:  "where"                  Specific the location to match
   Parameters:  "type"                   "geospatial", "civil"
                "uri"                    the location occupier's uri. If omited,
                                         check the script owner's location.

       Output:  "where"
   Parameters:  "longitude"              Longitude coordinates,
                                         valid only for geospatial type
                "latitude"               Latitude coordinates,
                                         valid only for geospatial type
                "altitude"               Altitude coordinates,
                                         valid only for geospatial type
                "country"                Country of the location,
                                         valid only for civil type
                "A1"                     National subdivisions
                                         (state, region, province, prefecture),
                                         valid only for civil type
                "A2"                     County, parish, gun (JP), district (IN),
                                         valid only for civil type
                "A3"                     City, township, shi (JP),
                                         valid only for civil type
                "A4"                     City division, borough, city district, ward,
                                         chou (JP), valid only for civil type
                "A5"                     neighborhood, block,
                                         valid only for civil type
                "A6"                     street, valid only for civil type
                "PRD"                    Leading street direction,
                                         valid only for civil type
                "POD"                    Trailing street suffix,
                                         valid only for civil type
                "STS"                    Street suffix, valid only for civil type
                "HNO"                    House number, numeric part only,
                                         valid only for civil type
                "HNS"                    House number suffix,
                                         valid only for civil type
                "LMK"                    Landmark or vanity address,
                                         valid only for civil type
                "LOC"                    Additional location information, such as room
                                         valid only for civil type
                "FLR"                    Floor, valid only for civil type
                "NAM"                    Name (residence, business or office occupant)
                                         valid only for civil type
                "PC"                     Postal code, valid only for civil type
                "distance"               Distance value to a specified location.
                                         Valid only if geospatial or
                                         civil location presented.



Wu & Schulzrinne         Expires August 18, 2005               [Page 44]


Internet Draft                    LESS                    February, 2005


                "condition"              Valid only if distance presented.
                                         Value is (in|out|at|). Default value is "at".
                "unit"                   Valid only if distance presented.
                                         Value is (m|km|mi|in|ft|yd|naut mi).
                                         Default value is "m".
                "direction"              Direction relative to a specified location,
                                         Valid only if geospatial or
                                         civil location presented. Value is
                                         "(south|north|west|east|above|below)".


   Figure 28: Syntax of the "Location:where-switch" node



   Location:where-switches have two node parameters: The mandatory
   parameter "type" specifies the location type to match: either
   geospatial location, or civil location. The optional parameter "uri"
   specifies the location occupier's uri. If not provided, the location
   occupier will be the script owner.

   The "where" output tag may have one or more parameters, indicating
   the exact location to match.

   The "longitude", "latitude", and "altitude" are used to specify a
   geographical location. The country, "A1", "A2", "A3", "A4", "A5",
   "A6", "PRD", "POD", "STS", "HNO", "HNS", "LMK", "LOC", "FLR", "NAM",
   and "PC" are used to specify a civil location.

   The "distance" parameter cannot be used without geographical location
   or civil location specified. Usually, the distance parameter is used
   with geographical location since it is difficult to measure the
   distance to a civil location. The "condition" and "unit" parameters
   are used to provide more convenient ways for distance specification.
   The available unit values are (m|km|mi|in|ft|yd|naut mi), mapped to
   meter, kilometer, mile, inch, foot, yard, and nautical mile,
   accordingly.

   The "direction" parameter cannot be used without geographical
   location or civil location specified. The value "south" or "north"
   are usually used when latitude specified. The value "east" or "west"
   are usually used when longitude specified. The value "above" and
   "below" are usually used when altitude specified, or FLR specified.

15.1.2 "Location:where-relation-switch"

   Location:where-relation-switches allow a LESS script to make call
   decisions based on the location relation of two persons. They are



Wu & Schulzrinne         Expires August 18, 2005               [Page 45]


Internet Draft                    LESS                    February, 2005


   summarized in Figure 29.


         Node:  "Location:where-relation-switch"
      Outputs:  "where-relation"                  Specific location relation to match
   Parameters:  "uri1"                            the first location occupier's uri
                "uri2"                            the second location occupier's uri

       Output:  "where-relation"
   Parameters:  "distance"                        Distance value between two persons.
                "condition"                       Valid only if distance presented.
                                                  Value is (in|out|at|).
                                                  Default value is "at".
                "unit"                            Valid only if distance presented.
                                                  Value is (m|km|mi|in|ft|yd
                                                  |naut mi). Default value is "m".
                "direction"                       Direction relation between two
                                                  persons, value is "(south|north|
                                                  west|east|above|below)".
                "same"                            A space separated list containing
                                                  location attributes, e.g., LOC, that
                                                  two persons have the same value.
                "difference"                      A space separated list containing
                                                  location attributes, that two
                                                  persons have different values.


   Figure 29: Syntax of the "Location:where-relation-switch" node



   Location:where-relation-switches have two node parameters:  The
   mandatory parameter "uri1" specifies the first location occupier's
   uri.  The optional parameter "uri2" specifies the second location
   occupier's uri. If not provided, the second location occupier will be
   the script owner.

   The "where-relation" output tag may have one or more parameters,
   indicating the exact relation to match.

   The "distance" parameter indicates the distance between two persons.
   The "condition" and "unit" parameters are used for distance
   measuring.  They have the same meanings as those defined in "where-
   switch".

   The "direction" parameter indicates relative positions between two
   persons. For example, "south" means uri1 is south of uri2.




Wu & Schulzrinne         Expires August 18, 2005               [Page 46]


Internet Draft                    LESS                    February, 2005


   The "same" and "difference" indicating the relationship between two
   persons' location attributes. The attributes can be geospatial
   location attributes, such as "longitude", "latitude", and "altitude".
   They can also be civil location attributes, such as country, "A1",
   "A2", "A3", "A4", "A5", "A6", "PRD", "POD", "STS", "HNO", "HNS",
   "LMK", "LOC", "FLR", "NAM", and "PC".

15.2 IANA Considerations

   This extension registers a new URN per RFC 2141 [6], RFC 2648 [7],
   and RFC 3688 [8].

   The XML namespace urn:ietf:params:xml:ns:less:location will only
   refer to the version of LESS mid-call handling extension in this
   document and will not change. Any other LESS enhancements MUST be
   made by extensions and MUST have different namespaces.

15.2.1 URN Sub-Namespace Registration for
   urn:ietf:params:xml:ns:less:location

        URI: urn:ietf:params:xml:ns:less:location

        Registrant Contact: 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>Location-based Service Extension of the Language for End System Services Namespace</title>
              </head>
              <body>
                <h1>Namespace for the Location-based Service Extension of the Language for End System Services</h1>
                <h2>urn:ietf:params:xml:ns:less:location</h2>
                <p><a href="[[[URL of published RFC]]]">RFCXXXX</a>.</p>
              </body>
              </html>
              END


15.2.2 Schema registration




Wu & Schulzrinne         Expires August 18, 2005               [Page 47]


Internet Draft                    LESS                    February, 2005


   This specification registers XML Schema for LESS, as per the
   guidelines in [8].

        URI: urn:ietf:params:xml:schema:less:location

        Registrant contact:
             Xiaotao Wu <xiaotaow@cs.columbia.edu>
             Henning Schulzrinne <hgs@cs.columbia.edu>

        XML: The XML can be found in Section 19.2.

15.2.3 MIME Registration

   LESS Media extension has the same MIME type as LESS as defined in
   Section 8.3.

16 Queue handling extension

   Many call center services require queueing incoming calls for
   available operators. This extension defines two actions for queue
   operation.

16.1 Actions

16.1.1 "Queue:enqueue" Action

   "Queue:enqueue" actions cause the user agent to put an incoming call
   in a waiting queue.  Their syntax is shown in Figure 30.


         Node:  "Queue:enqueue"
      Outputs:  "full"           If the number of calls exceeds the "maxlen".
   Parameters:  "queue"          The name of the queue. Possible values can be
                                 any string. Two pre-defined names are "hold"
                                 and "callback", which hosts holding calls and
                                 calls waiting for callback, accordingly.
                                 If not provided, use user agent's default queue.
                "maxlen"         The maximum calls can be held in the queue.

       Output:  "full"
   Parameters:  none


   Figure 30: Syntax of the "Queue:enqueue" node



16.1.2 "Queue:dequeue" Action



Wu & Schulzrinne         Expires August 18, 2005               [Page 48]


Internet Draft                    LESS                    February, 2005


   "Queue:dequeue" actions cause the user agent to retrieve a call from
   a waiting queue.  Their syntax is shown in Figure 31.


         Node:  "Queue:dequeue"
      Outputs:  "success"        A call get retrieved.
                "failure"        Queue empty or other reasons. "dequeue" failed.
   Parameters:  "queue"          The name of the queue. Possible values can be
                                 any string. Two pre-defined names are "hold"
                                 and "callback", which hosts holding calls and
                                 calls waiting for callback, accordingly.
                                 If not provided, use user agent's default queue.

       Output:  "success"
   Parameters:  none

       Output:  "failure"
   Parameters:  none


   Figure 31: Syntax of the "Queue:dequeue" node



17 Examples

   The following sections investigate services suitable for end systems.
   We looked into ITU Q.1211 [16] services, AT&T 5ESS switch services
   [17], services defined in CSTA Phase III [18], and new services
   incorporated with other Internet services, such as email and presence
   information, for appropriate end system services.

17.1 Q.1211 services

   The technical report by Lennox et al [19] illustrated how to use SIP
   to handle Q.1211 services.  In table 1 of that report, it defines
   what Q.1211 services are suitable for end systems. We only focuses on
   the services appropriate for end systems and tries to use LESS to
   program those services.

17.1.1 Abbreviated dialing (ABD)

   "Abbreviated dialing allows the definition of short (e.g., two digit)
   digit sequences to represent the actual dialing digit sequence for a
   public or private numbering scheme."

   Internet telephony end systems may simply use speed-dial buttons to
   handle the work. Instead of dialing a digit sequence, a single



Wu & Schulzrinne         Expires August 18, 2005               [Page 49]


Internet Draft                    LESS                    February, 2005


   button-click may trigger a call. End systems may also use LESS
   service scripts to do the translation from a short sequence to an
   actual sequence. Below is a LESS script example for the ABD service.


   <less>
     <UI:command command="call">
       <address-switch field="destination">
         <address is="tel:11; phone-context=local">
           <location url="tel:+1-212-939-7054">
             <call/>
           </location>
         </address>
       </address-switch>
     </UI:command>
   </less>



17.1.2 Attendant (ATT)

   "This allows VPN users to access an attendant (operator) position
   within the VPN for providing VPN service information (e.g., VPN
   numbers) by dialing a special access code. An Internet telephony end
   system needs only to be configured with an address of an appropriate
   local operator to translate the special access code to the actual
   local address of an attendant, or some address which will resolve to
   that address."  For LESS, this is similar to the ABD service (Section
   17.1.1) handling.

17.1.3 Authentication (AUTC)

   "This allows verification that a user is allowed to access certain
   options in the telephone network. This should be in basic end system
   implementation."


   <less>
     <UI:command command="call">
       <authenticate user="{message.origin}" target="local">
         <success>
           <!-- If authentication succeeded, accept the call -->
           <call/>
         </success>
         <failure>
           <!-- If authentication failed, terminate the call attempt-->
           <terminate/>
         </failure>



Wu & Schulzrinne         Expires August 18, 2005               [Page 50]


Internet Draft                    LESS                    February, 2005


       </authenticate>
     </UI:command>
   </less>



17.1.4 Authorization code (AUTZ)

   "This allows a user (typically in a VPN) to override the restrictions
   placed on the system from which calls are made. This should be in
   basic end system implementation."  Though we can user LESS scripts to
   automate the authorization process, it is unsafe to save the codes in
   LESS scripts.

17.1.5 Automatic call back (ACB)

   "This feature allows the called party to automatically call back the
   calling party of the last call directed to the called party."

   This can be handled by either end systems or network servers. If
   handled by a network server, the network server should send a SIP
   REFER request to the calling party to initiate the call back (This is
   more like traditional Automatic Callback service).

   The service involves two steps, one is to log received invitations,
   the other is to retrieve the invitations and make calls.  Below is a
   LESS service script handling this service.


   <less>
     <incoming>
       <status-switch status-name="activity">
         <status is="busy">
           <reject>
             <!-- Any action should have a 'next' for subsequent actions -->
             <!-- If one action has a sibling action, the sibling action
                  will be executed in parallel with this action -->
             <next>
               <!-- A "callback" queue is defined -->
               <Queue:enqueue queue="callback"/>
             </next>
           </reject>
         </status>
       </status-switch>
     </incoming>
     <Event:notification>
       <address-switch field="origin">
         <address url="{agent.uri}">



Wu & Schulzrinne         Expires August 18, 2005               [Page 51]


Internet Draft                    LESS                    February, 2005


           <Event:event-switch>
             <Event:event package="presence" status="open" activity="">
               <!-- If no 'number' parameter provided, the Queue:dequeue action
                    will sequentially retrieve all elements in the queue -->
               <Queue:dequeue queue="callback">
                 <success>
                   <call/>
                 </success>
               </Queue:dequeue>
             </Event:event>
           </Event:event-switch>
         </address>
       </address-switch>
     </Event:notification>
   </less>



17.1.6 Call distribution (CD)

   "This service feature allows the served user to specify the
   percentage of calls to be distributed among two or more destinations.
   Other criteria may also apply to the distribution of calls to each
   destination."

   This is usually done by network servers. If we extend CPL with a
   switch checking multiple destinations' status, we can handle the
   service in a proxy server by using CPL.

17.1.7 Call forwarding (CF)

   "This service feature allows a user to have his incoming calls
   addressed to another number, no matter what the called party line
   status may be."  A simple LESS script can handle this below:


   <less>
     <incoming>
       <location url="sip:bob-home@example.com">
         <redirect/>
       </location>
     </incoming>
   </less>



17.1.8 Call forwarding on busy/don't answer (CFC)




Wu & Schulzrinne         Expires August 18, 2005               [Page 52]


Internet Draft                    LESS                    February, 2005


   "This service feature allows the called user to forward particular
   calls if the called user is busy or does not answer within a
   specified number of rings."

   This service requires an end system to check its status and make call
   decisions. The following script forwards calls on busy.


   <less>
     <incoming>
       <status-switch status-name="activity">
         <status is="on-the-phone">
           <location url="sip:bob-home@example.com">
             <redirect/>
           </location>
         </status>
       </status-switch>
     </incoming>
   </less>



   The following script is for call forwarding on no answer.


   <less>
     <incoming>
       <alert timeout="2000">
         <timeout>
           <location url="sip:bob-home@example.com">
             <redirect/>
           </location>
         </timeout>
       </alert>
     </incoming>
   </less>



17.1.9 Call gapping (GAP)

   "This feature allows the service provider to restrict the number of
   calls to a served user to prevent congestion of the network."  This
   service should be implemented in network servers. A similar feature,
   Call Limiter (LIM) (Section 17.1.11), will do the similar thing but
   for end systems.

17.1.10 Call hold with announcement (CHA)



Wu & Schulzrinne         Expires August 18, 2005               [Page 53]


Internet Draft                    LESS                    February, 2005


   "The call hold with announcement service feature allows a subscriber
   to place a call on hold with options to play music or customized
   announcements to the held party."  This service requires user
   interaction. A LESS script that can enhance the service by
   customizing the announcements based on addresses is shown below:


   <less>
     <!-- A trigger to handle user input -->
     <!-- For portability, the values for the parameter 'command'
          are pre-defined, each command can only be applied under a
          certain condition. 'hold' can only be used with an
          ongoing call -->
     <UI:command command="hold">
       <address-switch field="destination">
         <address is="sip:bob@example.com">
           <Media:media media="audio" input="music.au" mode="sendonly">
             <Media:mediaupdate/>
           </Media:media>
         </address>
       </address-switch>
     </UI:command>
   </less>



17.1.11 Call limiter (LIM)

   "This service feature allows a served user to specify the maximum
   number of simultaneous calls to a served user's destination. If the
   destination is busy, the call may be routed to an alternative
   destination."

   Internet telephony end systems can have virtually unlimited lines.
   However, the resources (CPU, memory, I/O devices) are limited for an
   end device so the number of simultaneous calls is limited. This can
   be handled by a LESS script below:


   <less>
     <incoming>
       <status-switch status-name="active-calls">
         <status equal="2">
           <reject status="busy"/>
         </status>
       </status-switch>
     </incoming>
   </less>



Wu & Schulzrinne         Expires August 18, 2005               [Page 54]


Internet Draft                    LESS                    February, 2005


17.1.12 Call logging (LOG)

   "This service feature allows for a record to be prepared each time
   that a call is received to a specified telephone number."  The <log>
   action in LESS can handle this feature.


   <less>
     <incoming>
       <log/>
     </incoming>
   </less>



17.1.13 Call queueing (QUE)

   "This service feature allows calls which would otherwise be declared
   busy to be placed in a queue and connected as soon as the free
   condition is detected. Upon entering the queue, the caller hears an
   initial announcement informing the caller the call will be answered
   when a line is available."

   The call queueing service can be handled by an application server in
   the network. End systems can also handle it. The LESS script below
   handles the service.


   <less>
     <incoming>
       <status-switch status-name="active-calls">
         <!-- For more than one active call, we use 'active-calls="1+" -->
         <status equal="1">
           <Media:media media="audio" input="music.au" mode="sendonly">
             <accept>
               <next>
                 <Queue:enqueue queue="hold"/>
               </next>
             </accept>
           </Media:media>
         </status>
       </status-switch>
     </incoming>
     <Event:notification>
       <status-switch status-name="active-calls">
         <status equal="0">
           <!-- Retrieve only one call from the hold queue -->
           <Queue:dequeue queue="hold" number="1">



Wu & Schulzrinne         Expires August 18, 2005               [Page 55]


Internet Draft                    LESS                    February, 2005


             <success>
               <Media:media media="audio" input="microphone" mode="sendrecv">
                 <Media:mediaupdate/>
               </Media:media>
             </success>
           </Queue:dequeue>
         </status>
       </status-switch>
     </Event:notification>
   </less>



17.1.14 Call transfer (TRA)

   "The call transfer service feature allows a subscriber to place a
   call on hold and transfer the call to another location."

   In LESS, the <transfer> action is used to handle the service.  Call
   transfer is a user triggered service. A LESS script can be triggered
   by a user input event to perform a transfer.


   <less>
     <!-- the 'transfer' command only applies to the current ongoing call -->
     <UI:command command="transfer">
       <!-- Transfer all calls between 09:00 ~ 17:00 to specialist@foo.com,
            otherwise, to technician@foo.com -->
       <time-switch>
         <time dtstart="20040716T090000Z"
           duration="PT8H" freq="weekly" byday="MO,TU,WE,TH,FR">
           <location uri="specialist@foo.com">
             <transfer/>
           </location>
         </time>
         <otherwise>
           <location uri="technician@foo.com">
             <transfer/>
           </location>
         </otherwise>
       </time-switch>
     </UI:command>
   </less>



17.1.15 Call waiting (CW)




Wu & Schulzrinne         Expires August 18, 2005               [Page 56]


Internet Draft                    LESS                    February, 2005


   "This service feature allows a subscriber to receive a notification
   that another party is trying to reach his number while he is busy
   talking to another calling party."

   Since an Internet telephony end system can have multiple lines and a
   better user interface, such as a bigger LCD display, it can alert
   users for any new calls. No service scripts required for this
   service.

17.1.16 Closed user group (CUG)

   "This service feature allows the user to be a member of a set of
   users who are normally authorized to make and receive calls only
   within the group."

   This service should be put on network servers, though end systems can
   handle it by using call screening services. We will introduce call
   screening services in Section 17.1.30 and 17.1.37.

17.1.17 Consultation calling (COC)

   "The consultation calling service feature allows a subscriber to
   place a call on hold, in order to initiate a new call for
   consultation."

   For Internet telephony end systems, this service is similar to Call
   hold with announcements (CHA), which we have discussed in Section
   17.1.10.

17.1.18 Customer profile management (CPM)

   "This service feature allows the subscriber to real-time manage his
   service profile, i.e. terminating destinations, announcements to be
   played, call distribution, and so on."

   This is about service script management. There should be a friendly
   service creation and management user interface for end systems.

17.1.19 Customer recorded announcement (CRA)

   "This service allows a call to be completed to a (customized)
   terminating announcement instead of a subscriber line.  The served
   user may define different announcements for unsuccessful call
   completions due to different reasons (e.g. caller outside business
   hours, all lines are busy)."  The switches in LESS can do the
   customization work.  For example, a time-based customization is as
   below:




Wu & Schulzrinne         Expires August 18, 2005               [Page 57]


Internet Draft                    LESS                    February, 2005


   <less>
     <incoming>
       <!-- Effective from 07/16/2004, if an incoming call is after
            05:00:00 PM Friday, and before 09:00:00 AM Monday, play
            the no_office_hour.au announcement -->
       <time-switch>
         <time dtstart="20040716T170000Z"
           duration="PT16H" freq="weekly" byday="MO,TU,WE,TH,FR">
           <Media:media media="audio" source="no_office_hour.au" mode="sendonly">
             <accept/>
           </Media:media>
         </time>
       </time-switch>
     </incoming>
   </less>



17.1.20 Customized ringing (CRG)

   "This service feature allows the subscriber to allocate a distinctive
   ringing to a list of calling parties."

   This service can only be handled in an end system. The script below
   shows an enhanced version not only based on address but also based on
   priority of the call to perform customized ringing.


   <less>
     <incoming>
       <priority-switch>
         <priority equal="emergency">
           <alert priority="emergency"/>
         </priority>
         <otherwise>
           <address-switch field="origin">
             <address is="sip:bob@example.com">
               <alert audio="bob.au"/>
             </address>
             <otherwise>
               <alert/>
             </otherwise>
           </address-switch>
         </otherwise>
       </priority-switch>
     </incoming>
   </less>




Wu & Schulzrinne         Expires August 18, 2005               [Page 58]


Internet Draft                    LESS                    February, 2005


17.1.21 Destination user prompter (DUP)

   "This service feature enables to prompt the called party with a
   specific announcement. Such an announcement may ask the called party
   enter an extra numbering, e.g. through DTMF, or a voice instruction
   that can be used by the service logic to continue to process the
   call."


        Though we can use LESS <Media:media> modifier to easily
        play an announcement, it is out of LESS's scope to handle
        DTMF inputs. The DTMF handling falls into VoiceXML's [20]
        domain.  For example, UI:prompt script="input1.vxml"/>.
        More investigation is required on integrating VoiceXML into
        LESS.

17.1.22 Follow-me diversion (FMD)

   "With this service feature, a user may register for incoming calls to
   any terminal access." This service should be in network servers.

17.1.23 Mass calling (MAS)

   "This service feature allows processing of huge numbers of incoming
   calls, generated by broadcasted advertisings or games." This service
   should be handled by network servers.

17.1.24 Meet-me conference (MMC)

   "This service feature allows the user to reserve a conference
   resource for making a multi-party call. At a specified date and time,
   each participant in the conference has to dial a designated number in
   order to have access to the conference."  This is a standard
   conferencing service.  We can use LESS to perform time and caller
   checking, and authentication.


   <less>
     <incoming>
       <time-switch>
         <!-- a conference on every Monday from 17:00 to 19:00 -->
         <time dtstart="20040716T170000Z"
           duration="PT2H" freq="weekly" byday="MO">
           <address-switch field="origin">
             <address is="sip:bob@example.com">
               <authenticate user="{message.destination}" target="remote">
                 <success>
                   <accept/>



Wu & Schulzrinne         Expires August 18, 2005               [Page 59]


Internet Draft                    LESS                    February, 2005


                 </success>
               </authenticate>
             </address>
           </address-switch>
         </time>
     </incoming>
   </less>



17.1.25 Multi-way calling (MWC)

   "This service feature allows the user to establish multiple,
   simultaneous telephone calls with other parties."

   An Internet telephony end system can initiate as many simultaneous
   calls as it wishes as long as the network bandwidth and the CPU
   processing speed permit. A changed version of the service will be to
   put a limit on the number of simultaneous calls. The changed version
   can be handled by a LESS script below:


   <less>
     <UI:command command="call">
       <status-switch status-name="active-calls">
         <status equal="2">
           <terminate>
             <next>
               <alert message="Only 2 active calls allowed"/>
             </next>
           </terminate>
         </status>
       </status-switch>
     </UI:command>
   </less>



17.1.26 Off-net access (OFA)

   "This service feature allows a VPN user to access his or her VPN from
   any non-VPN station in the PSTN by using a personal identification
   number (PIN)."  This service should not be handled by using LESS
   scripts.

17.1.27 Off-net calling (ONC)

   "This service feature allows the user to call outside the VPN



Wu & Schulzrinne         Expires August 18, 2005               [Page 60]


Internet Draft                    LESS                    February, 2005


   network."

   This service is just a standard firewall traversal process, no
   service scripts required.

17.1.28 One number (ONE)

   "This feature allows a subscriber with two or more terminating lines
   in any number of locations to have a single telephone number. This
   allows businesses to advertise just one telephone number throughout
   their market area and to maintain their operations in different
   locations to maximize efficiency. The subscriber can specify which
   calls are to be terminated on which terminating lines based on the
   area the calls originate."

   This is a standard SIP proxy service, not handled by end systems.

17.1.29 Origin dependent routing (ODR)

   "This service feature enables the subscriber to accept or reject a
   call, and in case of acceptance, to route this call, according to the
   calling party geographical location. This service feature allows the
   served user to specify the destination installations according to the
   geographical area from which the call was originated."

   This service requires <Location:where-switch> to handle location-
   based call routing. A service script below can handle the service.
   For end systems, we use <redirect/> action to route calls. A proxy
   server is a more appropriate place to host the service, and use
   <proxy/> action to route calls.


   <less>
     <incoming>
       <address-switch field="origin">
         <address is="sip:bob@example.com">
           <Location:where-switch type="civil" principle="sip:bob@example.com">
             <Location:where country="USA" A1="New York"
               A3="New York" A6="West 120th" HNO="450" LOC="Room 563">
               <location url="sip:bob-office@example.com">
                 <redirect/>
               </location>
             </Location:where>
             <otherwise>
               <location url="sip:bob-mobile@example.com">
                 <redirect/>
               </location>
             </otherwise>



Wu & Schulzrinne         Expires August 18, 2005               [Page 61]


Internet Draft                    LESS                    February, 2005


           </Location:where-switch>
         </address>
       </address-switch>
     </incoming>
   </less>



17.1.30 Originating call screening (OCS)

   "This service feature allows the served user to bar calls from
   certain areas based on the District code of the area from which the
   call is originated."  This service can be handled by using address-
   switch.


   <less>
     <incoming>
       <address-switch field="destination" subfield="host">
         <address is="example.com">
           <reject status="reject"/>
         </address>
       </address-switch>
     </incoming>
   </less>



17.1.31 Originating user prompter (OUP)

   "This service feature allows a served user to provide an announcement
   which will request the caller to enter a digit or series of digits
   via a DTMF phone or generator. The collected digits will provide
   additional information that can be used for direct routing or as a
   security check during call processing."

   This service can be in a network server or a user agent. To enable a
   user agent to support this service, it requires the user agent to
   handle the interaction with remote users.

17.1.32 Personal numbering (PN)

   "This service feature supports a UPT number that uniquely identifies
   each UPT user and is used by the caller to reach that UPT user."
   Reaching a user through a personal address is accomplished simply by
   a proxy or redirection server which locates the user.

17.1.33 Premium charging (PRMC)



Wu & Schulzrinne         Expires August 18, 2005               [Page 62]


Internet Draft                    LESS                    February, 2005


   "This service feature allows for the pay back of part of the cost of
   a call to the called party."  This service is out of the scope of
   LESS.

17.1.34 Private numbering plan (PNP)

   "This service feature allows the subscriber to maintain a numbering
   plan within his private network, which is separate from the public
   numbering plan."  This service should usually be put in outbound
   proxy servers. If we provide such service in end systems, it would be
   similar to the Abbreviated dialing (ABD) service we introduced in
   Section 17.1.1.

17.1.35 Reverse charging (REVC)

   "This service feature allows the service subscriber (e.g. freephone)
   to accept to receive calls at its expense and be charged for the
   entire cost of the call."

   This service and the next service "Split charging" require a detailed
   VoIP charging schema and have the charging information available to
   users. Currently, LESS cannot handle this kind of service.  However,
   if call signaling messages can provide charging information, LESS
   scripts can perform call decisions, such as automatically rejecting a
   reverse charging calls unless it is from certain users, based on the
   charging information.

17.1.36 Split charging (SPLC)

   "This service feature allows for the separation of charges for a
   specific call, the calling and called party each being charged for
   one part of the call."  This service is similar to the previous
   service, LESS cannot handle the service.

17.1.37 Terminating call screening (TCS)

   "This service feature allows the user to screen calls based on the
   terminating telephone number dialed."  Below is a LESS script example
   handling this service.


   <less>
     <incoming>
       <address-switch field="destination" subfield="host">
         <address is="example.com">
           <reject status="reject"/>
         </address>
       </address-switch>



Wu & Schulzrinne         Expires August 18, 2005               [Page 63]


Internet Draft                    LESS                    February, 2005


     </incoming>
   </less>



17.1.38 Time dependent routing (TDR)

   "This services feature allows the served user to apply different call
   treatments based on the time of day, day of week, day of year,
   holiday, etc."  Usually, routing services should be put in network
   servers, but we can perform similar services for time dependent
   redirecting. This can be handled by LESS time-switch.


   <less>
     <incoming>
       <time-switch>
         <time dtstart="20040716T170000Z"
           duration="PT8H" freq="weekly" byday="MO">
           <location url="sip:bob@voicemail.com>
             <redirect/>
           </location>
         </time>
       </time-switch>
     </incoming>
   </less>



17.2 5ESS services

   In this section, we investigate the services introduced in "AT&T 5ESS
   Switch The Premier Solution, Feature Handbook" [17].  5ESS services
   including the following categories: BRCS (Business and Residence
   Custom Services) features, ISDN features (message and MBKS), Public
   Service features (emergency), Defense Switched Network Features, Toll
   and Tandem features, Interoffice Signaling and Control features,
   Operator Service Position System features, OA&M features. Among these
   categories, we are most interested in the BRCS features because many
   of BRCS features can be handled in end systems. For ISDN features, we
   will discuss the Message Services and the MBKS (Multibutton Key
   Telephone System).  For Public Service features, we will discuss the
   group alerting service.  We will not discuss the other service
   categories. We only list the services suitable for end systems.

17.2.1 Attendant call transfer (also known as Call splitting)

   "The service allows the attendant to flash and dial a code before



Wu & Schulzrinne         Expires August 18, 2005               [Page 64]


Internet Draft                    LESS                    February, 2005


   dialing the third leg of a 3-way call. This inhibits the automatic
   connecting of all the parties to allow private consultation between
   the attendant and the third leg of the call. If the code is not
   dialed, the automatic 3-way is formed."

   Since an Internet telephony end system usually can have multiple
   lines, it is easy to put one line on hold and initiate another call.
   However, to enable this service, an end system should be able to
   merge an active call and a held call into a 3-way call.

   This service is not a programmable service, a user will manually use
   a second line to initiate the second call, and manually instruct his
   user agent to merge two calls.

17.2.2 Attendant camp-on

   "This service allows incoming calls that the attendant attempts to
   complete to a busy station to be held waiting until the busy station
   becomes idle. The busy station receives a tone (indication of camp-
   on) each time the attendant attempts a completion. The call being
   transferred receives audible ringing, special tone followed by
   audible ringing, or optional silence, while waiting for the busy
   station to answer the call."  The following script can handle the
   service.


   <less>
     <incoming>
       <status-switch status-name="active-calls">
         <!-- We use 1+ to represent 1 or more active-calls -->
         <status greater="1">
           <Media:media source="wait.au" mode="sendonly">
             <accept>
               <next>
                 <Queue:enqueue queue="hold"/>
               </next>
             </accept>
           </Media:media>
         </status>
       </status-switch>
     </incoming>
     <Event:notification>
       <status-switch status-name="active-calls">
         <status is="0">
           <Queue:dequeue queue="hold" number="1">
             <success>
               <Media:media media="audio" input="microphone" mode="sendrecv">
                 <Media:mediaupdate/>



Wu & Schulzrinne         Expires August 18, 2005               [Page 65]


Internet Draft                    LESS                    February, 2005


               </Media:media>
             </success>
           </Queue:dequeue>
         </status>
       </status-switch>
     </Event:notification>
   </less>



17.2.3 Attendant conference

   "This service enables an attendant to initiate a conference call
   involving up to six parties (including attendant). The selection of a
   special conference attendant can be done from any station within the
   same customer group by dialing a particular access code."

   There are two ways to handle conferencing services in an end system,
   one is to have all conference participants to connect to a conference
   server (by REFER or third-party call control), the other is to use
   end system mixing. The first way is more scalable, but requires an
   external conference server. The second way requires an end system
   supporting mixing. The following scripts show both ways for a time-
   based conference initiation.


   <less>
     <!-- Use SIP REFER -->
     <timer dtstart="20040716T170000Z"
       duration="PT2H" freq="weekly" byday="MO">
       <lookup source="sip:bob@example.com
               sip:tom@example.com sip:alice@abc.com">
         <success>
           <call>
             <success>
               <location url="sip:conf@example.com">
                 <transfer/>
               </location>
             </success>
           </call>
         </success>
       </lookup>
     </timer>
   </less>



   The script will automatically send a call invitation to each URL in



Wu & Schulzrinne         Expires August 18, 2005               [Page 66]


Internet Draft                    LESS                    February, 2005


   the list, once a call established, the script will transfer the call
   to the conference server at sip:conf@example.com.


   <less>
     <!-- Use local mixing -->
     <timer dtstart="20040716T170000Z"
       duration="PT2H" freq="weekly" byday="MO">
       <sub ref="IRTdef"/>
       <lookup source="sip:bob@ex.com sip:tom@ex.com">
         <success>
           <call subject="Group meeting">
             <success>
               <merge subject="Group meeting"/>
             </success>
           </call>
         </success>
       </lookup>
     </timer>
   </less>



17.2.4 Authorization code

   "The codes allow the station user to input an assigned code to change
   the restrictions associated with the originating station to those
   associated with the assigned authorization code. Thus, unauthorized
   use of facilities is avoid."


   <less>
     <UI:command command="call">
       <address-switch field="destination">
         <address is="sip:conf123@example.com">
           <call>
             <success>
               <IM:sendmsg type="dtmf" digits="123456"/>
             </success>
           </call>
         </address>
       </address-switch>
     </UI:command>
   </less>



17.2.5 Automatic recall



Wu & Schulzrinne         Expires August 18, 2005               [Page 67]


Internet Draft                    LESS                    February, 2005


   "This service lets the customer automatically call the LOCDN (last
   outgoing call directory number) currently associated with the
   customer's station when both stations become idle. It is different
   from Automaticall Callback, which automatically places a call on
   LICDN (last incoming call directory number)."  The service script
   below shows how to program the service in LESS.


   <less>
     <UI:command command="call">
       <call>
         <failed status="486,603">
           <Queue:enqueue queue="callback">
             <next>
               <Event:subscribe/>
             </next>
           </Queue:enqueue>
         </failed>
       </call>
     </UI:command>
     <Event:notification>
       <Event:event-switch>
         <Event:event activity="normal">
           <!-- User {message.origin} to represent the sender of the notification-->
           <Queue:dequeue queue="callback" match="{message.origin}">
             <success>
               <call/>
             </success>
           </Queue:dequeue>
         </Event:event>
       </Event:event-switch>
     </Event:notification>
   </less>



17.2.6 Call forwarding busy line (CFBL)

   "This service permits calls attempting to terminate to a busy line to
   be redirected to another customer-specified line."  The following
   script can handle the service.


   <less>
     <incoming>
       <status-switch status-name="active-calls">
         <status greater="1">
           <location url="sip:phone2@example.com">



Wu & Schulzrinne         Expires August 18, 2005               [Page 68]


Internet Draft                    LESS                    February, 2005


             <redirect/>
           </location>
         </status>
       </status-switch>
     </incoming>
   </less>



17.2.7 Call forwarding busy line--incoming only

   "This service provides that only incoming DID calls are forwarded to
   the specified business group line on busy. Intragroup call attempts
   and attempts from private facilities to terminate to the busy line
   receive busy treatment."  This is in fact address-based call
   forwarding services.


   <less>
     <incoming>
       <status-switch status-name="active-calls">
         <status greater="1">
           <address-switch field="origin">
             <address isnot="sip:*@example.com">
               <location url="sip:phone2@example.com">
                 <redirect/>
               </location>
             </address>
           </address-switch>
         </status>
       </status-switch>
     </incoming>
   </less>



17.2.8 Call forwarding--don't answer

   "This service forwards incoming calls to a station when the called
   station is not answered after a customer-specified number of ringing
   cycles."  The script below can handle the service.


   <less>
     <incoming>
       <alert timeout="2000">
         <timeout>
           <location url="sip:phone2@example.com">



Wu & Schulzrinne         Expires August 18, 2005               [Page 69]


Internet Draft                    LESS                    February, 2005


             <redirect/>
           </location>
         </timeout>
       </alert>
     </incoming>
   </less>



17.2.9 Unconditional call forwarding

   "This service forwards all incoming calls to another telephone."  We
   can simply handle the service by using <redirect/> action.


   <less>
     <incoming>
       <location url="sip:bob@room123.example.com">
         <redirect/>
       </location>
     </incoming>
   </less>



17.2.10 Call hold

   "This service allows a station user to 'hold' a call in progress by
   flashing and then dialing the call hold code. This frees the line for
   originating another call, answering a waiting call, or returning to a
   held call."  In LESS, we use the action <Media:mediaupdate/> to
   change the media source for "hold" and "unhold" service.


     ...
     <!-- hold -->
     <Media:media media="audio" input="music.au" mode="sendonly">
       <Media:mediaupdate/>
     </Media:media>
     ...
     <!-- unhold -->
     <Media:media media="audio" input="microphone" mode="sendrecv">
       <Media:mediaupdate/>
     </Media:media>



17.2.11 Call transfer--individual--all calls



Wu & Schulzrinne         Expires August 18, 2005               [Page 70]


Internet Draft                    LESS                    February, 2005


   "This service allows a station user to transfer any established call
   to another station within or outside the PBX or business group
   without the assistance of the attendant. This is accomplished by
   flashing while on a stable 2-party call, dialing the desired party,
   and hanging up the telephone."  The <transfer/> action can handle
   this service.


   <less>
     <incoming>
       <media media="audio" input="transfer.au" mode="sendonly">
         <accept>
           <next>
             <location url="sip:bob@room123.example.com">
               <transfer>
                 <failed>
                   <media media="audio" input="failed.au" mode="sendonly">
                     <mediaupdate/>
                   </media>
                 </failed>
               </transfer>
             </location>
           </next>
         </accept>
       </media>
     </incoming>
   </less>



17.2.12 Call waiting and cancel call waiting

   Since an Internet telephony end system usually have multiple lines,
   users do not have to use flash button to switch calls. However, users
   should be able to control how many active calls an end device can
   handle.  The following script can help to configure the maximum
   number of calls.


   <less>
     <incoming>
       <status-switch status-name="active-calls">
         <status greater="3">
           <reject reason="busy"/>
         </status>
       </status-switch>
     </incoming>
   </less>



Wu & Schulzrinne         Expires August 18, 2005               [Page 71]


Internet Draft                    LESS                    February, 2005


17.2.13 Circle hunting

   "This service allows all lines in a multiline hunt group to be tested
   for busy, regardless of the point of entry into the group. When a
   call is made to a line in an MLHG, a regular hunt is performed
   starting at the terminal associated with the dialed number. It
   continues to the last terminal in the MLHG, then proceeds to the
   first terminal in the group and continues to hunt sequentially
   through the remaining lines in the group. Busy tone is returnedif the
   called terminal is reached without finding one that is idle."  This
   service is more suitable for a proxy server to handle. However, we
   can also handle it in an end system by using <transfer/> action.


   <less>
     <incoming>
       <media type="audio" input="wait.au" mode="sendonly">
         <accept>
           <next>
             <lookup source="sip:bob@ex.com sip:tom@ex.com"
                     order="sequential">
               <success>
                 <transfer>
                   <succeed>
                     <stop/>
                   </succeed>
                 </transfer>
               </success>
             </lookup>
           </next>
         </accept>
       </media>
     </incoming>
   </less>



17.2.14 Conference calling

   "The service allows a station user to establish a conference call
   involving up to five other parties without attendant assistance."
   This service is almost the same as the attendant conferencing service
   we discussed before, it requires an end system to support mixing, and
   to merge an incoming call to an existing conference call. We use
   <merge/> action to handle the merge.

17.2.15 Customer-changeable speed calling




Wu & Schulzrinne         Expires August 18, 2005               [Page 72]


Internet Draft                    LESS                    February, 2005


   "This service allows subscribers to assign their own Speed Calling
   codes directly and immediately from their own telephone by dialing a
   change Speed Calling list access code, an abbreviated code and a new
   telephone number. It is available for 1- and or 2-digit Speed Calling
   list owners."  In an end system, speed dialing modification should be
   done by editing service scripts from a local GUI. Below is a script
   for speed dialing handling.


   <less>
     <UI:command command="call">
       <address-switch field="destination" subfield="user">
         <address is="1">
           <location url="sip:bob@example.com">
             <call/>
           </location>
         </address>
       </address-switch>
     </UI:command>
   </less>



17.2.16 Direct connect

   "This service automatically places a call to a preselected called
   number when a station goes off-hook. This feature can be used for
   introffice and interoffice calls and does not affect termination to a
   line."  This service requires a specially configured UA. The service
   should not be handled by a service script.

17.2.17 Distinctive ringing

   This service applies a distinctive ringing to determine the source of
   an incoming call. The following script handles the service.


   <less>
     <incoming>
       <address-switch field="origin">
         <address is="sip:bob@example.com">
           <alert audio="bob.au"/>
         </address>
       </address-switch>
     </incoming>
   </less>





Wu & Schulzrinne         Expires August 18, 2005               [Page 73]


Internet Draft                    LESS                    February, 2005


17.2.18 Four- and eight-party

   "This service provides POTS for up to four or eight customers sharing
   the same line. It provides fully selective ringing or semiselective
   ringing for up to four customers and semiselective ringing for five
   to eight customers."  The following script plays distinctive ringing
   for different user sharing the same phone.


   <less>
     <incoming>
       <address-switch field="destination">
         <address is="sip:bob@example.com">
           <alert audio="bob.au"/>
         </address>
         <otherwise>
           <address-switch field="destination">
             <address is="sip:tom@example.com">
               <alert audio="tom.au"/>
             </address>
             <otherwise>
               <address-switch field="destination">
                 <address is="sip:mary@example.com">
                   <alert audio="mary.au"/>
                 </address>
               </address-switch>
             </otherwise>
           </address-switch>
         </otherwise>
       </address-switch>
     </incoming>
   </less>



17.2.19 Recorded telephone dictation

   "This service permits access to and control of customer-owned
   dictating equipment from a station in the customer group."  This
   service requires an end system to be able to record and playback a
   phone call.


   <less>
     <UI:command command="accept">
       <address-switch field="origin">
         <address is="sip:bob@example.com">
           <log record="true"/>



Wu & Schulzrinne         Expires August 18, 2005               [Page 74]


Internet Draft                    LESS                    February, 2005


         </address>
       </address-switch>
     </UI:command>
   </less>



17.2.20 Time-of-Day features

   "This kind of features can perform automatic actions based on time-
   of-day.  For example, Slumber Service (also known as Do Not Disturb)
   can temporarily prohibit an individual customer station or a
   functional group of individual stations from receiving calls. It is
   used in hospitals to restrict incoming calls to patients during the
   night or any designated period."  We can use LESS time-switch to
   handle the service.


   <less>
     <incoming>
       <time-switch>
         <time dtstart="20040716T230000Z"
           duration="PT8H" freq="daily">
           <reject reason="Do not disturb"/>
         </time>
       </time-switch>
     </incoming>
   </less>



17.2.21 Message services

   ISDN Message Services provides centralized and personalized call
   coverage of message answering capabilities. For Basic Message
   Service, calls to a message service client are redirected via one of
   the following features.

        Call forward -- busy line

        Call forward -- don't answer

        Call forward -- variable
        To provide the personalized call coverage, message service
        attendants can be equipped with special ISDN station sets that
        display call information on calls directed to the message
        service center. The following information is available for
        display: Call type, Originating party DN, Calling party DN. This



Wu & Schulzrinne         Expires August 18, 2005               [Page 75]


Internet Draft                    LESS                    February, 2005


        service requires an end system can identify a message service,
        e.g., a voicemail server. The following script forward a call to
        a voicemail server when the user is busy.


   <less>
     <incoming>
       <status-switch status-name="active-calls">
         <status greater="2">
           <location url="sip:bob@voicemail.example.com">
             <redirect/>
           </location>
         </status>
       </status-switch>
     </incoming>
   </less>



   There can be additional features for message services, for example,
   message waiting indicator, which can inform a client that he/she has
   message(s) waiting. The Message Waiting Indication Event Package for
   SIP [21] can provide required message information. An end system
   should be able to handle the event for the message waiting indicator
   service.


   <less>
     <Event:notification>
       <Event:event-switch>
         <Event:event package="message-summary" message-waiting="yes">
           <alert message="There are new messages for you" audio="mwi.au"/>
         </Event:event>
       </Event:event-switch>
     </Event:notification>
   </less>



17.2.22 Multibutton key telephone system (MBKS)

   "Feature Function Buttons on the MBKS set can be assigned to activate
   certain features. For example, a user can press the function button
   assigned to Automatic Callback on Busy when a busy number is dialed."
   We can bind a script to a specific button for this kind of services.

17.2.23 Group alerting




Wu & Schulzrinne         Expires August 18, 2005               [Page 76]


Internet Draft                    LESS                    February, 2005


   "This service permits the controller (or alerting party), upon
   dialing a code, to signal a preselected number of telephones
   simultaneously. One-way communication is established from the
   controller to all members of the group that responded to the signal."
   The script below can handle the service.


   <less>
     <UI:command command="call">
       <!-- define name="Alerting group"
            values="sip:security@abc.com sip:fire@abc.com" -->
       <address-switch field="destination">
         <address is="sip:alert@example.com">
           <lookup source="sip:security@abc.com sip:fire@abc.com">
             <media mode="sendonly">
               <call subject="Alert">
                 <success>
                   <merge subject="Alert"/>
                 </success>
               </call>
             </media>
           </lookup>
         </address>
       </address-switch>
     </UI:command>
   </less>



17.3 Services defined in CSTA Phase III

   In this section, we investigate the services in ECMA standard ECMA-
   269, "Services for Computer Supported Telecommunications Applications
   (CSTA) Phase III" [18]. The call model of CSTA services is to use
   protocol messages to control end systems. Many CSTA services are in
   fact simply actions in LESS. For example, Accept Call is a CSTA
   control service, but just an action, <accept/>, in LESS.

   CSTA Phase III categorizes services into System Services, Monitoring
   Services, Snapshot Services, Call Control Services and Events, Call
   Associated Features, Media Attachment Services and Events, Routing
   Services, Physical Device Features, Logical Device Features, Device
   Maintenance Events, I/O Services, Data Collection Services, Voice
   Services and Events, and Call Detail Record (CDR) Services.  Among
   these services, System Services are used to handle the relationship
   between switch functions and CSTA service functions and are out of
   the scope of LESS, Monitoring Services are like to define the DPs
   (Detection Points) in Intelligent Network (IN) and are also out of



Wu & Schulzrinne         Expires August 18, 2005               [Page 77]


Internet Draft                    LESS                    February, 2005


   the scope of LESS. Snapshot Services are used to send device
   information to switch functions, not suitable for LESS. The Routing
   Services are not end system services and are also not suitable for
   LESS. The Device Maintenance Events, I/O Services, and Data
   Collection Services are too low-level for end user oriented service
   programming, thus they are not suitable for LESS. We will discuss the
   other services below.

17.3.1 Accept call

   This service can be mapped to <alert/> action in LESS.

17.3.2 Alternate call

   This service places an existing active call on hold and then retrieve
   a previously held call. This service in fact involves several
   actions. We can use the <Media:mediaupdate/> action to put a call
   held/unheld and put held calls into a queue by enqueue action.

17.3.3 Answer call

   This service can be mapped to <accept/> action in LESS.

17.3.4 Call back call-related

   The Call Back Call-Related service allows a computing function to
   request that the calling device retry the call to the called device
   when the called device is in an appropriate state to accept the call.
   This is the same as the ACB service described in Section 17.2.5.

17.3.5 Call back message call-related

   The Call Back Message Call-Related service allows a computing
   function to request that the switching function leave a pre-defined
   message requesting that the called device call the calling device.
   For example, the called device may have been busy when called.


   <less>
     <incoming>
       <status-switch status-name="activity">
         <status is="on-the-phone">
           <alert message="Please call back {message.origin}">
             <next>
               <Queue:enqueue queue="callback"/>
             </next>
           </alert>
         </status>



Wu & Schulzrinne         Expires August 18, 2005               [Page 78]


Internet Draft                    LESS                    February, 2005


       </status-switch>
     </incoming>
   </less>



17.3.6 Camp on call

   The Camp On Call service allows the computing function to queue a
   call for a device (that typically is busy) until that device becomes
   available.  The script below can handle the service.


   <less>
     <incoming>
       <status-switch status-name="active-name">
         <status greater="1">
           <media type="audio" input="wait.au" mode="sendonly">
             <accept>
               <next>
                 <Queue:enqueue queue="callback"/>
               </next>
             </accept>
           </media>
         </status>
       </status-switch>
     </incoming>
   </less>



17.3.7 Clear call

   The Clear Call service releases all devices from an existing call.
   In the case of a conference call, this results in all devices in the
   conference call being released from the call. This service can be
   mapped to the <terminate/> action.

17.3.8 Clear connection

   The Clear Connection service releases a specific device from a call.
   In the case of a two-party call, this may result in the call being
   torn down. In the case of a conference call, this results in the
   specific party being removed from the conference.  For a two-party
   call, it is the same as Clear Call and can be represented by the
   <terminate/> action. For a conference call, we need to provide a
   parameter to the <terminate/> action to indicate which call leg
   should be disconnected. We can use a SIP url to identify the call



Wu & Schulzrinne         Expires August 18, 2005               [Page 79]


Internet Draft                    LESS                    February, 2005


   leg.

17.3.9 Conference call

   The Conference Call service provides a conference of an existing held
   call and another active call at a conferencing device. This is the
   same as the 3-way calling service. It requires LESS to have a
   <merge/> command to merge multiple two-party calls into a conference
   call.

17.3.10 Consultation call

   The Consultation Call service places an existing active call at a
   device on hold and initiates a new call from the same device. This is
   in fact two actions in LESS, using <Media:mediaupdate/> to put a call
   on hold and using <call/> to initiate a new call.

17.3.11 Deflect call

   The Deflect Call service allows the computing function to divert a
   call to another destination that may be inside or outside the
   switching sub-domain. This can be mapped to LESS <transfer/> action.

17.3.12 Dial digits

   The Dial Digits service allows the computing function to perform a
   dialing sequence that is associated with a call that has already been
   initiated. This service is used to send message out after a call
   invitation and we use <IM:sendmsg> to handle the action.

17.3.13 Directed pickup call

   The Directed Pickup Call service moves a specified call and connects
   it at a new specified destination.  This results in the connection
   being diverted to a new destination inside the switching sub-domain.
   This service should not be handled by end systems, but by an
   application server in the network.

17.3.14 Group pickup call

   The Group Pickup Call service moves a call that is a member of a
   specified or default pickup group to a new specified destination. The
   same as Directed Pickup Call, this service should be handled by an
   application server in the network.

17.3.15 Hold call

   The Hold Call service places a connected connection on hold at the



Wu & Schulzrinne         Expires August 18, 2005               [Page 80]


Internet Draft                    LESS                    February, 2005


   same device.  The <Media:mediaupdate/> action in LESS handles this
   service and <enqueue> action can put a call in a queue.

17.3.16 Intrude call

   The Intrude Call service adds the calling device to a call at a busy
   called device. Depending upon the switching function, the result will
   be that the calling device is either actively or silently
   participating in the called device's existing call or consulting with
   the called device with a new call. This can be handled by LESS
   <merge/> action with the <media> modifier set as mode="sendonly" for
   silently participating.

17.3.17 Join call

   The Join Call service allows a computing function to request, on
   behalf of a device, that the device be joined into an existing call.
   This can also be handled by LESS <merge/> action.

17.3.18 Make call

   The Make Call service allows the computing function to set up a call
   between a calling device and a called device. This can be handled by
   LESS <call/> action.

17.3.19 Make predictive call

   The Make Predictive Call service shall originate a call between two
   devices by first creating a connection to the called device. The
   service returns a positive acknowledgement that provides the
   connection at the called device.  Subsequent actions are taken
   depending upon the call progress and the actions requested. This
   service makes additional actions based on the result of <call/>
   action. For example,


   <less>
     <UI:command command="call">
       <call>
         <success>
           ....
         </success>
         <redirected>
           ...
         </redirected>
         <rejected>
           ...
         </rejected>



Wu & Schulzrinne         Expires August 18, 2005               [Page 81]


Internet Draft                    LESS                    February, 2005


       </call>
     </UI:command>
   </less>



17.3.20 Park call

   The Park Call service moves a specified call at a device to a
   specified (parked-to) destination. Two ways to handle this in an end
   system, the first is to transfer the call to a resource server, the
   second is to change the media input of the call as described in
   Section 17.1.10.

17.3.21 Reconnect call

   The Reconnect Call service will clear a specified connection at the
   reconnecting device and retrieve a specified held connection at the
   same device. This service can be handled by using the action
   <terminate/> to terminate an existing call and using
   <Media:mediaupdate/> and <dequeue> to retrieve a held call.

17.3.22 Retrieve call

   The Retrieve Call service connects a specified held connection.  This
   can be handled by <dequeue> and <Media:mediaupdate/> actions.

17.3.23 Send message

   The Send Message service allows the computing function to send a
   message to one or more devices. The message, composed of one or more
   MIME body parts, is included in the Send Message service request.
   This service can be used to send messages for many different types of
   applications (Instant Messaging, Email, Pager, and Short Message
   Service (SMS), etc). In LESS, we use <Message:sendmsg/> action to
   send a message, and <Email:send/> to send an email.

17.3.24 Single step conference call

   The Single Step Conference Call joins a new device into an existing
   call.  This service can be repeated to make n-device conference calls
   (subject to switching function limits). This can be handled by the
   action <merge/>.

17.3.25 Single step transfer call

   The Single Step Transfer Call service transfers an existing
   connection at a device to another device. This transfer is performed



Wu & Schulzrinne         Expires August 18, 2005               [Page 82]


Internet Draft                    LESS                    February, 2005


   in a single-step, that is the device doing the transfer does not have
   to place the existing call on hold before issuing the Single Step
   Transfer Call service.  This can be handled by the action
   <transfer/>.

17.3.26 Transfer call

   The Transfer Call service transfers a call held at a device to an
   active call at the same device. The held and active calls at the
   transferring device shall be merged into a new call. Also, the
   Connections of the held and active calls at the transferring device
   shall become Null and their ConnectionIDs shall be released (i.e.,
   the transferring device is no longer involved with the call). This
   service is in fact merge a held call and an existing call into a 3-
   way calling. It should be handled by LESS <merge> action.

17.4 New services

   One of the biggest advantage of Internet telephony is its ability to
   easily integrate other Internet services, such as presence
   information, email, and web. The integration can introduce many new
   services which are impossible for PSTN networks. These new services
   are not mentioned in Q.1211 or 5ESS service documents.

17.4.1 Email

   For email, we usually care about three things, receivers, subject,
   and content. We can use <location> or <lookup> modifier to specify
   receivers, use subject parameter in <email> action for subject
   information, and put content as the data of an <email> tag.  For
   example,


   <location url="mailto:bob@example.com">
     <Email:send subject="This is a test">
       We simply send this as a test for our LESS scripts.
     </Email:send>
   </location>



   There is no output of the email action.

17.4.2 Web

   There are two parameters for a web service action, one is the URI to
   visit, the other is the HTTP method. The URI parameter can be handled
   by the <location> and <lookup> modifiers. We use different action to



Wu & Schulzrinne         Expires August 18, 2005               [Page 83]


Internet Draft                    LESS                    February, 2005


   represent different HTTP methods. For example, <Web:get> represents
   HTTP GET method, <Web:post> represents HTTP POST method. Below is a
   service example,


   <location uri="http://www.example.com">
     <Web:get/>
   </location>



   The output of the a web action can be succeed, redirect, or failed.

17.4.3 Instant messaging

   People use instant messaging as a complementary communication method
   for voice call and email. We introduce two toplevel actions
   <IM::message-coming> for incoming message, <UI:command
   command="sendmsg"> for an outgoing message, and one action
   <IM::sendmsg> for sending a message out. For example,


   <less>
     <IM:message-coming>
       <address-switch field="origin">
         <address is="sip:bob@example.com">
           <location url="sip:bob@example.com">
             <IM:sendmsg>Hi, Bob</IM:sendmsg>
           </location>
         </address>
       </address-switch>
     </IM:message-coming>
   </less>



17.4.4 Event subscription and notification

   Below is an example for address-based event subscription handling.


   <Event:subscription>
     <address-switch field="origin">
       <address is="sip:bob@example.com">
         <Event:approve>
           <next>
             <Event:notify status="closed"/>
           </next>



Wu & Schulzrinne         Expires August 18, 2005               [Page 84]


Internet Draft                    LESS                    February, 2005


         </Event:approve>
       </address>
     </address-switch>
   </Event:subscription>



17.4.5 Event notification and event-based services

   Event notifications can trigger many new services. For example,


   <Event:notification>
     <address-switch field="origin">
       <address is="sip:bob@example.com">
         <Event:event-switch>
           <Event:event status="online">
             <location url="sip:bob@example.com">
               <call/>
             </location>
           </Event:event>
         </Event:event-switch>
       </address>
     </address-switch>
   </Event:notification>



17.4.6 Location-based services

   Location information gets more and more important in people's
   communications.  It is not only used for tracking, but also for
   guarding appropriate communication behaviors, triggering
   communication actions, and discovering available resources in a
   context.  Below is an example showing location-based call decision
   making.


   <incoming>
     <Location:where-switch>
       <Location:where placytype="movie-theatre">
         <alert style="vibrate"/>
       </Location:where>
     </Location:where-switch>
   </incoming>






Wu & Schulzrinne         Expires August 18, 2005               [Page 85]


Internet Draft                    LESS                    February, 2005


18 Feature Interaction Handling Algorithm for LESS Scripts

   For LESS-based services, due to the tree-like structure of LESS, we
   consider it simple and efficient to design an algorithm to merge
   multiple LESS decision trees into one.  After merging, for a specific
   trigger, there is only one active LESS script at a device. The
   merging algorithm is good for single component services. For service
   scripts on different devices, for example, the single user multiple
   components (SUMC) call control services the merging algorithm can
   only detect feature interactions, it cannot merge all the scripts
   into one to resolve the interactions. After merging, we will still
   keep the original scripts so users can modify them independently.
   This way, no conflicts in service execution because for a given
   trigger, it only needs to go through one decision tree to perform
   services.  In the mean time, we can still ensure the service
   modularity so users can create their services efficiently.

18.1 Tree merging algorithm

   The overall multi-script merging process is as below.


   set base-rule-set empty
   foreach LESS-tree {
    convert the LESS-tree into a rule set
    foreach rule in the rule set {
     normalize the rule
    }
    merge the normalized rule set into base-rule-set
   }
   convert base-rule-set into a decision tree



   The merging operation is in fact to merge every set of rules into
   base-rule-set, then convert the base-rule-set back to a decision
   tree. We will explain every step of the process below.

   A rule of a LESS decision tree is defined as which actions get
   executed under a certain condition for a specific trigger. Based on
   the LESS design principles we introduced in Section 2.1, the path
   from the root of a decision tree to each leaf node consists a
   decision rule.  We construct a rule as a composition of a trigger,
   the actions in accordance to the trigger, and a list of switch nodes
   that in the path from the root to the action node, we name the list
   of switch nodes rule path.  For example, for the script below, we can
   represent a decision rule as "{incoming,accept,{{string-
   switch,organization="ABC Inc."},{address-switch,



Wu & Schulzrinne         Expires August 18, 2005               [Page 86]


Internet Draft                    LESS                    February, 2005


   origin="sip:tom@abc.com"},{string-switch,subject="group meeting"}}}".


   <less>
     <incoming>
       <string-switch field="organization">
         <string is="ABC Inc.">
           <address-switch field="origin">
             <address is="sip:tom@abc.com">
               <string-switch field="subject">
                 <string is="group meeting">
                   <accept/>
                 </string>
               </string-switch>
             </address>
             <otherwise>
               <location url="sip:tom@voicemail.abc.com">
                 <redirect/>
               </location>
             </otherwise>
           </address-switch>
         </string>
       </string-switch>
     </incoming>
   </less>



   To facilitate rule merging, we need to normalize the rules generated
   from LESS decision trees. The normalization process sorts rule paths
   to a specific order, e.g., in the order of "address-switch", "time-
   switch", "status-switch", "string-switch", "priority-switch",
   "where-switch", and "language-switch". It will also merge the switch
   nodes with the same switch name into one node in a rule path.  For
   example, a normalized rule for the script above is "{incoming,
   accept, {address-switch, origin="sip:tom@abc.com"},
   {string-switch, subject="ABC group meeting", organization="ABC
   Inc."}}".  Because switches are independent of each other, normalized
   rules are functionally equal to original rules.  After normalization,
   we can follow the process below to detect feature interactions
   between two normalized rules.


   if (two rules have different triggers) {
    no rule conflict
   } elseif actions in two rules do not conflict {
    no rule conflict
   } elseif no overlap between rule path in two rules {



Wu & Schulzrinne         Expires August 18, 2005               [Page 87]


Internet Draft                    LESS                    February, 2005


    no rule conflict
   } else {
    two rules conflict with each other,
    return the rule path overlap and action conflict information
    prompt to the script owner to judge
   }



   During the process, we use the action conflict table defined in our
   technical report "Feature Interactions in Internet Telephony End
   Systems" [15]. to check whether two actions interact with each other
   or not. If actions in two rules conflict with each other, we need to
   check whether there are conditions matching both rule paths.  We name
   this kind of conditions the overlap between two rule paths.  We
   employ the following algorithm to get the overlap.


   set overlap-set empty
   foreach switch-node1 in rule-path1 {
    if there is a switch-node2 in rule-path2 has the same switch name {
     if the switch-overlap between switch-node1 and switch-node2 is empty {
      return empty overlap-set
     } else {
      insert the switch-overlap into overlap-set
     }
    } else {
     insert switch-node1 into overlap-set
    }
   }
   foreach switch-node2 in rule-path2 {
    if there is not a switch-node1 in rule-path1 has the same switch name {
     insert switch-node2 into overlap-set
    }
   }
   return overlap-set



   During the overlap handling process, different switch types have
   different overlap detection method. We will not detail the overlap
   handling for each switch type in this paper.

   Once we find the overlap-set and the conflicting actions, we can
   present the information to users to make decisions.  We can record
   the decision made by the user and build a normalized rule set without
   conflicts.




Wu & Schulzrinne         Expires August 18, 2005               [Page 88]


Internet Draft                    LESS                    February, 2005


   To convert a set of normalized rules back to a decision tree is
   straightforward. The pseudo code below shows the algorithm.


   set tree empty
   foreach rule in the merged rule set {
    foreach switch node in the rule path {
     //since each rule is normalized, the switch node appears in order
     go along the tree from the root
     if the switch node matches a tree node {
      go to the matched branch, and continue for the next switch node
     } else {
      if there is an unmatched branch {
       go to unmatched branch, continue the test
      } else {
       create an unmatched branch
       put the rest rule path (including current switch node)
       in the unmatched branch
      }}}}



19 The XML Schema for LESS and Commonly Used Extensions

19.1 XML Schema for LESS


























Wu & Schulzrinne         Expires August 18, 2005               [Page 89]


Internet Draft                    LESS                    February, 2005



   <?xml version="1.0" encoding="UTF-8"?>
   <!-- edited with XMLSPY v2004 rel. 2 U (http://www.xmlspy.com) by Xiaotao Wu (Columbia University Computer Science Dept) -->
   <xs:schema targetNamespace="urn:ietf:params:xml:ns:less" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="urn:ietf:params:xml:ns:less" elementFormDefault="qualified" attributeFormDefault="unqualified">
     <xs:complexType name="TriggerType" abstract="true">
       <xs:group ref="Node"/>
     </xs:complexType>
     <xs:element name="trigger" type="TriggerType"/>
     <xs:complexType name="ActionType" abstract="true" mixed="true">
       <xs:all>
         <xs:element name="next" minOccurs="0">
           <xs:complexType>
             <xs:group ref="Node"/>
           </xs:complexType>
         </xs:element>
       </xs:all>
     </xs:complexType>
     <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:complexType name="SubAction">
       <xs:attribute name="ref" type="xs:string" use="required"/>
     </xs:complexType>
     <xs:element name="sub" type="SubAction"/>
     <xs:complexType name="SubactionType">
       <xs:group ref="Node"/>
       <xs:attribute name="id" use="required"/>
     </xs:complexType>
     <xs:complexType name="AncillaryType"/>
     <xs:group name="Node">
       <xs:choice>
         <xs:element ref="switch" minOccurs="0"/>
         <xs:element ref="modifier" minOccurs="0" maxOccurs="unbounded"/>
         <xs:element ref="sub" minOccurs="0"/>
         <xs:element ref="action" minOccurs="0" maxOccurs="unbounded"/>
       </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:complexType name="LESSType">
       <xs:sequence>
         <xs:element name="ancillary" type="AncillaryType" minOccurs="0"/>



Wu & Schulzrinne         Expires August 18, 2005               [Page 90]


Internet Draft                    LESS                    February, 2005


         <xs:element name="subaction" type="SubactionType" minOccurs="0" maxOccurs="unbounded"/>
         <xs:element ref="trigger" 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="less" type="LESSType"/>
     <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">
             <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:complexType name="IncomingType">
       <xs:complexContent>
         <xs:extension base="TriggerType"/>
       </xs:complexContent>
     </xs:complexType>
     <xs:element name="incoming" type="IncomingType" substitutionGroup="trigger"/>
     <xs:complexType name="TimerType">
       <xs:complexContent>
         <xs:extension base="TriggerType">
           <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>



Wu & Schulzrinne         Expires August 18, 2005               [Page 91]


Internet Draft                    LESS                    February, 2005


           </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 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>



Wu & Schulzrinne         Expires August 18, 2005               [Page 92]


Internet Draft                    LESS                    February, 2005


           </xs:attribute>
           <xs:attribute name="bymonth" type="xs:string" use="optional">
             <xs:annotation>
               <xs:documentation>Comma-separated list of months of the year. 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:extension>
       </xs:complexContent>
     </xs:complexType>
     <xs:element name="timer" type="TimerType" substitutionGroup="trigger"/>
     <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>



Wu & Schulzrinne         Expires August 18, 2005               [Page 93]


Internet Draft                    LESS                    February, 2005


         <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"/>
     <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>



Wu & Schulzrinne         Expires August 18, 2005               [Page 94]


Internet Draft                    LESS                    February, 2005


     <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>
       </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>



Wu & Schulzrinne         Expires August 18, 2005               [Page 95]


Internet Draft                    LESS                    February, 2005


     </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>
     </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>



Wu & Schulzrinne         Expires August 18, 2005               [Page 96]


Internet Draft                    LESS                    February, 2005


         </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 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>



Wu & Schulzrinne         Expires August 18, 2005               [Page 97]


Internet Draft                    LESS                    February, 2005


         </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. 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">



Wu & Schulzrinne         Expires August 18, 2005               [Page 98]


Internet Draft                    LESS                    February, 2005


       <xs:annotation>
         <xs:documentation>Exactly one of the three attributes must appear </xs:documentation>
       </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:complexType name="UserStatusType">
       <xs:group ref="Node"/>
       <xs:attribute name="less" type="xs:integer"/>
       <xs:attribute name="greater" type="xs:integer"/>
       <xs:attribute name="equal" type="xs:integer"/>
       <xs:attribute name="is">
         <xs:simpleType>
           <xs:list itemType="xs:string"/>
         </xs:simpleType>
       </xs:attribute>
       <xs:attribute name="contains">
         <xs:simpleType>
           <xs:list itemType="xs:string"/>
         </xs:simpleType>
       </xs:attribute>
     </xs:complexType>
     <xs:complexType name="StatusSwitchType">
       <xs:complexContent>
         <xs:extension base="SwitchType">
           <xs:sequence>



Wu & Schulzrinne         Expires August 18, 2005               [Page 99]


Internet Draft                    LESS                    February, 2005


             <xs:element name="status" type="UserStatusType" minOccurs="0" maxOccurs="unbounded"/>
             <xs:sequence minOccurs="0">
               <xs:element name="not-present" type="NotPresentAction"/>
               <xs:element name="status" type="UserStatusType" minOccurs="0" maxOccurs="unbounded"/>
             </xs:sequence>
             <xs:element name="otherwise" type="OtherwiseAction" minOccurs="0"/>
           </xs:sequence>
           <xs:attribute name="uri" type="xs:anyURI" use="optional"/>
           <xs:attribute name="status-name">
             <xs:simpleType>
               <xs:restriction base="xs:NMTOKEN">
                 <xs:enumeration value="active-calls"/>
                 <xs:enumeration value="presence"/>
                 <xs:enumeration value="activity"/>
                 <xs:enumeration value="mood"/>
               </xs:restriction>
             </xs:simpleType>
           </xs:attribute>
         </xs:extension>
       </xs:complexContent>
     </xs:complexType>
     <xs:element name="status-switch" type="StatusSwitchType" 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:element name="location" type="LocationType" substitutionGroup="modifier"/>
     <xs:complexType name="LookupType">
       <xs:complexContent>
         <xs:extension base="ModifierType">
           <xs:all>
             <xs:element name="success" minOccurs="0">
               <xs:complexType>
                 <xs:group ref="Node"/>
               </xs:complexType>
             </xs:element>



Wu & Schulzrinne         Expires August 18, 2005              [Page 100]


Internet Draft                    LESS                    February, 2005


             <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="order" use="optional" default="parallel">
             <xs:simpleType>
               <xs:restriction base="xs:NMTOKEN">
                 <xs:enumeration value="parallel"/>
                 <xs:enumeration value="sequential"/>
               </xs:restriction>
             </xs:simpleType>
           </xs:attribute>
           <xs:attribute name="timeout" type="xs:positiveInteger" default="30"/>
           <xs:attribute name="clear" type="YesNoType" default="no"/>
         </xs:extension>
       </xs:complexContent>
     </xs:complexType>
     <xs:element name="lookup" type="LookupType" substitutionGroup="modifier"/>
     <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:element name="remove-location" type="RemoveLocationType" substitutionGroup="modifier"/>
     <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"/>
     <xs:complexType name="MailAction">
       <xs:complexContent>
         <xs:extension base="ActionType">



Wu & Schulzrinne         Expires August 18, 2005              [Page 101]


Internet Draft                    LESS                    February, 2005


           <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="WaitAction">
       <xs:complexContent>
         <xs:extension base="ActionType">
           <xs:group ref="Node"/>
           <xs:attribute name="duration" type="xs:duration" use="required"/>
         </xs:extension>
       </xs:complexContent>
     </xs:complexType>
     <xs:element name="wait" type="WaitAction" substitutionGroup="action"/>
     <xs:complexType name="AcceptActionType">
       <xs:complexContent>
         <xs:extension base="ActionType"/>
       </xs:complexContent>
     </xs:complexType>
     <xs:element name="accept" type="AcceptActionType" 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="AuthenticateAction">
       <xs:complexContent>
         <xs:extension base="ActionType">
           <xs:all>
             <xs:element name="success" minOccurs="0">
               <xs:complexType>
                 <xs:group ref="Node"/>
               </xs:complexType>
             </xs:element>
             <xs:element name="failure" minOccurs="0">



Wu & Schulzrinne         Expires August 18, 2005              [Page 102]


Internet Draft                    LESS                    February, 2005


               <xs:complexType>
                 <xs:group ref="Node"/>
               </xs:complexType>
             </xs:element>
           </xs:all>
           <xs:attribute name="method" use="optional" default="digest">
             <xs:simpleType>
               <xs:restriction base="xs:NMTOKEN">
                 <xs:enumeration value="digest"/>
                 <xs:enumeration value="basic"/>
               </xs:restriction>
             </xs:simpleType>
           </xs:attribute>
           <xs:attribute name="realm" type="xs:string"/>
           <xs:attribute name="user" type="xs:string"/>
           <xs:attribute name="target">
             <xs:simpleType>
               <xs:restriction base="xs:NMTOKEN">
                 <xs:enumeration value="remote"/>
                 <xs:enumeration value="local"/>
               </xs:restriction>
             </xs:simpleType>
           </xs:attribute>
         </xs:extension>
       </xs:complexContent>
     </xs:complexType>
     <xs:element name="authenticate" type="AuthenticateAction" substitutionGroup="action"/>
     <xs:complexType name="CallActionType">
       <xs:complexContent>
         <xs:extension base="ActionType">
           <xs:all>
             <xs:element name="accepted" minOccurs="0">
               <xs:complexType>
                 <xs:group ref="Node"/>
               </xs:complexType>
             </xs:element>
             <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>



Wu & Schulzrinne         Expires August 18, 2005              [Page 103]


Internet Draft                    LESS                    February, 2005


                 <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:all>
           <xs:attribute name="timeout" type="xs:positiveInteger"/>
         </xs:extension>
       </xs:complexContent>
     </xs:complexType>
     <xs:element name="call" type="CallActionType" substitutionGroup="action"/>
     <xs:complexType name="TerminateActionType">
       <xs:complexContent>
         <xs:extension base="ActionType">
           <xs:group ref="Node"/>
           <xs:attribute name="uri">
             <xs:simpleType>
               <xs:list itemType="xs:anyURI"/>
             </xs:simpleType>
           </xs:attribute>
           <xs:attribute name="subject">
             <xs:simpleType>
               <xs:list itemType="xs:string"/>
             </xs:simpleType>
           </xs:attribute>
           <xs:attribute name="calls">
             <xs:simpleType>
               <xs:restriction base="xs:NMTOKEN">
                 <xs:enumeration value="all"/>
                 <xs:enumeration value="last"/>
                 <xs:enumeration value="this"/>
               </xs:restriction>
             </xs:simpleType>
           </xs:attribute>
         </xs:extension>
       </xs:complexContent>
     </xs:complexType>
     <xs:element name="terminate" type="TerminateActionType" substitutionGroup="action"/>
   </xs:schema>


19.2 XML Schema for LESS Media Extension






Wu & Schulzrinne         Expires August 18, 2005              [Page 104]


Internet Draft                    LESS                    February, 2005



   <?xml version="1.0" encoding="UTF-8"?>
   <!-- edited with XMLSPY v2004 rel. 2 U (http://www.xmlspy.com) by Xiaotao Wu (Columbia University Computer Science Dept) -->
   <xs:schema targetNamespace="urn:ietf:params:xml:ns:less" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="urn:ietf:params:xml:ns:less" elementFormDefault="qualified" attributeFormDefault="unqualified">
     <xs:complexType name="TriggerType" abstract="true">
       <xs:group ref="Node"/>
     </xs:complexType>
     <xs:element name="trigger" type="TriggerType"/>
     <xs:complexType name="ActionType" abstract="true" mixed="true">
       <xs:all>
         <xs:element name="next" minOccurs="0">
           <xs:complexType>
             <xs:group ref="Node"/>
           </xs:complexType>
         </xs:element>
       </xs:all>
     </xs:complexType>
     <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:complexType name="SubAction">
       <xs:attribute name="ref" type="xs:string" use="required"/>
     </xs:complexType>
     <xs:element name="sub" type="SubAction"/>
     <xs:complexType name="SubactionType">
       <xs:group ref="Node"/>
       <xs:attribute name="id" use="required"/>
     </xs:complexType>
     <xs:complexType name="AncillaryType"/>
     <xs:group name="Node">
       <xs:choice>
         <xs:element ref="switch" minOccurs="0"/>
         <xs:element ref="modifier" minOccurs="0" maxOccurs="unbounded"/>
         <xs:element ref="sub" minOccurs="0"/>
         <xs:element ref="action" minOccurs="0" maxOccurs="unbounded"/>
       </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:complexType name="LESSType">
       <xs:sequence>
         <xs:element name="ancillary" type="AncillaryType" minOccurs="0"/>



Wu & Schulzrinne         Expires August 18, 2005              [Page 105]


Internet Draft                    LESS                    February, 2005


         <xs:element name="subaction" type="SubactionType" minOccurs="0" maxOccurs="unbounded"/>
         <xs:element ref="trigger" 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="less" type="LESSType"/>
     <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">
             <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:complexType name="IncomingType">
       <xs:complexContent>
         <xs:extension base="TriggerType"/>
       </xs:complexContent>
     </xs:complexType>
     <xs:element name="incoming" type="IncomingType" substitutionGroup="trigger"/>
     <xs:complexType name="TimerType">
       <xs:complexContent>
         <xs:extension base="TriggerType">
           <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>



Wu & Schulzrinne         Expires August 18, 2005              [Page 106]


Internet Draft                    LESS                    February, 2005


           </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 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>



Wu & Schulzrinne         Expires August 18, 2005              [Page 107]


Internet Draft                    LESS                    February, 2005


           </xs:attribute>
           <xs:attribute name="bymonth" type="xs:string" use="optional">
             <xs:annotation>
               <xs:documentation>Comma-separated list of months of the year. 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:extension>
       </xs:complexContent>
     </xs:complexType>
     <xs:element name="timer" type="TimerType" substitutionGroup="trigger"/>
     <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>



Wu & Schulzrinne         Expires August 18, 2005              [Page 108]


Internet Draft                    LESS                    February, 2005


         <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"/>
     <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>



Wu & Schulzrinne         Expires August 18, 2005              [Page 109]


Internet Draft                    LESS                    February, 2005


     <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>
       </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>



Wu & Schulzrinne         Expires August 18, 2005              [Page 110]


Internet Draft                    LESS                    February, 2005


     </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>
     </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>



Wu & Schulzrinne         Expires August 18, 2005              [Page 111]


Internet Draft                    LESS                    February, 2005


         </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 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>



Wu & Schulzrinne         Expires August 18, 2005              [Page 112]


Internet Draft                    LESS                    February, 2005


         </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. 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">



Wu & Schulzrinne         Expires August 18, 2005              [Page 113]


Internet Draft                    LESS                    February, 2005


       <xs:annotation>
         <xs:documentation>Exactly one of the three attributes must appear </xs:documentation>
       </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:complexType name="UserStatusType">
       <xs:group ref="Node"/>
       <xs:attribute name="less" type="xs:integer"/>
       <xs:attribute name="greater" type="xs:integer"/>
       <xs:attribute name="equal" type="xs:integer"/>
       <xs:attribute name="is">
         <xs:simpleType>
           <xs:list itemType="xs:string"/>
         </xs:simpleType>
       </xs:attribute>
       <xs:attribute name="contains">
         <xs:simpleType>
           <xs:list itemType="xs:string"/>
         </xs:simpleType>
       </xs:attribute>
     </xs:complexType>
     <xs:complexType name="StatusSwitchType">
       <xs:complexContent>
         <xs:extension base="SwitchType">
           <xs:sequence>



Wu & Schulzrinne         Expires August 18, 2005              [Page 114]


Internet Draft                    LESS                    February, 2005


             <xs:element name="status" type="UserStatusType" minOccurs="0" maxOccurs="unbounded"/>
             <xs:sequence minOccurs="0">
               <xs:element name="not-present" type="NotPresentAction"/>
               <xs:element name="status" type="UserStatusType" minOccurs="0" maxOccurs="unbounded"/>
             </xs:sequence>
             <xs:element name="otherwise" type="OtherwiseAction" minOccurs="0"/>
           </xs:sequence>
           <xs:attribute name="uri" type="xs:anyURI" use="optional"/>
           <xs:attribute name="status-name">
             <xs:simpleType>
               <xs:restriction base="xs:NMTOKEN">
                 <xs:enumeration value="active-calls"/>
                 <xs:enumeration value="presence"/>
                 <xs:enumeration value="activity"/>
                 <xs:enumeration value="mood"/>
               </xs:restriction>
             </xs:simpleType>
           </xs:attribute>
         </xs:extension>
       </xs:complexContent>
     </xs:complexType>
     <xs:element name="status-switch" type="StatusSwitchType" 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:element name="location" type="LocationType" substitutionGroup="modifier"/>
     <xs:complexType name="LookupType">
       <xs:complexContent>
         <xs:extension base="ModifierType">
           <xs:all>
             <xs:element name="success" minOccurs="0">
               <xs:complexType>
                 <xs:group ref="Node"/>
               </xs:complexType>
             </xs:element>



Wu & Schulzrinne         Expires August 18, 2005              [Page 115]


Internet Draft                    LESS                    February, 2005


             <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="order" use="optional" default="parallel">
             <xs:simpleType>
               <xs:restriction base="xs:NMTOKEN">
                 <xs:enumeration value="parallel"/>
                 <xs:enumeration value="sequential"/>
               </xs:restriction>
             </xs:simpleType>
           </xs:attribute>
           <xs:attribute name="timeout" type="xs:positiveInteger" default="30"/>
           <xs:attribute name="clear" type="YesNoType" default="no"/>
         </xs:extension>
       </xs:complexContent>
     </xs:complexType>
     <xs:element name="lookup" type="LookupType" substitutionGroup="modifier"/>
     <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:element name="remove-location" type="RemoveLocationType" substitutionGroup="modifier"/>
     <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"/>
     <xs:complexType name="MailAction">
       <xs:complexContent>
         <xs:extension base="ActionType">



Wu & Schulzrinne         Expires August 18, 2005              [Page 116]


Internet Draft                    LESS                    February, 2005


           <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="WaitAction">
       <xs:complexContent>
         <xs:extension base="ActionType">
           <xs:group ref="Node"/>
           <xs:attribute name="duration" type="xs:duration" use="required"/>
         </xs:extension>
       </xs:complexContent>
     </xs:complexType>
     <xs:element name="wait" type="WaitAction" substitutionGroup="action"/>
     <xs:complexType name="AcceptActionType">
       <xs:complexContent>
         <xs:extension base="ActionType"/>
       </xs:complexContent>
     </xs:complexType>
     <xs:element name="accept" type="AcceptActionType" 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="AuthenticateAction">
       <xs:complexContent>
         <xs:extension base="ActionType">
           <xs:all>
             <xs:element name="success" minOccurs="0">
               <xs:complexType>
                 <xs:group ref="Node"/>
               </xs:complexType>
             </xs:element>
             <xs:element name="failure" minOccurs="0">



Wu & Schulzrinne         Expires August 18, 2005              [Page 117]


Internet Draft                    LESS                    February, 2005


               <xs:complexType>
                 <xs:group ref="Node"/>
               </xs:complexType>
             </xs:element>
           </xs:all>
           <xs:attribute name="method" use="optional" default="digest">
             <xs:simpleType>
               <xs:restriction base="xs:NMTOKEN">
                 <xs:enumeration value="digest"/>
                 <xs:enumeration value="basic"/>
               </xs:restriction>
             </xs:simpleType>
           </xs:attribute>
           <xs:attribute name="realm" type="xs:string"/>
           <xs:attribute name="user" type="xs:string"/>
           <xs:attribute name="target">
             <xs:simpleType>
               <xs:restriction base="xs:NMTOKEN">
                 <xs:enumeration value="remote"/>
                 <xs:enumeration value="local"/>
               </xs:restriction>
             </xs:simpleType>
           </xs:attribute>
         </xs:extension>
       </xs:complexContent>
     </xs:complexType>
     <xs:element name="authenticate" type="AuthenticateAction" substitutionGroup="action"/>
     <xs:complexType name="CallActionType">
       <xs:complexContent>
         <xs:extension base="ActionType">
           <xs:all>
             <xs:element name="accepted" minOccurs="0">
               <xs:complexType>
                 <xs:group ref="Node"/>
               </xs:complexType>
             </xs:element>
             <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>



Wu & Schulzrinne         Expires August 18, 2005              [Page 118]


Internet Draft                    LESS                    February, 2005


                 <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:all>
           <xs:attribute name="timeout" type="xs:positiveInteger"/>
         </xs:extension>
       </xs:complexContent>
     </xs:complexType>
     <xs:element name="call" type="CallActionType" substitutionGroup="action"/>
     <xs:complexType name="TerminateActionType">
       <xs:complexContent>
         <xs:extension base="ActionType">
           <xs:group ref="Node"/>
           <xs:attribute name="uri">
             <xs:simpleType>
               <xs:list itemType="xs:anyURI"/>
             </xs:simpleType>
           </xs:attribute>
           <xs:attribute name="subject">
             <xs:simpleType>
               <xs:list itemType="xs:string"/>
             </xs:simpleType>
           </xs:attribute>
           <xs:attribute name="calls">
             <xs:simpleType>
               <xs:restriction base="xs:NMTOKEN">
                 <xs:enumeration value="all"/>
                 <xs:enumeration value="last"/>
                 <xs:enumeration value="this"/>
               </xs:restriction>
             </xs:simpleType>
           </xs:attribute>
         </xs:extension>
       </xs:complexContent>
     </xs:complexType>
     <xs:element name="terminate" type="TerminateActionType" substitutionGroup="action"/>
   </xs:schema>


19.3 XML Schema for LESS Mid-call handling Extension






Wu & Schulzrinne         Expires August 18, 2005              [Page 119]


Internet Draft                    LESS                    February, 2005



   <?xml version="1.0" encoding="UTF-8"?>
   <!-- edited with XMLSPY v2004 rel. 2 U (http://www.xmlspy.com) by Xiaotao Wu (Columbia University Computer Science Dept) -->
   <!-- edited with XML Spy v4.3 U (http://www.xmlspy.com) by Xiaotao Wu (Columbia University) -->
   <xs:schema targetNamespace="urn:ietf:params:xml:ns:less:midcall" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:LESS="urn:ietf:params:xml:ns:less" xmlns="urn:ietf:params:xml:ns:less:midcall">
     <xs:import namespace="urn:ietf:params:xml:ns:less" schemaLocation="less.xsd"/>
     <xs:complexType name="TransferActionType">
       <xs:complexContent>
         <xs:extension base="LESS:ActionType">
           <xs:all>
             <xs:element name="accepted" minOccurs="0">
               <xs:complexType>
                 <xs:group ref="Node"/>
               </xs:complexType>
             </xs:element>
             <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:all>
           <xs:attribute name="timeout" type="xs:positiveInteger" use="optional" default="20"/>
         </xs:extension>
       </xs:complexContent>
     </xs:complexType>
     <xs:element name="transfer" type="TransferActionType" substitutionGroup="LESS:action"/>
     <xs:complexType name="MergeAction">
       <xs:complexContent>
         <xs:extension base="LESS:ActionType">
           <xs:attribute name="uri">
             <xs:simpleType>
               <xs:list itemType="xs:anyURI"/>
             </xs:simpleType>



Wu & Schulzrinne         Expires August 18, 2005              [Page 120]


Internet Draft                    LESS                    February, 2005


           </xs:attribute>
           <xs:attribute name="subject">
             <xs:simpleType>
               <xs:list itemType="xs:string"/>
             </xs:simpleType>
           </xs:attribute>
         </xs:extension>
       </xs:complexContent>
     </xs:complexType>
     <xs:element name="merge" type="MergeAction" substitutionGroup="LESS:action"/>
   </xs:schema>


19.4 XML Schema for LESS User Interaction Extension





































Wu & Schulzrinne         Expires August 18, 2005              [Page 121]


Internet Draft                    LESS                    February, 2005



   <?xml version="1.0" encoding="UTF-8"?>
   <!-- edited with XMLSPY v2004 rel. 2 U (http://www.xmlspy.com) by Xiaotao Wu (Columbia University Computer Science Dept) -->
   <!-- edited with XML Spy v4.3 U (http://www.xmlspy.com) by Xiaotao Wu (Columbia University) -->
   <xs:schema targetNamespace="urn:ietf:params:xml:ns:less:ui" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:LESS="urn:ietf:params:xml:ns:less" xmlns="urn:ietf:params:xml:ns:less:ui">
     <xs:import namespace="urn:ietf:params:xml:ns:less" schemaLocation="less.xsd"/>
     <xs:complexType name="CommandType">
       <xs:complexContent>
         <xs:extension base="LESS:TriggerType">
           <xs:attribute name="command" type="xs:string" use="required"/>
         </xs:extension>
       </xs:complexContent>
     </xs:complexType>
     <xs:element name="command" type="CommandType" substitutionGroup="LESS:trigger"/>
     <xs:complexType name="AlertActionType">
       <xs:complexContent>
         <xs:extension base="LESS:ActionType">
           <xs:all>
             <xs:element name="timeout" minOccurs="0">
               <xs:complexType>
                 <xs:group ref="Node"/>
               </xs:complexType>
             </xs:element>
           </xs:all>
           <xs:attribute name="duration" type="xs:dateTime" use="optional"/>
           <xs:attribute name="priority" type="LESS:PriorityValues" use="optional"/>
           <xs:attribute name="message" type="xs:string" use="optional"/>
           <xs:attribute name="icon" type="xs:string" use="optional"/>
           <xs:attribute name="input" type="xs:anyURI" use="optional"/>
           <xs:attribute name="style" use="optional" default="sound">
             <xs:simpleType>
               <xs:list>
                 <xs:simpleType>
                   <xs:restriction base="xs:string">
                     <xs:enumeration value="viberate"/>
                     <xs:enumeration value="flash"/>
                     <xs:enumeration value="sound"/>
                     <xs:enumeration value="text"/>
                   </xs:restriction>
                 </xs:simpleType>
               </xs:list>
             </xs:simpleType>
           </xs:attribute>
         </xs:extension>
       </xs:complexContent>
     </xs:complexType>
     <xs:element name="alert" type="AlertActionType" substitutionGroup="LESS:action"/>
     <xs:complexType name="GetinputActionType">



Wu & Schulzrinne         Expires August 18, 2005              [Page 122]


Internet Draft                    LESS                    February, 2005


       <xs:complexContent>
         <xs:extension base="LESS:ActionType">
           <xs:all>
             <xs:element name="noanswer" minOccurs="0">
               <xs:complexType>
                 <xs:group ref="Node"/>
               </xs:complexType>
             </xs:element>
           </xs:all>
           <xs:attribute name="timeout" type="xs:duration" use="optional"/>
           <xs:attribute name="source" use="optional">
             <xs:simpleType>
               <xs:restriction base="xs:NMTOKEN">
                 <xs:enumeration value="screen"/>
                 <xs:enumeration value="audio"/>
               </xs:restriction>
             </xs:simpleType>
           </xs:attribute>
           <xs:attribute name="target" use="optional">
             <xs:simpleType>
               <xs:restriction base="xs:NMTOKEN">
                 <xs:enumeration value="remote"/>
                 <xs:enumeration value="local"/>
               </xs:restriction>
             </xs:simpleType>
           </xs:attribute>
         </xs:extension>
       </xs:complexContent>
     </xs:complexType>
     <xs:element name="getinput" type="GetinputActionType" substitutionGroup="LESS:action"/>
   </xs:schema>


19.5 XML Schema for LESS Instant Messaging Extension

















Wu & Schulzrinne         Expires August 18, 2005              [Page 123]


Internet Draft                    LESS                    February, 2005



   <?xml version="1.0" encoding="UTF-8"?>
   <!-- edited with XMLSPY v2004 rel. 2 U (http://www.xmlspy.com) by Xiaotao Wu (Columbia University Computer Science Dept) -->
   <!-- edited with XML Spy v4.3 U (http://www.xmlspy.com) by Xiaotao Wu (Columbia University) -->
   <xs:schema targetNamespace="urn:ietf:params:xml:ns:less:im" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:LESS="urn:ietf:params:xml:ns:less" xmlns="urn:ietf:params:xml:ns:less:im">
     <xs:import namespace="urn:ietf:params:xml:ns:less" schemaLocation="less.xsd"/>
     <xs:complexType name="MessageType">
       <xs:complexContent>
         <xs:extension base="LESS:TriggerType"/>
       </xs:complexContent>
     </xs:complexType>
     <xs:element name="message" type="MessageType" substitutionGroup="LESS:trigger"/>
     <xs:complexType name="SendmsgActionType">
       <xs:complexContent>
         <xs:extension base="LESS:ActionType">
           <xs:attribute name="type">
             <xs:simpleType>
               <xs:union>
                 <xs:simpleType>
                   <xs:restriction base="xs:NMTOKEN">
                     <xs:enumeration value="dtmf"/>
                     <xs:enumeration value="text"/>
                     <xs:enumeration value="image"/>
                     <xs:enumeration value="file"/>
                   </xs:restriction>
                 </xs:simpleType>
                 <xs:simpleType>
                   <xs:restriction base="xs:string"/>
                 </xs:simpleType>
               </xs:union>
             </xs:simpleType>
           </xs:attribute>
           <xs:attribute name="message" type="xs:string"/>
         </xs:extension>
       </xs:complexContent>
     </xs:complexType>
     <xs:element name="sendmsg" type="SendmsgActionType" substitutionGroup="LESS:action"/>
   </xs:schema>


19.6 XML Schema for LESS Event Handling Extension










Wu & Schulzrinne         Expires August 18, 2005              [Page 124]


Internet Draft                    LESS                    February, 2005



   <?xml version="1.0" encoding="UTF-8"?>
   <!-- edited with XMLSPY v2004 rel. 2 U (http://www.xmlspy.com) by Xiaotao Wu (Columbia University Computer Science Dept) -->
   <xs:schema targetNamespace="urn:ietf:params:xml:ns:less:event" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:LESS="urn:ietf:params:xml:ns:less" xmlns="urn:ietf:params:xml:ns:less:event" elementFormDefault="qualified" attributeFormDefault="unqualified">
     <xs:import namespace="urn:ietf:params:xml:ns:less" schemaLocation="less.xsd"/>
     <xs:element name="subscription" type="SubscriptionType" substitutionGroup="LESS:trigger"/>
     <xs:complexType name="SubscriptionType">
       <xs:complexContent>
         <xs:extension base="LESS:TriggerType"/>
       </xs:complexContent>
     </xs:complexType>
     <xs:element name="notification" type="NotificationType" substitutionGroup="LESS:trigger"/>
     <xs:complexType name="NotificationType">
       <xs:complexContent>
         <xs:extension base="LESS:TriggerType"/>
       </xs:complexContent>
     </xs:complexType>
     <xs:complexType name="EventType">
       <xs:group ref="LESS:Node"/>
       <xs:attribute name="package" use="required">
         <xs:simpleType>
           <xs:list itemType="xs:string"/>
         </xs:simpleType>
       </xs:attribute>
       <xs:attribute name="is" use="optional">
         <xs:simpleType>
           <xs:list itemType="xs:string"/>
         </xs:simpleType>
       </xs:attribute>
     </xs:complexType>
     <xs:complexType name="EventSwitchType">
       <xs:sequence>
         <xs:element name="event" type="EventType" minOccurs="0" maxOccurs="unbounded"/>
         <xs:sequence minOccurs="0">
           <xs:element name="not-present" type="LESS:NotPresentAction"/>
           <xs:element name="event" type="EventType" minOccurs="0" maxOccurs="unbounded"/>
         </xs:sequence>
         <xs:element name="otherwise" type="LESS:OtherwiseAction" minOccurs="0"/>
       </xs:sequence>
     </xs:complexType>
     <xs:element name="event-switch" type="EventSwitchType" substitutionGroup="LESS:switch"/>
     <xs:complexType name="ApproveActionType">
       <xs:complexContent>
         <xs:extension base="LESS:ActionType">
           <xs:attribute name="expires" type="xs:integer">
             <xs:annotation>
               <xs:documentation>Expiration in seconds</xs:documentation>
             </xs:annotation>



Wu & Schulzrinne         Expires August 18, 2005              [Page 125]


Internet Draft                    LESS                    February, 2005


           </xs:attribute>
         </xs:extension>
       </xs:complexContent>
     </xs:complexType>
     <xs:element name="approve" type="ApproveActionType" substitutionGroup="LESS:action"/>
     <xs:complexType name="DenyActionType">
       <xs:complexContent>
         <xs:extension base="LESS:ActionType">
           <xs:attribute name="reason" type="xs:string" use="optional"/>
         </xs:extension>
       </xs:complexContent>
     </xs:complexType>
     <xs:element name="deny" type="DenyActionType" substitutionGroup="LESS:action"/>
     <xs:complexType name="DeferActionType">
       <xs:complexContent>
         <xs:extension base="LESS:ActionType"/>
       </xs:complexContent>
     </xs:complexType>
     <xs:element name="defer" type="DeferActionType" substitutionGroup="LESS:action"/>
     <xs:complexType name="SubscribeActionType">
       <xs:complexContent>
         <xs:extension base="LESS:ActionType">
           <xs:all>
             <xs:element name="approved" minOccurs="0">
               <xs:complexType>
                 <xs:group ref="LESS:Node"/>
               </xs:complexType>
             </xs:element>
             <xs:element name="denied" minOccurs="0">
               <xs:complexType>
                 <xs:group ref="LESS:Node"/>
               </xs:complexType>
             </xs:element>
             <xs:element name="pending" minOccurs="0">
               <xs:complexType>
                 <xs:group ref="LESS:Node"/>
               </xs:complexType>
             </xs:element>
             <xs:element name="redirection" minOccurs="0">
               <xs:complexType>
                 <xs:group ref="LESS:Node"/>
               </xs:complexType>
             </xs:element>
             <xs:element name="noanswer" minOccurs="0">
               <xs:complexType>
                 <xs:group ref="LESS:Node"/>
               </xs:complexType>
             </xs:element>



Wu & Schulzrinne         Expires August 18, 2005              [Page 126]


Internet Draft                    LESS                    February, 2005


             <xs:element name="failure" minOccurs="0">
               <xs:complexType>
                 <xs:group ref="LESS:Node"/>
               </xs:complexType>
             </xs:element>
           </xs:all>
           <xs:attribute name="timeout" type="xs:positiveInteger" use="optional" default="20"/>
           <xs:attribute name="expires" type="xs:integer">
             <xs:annotation>
               <xs:documentation>Expiration in seconds</xs:documentation>
             </xs:annotation>
           </xs:attribute>
           <xs:attribute name="package" type="xs:string" use="required"/>
           <xs:attribute name="content" type="xs:string" use="optional"/>
         </xs:extension>
       </xs:complexContent>
     </xs:complexType>
     <xs:element name="subscribe" type="SubscribeActionType" substitutionGroup="LESS:action"/>
     <xs:complexType name="NotifyActionType">
       <xs:complexContent>
         <xs:extension base="LESS:ActionType">
           <xs:all>
             <xs:element name="accepted" minOccurs="0">
               <xs:complexType>
                 <xs:group ref="LESS:Node"/>
               </xs:complexType>
             </xs:element>
             <xs:element name="redirection" minOccurs="0">
               <xs:complexType>
                 <xs:group ref="LESS:Node"/>
               </xs:complexType>
             </xs:element>
             <xs:element name="noanswer" minOccurs="0">
               <xs:complexType>
                 <xs:group ref="LESS:Node"/>
               </xs:complexType>
             </xs:element>
             <xs:element name="failure" minOccurs="0">
               <xs:complexType>
                 <xs:group ref="LESS:Node"/>
               </xs:complexType>
             </xs:element>
           </xs:all>
           <xs:attribute name="timeout" type="xs:positiveInteger" use="optional" default="20"/>
           <xs:attribute name="package" type="xs:string" use="required"/>
           <xs:attribute name="event" type="xs:string" use="required"/>
           <xs:anyAttribute namespace="##any" processContents="lax"/>
         </xs:extension>



Wu & Schulzrinne         Expires August 18, 2005              [Page 127]


Internet Draft                    LESS                    February, 2005


       </xs:complexContent>
     </xs:complexType>
     <xs:element name="notify" type="NotifyActionType" substitutionGroup="LESS:action"/>
   </xs:schema>


19.7 XML Schema for LESS Location-based Services Extension












































Wu & Schulzrinne         Expires August 18, 2005              [Page 128]


Internet Draft                    LESS                    February, 2005



   <?xml version="1.0" encoding="UTF-8"?>
   <!-- edited with XMLSPY v2004 rel. 2 U (http://www.xmlspy.com) by Xiaotao Wu (Columbia University Computer Science Dept) -->
   <xs:schema targetNamespace="urn:ietf:params:xml:ns:less:location" xmlns="urn:ietf:params:xml:ns:less:location" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:LESS="urn:ietf:params:xml:ns:less" elementFormDefault="qualified" attributeFormDefault="unqualified">
     <xs:import namespace="urn:ietf:params:xml:ns:less" schemaLocation="less.xsd"/>
     <xs:complexType name="WhereSwitchType">
       <xs:sequence>
         <xs:element name="where" type="WhereType" minOccurs="0" maxOccurs="unbounded"/>
         <xs:sequence minOccurs="0">
           <xs:element name="not-present" type="LESS:NotPresentAction"/>
           <xs:element name="where" type="WhereType" minOccurs="0" maxOccurs="unbounded"/>
         </xs:sequence>
         <xs:element name="otherwise" type="LESS:OtherwiseAction" minOccurs="0"/>
       </xs:sequence>
       <xs:attribute name="type" use="required">
         <xs:simpleType>
           <xs:restriction base="xs:string">
             <xs:enumeration value="geospatial"/>
             <xs:enumeration value="civil"/>
           </xs:restriction>
         </xs:simpleType>
       </xs:attribute>
       <xs:attribute name="uri" type="xs:anyURI"/>
     </xs:complexType>
     <xs:element name="where-switch" type="WhereSwitchType" substitutionGroup="LESS:switch"/>
     <xs:complexType name="WhereType">
       <xs:group ref="LESS:Node"/>
       <xs:attribute name="changed" type="xs:boolean" default="true"/>
       <xs:attribute name="longitude" type="xs:string">
         <xs:annotation>
           <xs:documentation>Valid only if type is geospatial</xs:documentation>
         </xs:annotation>
       </xs:attribute>
       <xs:attribute name="latitude" type="xs:string">
         <xs:annotation>
           <xs:documentation>Valid only if type is geospatial</xs:documentation>
         </xs:annotation>
       </xs:attribute>
       <xs:attribute name="altitude" type="xs:string">
         <xs:annotation>
           <xs:documentation>Valid only if type is geospatial</xs:documentation>
         </xs:annotation>
       </xs:attribute>
       <xs:attribute name="A1" type="xs:string">
         <xs:annotation>
           <xs:documentation>Valid only if type is civil</xs:documentation>
         </xs:annotation>
       </xs:attribute>



Wu & Schulzrinne         Expires August 18, 2005              [Page 129]


Internet Draft                    LESS                    February, 2005


       <xs:attribute name="A2" type="xs:string">
         <xs:annotation>
           <xs:documentation>Valid only if type is civil</xs:documentation>
         </xs:annotation>
       </xs:attribute>
       <xs:attribute name="A3" type="xs:string">
         <xs:annotation>
           <xs:documentation>Valid only if type is civil</xs:documentation>
         </xs:annotation>
       </xs:attribute>
       <xs:attribute name="A4" type="xs:string">
         <xs:annotation>
           <xs:documentation>Valid only if type is civil</xs:documentation>
         </xs:annotation>
       </xs:attribute>
       <xs:attribute name="A5" type="xs:string">
         <xs:annotation>
           <xs:documentation>Valid only if type is civil</xs:documentation>
         </xs:annotation>
       </xs:attribute>
       <xs:attribute name="A6" type="xs:string">
         <xs:annotation>
           <xs:documentation>Valid only if type is civil</xs:documentation>
         </xs:annotation>
       </xs:attribute>
       <xs:attribute name="PRD" type="xs:string">
         <xs:annotation>
           <xs:documentation>Valid only if type is civil</xs:documentation>
         </xs:annotation>
       </xs:attribute>
       <xs:attribute name="POD" type="xs:string">
         <xs:annotation>
           <xs:documentation>Valid only if type is civil</xs:documentation>
         </xs:annotation>
       </xs:attribute>
       <xs:attribute name="STS" type="xs:string">
         <xs:annotation>
           <xs:documentation>Valid only if type is civil</xs:documentation>
         </xs:annotation>
       </xs:attribute>
       <xs:attribute name="HNO" type="xs:string">
         <xs:annotation>
           <xs:documentation>Valid only if type is civil</xs:documentation>
         </xs:annotation>
       </xs:attribute>
       <xs:attribute name="HNS" type="xs:string">
         <xs:annotation>
           <xs:documentation>Valid only if type is civil</xs:documentation>



Wu & Schulzrinne         Expires August 18, 2005              [Page 130]


Internet Draft                    LESS                    February, 2005


         </xs:annotation>
       </xs:attribute>
       <xs:attribute name="LMK" type="xs:string">
         <xs:annotation>
           <xs:documentation>Valid only if type is civil</xs:documentation>
         </xs:annotation>
       </xs:attribute>
       <xs:attribute name="LOC" type="xs:string">
         <xs:annotation>
           <xs:documentation>Valid only if type is civil</xs:documentation>
         </xs:annotation>
       </xs:attribute>
       <xs:attribute name="FLR" type="xs:string">
         <xs:annotation>
           <xs:documentation>Valid only if type is civil</xs:documentation>
         </xs:annotation>
       </xs:attribute>
       <xs:attribute name="NAM" type="xs:string">
         <xs:annotation>
           <xs:documentation>Valid only if type is civil</xs:documentation>
         </xs:annotation>
       </xs:attribute>
       <xs:attribute name="PC" type="xs:string">
         <xs:annotation>
           <xs:documentation>Valid only if type is civil</xs:documentation>
         </xs:annotation>
       </xs:attribute>
       <xs:attribute name="distance">
         <xs:annotation>
           <xs:documentation>Valid only if geospatial or civil location presented</xs:documentation>
         </xs:annotation>
         <xs:simpleType>
           <xs:restriction base="xs:decimal">
             <xs:minInclusive value="0"/>
           </xs:restriction>
         </xs:simpleType>
       </xs:attribute>
       <xs:attribute name="condition" default="at">
         <xs:annotation>
           <xs:documentation>Valid only if distance presented</xs:documentation>
         </xs:annotation>
         <xs:simpleType>
           <xs:restriction base="xs:string">
             <xs:enumeration value="in"/>
             <xs:enumeration value="out"/>
             <xs:enumeration value="at"/>
           </xs:restriction>
         </xs:simpleType>



Wu & Schulzrinne         Expires August 18, 2005              [Page 131]


Internet Draft                    LESS                    February, 2005


       </xs:attribute>
       <xs:attribute name="unit" default="m">
         <xs:annotation>
           <xs:documentation>Valid only if distance presented</xs:documentation>
         </xs:annotation>
         <xs:simpleType>
           <xs:restriction base="xs:string">
             <xs:enumeration value="m"/>
             <xs:enumeration value="km"/>
             <xs:enumeration value="mi"/>
             <xs:enumeration value="in"/>
             <xs:enumeration value="ft"/>
             <xs:enumeration value="yd"/>
             <xs:enumeration value="naut mi"/>
           </xs:restriction>
         </xs:simpleType>
       </xs:attribute>
       <xs:attribute name="direction">
         <xs:annotation>
           <xs:documentation>Valid only if geospatial or civil location presented</xs:documentation>
         </xs:annotation>
         <xs:simpleType>
           <xs:restriction base="xs:string">
             <xs:enumeration value="south"/>
             <xs:enumeration value="north"/>
             <xs:enumeration value="east"/>
             <xs:enumeration value="west"/>
             <xs:enumeration value="above"/>
             <xs:enumeration value="below"/>
           </xs:restriction>
         </xs:simpleType>
       </xs:attribute>
       <xs:anyAttribute namespace="##other" processContents="lax"/>
     </xs:complexType>
     <xs:complexType name="WhereRelationSwitchType">
       <xs:sequence>
         <xs:element name="where-relation" type="WhereRelationType" minOccurs="0" maxOccurs="unbounded"/>
         <xs:sequence minOccurs="0">
           <xs:element name="not-present" type="LESS:NotPresentAction"/>
           <xs:element name="where-relation" type="WhereRelationType" minOccurs="0" maxOccurs="unbounded"/>
         </xs:sequence>
         <xs:element name="otherwise" type="LESS:OtherwiseAction" minOccurs="0"/>
       </xs:sequence>
       <xs:attribute name="uri1" type="xs:anyURI" use="required"/>
       <xs:attribute name="uri2" type="xs:anyURI"/>
     </xs:complexType>
     <xs:element name="where-relation-switch" type="WhereRelationSwitchType" substitutionGroup="LESS:switch"/>
     <xs:simpleType name="WhereAttributes">



Wu & Schulzrinne         Expires August 18, 2005              [Page 132]


Internet Draft                    LESS                    February, 2005


       <xs:restriction base="xs:string">
         <xs:enumeration value="latitude"/>
         <xs:enumeration value="longitude"/>
         <xs:enumeration value="altitude"/>
         <xs:enumeration value="country"/>
         <xs:enumeration value="A1"/>
         <xs:enumeration value="A2"/>
         <xs:enumeration value="A3"/>
         <xs:enumeration value="A4"/>
         <xs:enumeration value="A5"/>
         <xs:enumeration value="A6"/>
         <xs:enumeration value="PRD"/>
         <xs:enumeration value="POD"/>
         <xs:enumeration value="STS"/>
         <xs:enumeration value="HNO"/>
         <xs:enumeration value="HNS"/>
         <xs:enumeration value="LMK"/>
         <xs:enumeration value="LOC"/>
         <xs:enumeration value="FLR"/>
         <xs:enumeration value="NAM"/>
         <xs:enumeration value="PC"/>
       </xs:restriction>
     </xs:simpleType>
     <xs:complexType name="WhereRelationType">
       <xs:group ref="LESS:Node"/>
       <xs:attribute name="distance">
         <xs:annotation>
           <xs:documentation>Valid only if geospatial or civil location presented</xs:documentation>
         </xs:annotation>
         <xs:simpleType>
           <xs:restriction base="xs:decimal">
             <xs:minInclusive value="0"/>
           </xs:restriction>
         </xs:simpleType>
       </xs:attribute>
       <xs:attribute name="condition" default="at">
         <xs:annotation>
           <xs:documentation>Valid only if distance presented</xs:documentation>
         </xs:annotation>
         <xs:simpleType>
           <xs:restriction base="xs:string">
             <xs:enumeration value="in"/>
             <xs:enumeration value="out"/>
             <xs:enumeration value="at"/>
           </xs:restriction>
         </xs:simpleType>
       </xs:attribute>
       <xs:attribute name="unit" default="m">



Wu & Schulzrinne         Expires August 18, 2005              [Page 133]


Internet Draft                    LESS                    February, 2005


         <xs:annotation>
           <xs:documentation>Valid only if distance presented</xs:documentation>
         </xs:annotation>
         <xs:simpleType>
           <xs:restriction base="xs:string">
             <xs:enumeration value="m"/>
             <xs:enumeration value="km"/>
             <xs:enumeration value="mi"/>
             <xs:enumeration value="in"/>
             <xs:enumeration value="ft"/>
             <xs:enumeration value="yd"/>
             <xs:enumeration value="naut mi"/>
           </xs:restriction>
         </xs:simpleType>
       </xs:attribute>
       <xs:attribute name="direction">
         <xs:annotation>
           <xs:documentation>Valid only if geospatial or civil location presented</xs:documentation>
         </xs:annotation>
         <xs:simpleType>
           <xs:restriction base="xs:string">
             <xs:enumeration value="south"/>
             <xs:enumeration value="north"/>
             <xs:enumeration value="east"/>
             <xs:enumeration value="west"/>
             <xs:enumeration value="above"/>
             <xs:enumeration value="below"/>
           </xs:restriction>
         </xs:simpleType>
       </xs:attribute>
       <xs:attribute name="same">
         <xs:simpleType>
           <xs:list itemType="WhereAttributes"/>
         </xs:simpleType>
       </xs:attribute>
       <xs:attribute name="difference">
         <xs:simpleType>
           <xs:list itemType="WhereAttributes"/>
         </xs:simpleType>
       </xs:attribute>
       <xs:anyAttribute namespace="##other" processContents="lax"/>
     </xs:complexType>
   </xs:schema>


19.8 XML Schema for LESS Queue Handling Extension





Wu & Schulzrinne         Expires August 18, 2005              [Page 134]


Internet Draft                    LESS                    February, 2005



   <?xml version="1.0" encoding="UTF-8"?>
   <!-- edited with XMLSPY v2004 rel. 2 U (http://www.xmlspy.com) by Xiaotao Wu (Columbia University Computer Science Dept) -->
   <xs:schema targetNamespace="urn:ietf:params:xml:ns:less:queue" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:LESS="urn:ietf:params:xml:ns:less" xmlns="urn:ietf:params:xml:ns:less:queue" elementFormDefault="qualified" attributeFormDefault="unqualified">
     <xs:import namespace="urn:ietf:params:xml:ns:less" schemaLocation="less.xsd"/>
     <xs:simpleType name="QueueName">
       <xs:union>
         <xs:simpleType>
           <xs:restriction base="xs:NMTOKEN">
             <xs:enumeration value="callback"/>
             <xs:enumeration value="hold"/>
           </xs:restriction>
         </xs:simpleType>
         <xs:simpleType>
           <xs:restriction base="xs:string"/>
         </xs:simpleType>
       </xs:union>
     </xs:simpleType>
     <xs:complexType name="EnqueueActionType">
       <xs:complexContent>
         <xs:extension base="LESS:ActionType">
           <xs:all>
             <xs:element name="full" minOccurs="0">
               <xs:complexType>
                 <xs:group ref="Node"/>
               </xs:complexType>
             </xs:element>
           </xs:all>
           <xs:attribute name="queue" type="QueueName" use="optional"/>
           <xs:attribute name="maxlen" type="xs:positiveInteger" use="optional"/>
         </xs:extension>
       </xs:complexContent>
     </xs:complexType>
     <xs:element name="enqueue" type="EnqueueActionType" substitutionGroup="LESS:action"/>
     <xs:complexType name="DequeueActionType">
       <xs:complexContent>
         <xs:extension base="LESS:ActionType">
           <xs:all>
             <xs:element name="success" 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>



Wu & Schulzrinne         Expires August 18, 2005              [Page 135]


Internet Draft                    LESS                    February, 2005


           </xs:all>
           <xs:attribute name="queue" type="QueueName" use="optional"/>
         </xs:extension>
       </xs:complexContent>
     </xs:complexType>
     <xs:element name="dequeue" type="DequeueActionType" substitutionGroup="LESS:action"/>
   </xs:schema>


20 References

20.1 Normative References

   [1] S. Bradner, "Key words for use in RFCs to indicate requirement
   levels," RFC 2119, Internet Engineering Task Force, Mar. 1997.

   [2] J. Lennox, X. Wu, and H. Schulzrinne, "Call processing language
   (CPL): a language for user control of Internet telephony services,"
   rfc, Internet Engineering Task Force, Oct. 2004.  Standard.

   [3] T. Bray, J. Paoli, and C. M. Sperberg-McQueen, "Extensible markup
   language (XML) 1.0 (second edition)," W3C Recommendation REC-xml-
   20001006, World Wide Web Consortium (W3C), Oct. 2000.  Available at
   http://www.w3.org/XML/.

   [4] D. C. Fallside, "XML schema part 0: Primer," W3C Candidate
   Recommendation CR-xmlschema-0-20001024, World Wide Web Consortium
   (W3C), Oct. 2000.  Available at http://www.w3.org/TR/xmlschema-0/.

   [5] H. Schulzrinne, "RPID -- rich presence information data format,"
   Internet Draft draft-ietf-simple-rpid-01, Internet Engineering Task
   Force, Feb. 2004.  Work in progress.

   [6] R. Moats, "URN syntax," RFC 2141, Internet Engineering Task
   Force, May 1997.

   [7] R. Moats, "A URN namespace for IETF documents," RFC 2648,
   Internet Engineering Task Force, Aug. 1999.

   [8] R. Mahy, "The ietf xml registry," RFC 3688, Internet Engineering
   Task Force, Jan. 2004.

   [9] M. Murata, S. S. Laurent, and D. Kohn, "XML media types," RFC
   3023, Internet Engineering Task Force, Jan. 2001.

   [10] T. Bray, D. Hollander, and A. Layman, "Namespaces in XML," W3C
   Recommendation REC-xml-names-19900114, World Wide Web Consortium
   (W3C), Jan. 1999.  Available at http://www.w3.org/TR/REC-xml-names/.



Wu & Schulzrinne         Expires August 18, 2005              [Page 136]


Internet Draft                    LESS                    February, 2005


20.2 Informative References

   [11] X. Wu and H. Schulzrinne, "Where should services reside in
   Internet telephony systems?," in IP Telecom Services Workshop,
   (Atlanta, Georgia), Sept. 2000.

   [12] X. Wu and H. Schulzrinne, "Programmable end system services
   using SIP," in Conference Record of the International Conference on
   Communications (ICC), May 2003.

   [13] R. Stansifer, Study of Programming Languages, vol. 1.  Florida
   Institute of Technology: Prentice Hall, 1994.

   [14] A. D. Falkoff and K. E. Iverson, "The design of APL," SIGAPL APL
   Quote Quad, vol. 6, no. 1, pp. 5--14, 1975.

   [15] X. Wu and H. Schulzrinne, "Feature interactions in Internet
   telephony end systems," tech. rep., Department of Computer Science,
   Columbia University, Jan. 2004.

   [16] International Telecommunication Union, "General recommendations
   on telephone switching and signaling -- intelligent network:
   Introduction to intelligent network capability set 1," Recommendation
   Q.1211, International Telecommunication Union, Geneva, Switzerland,
   Mar. 1993.

   [17] AT&T, 5ESS Switch, The Premier Solution, Feature Handbook, Issue
   4.  AT&T, Sept. 1987.

   [18] E. International, "Services for computer supported
   telecommunications applications (CSTA) Phase III," Standard 269, Ecma
   International, June 2004.

   [19] J. Lennox, H. Schulzrinne, and T. L. Porta, "Implementing
   intelligent network services with the session initiation protocol,"
   Technical Report CUCS-002-99, Columbia University, New York, New
   York, Jan. 1999.

   [20] VoiceXML Forum, "Voicexml home page." http://www.voicexml.org/.

   [21] R. Mahy, "A message summary and message waiting indication event
   package for the session initiation protocol (SIP)," RFC 3842,
   Internet Engineering Task Force, Aug. 2004.

Authors' Addresses

   Xiaotao Wu
   Dept. of Computer Science



Wu & Schulzrinne         Expires August 18, 2005              [Page 137]


Internet Draft                    LESS                    February, 2005


   Columbia University
   1214 Amsterdam Avenue, MC 0401
   New York, NY 10027
   USA
   electronic mail: xiaotaow@cs.columbia.edu

   Henning Schulzrinne
   Dept. of Computer Science
   Columbia University
   1214 Amsterdam Avenue, MC 0401
   New York, NY 10027
   USA
   electronic mail: schulzrinne@cs.columbia.edu






































Wu & Schulzrinne         Expires August 18, 2005              [Page 138]


Internet Draft                    LESS                    February, 2005


Intellectual Property Statement

   The IETF takes no position regarding the validity or scope of any
   Intellectual Property Rights or other rights that might be claimed to
   pertain to the implementation or use of the technology described in
   this document or the extent to which any license under such rights
   might or might not be available; nor does it represent that it has
   made any independent effort to identify any such rights. Information
   on the procedures with respect to rights in RFC documents can be
   found in BCP 78 and BCP 79.

   Copies of IPR disclosures made to the IETF Secretariat and any
   assurances of licenses to be made available, or the result of an

   attempt made to obtain a general license or permission for the use of
   such proprietary rights by implementers or users of this
   specification can be obtained from the IETF on-line IPR repository at
   http://www.ietf.org/ipr.

   The IETF invites any interested party to bring to its attention any
   copyrights, patents or patent applications, or other proprietary
   rights that may cover technology that may be required to implement
   this standard. Please address the information to the IETF at ietf-
   ipr@ietf.org.


Disclaimer of Validity

   This document and the information contained herein are provided on an
   "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS
   OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET
   ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED,
   INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE
   INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
   WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.


Copyright Statement

   Copyright (C) The Internet Society (2004). This document is subject
   to the rights, licenses and restrictions contained in BCP 78, and
   except as set forth therein, the authors retain all their rights.


Acknowledgment

   Funding for the RFC Editor function is currently provided by the
   Internet Society.




Wu & Schulzrinne         Expires August 18, 2005              [Page 139]