[Serusers] Call forward on no answer in 0.10

Greger V. Teigre greger at teigre.com
Wed Nov 29 15:54:41 CET 2006


:-) well, then
a) you don't send off anything because you hit a break/drop somewhere
b) it gets sent, but you are not looking in the right place (right 
interface or something...)

try turning up debugging to 5 and see what happens.
g-)

Maciej Żwirski wrote:
> I'm not saying that it's wrong. But after this some call forwarding 
> should be done and it's not, although I'm calling all the route blocks 
> and t_relay() does not return any errors...
>
> maciek
>
> Greger V. Teigre napisał(a):
>
>> 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
>>>
>>>
>>
>>
>
>
> ----------------------------------------------------------------------
> 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