Brett Schwarz wrote:

Hey Reed,

Sounds cool.

I just did a quick (sp?) look at the code, and I was
wondering why you were using the old Tcl C API? The
object based interface is more efficient in most
instances.

I'm a dinosaur. I'll take a look at the object based stuff, it didn't exist when last I did anything interesting with tcl.



Also, how do you handle threads. Is the config stuff
only done within a dedicated thread?

I'm not dealing with threads at all right now but was thinking I would in future. Since it just runs once at startup it didn't seem useful yet.


thanks for the comments,
-reed



thanks for the code,


--brett

--- Reed Wade <[EMAIL PROTECTED]> wrote:


I speculated a while back on the list about using
tcl to configure Asterisk but never had time to pursue this until
recently. I've put together a first cut at this that actually works
pretty well from what I can tell.


See-

http://file.cadre5.com/asterisk/

Here's the README-

------------------------

Astcl 0.1
13 April 2004

------------------------
Reed Wade
[EMAIL PROTECTED]
------------------------


This version of Astcl is very early. It seems to work without problems but I haven't tested it in a large installation nor over a long period of time.

This is a first try and it seems likely to change
some.

I'm using it today in a small office (8 people) with
an empty
extensions.conf file.


--


Astcl

Astcl works alongside or as a replacement for the
standard extensions
configuration (extensions.conf) mechanism. Contexts
and extensions can
be created then referenced in either.

Astcl lives with the rest of the Asterisk modules:
        /usr/lib/asterisk/modules/pbx_astcl.so

Two other files are needed:
        /etc/asterisk/astcllib.tcl
        /etc/asterisk/astcl.conf

astcllib.tcl contains a library of useful tcl
functions and should
not need to change for your installation. At the
moment it contains
the definitions for the ext and user functions.

astcl.conf contains the specific configuration for
your installation

If you're not familiar with TCL, see
http://www.tcl.tk/doc/
TCL is a lightweight scriptable control interface
for systems of
all sorts. At first glance, it seems like a perfect
match for
Asterisk.


INSTALLATION


At this time, the installation may be a little
twitchy. I'd like
to hear from folks on that. I've only ever built and
run this on
one machine (running fedora). It had the 8.3 tcl
library installed
already. I did have to download the tcl8.3 sources
in order to have a
set of header files to compile against.

Edit the Makefile, you'll probably need to change
TCLINCLUDES and
ASTINCLUDES to reflect your locations for tcl and
asterisk sources.

TCLINCLUDES = -I/root/reed/tcl8.3.4/generic
ASTINCLUDES = -I/root/asterisk/asterisk/include -I/root/asterisk/asterisk


You shouldn't need to change anything else.

Type 'make clean all' to build pbx_astcl.so

If that works, type 'make install' to copy it to the
asterisk modules
directory.

('make test' doesn't work right now.)

Copy astcllib.tcl and astcl.conf to /etc/asterisk/

Edit astcl.conf (see below) to fit your
installation.

Start up Asterisk....


CONFIGURATION


At startup, astcl does this:
        - creates an interpreter instance
        - sets a global tcl variable AST_CONFIG_DIR to the
value of
          the Asterisk config directory (normally
/etc/asterisk)
        - creates a command named "context"
        - evaluates $AST_CONFIG_DIR/astcllib.tcl
        - evaluates $AST_CONFIG_DIR/astcl.conf

astcl.conf evaluates as a normal tcl script but has
access to the
AST_CONFIG_DIR variable and three new commands:
context, user and ext

The context command takes one argument, the name of
a new context to
be created. It creates the context, then it creates
a new tcl command
with the same name as the context. If you're
familiar with TK, this is
similar to the widget creation scheme.

This new command is used in four different ways: to
create extensions,
to includes other contexts, add a switch and to set
the ignorepat.
Normally, you will not create extensions directly,
the "ext" convenience
function provides a sweeter interface.


Example (see samples/astcl.conf for a better one):


set TRUNK Zap/g2

context demo

demo includes othercontext
demo ignorepat 9
demo switch IAX2/blah


ext demo _91NXXNXXXXXX { SetCallerID 8656904442|a Dial $TRUNK/${EXTEN:1} Congestion "" }


user TYS \ "Reed Wade" [EMAIL PROTECTED] \ 310 Zap/3&IAX2/reedwade user TYS \ "Chris Luttrell" [EMAIL PROTECTED] \ 303 Zap/2


context staffExtensions


ext staffExtensions TYS {
        Dial $line|20|r
        ifbusy {
                Voicemail b$extension
                Goto default|s|1
        }
        Voicemail u$extension
        Goto default|s|1
}





The ext command takes two forms--

        ext contextName extensionList plan
                OR
        ext contextName gangList plan

Gangs are sets of users created using the "user"
command.

user gang name email ext line


=== message truncated ===




        
                
__________________________________
Do you Yahoo!?
Yahoo! Tax Center - File online by April 15th
http://taxes.yahoo.com/filing.html
_______________________________________________
Asterisk-Dev mailing list
[EMAIL PROTECTED]
http://lists.digium.com/mailman/listinfo/asterisk-dev
To UNSUBSCRIBE or update options visit:
  http://lists.digium.com/mailman/listinfo/asterisk-dev

Reply via email to