Hi Benoit,
On 30 Jan 2024, at 08:28, Benoit Panizzon
<benoit.panizzon(a)imp.ch> wrote:
Hi Alex
As is often the case, there is a useful
opportunity here to step back, switch to decaf, and ask why you want to call
'exit' from a branch_route in the first place.
:-)
Actually I intended to call 'return(1)' to stop processing that actual
route and continue in the calling route at the point when all work is
done.
This will happen naturally, because branch_route, like onreply_route, is essentially a
callback/event hook, not a request route subroutine.
In other words:
request_route {
...
t_on_branch("BRANCH");
...
other_stuff(); # will execute after branch_route
t_relay();
...
}
branch_route[BRANCH] {
branch_scoped_stuff();
}
I wrapped everything in if/else and I am re-testing.
But on the first glimpse, I still seem to get corrupted stuff at a
certain point in branching like $du being null instead of the intended
destination of that branch.
Am I right, that $du should contain the sip URI of where the INVITE is
being routed to in the branch route? Or am I mistaking here?
Not necessarily; $du is only used to override the RURI ($ru), where needed. Otherwise, the
domain portion of the request URI is consumed by t_relay() to make the next-hop
determination.
You can access the next-hop determination using $nh(...):
https://www.kamailio.org/wikidocs/cookbooks/5.7.x/pseudovariables/#nhkey
In most of my branches, $du is correctly pointing to
the next hop (so I
can use it to determine how to engage RTPengine), but sometimes it's
null and I still didn't figure out why.
$du is not mandatorily populated, as mentioned above. Consider $nh(...) instead.
In terms of the original question you posed, why not do this?
request_route {
...
if(jittery)
t_on_branch("BRANCH_DECAF");
else
t_on_branch("BRANCH_REGULAR");
t_relay();
}
-- Alex
--
Alex Balashov
Principal Consultant
Evariste Systems LLC
Web:
https://evaristesys.com
Tel: +1-706-510-6800