#585 Branch route has wrong ruri or missing headers

ver 1.4.x
Alex Hermann

The scenario:
In branch route, I rewrite the ruri and add an additional header. When the destination fails and DNS-based failover takes place, the branch route is called again. For this second branch, the ruri is not the same as the ruri at t_relay time. Also the extra header is missing.

So this bug could be either:

- The ruri and rest of variables/packet for each branch should be the same as the ruri at t_relay time
- The header added in the first branch route should also be present for the second branch (in the case of DNS-based failover)

I would either expect the ruri and all other variables and headers to be exactly the same as at t_relay time for each branch, or (for DNS-based failover ONLY) the packet sent to a failover destination to be exactly the same as the first branch (including any added headers / from replacement, etc.) Not a mix of both.

Before t_relay:

$rU = "*1234567890"

my branch route:
xlog("L_NOTICE", "Branch: <$ru> via <$du>\n");
if (is_method("INVITE") and $(rU{s.substr,0,3}) == "*12") {
append_hf("X-Test: 12\r\n");

The log:

Jul 15 09:14:38 Branch: <sip:*1234567890@test.domain;transport=udp> via <<null>>
Jul 15 09:14:38 Reply Status: 503 Service Unavailable
Jul 15 09:14:38 Branch: <sip:234567890@test.domain;transport=udp> via <<null>>
Jul 15 09:14:38 Reply Status: 100 Trying


  • Alex Hermann
    Alex Hermann

    And when there is no response at all from th destination, resulting in a local generated 408, the behaviour is even different. Then branch route isn't called at all, but the packet headed for the failover host is different from the original as it misses any headers added in the branch route.

  • Have you said on the mailing list that calling t_on_branch() from branch_route gets what you need?

  • Alex Hermann
    Alex Hermann

    It does, but the inconsistency stays. The ruri in branch_route after DNS failover is different from the ruri in the branch_route of the initial t_relay if in that branch_route, the ruri is rewritten.