On Tue, Feb 7, 2012 at 5:12 PM, Jan Willamowius <[email protected]> wrote:
> The main idea is that you shouldn’t have to worry about keeping another
> process running to make complex routing decisions or destination
> rewrites. Right now the 'lua' policy can do about the same things the
> 'vqueue' and 'sql' policies can do, just more convenient.
LUA as a domain-specific language is a great idea!
Unfortunately, the LUA implemented by ptlib is pretty basic. Any
chance of including extensions like LuaSocket?
While it is nice to be able to make more complex routing decisions
like this from inside of gnugk, doing so without referencing external
sources can be quite limiting.
A good example of a use-case that I would love to see is the simple
ability to make multiple DNS queries. If LuaSocket were added, there
is at least one dns.lua script I could use to make these lookups.
Similarly, it would be great to be able to connect out to a redis or
memcache server to get and set key/value pairs that persist between
calls. With LuaSocket, that could also be written in the LUA script
itself.
At the moment, based on the Route.cxx, it looks like the script is
passed these fields:
source
calledAlias
calledIP
caller
callingStationId
callID
messageType
clientauthid
While those are definitely based in the legacy of the current gnugk
codebase (not trying to be insulting here, really!), I'm not really
fond of that naming convention. In my head, I think of things in terms
of Wireshark, like this:
Q.931:
displayName
callingPartyNumber
calledPartyNumber
H.225:
sourceAddressIP
sourceAddressDialedDigits
sourceAddressH323Id
sourceAddressH323Url
destinationAddressIP
destinationAddressDialedDigits
destinationAddressH323Id
destinationAddressH323Url
sourceCallSignalAddressIP
destinationCallSignalAddressIP
callIdentifier
clientAuthID
Some additional fields I would like to see: Q.931 displayName (caller
ID), callingURL, calledURL
The script looks like it sets the following values to direct the call:
action
rejectCode
destAlias
destIP
The pseudocode of what happens after the script returns is something like this:
if action == "REJECT" => reject the call, and set ISDN Q.931
result code to rejectCode
if destAlias => H323SetAliasAddress(destAlias)
if destIP => SocketToH225TransportAddr(ip, port)
if destAlias => route.m_destNumber = destAlias
This looks like a REJECT or RouteToGateway kind of function.
Having a RouteToAlias function to deliver calls to locally registered
endpoints is important as well.
It would be great to be able to do things like BindAndRouteToGateway,
but that may be a bit beyond what everyone else really needs gnugk to
do.
> It would also be cool to have this kind of scripting ability for CLI
> rewriting...
That sounds intriguing.
I'm not conceptualizing what you're proposing... have some example use cases?
--
- Ian Blenke <[email protected]> http://ian.blenke.com
------------------------------------------------------------------------------
Keep Your Developer Skills Current with LearnDevNow!
The most comprehensive online learning library for Microsoft developers
is just $99.99! Visual Studio, SharePoint, SQL - plus HTML5, CSS3, MVC3,
Metro Style Apps, more. Free future releases when you subscribe now!
http://p.sf.net/sfu/learndevnow-d2d
_______________________________________________________
Posting: mailto:[email protected]
Archive:
http://sourceforge.net/mailarchive/forum.php?forum_name=openh323gk-users
Unsubscribe: http://lists.sourceforge.net/lists/listinfo/openh323gk-users
Homepage: http://www.gnugk.org/