diff -r 000000000000 -r 33413c0669b9 vpnengine/ikev2lib/src/ikev2keepalive.cpp --- /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; + } +} +