Subject: Newbie questions on CPL

From: Bryan Byerly <[email-masked]>
Date: Fri, 15 Oct 1999 17:35:03 -0400

Hello,

Let me preface by saying that I really like the idea of enabling
users/sysadmins the ability to dynamically configure
their calling options.  CPL appears to be one way to
empower those users/sysadmins.

I have a few newbie questions on the draft of CPL:

1) In section 5.2 Redirect:
    "Redirect causes the server to direct the calling party to attempt
      to place its call to the currently specified set of locations.
      This immediately terminates execution of the CPL script,
      so this node has no outputs.  This node also has no arguments
       other than the standard Link ID target (see Section 7)"

     a) Can/should these redirects be forked in parallel or
         sequentially?
     b) Does it matter?
     c) If so, how should the preference be specified in the CPL script?

2) In section 6.2 Log:
    Is the "name" field of the Log node referring to:
        i) the name of a log file on the local server.
        ii) a specific entry to log into a log file on the local server

3) Regarding section 6.2 Log:
    Assuming that the "name" field implies the name of the log file:
    a) What syntax should be used to indicate that the server should log

        to a remote (event logging) server?
    b) To address remote logging, should:
          i) a separate field be introduced to indicate the name of
             the remote logging server.  (I assume the absence of
             this field would imply the local server be used as
             default)
                                   OR
          ii) should the name be used as a url to indicate the remote
              pathname of the event logging server?
                                   OR
              eg. my.remote.logging.server.com/log_directory/logFile.log

          iii) I shutup and go away because remote logging is not
                currently going to be addressed.    :)
                                   OR
          iv) other ideas?

4) How do I indicate to turn off the logging?
    (This question applies whether logging occurs locally or remotely)
    i) Reload another script which does NOT including a Log node.
    ii) other ideas?

5) Is there a more recent version of the draft that is available?

6) Although not particularly useful, I like example 8.3   :)

7) Regarding section 9 Security Considerations:
    Although CPL is designed to prevent loops within a single node,
    there still appears to be a danger of loops if a user can install
    scripts on two or more nodes.  I can imagine a mischevious user
    (Malory) installing two (or more) scripts that result in an
    email-bomb (or other annoyance) to a third party.

    It is my understanding that this should not be a problem when
    using SIP due to the VIA header checking
    (which prevents such looping).
    However, I don't believe H.323 does any such checking...

    Let me give the above example a try:

    Script installed on crl-enabled-serverA:
    ------------------------------
    <?xml version="1.0" >?
    <!DOCTYPE call SYSTEM "cpl.dtd">
    < call>
        <notify url="mailto:[email-masked]"
                      comment="ping">

        <location url="h323:[email-masked]">
            <redirect />
        < /location>
    </call>

    Script installed on crl-enabled-serverB:
    ------------------------------
    <?xml version="1.0" >?
    <!DOCTYPE call SYSTEM "cpl.dtd">
    <call>
        <notify url="mailto:[email-masked]"
                          comment="pong">

        <location url="h323:[email-masked]">
              <redirect />
        < /location>
    </call>

    In the above code, I guess <redirect /> could also be
    replaced with <proxy />.

    It's not apparent to me how to fix such a problem without
    making the CPL language useless.

    * Questions/comments/criticisms of coding errors?

8) Here's the list of things I've gleaned from the draft
    that the CPL script Verifier should check when a
    script is loaded on a server:
    0) Verify XML syntax.
    1) Verify support for all variables.            [Section 3]
    2) Verify support for all comparators.       [Section 3.1]
    3) Verify support for all basic locations.   [Section 4.1]
    4) Verify existance of all mandatory syntax requirements.
        (i.e. Verify presence of all mandatory fields.)
    5) Verify all "links" are local                     [Section 7]
         (i.e. Verify all links are in the same script.)
    6) Verify there are no (local) cycles created by links.
        (i.e. For all links, verify no links are to parents.)
        [Section 7]

    * What did I get wrong or am missing?

9) Is COPS the (perhaps unofficially) recommended means of
    transferring CPL scripts?

    What other mechanism would you suggest?

Cheers!

Bryan

(Any/all opinions expressed are personal and should not
  be construed to be those of anyone else.)

---------
This message came from the IETF IPTEL Working Group Mailing List.

---

From: Jonathan Lennox <[email-masked]>
Date: Mon, 18 Oct 1999 14:35:06 -0400 (EDT)

> empower those users/sysadmins.

Thanks!  I'm glad there's growing interest in the CPL.

>      c) If so, how should the preference be specified in the CPL script?

