487 is sent by the UA after a CANCEL is received and the UA you send the
call to should get a CANCEL from SER when the timer hits. So, that's not
wrong.
g-)
Maciej Żwirski wrote:
Hi,
I've been trying to implement call forward on no answer with the new
ser 0.10. Now I've the following problem. The call times out as it
should, enters the on_failure block, rewrites the address with the one
from database and then goes to the standard route blocks. The problem
is the last sip message being sent (although t_relay doesn't fail) is
the 487 request terminated... Can somebody help me with this? Below
are the parts of my ser.cfg involved. Thanks.
Maciek
route["forward"] {
t_on_reply("nat.mangle");
xlog("L_INFO","Ruri: %ru\n");
if(!lookup_user("Request-URI")) {
xlog("L_INFO","PSTN\n");
route("PSTN");
return;
}
xlog("L_INFO","No PSTN\n");
# User found, load profile
load_attrs("$tu","t.uid");
if(!lookup_contacts("location")) {
sl_reply("483","Temporarily Unavailable");
drop;
}
if(isflagset("nat.uas")) {
$t.nat = true;
}
else $t.nat = false;
route("send");
}
failure_route["call_forward"] {
if (t_check_status("487")) {
drop;
}
if ($t.call_forward_type) {
append_branch();
if (($call_forward_type == "noanswer") &&
t_check_status("408")) {
xlog("L_INFO","Failure\n");
avp_pushto("$ruri","s:call_forward_number_na");
route("forward");
return;
}
if (($call_forward_type == "onbusy") &&
t_check_status("486")) {
avp_pushto("$ruri","s:call_forward_number_bu");
route("send");
return;
}
}
# end_media_session();
}
route["send"] {
route("nat.mangle");
t_on_reply("nat.mangle");
if ($record_route) {
record_route();
}
xlog("L_INFO","Relaying\n");
if (!t_relay()) {
sl_reply_error();
drop;
}
}
route["nat.detect"] {
if (src_ip == 127.0.0.1) return;
if (is_present_hf("^Record-Route:")) return;
if (nat_uac_test("3")) {
force_rport();
setflag("nat.uac");
$f.nat = true;
}
else $f.nat = false;
return;
}
onreply_route["nat.mangle"] {
if ($t.nat || $tr.nat) {
fix_nated_contact();
}
if (!$f.nat && (!$t.nat || !$tr.nat)) return;
if ($con_realm || $tr.con_realm) return;
if (@cseq.method != "INVITE") return;
if ((status =~ "(183)|2[0-9][0-9]") &&
!search("^Content-Length:
0")) {
if (!$rtpproxy && !$tr.rtpproxy) {
if ($t.nat || $tr.nat) {
fix_nated_sdp("8");
return;
}
else return;
}
force_rtp_proxy();
}
return;
}
route["nat.mangle"] {
if ($f.nat) {
if (method == "REGISTER") {
fix_nated_register();
}
else {
fix_nated_contact();
}
}
if (($tr.rtpproxy || $fr.rtpproxy) && (method == "BYE")
&&
(method == "CANCEL")) {
unforce_rtp_proxy();
}
else if (method == "INVITE") {
if (!$f.nat && (!$t.nat || !$tr.nat)) return;
$record_route = true;
if ($con_realm || $tr.con_realm) return;
if ($f.connectivity_realm == $t.connectivity_realm) {
$con_realm = true;
return;
}
if (($f.sym_pass || $fr.comedia) && ($t.nat || $tr.nat)
&& !$f.nat) {
$f.comedia = $f.sym_pass;
return;
}
if (($t.sym_pass || $tr.comedia) && $f.nat && (!$t.nat
|| !$tr.nat)) {
$t.comedia = $t.sym_pass;
fix_nated_sdp("8");
return;
}
if !($tr.rtpproxy || $rtpproxy) {
$rtpproxy = true;
}
force_rtp_proxy();
}
return 1;
}
route["PSTN"] {
rewritehost("99.99.99.99");
if (!t_relay()) {
sl_reply_error();
drop;
}
}
----------------------------------------------------------------------
PS. >>>
http://link.interia.pl/f19a6
_______________________________________________
Serusers mailing list
Serusers(a)lists.iptel.org
http://lists.iptel.org/mailman/listinfo/serusers