diff -r 000000000000 -r 33413c0669b9 vpnengine/ikev1lib/inc/ikev1trans.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vpnengine/ikev1lib/inc/ikev1trans.h Thu Dec 17 09:14:51 2009 +0200 @@ -0,0 +1,155 @@ +/* +* 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: IKE transaction exchange implementation. +* +*/ + + +#ifndef IKEV1TRANS_H +#define IKEV1TRANS_H + +#include "ikev1dialog.h" +#include "ikev1payloads.h" + +/*--------------------------------------------------------------------------- + * + * Transaction exchange return codes (returned by ExecuteL() method) + * + *---------------------------------------------------------------------------*/ +#define TRANSACTION_SUCCESS 0 +#define TRANSACTION_CONTINUE 0x1 +#define TRANSACTION_IGNORE 0x2 +#define TRANSACTION_FAILED 0x4 + +#define IV_LTH 20 +/**-------------------------------------------------------------------------- + * + * Structure TTransExchange + * Contains parameter data related one ISAKMP Transaction exchange + * + *--------------------------------------------------------------------------*/ +struct TTransExchange +{ + TUint32 iMessageId; + TUint16 iIdentifier; + TUint16 iXauthType; + TInt iRole; + TBuf8 iIV; + TTransExchange() + { + iMessageId = 0; + iIdentifier = 0; + iXauthType = 0; + iRole = 0; + }; +}; + + +class CIkev1Negotiation; +class ThdrISAKMP; +class CAuthDialogInfo; +class CInternalAddress; +class TIkev1IsakmpStream; +class MIkeDebug; +class TInetAddr; + +/**-------------------------------------------------------------------------- + * + * CTransNegotiation class + * Handles ISAKMP transaction exchange messages + * Both the ISAKMP Configuration Method and + * Extended Authentication within IKE (XAUTH) + * has been implemented using ISAKMP transaction exchange messages. + * This class handles both the transaction exchange message handling and + * config mode/XAUTH protocol processing. + * + *--------------------------------------------------------------------------*/ +NONSHARABLE_CLASS(CTransNegotiation) : public CArrayFixFlat, public MIkeDialogComplete +{ +public: + ~CTransNegotiation(); + static CTransNegotiation* NewL( TBool aUseXauth, + TBool aUseCfgMode, + CIkev1PluginSession* aPluginSession, + CIkev1Negotiation* aNegotiation, + MIkeDebug& aDebug ); + TInt ExecuteL( const ThdrISAKMP& aHdr, + const TInetAddr& aSrcAddr, + TInt aLocalPort ); + TInt ProcessUserResponseL(CAuthDialogInfo *aDialogInfo ); + TInt TransactionFailedL(const TNotificationISAKMP *aNotifPayload); + TBool GetIV(TUint32 aMsgId, TDes8& aIV); + TBool SetIV(TUint32 aMsgId, TDes8& aIV); + CInternalAddress* GetInternalAddr() + { + CInternalAddress* ia = iInternalAddr; + iInternalAddr = NULL; + return ia; + } + static TUint16 GetAuthMethod(TUint16 aAuthMethod, TBool aXauthUsed, TInt aRole); + static void BuildXauthVendorId(TIkev1IsakmpStream &aMsg); + + TInt DialogCompleteL(CIkev1Dialog* aDialog, TAny* aUserInfo, HBufC8* aUsername, + HBufC8* aSecret, HBufC8* aDomain); + TInt BuildConfigRequestL(); + +private: + TTransExchange* FindExchange(TUint32 aMsgId); + TTransExchange* AddExchangeL(TUint32 aMsgId, TUint8 aRole); + TUint16 GetIdentifier() + { + iIdentifierBase --; + if ( (iIdentifierBase & 0xffff) == 0 ) + iIdentifierBase --; + return (TUint16)iIdentifierBase; + } + TInt TransactionExchangeL(const ThdrISAKMP &aHdr); + TInt ProcessAttributesL(const TAttributeISAKMP *aAttr); + TInt ProcessCfgModeAttrsL(TDataISAKMP* aAttr, TInt aLth); + TInt ProcessXauthRequestL(TDataISAKMP* aAttr, TInt aLth); + TInt ProcessXauthStatusL(TDataISAKMP* aAttr, TInt aLth); + TInt CheckTransactionStatusL(TInt aStatus); + void AddAttributeData(TDes8& aAttrBfr, TInt aType, TInt aLth, TUint8* aData); + void BuildAndSendMessageL(TDesC8& aAttrBfr, TUint8 aMsgType); + CTransNegotiation( TInt aGranularity, + TBool aUseXauth, + TBool aUseCfgMode, + CIkev1PluginSession* aPluginSession, + CIkev1Negotiation* aNegotiation, + MIkeDebug& aDebug ); + void ConstructL(); + +private: + CIkev1PluginSession* iPluginSession; + CIkev1Negotiation* iNegotiation; + CInternalAddress* iInternalAddr; + TTransExchange* iCurrExchange; + CIkev1Dialog* iDialog; + CAuthDialogInfo* iDialogInfo; + HBufC8* iUserName; // Saved for User name caching + + TBool iUseXauth; + TBool iUseCfgMode; + TUint32 iIdentifierBase; + TUint32 iRequestFlags; + TBool iXauthCompleted; + TBool iCfgModeCompleted; + TBool iUseOlderPIXXauth; // use draft-ietf-ipsec-isakmp-xauth-04.txt + + TLastIKEMsg iLastTransMsgInfo; + MIkeDebug& iDebug; +}; + + +#endif // IKEV1TRANS_H