--- /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