diff -r 000000000000 -r 33413c0669b9 vpnengine/ikev2lib/inc/ikev2acquire.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vpnengine/ikev2lib/inc/ikev2acquire.h Thu Dec 17 09:14:51 2009 +0200 @@ -0,0 +1,133 @@ +/* +* Copyright (c) 2003-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: IKEv2 Acquire definition +* Class CIkev2Acquire is a IKEv2 specific data structure +* containing information needed, when establishing a new +* IPsec SA +*/ + + +#ifndef __IKEV2ACQUIRE_H__ +#define __IKEV2ACQUIRE_H__ + +#include + +#include "ipsecsalifetime.h" + +class TPfkeyMessage; +class TInetAddr; +struct TIpsecSaSpec; +class CIpsecSARekeyData; +class TIkeV2TrafficSelector; + +// +// +// CIkev2Acquire +// This class is used to handle PFKEY Acquire primitives received from +// Ipsec plug-in. +// + +NONSHARABLE_CLASS(CIkev2Acquire) : public CBase +{ + public: + static CIkev2Acquire* NewL(const TPfkeyMessage& aPfkeyMessage, TUint32 aId, + const TInetAddr& aLocalAddr, TUint16 aDHGroup, TBool aImplicitSa, + const TIpsecSaSpec* aSaSpec = 0, const CIpsecSARekeyData* aRekeyData = 0); + static CIkev2Acquire* NewL(TUint32 aId, HBufC8* aSa, + CArrayFix* aTS_i, + CArrayFix* aTS_r ); + static void Link(CIkev2Acquire* aAcquire, CIkev2Acquire** aAnchor); + static CIkev2Acquire* Find(TUint32 aId, CIkev2Acquire** aAnchor, TBool aRemove=EFalse); + static void PurgeQue(CIkev2Acquire** aAnchor); + static TBool Responding(CIkev2Acquire** aAnchor); + static CIkev2Acquire* GetNext(CIkev2Acquire** aAnchor, TBool aResponse); + static void SetFirst(CIkev2Acquire* aAcquire, CIkev2Acquire** aAnchor); + static CIkev2Acquire* PeekFirst(CIkev2Acquire** aAnchor); + static CIkev2Acquire* RemoveFromQue(TUint32 aId, CIkev2Acquire** aAnchor); + + TUint32 Id(); + TPtrC8 SPI_In(); + TPtrC8 SPI_Out(); + TPtrC8 SPI_ToBeRekeyed(); + void SetSPI_In(const TDesC8& aSPI); + void SetSPI_Out(const TDesC8& aSPI); + void SetSPI_ToBeRekeyed(const TDesC8& aSPI); + TUint16 DHGroup(); + void DHGroup(TUint16 aDHGroup); + TBool Transport(); + void SetTransport(); + TBool Response(); + void SetResponse(); + void SetHardLifetime(const TIpsecSALifetime& aHard ); + TIpsecSALifetime* HardLifetime(); + void SetSoftLifetime(const TIpsecSALifetime& aSoft ); + TIpsecSALifetime* SoftLifetime(); + TUint8 ReplayWindow(); + void SetReplayWindow(TUint8 aReplayWindow); + TUint32 Pid(); + void SetPid(TUint32 aPfKeyPid); + TUint32 Seq(); + void SetSeq(TUint32 aPfKeySeq); + void SetVirtualIp(); + TBool ForVirtualIp(); + TBool SrcSpecific(); + void SetSrcSpecific(TBool aSrcSpecific); + TUint8 IpsecProtocol(); + void SetIpsecProtocol(TUint8 aProtocol); + + HBufC8* LocalId(); + HBufC8* RemoteId(); + HBufC8* SA()const; + void AddIpsecSpiToSa(const TDesC8& aSpi); + const CArrayFix& TS_i(); + const CArrayFix& TS_r(); + void ReplaceSA(HBufC8* aSA); + void ReplaceTS_i(CArrayFix* aTS); + void ReplaceTS_r(CArrayFix* aTS); + void ReplaceLocalId(HBufC8* aId); + void ReplaceRemoteId(HBufC8* aId); + + CIkev2Acquire(TInt aId); + ~CIkev2Acquire(); + + private: + void ConstructL(const TPfkeyMessage& aReq, const TInetAddr& aLocalAddr, TUint16 aDHGroup, TBool aImplicitSa, + const TIpsecSaSpec* aSaSpec, const CIpsecSARekeyData* aRekeyData); + + private: + TUint32 iId; // Unique sequence number for GETSPI + TBuf8<4> iSPIIn; // Ipsec SPI value in (local SPI) + TBuf8<4> iSPIOut; // Ipsec SPI value out (remote SPI) + TBuf8<4> iSPIToBeRekeyed;// Ipsec SPI value of IPSec SA to be rekeyed + TUint32 iDHGroup; // DH group for PFS + TBool iTransport; // Transport Mode requested + TBool iResponse; // Object is for Child SA response + TBool iSrcSpecific; // Requested SA is "local address" specific + TBool iForVirtualIp; // This Acquire is just for getting virtual IP + TInt iReplayWindow; // Ipsec replay window value + TInt iProtocol; // Ipsec protocol + TUint32 iPfKeyPid; // Saved from PFKEY Acquire + TUint32 iPfKeySeq; // Saved from PFKEY Acquire + TIpsecSALifetime iHard; + TIpsecSALifetime iSoft; + HBufC8* iSA; // Ipsec SA payload built from Pfkey Acquire + + CArrayFix* iTS_i; // Local Traffic selector info + CArrayFix* iTS_r; // Remote Traffic selector info + HBufC8* iLocalId; // Local Id data, if any + HBufC8* iRemoteId; // Remote Id data, if any + CIkev2Acquire* iNext; // Next pending acquire +}; + +#endif /* __IKEV2ACQUIRE_H__ */