--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/vpnengine/ikev2lib/src/Ikev2EapInterface.cpp Thu Dec 17 09:14:51 2009 +0200
@@ -0,0 +1,165 @@
+/*
+* 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: Implementation of classes CIkev2EapIf.
+*
+*/
+
+#include <eap_vpn_if.h>
+#include "ikedebug.h"
+#include "ikev2EapInterface.h"
+#include "ikev2payloads.h"
+#include "ikev2const.h"
+#include "ikepolparser.h"
+#include "ikev2plugin.h"
+
+CIkev2EapIf* CIkev2EapIf::NewL(MIkev2EapIfObserver& aEapIfObserver, TUint8 aEapType, CIkeData* aIkeData, MIkeDebug& aDebug)
+ {
+ CIkev2EapIf* eapIf = new (ELeave)CIkev2EapIf(aEapIfObserver, aEapType, aDebug);
+ CleanupStack::PushL(eapIf);
+ eapIf->ConstructL(aIkeData);
+ CleanupStack::Pop(eapIf);
+ return eapIf;
+ }
+
+CIkev2EapIf::CIkev2EapIf(MIkev2EapIfObserver& aEapIfObserver, TUint8 aEapType, MIkeDebug& aDebug)
+:iEapIfObserver(aEapIfObserver), iEapType(aEapType), iDebug(aDebug)
+ {
+ }
+
+void CIkev2EapIf::ConstructL(CIkeData* aIkeData)
+ {
+ //
+ // Construct EAP ECOM plug-in library.
+ // If ECOM plug-in loading fails return an error instead of leaving
+ //
+ DEBUG_LOG(_L("Constructing CEappluginInterface"));
+ iEapPlugin = CEapVpnInterface::NewL(this, ETrue);
+ DEBUG_LOG(_L("Starting CEappluginInterface"));
+ iEapPlugin->StartL(iEapType);
+
+ HBufC8* RealmPrefixBfr = NULL;
+ HBufC8* ManualRealmBfr = NULL;
+ HBufC8* ManualUserNameBfr = NULL;
+ TPtrC8 RealmPrefix(NULL,0);
+ TPtrC8 ManualRealm(NULL,0);
+ TPtrC8 ManualUserName(NULL,0);
+ TBool HideIdentity(EFalse);
+ if ( aIkeData )
+ {
+ HideIdentity = aIkeData->iEAPHideIdentity;
+ if ( aIkeData->iEAPRealmPrefix )
+ {
+ RealmPrefixBfr = aIkeData->iEAPRealmPrefix->GetAsciiDataL();
+ if ( RealmPrefixBfr )
+ RealmPrefix.Set(RealmPrefixBfr->Des());
+ }
+ if ( aIkeData->iEAPManualRealm )
+ {
+ ManualRealmBfr = aIkeData->iEAPManualRealm->GetAsciiDataL();
+ if ( ManualRealmBfr )
+ ManualRealm.Set(ManualRealmBfr->Des());
+ }
+ if ( aIkeData->iEAPManualUserName )
+ {
+ ManualUserNameBfr = aIkeData->iEAPManualUserName->GetAsciiDataL();
+ if ( ManualUserNameBfr )
+ ManualUserName.Set(ManualUserNameBfr->Des());
+ }
+ }
+
+ DEBUG_LOG(_L("Calling CEappluginInterface::EapConfigure"));
+ iErrorStatus = iEapPlugin->EapConfigure(
+ ManualUserName, ManualRealm, RealmPrefix, HideIdentity);
+
+ delete RealmPrefixBfr;
+ delete ManualRealmBfr;
+ delete ManualUserNameBfr;
+ }
+
+CIkev2EapIf::~CIkev2EapIf()
+ {
+ delete iEapPlugin;
+ delete iIdentity;
+ delete iMSK;
+ }
+
+void CIkev2EapIf::EapDataInbound(TPayloadIkev2* aEapPayload)
+ {
+ ASSERT(aEapPayload);
+ //
+ // Pass EAP payload data to EAP plug-in as inbound data
+ //
+ TInt Lth = (TInt)aEapPayload->PlDataLen();
+ TPtrC8 EapData(aEapPayload->PayloadData(), Lth);
+
+ DEBUG_LOG(_L("Calling CEappluginInterface::EapInbound"));
+ iEapPlugin->EapInbound(EapData);
+ }
+
+void CIkev2EapIf::QueryIdentity()
+ {
+ //
+ // Query identity information from EAP plugin for IKE Id
+ //
+ DEBUG_LOG(_L("Calling CEappluginInterface::QueryIdentity"));
+ iEapPlugin->QueryIdentity();
+ }
+
+void CIkev2EapIf::EapOutboundL(HBufC8* aResponse)
+ {
+ //
+ // Pass outgoing EAP data to IKEv2 plug-in
+ //
+ DEBUG_LOG(_L("Data received from CEappluginInterface"));
+ iEapIfObserver.SendEapDataL(aResponse);
+ }
+
+void CIkev2EapIf::EapIdentityResponseL(HBufC8* aResponse)
+ {
+ //
+ // Pass Identity data to IKEv2 plug-in
+ //
+ DEBUG_LOG(_L("Identity received from CEappluginInterface"));
+
+ delete iIdentity;
+ iIdentity = aResponse;
+
+ iEapIfObserver.EapEventL(KEapEventGetIdentity);
+ }
+
+void CIkev2EapIf::EapSharedKeyL(HBufC8* aResponse)
+ {
+ //
+ // Pass pre-shared key material to IKEv2 plug-in
+ //
+ DEBUG_LOG(_L("MSK received from CEappluginInterface"));
+
+ delete iMSK;
+ iMSK = aResponse;
+
+ iEapIfObserver.EapEventL(KEapEventGetPSK);
+ }
+
+void CIkev2EapIf::EapIndication(TNotification aNotification)
+ {
+ //
+ // Pass EAP notification to IKEv2 plug-in
+ //
+ DEBUG_LOG1(_L("EAP indication received from CEappluginInterface: %d"), aNotification);
+
+ TRAP_IGNORE( aNotification == ESuccess ?
+ iEapIfObserver.EapEventL(KEapEventSuccess) :
+ iEapIfObserver.EapEventL(KEapEventFailed) );
+ }
+