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@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
_______________________________________________ SIP Express Router (SER) and Kamailio (OpenSER) - sr-users mailing list sr-users@lists.sip-router.org http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users