eapol/eapol_framework/eapol_symbian/am/common/symbian/EapConversion.cpp
branchRCL_3
changeset 18 bad0cc58d154
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eapol/eapol_framework/eapol_symbian/am/common/symbian/EapConversion.cpp	Tue Aug 31 15:16:37 2010 +0300
@@ -0,0 +1,1860 @@
+/*
+* 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:  Conversion functions between common code and Symbian code.
+*
+*/
+
+/*
+* %version: 50 %
+*/
+
+// This is enumeration of EAPOL source code.
+#if defined(USE_EAP_MINIMUM_RELEASE_TRACES)
+	#undef EAP_FILE_NUMBER_ENUM
+	#define EAP_FILE_NUMBER_ENUM 738 
+	#undef EAP_FILE_NUMBER_DATE 
+	#define EAP_FILE_NUMBER_DATE 1127594498 
+#endif //#if defined(USE_EAP_MINIMUM_RELEASE_TRACES)
+
+
+// INCLUDE FILES
+
+#include "EapConversion.h"
+#include "eap_am_assert.h"
+#include <EapTypeInfo.h>
+#include "abs_eap_am_tools.h"
+#include "eap_automatic_variable.h"
+#include <utf.h>                           // 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
+
+
+// ================= MEMBER FUNCTIONS =======================
+
+EAP_FUNC_EXPORT TInt CEapConversion::ConvertFromTDesCToInternal(
+	abs_eap_am_tools_c * const tools,
+	const TDesC & input16,
+	eap_variable_data_c * const target8)
+{
+	HBufC16* buf16 = HBufC16::New(input16.Length());
+	if (buf16 == 0)
+	{
+		return KErrNoMemory;
+	}
+
+	buf16->Des().Copy(input16);
+
+	TPtr16 inBufPtr16 = buf16->Des();
+
+	TInt error = ConvertFromBuf16ToInternal(
+		tools,
+		&inBufPtr16,
+		target8);
+
+	delete buf16;
+
+	return error;
+}
+
+// ----------------------------------------------------------
+
+EAP_FUNC_EXPORT TInt CEapConversion::ConvertCipherSuitesToInternalType(
+	abs_eap_am_tools_c * const tools,
+	const RArray<TUint> * const aCipherSuites,
+	eap_array_c<u16_t> * const internal_cipher_suites)
+{
+	EAP_TRACE_DEBUG(
+		tools,
+		TRACE_FLAGS_DEFAULT,
+		(EAPL("CEapConversion::ConvertCipherSuitesToInternalType()\n")));
+
+	EAP_TRACE_RETURN_STRING(tools, "returns: CEapConversion::ConvertCipherSuitesToInternalType()");
+
+	eap_status_e status(eap_status_ok);
+
+	if (aCipherSuites == 0
+		|| internal_cipher_suites == 0)
+	{
+		return (tools->convert_eapol_error_to_am_error(
+			EAP_STATUS_RETURN(tools, eap_status_illegal_parameter)));
+	}
+
+	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+	for (TInt ind = 0; ind < aCipherSuites->Count(); ind++)
+	{
+		u16_t * const tmp_object = new u16_t;
+		if (tmp_object == 0)
+		{
+			EAP_TRACE_END(tools, TRACE_FLAGS_DEFAULT);
+			return (tools->convert_eapol_error_to_am_error(
+				EAP_STATUS_RETURN(tools, eap_status_allocation_error)));
+		}
+		*tmp_object = static_cast<u16_t>((*aCipherSuites)[ind]);
+		status = internal_cipher_suites->add_object(tmp_object, true);
+		if (status != eap_status_ok)
+		{
+			return (tools->convert_eapol_error_to_am_error(
+				EAP_STATUS_RETURN(tools, status)));
+		}
+	}
+
+	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+	return KErrNone;
+}
+
+// ----------------------------------------------------------
+
+EAP_FUNC_EXPORT TInt CEapConversion::ConvertInternalTypeToCipherSuites(
+	abs_eap_am_tools_c * const tools,
+	const eap_array_c<u16_t> * const internal_cipher_suites,
+	RArray<TUint> * const aCipherSuites)
+{
+	EAP_TRACE_DEBUG(
+		tools,
+		TRACE_FLAGS_DEFAULT,
+		(EAPL("CEapConversion::ConvertInternalTypeToCipherSuites()\n")));
+
+	EAP_TRACE_RETURN_STRING(tools, "returns: CEapConversion::ConvertInternalTypeToCipherSuites()");
+
+	if (aCipherSuites == 0
+		|| internal_cipher_suites == 0)
+	{
+		return (tools->convert_eapol_error_to_am_error(
+			EAP_STATUS_RETURN(tools, eap_status_illegal_parameter)));
+	}
+
+	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+	for (TInt ind = 0; ind < internal_cipher_suites->get_object_count(); ind++)
+	{
+		const u16_t * const tmp_object = internal_cipher_suites->get_object(ind);
+		if (tmp_object == 0)
+		{
+			EAP_TRACE_END(tools, TRACE_FLAGS_DEFAULT);
+			return (tools->convert_eapol_error_to_am_error(
+				EAP_STATUS_RETURN(tools, eap_status_allocation_error)));
+		}
+
+		TInt error = aCipherSuites->Append(static_cast<TUint>(*tmp_object));
+		if (error != KErrNone)
+		{
+			return (error);
+		}
+	}
+
+	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+	return KErrNone;
+}
+
+// ----------------------------------------------------------
+
+EAP_FUNC_EXPORT TInt CEapConversion::ConvertFromInternalToBuf16(
+	abs_eap_am_tools_c * const tools,
+	const eap_variable_data_c * const input8,
+	TDes * const target16)
+{
+	EAP_TRACE_DATA_DEBUG(
+		tools,
+		TRACE_FLAGS_DEFAULT,
+		(EAPL("CEapConversion::ConvertFromInternalToBuf16(): input8"),
+        input8->get_data(),
+		input8->get_data_length()));
+
+	EAP_TRACE_RETURN_STRING(tools, "returns: CEapConversion::ConvertFromInternalToBuf16()");
+
+	TPtrC8 inBufPtrC8(input8->get_data(), input8->get_data_length());
+
+	// convert utf8 -> unicode,
+	// aInBuf8 is UTF8 string, unicode max length is
+	// then the length of UTF8 string.
+	// NOTE, HBufC16 length means count of 16-bit objects.
+	HBufC16 * outBuf16 = HBufC16::New(inBufPtrC8.Size());
+	if (outBuf16 == 0)
+	{
+		EAP_UNREFERENCED_PARAMETER(tools);
+		return KErrNoMemory;
+	}
+
+	TPtr16 outBufPtr16 = outBuf16->Des();
+
+	CnvUtfConverter::ConvertToUnicodeFromUtf8(outBufPtr16, inBufPtrC8);
+
+	target16->Copy(outBufPtr16);
+
+    EAP_TRACE_DATA_DEBUG(
+		tools,
+		TRACE_FLAGS_DEFAULT,
+		(EAPL("CEapConversion::ConvertFromInternalToBuf16(): outBufPtr16"),
+	    outBufPtr16.Ptr(),
+		outBufPtr16.Size()));
+
+    delete outBuf16;
+    outBuf16 = NULL;
+
+    return KErrNone;
+}
+
+// ----------------------------------------------------------
+
+EAP_FUNC_EXPORT TInt CEapConversion::ConvertFromBuf16ToInternal(
+	abs_eap_am_tools_c * const tools,
+	const TDes * const input16,
+	eap_variable_data_c * const target8)
+{
+	EAP_TRACE_DATA_DEBUG(
+		tools,
+		TRACE_FLAGS_DEFAULT,
+		(EAPL("CEapConversion::ConvertFromBuf16ToInternal(): input16"),
+        input16->Ptr(),
+		input16->Size()));
+
+	EAP_TRACE_RETURN_STRING(tools, "returns: CEapConversion::ConvertFromBuf16ToInternal()");
+
+	if (tools == 0)
+	{
+		return KErrArgument;
+	}
+
+    // "In UTF-8, characters are encoded using sequences of 1 to 6 octets."
+    // RFC2279 - UTF-8
+    const TUint KMaxNumberOfOctetsPerUtf8Char = 6;
+	// Convert unicode -> utf8.
+	// Note, HBufC16 length means the number of 16-bit values or
+    // data items represented by the descriptor.
+    // Multiply number of charachters by max number of octets for char.
+	HBufC8 * aOutBuf8 = HBufC8::New(input16->Length() * KMaxNumberOfOctetsPerUtf8Char);
+	if (aOutBuf8 == 0)
+	{
+		return KErrNoMemory;
+	}
+
+	TPtr8 outBufPtr8(aOutBuf8->Des());
+
+	CnvUtfConverter::ConvertFromUnicodeToUtf8(outBufPtr8, *input16);
+
+	eap_status_e status = target8->set_copy_of_buffer(aOutBuf8->Ptr(), aOutBuf8->Length());
+	
+    delete aOutBuf8;
+    aOutBuf8 = NULL;
+    
+    EAP_TRACE_DATA_DEBUG(
+		tools,
+		TRACE_FLAGS_DEFAULT,
+		(EAPL("CEapConversion::ConvertFromBuf16ToInternal(): target8"),
+	    target8->get_data(),
+		target8->get_data_length()));
+
+	return (tools->convert_eapol_error_to_am_error(
+			EAP_STATUS_RETURN(tools, status)));
+}
+
+// ----------------------------------------------------------
+
+EAP_FUNC_EXPORT TInt CEapConversion::ConvertEAPTypesToInternalTypes(
+	abs_eap_am_tools_c * const tools,
+	const RArray<TUint> * const EncapsulatedEAPTypes,
+	eap_array_c<eap_type_value_e> * const target)
+{
+	EAP_TRACE_DEBUG(
+		tools,
+		TRACE_FLAGS_DEFAULT,
+		(EAPL("CEapConversion::ConvertEAPTypesToInternalTypes()\n")));
+
+	EAP_TRACE_RETURN_STRING(tools, "returns: CEapConversion::ConvertEAPTypesToInternalTypes()");
+
+	eap_status_e status(eap_status_ok);
+
+        if (tools == 0)
+        {
+                return KErrGeneral;
+        }
+        if (EncapsulatedEAPTypes == 0
+		|| target == 0)
+	{
+		return (tools->convert_eapol_error_to_am_error(
+			EAP_STATUS_RETURN(tools, eap_status_illegal_parameter)));
+	}
+
+	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+	for (TInt ind = 0; ind < EncapsulatedEAPTypes->Count(); ind++)
+	{
+		eap_type_value_e * const tmp_object = new eap_type_value_e(
+			static_cast<eap_type_ietf_values_e>((*EncapsulatedEAPTypes)[ind]));
+		if (tmp_object == 0)
+		{
+			EAP_TRACE_END(tools, TRACE_FLAGS_DEFAULT);
+			return (tools->convert_eapol_error_to_am_error(
+				EAP_STATUS_RETURN(tools, eap_status_allocation_error)));
+		}
+		status = target->add_object(tmp_object, true);
+		if (status != eap_status_ok)
+		{
+			return (tools->convert_eapol_error_to_am_error(
+				EAP_STATUS_RETURN(tools, status)));
+		}
+	}
+
+	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+	return KErrNone;
+}
+
+// ----------------------------------------------------------
+
+EAP_FUNC_EXPORT TInt CEapConversion::ConvertInternalTypesToEAPTypes(
+	abs_eap_am_tools_c * const tools,
+	const eap_array_c<eap_type_value_e> * const internal_eap_types,
+	RArray<TUint> * const target)
+{
+	EAP_TRACE_DEBUG(
+		tools,
+		TRACE_FLAGS_DEFAULT,
+		(EAPL("CEapConversion::ConvertInternalTypesToEAPTypes()\n")));
+
+	EAP_TRACE_RETURN_STRING(tools, "returns: CEapConversion::ConvertInternalTypesToEAPTypes()");
+
+	if (internal_eap_types == 0
+		|| target == 0)
+	{
+		return (tools->convert_eapol_error_to_am_error(
+			EAP_STATUS_RETURN(tools, eap_status_illegal_parameter)));
+	}
+
+	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+	for (TInt ind = 0; ind < internal_eap_types->get_object_count(); ind++)
+	{
+		const eap_type_value_e * const tmp_object = internal_eap_types->get_object(ind);
+		if (tmp_object == 0)
+		{
+			EAP_TRACE_END(tools, TRACE_FLAGS_DEFAULT);
+			return (tools->convert_eapol_error_to_am_error(
+				EAP_STATUS_RETURN(tools, eap_status_allocation_error)));
+		}
+
+		TInt error = target->Append(static_cast<TUint>(tmp_object->get_vendor_type()));
+		if (error != KErrNone)
+		{
+			return (error);
+		}
+	}
+
+	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+	return KErrNone;
+}
+
+// ----------------------------------------------------------
+
+EAP_FUNC_EXPORT TInt CEapConversion::ConvertExpandedEAPTypeToInternalType(
+	const TEapExpandedType * const EncapsulatedExpandedEAPType,
+	eap_type_value_e * const target)
+{
+	EAP_TRACE_DEBUG_SYMBIAN((_L("CEapConversion::ConvertExpandedEAPTypeToInternalType()\n")));
+
+	EAP_TRACE_RETURN_STRING_SYMBIAN((_L("returns: CEapConversion::ConvertExpandedEAPTypeToInternalType()\n")));
+
+	eap_status_e status = target->set_expanded_type_data(
+		0, // NOTE, we do not have abs_eap_am_tools_c object here.
+		EncapsulatedExpandedEAPType->GetValue().Ptr(),
+		EncapsulatedExpandedEAPType->GetValue().Length());
+	if (status != eap_status_ok)
+	{
+		return KErrGeneral;
+	}
+
+	return KErrNone;
+}
+
+// ----------------------------------------------------------
+
+EAP_FUNC_EXPORT TInt CEapConversion::ConvertInternalTypeToExpandedEAPType(
+	const eap_type_value_e * const source,
+	TEapExpandedType * const EncapsulatedExpandedEAPType)
+{
+	EAP_TRACE_DEBUG_SYMBIAN((_L("CEapConversion::ConvertInternalTypeToExpandedEAPType()\n")));
+
+	EAP_TRACE_RETURN_STRING_SYMBIAN((_L("returns: CEapConversion::ConvertInternalTypeToExpandedEAPType()\n")));
+
+	TInt error = EncapsulatedExpandedEAPType->SetValue(
+		source->get_vendor_id(),
+		source->get_vendor_type());
+
+	return error;
+}
+
+// ----------------------------------------------------------
+
+EAP_FUNC_EXPORT TInt CEapConversion::ConvertExpandedEAPTypesToInternalTypes(
+	abs_eap_am_tools_c * const tools,
+	const RArray<TEapExpandedType> * const EncapsulatedExpandedEAPTypes,
+	eap_array_c<eap_type_value_e> * const target)
+{
+	EAP_TRACE_DEBUG(
+		tools,
+		TRACE_FLAGS_DEFAULT,
+		(EAPL("CEapConversion::ConvertExpandedEAPTypesToInternalTypes()\n")));
+
+	EAP_TRACE_RETURN_STRING(tools, "returns: CEapConversion::ConvertExpandedEAPTypesToInternalTypes()");
+
+	eap_status_e status(eap_status_ok);
+
+	if (EncapsulatedExpandedEAPTypes == 0
+		|| target == 0)
+	{
+		return (tools->convert_eapol_error_to_am_error(
+			EAP_STATUS_RETURN(tools, eap_status_illegal_parameter)));
+	}
+
+	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+	for (TInt ind = 0; ind < EncapsulatedExpandedEAPTypes->Count(); ind++)
+	{
+		TEapExpandedType ExpandedEAPType = (*EncapsulatedExpandedEAPTypes)[ind];
+
+		eap_type_value_e * const new_object = new eap_type_value_e();
+		if (new_object == 0)
+		{
+			EAP_TRACE_END(tools, TRACE_FLAGS_DEFAULT);
+			return (tools->convert_eapol_error_to_am_error(
+				EAP_STATUS_RETURN(tools, eap_status_allocation_error)));
+		}
+
+		TInt error = ConvertExpandedEAPTypeToInternalType(
+			&ExpandedEAPType,
+			new_object);
+		if (error != KErrNone)
+		{
+			delete new_object;
+			(void) EAP_STATUS_RETURN(tools, tools->convert_am_error_to_eapol_error(error));
+			return error;
+		}
+
+		status = target->add_object(new_object, true);
+		if (status != eap_status_ok)
+		{
+			return (tools->convert_eapol_error_to_am_error(
+				EAP_STATUS_RETURN(tools, status)));
+		}
+	}
+
+	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+	return KErrNone;
+}
+
+// ----------------------------------------------------------
+
+EAP_FUNC_EXPORT TInt CEapConversion::ConvertInternalTypesToExpandedEAPTypes(
+	abs_eap_am_tools_c * const tools,
+	const eap_array_c<eap_type_value_e> * const source,
+	RArray<TEapExpandedType> * const EncapsulatedExpandedEAPTypes)
+{
+	EAP_TRACE_DEBUG(
+		tools,
+		TRACE_FLAGS_DEFAULT,
+		(EAPL("CEapConversion::ConvertInternalTypesToExpandedEAPTypes()\n")));
+
+	EAP_TRACE_RETURN_STRING(tools, "returns: CEapConversion::ConvertInternalTypesToExpandedEAPTypes()");
+
+	if (source == 0
+		|| EncapsulatedExpandedEAPTypes == 0)
+	{
+		return (tools->convert_eapol_error_to_am_error(
+			EAP_STATUS_RETURN(tools, eap_status_illegal_parameter)));
+	}
+
+	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+	TEapExpandedType EapType;
+
+	for (TInt ind = 0; ind < source->get_object_count(); ind++)
+	{
+		const eap_type_value_e * const tmp_object = source->get_object(ind);
+		if (tmp_object == 0)
+		{
+			EAP_TRACE_END(tools, TRACE_FLAGS_DEFAULT);
+			return (tools->convert_eapol_error_to_am_error(
+				EAP_STATUS_RETURN(tools, eap_status_allocation_error)));
+		}
+
+		TInt error = ConvertInternalTypeToExpandedEAPType(
+			tmp_object,
+			&EapType);
+		if (error != KErrNone)
+		{
+			(void) EAP_STATUS_RETURN(tools, tools->convert_am_error_to_eapol_error(error));
+			return (error);
+		}
+
+		error = EncapsulatedExpandedEAPTypes->Append(EapType);
+		if (error != KErrNone)
+		{
+			(void) EAP_STATUS_RETURN(tools, tools->convert_am_error_to_eapol_error(error));
+			return (error);
+		}
+	}
+
+	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+	return KErrNone;
+}
+
+// ----------------------------------------------------------
+
+EAP_FUNC_EXPORT TInt CEapConversion::ConvertInternalTypesToHBufC8(
+	abs_eap_am_tools_c * const tools,
+	const eap_array_c<eap_type_value_e> * const source,
+	HBufC8 ** const EncapsulatedExpandedEAPTypesData)
+{
+	EAP_TRACE_DEBUG(
+		tools,
+		TRACE_FLAGS_DEFAULT,
+		(EAPL("CEapConversion::ConvertInternalTypesToHBufC8(): EncapsulatedExpandedEAPTypesData=0x%08x, source=0x%08x\n"),
+		EncapsulatedExpandedEAPTypesData,
+		source));
+
+	EAP_TRACE_RETURN_STRING(tools, "returns: CEapConversion::ConvertInternalTypesToHBufC8()");
+
+	if (EncapsulatedExpandedEAPTypesData == 0
+		|| source == 0)
+	{
+		return (tools->convert_eapol_error_to_am_error(
+			EAP_STATUS_RETURN(tools, eap_status_illegal_parameter)));
+	}
+
+	*EncapsulatedExpandedEAPTypesData = HBufC8::New(source->get_object_count()*KEapExpandedTypeLength);
+
+	eap_automatic_variable_c<HBufC8> automatic_EncapsulatedExpandedEAPTypesData(
+		tools,
+		*EncapsulatedExpandedEAPTypesData);
+
+	TPtr8 aDbBinaryColumnValuePtr = (*EncapsulatedExpandedEAPTypesData)->Des();			
+
+	TEapExpandedType EapType;
+
+	for (u32_t ind = 0; ind < source->get_object_count(); ind++)
+	{
+		const eap_type_value_e * const tmp_object = source->get_object(ind);
+		if (tmp_object == 0)
+		{
+			EAP_TRACE_END(tools, TRACE_FLAGS_DEFAULT);
+			return (tools->convert_eapol_error_to_am_error(
+				EAP_STATUS_RETURN(tools, eap_status_allocation_error)));
+		}
+
+		TInt error = ConvertInternalTypeToExpandedEAPType(
+			tmp_object,
+			&EapType);
+		if (error != KErrNone)
+		{
+			(void) EAP_STATUS_RETURN(tools, tools->convert_am_error_to_eapol_error(error));
+			return (error);
+		}
+
+		aDbBinaryColumnValuePtr.Append(EapType.GetValue());
+	}
+
+
+	automatic_EncapsulatedExpandedEAPTypesData.do_not_free_variable();
+
+	return KErrNone;
+}
+
+// ----------------------------------------------------------
+
+EAP_FUNC_EXPORT TInt CEapConversion::ConvertHBufC8ToInternalTypes(
+	abs_eap_am_tools_c * const tools,
+	const HBufC8 * const EncapsulatedExpandedEAPTypesData,
+	eap_array_c<eap_type_value_e> * const target)
+{
+	EAP_TRACE_DEBUG(
+		tools,
+		TRACE_FLAGS_DEFAULT,
+		(EAPL("CEapConversion::ConvertHBufC8ToInternalTypes(): EncapsulatedExpandedEAPTypesData=0x%08x, target=0x%08x\n"),
+		EncapsulatedExpandedEAPTypesData,
+		target));
+
+	EAP_TRACE_RETURN_STRING(tools, "returns: CEapConversion::ConvertHBufC8ToInternalTypes()");
+
+	if (EncapsulatedExpandedEAPTypesData == 0
+		|| target == 0)
+	{
+		return (tools->convert_eapol_error_to_am_error(
+			EAP_STATUS_RETURN(tools, eap_status_illegal_parameter)));
+	}
+
+	u32_t eap_type_count = EncapsulatedExpandedEAPTypesData->Length() / KEapExpandedTypeLength;
+
+	target->reset();
+
+	const TUint8 * const data = EncapsulatedExpandedEAPTypesData->Ptr();
+	u32_t offset = 0ul;
+
+	for (u32_t ind = 0; ind < eap_type_count; ind++)
+	{
+		eap_type_value_e * const new_object = new eap_type_value_e();
+
+		eap_automatic_variable_c<eap_type_value_e> automatic_new_object(
+			tools,
+			new_object);
+
+		if (new_object == 0)
+		{
+			EAP_TRACE_END(tools, TRACE_FLAGS_DEFAULT);
+			return (tools->convert_eapol_error_to_am_error(
+				EAP_STATUS_RETURN(tools, eap_status_allocation_error)));
+		}
+
+		eap_status_e status = new_object->set_expanded_type_data(
+			tools,
+			&(data[offset]),
+			KEapExpandedTypeLength);
+		if (status != eap_status_ok)
+		{
+			return (tools->convert_eapol_error_to_am_error(
+				EAP_STATUS_RETURN(tools, status)));
+		}
+
+		offset += KEapExpandedTypeLength;
+
+		automatic_new_object.do_not_free_variable();
+
+		status = target->add_object(new_object, true);
+		if (status != eap_status_ok)
+		{
+			return (tools->convert_eapol_error_to_am_error(
+				EAP_STATUS_RETURN(tools, status)));
+		}
+	}
+
+	return KErrNone;
+}
+
+// ----------------------------------------------------------
+
+EAP_FUNC_EXPORT TInt CEapConversion::ConvertCertificatesToInternalType(
+	abs_eap_am_tools_c * const tools,
+	const RPointerArray<EapCertificateEntry> * const aCertificates,
+	eap_array_c<eap_certificate_entry_c> * const internal_certificates)
+{
+	EAP_TRACE_DEBUG(
+		tools,
+		TRACE_FLAGS_DEFAULT,
+		(EAPL("CEapConversion::ConvertCertificatesToInternalType()\n")));
+
+	EAP_TRACE_RETURN_STRING(tools, "returns: CEapConversion::ConvertCertificatesToInternalType()");
+
+	eap_status_e status(eap_status_ok);
+
+	if (aCertificates == 0
+		|| internal_certificates == 0)
+	{
+		EAP_STATIC_ASSERT(eap_certificate_entry_c::eap_certificate_type_CA == static_cast<eap_certificate_entry_c::eap_certificate_type_e>(EapCertificateEntry::ECA));
+		EAP_STATIC_ASSERT(eap_certificate_entry_c::eap_certificate_type_user == static_cast<eap_certificate_entry_c::eap_certificate_type_e>(EapCertificateEntry::EUser));
+		return (tools->convert_eapol_error_to_am_error(
+			EAP_STATUS_RETURN(tools, eap_status_illegal_parameter)));
+	}
+
+	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+  	for( TInt count=0; count < aCertificates->Count(); count++ )
+  	{
+		const EapCertificateEntry * const cert = (*aCertificates)[count];
+		if (cert == 0)
+		{
+			return (tools->convert_eapol_error_to_am_error(
+				EAP_STATUS_RETURN(tools, eap_status_allocation_error)));
+		}
+
+		eap_certificate_entry_c * const int_entry = new eap_certificate_entry_c(tools);
+
+		eap_automatic_variable_c<eap_certificate_entry_c> automatic_certificate_entry(
+			tools,
+			int_entry);
+
+		if (int_entry == 0)
+		{
+			return (tools->convert_eapol_error_to_am_error(
+				EAP_STATUS_RETURN(tools, eap_status_illegal_parameter)));
+		}
+
+		// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+		if (cert->GetCertType() != EapCertificateEntry::EUser
+			&& cert->GetCertType() != EapCertificateEntry::ECA)
+		{
+			return (tools->convert_eapol_error_to_am_error(
+				EAP_STATUS_RETURN(tools, eap_status_illegal_parameter)));
+		}
+
+		int_entry->m_CertType = static_cast<eap_certificate_entry_c::eap_certificate_type_e>(cert->GetCertType());
+
+		// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+		if (cert->GetSubjectNamePresent())
+		{
+			ConvertFromBuf16ToInternal(tools, cert->GetSubjectName(), &(int_entry->m_SubjectName));
+
+			int_entry->m_SubjectNamePresent = true;
+		}
+
+		// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+		if (cert->GetIssuerNamePresent())
+		{
+			ConvertFromBuf16ToInternal(tools, cert->GetIssuerName(), &(int_entry->m_IssuerName));
+
+			int_entry->m_IssuerNamePresent = true;
+		}
+
+		// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+		if (cert->GetSerialNumberPresent())
+		{
+			ConvertFromBuf16ToInternal(tools, cert->GetSerialNumber(), &(int_entry->m_SerialNumber));
+
+			int_entry->m_SerialNumberPresent = true;
+		}
+
+		// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+		if (cert->GetSubjectKeyIdPresent())
+		{
+			status = int_entry->m_SubjectKeyID.set_copy_of_buffer(cert->GetSubjectKeyId().Ptr(), cert->GetSubjectKeyId().Length());
+			if (status != eap_status_ok)
+			{
+				return (tools->convert_eapol_error_to_am_error(
+					EAP_STATUS_RETURN(tools, status)));
+			}
+
+			int_entry->m_SubjectKeyIDPresent = true;
+		}
+
+		// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+		if (cert->GetThumbprintPresent())
+		{
+			ConvertFromBuf16ToInternal(tools, cert->GetThumbprint(), &(int_entry->m_Thumbprint));
+
+			int_entry->m_ThumbprintPresent = true;
+		}
+
+		// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+		if (cert->GetLabelPresent())
+		{
+			ConvertFromBuf16ToInternal(tools, cert->GetLabel(), &(int_entry->m_Label));
+
+			int_entry->m_LabelPresent = true;
+		}
+
+		// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+		if (cert->GetPrimaryNamePresent())
+		{
+			ConvertFromBuf16ToInternal(tools, cert->GetPrimaryName(), &(int_entry->m_PrimaryName));
+
+			int_entry->m_PrimaryNamePresent = true;
+		}
+
+		// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+		if (cert->GetSecondaryNamePresent())
+		{
+			ConvertFromBuf16ToInternal(tools, cert->GetSecondaryName(), &(int_entry->m_SecondaryName));
+
+			int_entry->m_SecondaryNamePresent = true;
+		}
+
+		// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+		if (cert->GetIsEnabledPresent())
+		{
+			if (cert->GetIsEnabled())
+			{
+				int_entry->m_iIsEnabled = true;
+			}
+			else
+			{
+				int_entry->m_iIsEnabled = false;
+			}
+
+			int_entry->m_iIsEnabledPresent = true;
+		}
+
+		// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+		automatic_certificate_entry.do_not_free_variable();
+
+		status = internal_certificates->add_object(int_entry, true);
+		if (status != eap_status_ok)
+		{
+			return (tools->convert_eapol_error_to_am_error(
+				EAP_STATUS_RETURN(tools, status)));
+		}
+	}
+
+	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+	return KErrNone;
+}
+
+// ----------------------------------------------------------
+
+EAP_FUNC_EXPORT TInt CEapConversion::ConvertInternalTypeToCertificates(
+	abs_eap_am_tools_c * const tools,
+	const eap_certificate_entry_c::eap_certificate_type_e select_certificate_type,
+	const eap_array_c<eap_certificate_entry_c> * const internal_certificates,
+	RPointerArray<EapCertificateEntry> * const aCertificates)
+{
+	EAP_TRACE_DEBUG(
+		tools,
+		TRACE_FLAGS_DEFAULT,
+		(EAPL("CEapConversion::ConvertInternalTypeToCertificates()\n")));
+
+	EAP_TRACE_RETURN_STRING(tools, "returns: CEapConversion::ConvertInternalTypeToCertificates()");
+
+	if (aCertificates == 0
+		|| internal_certificates == 0)
+	{
+		EAP_STATIC_ASSERT(eap_certificate_entry_c::eap_certificate_type_CA == static_cast<eap_certificate_entry_c::eap_certificate_type_e>(EapCertificateEntry::ECA));
+		EAP_STATIC_ASSERT(eap_certificate_entry_c::eap_certificate_type_user == static_cast<eap_certificate_entry_c::eap_certificate_type_e>(EapCertificateEntry::EUser));
+		return (tools->convert_eapol_error_to_am_error(
+			EAP_STATUS_RETURN(tools, eap_status_illegal_parameter)));
+	}
+
+	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+  	for( u32_t count=0; count < internal_certificates->get_object_count(); count++ )
+  	{
+		const eap_certificate_entry_c * const int_entry = internal_certificates->get_object(count);
+		if (int_entry == 0)
+		{
+			return (tools->convert_eapol_error_to_am_error(
+				EAP_STATUS_RETURN(tools, eap_status_illegal_parameter)));
+		}
+
+		if (int_entry->m_CertType == select_certificate_type)
+		{
+			EapCertificateEntry * cert = new EapCertificateEntry;
+
+			eap_automatic_variable_c<EapCertificateEntry> automatic_cert(
+				tools,
+				cert);
+
+			if (cert == 0)
+			{
+				return (tools->convert_eapol_error_to_am_error(
+					EAP_STATUS_RETURN(tools, eap_status_allocation_error)));
+			}
+
+			// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+			cert->SetCertType(static_cast<EapCertificateEntry::TCertType>(int_entry->m_CertType));
+
+			// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+			if (int_entry->m_SubjectNamePresent == true)
+			{
+				ConvertFromInternalToBuf16(tools, &(int_entry->m_SubjectName), cert->GetSubjectNameWritable());
+
+				cert->SetSubjectNamePresent();
+			}
+
+			// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+			if (int_entry->m_IssuerNamePresent == true)
+			{
+				ConvertFromInternalToBuf16(tools, &(int_entry->m_IssuerName), cert->GetIssuerNameWritable());
+
+				cert->SetIssuerNamePresent();
+			}
+
+			// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+			if (int_entry->m_SerialNumberPresent == true)
+			{
+				ConvertFromInternalToBuf16(tools, &(int_entry->m_SerialNumber), cert->GetSerialNumberWritable());
+
+				cert->SetSerialNumberPresent();
+			}
+
+			// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+			if (int_entry->m_SubjectKeyIDPresent == true)
+			{
+				cert->GetSubjectKeyIdWritable()->Copy(int_entry->m_SubjectKeyID.get_data(), int_entry->m_SubjectKeyID.get_data_length());
+
+				cert->SetSubjectKeyIdPresent();
+			}
+
+			// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+			if (int_entry->m_ThumbprintPresent == true)
+			{
+				ConvertFromInternalToBuf16(tools, &(int_entry->m_Thumbprint), cert->GetThumbprintWritable());
+
+				cert->SetThumbprintPresent();
+			}
+
+			// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+			if (int_entry->m_LabelPresent == true)
+			{
+				ConvertFromInternalToBuf16(tools, &(int_entry->m_Label), cert->GetLabelWritable());
+
+				cert->SetLabelPresent();
+			}
+
+			// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+			if (int_entry->m_PrimaryNamePresent == true)
+			{
+				ConvertFromInternalToBuf16(tools, &(int_entry->m_PrimaryName), cert->GetPrimaryNameWritable());
+
+				cert->SetPrimaryNamePresent();
+			}
+
+			// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+			if (int_entry->m_SecondaryNamePresent == true)
+			{
+				ConvertFromInternalToBuf16(tools, &(int_entry->m_SecondaryName), cert->GetSecondaryNameWritable());
+
+				cert->SetSecondaryNamePresent();
+			}
+
+			// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+			if (int_entry->m_iIsEnabledPresent == true)
+			{
+				if (int_entry->m_iIsEnabled == true)
+				{
+					cert->SetIsEnabled(ETrue);
+				}
+
+				cert->SetIsEnabledPresent();
+			}
+
+			EAP_TRACE_SETTINGS(cert);
+
+			TInt error = aCertificates->Append(cert);
+			if (error != KErrNone)
+			{
+				aCertificates->ResetAndDestroy(); // ResetAndDestroy() function must be called because the objects represented by the array need to be deleted before the array object is destroyed.
+				aCertificates->Close(); // The Close() function must be called before RPointerArray object is destroyed.
+
+				(void) EAP_STATUS_RETURN(tools, tools->convert_am_error_to_eapol_error(error));
+				return (error);
+			}
+
+			automatic_cert.do_not_free_variable();
+		}
+	} // for()
+
+	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+	return KErrNone;
+}
+
+// ----------------------------------------------------------
+
+EAP_FUNC_EXPORT TInt CEapConversion::ConvertEAPSettingsToInternalType(
+	abs_eap_am_tools_c * const tools,
+	const EAPSettings * const aSettings,
+	eap_method_settings_c * const internal_settings)
+{
+	EAP_TRACE_DEBUG(
+		tools,
+		TRACE_FLAGS_DEFAULT,
+		(EAPL("CEapConversion::ConvertEAPSettingsToInternalType()\n")));
+
+	EAP_TRACE_RETURN_STRING(tools, "returns: CEapConversion::ConvertEAPSettingsToInternalType()");
+
+	if (aSettings == 0
+		|| internal_settings == 0)
+	{
+		return (tools->convert_eapol_error_to_am_error(
+			EAP_STATUS_RETURN(tools, eap_status_illegal_parameter)));
+	}
+
+	EAP_TRACE_SETTINGS(aSettings);
+
+	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+	if (aSettings->iEAPExpandedType != (*EapExpandedTypeNone.GetType()))
+	{
+		eap_status_e status = internal_settings->m_EAPType.set_expanded_type_data(
+			tools,
+			aSettings->iEAPExpandedType.GetValue().Ptr(),
+			aSettings->iEAPExpandedType.GetValue().Length());
+		if (status != eap_status_ok)
+		{
+			return (tools->convert_eapol_error_to_am_error(
+				EAP_STATUS_RETURN(tools, status)));
+		}
+	}
+
+	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+	if (aSettings->iUseAutomaticCACertificatePresent)
+	{
+		internal_settings->m_UseAutomaticCACertificatePresent = true;
+
+		if (aSettings->iUseAutomaticCACertificate)
+		{
+			internal_settings->m_UseAutomaticCACertificate = true;
+		}
+		else
+		{
+			internal_settings->m_UseAutomaticCACertificate = false;
+		}
+	}
+
+	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+	if (aSettings->iUseAutomaticUsernamePresent)
+	{
+		internal_settings->m_UseAutomaticUsernamePresent = true;
+
+		if (aSettings->iUseAutomaticUsername)
+		{
+			internal_settings->m_UseAutomaticUsername = true;
+		}
+		else
+		{
+			internal_settings->m_UseAutomaticUsername = false;
+		}
+	}
+
+	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+	if (aSettings->iUseAutomaticRealmPresent)
+	{
+		internal_settings->m_UseAutomaticRealmPresent = true;
+
+		if (aSettings->iUseAutomaticRealm)
+		{
+			internal_settings->m_UseAutomaticRealm = true;
+		}
+		else
+		{
+			internal_settings->m_UseAutomaticRealm = false;
+		}
+	}
+
+	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+	if (aSettings->iUsernamePresent)
+	{
+		TInt error = ConvertFromBuf16ToInternal(tools, &(aSettings->iUsername), &(internal_settings->m_Username_fix));
+		if (error)
+		{
+			return error;
+		}
+
+		internal_settings->m_UsernamePresent = true;
+	}
+
+	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+	if (aSettings->iPasswordExistPresent)
+	{
+		internal_settings->m_PasswordExistPresent = true;
+
+		if (aSettings->iPasswordExist)
+		{
+			internal_settings->m_PasswordExist = true;
+		}
+		else
+		{
+			internal_settings->m_PasswordExist = false;
+		}
+	}
+
+	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+	if (aSettings->iPasswordPresent)
+	{
+		TInt error = ConvertFromBuf16ToInternal(tools, &(aSettings->iPassword), &(internal_settings->m_Password));
+		if (error)
+		{
+			return error;
+		}
+
+		internal_settings->m_PasswordPresent = true;
+	}
+
+	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+	if (aSettings->iRealmPresent)
+	{
+		TInt error = ConvertFromBuf16ToInternal(tools, &(aSettings->iRealm), &(internal_settings->m_Realm));
+		if (error)
+		{
+			return error;
+		}
+
+		internal_settings->m_RealmPresent = true;
+	}
+
+	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+	if (aSettings->iUsePseudonymsPresent)
+	{
+		internal_settings->m_UsePseudonymsPresent = true;
+
+		if (aSettings->iUsePseudonyms)
+		{
+			internal_settings->m_UsePseudonyms = true;
+		}
+		else
+		{
+			internal_settings->m_UsePseudonyms = false;
+		}
+	}
+
+	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+	if (aSettings->iVerifyServerRealmPresent)
+	{
+		internal_settings->m_VerifyServerRealmPresent = true;
+
+		if (aSettings->iVerifyServerRealm)
+		{
+			internal_settings->m_VerifyServerRealm = true;
+		}
+		else
+		{
+			internal_settings->m_VerifyServerRealm = false;
+		}
+	}
+
+	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+	if (aSettings->iRequireClientAuthenticationPresent)
+	{
+		internal_settings->m_RequireClientAuthenticationPresent = true;
+
+		if (aSettings->iRequireClientAuthentication)
+		{
+			internal_settings->m_RequireClientAuthentication = true;
+		}
+		else
+		{
+			internal_settings->m_RequireClientAuthentication = false;
+		}
+	}
+
+	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+	if (aSettings->iSessionValidityTimePresent)
+	{
+		internal_settings->m_SessionValidityTimePresent = true;
+
+		internal_settings->m_SessionValidityTime = static_cast<u32_t>(aSettings->iSessionValidityTime);
+	}
+
+	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+	if (aSettings->iCipherSuitesPresent)
+	{
+		TInt error = ConvertCipherSuitesToInternalType(
+			tools,
+			&(aSettings->iCipherSuites),
+			&(internal_settings->m_CipherSuites));
+		if (error)
+		{
+			return error;
+		}
+
+		internal_settings->m_CipherSuitesPresent = true;
+	}
+
+	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+	if (aSettings->iPEAPVersionsPresent)
+	{
+		internal_settings->m_PEAPVersionsPresent = true;
+
+		if (aSettings->iPEAPv0Allowed)
+		{
+			internal_settings->m_PEAPv0Allowed = true;
+		}
+		else
+		{
+			internal_settings->m_PEAPv0Allowed = false;
+		}
+
+		if (aSettings->iPEAPv1Allowed)
+		{
+			internal_settings->m_PEAPv1Allowed = true;
+		}
+		else
+		{
+			internal_settings->m_PEAPv1Allowed = false;
+		}
+
+		if (aSettings->iPEAPv2Allowed)
+		{
+			internal_settings->m_PEAPv2Allowed = true;
+		}
+		else
+		{
+			internal_settings->m_PEAPv2Allowed = false;
+		}
+	}
+
+	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+	if (aSettings->iCertificatesPresent)
+	{
+		TInt error = ConvertCertificatesToInternalType(
+			tools,
+			&(aSettings->iCertificates),
+			&(internal_settings->m_Certificates));
+		if (error)
+		{
+			return error;
+		}
+
+		internal_settings->m_CertificatesPresent = true;
+	}
+
+	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+	if (aSettings->iEnabledEncapsulatedEAPExpandedTypesPresent)
+	{
+		TInt error = ConvertExpandedEAPTypesToInternalTypes(
+			tools,
+			&(aSettings->iEnabledEncapsulatedEAPExpandedTypes),
+			&(internal_settings->m_EnabledEncapsulatedEAPTypes));
+		if (error)
+		{
+			return error;
+		}
+
+		internal_settings->m_EnabledEncapsulatedEAPTypesPresent = true;
+	}
+
+	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+	if (aSettings->iDisabledEncapsulatedEAPExpandedTypesPresent)
+	{
+		TInt error = ConvertExpandedEAPTypesToInternalTypes(
+			tools,
+			&(aSettings->iDisabledEncapsulatedEAPExpandedTypes),
+			&(internal_settings->m_DisabledEncapsulatedEAPTypes));
+		if (error)
+		{
+			return error;
+		}
+
+		internal_settings->m_DisabledEncapsulatedEAPTypesPresent = true;
+	}
+
+	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+	if (aSettings->iAuthProvModeAllowedPresent)
+	{
+		internal_settings->m_AuthProvModeAllowedPresent = true;
+
+		if (aSettings->iAuthProvModeAllowed)
+		{
+			internal_settings->m_AuthProvModeAllowed = true;
+		}
+		else
+		{
+			internal_settings->m_AuthProvModeAllowed = false;
+		}
+	}
+
+	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+	if (aSettings->iUnauthProvModeAllowedPresent)
+	{
+		internal_settings->m_UnauthProvModeAllowedPresent = true;
+
+		if (aSettings->iUnauthProvModeAllowed)
+		{
+			internal_settings->m_UnauthProvModeAllowed = true;
+		}
+		else
+		{
+			internal_settings->m_UnauthProvModeAllowed = false;
+		}
+	}
+
+	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+	if (aSettings->iPACGroupReferencePresent)
+	{
+		TInt error = ConvertFromBuf16ToInternal(tools, &(aSettings->iPACGroupReference), &(internal_settings->m_PACGroupReference));
+		if (error)
+		{
+			return error;
+		}
+
+		internal_settings->m_RealmPresent = true;
+	}
+
+	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+	if (aSettings->iWarnADHPNoPACPresent)
+	{
+		internal_settings->m_WarnADHPNoPACPresent = true;
+
+		if (aSettings->iWarnADHPNoPAC)
+		{
+			internal_settings->m_WarnADHPNoPAC = true;
+		}
+		else
+		{
+			internal_settings->m_WarnADHPNoPAC = false;
+		}
+	}
+
+	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+	if (aSettings->iWarnADHPNoMatchingPACPresent)
+	{
+		internal_settings->m_WarnADHPNoMatchingPACPresent = true;
+
+		if (aSettings->iWarnADHPNoMatchingPAC)
+		{
+			internal_settings->m_WarnADHPNoMatchingPAC = true;
+		}
+		else
+		{
+			internal_settings->m_WarnADHPNoMatchingPAC = false;
+		}
+	}
+
+	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+	if (aSettings->iWarnNotDefaultServerPresent)
+	{
+		internal_settings->m_WarnNotDefaultServerPresent = true;
+
+		if (aSettings->iWarnNotDefaultServer)
+		{
+			internal_settings->m_WarnNotDefaultServer = true;
+		}
+		else
+		{
+			internal_settings->m_WarnNotDefaultServer = false;
+		}
+	}
+
+	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+	if (aSettings->iShowPassWordPromptPresent)
+	{
+		internal_settings->m_ShowPassWordPromptPresent = true;
+
+		if (aSettings->iShowPassWordPrompt)
+		{
+			internal_settings->m_ShowPassWordPrompt = true;
+		}
+		else
+		{
+			internal_settings->m_ShowPassWordPrompt = false;
+		}
+	}
+
+	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+	if (aSettings->iUseIdentityPrivacyPresent)
+	{
+		internal_settings->m_UseIdentityPrivacyPresent = true;
+
+		if (aSettings->iUseIdentityPrivacy)
+		{
+			internal_settings->m_UseIdentityPrivacy = true;
+		}
+		else
+		{
+			internal_settings->m_UseIdentityPrivacy = false;
+		}
+	}
+
+	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+	
+	EAP_TRACE_METHOD_SETTINGS(internal_settings);
+
+	return KErrNone;
+}
+
+// ----------------------------------------------------------
+
+EAP_FUNC_EXPORT TInt CEapConversion::ConvertInternalTypeToEAPSettings(
+	abs_eap_am_tools_c * const tools,
+	const eap_method_settings_c * const internal_settings,
+	EAPSettings * const aSettings)
+{
+	EAP_TRACE_DEBUG(
+		tools,
+		TRACE_FLAGS_DEFAULT,
+		(EAPL("CEapConversion::ConvertInternalTypeToEAPSettings()\n")));
+
+	EAP_TRACE_RETURN_STRING(tools, "returns: CEapConversion::ConvertInternalTypeToEAPSettings()");
+
+	if (aSettings == 0
+		|| internal_settings == 0)
+	{
+		return (tools->convert_eapol_error_to_am_error(
+			EAP_STATUS_RETURN(tools, eap_status_illegal_parameter)));
+	}
+
+	EAP_TRACE_METHOD_SETTINGS(internal_settings);
+
+	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+	{
+		eap_variable_data_c eap_data(tools);
+
+		eap_status_e status = internal_settings->m_EAPType.get_expanded_type_data(
+			tools,
+			&eap_data);
+		if (status != eap_status_ok)
+		{
+			return (tools->convert_eapol_error_to_am_error(
+				EAP_STATUS_RETURN(tools, status)));
+		}
+
+		TInt error = aSettings->iEAPExpandedType.SetValue(
+			eap_data.get_data(),
+			eap_data.get_data_length());
+	}
+
+	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+	if (internal_settings->m_UseAutomaticCACertificatePresent == true)
+	{
+		aSettings->iUseAutomaticCACertificatePresent = ETrue;
+
+		if (internal_settings->m_UseAutomaticCACertificate == true)
+		{
+			aSettings->iUseAutomaticCACertificate = ETrue;
+		}
+		else
+		{
+			aSettings->iUseAutomaticCACertificate = EFalse;
+		}
+	}
+
+	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+	if (internal_settings->m_UseAutomaticUsernamePresent == true)
+	{
+		aSettings->iUseAutomaticUsernamePresent = ETrue;
+
+		if (internal_settings->m_UseAutomaticUsername == true)
+		{
+			aSettings->iUseAutomaticUsername = ETrue;
+		}
+		else
+		{
+			aSettings->iUseAutomaticUsername = EFalse;
+		}
+	}
+
+	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+	if (internal_settings->m_UseAutomaticRealmPresent == true)
+	{
+		aSettings->iUseAutomaticRealmPresent = ETrue;
+
+		if (internal_settings->m_UseAutomaticRealm == true)
+		{
+			aSettings->iUseAutomaticRealm = ETrue;
+		}
+		else
+		{
+			aSettings->iUseAutomaticRealm = EFalse;
+		}
+	}
+
+	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+	if (internal_settings->m_UsernamePresent == true)
+	{
+		TInt error = ConvertFromInternalToBuf16(tools, &(internal_settings->m_Username_fix), &(aSettings->iUsername));
+		if (error)
+		{
+			return error;
+		}
+
+		aSettings->iUsernamePresent = ETrue;
+	}
+
+	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+	if (internal_settings->m_PasswordExistPresent == true)
+	{
+		aSettings->iPasswordExistPresent = ETrue;
+
+		if (internal_settings->m_PasswordExist == true)
+		{
+			aSettings->iPasswordExist = ETrue;
+		}
+		else
+		{
+			aSettings->iPasswordExist = EFalse;
+		}
+	}
+
+	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+	if (internal_settings->m_PasswordPresent == true)
+	{
+		TInt error = ConvertFromInternalToBuf16(tools, &(internal_settings->m_Password), &(aSettings->iPassword));
+		if (error)
+		{
+			return error;
+		}
+
+		aSettings->iPasswordPresent = ETrue;
+	}
+
+	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+	if (internal_settings->m_RealmPresent == true)
+	{
+		TInt error = ConvertFromInternalToBuf16(tools, &(internal_settings->m_Realm), &(aSettings->iRealm));
+		if (error)
+		{
+			return error;
+		}
+
+		aSettings->iRealmPresent = ETrue;
+	}
+
+	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+	if (internal_settings->m_UsePseudonymsPresent == true)
+	{
+		aSettings->iUsePseudonymsPresent = ETrue;
+
+		if (internal_settings->m_UsePseudonyms == true)
+		{
+			aSettings->iUsePseudonyms = ETrue;
+		}
+		else
+		{
+			aSettings->iUsePseudonyms = EFalse;
+		}
+	}
+
+	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+	if (internal_settings->m_VerifyServerRealmPresent == true)
+	{
+		aSettings->iVerifyServerRealmPresent = ETrue;
+
+		if (internal_settings->m_VerifyServerRealm == true)
+		{
+			aSettings->iVerifyServerRealm = ETrue;
+		}
+		else
+		{
+			aSettings->iVerifyServerRealm = EFalse;
+		}
+	}
+
+	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+	if (internal_settings->m_RequireClientAuthenticationPresent == true)
+	{
+		aSettings->iRequireClientAuthenticationPresent = ETrue;
+
+		if (internal_settings->m_RequireClientAuthentication == true)
+		{
+			aSettings->iRequireClientAuthentication = ETrue;
+		}
+		else
+		{
+			aSettings->iRequireClientAuthentication = EFalse;
+		}
+	}
+
+	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+	if (internal_settings->m_SessionValidityTimePresent == true)
+	{
+		aSettings->iSessionValidityTimePresent = ETrue;
+
+		aSettings->iSessionValidityTime = static_cast<TUint>(internal_settings->m_SessionValidityTime);
+	}
+
+	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+	if (internal_settings->m_CipherSuitesPresent == true)
+	{
+		TInt error = ConvertInternalTypeToCipherSuites(
+			tools,
+			&(internal_settings->m_CipherSuites),
+			&(aSettings->iCipherSuites));
+		if (error)
+		{
+			return error;
+		}
+
+		aSettings->iCipherSuitesPresent = ETrue;
+	}
+
+	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+	if (internal_settings->m_PEAPVersionsPresent == true)
+	{
+		aSettings->iPEAPVersionsPresent = ETrue;
+
+		if (internal_settings->m_PEAPv0Allowed == true)
+		{
+			aSettings->iPEAPv0Allowed = ETrue;
+		}
+		else
+		{
+			aSettings->iPEAPv0Allowed = EFalse;
+		}
+
+		if (internal_settings->m_PEAPv1Allowed == true)
+		{
+			aSettings->iPEAPv1Allowed = ETrue;
+		}
+		else
+		{
+			aSettings->iPEAPv1Allowed = EFalse;
+		}
+
+		if (internal_settings->m_PEAPv2Allowed == true)
+		{
+			aSettings->iPEAPv2Allowed = ETrue;
+		}
+		else
+		{
+			aSettings->iPEAPv2Allowed = EFalse;
+		}
+	}
+
+	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+	if (internal_settings->m_CertificatesPresent == true)
+	{
+		TInt error = KErrNone;
+		
+		error = ConvertInternalTypeToCertificates(
+			tools,
+			eap_certificate_entry_c::eap_certificate_type_user,
+			&(internal_settings->m_Certificates),
+			&(aSettings->iCertificates));
+
+		if (error)
+			{
+			return error;	
+			}
+			
+		error = ConvertInternalTypeToCertificates(
+			tools,
+			eap_certificate_entry_c::eap_certificate_type_CA,
+			&(internal_settings->m_Certificates),
+			&(aSettings->iCertificates));
+
+		if (error)
+			{
+			return error;	
+			}
+
+		aSettings->iCertificatesPresent = ETrue;
+	}
+
+	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+	if (internal_settings->m_EnabledEncapsulatedEAPTypesPresent == true)
+	{
+		TInt error = ConvertInternalTypesToExpandedEAPTypes(
+			tools,
+			&(internal_settings->m_EnabledEncapsulatedEAPTypes),
+			&(aSettings->iEnabledEncapsulatedEAPExpandedTypes));
+		if (error)
+		{
+			return error;
+		}
+
+		aSettings->iEnabledEncapsulatedEAPExpandedTypesPresent = ETrue;
+	}
+
+	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+	if (internal_settings->m_DisabledEncapsulatedEAPTypesPresent == true)
+	{
+		TInt error = ConvertInternalTypesToExpandedEAPTypes(
+			tools,
+			&(internal_settings->m_DisabledEncapsulatedEAPTypes),
+			&(aSettings->iDisabledEncapsulatedEAPExpandedTypes));
+		if (error)
+		{
+			return error;
+		}
+
+		aSettings->iDisabledEncapsulatedEAPExpandedTypesPresent = ETrue;
+	}
+
+	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+	if (internal_settings->m_AuthProvModeAllowedPresent == true)
+	{
+		aSettings->iAuthProvModeAllowedPresent = ETrue;
+
+		if (internal_settings->m_AuthProvModeAllowed == true)
+		{
+			aSettings->iAuthProvModeAllowed = ETrue;
+		}
+		else
+		{
+			aSettings->iAuthProvModeAllowed = EFalse;
+		}
+	}
+
+	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+	if (internal_settings->m_UnauthProvModeAllowedPresent == true)
+	{
+		aSettings->iUnauthProvModeAllowedPresent = ETrue;
+
+		if (internal_settings->m_UnauthProvModeAllowed == true)
+		{
+			aSettings->iUnauthProvModeAllowed = ETrue;
+		}
+		else
+		{
+			aSettings->iUnauthProvModeAllowed = EFalse;
+		}
+	}
+
+	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+	if (internal_settings->m_PACGroupReferencePresent == true)
+	{
+		TInt error = ConvertFromInternalToBuf16(tools, &(internal_settings->m_PACGroupReference), &(aSettings->iPACGroupReference));
+		if (error)
+		{
+			return error;
+		}
+
+		aSettings->iPACGroupReferencePresent = ETrue;
+	}
+
+	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+	if (internal_settings->m_WarnADHPNoPACPresent == true)
+	{
+		aSettings->iWarnADHPNoPACPresent = ETrue;
+
+		if (internal_settings->m_WarnADHPNoPAC == true)
+		{
+			aSettings->iWarnADHPNoPAC = ETrue;
+		}
+		else
+		{
+			aSettings->iWarnADHPNoPAC = EFalse;
+		}
+	}
+
+	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+	if (internal_settings->m_WarnADHPNoMatchingPACPresent == true)
+	{
+		aSettings->iWarnADHPNoMatchingPACPresent = ETrue;
+
+		if (internal_settings->m_WarnADHPNoMatchingPAC == true)
+		{
+			aSettings->iWarnADHPNoMatchingPAC = ETrue;
+		}
+		else
+		{
+			aSettings->iWarnADHPNoMatchingPAC = EFalse;
+		}
+	}
+
+	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+	if (internal_settings->m_WarnNotDefaultServerPresent == true)
+	{
+		aSettings->iWarnNotDefaultServerPresent = ETrue;
+
+		if (internal_settings->m_WarnNotDefaultServer == true)
+		{
+			aSettings->iWarnNotDefaultServer = ETrue;
+		}
+		else
+		{
+			aSettings->iWarnNotDefaultServer = EFalse;
+		}
+	}
+
+	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+	if (internal_settings->m_ShowPassWordPromptPresent == true)
+	{
+		aSettings->iShowPassWordPromptPresent = ETrue;
+
+		if (internal_settings->m_ShowPassWordPrompt == true)
+		{
+			aSettings->iShowPassWordPrompt = ETrue;
+		}
+		else
+		{
+			aSettings->iShowPassWordPrompt = EFalse;
+		}
+	}
+
+	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+	if (internal_settings->m_UseIdentityPrivacyPresent == true)
+	{
+		aSettings->iUseIdentityPrivacyPresent = ETrue;
+
+		if (internal_settings->m_UseIdentityPrivacy == true)
+		{
+			aSettings->iUseIdentityPrivacy = ETrue;
+		}
+		else
+		{
+			aSettings->iUseIdentityPrivacy = EFalse;
+		}
+	}
+
+	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+	EAP_TRACE_SETTINGS(aSettings);
+
+	return KErrNone;
+}
+
+// ----------------------------------------------------------
+// End of file