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

Reply via email to