diff -r 000000000000 -r 33413c0669b9 vpnengine/ikev1lib/src/ikev1nokianattkeepalive.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vpnengine/ikev1lib/src/ikev1nokianattkeepalive.cpp Thu Dec 17 09:14:51 2009 +0200 @@ -0,0 +1,96 @@ +/* +* Copyright (c) 2007-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: Keepalive object for Nokia IPsec over NAT +* +*/ + + + +#include "ikedebug.h" +#include "ikev1pluginsession.h" +#include // TCommDbConnPref +#include "ikev1nokianattkeepalive.h" // CIkev1NokiaNattKeepAlive + +_LIT8(KMsgContent, "\xff"); + +CIkev1NokiaNattKeepAlive* CIkev1NokiaNattKeepAlive::NewL( CIkev1PluginSession& aPluginSession, + TInetAddr& aDestAddr, + TUint16 aPort, + TUint aInterval, + MIkeDebug& aDebug ) + { + CIkev1NokiaNattKeepAlive *self = new (ELeave) CIkev1NokiaNattKeepAlive( aPluginSession, + aDestAddr, + aPort, + aDebug ); + CleanupStack::PushL(self); + self->ConstructL(aInterval); + CleanupStack::Pop(self); + return self; + } + +CIkev1NokiaNattKeepAlive::~CIkev1NokiaNattKeepAlive() + { + if (iTimer) + { + iTimer->Cancel(); + delete iTimer; + iTimer = NULL; + } + + } + +CIkev1NokiaNattKeepAlive::CIkev1NokiaNattKeepAlive( CIkev1PluginSession& aPluginSession, + TInetAddr& aDestAddr, + TUint16 aPort, + MIkeDebug& aDebug ) +: iPluginSession(aPluginSession), + iDestAddr(aDestAddr), + iPort(aPort), + iMsg(KMsgContent), + iDebug(aDebug) + { + iDestAddr.SetPort(iPort); + } + + +void CIkev1NokiaNattKeepAlive::ConstructL(TUint aInterval) + { + /* + * Set up periodic timer + */ + + // Interval and initial delay + TTimeIntervalMicroSeconds32 interval(aInterval * 1000000); + + iTimer = CPeriodic::NewL(CActive::EPriorityStandard); + iTimer->Start(interval, interval, + TCallBack(CIkev1NokiaNattKeepAlive::PeriodicCallback, this)); + DEBUG_LOG(_L("CIkev1NokiaNattKeepAlive::ConstructL(aInterval) Constructed")); + } + +void CIkev1NokiaNattKeepAlive::Send() + { + TRAPD( err, iPluginSession.SendNokiaNatKeepAliveL( iDestAddr, iMsg, 0 ) ); + err = err; + DEBUG_LOG1(_L("CIkev1NokiaNattKeepAlive::Send() Request sending of keepalive packet, err=%d"), err); + } + +TInt CIkev1NokiaNattKeepAlive::PeriodicCallback(TAny *aPtr) + { + CIkev1NokiaNattKeepAlive *self = static_cast(aPtr); + self->Send(); + return KErrNone; + } +