realtimenetprots/sipfw/SIP/Transaction/src/TransactionTimer.cpp
changeset 0 307788aac0a8
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/realtimenetprots/sipfw/SIP/Transaction/src/TransactionTimer.cpp	Tue Feb 02 01:03:15 2010 +0200
@@ -0,0 +1,192 @@
+// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// Name          : TransactionTimer.cpp
+// Part of       : Transaction
+// Version       : SIP/5.0
+//
+
+
+
+#include "SipAssert.h"
+#include "sipstrings.h"
+#include "sipresponse.h"
+#include "TransactionTimer.h"
+#include "ServerTransaction.h"
+
+// -----------------------------------------------------------------------------
+// CTransactionTimer::CTransactionTimer
+// -----------------------------------------------------------------------------
+//
+CTransactionTimer::CTransactionTimer(MTimerManager& aTimerMgr,
+									 MExpirationHandler* aObserver,
+									 TUint32 aDuration) :
+	CTimerBase(aTimerMgr, aObserver, aDuration)
+	{
+    __ASSERT_DEBUG(aObserver,
+		User::Panic(_L("CTransactionTimer::CTransactionTimer() aObserver = 0"),
+		KErrArgument));
+	}
+
+// -----------------------------------------------------------------------------
+// CTimerRetransmit::NewL
+// -----------------------------------------------------------------------------
+//
+CTimerRetransmit* CTimerRetransmit::NewL(MTimerManager& aTimerMgr,
+										 MExpirationHandler* aObserver,
+										 TUint32 aDuration)
+	{
+	CTimerRetransmit* self = new (ELeave) CTimerRetransmit(aTimerMgr,
+														   aObserver,
+														   aDuration);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+// -----------------------------------------------------------------------------
+// CTimerRetransmit::CTimerRetransmit
+// -----------------------------------------------------------------------------
+//
+CTimerRetransmit::CTimerRetransmit(MTimerManager& aTimerMgr,
+								   MExpirationHandler* aObserver,
+								   TUint32 aDuration) :
+	CTransactionTimer(aTimerMgr, aObserver, aDuration)	
+	{
+	}
+
+// -----------------------------------------------------------------------------
+// CTimerRetransmit::ExpiredL
+// Retransmit a SIP message, unless CTransmitter is sending. That happen only if
+// InviteServerTransaction receives INVITE, sends response and timer G expires
+// before CTransmitter has finished sending.
+// -----------------------------------------------------------------------------
+//
+void CTimerRetransmit::ExpiredL(CTransaction& aTransaction, TTimerId aTimerId)
+	{
+    __SIP_ASSERT_LEAVE(aTimerId == iId, KErrArgument);
+
+	if (!aTransaction.IsTransmitterSending())
+		{
+		aTransaction.SendToTransmitterL();
+		}
+	}
+
+// -----------------------------------------------------------------------------
+// CTimerTerminateTa::NewL
+// -----------------------------------------------------------------------------
+//
+CTimerTerminateTa* CTimerTerminateTa::NewL(MTimerManager& aTimerMgr,
+										   MExpirationHandler* aObserver,
+										   TUint32 aDuration,
+										   TInt aReason)
+	{
+	CTimerTerminateTa* self = new (ELeave) CTimerTerminateTa(aTimerMgr,
+															 aObserver,
+															 aDuration,
+															 aReason);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+// -----------------------------------------------------------------------------
+// CTimerTerminateTa::CTimerTerminateTa
+// -----------------------------------------------------------------------------
+//
+CTimerTerminateTa::CTimerTerminateTa(MTimerManager& aTimerMgr,
+									 MExpirationHandler* aObserver,
+									 TUint32 aDuration,
+									 TInt aReason) :
+	CTransactionTimer(aTimerMgr, aObserver, aDuration),
+	iReason(aReason)
+	{
+	}
+
+// -----------------------------------------------------------------------------
+// CTimerTerminateTa::ExpiredL
+// -----------------------------------------------------------------------------
+//
+void CTimerTerminateTa::ExpiredL(CTransaction& aTransaction, TTimerId aTimerId)
+	{
+    __SIP_ASSERT_LEAVE(aTimerId == iId, KErrArgument);
+
+	aTransaction.TerminatedL(iReason);
+	}
+
+// -----------------------------------------------------------------------------
+// CTimerSend100::NewL
+// -----------------------------------------------------------------------------
+//
+CTimerSend100* CTimerSend100::NewL(MTimerManager& aTimerMgr,
+								   MExpirationHandler* aObserver,
+								   TUint32 aDuration,
+								   CSIPResponse* aResponse,
+								   RStringF aTransportProtocol,
+								   TSIPTransportParams& aTransportParams)
+	{
+	CTimerSend100* self = new (ELeave) CTimerSend100(aTimerMgr,
+													 aObserver,
+													 aDuration,													 
+								   					 aTransportProtocol,
+								   					 aTransportParams);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	self->iResponse = aResponse;
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+// -----------------------------------------------------------------------------
+// CTimerSend100::CTimerSend100
+// -----------------------------------------------------------------------------
+//
+CTimerSend100::CTimerSend100(MTimerManager& aTimerMgr,
+						     MExpirationHandler* aObserver,
+						     TUint32 aDuration,						     
+						     RStringF aTransportProtocol,
+							 TSIPTransportParams& aTransportParams) :
+	CTransactionTimer(aTimerMgr, aObserver, aDuration),	
+	iTransportParams(aTransportParams)
+	{
+	iTransportProtocol = aTransportProtocol.Copy();
+	}
+
+// -----------------------------------------------------------------------------
+// CTimerSend100::~CTimerSend100
+// -----------------------------------------------------------------------------
+//
+CTimerSend100::~CTimerSend100()
+	{
+	delete iResponse;
+	iTransportProtocol.Close();
+	}
+
+// -----------------------------------------------------------------------------
+// CTimerSend100::ExpiredL
+// -----------------------------------------------------------------------------
+//
+void CTimerSend100::ExpiredL(CTransaction& aTransaction, TTimerId aTimerId)
+	{
+    __SIP_ASSERT_LEAVE(aTimerId == iId, KErrArgument);
+
+	CSIPResponse* resp = iResponse;
+	iResponse = NULL;
+	CleanupStack::PushL(resp);
+
+	//Causes transaction to delete this timer, so don't refer it afterwards.
+	aTransaction.SendResponseL(resp, iTransportProtocol, iTransportParams);
+	CleanupStack::Pop(resp);
+	}