Hello Daniel,

I think your guess about failure_route is correct. Here is the related piece of config. Actually I can not find any append_branch() call in config (which is not originally developed by me).

failure_route[1] {
        if (t_was_cancelled()) {
                exit;
        }

        if (t_check_status("408|403|404|488|480|415|50[0-4]")) {
                if (next_gw()) {
                        t_on_failure("1");
                        route(6);
                }
                else
                {
                        route(6);
                }
        }
}

route[6] {
        if (!t_relay()) {
                sl_reply_error();
        }
        exit;
}

Cheers,
Max.

On Tue, Jul 19, 2011 at 3:37 PM, Daniel-Constantin Mierla <miconda@gmail.com> wrote:
Hello,


On 7/13/11 5:51 PM, Max Doronin wrote:
Hello guys,

I have strange behavior on my Kamailio-1.5.1-notls instance.

I have LCR and TM modules enabled.For a particular destination I have
4 routes to try. When I call to non-existing number, it tries
- route 1 (404 Not Found)
- route 2 (404 Not Found)
- route 3 (503 Service unavailable)

And the problem is with the last 503.

Kamailio ACKs it, immediately drops these 2 lines into syslog
Jul 13 04:14:47 /usr/local/sbin/kamailio[23572]:
ERROR:tm:t_forward_nonack: no branch for forwarding
Jul 13 04:14:47 /usr/local/sbin/kamailio[23572]: ERROR:tm:w_t_relay:
t_forward_nonack failed
And sends
SIP/2.0 500 Server error occurred (19/SL).
To the call originator.

30 microseconds later it sends
SIP/2.0 500 Service Unavailable.
to the originator again

Latter 500 looks like the relayed original "503 Service unavailable".
I think so because the Reason header is the same:
Reason: SIP;cause=503;text="Service
Unavailable";icodetext="NoCircuitAvailable";iintcode=10034;isubsystem=3.

Obviously call is terminated.

I noticed that that last peer rewrites my Via headers like this:
Original:
==
Via: SIP/2.0/UDP 187.45.214.132;branch=z9hG4bK3dac.fae9b793.2.
Via: SIP/2.0/UDP
192.168.2.33:5622;received=49.49.59.23;branch=z9hG4bK-d8754z-a6ba40014f97fb7c-1---d8754z-;rport=23832.
==

Rewritten
==
Via: SIP/2.0/UDP
187.45.214.132;received=187.45.214.132;branch=z9hG4bK3dac.fae9b793.2,SIP/2.0/UDP
192.168.2.33:5622;received=49.49.59.23;branch=z9hG4b
==

I tried to modify via1_matching parameter (1 ->  0) but no changes.

My questions are:
- What can be the reason of that 500 with 19/SL
- Can kamailio properly handle this 1 line Via header?
- What can be the reason of that "t_forward_nonack: no branch for forwarding"?

it seems you try to forward one more time, but there is no new branch where to send. I guess there is some issue in the failure_route, like calling t_relay() even if the new branch is not added. If you can paste it here, I can tell more clear if something is wrong there.

Cheers,
Daniel

--
Daniel-Constantin Mierla -- http://www.asipto.com
Kamailio Advanced Training, Oct 10-13, Berlin: http://asipto.com/u/kat
http://linkedin.com/in/miconda -- http://twitter.com/miconda