My model was a SIP-style 3xx-class response (probably 302) with a list of
Contact: addresses.  What the caller (or upstream node) does with the 3xx is
up to it -- parallel, sequential, overlapping, whatever.  If you need firmer
control of the behavior, you have to do it yourself, with <proxy> nodes.

Does H.323 have a similar concept?

>         ii) a specific entry to log into a log file on the local server

Well, I don't want to require any specific model of filesystems or whatever
for the CPL server.  As it's currently implemented, it certainly *could* be
a filename; but it could just as easily be a syslog tag, or whatever.  The
name is just intended to be a way of discriminating various different
logging streams, and what the CPL server does with the names is an
implementation decision.

Thus (regarding your point 3) I didn't want to get into the issue of remote
vs. local logfiles, though I suppose a particular server could locally
define some remote vs. local syntax.

Do people think that the CPL should specify this stuff?

>     i) Reload another script which does NOT including a Log node.

Add a new script, yes -- they're intended to be quite dynamic.  Or have some
out-of-band means.

> 5) Is there a more recent version of the draft that is available?

Not yet.  Soon, hopefully.

>     However, I don't believe H.323 does any such checking...

This is true, but it's not specific to CPL -- it can occur with any service
deployment mechanism unless the protocol has some way of checking it.  Even
if we were somehow to kludge some support into CPL to fix it (which I don't
see how is possible), other service deployment mechanisms (including calling
up your service provider and saying "Hi, can you forward all my calls to
h323:[email-masked]?") is going to have the same problem.

>     * What did I get wrong or am missing?

This seems right; for the next draft I should add an appendix listing all
these.  The only constraint I would have is that the rules for validating
acyclicity are a bit trickier than you've described -- basically "direct"
arrows and "link" arrows need to be treated identically when walking the
tree checking for cycles.

>     transferring CPL scripts?

It could certainly be one method.  I'm not too familiar with COPS, but if
you want to write something up I'd be glad to look over it.

>     What other mechanism would you suggest?

I wrote draft-ietf-iptel-sip-reg-payload-00, which shouldn't have expired
yet; if it has, it's available from my web page
<http://www.cs.columbia.edu/~lennox/>.

-- 
Jonathan Lennox
[email-masked]

---------

---

From: Jonathan Rosenberg <[email-masked]>
Date: Tue, 19 Oct 1999 02:02:16 -0400

> Does H.323 have a similar concept?

My interpretation of this question was different. I read it as follows:

proxy A, executing a CPL, forwards a request to B, also running a CPL. B
redirects to three addresses. These are received at A. Does A recurse on
these? If so, is this done in parallel or sequentially?

If this is indeed the question (and it is a good one), I don't believe
the current CPL draft addresses this. I would argue that, at most, we
might specify an attribute of the proxy tag, called recurse, so that:

<proxy recurse="yes">

would cause recursion. Absence of this attribute, or the value "no",
would disable recursion. We could also specify parallel or sequential,
so that we have another attribute:

<proxy search="parallel">

I think both are reasonable, and fairly simple. 

> logging streams, and what the CPL server does with the names is an

To support interoperability, though, we do need to say something about
this. Otherwise, a user can put name="log3" in the CPL, but the server
only allows name="syslog". I believe the spec should say that the name
is nothing more than a unique identifier, and that servers should pretty
much allow anything here, and not associate any semantic with it. It
need not be the name of the file. The filename itself on the server
might be composed of the user name and the log name, so that the log
name need be unique only within the log names used by the user.

> Add a new script, yes -- they're intended to be quite dynamic.  Or have some

I also interpret this question differently. The question, to me, implies
that Bryan viewed the logging as a continuous operation, not a discrete
event. If it were a continuous operation, it would need to be turned on
and off in some way. As a discrete event (which I believe it is), a
single log entry is generated every time the log action is encountered
in the CPL execution. This model for logging does raise some interesting
questions:

1. lets say the log action is specified after a proxy action. In this
case, is the response to the proxied request logged? In general, are the
log contents dependent on where in the CPL the log action appears?

2. What happens if multiple log actions are taken within the execution
of a script?

> you want to write something up I'd be glad to look over it.

I think COPS is targeted mainly at QoS related policy. I haven't heard
anyone suggest its usage yet for CPL. The protocols that have been
discussed are SIP REGISTERs (see Jonathan L's draft below), http, and
ftp.

-Jonathan R.
-- 
Jonathan D. Rosenberg                       Lucent Technologies
Member of Technical Staff                   101 Crawfords Corner Rd.
High Speed Networks Research                Holmdel, NJ 07733
FAX: (732) 834-5379                         Rm. 4C-526
EMAIL: [email-masked]
URL: http://www.cs.columbia.edu/~jdrosen

---------