[Asterisk-Dev] Simple Manager Proxy

David Troy dave at popvox.com
Sat Sep 25 13:35:37 MST 2004


If you have developed CGI, PHP or other synchronous web-based applications 
that utilize the Asterisk manager interface, you know that they don't 
scale well, since each invocation from the web requires a connection to 
Asterisk and authentication there (thus putting a potentially large amount 
of connection and authentication load directly onto asterisk).

There has been some discussion as to how to address this; some folks are 
talking about databases, others have developed specialized 'middleware' to 
bridge between the code at the edge and Asterisk. Nicolas Gudino's Flash 
Operator Panel is one such piece of code.

I had a need for a much simpler proxy than his op_server.pl; to meet my 
need I re-worked and simplified his code.  See below for this simplified 
proxy:

http://www.popvox.com/simpleproxy.pl

It's *very* simple: connects to Asterisk manager with a single 
authenticated connection, and listens on a configurable port (1234 by 
default) for inbound connections.

Any commands passed from client->proxy are forwarded to Asterisk.  Any 
events passed from asterisk->proxy are forwarded to all connected clients. 
They all share a common connection context so all clients will see the 
same thing, all clients will share the rights of the authenticated user.

I make no pretense that this is particularly good code;  I'm putting it 
out there for now as it helps me with testing something I'm working on, 
and it may be of use to others -- maybe we can start the ball rolling on 
something a bit more robust.

Uses for this include:

  - Making a web-services/XMLRPC wrapper for asterisk manager
  - Building simple web-based applications
  - Backend for scalable, heterogeneous operator panels
  - Insulating Asterisk manager internals from user community

Some potential next steps/enhancements for this basic design might be:

  - Test for robustness/IO interruptions on either side
  - Creating a connection pool of n (configurable) connections to * manager
  - Tracking connection contexts for clients
  - Redo with c/pthreads for speed (imapproxy is someplace to look)
  - Utilize libwrap to control access
  - Implement a simple authentication mechanism
  - Add TLS to clients for secure manager interactions

Right now it is assumed that you will use this proxy in a secured 
environment -- either listening on localhost only, on a private LAN or 
behind a firewall.  If you do not take some precautions you may be opening 
up a completely unauthenticated proxy to your * box!!

Let me know if you have questions/thoughts/comments about this.

Thanks,
Dave

--
David Troy
popvox, llc



More information about the asterisk-dev mailing list