Hello,

I'm handling a 300 Multiple Choices reply in an onreply_route as described the Opensips Blog post "Handling SIP Redirect Requests in realtime".

The problem I'm seeing is while iterating the contacts through the $ct variable, only one of the two contact records in the SIP message is returned.  Instead it seemingly substitutes the initial contact for one of the returned contacts.  I think I should be getting all the contacts in the message and not the initial contact as I read the documentation.

This system is running Opensips v3.2.6

Below is the SIP message (from sngrep), the onreply_route script, and the log output.

2022/05/02 21:12:54.183024 23.101.143.54:5060 -> 192.46.219.150:5060
SIP/2.0 300 Multiple Choices
Via: SIP/2.0/UDP 192.46.219.150:5060;branch=z9hG4bKe01e.fcabc446.0;i=881249d1
Via: SIP/2.0/TCP 
192.168.49.125:5080;received=67.172.178.64;branch=z9hG4bKBHcBe35Be3KjH
Max-Forwards: 69
From: 15074529949 
<sip:[email protected]>;tag=jDtDtDmmXaXtQ
To: 12187299716 <sip:[email protected]:5060>;tag=6ayH1QZrymXSS
Call-ID: 79021022-44ff-123b-42ba-001fc69ce9dd
CSeq: 51209194 INVITE
Contact: "unknown" <sip:[email protected]>;q=0.129
Contact: "unknown" <sip:[email protected]>;q=0.128
User-Agent: FreeSWITCH-mod_sofia/1.10.5-release-17-25569c1631~64bit
Accept: application/sdp
Allow: INVITE, ACK, BYE, CANCEL, OPTIONS, MESSAGE, INFO, UPDATE, REGISTER, 
REFER, NOTIFY
Supported: timer, path, replaces
Allow-Events: talk, hold, conference, refer
Reason: Q.850;cause=31;text="NORMAL_UNSPECIFIED"
Content-Length: 0
X-FS-Display-Name: 12187299716
X-FS-Display-Number: sip:[email protected]
Remote-Party-ID: "12187299716" 
<sip:[email protected]>;party=calling;privacy=off;screen=no

onreply_route[RTPENGINE]{

  xlog("OnReply RTPENGINE: Status = $rs");

  if (t_check_status("300")){
    $var(n) = 0;

    xlog("OnReply RTPENGINE: contact $ct.fields(uri)");
    xlog("OnReply RTPENGINE: last contact $(ct.fields(uri)[-1])");
    xlog("OnReply RTPENGINE: first contact $(ct.fields(uri)[0])");
    xlog("OnReply RTPENGINE: second contact $(ct.fields(uri)[1])");
    xlog("OnReply RTPENGINE: third contact $(ct.fields(uri)[2])");

    while ($(ct[$var(n)]) != NULL) {

      xlog("OnReply RTPENGINE: var(n) = $var(n)");
      if ($(ct.fields(uri)[$var(n)]) != NULL) {

         xlog("OnReply RTPENGINE: appending branch = $(ct.fields(uri)[$var(n)]) : 
var(n) = $var(n)");
         append_branch($(ct.fields(uri)[$var(n)]));

      }
      $var(n) = $var(n) + 1;
    }

    t_inject_branches("msg");
  }

  if (has_body("application/sdp")){
    # c flag handles duplicate c= lines in SDP
    rtpengine_answer("c");
  }
}

May  2 21:12:54 opensipsprod1 /usr/sbin/opensips[30007]: OnReply RTPENGINE: 
Status = 300
May  2 21:12:54 opensipsprod1 /usr/sbin/opensips[30007]: DBG:tm:t_check_status: 
checked status is <300>
May  2 21:12:54 opensipsprod1 /usr/sbin/opensips[30007]: 
DBG:core:parse_headers: flags=ffffffffffffffff
May  2 21:12:54 opensipsprod1 /usr/sbin/opensips[30007]: OnReply RTPENGINE: 
contact sip:[email protected]:5060
May  2 21:12:54 opensipsprod1 /usr/sbin/opensips[30007]: 
DBG:core:parse_headers: flags=ffffffffffffffff
May  2 21:12:54 opensipsprod1 /usr/sbin/opensips[30007]: DBG:core:parse_params: 
Parsing params for:[q=0.128]
May  2 21:12:54 opensipsprod1 /usr/sbin/opensips[30007]: OnReply RTPENGINE: 
last contact sip:[email protected]
May  2 21:12:54 opensipsprod1 /usr/sbin/opensips[30007]: 
DBG:core:parse_headers: flags=ffffffffffffffff
May  2 21:12:54 opensipsprod1 /usr/sbin/opensips[30007]: OnReply RTPENGINE: 
first contact sip:[email protected]:5060
May  2 21:12:54 opensipsprod1 /usr/sbin/opensips[30007]: 
DBG:core:parse_headers: flags=ffffffffffffffff
May  2 21:12:54 opensipsprod1 /usr/sbin/opensips[30007]: OnReply RTPENGINE: 
second contact sip:[email protected]
May  2 21:12:54 opensipsprod1 /usr/sbin/opensips[30007]: 
DBG:core:parse_headers: flags=ffffffffffffffff
May  2 21:12:54 opensipsprod1 /usr/sbin/opensips[30007]: OnReply RTPENGINE: third 
contact <null>
May  2 21:12:54 opensipsprod1 /usr/sbin/opensips[30007]: 
DBG:core:parse_headers: flags=ffffffffffffffff
May  2 21:12:54 opensipsprod1 /usr/sbin/opensips[30007]: OnReply RTPENGINE: 
var(n) = 0
May  2 21:12:54 opensipsprod1 /usr/sbin/opensips[30007]: 
DBG:core:parse_headers: flags=ffffffffffffffff
May  2 21:12:54 opensipsprod1 /usr/sbin/opensips[30007]: 
DBG:core:parse_headers: flags=ffffffffffffffff
May  2 21:12:54 opensipsprod1 /usr/sbin/opensips[30007]: OnReply RTPENGINE: 
appending branch = sip:[email protected]:5060 : va
r(n) = 0
May  2 21:12:54 opensipsprod1 /usr/sbin/opensips[30007]: 
DBG:core:parse_headers: flags=ffffffffffffffff
May  2 21:12:54 opensipsprod1 /usr/sbin/opensips[30007]: 
DBG:core:parse_headers: flags=ffffffffffffffff
May  2 21:12:54 opensipsprod1 /usr/sbin/opensips[30007]: OnReply RTPENGINE: 
var(n) = 1
May  2 21:12:54 opensipsprod1 /usr/sbin/opensips[30007]: 
DBG:core:parse_headers: flags=ffffffffffffffff
May  2 21:12:54 opensipsprod1 /usr/sbin/opensips[30007]: 
DBG:core:parse_headers: flags=ffffffffffffffff
May  2 21:12:54 opensipsprod1 /usr/sbin/opensips[30007]: OnReply RTPENGINE: 
appending branch = sip:[email protected] : var(n)
 = 1

Thanks for your help

Dan Cooper


_______________________________________________
Users mailing list
[email protected]
http://lists.opensips.org/cgi-bin/mailman/listinfo/users

Reply via email to