--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/eapol/eapol_framework/eapol_common/type/eap_type_all.cpp Thu Dec 17 08:47:43 2009 +0200
@@ -0,0 +1,694 @@
+/*
+* Copyright (c) 2001-2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: EAP and WLAN authentication protocols.
+*
+*/
+
+
+// This is enumeration of EAPOL source code.
+#if defined(USE_EAP_MINIMUM_RELEASE_TRACES)
+ #undef EAP_FILE_NUMBER_ENUM
+ #define EAP_FILE_NUMBER_ENUM 75
+ #undef EAP_FILE_NUMBER_DATE
+ #define EAP_FILE_NUMBER_DATE 1127594498
+#endif //#if defined(USE_EAP_MINIMUM_RELEASE_TRACES)
+
+
+
+#include "eap_am_memory.h"
+#include "eap_type_all.h"
+
+#if defined(USE_EAP_TYPE_GSMSIM)
+ #include "eap_type_gsmsim.h"
+ #include "eap_am_type_gsmsim.h"
+#endif
+#if defined(USE_AKA_EAP_TYPE)
+ #include "eap_type_aka.h"
+#endif
+#if defined(USE_MSCHAPV2_EAP_TYPE)
+ #include "eap_type_mschapv2.h"
+#endif
+#if defined(USE_SECURID_EAP_TYPE)
+ #include "eap_type_securid.h"
+#endif
+#if defined(USE_LEAP_EAP_TYPE)
+ #include "eap_type_leap.h"
+#endif
+#if defined(USE_TLS_EAP_TYPE) || defined(USE_PEAP_EAP_TYPE)
+ #include "eap_type_tls_peap.h"
+ #include "tls_base_record.h"
+ #include "tls_record.h"
+ #include "tls_application_eap_core.h"
+ #include "eap_am_type_tls_peap.h"
+ #include "tls_am_services.h"
+ #include "eap_core.h"
+#endif
+#if defined(USE_FAST_EAP_TYPE)
+ #include "eap_type_tls_peap.h"
+ #include "tls_base_record.h"
+ #include "tls_record.h"
+ #include "tls_application_eap_fast.h"
+ #include "eap_am_type_tls_peap.h"
+ #include "tls_am_services.h"
+ #include "eap_core.h"
+#endif
+#if defined(USE_SAESIM_EAP_TYPE)
+ #include "eap_type_saesim_core.h"
+#endif
+#if defined(USE_DUMMY_SIM_EAP_TYPE)
+ #include "eap_type_dummy_sim.h"
+#endif
+#if defined(USE_EAP_SIMPLE_CONFIG)
+ #include "simple_config_am_services.h"
+ #include "eap_am_type_simple_config.h"
+ #include "simple_config_base_record.h"
+ #include "simple_config_record.h"
+ #include "eap_type_simple_config.h"
+#endif //#if defined(USE_EAP_SIMPLE_CONFIG)
+
+//--------------------------------------------------
+
+//
+EAP_C_FUNC_EXPORT eap_base_type_c * const new_eap_type(
+ abs_eap_am_tools_c * const tools,
+ abs_eap_base_type_c * const partner,
+ const eap_type_value_e eap_type,
+ const bool is_client_when_true,
+ const eap_am_network_id_c * const receive_network_id,
+ abs_eap_configuration_if_c * const configuration_if)
+{
+ EAP_TRACE_BEGIN(tools, TRACE_FLAGS_DEFAULT);
+ eap_base_type_c *type = 0;
+
+ if (tools == 0)
+ {
+ EAP_TRACE_ERROR(
+ tools,
+ TRACE_FLAGS_DEFAULT,
+ (EAPL("ERROR: new_eap_type(): parameter tools is NULL.\n")));
+ EAP_TRACE_END(tools, TRACE_FLAGS_DEFAULT);
+ return 0;
+ }
+
+ if (partner == 0)
+ {
+ EAP_TRACE_ERROR(
+ tools,
+ TRACE_FLAGS_DEFAULT,
+ (EAPL("ERROR: new_eap_type(): parameter partner is NULL.\n")));
+ EAP_TRACE_END(tools, TRACE_FLAGS_DEFAULT);
+ return 0;
+ }
+
+ if (receive_network_id == 0
+ || receive_network_id->get_source() == 0
+ || receive_network_id->get_destination() == 0)
+ {
+ EAP_TRACE_ERROR(
+ tools,
+ TRACE_FLAGS_DEFAULT,
+ (EAPL("ERROR: new_eap_type(): parameter receive_network_id is NULL.\n")));
+ EAP_TRACE_END(tools, TRACE_FLAGS_DEFAULT);
+ EAP_ASSERT_ANYWAY_TOOLS(tools);
+ return 0;
+ }
+
+#if defined(USE_EAP_TYPE_GSMSIM)
+ if (eap_type == eap_type_gsmsim)
+ {
+ eap_am_type_gsmsim_c * am_type_gsmsim = ::new_eap_am_type_gsmsim(
+ tools,
+ partner,
+ is_client_when_true,
+ receive_network_id); // Note this function is defined in the platform AM DLL.
+ if (am_type_gsmsim == 0
+ || am_type_gsmsim->get_is_valid() == false)
+ {
+ EAP_TRACE_ERROR(
+ tools,
+ TRACE_FLAGS_DEFAULT,
+ (EAPL("ERROR: new_eap_type(): failed.\n")));
+ EAP_TRACE_END(tools, TRACE_FLAGS_DEFAULT);
+ return 0;
+ }
+
+ type = new eap_type_gsmsim_c(
+ tools,
+ partner,
+ am_type_gsmsim,
+ true,
+ is_client_when_true,
+ receive_network_id);
+ }
+ else
+#endif //#if defined(USE_EAP_TYPE_GSMSIM)
+#if defined(USE_AKA_EAP_TYPE)
+ if (eap_type == eap_type_aka)
+ {
+ eap_am_type_aka_c * am_type_aka = ::new_eap_am_type_aka(
+ tools,
+ partner,
+ is_client_when_true,
+ receive_network_id); // Note this function is defined in the platform AM DLL.
+ if (am_type_aka == 0
+ || am_type_aka->get_is_valid() == false)
+ {
+ delete am_type_aka;
+ EAP_TRACE_ERROR(
+ tools,
+ TRACE_FLAGS_DEFAULT,
+ (EAPL("ERROR: new_eap_type(): failed.\n")));
+ EAP_TRACE_END(tools, TRACE_FLAGS_DEFAULT);
+ return 0;
+ }
+
+ type = new eap_type_aka_c(
+ tools,
+ partner,
+ am_type_aka,
+ true,
+ is_client_when_true,
+ receive_network_id);
+ }
+ else
+#endif //#if defined(USE_AKA_EAP_TYPE)
+#if defined(USE_MSCHAPV2_EAP_TYPE)
+ if (eap_type == eap_type_mschapv2)
+ {
+ eap_am_type_mschapv2_c * am_type_mschapv2
+ = ::new_eap_am_type_mschapv2(
+ tools,
+ partner,
+ receive_network_id); // Note this function is defined in the platform AM DLL.
+ if (am_type_mschapv2 == 0
+ || am_type_mschapv2->get_is_valid() == false)
+ {
+ delete am_type_mschapv2;
+ EAP_TRACE_ERROR(
+ tools,
+ TRACE_FLAGS_DEFAULT,
+ (EAPL("ERROR: new_eap_type(): failed.\n")));
+ EAP_TRACE_END(tools, TRACE_FLAGS_DEFAULT);
+ return 0;
+ }
+
+ type = new eap_type_mschapv2_c(
+ tools,
+ partner,
+ am_type_mschapv2,
+ true,
+ is_client_when_true,
+ receive_network_id);
+ }
+ else
+#endif //#if defined(USE_MSCHAPV2_EAP_TYPE)
+#if defined(USE_SECURID_EAP_TYPE)
+ if (eap_type == eap_type_generic_token_card)
+ {
+ eap_am_type_securid_c * am_type_securid
+ = ::new_eap_am_type_securid(
+ tools,
+ partner,
+ eap_type,
+ receive_network_id); // Note this function is defined in the platform AM DLL.
+ if (am_type_securid == 0
+ || am_type_securid->get_is_valid() == false)
+ {
+ delete am_type_securid;
+ EAP_TRACE_ERROR(
+ tools,
+ TRACE_FLAGS_DEFAULT,
+ (EAPL("ERROR: new_eap_type(): failed.\n")));
+ EAP_TRACE_END(tools, TRACE_FLAGS_DEFAULT);
+ return 0;
+ }
+
+ type = new eap_type_securid_c(
+ tools,
+ partner,
+ am_type_securid,
+ true,
+ eap_type,
+ is_client_when_true,
+ receive_network_id);
+ }
+ else
+#endif //#if defined(USE_SECURID_EAP_TYPE)
+#if defined(USE_LEAP_EAP_TYPE)
+ if (eap_type == eap_type_leap)
+ {
+ eap_am_type_leap_c * am_type_leap
+ = ::new_eap_am_type_leap(
+ tools,
+ partner,
+ is_client_when_true,
+ receive_network_id); // Note this function is defined in the platform AM DLL.
+ if (am_type_leap == 0
+ || am_type_leap->get_is_valid() == false)
+ {
+ EAP_TRACE_ERROR(
+ tools,
+ TRACE_FLAGS_DEFAULT,
+ (EAPL("ERROR: new_eap_type(): failed.\n")));
+ EAP_TRACE_END(tools, TRACE_FLAGS_DEFAULT);
+ return 0;
+ }
+
+ type = new eap_type_leap_c(
+ tools,
+ partner,
+ am_type_leap,
+ true,
+ is_client_when_true,
+ receive_network_id);
+ }
+ else
+#endif //#if defined(USE_LEAP_EAP_TYPE)
+#if defined(USE_TLS_EAP_TYPE)
+ if (eap_type == eap_type_tls)
+ {
+ eap_am_type_tls_peap_c * am_type_tls_peap
+ = ::new_eap_am_type_tls_peap(
+ tools,
+ partner,
+ eap_type,
+ is_client_when_true,
+ receive_network_id); // Note this function is defined in the platform AM DLL.
+ if (am_type_tls_peap == 0
+ || am_type_tls_peap->get_is_valid() == false)
+ {
+ EAP_TRACE_ERROR(
+ tools,
+ TRACE_FLAGS_DEFAULT,
+ (EAPL("ERROR: new_eap_am_type_tls_peap(): failed.\n")));
+ EAP_TRACE_END(tools, TRACE_FLAGS_DEFAULT);
+ return 0;
+ }
+
+ tls_base_record_c * const tls_record
+ = new tls_record_c(
+ tools,
+ am_type_tls_peap,
+ false,
+ 0,
+ false,
+ is_client_when_true,
+ eap_type,
+ receive_network_id);
+ if (tls_record == 0
+ || tls_record->get_is_valid() == false)
+ {
+ EAP_TRACE_ERROR(
+ tools,
+ TRACE_FLAGS_DEFAULT,
+ (EAPL("ERROR: new_eap_am_type_tls_peap(): failed.\n")));
+ EAP_TRACE_END(tools, TRACE_FLAGS_DEFAULT);
+ return 0;
+ }
+
+ type = new eap_type_tls_peap_c(
+ tools,
+ partner,
+ am_type_tls_peap,
+ true,
+ tls_record,
+ true,
+ is_client_when_true,
+ eap_type,
+ receive_network_id);
+ }
+ else
+#endif //#if defined(USE_TLS_EAP_TYPE)
+#if defined(USE_PEAP_EAP_TYPE)
+ if (eap_type == eap_type_peap)
+ {
+ eap_am_type_tls_peap_c * am_type_tls_peap
+ = ::new_eap_am_type_tls_peap(
+ tools,
+ partner,
+ eap_type,
+ is_client_when_true,
+ receive_network_id); // Note this function is defined in the platform AM DLL.
+ if (am_type_tls_peap == 0
+ || am_type_tls_peap->get_is_valid() == false)
+ {
+ EAP_TRACE_ERROR(
+ tools,
+ TRACE_FLAGS_DEFAULT,
+ (EAPL("ERROR: new_eap_am_type_tls_peap(): failed.\n")));
+ EAP_TRACE_END(tools, TRACE_FLAGS_DEFAULT);
+ return 0;
+ }
+
+ eap_core_c * const eap_core
+ = new eap_core_c(
+ tools,
+ 0,
+ is_client_when_true,
+ receive_network_id,
+ true);
+ if (eap_core == 0
+ || eap_core->get_is_valid() == false)
+ {
+ EAP_TRACE_ERROR(
+ tools,
+ TRACE_FLAGS_DEFAULT,
+ (EAPL("ERROR: new eap_core_c(): failed.\n")));
+ EAP_TRACE_END(tools, TRACE_FLAGS_DEFAULT);
+ return 0;
+ }
+
+ tls_base_application_c * const application
+ = new tls_application_eap_core_c(
+ tools,
+ eap_core,
+ true,
+ is_client_when_true,
+ eap_type,
+ receive_network_id);
+ if (application == 0
+ || application->get_is_valid() == false)
+ {
+ EAP_TRACE_ERROR(
+ tools,
+ TRACE_FLAGS_DEFAULT,
+ (EAPL("ERROR: new tls_application_eap_core_c(): failed.\n")));
+ EAP_TRACE_END(tools, TRACE_FLAGS_DEFAULT);
+ return 0;
+ }
+
+ tls_base_record_c * const tls_record
+ = new tls_record_c(
+ tools,
+ am_type_tls_peap,
+ false,
+ application,
+ true,
+ is_client_when_true,
+ eap_type,
+ receive_network_id);
+ if (tls_record == 0
+ || tls_record->get_is_valid() == false)
+ {
+ EAP_TRACE_ERROR(
+ tools,
+ TRACE_FLAGS_DEFAULT,
+ (EAPL("ERROR: new_eap_am_type_tls_peap(): failed.\n")));
+ EAP_TRACE_END(tools, TRACE_FLAGS_DEFAULT);
+ return 0;
+ }
+
+ type = new eap_type_tls_peap_c(
+ tools,
+ partner,
+ am_type_tls_peap,
+ true,
+ tls_record,
+ true,
+ is_client_when_true,
+ eap_type,
+ receive_network_id);
+ }
+ else
+#endif //#if defined(USE_PEAP_EAP_TYPE)
+#if defined(USE_TTLS_EAP_TYPE)
+ if (eap_type == eap_type_ttls)
+ {
+ eap_am_type_tls_peap_c * am_type_tls_ttls
+ = ::new_eap_am_type_tls_peap(
+ tools,
+ partner,
+ eap_type,
+ is_client_when_true,
+ receive_network_id); // Note this function is defined in the platform AM DLL.
+ if (am_type_tls_ttls == 0
+ || am_type_tls_ttls->get_is_valid() == false)
+ {
+ EAP_TRACE_ERROR(
+ tools,
+ TRACE_FLAGS_DEFAULT,
+ (EAPL("ERROR: new_eap_am_type_tls_peap(): failed.\n")));
+ EAP_TRACE_END(tools, TRACE_FLAGS_DEFAULT);
+ return 0;
+ }
+
+ eap_core_c * const eap_core
+ = new eap_core_c(
+ tools,
+ 0,
+ is_client_when_true,
+ receive_network_id,
+ true);
+ if (eap_core == 0
+ || eap_core->get_is_valid() == false)
+ {
+ EAP_TRACE_ERROR(
+ tools,
+ TRACE_FLAGS_DEFAULT,
+ (EAPL("ERROR: new eap_core_c(): failed.\n")));
+ EAP_TRACE_END(tools, TRACE_FLAGS_DEFAULT);
+ return 0;
+ }
+
+ tls_base_application_c * const application
+ = new tls_application_eap_core_c(
+ tools,
+ eap_core,
+ true,
+ is_client_when_true,
+ eap_type,
+ receive_network_id);
+ if (application == 0
+ || application->get_is_valid() == false)
+ {
+ EAP_TRACE_ERROR(
+ tools,
+ TRACE_FLAGS_DEFAULT,
+ (EAPL("ERROR: new tls_application_eap_core_c(): failed.\n")));
+ EAP_TRACE_END(tools, TRACE_FLAGS_DEFAULT);
+ return 0;
+ }
+
+ tls_base_record_c * const tls_record
+ = new tls_record_c(
+ tools,
+ am_type_tls_ttls,
+ false,
+ application,
+ true,
+ is_client_when_true,
+ eap_type,
+ receive_network_id);
+ if (tls_record == 0
+ || tls_record->get_is_valid() == false)
+ {
+ EAP_TRACE_ERROR(
+ tools,
+ TRACE_FLAGS_DEFAULT,
+ (EAPL("ERROR: new_eap_am_type_tls_peap(): failed.\n")));
+ EAP_TRACE_END(tools, TRACE_FLAGS_DEFAULT);
+ return 0;
+ }
+
+ type = new eap_type_tls_peap_c(
+ tools,
+ partner,
+ am_type_tls_ttls,
+ true,
+ tls_record,
+ true,
+ is_client_when_true,
+ eap_type,
+ receive_network_id);
+ }
+ else
+#endif //#if defined(USE_TTLS_EAP_TYPE)
+#if defined(USE_SAESIM_EAP_TYPE)
+ if (eap_type == eap_type_saesim)
+ {
+ type = new eap_type_saesim_core_c(tools, partner, is_client_when_true);
+ }
+ else
+#endif
+#if defined(USE_DUMMY_SIM_EAP_TYPE)
+ if (eap_type == eap_type_sim)
+ {
+ type = new eap_type_dummy_sim_c(tools, partner, is_client_when_true);
+ }
+ else
+#endif
+#if defined(USE_EAP_EXPANDED_TYPES)
+#if defined(USE_EAP_SIMPLE_CONFIG)
+ if (eap_type == eap_expanded_type_simple_config.get_type())
+ {
+ eap_am_type_simple_config_c * am_type_simple_config
+ = ::new_eap_am_type_simple_config(
+ tools,
+ partner,
+ eap_type,
+ is_client_when_true,
+ receive_network_id,
+ configuration_if); // Note this function is defined in the platform AM DLL.
+ if (am_type_simple_config == 0
+ || am_type_simple_config->get_is_valid() == false)
+ {
+ EAP_TRACE_ERROR(
+ tools,
+ TRACE_FLAGS_DEFAULT,
+ (EAPL("ERROR: new_eap_am_type_simple_config(): failed.\n")));
+ EAP_TRACE_END(tools, TRACE_FLAGS_DEFAULT);
+ return 0;
+ }
+
+ simple_config_base_record_c * const simple_config_record
+ = new simple_config_record_c(
+ tools,
+ am_type_simple_config,
+ false,
+ is_client_when_true,
+ receive_network_id);
+ if (simple_config_record == 0
+ || simple_config_record->get_is_valid() == false)
+ {
+ EAP_TRACE_ERROR(
+ tools,
+ TRACE_FLAGS_DEFAULT,
+ (EAPL("ERROR: simple_config_record_c(): failed.\n")));
+ EAP_TRACE_END(tools, TRACE_FLAGS_DEFAULT);
+ return 0;
+ }
+
+ type = new eap_type_simple_config_c(
+ tools,
+ partner,
+ am_type_simple_config,
+ true,
+ simple_config_record,
+ true,
+ is_client_when_true,
+ eap_type,
+ receive_network_id);
+ }
+ else
+#endif //#if defined(USE_EAP_SIMPLE_CONFIG)
+#endif //#if defined(USE_EAP_EXPANDED_TYPES)
+#if defined(USE_FAST_EAP_TYPE)
+ if (eap_type == eap_type_fast)
+ {
+ eap_am_type_tls_peap_c * am_type_tls_peap
+ = ::new_eap_am_type_tls_peap(
+ tools,
+ partner,
+ eap_type,
+ is_client_when_true,
+ receive_network_id); // Note this function is defined in the platform AM DLL.
+ if (am_type_tls_peap == 0
+ || am_type_tls_peap->get_is_valid() == false)
+ {
+ EAP_TRACE_ERROR(
+ tools,
+ TRACE_FLAGS_DEFAULT,
+ (EAPL("ERROR: new_eap_am_type_tls_peap(): failed.\n")));
+ EAP_TRACE_END(tools, TRACE_FLAGS_DEFAULT);
+ return 0;
+ }
+
+ eap_core_c * const eap_core
+ = new eap_core_c(
+ tools,
+ 0,
+ is_client_when_true,
+ receive_network_id,
+ true);
+ if (eap_core == 0
+ || eap_core->get_is_valid() == false)
+ {
+ EAP_TRACE_ERROR(
+ tools,
+ TRACE_FLAGS_DEFAULT,
+ (EAPL("ERROR: new eap_core_c(): failed.\n")));
+ EAP_TRACE_END(tools, TRACE_FLAGS_DEFAULT);
+ return 0;
+ }
+
+ tls_base_application_c * const application
+ = new tls_application_eap_fast_c(
+ tools,
+ eap_core,
+ true,
+ is_client_when_true,
+ eap_type,
+ receive_network_id,
+ am_type_tls_peap);
+ if (application == 0
+ || application->get_is_valid() == false)
+ {
+ EAP_TRACE_ERROR(
+ tools,
+ TRACE_FLAGS_DEFAULT,
+ (EAPL("ERROR: new tls_application_eap_core_c(): failed.\n")));
+ EAP_TRACE_END(tools, TRACE_FLAGS_DEFAULT);
+ return 0;
+ }
+
+ tls_base_record_c * const tls_record
+ = new tls_record_c(
+ tools,
+ am_type_tls_peap,
+ false,
+ application,
+ true,
+ is_client_when_true,
+ eap_type,
+ receive_network_id);
+ if (tls_record == 0
+ || tls_record->get_is_valid() == false)
+ {
+ EAP_TRACE_ERROR(
+ tools,
+ TRACE_FLAGS_DEFAULT,
+ (EAPL("ERROR: new_eap_am_type_tls_peap(): failed.\n")));
+ EAP_TRACE_END(tools, TRACE_FLAGS_DEFAULT);
+ return 0;
+ }
+
+ type = new eap_type_tls_peap_c(
+ tools,
+ partner,
+ am_type_tls_peap,
+ true,
+ tls_record,
+ true,
+ is_client_when_true,
+ eap_type,
+ receive_network_id);
+ }
+ else
+#endif //#if defined(USE_FAST_EAP_TYPE)
+ {
+ EAP_TRACE_ERROR(
+ tools,
+ TRACE_FLAGS_DEFAULT,
+ (EAPL("ERROR: new_eap_type(): EAP-type=0x%08x not supported in this module.\n"),
+ convert_eap_type_to_u32_t(eap_type)));
+ }
+ EAP_TRACE_END(tools, TRACE_FLAGS_DEFAULT);
+ return type;
+}
+
+//--------------------------------------------------
+
+
+
+// End.