diff -r 30e048a7b597 -r bad0cc58d154 eapol/eapol_framework/eapol_symbian/am/type/generic/symbian/plugin/src/EapGeneric.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/eapol/eapol_framework/eapol_symbian/am/type/generic/symbian/plugin/src/EapGeneric.cpp Tue Aug 31 15:16:37 2010 +0300 @@ -0,0 +1,1179 @@ +/* +* Copyright (c) 2001-2006 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: 57 % +*/ + +// This is enumeration of EAPOL source code. +#if defined(USE_EAP_MINIMUM_RELEASE_TRACES) + #undef EAP_FILE_NUMBER_ENUM + #define EAP_FILE_NUMBER_ENUM 739 + #undef EAP_FILE_NUMBER_DATE + #define EAP_FILE_NUMBER_DATE 1127594498 +#endif //#if defined(USE_EAP_MINIMUM_RELEASE_TRACES) + + +// INCLUDE FILES + +#include "EapGeneric.h" +#include "EapConversion.h" +#include "eap_base_type.h" +#include "eap_method_settings.h" +#include "eap_am_assert.h" +#include +#include "abs_eap_am_tools.h" +#include "eap_automatic_variable.h" +#include // for CnvUtfConverter +#include "abs_eap_plugin_message.h" +#include "eap_plugin_message_base.h" +#include "abs_eap_am_message_if.h" +#include "eap_am_message_if.h" +#include "eap_automatic_variable.h" +#include "eap_plugin_client_message_if.h" +#include "eap_am_message_if_symbian.h" +#include "EapTraceSymbian.h" + +// LOCAL CONSTANTS + +// The version number of this interface. +const TUint KInterfaceVersion = 1; + + +// ================= MEMBER FUNCTIONS ======================= + + +CEapGeneric::CEapGeneric( + const TIndexType aIndexType, + const TInt aIndex, + const TEapExpandedType aEapType) +: m_am_tools(abs_eap_am_tools_c::new_abs_eap_am_tools_c()) +, m_server(eap_plugin_message_base_c::new_eap_plugin_client_message_if_c( + m_am_tools, + this)) +, iIndexType(aIndexType) +, iIndex(aIndex) +, iEapType(aEapType) +, iTunnelingType(eap_type_none) +, iTunnelingTypePresent(false) +, iWaitState(eap_generic_wait_state_none) +, iCompletionStatus(eap_status_process_general_error) + +, ipEAPSettings(0) +{ + EAP_TRACE_DEBUG( + m_am_tools, + TRACE_FLAGS_DEFAULT, + (EAPL("CEapGeneric::CEapGeneric(): this=0x%08x, aIndexType=%d, aIndex=%d.\n"), + this, + aIndexType, + aIndex)); + + EAP_TRACE_RETURN_STRING(m_am_tools, "returns: CEapGeneric::CEapGeneric()"); +} + +// ---------------------------------------------------------- + +void CEapGeneric::ConstructL() +{ + EAP_TRACE_DEBUG( + m_am_tools, + TRACE_FLAGS_DEFAULT, + (EAPL("CEapGeneric::ConstructL(): this=0x%08x.\n"), + this)); + + EAP_TRACE_RETURN_STRING(m_am_tools, "returns: CEapGeneric::ConstructL()"); + + if (m_am_tools == 0 + || m_am_tools->get_is_valid() == false + || m_server == 0 + || m_server->get_is_valid() == false) + { + abs_eap_am_tools_c::delete_abs_eap_am_tools_c(m_am_tools); + delete m_server; + + User::Leave(KErrNoMemory); + } + + eap_status_e status = m_server->configure(); + if (status != eap_status_ok) + { + abs_eap_am_tools_c::delete_abs_eap_am_tools_c(m_am_tools); + delete m_server; + + User::Leave(KErrNoMemory); + } +} + +// ---------------------------------------------------------- + +CEapGeneric* CEapGeneric::NewL(SIapInfo *aIapInfo) +{ + CEapGeneric* self = new(ELeave) CEapGeneric(aIapInfo->indexType, aIapInfo->index, aIapInfo->aEapType); + + CleanupStack::PushL(self); + + self->ConstructL(); + + CleanupStack::Pop(); + + return self; +} + +// ---------------------------------------------------------- + +CEapGeneric::~CEapGeneric() +{ + EAP_TRACE_DEBUG( + m_am_tools, + TRACE_FLAGS_DEFAULT, + (EAPL("CEapGeneric::~CEapGeneric(): this=0x%08x.\n"), + this)); + + // Do not use m_am_tools, because it will be destroyed before return. + EAP_TRACE_RETURN_STRING_SYMBIAN(_L("returns: CEapGeneric::~CEapGeneric()")); + + if (m_server != 0) + { + m_server->shutdown(); + } + delete m_server; + + abs_eap_am_tools_c::delete_abs_eap_am_tools_c(m_am_tools); +} + +// ---------------------------------------------------------- + +#ifdef USE_EAP_SIMPLE_CONFIG + +eap_base_type_c* CEapGeneric::GetStackInterfaceL(abs_eap_am_tools_c* const aTools, + abs_eap_base_type_c* const /* aPartner */, + const bool /* is_client_when_true */, + const eap_am_network_id_c * const /* receive_network_id */, + abs_eap_configuration_if_c * const /*configuration_if*/) + +#else + +eap_base_type_c* CEapGeneric::GetStackInterfaceL(abs_eap_am_tools_c* const aTools, + abs_eap_base_type_c* const /* aPartner */, + const bool /* is_client_when_true */, + const eap_am_network_id_c * const /* receive_network_id */) + +#endif // #ifdef USE_EAP_SIMPLE_CONFIG +{ + EAP_UNREFERENCED_PARAMETER(aTools); + // This class does not have stack interface. + EAP_TRACE_DEBUG( + m_am_tools, + TRACE_FLAGS_DEFAULT, + (EAPL("ERROR: CEapGeneric::GetStackInterfaceL(): this=0x%08x\n"), + this)); + + EAP_ASSERT_ANYWAY_TOOLS(aTools); + + return 0; +} + +//---------------------------------------------------------------- + +void CEapGeneric::Activate() +{ + EAP_TRACE_DEBUG( + m_am_tools, + TRACE_FLAGS_DEFAULT, + (EAPL("CEapGeneric::Activate(): iAsyncronousStatus=%u\n"), + iAsyncronousStatus.Int())); + + EAP_TRACE_RETURN_STRING(m_am_tools, "returns: CEapGeneric::Activate()"); + + iAsyncronousStatus = KRequestPending; +} + +//---------------------------------------------------------------- + +void CEapGeneric::Complete() +{ + EAP_TRACE_DEBUG( + m_am_tools, + TRACE_FLAGS_DEFAULT, + (EAPL("CEapGeneric::Complete(): iAsyncronousStatus=%u\n"), + iAsyncronousStatus.Int())); + + EAP_TRACE_RETURN_STRING(m_am_tools, "returns: CEapGeneric::Complete()"); + + iAsyncronousStatus = KErrNone; + + // This is needed to continue the execution after Wait.Start(); + iWait.AsyncStop(); +} + +//---------------------------------------------------------------- + +void CEapGeneric::WaitCompletion() +{ + EAP_TRACE_DEBUG( + m_am_tools, + TRACE_FLAGS_DEFAULT, + (EAPL("CEapGeneric::WaitCompletion(): iAsyncronousStatus=%u\n"), + iAsyncronousStatus.Int())); + + EAP_TRACE_RETURN_STRING(m_am_tools, "returns: CEapGeneric::WaitCompletion()"); + + while (iAsyncronousStatus == KRequestPending) + { + EAP_TRACE_DEBUG( + m_am_tools, + TRACE_FLAGS_DEFAULT, + (EAPL("CEapGeneric::WaitCompletion(): calls iWait.Start()\n"))); + + iWait.Start(); + + EAP_TRACE_DEBUG( + m_am_tools, + TRACE_FLAGS_DEFAULT, + (EAPL("CEapGeneric::WaitCompletion(): iWait.Start() continue, iAsyncronousStatus=%u\n"), + iAsyncronousStatus.Int())); + } +} + +// ---------------------------------------------------------- + +void CEapGeneric::SetCompletionStatusIfStillOk(const eap_status_e status) +{ + EAP_TRACE_DEBUG( + m_am_tools, + TRACE_FLAGS_DEFAULT, + (EAPL("CEapGeneric::SetCompletionStatusIfStillOk(): iCompletionStatus=%u=%s, status=%d=%s\n"), + iCompletionStatus, + eap_status_string_c::get_status_string(iCompletionStatus), + status, + eap_status_string_c::get_status_string(status))); + + EAP_TRACE_RETURN_STRING(m_am_tools, "returns: CEapGeneric::SetCompletionStatusIfStillOk()"); + + if (iCompletionStatus == eap_status_ok) + { + iCompletionStatus = status; + } +} + +// ---------------------------------------------------------- + + + +// ---------------------------------------------------------- + +CEapTypeInfo* CEapGeneric::GetInfoL() +{ + EAP_TRACE_DEBUG( + m_am_tools, + TRACE_FLAGS_DEFAULT, + (EAPL("CEapGeneric::GetInfoL(): this=0x%08x\n"), + this)); + + EAP_TRACE_RETURN_STRING(m_am_tools, "returns: CEapGeneric::GetInfoL()"); + + eap_method_settings_c * const internal_settings = new eap_method_settings_c(m_am_tools); + if (internal_settings == 0) + { + User::Leave(m_am_tools->convert_eapol_error_to_am_error( + EAP_STATUS_RETURN(m_am_tools, eap_status_allocation_error))); + } + + iCompletionStatus = eap_status_process_general_error; + + eap_status_e status = m_server->get_type_info(internal_settings); + + delete internal_settings; + + if (status != eap_status_ok) + { + User::Leave(m_am_tools->convert_eapol_error_to_am_error( + EAP_STATUS_RETURN(m_am_tools, status))); + } + + iWaitState = eap_generic_wait_state_complete_get_type_info; + Activate(); + WaitCompletion(); + + if (iCompletionStatus != eap_status_ok) + { + User::Leave(m_am_tools->convert_eapol_error_to_am_error( + EAP_STATUS_RETURN(m_am_tools, iCompletionStatus))); + } + + CEapTypeInfo* info = new(ELeave) CEapTypeInfo( + iReleaseDate, + iEapTypeVersion, + iManufacturer); + + return info; +} + +// ---------------------------------------------------------- + +void CEapGeneric::DeleteConfigurationL() +{ + EAP_TRACE_DEBUG( + m_am_tools, + TRACE_FLAGS_DEFAULT, + (EAPL("CEapGeneric::DeleteConfigurationL(): this=0x%08x\n"), + this)); + + EAP_TRACE_RETURN_STRING(m_am_tools, "returns: CEapGeneric::DeleteConfigurationL()"); + + eap_method_settings_c * const internal_settings = new eap_method_settings_c(m_am_tools); + if (internal_settings == 0) + { + User::Leave(m_am_tools->convert_eapol_error_to_am_error( + EAP_STATUS_RETURN(m_am_tools, eap_status_allocation_error))); + } + + internal_settings->m_IndexType = iIndexType; + internal_settings->m_Index = iIndex; + + TInt error = CEapConversion::ConvertExpandedEAPTypeToInternalType( + &iEapType, + &(internal_settings->m_EAPType)); + if (error != KErrNone) + { + delete internal_settings; + + (void)EAP_STATUS_RETURN(m_am_tools, m_am_tools->convert_am_error_to_eapol_error(error)); + User::Leave(error); + } + iCompletionStatus = eap_status_process_general_error; + + eap_status_e status = m_server->delete_configuration(internal_settings); + + delete internal_settings; + + if (status != eap_status_ok) + { + User::Leave(m_am_tools->convert_eapol_error_to_am_error( + EAP_STATUS_RETURN(m_am_tools, status))); + } + + iWaitState = eap_generic_wait_state_complete_delete_configuration; + Activate(); + WaitCompletion(); + + if (iCompletionStatus != eap_status_ok) + { + User::Leave(m_am_tools->convert_eapol_error_to_am_error( + EAP_STATUS_RETURN(m_am_tools, iCompletionStatus))); + } +} + +// ---------------------------------------------------------- + +TUint CEapGeneric::GetInterfaceVersion() +{ + EAP_TRACE_DEBUG( + m_am_tools, + TRACE_FLAGS_DEFAULT, + (EAPL("CEapGeneric::GetInterfaceVersion(): this=0x%08x\n"), + this)); + + EAP_TRACE_RETURN_STRING(m_am_tools, "returns: CEapGeneric::GetInterfaceVersion()"); + + return KInterfaceVersion; +} + +// ---------------------------------------------------------- + +void CEapGeneric::SetTunnelingType(const TEapExpandedType aTunnelingType) +{ + EAP_TRACE_DEBUG( + m_am_tools, + TRACE_FLAGS_DEFAULT, + (EAPL("CEapGeneric::SetTunnelingType(): this=0x%08x\n"), + this)); + + EAP_TRACE_RETURN_STRING(m_am_tools, "returns: CEapGeneric::SetTunnelingType()"); + + EAP_TRACE_DATA_DEBUG_SYMBIAN( + (EAPL("CEapGeneric::SetTunnelingType - tunneling type"), + aTunnelingType.GetValue().Ptr(), aTunnelingType.GetValue().Length())); + + iTunnelingTypePresent = true; + + eap_type_value_e aInternalType; + + TInt error = CEapConversion::ConvertExpandedEAPTypeToInternalType( + &aTunnelingType, + &aInternalType); + if (error != KErrNone) + { + (void)EAP_STATUS_RETURN(m_am_tools, m_am_tools->convert_am_error_to_eapol_error(error)); + } + + iTunnelingType = aInternalType; + +} + + +// ---------------------------------------------------------- + +void CEapGeneric::SetIndexL( + const TIndexType aIndexType, + const TInt aIndex ) +{ + EAP_TRACE_DEBUG( + m_am_tools, + TRACE_FLAGS_DEFAULT, + (EAPL("CEapGeneric::SetIndexL(): this=0x%08x\n"), + this)); + + EAP_TRACE_RETURN_STRING(m_am_tools, "returns: CEapGeneric::SetIndexL()"); + + eap_method_settings_c * const internal_settings = new eap_method_settings_c(m_am_tools); + if (internal_settings == 0) + { + User::Leave(m_am_tools->convert_eapol_error_to_am_error( + EAP_STATUS_RETURN(m_am_tools, eap_status_allocation_error))); + } + + internal_settings->m_IndexType = aIndexType; + internal_settings->m_Index = aIndex; + + TInt error = CEapConversion::ConvertExpandedEAPTypeToInternalType( + &iEapType, + &(internal_settings->m_EAPType)); + if (error != KErrNone) + { + delete internal_settings; + + (void)EAP_STATUS_RETURN(m_am_tools, m_am_tools->convert_am_error_to_eapol_error(error)); + User::Leave(error); + } + + iCompletionStatus = eap_status_process_general_error; + + eap_status_e status = m_server->delete_configuration(internal_settings); + + if (status != eap_status_ok) + { + delete internal_settings; + + User::Leave(m_am_tools->convert_eapol_error_to_am_error( + EAP_STATUS_RETURN(m_am_tools, status))); + } + + iWaitState = eap_generic_wait_state_complete_delete_configuration; + Activate(); + WaitCompletion(); + + if (iCompletionStatus != eap_status_ok) + { + delete internal_settings; + + User::Leave(m_am_tools->convert_eapol_error_to_am_error( + EAP_STATUS_RETURN(m_am_tools, iCompletionStatus))); + } + + internal_settings->m_IndexType = iIndexType; + internal_settings->m_Index = iIndex; + + error = CEapConversion::ConvertExpandedEAPTypeToInternalType( + &iEapType, + &(internal_settings->m_EAPType)); + if (error != KErrNone) + { + delete internal_settings; + + (void)EAP_STATUS_RETURN(m_am_tools, m_am_tools->convert_am_error_to_eapol_error(error)); + User::Leave(error); + } + + internal_settings->m_TunnelingTypePresent = iTunnelingTypePresent; + internal_settings->m_TunnelingType = iTunnelingType; + + internal_settings->m_DestinationIndexAndTypePresent = true; + internal_settings->m_DestinationIndexType = aIndexType; + internal_settings->m_DestinationIndex = aIndex; + + iCompletionStatus = eap_status_process_general_error; + + status = m_server->set_index(internal_settings); + + delete internal_settings; + + if (status != eap_status_ok) + { + User::Leave(m_am_tools->convert_eapol_error_to_am_error( + EAP_STATUS_RETURN(m_am_tools, status))); + } + + iWaitState = eap_generic_wait_state_complete_set_index; + Activate(); + WaitCompletion(); + + if (iCompletionStatus != eap_status_ok) + { + User::Leave(m_am_tools->convert_eapol_error_to_am_error( + EAP_STATUS_RETURN(m_am_tools, iCompletionStatus))); + } + +} + +// ---------------------------------------------------------- + +void CEapGeneric::SetConfigurationL(const EAPSettings& aSettings) +{ + EAP_TRACE_DEBUG( + m_am_tools, + TRACE_FLAGS_DEFAULT, + (EAPL("CEapGeneric::SetConfigurationL(): this=0x%08x\n"), + this)); + + EAP_TRACE_RETURN_STRING(m_am_tools, "returns: CEapGeneric::SetConfigurationL()"); + + eap_method_settings_c * const internal_settings = new eap_method_settings_c(m_am_tools); + if (internal_settings == 0) + { + User::Leave(m_am_tools->convert_eapol_error_to_am_error( + EAP_STATUS_RETURN(m_am_tools, eap_status_allocation_error))); + } + + eap_status_e status(eap_status_process_general_error); + + TInt error(KErrNone); + + internal_settings->m_IndexType = iIndexType; + internal_settings->m_Index = iIndex; + + internal_settings->m_TunnelingTypePresent = iTunnelingTypePresent; + internal_settings->m_TunnelingType = iTunnelingType; + + error = CEapConversion::ConvertEAPSettingsToInternalType( + m_am_tools, + &aSettings, + internal_settings); + if(error == KErrNone) + { + TInt error = CEapConversion::ConvertExpandedEAPTypeToInternalType( + &iEapType, + &(internal_settings->m_EAPType)); + if (error != KErrNone) + { + delete internal_settings; + + (void)EAP_STATUS_RETURN(m_am_tools, m_am_tools->convert_am_error_to_eapol_error(error)); + User::Leave(error); + } + + iCompletionStatus = eap_status_process_general_error; + + status = m_server->set_configuration(internal_settings); + } + else + { + status = m_am_tools->convert_am_error_to_eapol_error(error); + } + + delete internal_settings; + + if (status != eap_status_ok) + { + User::Leave(m_am_tools->convert_eapol_error_to_am_error( + EAP_STATUS_RETURN(m_am_tools, status))); + } + + iWaitState = eap_generic_wait_state_complete_set_configuration; + Activate(); + WaitCompletion(); + + if (iCompletionStatus != eap_status_ok) + { + User::Leave(m_am_tools->convert_eapol_error_to_am_error( + EAP_STATUS_RETURN(m_am_tools, iCompletionStatus))); + } +} + +// ---------------------------------------------------------- + +void CEapGeneric::GetConfigurationL(EAPSettings& aSettings) +{ + EAP_TRACE_DEBUG( + m_am_tools, + TRACE_FLAGS_DEFAULT, + (EAPL("CEapGeneric::GetConfigurationL(): this=0x%08x\n"), + this)); + + EAP_TRACE_RETURN_STRING(m_am_tools, "returns: CEapGeneric::GetConfigurationL()"); + + eap_method_settings_c * const internal_settings = new eap_method_settings_c(m_am_tools); + if (internal_settings == 0) + { + User::Leave(m_am_tools->convert_eapol_error_to_am_error( + EAP_STATUS_RETURN(m_am_tools, eap_status_allocation_error))); + } + + internal_settings->m_IndexType = iIndexType; + internal_settings->m_Index = iIndex; + + TInt error = CEapConversion::ConvertExpandedEAPTypeToInternalType( + &iEapType, + &(internal_settings->m_EAPType)); + if (error != KErrNone) + { + delete internal_settings; + + (void)EAP_STATUS_RETURN(m_am_tools, m_am_tools->convert_am_error_to_eapol_error(error)); + User::Leave(error); + } + + internal_settings->m_TunnelingTypePresent = iTunnelingTypePresent; + internal_settings->m_TunnelingType = iTunnelingType; + + ipEAPSettings = &aSettings; + + iCompletionStatus = eap_status_process_general_error; + + eap_status_e status = m_server->get_configuration(internal_settings); + + delete internal_settings; + + if (status != eap_status_ok) + { + User::Leave(m_am_tools->convert_eapol_error_to_am_error( + EAP_STATUS_RETURN(m_am_tools, status))); + } + + iWaitState = eap_generic_wait_state_complete_get_configuration; + Activate(); + WaitCompletion(); + + if (iCompletionStatus != eap_status_ok) + { + User::Leave(m_am_tools->convert_eapol_error_to_am_error( + EAP_STATUS_RETURN(m_am_tools, iCompletionStatus))); + } +} + +// ---------------------------------------------------------- + +void CEapGeneric::CopySettingsL( + const TIndexType aDestinationIndexType, + const TInt aDestinationIndex) +{ + EAP_TRACE_DEBUG( + m_am_tools, + TRACE_FLAGS_DEFAULT, + (EAPL("CEapGeneric::CopySettingsL(): this=0x%08x\n"), + this)); + + EAP_TRACE_RETURN_STRING(m_am_tools, "returns: CEapGeneric::CopySettingsL()"); + + eap_method_settings_c * const internal_settings = new eap_method_settings_c(m_am_tools); + if (internal_settings == 0) + { + User::Leave(m_am_tools->convert_eapol_error_to_am_error( + EAP_STATUS_RETURN(m_am_tools, eap_status_allocation_error))); + } + + internal_settings->m_IndexType = aDestinationIndexType; + internal_settings->m_Index = aDestinationIndex; + + iCompletionStatus = eap_status_process_general_error; + + eap_status_e status = m_server->delete_configuration(internal_settings); + + if (status != eap_status_ok) + { + delete internal_settings; + + User::Leave(m_am_tools->convert_eapol_error_to_am_error( + EAP_STATUS_RETURN(m_am_tools, status))); + } + + iWaitState = eap_generic_wait_state_complete_delete_configuration; + Activate(); + WaitCompletion(); + + if (iCompletionStatus != eap_status_ok) + { + delete internal_settings; + + User::Leave(m_am_tools->convert_eapol_error_to_am_error( + EAP_STATUS_RETURN(m_am_tools, iCompletionStatus))); + } + + internal_settings->m_IndexType = iIndexType; + internal_settings->m_Index = iIndex; + + TInt error = CEapConversion::ConvertExpandedEAPTypeToInternalType( + &iEapType, + &(internal_settings->m_EAPType)); + if (error != KErrNone) + { + delete internal_settings; + + (void)EAP_STATUS_RETURN(m_am_tools, m_am_tools->convert_am_error_to_eapol_error(error)); + User::Leave(error); + } + + internal_settings->m_TunnelingTypePresent = iTunnelingTypePresent; + internal_settings->m_TunnelingType = iTunnelingType; + + internal_settings->m_DestinationIndexAndTypePresent = true; + internal_settings->m_DestinationIndexType = aDestinationIndexType; + internal_settings->m_DestinationIndex = aDestinationIndex; + + iCompletionStatus = eap_status_process_general_error; + + status = m_server->copy_configuration(internal_settings); + + delete internal_settings; + + if (status != eap_status_ok) + { + User::Leave(m_am_tools->convert_eapol_error_to_am_error( + EAP_STATUS_RETURN(m_am_tools, status))); + } + + iWaitState = eap_generic_wait_state_complete_copy_configuration; + Activate(); + WaitCompletion(); + + if (iCompletionStatus != eap_status_ok) + { + User::Leave(m_am_tools->convert_eapol_error_to_am_error( + EAP_STATUS_RETURN(m_am_tools, iCompletionStatus))); + } +} + +// ---------------------------------------------------------- + +eap_status_e CEapGeneric::complete_get_configuration( + const eap_method_settings_c * const internal_settings) +{ + EAP_TRACE_DEBUG( + m_am_tools, + TRACE_FLAGS_DEFAULT, + (EAPL("CEapGeneric::complete_get_configuration(): this=0x%08x, iWaitState=%d, status=%d=%s\n"), + this, + iWaitState, + internal_settings->m_completion_status, + eap_status_string_c::get_status_string(internal_settings->m_completion_status))); + + EAP_TRACE_RETURN_STRING(m_am_tools, "returns: CEapGeneric::complete_get_configuration()"); + + if (internal_settings == 0) + { + iCompletionStatus = eap_status_illegal_parameter; + + Complete(); + + return EAP_STATUS_RETURN(m_am_tools, iCompletionStatus); + } + + iCompletionStatus = internal_settings->m_completion_status; + + if (iWaitState == eap_generic_wait_state_complete_get_configuration + && iCompletionStatus == eap_status_ok) + { + if (ipEAPSettings != 0 + && internal_settings != 0) + { + TInt error(KErrNone); + + error = CEapConversion::ConvertInternalTypeToEAPSettings( + m_am_tools, + internal_settings, + ipEAPSettings); + if(error != KErrNone) + { + SetCompletionStatusIfStillOk(EAP_STATUS_RETURN(m_am_tools, m_am_tools->convert_am_error_to_eapol_error(error))); + } + } + else + { + SetCompletionStatusIfStillOk(EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter)); + } + } + else if (iCompletionStatus == eap_status_ok) + { + // ERROR wrong state. + SetCompletionStatusIfStillOk(EAP_STATUS_RETURN(m_am_tools, eap_status_wrong_eap_type_state)); + } + + Complete(); + + return EAP_STATUS_RETURN(m_am_tools, iCompletionStatus); +} + +// ---------------------------------------------------------- + +eap_status_e CEapGeneric::complete_set_configuration( + const eap_status_e completion_status) +{ + EAP_TRACE_DEBUG( + m_am_tools, + TRACE_FLAGS_DEFAULT, + (EAPL("CEapGeneric::complete_set_configuration(): this=0x%08x, iWaitState=%d, status=%d=%s\n"), + this, + iWaitState, + completion_status, + eap_status_string_c::get_status_string(completion_status))); + + EAP_TRACE_RETURN_STRING(m_am_tools, "returns: CEapGeneric::complete_set_configuration()"); + + iCompletionStatus = completion_status; + + if (iWaitState != eap_generic_wait_state_complete_set_configuration + && iCompletionStatus == eap_status_ok) + { + // ERROR wrong state. + SetCompletionStatusIfStillOk(EAP_STATUS_RETURN(m_am_tools, eap_status_wrong_eap_type_state)); + } + + Complete(); + + return EAP_STATUS_RETURN(m_am_tools, completion_status); +} + +// ---------------------------------------------------------- + +eap_status_e CEapGeneric::complete_delete_configuration( + const eap_status_e completion_status) +{ + EAP_TRACE_DEBUG( + m_am_tools, + TRACE_FLAGS_DEFAULT, + (EAPL("CEapGeneric::complete_delete_configuration(): this=0x%08x, iWaitState=%d, status=%d=%s\n"), + this, + iWaitState, + completion_status, + eap_status_string_c::get_status_string(completion_status))); + + EAP_TRACE_RETURN_STRING(m_am_tools, "returns: CEapGeneric::complete_delete_configuration()"); + + iCompletionStatus = completion_status; + + if (iWaitState != eap_generic_wait_state_complete_delete_configuration + && iCompletionStatus == eap_status_ok) + { + // ERROR wrong state. + SetCompletionStatusIfStillOk(EAP_STATUS_RETURN(m_am_tools, eap_status_wrong_eap_type_state)); + } + + Complete(); + + return EAP_STATUS_RETURN(m_am_tools, completion_status); +} + +// ---------------------------------------------------------- + +eap_status_e CEapGeneric::complete_copy_configuration( + const eap_status_e completion_status) +{ + EAP_TRACE_DEBUG( + m_am_tools, + TRACE_FLAGS_DEFAULT, + (EAPL("CEapGeneric::complete_copy_configuration(): this=0x%08x, iWaitState=%d, status=%d=%s\n"), + this, + iWaitState, + completion_status, + eap_status_string_c::get_status_string(completion_status))); + + EAP_TRACE_RETURN_STRING(m_am_tools, "returns: CEapGeneric::complete_copy_configuration()"); + + iCompletionStatus = completion_status; + + if (iWaitState != eap_generic_wait_state_complete_copy_configuration + && iCompletionStatus == eap_status_ok) + { + // ERROR wrong state. + SetCompletionStatusIfStillOk(EAP_STATUS_RETURN(m_am_tools, eap_status_wrong_eap_type_state)); + } + + Complete(); + + return EAP_STATUS_RETURN(m_am_tools, completion_status); +} + +// ---------------------------------------------------------- + +eap_status_e CEapGeneric::complete_set_index( + const eap_status_e completion_status) +{ + EAP_TRACE_DEBUG( + m_am_tools, + TRACE_FLAGS_DEFAULT, + (EAPL("CEapGeneric::complete_set_index(): this=0x%08x, iWaitState=%d, status=%d=%s\n"), + this, + iWaitState, + completion_status, + eap_status_string_c::get_status_string(completion_status))); + + EAP_TRACE_RETURN_STRING(m_am_tools, "returns: CEapGeneric::complete_set_index()"); + + iCompletionStatus = completion_status; + + if (iWaitState != eap_generic_wait_state_complete_set_index + && iCompletionStatus == eap_status_ok) + { + // ERROR wrong state. + SetCompletionStatusIfStillOk(EAP_STATUS_RETURN(m_am_tools, eap_status_wrong_eap_type_state)); + } + + Complete(); + + return EAP_STATUS_RETURN(m_am_tools, completion_status); +} + +// ---------------------------------------------------------- + +eap_status_e CEapGeneric::complete_get_type_info( + const eap_method_settings_c * const internal_settings) +{ + EAP_TRACE_DEBUG( + m_am_tools, + TRACE_FLAGS_DEFAULT, + (EAPL("CEapGeneric::complete_get_type_info(): this=0x%08x, iWaitState=%d, status=%d=%s\n"), + this, + iWaitState, + internal_settings->m_completion_status, + eap_status_string_c::get_status_string(internal_settings->m_completion_status))); + + EAP_TRACE_RETURN_STRING(m_am_tools, "returns: CEapGeneric::complete_get_type_info()"); + + if (internal_settings == 0) + { + iCompletionStatus = eap_status_illegal_parameter; + + Complete(); + + return EAP_STATUS_RETURN(m_am_tools, iCompletionStatus); + } + + iCompletionStatus = internal_settings->m_completion_status; + + if (iWaitState == eap_generic_wait_state_complete_get_type_info + && iCompletionStatus == eap_status_ok) + { + if (internal_settings != 0 + && internal_settings->m_MethodInfoPresent == true) + { + TInt error(KErrNone); + + error = CEapConversion::ConvertFromInternalToBuf16( + m_am_tools, + &(internal_settings->m_KReleaseDate), + &iReleaseDate); + + if(error == KErrNone) + { + error = CEapConversion::ConvertFromInternalToBuf16( + m_am_tools, + &(internal_settings->m_KEapTypeVersion), + &iEapTypeVersion); + } + + if(error == KErrNone) + { + error = CEapConversion::ConvertFromInternalToBuf16( + m_am_tools, + &(internal_settings->m_KManufacturer), + &iManufacturer); + } + + if(error != KErrNone) + { + SetCompletionStatusIfStillOk(EAP_STATUS_RETURN(m_am_tools, m_am_tools->convert_am_error_to_eapol_error(error))); + } + } + else + { + SetCompletionStatusIfStillOk(EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter)); + } + } + else if (iCompletionStatus == eap_status_ok) + { + // ERROR wrong state. + SetCompletionStatusIfStillOk(EAP_STATUS_RETURN(m_am_tools, eap_status_wrong_eap_type_state)); + } + + Complete(); + + return EAP_STATUS_RETURN(m_am_tools, iCompletionStatus); +} + +// ---------------------------------------------------------- + +eap_status_e CEapGeneric::complete_invoke_ui( + const eap_method_settings_c * const internal_settings) +{ + EAP_TRACE_DEBUG( + m_am_tools, + TRACE_FLAGS_DEFAULT, + (EAPL("CEapGeneric::complete_invoke_ui(): this=0x%08x, iWaitState=%d, status=%d=%s\n"), + this, + iWaitState, + internal_settings->m_completion_status, + eap_status_string_c::get_status_string(internal_settings->m_completion_status))); + + EAP_TRACE_RETURN_STRING(m_am_tools, "returns: CEapGeneric::complete_invoke_ui()"); + + if (internal_settings == 0) + { + iCompletionStatus = eap_status_illegal_parameter; + + Complete(); + + return EAP_STATUS_RETURN(m_am_tools, iCompletionStatus); + } + + iCompletionStatus = internal_settings->m_completion_status; + + if (iWaitState == eap_generic_wait_state_complete_invoke_ui + && iCompletionStatus == eap_status_ok) + { + if (internal_settings != 0 + && internal_settings->m_ButtonIdPresent == true) + { + + } + else + { + SetCompletionStatusIfStillOk(EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter)); + } + } + else if (iCompletionStatus == eap_status_ok) + { + // ERROR wrong state. + SetCompletionStatusIfStillOk(EAP_STATUS_RETURN(m_am_tools, eap_status_wrong_eap_type_state)); + } + + Complete(); + + return EAP_STATUS_RETURN(m_am_tools, iCompletionStatus); +} + + +//-------------------------------------------------- +//-------------------------------------------------- +//-------------------------------------------------- + +eap_am_message_if_c * eap_am_message_if_c::new_eap_am_message_if_c( + abs_eap_am_tools_c * const tools) +{ + EAP_TRACE_DEBUG( + tools, + TRACE_FLAGS_DEFAULT, + (EAPL("eap_am_message_if_c::new_eap_am_server_general_settings_c()\n"))); + + EAP_TRACE_RETURN_STRING(tools, "returns: eap_am_message_if_c::new_eap_am_message_if_c()"); + + eap_am_message_if_c *client_if = new eap_am_message_if_symbian_c(tools, EEapPluginNew); + + eap_automatic_variable_c automatic_client_if( + tools, + client_if); + + if (client_if == 0 + || client_if->get_is_valid() == false) + { + // ERROR. + if (client_if != 0) + { + EAP_TRACE_DEBUG( + tools, + TRACE_FLAGS_ALWAYS|TRACE_FLAGS_DEFAULT, + (EAPL("ERROR: calls: eap_am_message_if_c::new_eap_am_server_general_settings_c(): client_if->shutdown()\n"))); + + client_if->shutdown(); + } + return 0; + } + + automatic_client_if.do_not_free_variable(); + + return client_if; + +} + +//-------------------------------------------------- + +EAP_FUNC_EXPORT eap_plugin_message_base_c * eap_plugin_message_base_c::new_eap_plugin_client_message_if_c( + abs_eap_am_tools_c * const tools, + abs_eap_plugin_message_c * const partner) +{ + EAP_TRACE_DEBUG( + tools, + TRACE_FLAGS_DEFAULT, + (EAPL("eap_plugin_message_base_c::new_eap_plugin_client_message_if_c()\n"))); + + EAP_TRACE_RETURN_STRING(tools, "returns: eap_plugin_message_base_c::new_eap_plugin_client_message_if_c()"); + + eap_am_message_if_c *client_if = eap_am_message_if_c::new_eap_am_message_if_c( + tools); + + eap_automatic_variable_c automatic_client_if( + tools, + client_if); + + if (client_if == 0 + || client_if->get_is_valid() == false) + { + // ERROR. + if (client_if != 0) + { + EAP_TRACE_DEBUG( + tools, + TRACE_FLAGS_ALWAYS|TRACE_FLAGS_DEFAULT, + (EAPL("ERROR: calls: eap_plugin_message_base_c::new_eap_plugin_client_message_if_c(): client_if->shutdown()\n"))); + + (void) client_if->shutdown(); + } + return 0; + } + + eap_plugin_client_message_if_c * new_session_core = new eap_plugin_client_message_if_c(tools, client_if, partner); + + eap_automatic_variable_c automatic_new_session_core( + tools, + new_session_core); + + if (new_session_core == 0 + || new_session_core->get_is_valid() == false) + { + // ERROR. + if (new_session_core != 0) + { + EAP_TRACE_DEBUG( + tools, + TRACE_FLAGS_ALWAYS|TRACE_FLAGS_DEFAULT, + (EAPL("ERROR: calls: eap_plugin_message_base_c::new_eap_plugin_client_message_if_c(): new_session_core->shutdown()\n"))); + + new_session_core->shutdown(); + } + return 0; + } + + client_if->set_partner(new_session_core); + + automatic_client_if.do_not_free_variable(); + automatic_new_session_core.do_not_free_variable(); + + return new_session_core; +} + +// ---------------------------------------------------------- +// End of file