public void visitResponse(final SipResponse response) {
    m_log.debug("SIP client transaction visiting response...");
    if (this.m_timerBFired) {
      m_log.warn("Received response after timer B fired!!");
      return;
    }

    m_log.debug("Canceling TIMER B");
    // Tell timer B not to fire.
    this.m_timerB.cancel();

    if (response.getStatusCode() == 200) {
      setTransactionTime();
      if (m_log.isDebugEnabled()) {
        m_log.debug("Transaction time: " + getTransactionTime());
      }
      for (final OfferAnswerTransactionListener listener : this.m_transactionListeners) {
        listener.onTransactionSucceeded(response);
      }
    } else {
      m_log.warn("Received non OK response: " + response.getStatusCode());
    }
  }
 private void notifyListenersOfFailure(final OfferAnswerMessage response) {
   setTransactionTime();
   for (final OfferAnswerTransactionListener listener : this.m_transactionListeners) {
     listener.onTransactionFailed(response);
   }
 }