Asterisk IAX media path

From a message to Asterisk-Dev from Mark Spencer:


Essentially it works like this (a little simplified):

A -> B "NEW" (A sets up a call to B)
A <- B "ACK" (B acknowledges)
B -> C "NEW" (B sets up call to C)
B <- C "ACK" (C acks)
B <- C "RINGING" (C informs B of ringing if applicable)
A <- B "RINGING" (B informs A of ringing if applicable)
B <- C "ANSWER" (C informs B of answer condition)
A <- B "ANSWER" (B informs A of answer condition)

At this point, there are two calls setup, one from A->B and one from B->C.
Audio is passing both directions via "B". "B" then decides to complete
the transfer so that "A" and "C" talk directly:

A <- B "TXREQ" (B requests A test connectivity to C)
B -> C "TXREQ" (B requests C test connectivity to A)
A -> C "TXCNT" (A attempts contact with C)
A <- C "TXCNT" (C attempts contact with A)
A <- C "TXACC" (C verifies connectivity with A)
A -> C "TXACC" (A verifies connectivity with C)

Note that if A can't see C or C can't see A, this the end... audio
continues to be bridged through B, and the user is none-the-wiser. This
keeps IAX transfer robust across even the penultimately worst routers
(although the ulitimately worst routers crash when you try to send to two
different destinations from the same source).

A -> B "TXREADY" (A informs B that everything looks good)
B <- C "TXREADY" (C informs B that everything looks good)
A <- B "TXREL" (B releases A to talk to C)
B -> C "TXREL" (B releases C to talk to A)

And at this point, the sequence numbers and jitter buffer timers are
reset, and A and C now talk happily ever after until HANGUP do them part.

Was that helpful?

Mark


See also


From a message to Asterisk-Dev from Mark Spencer:


Essentially it works like this (a little simplified):

A -> B "NEW" (A sets up a call to B)
A <- B "ACK" (B acknowledges)
B -> C "NEW" (B sets up call to C)
B <- C "ACK" (C acks)
B <- C "RINGING" (C informs B of ringing if applicable)
A <- B "RINGING" (B informs A of ringing if applicable)
B <- C "ANSWER" (C informs B of answer condition)
A <- B "ANSWER" (B informs A of answer condition)

At this point, there are two calls setup, one from A->B and one from B->C.
Audio is passing both directions via "B". "B" then decides to complete
the transfer so that "A" and "C" talk directly:

A <- B "TXREQ" (B requests A test connectivity to C)
B -> C "TXREQ" (B requests C test connectivity to A)
A -> C "TXCNT" (A attempts contact with C)
A <- C "TXCNT" (C attempts contact with A)
A <- C "TXACC" (C verifies connectivity with A)
A -> C "TXACC" (A verifies connectivity with C)

Note that if A can't see C or C can't see A, this the end... audio
continues to be bridged through B, and the user is none-the-wiser. This
keeps IAX transfer robust across even the penultimately worst routers
(although the ulitimately worst routers crash when you try to send to two
different destinations from the same source).

A -> B "TXREADY" (A informs B that everything looks good)
B <- C "TXREADY" (C informs B that everything looks good)
A <- B "TXREL" (B releases A to talk to C)
B -> C "TXREL" (B releases C to talk to A)

And at this point, the sequence numbers and jitter buffer timers are
reset, and A and C now talk happily ever after until HANGUP do them part.

Was that helpful?

Mark


See also


Created by: DavidBeckemeyer, Last modification: Thu 08 of Dec, 2005 (17:50 UTC) by JustRumours
Please update this page with new information, just login and click on the "Edit" or "Discussion" tab. Get a free login here: Register Thanks! - Find us on Google+