diff -r 000000000000 -r af10295192d8 tcpiputils/dhcp/src/ExpireTimer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tcpiputils/dhcp/src/ExpireTimer.cpp Tue Jan 26 15:23:49 2010 +0200 @@ -0,0 +1,126 @@ +// Copyright (c) 2004-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: +// Expire Timer class definition file +// +// + +/** + @file ExpireTimer.cpp + @internalTechnology +*/ + +#include "ExpireTimer.h" + +CExpireTimer* CExpireTimer::NewL() +/** + * Create an instance of the timer + * + * @internalTechnology + */ + { + CExpireTimer* timer = new(ELeave)CExpireTimer(); + CleanupStack::PushL(timer); + timer->ConstructL(); + CleanupStack::Pop(timer); + return timer; + } + +void CExpireTimer::After(TTimeIntervalMicroSeconds32 aSeconds,MExpireTimer& aExpireTimer) + { + ASSERT(!IsAdded()); + CActiveScheduler::Add(this); + iExpireTimer = &aExpireTimer; + iExpirationTime.HomeTime(); + iExpirationTime += aSeconds; + CTimer::After( aSeconds ); + } + +void CExpireTimer::After(TTimeIntervalSeconds aSeconds, MExpireTimer& aExpireTimer) + { + ASSERT(!IsAdded()); + CActiveScheduler::Add(this); + iExpireTimer = &aExpireTimer; + TTime time; + time.HomeTime(); + time+=aSeconds; + iExpirationTime = time; + CTimer::At(time); + } + +void CExpireTimer::At(TTime aTime, MExpireTimer& aExpireTimer) + { + ASSERT(!IsAdded()); + CActiveScheduler::Add(this); + iExpireTimer = &aExpireTimer; + TTime now; + now.HomeTime(); + if (now > aTime) + aTime = now + static_cast(5); + iExpirationTime = aTime; + CTimer::At(aTime); + } + + +void CExpireTimer::Cancel() +/** + * Cancel the timer + * + * @internalTechnology + */ + { + CTimer::DoCancel(); + if (IsAdded()) + { + Deque(); + } + } + +CExpireTimer::~CExpireTimer() +/** + * Timer destructor + * + * @internalTechnology + */ + { + Cancel(); + } + +void CExpireTimer::RunL() +/** + * RunL function alerts the notification + * object by calling its TimerExpired interface function + * + * @internalTechnology + */ + { + ASSERT(iExpireTimer); + if (iStatus == KErrAbort) + { + //Deal with system time change. + TTime now; + now.HomeTime(); + + //If its not going to expire in the next five seconds reset it + if (now < iExpirationTime + static_cast(5)) + { + CTimer::At(iExpirationTime); + return; + } + } + + Deque(); + iExpireTimer->TimerExpired(); + } + +