--- /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);
+ }