/**
  * Method derived from interface SipListener. It's fired from the SipProvider when a new message
  * is received for to the present TransactionClient.
  */
 public void onReceivedMessage(SipProvider provider, Message msg) {
   if (msg.isResponse()) {
     int code = msg.getStatusLine().getCode();
     if (code >= 100 && code < 200 && (statusIs(STATE_TRYING) || statusIs(STATE_PROCEEDING))) {
       if (statusIs(STATE_TRYING)) changeStatus(STATE_PROCEEDING);
       if (transaction_listener != null)
         transaction_listener.onTransProvisionalResponse(this, msg);
       return;
     }
     if (code >= 200 && code < 700 && (statusIs(STATE_TRYING) || statusIs(STATE_PROCEEDING))) {
       retransmission_to.halt();
       transaction_to.halt();
       changeStatus(STATE_COMPLETED);
       if (code < 300) {
         if (transaction_listener != null) transaction_listener.onTransSuccessResponse(this, msg);
       } else {
         if (transaction_listener != null) transaction_listener.onTransFailureResponse(this, msg);
       }
       transaction_listener = null;
       if (true || connection_id == null) // modified
       clearing_to.start();
       else {
         printLog("clearing_to=0 for reliable transport", LogLevel.LOW);
         onTimeout(clearing_to);
       }
       return;
     }
   }
 }