0 Replies Latest reply: Aug 28, 2009 12:57 PM by 715547 RSS

    reordering of BYE and ACK

    715547
      hi,
      i'm using OCCAS 4.0 in conjunction with eyeBeam's x-lite UA and experience that OCCAS reorders the processing of a BYE and ACK in a way that the BYE is processed before the ACK althought the ACK is received earlier.

      the test servlet is pretty straight forward

      public class TestByeAck extends SipServlet
      {
      private static final Logger LOG = Logger.getLogger(TestByeAck.class);
      private boolean m_GotACK = false;

      protected void doInvite(SipServletRequest a_Request)
           throws ServletException, IOException
      {
      LOG.debug("doInvite:");
           a_Request.createResponse(SipServletResponse.SC_OK).send();
      LOG.debug("doInvite: done");
      }

      protected void doAck(SipServletRequest a_Request)
           throws ServletException, IOException
      {
      LOG.debug("doAck:");
      m_GotACK = true;
      LOG.debug("doAck: done");
      }

      protected void doBye(SipServletRequest a_Request)
           throws ServletException, IOException
      {
      LOG.debug("doBye:");
      if (m_GotACK)
      {
      LOG.debug("doBye: OK");
                a_Request.createResponse(SipServletResponse.SC_OK).send();           
      }
      else
      {
      LOG.debug("doBye: REQUEST PENDING");
                a_Request.createResponse(SipServletResponse.SC_REQUEST_PENDING).send();      
      }
      LOG.debug("doBye: done");
      }


      now the ethereal trace shows.

      OCCAS <--- INVITE (SDP) ---- UA
      OCCAS ---- 100 ----> UA
      OCCAS ---- 200 (NO SDP) ----> UA
      OCCAS <--- ACK ---- UA
      OCCAS <--- BYE ---- UA
      OCCAS ---- 491 (BYE) ---> UA


      teh log output of the servlet is
      test.TestByeAck - init:
      test.TestByeAck - init: done
      test.TestByeAck - doInvite:
      test.TestByeAck - doInvite: done
      test.TestByeAck - doBye:
      test.TestByeAck - doBye: REQUEST PENDING
      test.TestByeAck - doBye: done
      test.TestByeAck - doAck:
      test.TestByeAck - doAck: done


      is there a way to tell occas to keep the order of receiving the messages?

      also can this be fixed somehow?