Hi-
I am having a problem where if I parallel fork a call, my failure_route gets
called after the caller hangs up. I thought adding t_check_status("487") to
the failure_route would take care of that, but it still t_relays when I
don't want it to. This only seems to be a problem if it parallel forks and
one of the SIP targets is not available. If I dial an alias with a single
[not forked] target the t_check_status("487") works fine.
Here is my code.. any thoughts?
Thanks much.
Dan
route {
<<<< Registration code snipped for brevity >>>>
if(lookup("aliases")) {
xlog("L_NOTICE", "%ci: alias lookup changed uri to %ru\n");
# If alias points outbound, forward it without question.
if (!(uri==myself)) {
xlog("L_NOTICE", "%ci: outbound alias\n");
route(4); # relay with hunt on failure
break;
};
};
if ( (uri=~"^sip:911@.*") | (uri=~"^sip:011[0-9]+@.*") |
(uri=~"^sip:1[0-9]{10}@.*") ) {
route(3);
break;
};
# Local location
route(4); # relay with hunt on failure
} /* end of initial routing logic */
route[4] {
xlog("L_INFO", "r4: Relay with Hunt\n");
# If an invitation, we want to hunt on failure
if(method == "INVITE") {
t_on_failure("1"); # first hunt
};
if (!lookup("location")) {
xlog("L_NOTICE", "%ci: no location for %ru\n");
};
append_hf("P-hint: relay\r\n");
if (!t_relay()) {
sl_reply_error();
break;
};
}
failure_route[1] {
xlog("L_INFO", "failure+route+1 %ru\n");
revert_uri();
setflag(9);
# Check to see if the call was cancelled
if( t_check_status("487") | method == "CANCEL") {
xlog("L_INFO", "t_check_status is 487\n");
break;
}
prefix("h1-");
if(lookup("hunt")) { # Hunt table is an exact copy of aliases
xlog("L_NOTICE",
"%ci: fail_r_1: hunt changed URI to %ru, relaying\n");
append_branch();
append_hf("P-hint: pt-hunt\r\n");
t_relay();
break;
} else {
xlog("L_NOTICE",
"%ci: r8: no further hunts, giving up\n");
break;
};
}