[SR-Users] continue processing route script if no response from gateway

JR Richardson jmr.richardson at gmail.com
Thu May 27 18:23:35 CEST 2010


On Thu, May 27, 2010 at 10:09 AM, Henning Westerholt
<henning.westerholt at 1und1.de> wrote:
> On Thursday 27 May 2010, JR Richardson wrote:
>> > i assume according your description that the GW in question don't send a
>> > provisional response. Then the tm module should generate a internal 408
>> > after fr_timer interval which you could then catch in a failure_route. Do
>> > you armed the appropriate failure_route in your cfg?
>>
>> Yes, the gateway is totally off-line so no response comes back.  I do
>> have failure_route in the config.  This is related to another active
>> post from me "Carrierroute failover domain not working" so I'm sure
>> this is a redundant post, but your input is appreciated.
>>
>> The pastebin has my kamailio.cfg, the kamailio debug trace and the
>> error received by sipp and the ngrep capture.
>>
>> http://pastebin.com/VQziKYjE
>
> Hi JR,
>
> from the logs:
>
> INFO:carrierroute:cr_do_route: rewrite_uri_recursor doesn't complete, uri 65,
> carrier 1, domain 2
>
> this means that there was an error during the invocation of the cr_route in
> the failure_route[2]. Can you check if you've a rule with domain 2 in your
> carrierroute table?
>
> And you probably also want to use revert_uri() and append_branch(); in the
> failure_route before respectivly after the new cr_route, otherwise you'll
> probably run in to problems as well. I just noticed that there is an error in
> the first example in the cr docs, i'll fix it now. The second example uses
> this two commands.
>
> Regards,
>
> Henning
>
Ok, so I think we are on to something, in the first transaction the
uri was 3465@ which matched the database entry 34 in carrier 1 domain
1, but I also had strip_prefix-2 in there as well, so when the call
goes to the failure route the uri changes to 65@, which did not have a
match in carrier 1 domain 2.

So to test, I took the prefix matching and the strip_prefix out and
simplified the database entry to this:

carrierroute table:
carrier 1, domain 1, host A
carrier 1, domain 1, host B
carrier 1, domain 2, host C
carrier 1, domain 2, host D

carrierfailureroute table:
carrier 1, domain 1, host A, next domain 2
carrier 1, domain 1, host B, next domain 2
carrier 1, domain 2, host C, next domain 1
carrier 1, domain 2, host D, next domain 1

So now I see a call come in to kamailio and if host A & B are
off-line, I see in the debug the failure_route try to send the call to
host C & D, but I still have an error because I don't have a proper
branch route setup, and this is confusing, I don't understand what
that means?  Here is the error:

The uri is 3477@, call come in and hits the route[2], then goes to
failure_route.

May 27 11:04:04 [25716] INFO:carrierroute:cr_do_route: uri 3477 was
rewritten to sip:3477 at 10.10.14.104, carrier 1, domain 2
May 27 11:04:04 [25716] ERROR:tm:t_forward_nonack: no branch for forwarding
May 27 11:04:04 [25716] ERROR:tm:w_t_relay: t_forward_nonack failed
May 27 11:04:04 [25716] ERROR:tm:t_forward_nonack: no branch for forwarding
May 27 11:04:04 [25716] ERROR:tm:w_t_relay: t_forward_nonack failed

Here is the config snip:

route[2] {
        if(!cr_route("1", "1", "$rU", "$rU", "call_id")){
                sl_send_reply("403", "Not allowed");
        } else {
                t_on_failure("2");
                        t_relay();
        }
}

failure_route[2] {
        revert_uri();
        if (t_check_status("404|408|5[0-9][0-9]")) {
                if(!cr_route("1", "2", "$rU", "$rU", "call_id")){
                        t_reply("403", "Not allowed");
                } else {
                        t_relay();
                }
       }
}

So I guess I'm stuck on the error "ERROR:tm:t_forward_nonack: no
branch for forwarding".  I'm not sure how to setup a branch route from
the failure route.

Thanks

JR
-- 
JR Richardson
Engineering for the Masses



More information about the sr-users mailing list