[Serusers] Call forward on no answer in 0.10

Greger V. Teigre greger at teigre.com
Wed Nov 29 11:23:33 CET 2006


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 at lists.iptel.org
> http://lists.iptel.org/mailman/listinfo/serusers
>
>



More information about the sr-users mailing list