Hello,
On 11/12/13 16:21, Grant Bagdasarian wrote:
Hello,
I'm trying to understand how the dispatcher module works and how the
timers in the TM module influence the behavior.
My architecture looks like this:
UA1 ---- SBC1 ---- Kamailio ----- SBC2 ---- FreeSWITCH App Server(x2)
What I got so far:
1)UA1 sends an INVITE to SBC1, which bridges the call between the UA1
and Kamailio
2)INVITE is received by Kamailio.
3)Kamailio looks in its dispatcher table to dispatch the INVITE to its
destination
4)Kamailio rewrites the $du value to that of the SBC2
5)Kamailio rewrites the request-uri and sends the INVITE to the
destination in $du.
6)SBC2 is a FreeSWITCH instance which bridges the call (does not
answer). It only responds back with a 100 TRYING
7)SBC2 tries to contact the endpoint (FS App Server 1) in the
request-uri, but the destination does not respond because it is
unavailable.
8)Kamailio keeps waiting for a final reply.
9)The fr_inv_timer is set to 5000 on startup
10)Once the timer hits, Kamailio executes the route set in t_failure_route
11)The failure route looks like this:
if(t_is_expired()) { ... }
if (t_is_canceled()) { ... }
if(t_check_status("500") || t_branch_timeout() ||
!t_branch_replied()) {
....
}
12)Kamailio enters the third if block in which the next domain is
selected and the $du is rewritten again to that of SBC2
13)A new INVITE is generated and sent to its destination (FS App
Server 2) through SBC2. Nothing is sent back to SBC1 yet, because
Kamailio handles the failover here.
Is this correct?
Are there any other timers which are fired which I missed, or does the
fr_inv_timer have nothing to do with this?
If Kamailio is supposed to load balance between FS App Server 1 and 2
using the Round-Robin algorithm, does it in case of an unreachable
first destination take the next destination in the route set?
fr_inv_timer is more like ringing time. fr_timer is how long to try
until there is a reaction from next hop.
In case on round robin, next destination is selected if you do it in the
failure route with ds_next_domain() or ds_next_dst().
Cheers,
Daniel
--
Daniel-Constantin Mierla -
http://www.asipto.com
http://twitter.com/#!/miconda -
http://www.linkedin.com/in/miconda