diff -r 30e048a7b597 -r bad0cc58d154 eapol/eapol_framework/eapol_symbian/eap_if/src/EapCoreInterface.cpp --- /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; + } + } +