eapol/eapol_framework/eapol_symbian/eap_server/src/EapServerProcessHandler.cpp
branchRCL_3
changeset 18 bad0cc58d154
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eapol/eapol_framework/eapol_symbian/eap_server/src/EapServerProcessHandler.cpp	Tue Aug 31 15:16:37 2010 +0300
@@ -0,0 +1,921 @@
+/*
+* 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:  41 %
+*/
+
+#include "EapServerProcessHandler.h"
+#include "EapTraceSymbian.h"
+#if defined(USE_FAST_EAP_TYPE)
+#include "PacStoreIf.h"
+#endif //#if defined(USE_FAST_EAP_TYPE)
+#include "EapServerStrings.h"
+#include "eap_automatic_variable.h"
+
+//----------------------------------------------------------------------------
+
+CEapServerProcessHandler::CEapServerProcessHandler()
+: CActive (0)
+, iClient(0)
+, iTools(0)
+, iEapCore(0)
+, iEapPlugin(0)
+, iEapSettings(0)
+#if defined (USE_WAPI_CORE)
+, iWapiCore(0)
+, iWapiSettings(0)
+#endif
+#if defined(USE_FAST_EAP_TYPE)
+, iPacStore(0)
+#endif //#if defined(USE_FAST_EAP_TYPE)
+, iEapMessageQueue(0)
+{
+	EAP_TRACE_DEBUG(
+		iTools,
+		TRACE_FLAGS_DEFAULT,
+		(EAPL("CEapServerProcessHandler::CEapServerProcessHandler(): this=0x%08x\n"),
+		this));
+	EAP_TRACE_RETURN_STRING(iTools, "returns: CEapServerProcessHandler::CEapServerProcessHandler()");
+}
+
+//----------------------------------------------------------------------------
+
+CEapServerProcessHandler::~CEapServerProcessHandler()
+{
+	EAP_TRACE_DEBUG(
+		iTools,
+		TRACE_FLAGS_DEFAULT,
+		(EAPL("CEapServerProcessHandler::~CEapServerProcessHandler(): this=0x%08x\n"),
+		this));
+	EAP_TRACE_RETURN_STRING(iTools, "returns: CEapServerProcessHandler::~CEapServerProcessHandler()");
+
+	if(IsActive())
+	{
+		Cancel();
+	}
+
+	delete iEapCore;
+	iEapCore = 0;
+
+	delete iEapPlugin;
+	iEapPlugin = 0;
+
+	delete iEapSettings;
+	iEapSettings = 0;
+
+#if defined (USE_WAPI_CORE)
+    delete iWapiCore;
+    iWapiCore = 0;
+
+    delete iWapiSettings;
+    iWapiSettings = 0;
+#endif
+
+#if defined(USE_FAST_EAP_TYPE)
+    delete iPacStore;
+    iPacStore = 0;
+#endif //#if defined(USE_FAST_EAP_TYPE)
+
+    delete iEapMessageQueue;
+	iEapMessageQueue = 0;
+}
+    
+//----------------------------------------------------------------------------
+
+CEapServerProcessHandler* CEapServerProcessHandler::NewL()
+{
+	return new (ELeave) CEapServerProcessHandler();
+}
+
+//----------------------------------------------------------------------------
+
+void CEapServerProcessHandler::ConstructL(AbsEapProcessSendInterface* const client, abs_eap_am_tools_c * const tools)
+{
+	EAP_TRACE_DEBUG(
+		tools,
+		TRACE_FLAGS_DEFAULT,
+		(EAPL("CEapServerProcessHandler::ConstructL(): this=0x%08x\n"),
+		this));
+	EAP_TRACE_RETURN_STRING(tools, "returns: CEapServerProcessHandler::ConstructL()");
+
+	iClient = client;
+	iTools = tools;
+
+	iEapMessageQueue = new(ELeave) EapMessageQueue(iTools);
+}
+
+//----------------------------------------------------------------------------
+
+eap_status_e CEapServerProcessHandler::SendData(const void * const data, const u32_t length, TEapRequests message)
+{
+	EAP_TRACE_DEBUG(
+		iTools,
+		TRACE_FLAGS_DEFAULT,
+		(EAPL("CEapServerProcessHandler::SendData(): this=0x%08x\n"),
+		this));
+	EAP_TRACE_RETURN_STRING(iTools, "returns: CEapServerProcessHandler::SendData()");
+
+	eap_status_e status(eap_status_ok);
+
+	SaveMessage(message, data, length);
+
+	return status;
+}
+
+//----------------------------------------------------------------------------
+
+void CEapServerProcessHandler::SaveMessage(TEapRequests message, const void * const data, const TUint length)
+{
+	EAP_TRACE_DEBUG(
+		iTools,
+		TRACE_FLAGS_DEFAULT,
+		(EAPL("CEapServerProcessHandler::SaveMessage(): this=0x%08x, message=%d=%s\n"),
+		this,
+		message,
+		EapServerStrings::GetEapRequestsString(message)));
+	EAP_TRACE_RETURN_STRING(iTools, "returns: CEapServerProcessHandler::SaveMessage()");
+
+	EAP_TRACE_DATA_DEBUG(
+		iTools,
+		EAP_TRACE_FLAGS_NEVER,
+		(EAPL("CEapServerProcessHandler::SaveMessage()"),
+		data,
+		length));
+
+	EAP_TRACE_DEBUG(
+		iTools,
+		TRACE_FLAGS_DEFAULT,
+		(EAPL("CEapServerProcessHandler::SaveMessage(): calls iEapMessageQueue->AddMessage()\n")));
+
+	TInt error = iEapMessageQueue->AddMessage(message, data, length);
+
+	if (error != KErrNone)
+	{
+		EAP_TRACE_DEBUG(
+			iTools,
+			TRACE_FLAGS_DEFAULT,
+			(EAPL("ERROR: CEapServerProcessHandler::SaveMessage(): failed = %d\n"),
+			error));
+		return;
+	}
+
+	Activate();
+
+	EAP_TRACE_DEBUG(
+		iTools,
+		TRACE_FLAGS_DEFAULT,
+		(EAPL("CEapServerProcessHandler::SaveMessage(): returns this=0x%08x, message=%d=%s\n"),
+		this,
+		message,
+		EapServerStrings::GetEapRequestsString(message)));
+}
+
+//----------------------------------------------------------------------------
+
+void CEapServerProcessHandler::Activate()
+{
+	EAP_TRACE_DEBUG(
+		iTools,
+		TRACE_FLAGS_DEFAULT,
+		(EAPL("CEapServerProcessHandler::Activate(): this=0x%08x\n"),
+		this));
+	EAP_TRACE_RETURN_STRING(iTools, "returns: CEapServerProcessHandler::Activate()");
+
+	if(!IsActive())
+	{
+		EAP_TRACE_DEBUG(
+			iTools,
+			TRACE_FLAGS_DEFAULT,
+			(EAPL("CEapServerProcessHandler::Activate(): calls User::RequestComplete()\n")));
+
+		TRequestStatus* status = &iStatus;
+		User::RequestComplete(status, KErrNone);
+
+		EAP_TRACE_DEBUG(
+			iTools,
+			TRACE_FLAGS_DEFAULT,
+			(EAPL("CEapServerProcessHandler::Activate(): calls SetActive()\n")));
+
+		SetActive();
+	}
+	else
+	{
+		EAP_TRACE_DEBUG(
+			iTools,
+			TRACE_FLAGS_DEFAULT,
+			(EAPL("CEapServerProcessHandler::Activate(): Already active.\n")));
+	}
+}
+
+//----------------------------------------------------------------------------
+
+void CEapServerProcessHandler::RunL()
+{
+	EAP_TRACE_DEBUG(
+		iTools,
+		TRACE_FLAGS_DEFAULT,
+		(EAPL("=start=====================================================================\n")));
+
+	EAP_TRACE_RETURN_STRING(iTools, "returns: CEapServerProcessHandler::RunL()");
+
+	EAP_TRACE_DEBUG(
+		iTools,
+		TRACE_FLAGS_DEFAULT,
+		(EAPL("CEapServerProcessHandler::RunL(): this=0x%08x\n"),
+		this));
+
+	EapMessageBuffer * const message = iEapMessageQueue->GetFirstMessage();
+
+	if (message != 0)
+	{
+		EAP_TRACE_DEBUG(
+			iTools,
+			TRACE_FLAGS_DEFAULT,
+			(EAPL("CEapServerProcessHandler::RunL(): message->GetRequestType()=%d=%s, data=0x%08x, size=%d\n"),
+			message->GetRequestType(),
+			EapServerStrings::GetEapRequestsString(message->GetRequestType()),
+			message->GetData()->Ptr(),
+			message->GetData()->Size()));
+
+		eap_status_e status(eap_status_ok);
+
+		switch (message->GetRequestType())
+		{
+
+		case EEapCoreIfNew:
+
+			{
+				EAP_TRACE_DEBUG(
+					iTools,
+					TRACE_FLAGS_DEFAULT,
+					(EAPL("CEapServerProcessHandler::RunL() EEapCoreIfNew\n")));
+
+				CEapCoreIf * tmpEapCore = CEapCoreIf::new_CEapCoreIf(
+					iTools,
+					ETrue,
+					0,
+					this);
+
+				if (tmpEapCore != 0)
+				{
+					CleanupStack::PushL(tmpEapCore);
+
+					if (tmpEapCore->get_is_valid() == false)
+					{
+						EAP_TRACE_DEBUG(
+							iTools,
+							TRACE_FLAGS_DEFAULT,
+							(EAPL("ERROR: CEapServerProcessHandler::RunL(): CEapCoreIf::new_CEapCoreIf() failed, this=0x%08x\n"),
+							this));
+
+						User::Leave(iTools->convert_eapol_error_to_am_error(EAP_STATUS_RETURN(iTools, eap_status_allocation_error)));
+					}
+
+					const void * const aData = reinterpret_cast<const void *>(message->GetData()->Ptr());
+					const TInt aLength = message->GetData()->Size();
+
+					const eap_variable_data_c client_configuration(
+						iTools,
+						aData,
+						aLength,
+						false,
+						false);
+					if (client_configuration.get_is_valid() == false)
+					{
+						EAP_TRACE_DEBUG(
+							iTools,
+							TRACE_FLAGS_DEFAULT,
+							(EAPL("ERROR: CEapServerProcessHandler::RunL(): eap_variable_data_c client_configuration() failed, this=0x%08x\n"),
+							this));
+
+						User::Leave(iTools->convert_eapol_error_to_am_error(EAP_STATUS_RETURN(iTools, eap_status_allocation_error)));
+					}
+
+					status = tmpEapCore->configure(&client_configuration);
+					if (status != eap_status_ok)
+					{
+						EAP_TRACE_DEBUG(
+							iTools,
+							TRACE_FLAGS_DEFAULT,
+							(EAPL("ERROR: CEapServerProcessHandler::RunL(): tmpEapCore->configure() failed, this=0x%08x, status=%d=%s\n"),
+							this,
+							status,
+							eap_status_string_c::get_status_string(status)));
+
+						User::Leave(iTools->convert_eapol_error_to_am_error(EAP_STATUS_RETURN(iTools, status)));
+					}
+
+					iEapCore = tmpEapCore;
+
+					CleanupStack::Pop(tmpEapCore);
+				}
+				else
+				{
+					EAP_TRACE_DEBUG(
+						iTools,
+						TRACE_FLAGS_DEFAULT,
+						(EAPL("ERROR: CEapServerProcessHandler::RunL(): EEapCoreIfNew, iEapCore is NULL\n")));
+				}
+			}
+
+			break;
+
+		case EEapPluginNew:
+
+			{
+				EAP_TRACE_DEBUG(
+					iTools,
+					TRACE_FLAGS_DEFAULT,
+					(EAPL("CEapServerProcessHandler::RunL() EEapPluginNew\n")));
+
+				CEapPluginIf * tmpEapPlugin = CEapPluginIf::new_CEapPluginIf(iTools);
+
+				if (tmpEapPlugin != 0)
+				{
+					CleanupStack::PushL(tmpEapPlugin);
+
+					if (tmpEapPlugin->get_is_valid() == false)
+					{
+						EAP_TRACE_DEBUG(
+							iTools,
+							TRACE_FLAGS_DEFAULT,
+							(EAPL("ERROR: CEapServerProcessHandler::RunL(): CEapPluginIf::new_CEapPluginIf() failed, this=0x%08x\n"),
+							this));
+
+						User::Leave(iTools->convert_eapol_error_to_am_error(EAP_STATUS_RETURN(iTools, eap_status_allocation_error)));
+					}
+
+					tmpEapPlugin->set_partner(this);
+
+					const void * const aData = reinterpret_cast<const void *>(message->GetData()->Ptr());
+					const TInt aLength = message->GetData()->Size();
+
+					const eap_variable_data_c client_configuration(
+						iTools,
+						aData,
+						aLength,
+						false,
+						false);
+					if (client_configuration.get_is_valid() == false)
+					{
+						EAP_TRACE_DEBUG(
+							iTools,
+							TRACE_FLAGS_DEFAULT,
+							(EAPL("ERROR: CEapServerProcessHandler::RunL(): eap_variable_data_c client_configuration() failed, this=0x%08x\n"),
+							this));
+
+						User::Leave(iTools->convert_eapol_error_to_am_error(EAP_STATUS_RETURN(iTools, eap_status_allocation_error)));
+					}
+
+					status = tmpEapPlugin->configure(&client_configuration);
+					if (status != eap_status_ok)
+					{
+						EAP_TRACE_DEBUG(
+							iTools,
+							TRACE_FLAGS_DEFAULT,
+							(EAPL("ERROR: CEapServerProcessHandler::RunL(): tmpEapPlugin->configure() failed, this=0x%08x, status=%d=%s\n"),
+							this,
+							status,
+							eap_status_string_c::get_status_string(status)));
+
+						User::Leave(iTools->convert_eapol_error_to_am_error(EAP_STATUS_RETURN(iTools, status)));
+					}
+
+					iEapPlugin = tmpEapPlugin;
+
+					CleanupStack::Pop(tmpEapPlugin);
+				}
+				else
+				{
+					EAP_TRACE_DEBUG(
+						iTools,
+						TRACE_FLAGS_DEFAULT,
+						(EAPL("ERROR: CEapServerProcessHandler::RunL(): EEapPluginNew, iEapPlugin is NULL\n")));
+				}
+			}
+
+			break;
+
+		case EEapSettingsNew:
+
+			{
+				EAP_TRACE_DEBUG(
+					iTools,
+					TRACE_FLAGS_DEFAULT,
+					(EAPL("CEapServerProcessHandler::RunL() EEapSettingsNew\n")));
+
+				CEapSettingsIf * tmpEapSettings = CEapSettingsIf::new_CEapSettingsIf(iTools);
+
+				if (tmpEapSettings != 0)
+				{
+					CleanupStack::PushL(tmpEapSettings);
+
+					if (tmpEapSettings->get_is_valid() == false)
+					{
+						EAP_TRACE_DEBUG(
+							iTools,
+							TRACE_FLAGS_DEFAULT,
+							(EAPL("ERROR: CEapServerProcessHandler::RunL(): CEapSettingsIf::new_CEapSettingsIf() failed, this=0x%08x\n"),
+							this));
+
+						User::Leave(iTools->convert_eapol_error_to_am_error(EAP_STATUS_RETURN(iTools, eap_status_allocation_error)));
+					}
+
+					tmpEapSettings->set_partner(this);
+
+					const void * const aData = reinterpret_cast<const void *>(message->GetData()->Ptr());
+					const TInt aLength = message->GetData()->Size();
+
+					const eap_variable_data_c client_configuration(
+						iTools,
+						aData,
+						aLength,
+						false,
+						false);
+					if (client_configuration.get_is_valid() == false)
+					{
+						EAP_TRACE_DEBUG(
+							iTools,
+							TRACE_FLAGS_DEFAULT,
+							(EAPL("ERROR: CEapServerProcessHandler::RunL(): eap_variable_data_c client_configuration() failed, this=0x%08x\n"),
+							this));
+
+						User::Leave(iTools->convert_eapol_error_to_am_error(EAP_STATUS_RETURN(iTools, eap_status_allocation_error)));
+					}
+
+					status = tmpEapSettings->configure(&client_configuration);
+					if (status != eap_status_ok)
+					{
+						EAP_TRACE_DEBUG(
+							iTools,
+							TRACE_FLAGS_DEFAULT,
+							(EAPL("ERROR: CEapServerProcessHandler::RunL(): tmpEapSettings->configure() failed, this=0x%08x, status=%d=%s\n"),
+							this,
+							status,
+							eap_status_string_c::get_status_string(status)));
+
+						User::Leave(iTools->convert_eapol_error_to_am_error(EAP_STATUS_RETURN(iTools, status)));
+					}
+
+					iEapSettings = tmpEapSettings;
+
+					CleanupStack::Pop(tmpEapSettings);
+				}
+				else
+				{
+					EAP_TRACE_DEBUG(
+						iTools,
+						TRACE_FLAGS_DEFAULT,
+						(EAPL("ERROR: CEapServerProcessHandler::RunL(): EEapSettingsNew, iEapSettings is NULL\n")));
+				}
+			}
+
+			break;
+
+#if defined (USE_WAPI_CORE)
+	     case EWapiCoreIfNew:
+
+	            EAP_TRACE_DEBUG(
+	                iTools,
+	                TRACE_FLAGS_DEFAULT,
+	                (EAPL("CEapServerProcessHandler::RunL() EWapiCoreIfNew\n")));
+
+                iWapiCore = CWapiCoreIf::NewL(iTools, this);
+
+				EAP_TRACE_DEBUG(
+					iTools,
+					TRACE_FLAGS_DEFAULT,
+					(EAPL("CEapServerProcessHandler::RunL() EWapiCoreIfNew - iWapiCore = 0x%08x.\n"),
+					iWapiCore));
+
+
+	            break;
+
+	        case EWapiSettingsNew:
+
+	            EAP_TRACE_DEBUG(
+	                iTools,
+	                TRACE_FLAGS_DEFAULT,
+	                (EAPL("CEapServerProcessHandler::RunL() EWapiSettingsNew\n")));
+
+	            iWapiSettings = CWapiSettingsIf::NewL(iTools, this);
+
+				EAP_TRACE_DEBUG(
+					iTools,
+					TRACE_FLAGS_DEFAULT,
+					(EAPL("CEapServerProcessHandler::RunL() EWapiSettingsNew - iWapiSettings = 0x%08x.\n"),
+					iWapiSettings));
+	            break;
+#endif
+	            
+        case EEapPacStoreNew:
+
+			{
+				EAP_TRACE_DEBUG(
+					iTools,
+					TRACE_FLAGS_DEFAULT,
+					(EAPL("CEapServerProcessHandler::RunL() EEapPacStoreNew\n")));
+
+#if defined(USE_FAST_EAP_TYPE)
+
+				CPacStoreIf * tmpPacStore = CPacStoreIf::new_CPacStoreIf(
+					iTools,
+					ETrue,
+					0,
+					this);
+
+				if (tmpPacStore != 0)
+				{
+					CleanupStack::PushL(tmpPacStore);
+
+					if (tmpPacStore->get_is_valid() == false)
+					{
+						EAP_TRACE_DEBUG(
+							iTools,
+							TRACE_FLAGS_DEFAULT,
+							(EAPL("ERROR: CEapServerProcessHandler::RunL(): CPacStoreIf::new_CPacStoreIf() failed, this=0x%08x\n"),
+							this));
+
+						User::Leave(iTools->convert_eapol_error_to_am_error(EAP_STATUS_RETURN(iTools, eap_status_allocation_error)));
+					}
+
+					const void * const aData = reinterpret_cast<const void *>(message->GetData()->Ptr());
+					const TInt aLength = message->GetData()->Size();
+
+					const eap_variable_data_c client_configuration(
+						iTools,
+						aData,
+						aLength,
+						false,
+						false);
+					if (client_configuration.get_is_valid() == false)
+					{
+						EAP_TRACE_DEBUG(
+							iTools,
+							TRACE_FLAGS_DEFAULT,
+							(EAPL("ERROR: CEapServerProcessHandler::RunL(): eap_variable_data_c client_configuration() failed, this=0x%08x\n"),
+							this));
+
+						User::Leave(iTools->convert_eapol_error_to_am_error(EAP_STATUS_RETURN(iTools, eap_status_allocation_error)));
+					}
+
+					status = tmpPacStore->configure(&client_configuration);
+					if (status != eap_status_ok)
+					{
+						EAP_TRACE_DEBUG(
+							iTools,
+							TRACE_FLAGS_DEFAULT,
+							(EAPL("ERROR: CEapServerProcessHandler::RunL(): tmpPacStore->configure() failed, this=0x%08x, status=%d=%s\n"),
+							this,
+							status,
+							eap_status_string_c::get_status_string(status)));
+
+						User::Leave(iTools->convert_eapol_error_to_am_error(EAP_STATUS_RETURN(iTools, status)));
+					}
+
+					iPacStore = tmpPacStore;
+
+					CleanupStack::Pop(tmpPacStore);
+				}
+				else
+				{
+					EAP_TRACE_DEBUG(
+						iTools,
+						TRACE_FLAGS_DEFAULT,
+						(EAPL("ERROR: CEapServerProcessHandler::RunL(): EEapPacStoreNew, iPacStore is NULL\n")));
+				}
+
+#endif //#if defined(USE_FAST_EAP_TYPE)
+
+			}
+
+            break;
+
+        case EEapCoreProcessData:
+
+            EAP_TRACE_DEBUG(
+                iTools,
+                TRACE_FLAGS_DEFAULT,
+                (EAPL("CEapServerProcessHandler::RunL() EEapCoreProcessData\n")));
+
+            if (iEapCore !=0)
+            {
+                void* aData = reinterpret_cast<void *>(const_cast<TUint8 *>(message->GetData()->Ptr()));
+                TInt aLength = message->GetData()->Size();
+                iEapCore->process_data(aData, aLength);
+            }
+            else
+            {
+                EAP_TRACE_DEBUG(
+                    iTools,
+                    TRACE_FLAGS_DEFAULT,
+                    (EAPL("ERROR: CEapServerProcessHandler::RunL(): EEapCoreProcessData, iEapCore is NULL\n")));
+            }
+
+            break;
+
+        case EEapPacStoreProcessData:
+
+			EAP_TRACE_DEBUG(
+				iTools,
+				TRACE_FLAGS_DEFAULT,
+				(EAPL("CEapServerProcessHandler::RunL() EEapPacStoreProcessData\n")));
+
+#if defined(USE_FAST_EAP_TYPE)
+			if (iPacStore !=0)
+			{
+				void* aData = reinterpret_cast<void *>(const_cast<TUint8 *>(message->GetData()->Ptr()));
+				TInt aLength = message->GetData()->Size();
+				iPacStore->process_data(aData, aLength);
+			}
+			else
+			{
+				EAP_TRACE_DEBUG(
+					iTools,
+					TRACE_FLAGS_DEFAULT,
+					(EAPL("ERROR: CEapServerProcessHandler::RunL(): EEapPacStoreProcessData, iPacStore is NULL\n")));
+			}
+#endif //#if defined(USE_FAST_EAP_TYPE)
+			break;
+
+		case EEapPluginProcessData:
+
+			EAP_TRACE_DEBUG(
+				iTools,
+				TRACE_FLAGS_DEFAULT,
+				(EAPL("CEapServerProcessHandler::RunL() EEapPluginProcessData\n")));
+
+			if (iEapPlugin !=0)
+			{
+				void* aData = reinterpret_cast<void *>(const_cast<TUint8 *>(message->GetData()->Ptr()));
+				TInt aLength = message->GetData()->Size();
+				iEapPlugin->process_data(aData, aLength);
+			}
+			else
+			{
+				EAP_TRACE_DEBUG(
+					iTools,
+					TRACE_FLAGS_DEFAULT,
+					(EAPL("ERROR: CEapServerProcessHandler::RunL(): EEapPluginProcessData, iEapPlugin is NULL\n")));
+			}
+
+			break;
+
+		case EEapSettingsProcessData:
+
+			EAP_TRACE_DEBUG(
+				iTools,
+				TRACE_FLAGS_DEFAULT,
+				(EAPL("CEapServerProcessHandler::RunL() EEapSettingsProcessData\n")));
+
+			if (iEapSettings !=0)
+			{
+				void* aData = reinterpret_cast<void *>(const_cast<TUint8 *>(message->GetData()->Ptr()));
+				TInt aLength = message->GetData()->Size();
+				iEapSettings->process_data(aData, aLength);
+			}
+			else
+			{
+				EAP_TRACE_DEBUG(
+					iTools,
+					TRACE_FLAGS_DEFAULT,
+					(EAPL("ERROR: CEapServerProcessHandler::RunL(): EEapSettingsProcessData, iEapSettings is NULL\n")));
+			}
+
+			break;
+
+#if defined (USE_WAPI_CORE)
+		case EWapiCoreProcessData:
+
+            EAP_TRACE_DEBUG(
+                iTools,
+                TRACE_FLAGS_DEFAULT,
+                (EAPL("CEapServerProcessHandler::RunL() EWapiCoreProcessData\n")));
+
+            if (iWapiCore !=0)
+            {
+                void* aData = reinterpret_cast<void *>(const_cast<TUint8 *>(message->GetData()->Ptr()));
+                TInt aLength = message->GetData()->Size();
+                iWapiCore->process_data(aData, aLength);
+            }
+            else
+            {
+                EAP_TRACE_DEBUG(
+                    iTools,
+                    TRACE_FLAGS_DEFAULT,
+                    (EAPL("ERROR: CEapServerProcessHandler::RunL(): EWapiCoreProcessData, iWapiCore is NULL\n")));
+            }
+            break;
+
+		case EWapiSettingsProcessData:
+
+            EAP_TRACE_DEBUG(
+                iTools,
+                TRACE_FLAGS_DEFAULT,
+                (EAPL("CEapServerProcessHandler::RunL() EWapiSettingsProcessData\n")));
+
+            if (iWapiSettings !=0)
+            {
+                void* aData = reinterpret_cast<void *>(const_cast<TUint8 *>(message->GetData()->Ptr()));
+                TInt aLength = message->GetData()->Size();
+                iWapiSettings->process_data(aData, aLength);
+            }
+            else
+            {
+                EAP_TRACE_DEBUG(
+                    iTools,
+                    TRACE_FLAGS_DEFAULT,
+                    (EAPL("ERROR: CEapServerProcessHandler::RunL(): EWapiSettingsProcessData, iWapiSettings is NULL\n")));
+            }
+
+            break;
+#endif
+
+		case EEapCoreSendData:
+		case EEapPluginSendData:
+		case EEapSettingsSendData:
+        case EEapPacStoreSendData:
+#if defined (USE_WAPI_CORE)
+        case EWapiCoreSendData:
+        case EWapiSettingsSendData:
+#endif
+			if (message->GetRequestType() == EEapCoreSendData)
+			{
+				EAP_TRACE_DEBUG(
+					iTools,
+					TRACE_FLAGS_DEFAULT,
+					(EAPL("CEapServerProcessHandler::RunL() EEapCoreSendData\n")));
+			}
+			else if (message->GetRequestType() == EEapPluginSendData)
+			{
+				EAP_TRACE_DEBUG(
+					iTools,
+					TRACE_FLAGS_DEFAULT,
+					(EAPL("CEapServerProcessHandler::RunL() EEapPluginSendData\n")));
+			}
+			else if (message->GetRequestType() == EEapSettingsSendData)
+			{
+				EAP_TRACE_DEBUG(
+					iTools,
+					TRACE_FLAGS_DEFAULT,
+					(EAPL("CEapServerProcessHandler::RunL() EEapSettingsSendData\n")));
+			}
+            else if (message->GetRequestType() == EEapPacStoreSendData)
+            {
+                EAP_TRACE_DEBUG(
+                    iTools,
+                    TRACE_FLAGS_DEFAULT,
+                    (EAPL("CEapServerProcessHandler::RunL() EEapPacStoreSendData\n")));
+            }
+#if defined (USE_WAPI_CORE)
+            else if (message->GetRequestType() == EWapiCoreSendData)
+            {
+                EAP_TRACE_DEBUG(
+                    iTools,
+                    TRACE_FLAGS_DEFAULT,
+                    (EAPL("CEapServerProcessHandler::RunL() EWapiCoreSendData\n")));
+            }
+            else if (message->GetRequestType() == EWapiSettingsSendData)
+            {
+                EAP_TRACE_DEBUG(
+                    iTools,
+                    TRACE_FLAGS_DEFAULT,
+                    (EAPL("CEapServerProcessHandler::RunL() EWapiSettingsSendData\n")));
+            }
+#endif
+			EAP_TRACE_DEBUG(
+				iTools,
+				TRACE_FLAGS_DEFAULT,
+				(EAPL("CEapServerProcessHandler::RunL(): iClient=0x%08x\n"),
+				iClient));
+
+			if (iClient != 0)
+			{
+				status = iClient->SendData(message);
+				if (status != eap_status_ok)
+				{
+					EAP_TRACE_DEBUG(
+						iTools,
+						TRACE_FLAGS_DEFAULT,
+						(EAPL("ERROR: CEapServerProcessHandler::RunL(): SendData() failed, iClient=0x%08x, status=%d=%s\n"),
+						iClient,
+						status,
+						eap_status_string_c::get_status_string(status)));
+
+					// We do not return here. Even the iClient->SendData() fails we run this function to the end.
+				}
+			}
+			else
+			{
+				EAP_TRACE_DEBUG(
+					iTools,
+					TRACE_FLAGS_DEFAULT,
+					(EAPL("ERROR: CEapServerProcessHandler::RunL(): EEap*SendData, iClient is NULL\n")));
+			}
+
+			break;
+
+		default:
+
+			EAP_TRACE_DEBUG(
+				iTools,
+				TRACE_FLAGS_DEFAULT,
+				(EAPL("ERROR: CEapServerProcessHandler::RunL(): unknown message->GetRequestType()=%d=%s\n"),
+				message->GetRequestType(),
+				EapServerStrings::GetEapRequestsString(message->GetRequestType())));
+			break;
+
+		} // switch()
+
+		if (status == eap_status_ok)
+		{
+			// First one handled, remove message.
+			// iClient->SendData() call may fail, then we do not remove the message.
+			iEapMessageQueue->DeleteFirstMessage();
+		}
+
+	} // if ()
+
+	if (iEapMessageQueue->GetFirstMessage() != 0)
+	{
+		EAP_TRACE_DEBUG(
+			iTools,
+			TRACE_FLAGS_DEFAULT,
+			(EAPL("CEapServerProcessHandler::RunL(): Still messages waiting.\n")));
+
+		if (iClient != NULL)
+		{
+			if (iClient->GetReceiveActive())
+			{
+				Activate();
+			}
+			else
+			{
+				EAP_TRACE_DEBUG(
+					iTools,
+					TRACE_FLAGS_DEFAULT,
+					(EAPL("WARNING: CEapServerProcessHandler::RunL(): cannot call User::RequestComplete() because no receive is active.\n")));
+			}
+		}
+	}
+	else
+	{
+		EAP_TRACE_DEBUG(
+			iTools,
+			TRACE_FLAGS_DEFAULT,
+			(EAPL("CEapServerProcessHandler::RunL(): No more messages to process.\n")));
+	}
+
+	EAP_TRACE_DEBUG(
+		iTools,
+		TRACE_FLAGS_DEFAULT,
+		(EAPL("=end======================================================================\n")));
+}
+
+//----------------------------------------------------------------------------
+
+void CEapServerProcessHandler::DoCancel()
+{
+	EAP_TRACE_DEBUG(
+		iTools,
+		TRACE_FLAGS_DEFAULT,
+		(EAPL("CEapServerProcessHandler::DoCancel(): this=0x%08x\n"),
+		this));
+	EAP_TRACE_RETURN_STRING(iTools, "returns: CEapServerProcessHandler::DoCancel()");
+
+}
+
+//----------------------------------------------------------------------------
+
+TInt CEapServerProcessHandler::RunError(TInt aError)
+{
+	EAP_TRACE_DEBUG(
+		iTools,
+		TRACE_FLAGS_DEFAULT,
+		(EAPL("CEapServerProcessHandler::RunError(): aError=%d, this=0x%08x\n"),
+		aError,
+		this));
+	EAP_TRACE_RETURN_STRING(iTools, "returns: CEapServerProcessHandler::RunError()");
+
+	Cancel();
+
+	return aError;
+}
+
+//----------------------------------------------------------------------------
+// end