[Serusers] Call forward on no answer in 0.10
Maciej Żwirski
mzwirek at poczta.fm
Wed Nov 29 14:26:53 CET 2006
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
More information about the sr-users
mailing list