--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/vpnengine/ikev2lib/src/ikev2keepalive.cpp Thu Dec 17 09:14:51 2009 +0200
@@ -0,0 +1,95 @@
+/*
+* Copyright (c) 2003-2007 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: Common keep alive object
+*
+*/
+
+
+#include "ikev2keepalive.h"
+#include "ikemsgheader.h"
+#include "ikev2pluginsession.h"
+
+CIkeV2KeepAlive* CIkeV2KeepAlive::NewL(TInt DpdKeepAlive, MIkeV2DpdHeartBeatEventHandler& aHandler)
+{
+ CIkeV2KeepAlive* self = new (ELeave) CIkeV2KeepAlive(DpdKeepAlive, aHandler);
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop(self);
+ return self;
+}
+
+
+//Constructor
+CIkeV2KeepAlive::CIkeV2KeepAlive(TInt aDpdKeepAlive,
+ MIkeV2DpdHeartBeatEventHandler& aHandler)
+: CTimer(EPriorityStandard), iCallback(aHandler), iDpdKeepAlive(aDpdKeepAlive)
+{
+ __ASSERT_DEBUG(iDpdKeepAlive > 0, User::Invariant());
+ CActiveScheduler::Add(this);
+}
+
+//Destructor
+CIkeV2KeepAlive::~CIkeV2KeepAlive()
+{
+ if (IsActive())
+ Cancel();
+}
+
+
+void CIkeV2KeepAlive::ConstructL()
+{
+ //
+ // If NAT keepalive timoeut allocate (and initialize) a TIkeXmitBfr data buffer for
+ // NAT keepalive. Allocate a data buffer for special "Echo request"
+ // keepalive message, if proprietary "Nokia NAT Traversal is used".
+ // Start keep alive timer
+ //
+ CTimer::ConstructL();
+
+ iRemainingTime = iDpdKeepAlive;
+ StartTimer();
+}
+
+
+void CIkeV2KeepAlive::DoCancel()
+{
+ CTimer::DoCancel();
+}
+
+void CIkeV2KeepAlive::RunL()
+{
+ if ( iRemainingTime == 0 && iDpdKeepAlive)
+ {
+ iCallback.EventHandlerL();
+ iRemainingTime = iDpdKeepAlive;
+ }
+ StartTimer();
+}
+
+void CIkeV2KeepAlive::StartTimer()
+{
+
+ if ( iRemainingTime > KMaxTInt/1000000 ) //To avoid overflowing the Timer
+ {
+ iRemainingTime -= KMaxTInt/1000000;
+ After(KMaxTInt);
+ }
+ else //No overflow
+ {
+ if ( iRemainingTime )
+ After(iRemainingTime*1000000);
+ iRemainingTime = 0;
+ }
+}
+