[SR-Users] Branch variables in branch_failure_route
Daniel-Constantin Mierla
miconda at gmail.com
Wed Sep 14 16:36:00 CEST 2016
Hello,
there is no variable that is stored in the scope of the branch. What you
can use is a hash table and compose the key from callid and branch index
variables with expires that is same as transaction lifetime (max
retransmission timeout).
And indeed you need to 'touch' the r-uri in order to signal to kamailio
that you have a new destination and want to create a new branch. It may
work to just use append_branch(), otherwise reassigning $ru to itself
should do it.
Cheers,
Daniel
On 14/09/16 16:11, Paul Smith wrote:
> Hi,
> I am struggling to figure out variable scope in branches and
> branch_failure_routes. Is there a way to store a variable in a branch
> route so that I can then read it from the branch failure route if that
> branch fails? Also does writing $ru in branch_failure_route append a
> branch?
>
> For example I have multiple SIP devices registered to Kamailio on the
> same account credentials. The devices are behind same NAT, so same
> public IP. Some devices have SRTP required and some cannot use SRTP
> at all, Kamailio does not know in advance of the call whether the call
> will use SRTP or RTP.
>
> When I send a call to that user Kamailio correctly parallel forks to
> all the registered devices. I use rtpengine offer to send SDP with
> RTP/SAVP in the initial invites.
>
> If one of the devices sends a 488 due to not being able to handle the
> RTP/SAVP I then want to run rtpengine_offer with RTP/AVP and send
> another invite to the same device.
>
> In the branch failure route I seem to have to read the current $ru and
> then write it back into $ru before calling t_relay() or I get
> Sep 14 14:56:06 registrar-secure /usr/sbin/kamailio[10168]: ERROR: tm
> [t_fwd.c:1771]: t_forward_nonack(): ERROR: t_forward_nonack: no
> branches for forwarding
>
> This code seems to work, but it feels like I’m doing something very
> wrong…. in particular $avp(triedrtpout) is set for the transaction, I
> should be setting it separately for each branch.
>
> event_route[tm:branch-failure:SRTP] { # Handle failure response
> xlog("L_INFO", "Handling $T_reply_code response to $rm to
> ru: <$ru> and du: $du\n");
>
> if(t_check_status("488") && is_method("INVITE")) {
> if ($avp(triedsrtpout)==1) {
> # set $ru seems to create a new branch ...
> even when we set it to its current value.
> # we want to generate a new SIP INVITE to
> the same AOR but with different SDP
> $avp(buffer)=$ru;
> $ru=$avp(buffer);
> xlog("L_INFO","488 caught. Resending to $ru");
> # try with unencrypted RTP/AVP
> rtpengine_delete();
> rtpengine_offer("to-tag trust-address
> replace-origin replace-session-connection ICE=force RTP/AVP");
> if (!t_relay()) {
> sl_reply_error();
> }
>
> }
> }
> }
>
>
>
> I am using kamailio 4.2 debian package for this registrar.
>
> Sorry for the rambling question … I don’t understand enough to write
> the short version!
>
> Paul
>
>
>
> _______________________________________________
> SIP Express Router (SER) and Kamailio (OpenSER) - sr-users mailing list
> sr-users at lists.sip-router.org
> http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users
--
Daniel-Constantin Mierla
http://www.asipto.com - http://www.kamailio.org
http://twitter.com/#!/miconda - http://www.linkedin.com/in/miconda
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.sip-router.org/pipermail/sr-users/attachments/20160914/d59913a6/attachment.html>
More information about the sr-users
mailing list