simpleengine/siputils/src/simplerefreshtimer.cpp
changeset 0 c8caa15ef882
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/simpleengine/siputils/src/simplerefreshtimer.cpp	Tue Feb 02 01:05:17 2010 +0200
@@ -0,0 +1,241 @@
+/*
+* Copyright (c) 2006 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:    Refresh timer
+*
+*/
+
+
+
+
+
+
+// INCLUDES
+#include <e32base.h>
+#include <e32std.h>
+#include "simplerefreshtimer.h"
+#include "simplesipconncallback.h"
+
+#ifdef _DEBUG
+#include "simpledebugutils.h"
+#endif
+
+
+// CONSTANTS
+
+const TInt KUseAfterLimit = 240;
+
+// ======== LOCAL FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// Refresh timer
+// ---------------------------------------------------------------------------
+//
+
+// ======== MEMBER FUNCTIONS ========
+
+CSimpleRefreshTimer::CSimpleRefreshTimer(
+    MSimpleSipConnCallback& aEngine, CSimpleRequest& aReq  )
+    : CActive( CActive::EPriorityStandard),
+      iEngine(aEngine), iRequest( aReq )
+
+    {
+    // Add this to the scheduler
+    (void) iTimer.CreateLocal();
+    CActiveScheduler::Add(this);
+    }
+
+CSimpleRefreshTimer::~CSimpleRefreshTimer()
+    {
+    Cancel();
+    iTimer.Close();
+    }
+
+// -----------------------------------------------------------------------------
+// CSimpleRefreshTimer::Start
+// -----------------------------------------------------------------------------
+void CSimpleRefreshTimer::Start( TInt aWaitSeconds )
+    {
+#ifdef _DEBUG
+    TSimpleLogger::Log(_L("RefreshTimer: Start %d sec" ), aWaitSeconds );
+#endif
+
+    // Cancel is needed because of the timer may be reset.
+    Cancel();
+
+    if ( aWaitSeconds <= 0)
+        {
+        return;
+        }
+
+    iSeconds = aWaitSeconds;
+    
+    // The At function caused a CUserbase-Panic 46 in very small
+    // time values. 1-4 seconds. Now if the KeepAlive time
+    // is smaller than UseAfterLimit, then we use the After function
+    // If it is larger then use the At function
+    // The reason not to use the After function for every situation is
+    // that the TInt overflows after 35 minutes. 1000000*60*36 > 2^31
+    if( iSeconds <= KUseAfterLimit )
+        {
+        iTimer.After( iStatus, iSeconds * 1000000 );
+        }
+    else
+        {
+        TTime myKeepAlive;
+        myKeepAlive.HomeTime();
+        myKeepAlive += TTimeIntervalSeconds( iSeconds );
+        iTimer.At( iStatus, myKeepAlive );
+        }
+    iStatus = KRequestPending;
+    SetActive();
+
+    }
+
+// -----------------------------------------------------------------------------
+// CSimpleRefreshTimer::DoCancel
+// -----------------------------------------------------------------------------
+void CSimpleRefreshTimer::DoCancel( )
+    {
+#ifdef _DEBUG
+    TSimpleLogger::Log(_L("RefreshTimer: DoCancel" ));
+#endif
+    iTimer.Cancel();
+    }
+
+// -----------------------------------------------------------------------------
+// CSimpleRefreshTimer::RunL
+// -----------------------------------------------------------------------------
+void CSimpleRefreshTimer::RunL(  )
+    {
+#ifdef _DEBUG
+    TSimpleLogger::Log(_L("RefreshTimer: RunL" ));
+#endif
+    // Inside StartToRefreshL this entity may be deleted,
+    // thus after the method call do not do anything in RunL.
+    iEngine. StartToRefreshL( iRequest );
+    }
+
+// -----------------------------------------------------------------------------
+// CSimpleRefreshTimer::RunError
+// -----------------------------------------------------------------------------
+TInt CSimpleRefreshTimer::RunError(TInt /*aError*/)
+    {
+#ifdef _DEBUG
+    TSimpleLogger::Log(_L("RefreshTimer: RunError" ));
+#endif
+    return KErrNone;
+    }
+    
+    
+// ---------------------------------------------------------------------------
+// Expiry timer
+// ---------------------------------------------------------------------------
+//
+
+// ======== MEMBER FUNCTIONS ========
+
+CSimpleExpiryTimer::CSimpleExpiryTimer(
+    MSimpleSipConnCallback& aEngine, CSimpleRequest& aReq  )
+    : CActive( CActive::EPriorityStandard),
+      iEngine(aEngine), iRequest( aReq )
+
+    {
+    // Add this to the scheduler
+    (void) iTimer.CreateLocal();
+    CActiveScheduler::Add(this);
+    }
+
+CSimpleExpiryTimer::~CSimpleExpiryTimer()
+    {
+    Cancel();
+    iTimer.Close();
+    }
+
+// -----------------------------------------------------------------------------
+// CSimpleExpiryTimer::Start
+// -----------------------------------------------------------------------------
+void CSimpleExpiryTimer::Start( TInt aWaitSeconds )
+    {
+#ifdef _DEBUG
+    TSimpleLogger::Log(_L("ExpiryTimer: Start %d sec" ), aWaitSeconds );
+#endif
+
+    // Cancel is needed because of the timer may be reset.
+    Cancel();
+
+    if ( aWaitSeconds <= 0 )
+        {
+        return;
+        }
+
+    iSeconds = aWaitSeconds;
+
+    // The At function caused a CUserbase-Panic 46 in very small
+    // time values. 1-4 seconds. Now if the KeepAlive time
+    // is smaller than UseAfterLimit, then we use the After function
+    // If it is larger then use the At function
+    // The reason not to use the After function for every situation is
+    // that the TInt overflows after 35 minutes. 1000000*60*36 > 2^31
+    if( iSeconds <= KUseAfterLimit )
+        {
+        iTimer.After( iStatus, iSeconds * 1000000 );
+        }
+    else
+        {
+        TTime myKeepAlive;
+        myKeepAlive.HomeTime();
+        myKeepAlive += TTimeIntervalSeconds( iSeconds );
+        iTimer.At( iStatus, myKeepAlive );
+        }
+    iStatus = KRequestPending;
+    SetActive();
+
+    }
+
+// -----------------------------------------------------------------------------
+// CSimpleExpiryTimer::DoCancel
+// -----------------------------------------------------------------------------
+void CSimpleExpiryTimer::DoCancel( )
+    {
+#ifdef _DEBUG
+    TSimpleLogger::Log(_L("ExpiryTimer: DoCancel" ));
+#endif
+    iTimer.Cancel();
+    }
+
+// -----------------------------------------------------------------------------
+// CSimpleExpiryTimer::RunL
+// -----------------------------------------------------------------------------
+void CSimpleExpiryTimer::RunL(  )
+    {
+#ifdef _DEBUG
+    TSimpleLogger::Log(_L("ExpiryTimer: RunL" ));
+#endif
+    iEngine.StartToCheckExpiryL( iRequest );
+    // Inside StartToCheckExpiryL this entity may be deleted,
+    // thus after the method call do not do anything in RunL.    
+    }
+
+// -----------------------------------------------------------------------------
+// CSimpleExpiryTimer::RunError
+// -----------------------------------------------------------------------------
+TInt CSimpleExpiryTimer::RunError(TInt /*aError*/)
+    {
+#ifdef _DEBUG
+    TSimpleLogger::Log(_L("ExpiryTimer: RunError" ));
+#endif
+    return KErrNone;
+    }
+    
+