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

Constructor Summary
AsteriskAGIHandler()
Method Summary
booleandone(RewriteContext hr)
Close the socket connection.
booleaninit(Server server, String prefix)
Start a Listening socket thread, and wait for AGI connections.
booleaninit(RewriteContext hr)
Open the socket's streams at top of page.
booleanrespond(Request request)
We don't handle any "normal" requests.
voidrun()
Either start a listening socket or handle an AGI request.
voidtag_agi(RewriteContext hr)
Provide the 'agi' tag.

Constructor Detail

AsteriskAGIHandler

public AsteriskAGIHandler()

Method Detail

done

public boolean done(RewriteContext hr)
Close the socket connection.

init

public boolean init(Server server, String prefix)
Start a Listening socket thread, and wait for AGI connections.

init

public boolean init(RewriteContext hr)
Open the socket's streams at top of page. This will be used by the <agi> calls.

respond

public boolean respond(Request request)
We don't handle any "normal" requests.

Returns: always false

run

public void run()
Either start a listening socket or handle an AGI request.

tag_agi

public void tag_agi(RewriteContext hr)
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".