Hi,

I have Kamailio set up to act as a proxy and load balancer.  Most things are working correctly but for some reason I can't get Kamailio to proxy an ACK to a 486 Busy.
I assume that it is something wrong that I have done in the kamailio.cfg file but I am not seeing it.

Does the t_check_trans() return false because the call state is Busy?

Please let me know if you need other logs or information.

Thanks in advance,
Carl



================== Call flow:  (from ngrep)  ======================

Asterisk     Kamailio     Provider
 INVITE--------->
                   INVITE--------->
<----------100 Trying
<---------100 Trying
<----------486 Busy
<---------486 Busy
ACK------------->
====== Kamailio does not proxy the ACK here =======
<----------486 Busy
<---------486 Busy
ACK------------->
<----------486 Busy
<---------486 Busy


=== kamailio.cfg snippet
...
route
{
   route(REQINIT);  # remove malformed messages

   # handle requests within SIP dialogs
   route(WITHINDLG);
  ...
}

###################################################################
# Handle requests within SIP dialogs (request has a TO: Tag)
route[WITHINDLG]
{
   if (has_totag())
   {
xlog("L_INFO", "  WITHINDLG: SIP Request: [$rm] ruri=[$ru]  (from [$fu] to [$tu], Call-ID=[$ci], CSeq=[$cs])\n");
      if (loose_route())
      {
         ...
      }
      else  # not loose_route
      {
         if ( is_method("ACK") )
         {
            if ( t_check_trans() )  # see if a message is related to a transaction
            {
               ...
            }
            else
            {
               # ACK without matching transaction ... ignore and discard
xlog("L_INFO", "  WITHINDLG: has TO: tag AND loose_route is NOT true and is_method = ACK and t_check_trans=FALSE\n");

# not forwarded here!!!   Tried both t_relay and forward.
               # $var(a) = t_relay();
               $var(a) = forward();
               xlog ("L_INFO", "  WITHINDLG: (ReturnCode = [$var(a)] exiting)\n");

               exit;
            }
         }
         sl_send_reply("404","Not here");
      }
      exit;
   }
}

============= End of kamailio.cfg ================


============= /var/log/messages - snippit of the message ==========

May 18 11:21:05 kam0 /usr/sbin/kamailio[21282]: INFO: <script>: ======== processing new message
May 18 11:21:05 kam0 /usr/sbin/kamailio[21282]: INFO: <script>: MAIN: SIP Request: [ACK] ruri=[sip:+13031112222@2.3.4.5]  (from [sip:+13031112222@3.4.5.6] to [sip:+13031112222@2.3.4.5], Call-ID=[21a30b9168e0a8c963d47ca1361cef77@3.4.5.6]) CSeq=[102]
May 18 11:21:05 kam0 /usr/sbin/kamailio[21282]: INFO: <script>:   WITHINDLG: SIP Request: [ACK] ruri=[sip:+13031112222@2.3.4.5]  (from [sip:+13031112222@3.4.5.6] to [sip:+13031112222@2.3.4.5], Call-ID=[21a30b9168e0a8c963d47ca1361cef77@3.4.5.6], CSeq=[102])
May 18 11:21:05 kam0 /usr/sbin/kamailio[21282]: INFO: <script>:   WITHINDLG: has TO: tag
May 18 11:21:05 kam0 /usr/sbin/kamailio[21282]: INFO: <script>:   WITHINDLG: has TO: tag AND loose_route is NOT true and is_method = ACK and t_check_trans=FALSE
May 18 11:21:05 kam0 /usr/sbin/kamailio[21282]: INFO: <script>:   WITHINDLG:    the ACK to a 486 was not being processed so I am adding t_relay here
May 18 11:21:05 kam0 /usr/sbin/kamailio[21282]: INFO: <script>:   WITHINDLG: (ReturnCode = [1] exiting)