[SR-Users] Loosing rtp only in carrierroute failureroute

Oliver Roth oliver.roth at triotel.ch
Tue Oct 29 12:49:43 CET 2013


Hi all 

We do have a strange problem with loosing rtp in case of carrierroute - failureroute.
If we send traffic directly to the failure gateway, we do have rtp without any problem

Situation:
Ua --> Freeswitch --> kamailio 3.3 --> gw 1 Error 404 --> failureroute --> media gateway voiceprompt for error 404
==> this does not work

Ua --> Freeswitch --> kamailio 3.3 rewrite to dest for voiceprompt 404  -->media gateway voiceprompt for error 404
==> this works!!

Any idea?
For me it seems being a problem with branching or so.

Regards,
Oli

Configs below:

Main routing block

request_route {
	--- do all the checks

	route(CARRIERROUTE);
	route(RELAY);
}


route[RELAY] {
	xlog(, "L_INFO", "RELAY: Outbound sent via $avp(s:trunk_out)");
	# enable additional event routes for forwarded requests
	# - serial forking, RTP relaying handling, a.s.o.
	if (is_method("INVITE|SUBSCRIBE")) {
		t_on_branch("MANAGE_BRANCH");
		t_on_reply("MANAGE_REPLY");
		xlog(,"L_INFO", "RELAX - Manage branch ...\n");
	}
	if (is_method("INVITE")) {
		t_on_failure("MANAGE_FAILURE");
	}

	if (!t_relay()) {
		sl_reply_error();
	}
	exit;
}

# carrierroute
route[CARRIERROUTE] {
	xlog(,"L_INFO","Carrierroute module start \n");
	$avp(s:tree) = "default";
	
	# lookup from user and from domain
	cr_user_carrier("$fU", "$avp(s:trunk_in)", "$avp(s:cr_pref_carr)");

	if($avp(s:cr_pref_carr) == 0){
		# lookup from domain
		cr_user_carrier("", "$avp(s:trunk_in)", "$avp(s:cr_pref_carr)");
	}	

	if(!cr_route("$avp(s:cr_pref_carr)", "$avp(s:tree)", "$rU", "$rU", "call_id", "$avp(s:todirection)" )){
		xlog("cr_route 403 no route found $avp(s:cr_pref_carr)");
               	sl_send_reply("403", "Not allowed");
		exit;
        }
	$avp(s:trunk_out) = $avp(s:todirection);
	route(ALTERHEADER);

}


failure_route[MANAGE_FAILURE] {
	
        if (t_grep_status("486")){
                xlog("L_INFO", "Status 486 - busy");
                t_reply("486", "Busy");
        }


	#revert_uri();
	route(NATMANAGE);

	if (t_is_canceled()) {
                exit;
        }

	xlog("L_INFO", "failure_route $rd $T_reply_code $avp(s:trunk_in), $avp(s:tree), $rU, $rd, $T_reply_code, $avp(s:tree) \n");

	if(!cr_next_domain("$avp(s:cr_pref_carr)", "$avp(s:tree)", "$rU", "$avp(s:trunk_in)", "$T_reply_code", "$avp(s:tree)" )){
              	xlog("cr_next_domain failed");
		exit;
	}

	if(!cr_route("$avp(s:cr_pref_carr)", "$avp(s:tree)", "$rU", "$rU", "call_id", "$avp(s:todirection)" )){
		xlog("cr_route failed");
		exit;
        }
	$avp(s:trunk_out) = $avp(s:todirection);


	if (is_method("INVITE"))
	{
		setflag(FLT_ACC); # do accounting
		setflag(FLT_ACCMISSED); # oro 28.10.13
	}
	

	
	route(ALTERHEADER);

	t_on_failure("MANAGE_FAILURE");

	if (!t_relay()) {
	       	xlog("failureroute t_relay failed");
  	     	exit;
        }

}



More information about the sr-users mailing list