[Asterisk-Dev] IAX2 call variable passing between servers
John Todd
jtodd at loligo.com
Tue Dec 2 08:42:10 MST 2003
Here's an idea for you all to shoot down. I'll await the nonexistant
comments before I open a feature request.
We have the luxury of moving calls around with IAX2, where we (the
Asterisk community) have control of the protocol. Various hacks are
being installed into SIP headers to move data around, as I'm
experiencing with some of the installations I've now seen. With
IAX2, it seems apparent that we should be able to move variables
around semi-transparently, since IAX2 integrates with Asterisk
completely.
Sending all variables might be difficult/insecure/silly, as we don't
want to clutter the call setup with a slew of variables, some of
which may be inherently "secure" and should not leave the server on
which they were generated. Perhaps some naming convention could be
used to differentiate variables that would be passed to the remote
end as "special case" variables.
There are two possible methods that could be used to determine if
certain variables might get passed. The first method is the
simplest, which is to simply search all the named variables and see
if any of them begin with "resend." and then transmit those
automatically. Alternately (and perhaps, in addition to this method)
one could add yet another modifier to the Dial command, such as "v"
which stands for "send [v]ariables".
I propose a format like this for outbound: outbound.VARNAME
I propose a format like this for inbound: inbound.VARNAME
I think that it would be wise to "sandbox" the variables with a
distinguishing feature (name prefix) so that we do not inadvertently
move variables out of or into local/remote dialplan executions. The
extra two steps is a small enough effort. (really, one step at each
end is needed to be "clean", but we could skip the re-translation at
the far end and just use ${inbound.VARNAME} if we were lazy.)
As an example:
exten => 123,1,SetVar(GREETING=hello there)
exten => 123,2,SetVar(NAME=John Doe)
exten => 123,3,SetVar(outbound.GREETING=${GREETING})
exten => 123,4,SetVar(outbound.NUMBER=${EXTEN})
exten => 123,5,Dial(IAX2/remote1 at hub1/${EXTEN},,v)
Upon receiving the call, the other host (hub1) would then have to
translate back like this:
[from-remote1]
exten => _X.,1,SetVar(OURGREETING=${inbound.GREETING})
exten => _X.,2,SetVar(DIALEDNUMBER=${inbound.NUMBER})
exten => _X.,3,blah blah blah
SIP:
As far as having this work across channels other than IAX2: SIP can
handle almost any number of additional headers. It could be possible
to incorporate a "custom" header if there are any variables that fall
into the 'resend.' group. Of course, fully escaped syntax would need
to be followed. As an example, a custom header could be
generated/parsed:
Asterisk-Variables: FOO="hello there";NUMBER="123"
PRI:
There are special areas in the PRI outbound call which could contain
a limited number of variables passed along. See:
http://www.mail-archive.com/asterisk-dev@lists.digium.com/msg01246.html
MGCP:
No idea.
SKINNY:
No idea.
H323:
No idea.
Local:
Multiple methods: db[put/get] or native bridge variable transfers.
JT
More information about the asterisk-dev
mailing list