--- /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<IV_LTH> 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 <draft-dukes-ike-mode-cfg-01.txt> and
+ * Extended Authentication within IKE (XAUTH) <draft-beaulieu-ike-xauth-02.txt>
+ * 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<TTransExchange *>, 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