--- /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<TTimeIntervalSeconds>(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<TTimeIntervalSeconds>(5))
+ {
+ CTimer::At(iExpirationTime);
+ return;
+ }
+ }
+
+ Deque();
+ iExpireTimer->TimerExpired();
+ }
+
+