// -----------------------------------------------------------------------------
// CInviteClientTa_Calling::ReceiveL
// If 2xx is received, UAC terminates the transaction. Stop timers when
// transaction can't return to previous state (ReceiveResponseL has returned).
// -----------------------------------------------------------------------------
//
void CInviteClientTa_Calling::ReceiveL(CTransaction& aTransaction,
	                                   CSIPResponse* aResponse) const
	{
    __SIP_ASSERT_LEAVE(aResponse, KErrArgument);

	CInviteClientTransaction& ta = CInviteClientTransaction::Ptr(aTransaction);

	if (ta.ShouldTaHandleResponse(aResponse))
		{
		CTransactionTimer* proceedingTimer = NULL;
		CTransactionTimer* natTimer = NULL;
		if (!CSIPMessageUtility::IsFinalResponse(*aResponse))
			{
			proceedingTimer = ta.StartTimerProceedingL();
			natTimer = ta.StartTimerNATL();
            aTransaction.ChangeState(*iProceeding);
			}

		ta.ReceiveResponseL(aResponse,
							*this,
							*iCompleted,
							proceedingTimer,
							natTimer);
        //Stop retransmission timer A. Timer B has only effect in Calling state
		ta.StopTimerA();
		ta.StopTimerB();
		}
	}