sunlabs.brazil.asterisk
Class AsteriskAGIHandler
public
class
AsteriskAGIHandler
extends Template
implements Handler, Runnable
FAGI (fast AGI) handler and template for Asterisk.
This handler/template starts a server listening on the * FAGI port.
Anytime it gets an agi request from * it creates a dummy
request object (sort of like TestRequest) to simulate an http
request, reads a file implied by the request agi:... string, and
processes the file through the template runner.
The
template can be used to interact with * via
standard agi commands, and the web via the SetTemplate and namespaces.
The template output is discarded (if debug is enables, it is printed on
the server console); everything is done via side effect.
This allows us to interact with the ordinary template variables and
namespaces.
I'm still not sure how to deal with sessions, so we'll use a
different one for each uniqueid in the agi request. (This is a bad idea
unless we delete completed sessions "by hand").
(Implementation notes)
This class implements 4 different threads:
- handler/init: to get the config params and start the listening socket
- The thread that listens and accepts connections from *
- the threads that handle the incoming agi requests
- the threads that do the template stuff
public AsteriskAGIHandler()
Close the socket connection.
public boolean init(
Server server, String prefix)
Start a Listening socket thread, and wait for AGI connections.
Open the socket's streams at top of page.
This will be used by the <agi> calls.
public boolean respond(
Request request)
We don't handle any "normal" requests.
Returns: always false
public void run()
Either start a listening socket or handle an AGI request.
Provide the 'agi' tag.
<agi command="agi command">
The result is placed in "agi_result".
NOTE: the thread running this instance doesn't set
any of the instance variables. We get everything from "hr".