diff -r 000000000000 -r 33413c0669b9 vpnengine/ikev1lib/inc/ikev1SA.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vpnengine/ikev1lib/inc/ikev1SA.h Thu Dec 17 09:14:51 2009 +0200 @@ -0,0 +1,116 @@ +/* +* Copyright (c) 2005-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: IKEv1 SA +* +*/ + + +#ifndef C_IKEV1SA_H +#define C_IKEV1SA_H + +#include "ikev1SAdata.h" +#include "ikev1keepalive.h" + +#define SECOND 1000000 // One second is 1000000 us. (1 us. per tick) +#define ISAKMP_DELETE_TIME 2*SECOND //Expiration time for a ISAKMP SA after it's erased + +class CIkev1PluginSession; +class CIkev1NokiaNattKeepAlive; +class MIkeDebug; + +//List of the IPSEC SAs negotiated by the ISAKMP SA +NONSHARABLE_CLASS(CIpsecSPIList) : public CArrayPtrFlat +{ + public: + CIpsecSPIList(TInt aGranularity); + ~CIpsecSPIList(); +}; + +NONSHARABLE_CLASS(CIkev1SA) : public CTimer, public MDpdHeartBeatEventHandler +{ + public: + static CIkev1SA* NewL( CIkev1PluginSession& aPluginSession, + TIkev1SAData& aIkev1SAdata, + CSARekeyInfo* aSaRekey, + MIkeDebug& aDebug ); + ~CIkev1SA(); + + void UpdateSAL( TBool aExpired, + TIkev1SAData* aIkev1SAdata ); + void ExpireSA(); + void AddIpsecSPIL( TIpsecSPI& aIpsecSpi ); + TBool FindIpsecSPI( TUint32 aSPI, + TBool aInbound ); + TBool DeleteIpsecSPI( TUint32 aSPI, + TBool aInbound ); + /** + * Deletes IPsec SAs and sends delete payload to the GW. + */ + void DeleteIpsecSAs(); + /** + * Deletes IPsec SAs without sending delete payload to the GW. + * Used when connection is lost. + */ + void DeleteIpsecSAsForced(); + void SetExpired(); + inline TBool IsExpired() {return iExpired;} + void EventHandlerL(); + + inline void SetDeactivating( TBool aDeactivating ) { iDeactivating = aDeactivating; } + inline TBool IsDeactivating() { return iDeactivating; } + + void CancelRekey(); + + protected: + // + // CActive methods + // + void DoCancel(); + void RunL(); + TInt RunError(TInt aError); + + private: + CIkev1SA( CIkev1PluginSession& aPluginSession, + MIkeDebug& aDebug ); + void ConstructL( TIkev1SAData& aIkev1SAdata, + CSARekeyInfo* aSaRekey ); + + void StartTimer(); + + public: + TIkev1SAData iHdr; // Common negotiation info + CIpsecSPIList* iSPIList; //Contains a SPIs List to know the direction when a delete received + + private: + CIkev1PluginSession& iPluginSession; + + TUint32 iRemainingTime; //Timer remaining + TUint32 iRemainingKB; //KB life remaining + TUint32 iCurrentBytes; //Bytes life currently added + + TUint32 iLeftOverTime; //Time remaining after rekey started + TBool iRekeyed; //Rekeyed SA + + CIkeV1KeepAlive* iIkeKeepAlive; // Pointer to common IKE keepalive object + + TBool iExpired; //The ISAKMP SA may be expired but waiting possible delete IPSEC SA msgs that arrive after + + CIkev1NokiaNattKeepAlive *iNokiaNatt; // Pointer to Nokia NAT-T keepalive object + + TBool iDeactivating; + + MIkeDebug& iDebug; +}; + +#endif // C_IKEV1SA_H