eapol/eapol_framework/eapol_symbian/eap_if/src/EapCoreInterface.cpp
branchRCL_3
changeset 18 bad0cc58d154
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eapol/eapol_framework/eapol_symbian/eap_if/src/EapCoreInterface.cpp	Tue Aug 31 15:16:37 2010 +0300
@@ -0,0 +1,204 @@
+/*
+* Copyright (c) 2001-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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:  EAP and WLAN authentication protocols.
+*
+*/
+
+/*
+* %version: 21 %
+*/
+
+#include "EapCoreInterface.h"
+#include "eap_am_tools.h"
+#include "EapolUID.h"
+#include "EapPluginTools.h"
+
+CEapCoreInterface::CEapCoreInterface(const u32_t MTU):
+  iClient(NULL)
+  ,iIsValid(FALSE)
+  ,iTools(0)
+  ,iEapCoreInterface(0)
+  ,iServer(0)
+  ,iMTU(MTU)
+     {
+     }
+
+CEapCoreInterface::~CEapCoreInterface()
+    {
+    delete iEapCoreInterface;
+    }
+
+EAP_FUNC_EXPORT CEapProcessInterface* CEapCoreInterface::ConstrucL(abs_eap_am_tools_c * const tools)
+    {
+    iTools = tools;
+
+    //TInt implementationUid( EAP_CORE_INTERFACEIMPLEMENTATION_IMPLEMENTATION_UID );
+
+	const TUid KimplementationInterfaceUid = { EAP_CORE_INTERFACEIMPLEMENTATION_INTERFACE_UID };
+		
+    RImplInfoPtrArray aImplInfoArray;
+
+	CleanupStack::PushL( TCleanupItem( EapPluginTools::CleanupImplArray, &aImplInfoArray ) );
+
+    REComSession::ListImplementationsL(KimplementationInterfaceUid,
+            aImplInfoArray);
+
+	   	EAP_TRACE_DEBUG(
+	      tools, 
+	      TRACE_FLAGS_DEFAULT, 
+	      (EAPL("CEapCoreInterface::ConstrucL Implementation %d\n"),aImplInfoArray[0]->ImplementationUid().iUid));
+
+    iServer = CEapProcessInterface::NewL(
+            aImplInfoArray[0]->ImplementationUid().iUid,
+            this);
+
+    EAP_TRACE_DEBUG(
+      tools, 
+      TRACE_FLAGS_DEFAULT, 
+      (EAPL("CEapCoreInterface::ConstrucL CEapProcessInterface::NewL done\n")));
+
+    iIsValid = TRUE;
+
+	CleanupStack::PopAndDestroy(&aImplInfoArray);
+
+    return iServer;
+    
+    }
+
+EAP_FUNC_EXPORT eap_am_message_if_c * new_eap_am_client_message_if_c(
+        abs_eap_am_tools_c * const tools,
+        const bool /* is_client_when_true */,
+        const u32_t MTU)
+    {   
+     CEapCoreInterface * aEapCoreInterface = 0;
+     CEapProcessInterface* aServer =0;
+     
+	   	EAP_TRACE_DEBUG(
+	      tools, 
+	      TRACE_FLAGS_DEFAULT, 
+	      (EAPL("new_eap_am_client_message_if_c()\n")));
+	      
+     aEapCoreInterface = new CEapCoreInterface(MTU);
+     if (aEapCoreInterface != 0)
+         {
+		 TRAPD( err, aServer = aEapCoreInterface->ConstrucL(tools));
+         if (err)
+             {    
+             	EAP_TRACE_DEBUG(
+				        tools, 
+				        TRACE_FLAGS_DEFAULT, 
+				        (EAPL("new_eap_am_client_message_if_c() NO SERVER IF, err = %d\n"),err));
+
+               return 0;
+             }
+         else if(aServer == NULL)
+            {
+             	EAP_TRACE_DEBUG(
+				        tools, 
+				        TRACE_FLAGS_DEFAULT, 
+				        (EAPL("new_eap_am_client_message_if_c() SERVER IF == 0\n")));
+          	}   
+         else
+  	       {
+	    	   aServer->SetEnv(tools, MTU);
+  	       }
+          
+         }
+       else
+       		{
+          EAP_TRACE_DEBUG(
+				        tools, 
+				        TRACE_FLAGS_DEFAULT, 
+				        (EAPL("new_eap_am_client_message_if_c() new(ELeave) CEapCoreInterface(MTU) failed\n")));
+       	 	return 0;
+					}
+     return aEapCoreInterface;
+
+    }
+
+EAP_FUNC_EXPORT bool CEapCoreInterface::get_is_valid()
+    {
+    EAP_TRACE_DEBUG(
+             iTools, 
+             TRACE_FLAGS_DEFAULT, 
+             (EAPL("CEapCoreInterface::get_is_valid() = %d\n"),iIsValid ));
+      return iIsValid;
+    }
+
+EAP_FUNC_EXPORT eap_status_e CEapCoreInterface::process_data(const void * const data, const u32_t length)
+    {
+    EAP_TRACE_DEBUG(
+            iTools, 
+            TRACE_FLAGS_DEFAULT, 
+            (EAPL("CEapCoreInterface::process_data()\n")));
+
+    TInt err = iServer->ProcessData(data, length);
+
+    return EAP_STATUS_RETURN(iTools, iTools->convert_am_error_to_eapol_error(err));
+    }
+
+
+EAP_FUNC_EXPORT eap_status_e CEapCoreInterface::configure(
+	const eap_variable_data_c * const client_configuration)
+    {
+    EAP_TRACE_DEBUG(
+            iTools, 
+            TRACE_FLAGS_DEFAULT, 
+            (EAPL("CEapCoreInterface::configure()\n")));
+
+    TInt err = iServer->Configure(0,0,0, client_configuration->get_data(), client_configuration->get_data_length());
+
+    return EAP_STATUS_RETURN(iTools, iTools->convert_am_error_to_eapol_error(err));
+    }
+
+// This is documented in abs_eap_stack_interface_c::shutdown().
+EAP_FUNC_EXPORT eap_status_e CEapCoreInterface::shutdown()
+    {
+    EAP_TRACE_DEBUG(
+            iTools, 
+            TRACE_FLAGS_DEFAULT, 
+            (EAPL("CEapCoreInterface::shutdown()\n")));
+
+    TInt err = iServer->Shutdown();
+
+    return EAP_STATUS_RETURN(iTools, iTools->convert_am_error_to_eapol_error(err));
+    }
+
+EAP_FUNC_EXPORT void CEapCoreInterface::set_partner(abs_eap_am_message_if_c * const client)
+    {
+    EAP_TRACE_DEBUG(
+            iTools, 
+            TRACE_FLAGS_DEFAULT, 
+            (EAPL("CEapCoreInterface::set_partner()\n")));
+    iClient = client;
+    }
+
+EAP_FUNC_EXPORT TInt CEapCoreInterface::SendData(
+    const void * const aData, 
+    const TInt aLength )
+    {
+    EAP_TRACE_DEBUG(
+            iTools, 
+            TRACE_FLAGS_DEFAULT, 
+            (EAPL("CEapCoreInterface::SendData()\n")));
+    if (iClient != NULL)
+        {
+        return iClient->send_data( aData, aLength);
+        }
+    else
+        {
+        return KErrNone;
+        }
+    }
+